<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
<head>
  <meta content="text/html;charset=ISO-8859-1" http-equiv="Content-Type">
</head>
<body bgcolor="#ffffff" text="#000000">
I confess I didn't read through the whole thread.&nbsp; I just wanted to say
whatever we do with bookmarks we should be able to organize them into
groups.&nbsp; I would recommend main category and sub.&nbsp; Also to be able to
setup as Bible studies to share.&nbsp; I'll go back to lurking now.<br>
<br>
Peter von Kaehne wrote:
<blockquote cite="mid:49B2E9BF.6030807@gmx.net" type="cite">
  <pre wrap="">The thread I pull up here has some relevance

1) it was never concluded in theory and certainly no conclusions ever
put into practice
2) With more and more applications becoming crossplatform there will be
a growing and quite reasonable expectation by users to switch
applications and be able to make use of their old bookmarks in some form.
3) looking at the wiki page on comparison, it is clear that there is a
semblance of practical consensus between the various implementations of
the feature

a) bookmarks should be hierarchical,
b) should be user editable/arrangable,
c) should allow for some comment
d) should allow both bulk addition via searches and by-hand addition
e) should be exportable/sharable

Eeli suggested in this thread that an editable GenBook with some special
features is the overarching  best representation. I agree with this and
suggested the same on gnomesword-devel, where Eeli referred me back to
this old thread.

So, is it time to resume the debate and bring it to a conclusion?

Peter



Troy A. Griffitts wrote:
  </pre>
  <blockquote type="cite">
    <pre wrap="">Martin Gruner wrote:
    </pre>
    <blockquote type="cite">
      <pre wrap="">Will this be a part of Sword?

Troy, what do you say?
      </pre>
    </blockquote>
    <pre wrap="">Since most of our frontends have some type of verse list functionality, 
I would like for us to have something common in the engine we can all 
use.  This will also benefit our users, allowing them to share these 
between applications.  We would all have to agree on an interface 
though, so I'd appreciate hearing from other frontend developers on the 
proposed functionality and interface.  I would be particularly 
interested in whether you think a 'list' concept meets enough needs to 
warrant a mechanism.  BibleCS has basic verse lists, and also bookmark 
trees.  The bookmark trees seem more useful to me, but I would not have 
a straight forward path to modify BibleCS to use a 'PassageList' 
mechanism for trees.

I have some other comments below.


SWMgr is probably not the best place for this functionality.  SWMgr was 
our first 'manager' create 15+ years ago, and now that the engine has 
grown considerably, this should probably be renamed to something like 
SWModuleMgr, as its main purpose is to be a factory to hand back virtual 
base SWModule * objects.

Are we planning to handle any type of key lists with this interface? 
e.g., both Verse and GenBook references?

We also try to keep the std namespace out of the public interfaces the 
best we can.  It makes bindings easier to implement, thus, where the 
interface methods accept std::string, they should accept const char * or 
SWBuf if they are intentionally non-const.


I would suggest something like:

class KeyListMgr {
public:
        KeyListMgr(cont char *configPath);
}

modeled after the LocaleMgr.

This would add a new subdirectory to our config root (along with 
mods.d/, modules/, locales.d/), something like keylists.d/, and I'm sure 
everyone would like to honor a ~/.sword/keylists.d/ as well.

If we are planning to go all out and extend the list interface to a tree 
interface, maybe a more generic name like BookmarkMgr would be better 
suited.

I realize this doesn't map directly to the purpose that Jonathan 
intended.  I don't know if there is an easy delineation to give us 
multiple uses.

Just my initial thoughts.  Looking forward to the conversation.

        -Troy.




    </pre>
    <blockquote type="cite">
      <blockquote type="cite">
        <pre wrap="">PassageList API:
typedef PassageListMap std::map&lt;std::string, <a class="moz-txt-link-freetext" href="sword::PassageList">sword::PassageList</a>&gt;;

/**
Returns the passage list map, which maps unique names to passage lists.
*/
PassageListMap SWMgr::getPassageLists();

/**
Creates a new passage list with the given name, and adds it to the
passage list map.
There must not already be a passage list with the given name.
*/
PassageList SWMgr::addPassageList(std::string name);

/**
Creates a new passage list with the given name, and initialises it with the
given list of passages.
*/
PassageList SWMgr::addPassageList(std::string name, ListKey passages);

/**
Removes the given passage list.
Returns true on success, and false on failure.
*/
bool SWMgr::removePassageList(PassageList);

/**
Removes the passage list with the given name.
Returns true on success, and false on failure.
*/
bool SWMgr::removePassageList(std::string name);

/**
A passage list must have a unique name to identify itself.
It may also have a description of the list, which can be used by the user.
*/
PassageList
===========
PassageList::get/setName()
PassageList::get/setDescription()

/**
Adds the given passage to the end of the passage list.
*/
PassageList::addPassage(PassageEntry passage);
PassageList::addPassage(VerseKey passage);
PassageList::moveUp(int index);
PassageList::moveDown(int index);

/**
Removes the given passage entry from the list.
*/
PassageList::removePassage(PassageEntry passage)
PassageList::removePassage(int index)

/**
Sorts the passage list.  At present, this will only support sorting it in
canonical order, but in the future, other sort orders may be supported.
*/
void PassageList::sort(PassageListSortOrder order)

/**
Gets a list key with all the passages in the passage list.
*/
ListKey PassageList::getListKey();

/**
Creates a new passage list with the same passages as this passage list, but
with the given new name.
*/
PassageList PassageList::clone(std::string newName)

/**
Returns true if the given verse is contained in the passage list.
*/
boolean PassageList::containsVerse(VerseKey verse)

/**
This class wraps around a VerseKey to allow additional attributes to be
attached to an entry in a passage list.  At present, the main addition that
is planned is attaching comments to passage entries.
*/
PassageEntry
============
/**
Creates a passage entry from the given verse.
*/
PassageEntry(VerseKey verse)

/**
VerseKey PassageEntry::get/setPassage()

/**
For later extension.
*/
std::string PassageEntry::get/setComment()

_______________________________________________
sword-devel mailing list: <a class="moz-txt-link-abbreviated" href="mailto:sword-devel@crosswire.org">sword-devel@crosswire.org</a>
<a class="moz-txt-link-freetext" href="http://www.crosswire.org/mailman/listinfo/sword-devel">http://www.crosswire.org/mailman/listinfo/sword-devel</a>
Instructions to unsubscribe/change your settings at above page
        </pre>
      </blockquote>
      <pre wrap="">
_______________________________________________
sword-devel mailing list: <a class="moz-txt-link-abbreviated" href="mailto:sword-devel@crosswire.org">sword-devel@crosswire.org</a>
<a class="moz-txt-link-freetext" href="http://www.crosswire.org/mailman/listinfo/sword-devel">http://www.crosswire.org/mailman/listinfo/sword-devel</a>
Instructions to unsubscribe/change your settings at above page
      </pre>
    </blockquote>
    <pre wrap="">
_______________________________________________
sword-devel mailing list: <a class="moz-txt-link-abbreviated" href="mailto:sword-devel@crosswire.org">sword-devel@crosswire.org</a>
<a class="moz-txt-link-freetext" href="http://www.crosswire.org/mailman/listinfo/sword-devel">http://www.crosswire.org/mailman/listinfo/sword-devel</a>
Instructions to unsubscribe/change your settings at above page
    </pre>
  </blockquote>
  <pre wrap=""><!---->

_______________________________________________
sword-devel mailing list: <a class="moz-txt-link-abbreviated" href="mailto:sword-devel@crosswire.org">sword-devel@crosswire.org</a>
<a class="moz-txt-link-freetext" href="http://www.crosswire.org/mailman/listinfo/sword-devel">http://www.crosswire.org/mailman/listinfo/sword-devel</a>
Instructions to unsubscribe/change your settings at above page

  </pre>
</blockquote>
</body>
</html>