/// returns index of selected item, -1 if no item selected int CRBookmarkMenu::getSelectedItemIndex() { CRFileHistRecord * bookmarks = _docview->getCurrentFileHistRecord(); int curPage = _docview->getCurPage(); int n = bookmarks->getLastShortcutBookmark()+1; for ( int i=1; i<=n; i++ ) { CRBookmark * bm = bookmarks->getShortcutBookmark(i); int page = 0; if ( bm ) { ldomXPointer p = _docview->getDocument()->createXPointer( bm->getStartPos() ); if ( !p.isNull() ) { /// get page number by bookmark page = _docview->getBookmarkPage( p ); /// get bookmark position text if ( page>0 && page==curPage ) return i-1; } } } return -1; }
CRBookmarkMenu::CRBookmarkMenu(CRGUIWindowManager * wm, LVDocView * docview, int numItems, lvRect & rc, bool goToMode) : CRFullScreenMenu( wm, MCMD_BOOKMARK_LIST, lString16(_("Bookmarks")), numItems, rc ) , _docview(docview) { CRFileHistRecord * bookmarks = docview->getCurrentFileHistRecord(); CRGUIAcceleratorTableRef acc = _wm->getAccTables().get("bookmarks"); if ( acc.isNull() ) acc = _wm->getAccTables().get("menu"); setAccelerators( acc ); setSkinName(lString16("#bookmarks")); int mc = getSkin()->getMinItemCount(); if ( _pageItems < mc ) _pageItems = mc; int n = bookmarks->getLastShortcutBookmark()+1; n = (n + _pageItems - 1) / _pageItems * _pageItems; int minitems = (MIN_BOOKMARK_ITEMS + _pageItems - 1) / _pageItems * _pageItems; if ( n<minitems ) n = minitems; for ( int i=1; i<=n; i++ ) { CRBookmark * bm = bookmarks->getShortcutBookmark(i); int page = 0; if ( bm ) { ldomXPointer p = docview->getDocument()->createXPointer( bm->getStartPos() ); if ( !p.isNull() ) { /// get page number by bookmark page = docview->getBookmarkPage( p ); /// get bookmark position text if ( page<0 ) bm = NULL; } } CRBookmarkMenuItem * item = new CRBookmarkMenuItem( this, i, bm, page ); addItem( item ); } setMode( goToMode ); #ifdef CR_POCKETBOOK bmkDialog = this; #endif }