📄 krbookmarkhandler.cpp
字号:
int id = menu->insertItem(QIconSet(krLoader->loadIcon(bm->icon(), KIcon::Small)), bm->text(), newMenu, -1 /* dummy id */, -1 /* end of list */); if( !_bookmarkIDTable.find( menu ) ) _bookmarkIDTable.insert( menu, new QMap<int, KrBookmark *> ); (*_bookmarkIDTable[ menu ])[ id ] = bm; ++inSecondaryMenu; buildMenu(bm, newMenu); --inSecondaryMenu; } for (KrBookmark *bm = parent->children().first(); bm; bm = parent->children().next()) { if (bm->isFolder()) continue; if (bm->isSeparator() ) { menu->insertSeparator(); continue; } int itemIndex = bm->plug(menu, -1 /* end of list */); CONNECT_BM(bm); int id = bm->itemId( itemIndex ); if( !_bookmarkIDTable.find( menu ) ) _bookmarkIDTable.insert( menu, new QMap<int, KrBookmark *> ); (*_bookmarkIDTable[ menu ])[ id ] = bm; } if (!inSecondaryMenu) { krConfig->setGroup( "Private" ); bool hasPopularURLs = krConfig->readBoolEntry( "BM Popular URLs", true ); bool hasDevices = krConfig->readBoolEntry( "BM Devices", true ); bool hasLan = krConfig->readBoolEntry( "BM Lan", true ); bool hasVirtualFS = krConfig->readBoolEntry( "BM Virtual FS", true ); bool hasJumpback = krConfig->readBoolEntry( "BM Jumpback", true ); int itemIndex; if( hasPopularURLs ) { menu->insertSeparator(); // add the popular links submenu KPopupMenu *newMenu = new KPopupMenu(menu); itemIndex = menu->insertItem(QIconSet(krLoader->loadIcon("bookmark_folder", KIcon::Small)), i18n("Popular URLs"), newMenu, -1 /* dummy id */, -1 /* end of list */); _specialBookmarkIDs.append( itemIndex ); // add the top 15 urls #define MAX 15 KURL::List list = krApp->popularUrls->getMostPopularUrls(MAX); KURL::List::Iterator it; for (it = list.begin(); it != list.end(); ++it) { QString name; if ((*it).isLocalFile()) name = (*it).path(); else name = (*it).prettyURL(); // note: these bookmark are put into the private collection // as to not spam the general collection KrBookmark *bm = KrBookmark::getExistingBookmark(name, _privateCollection); if (!bm) bm = new KrBookmark(name, *it, _privateCollection); bm->plug(newMenu); CONNECT_BM(bm); } newMenu->insertSeparator(); krPopularUrls->plug(newMenu); newMenu->installEventFilter(this); } // do we need to add special bookmarks? if (SPECIAL_BOOKMARKS) { if( hasDevices || hasLan || hasVirtualFS || hasJumpback ) menu->insertSeparator(); KrBookmark *bm; // note: special bookmarks are not kept inside the _bookmarks list and added ad-hoc if( hasDevices ) { bm = KrBookmark::devices(_collection); itemIndex = bm->plug(menu); _specialBookmarkIDs.append( bm->itemId( itemIndex ) ); CONNECT_BM(bm); } if( hasLan ) { bm = KrBookmark::lan(_collection); itemIndex = bm->plug(menu); _specialBookmarkIDs.append( bm->itemId( itemIndex ) ); CONNECT_BM(bm); } if( hasVirtualFS ) { bm = KrBookmark::virt(_collection); itemIndex = bm->plug(menu); _specialBookmarkIDs.append( bm->itemId( itemIndex ) ); CONNECT_BM(bm); } if( hasJumpback ) { // add the jump-back button itemIndex = krJumpBack->plug(menu); _specialBookmarkIDs.append( krJumpBack->itemId( itemIndex ) ); menu->insertSeparator(); itemIndex = krSetJumpBack->plug(menu); _specialBookmarkIDs.append( krSetJumpBack->itemId( itemIndex ) ); } } if( !hasJumpback ) menu->insertSeparator(); itemIndex = menu->insertItem(krLoader->loadIcon("bookmark_add", KIcon::Small), i18n("Bookmark Current"), BookmarkCurrent); _specialBookmarkIDs.append( itemIndex ); itemIndex = menu->insertItem(krLoader->loadIcon("bookmark", KIcon::Small), i18n("Manage Bookmarks"), ManageBookmarks); _specialBookmarkIDs.append( itemIndex ); // make sure the menu is connected to us disconnect(menu, SIGNAL(activated(int)), 0, 0); connect(menu, SIGNAL(activated(int)), this, SLOT(menuOperation(int))); } menu->installEventFilter(this);}void KrBookmarkHandler::clearBookmarks(KrBookmark *root) { KrBookmark *bm = root->children().first(); while (bm) { if (bm->isFolder()) clearBookmarks(bm); else { bm->unplugAll(); delete bm; } bm = root->children().next(); } root->children().clear();}void KrBookmarkHandler::bookmarksChanged(const QString&, const QString&) { importFromFile();}bool KrBookmarkHandler::eventFilter( QObject *obj, QEvent *ev ) { if (ev->type() == QEvent::MouseButtonRelease) { switch (static_cast<QMouseEvent*>(ev)->button()) { case RightButton: _middleClick = false; if( obj->inherits( "QPopupMenu" ) ) { int id = static_cast<QPopupMenu*>(obj)->idAt( static_cast<QMouseEvent*>(ev)->pos() ); if( obj == _mainBookmarkPopup && _specialBookmarkIDs.contains( id ) ) { rightClickOnSpecialBookmark(); return true; } if( _bookmarkIDTable.find( obj ) ) { QMap<int, KrBookmark*> * table = _bookmarkIDTable[ obj ]; if( table && table->count( id ) ) { KrBookmark *bm = (*table)[ id ]; rightClicked( static_cast<QPopupMenu*>(obj), id, bm ); return true; } } } case LeftButton: _middleClick = false; break; case MidButton: _middleClick = true; break; default: break; } } return QObject::eventFilter(obj, ev);}#define POPULAR_URLS_ID 100100#define DEVICES_ID 100101#define LAN_ID 100103#define VIRTUAL_FS_ID 100102#define JUMP_BACK_ID 100104void KrBookmarkHandler::rightClickOnSpecialBookmark() { krConfig->setGroup( "Private" ); bool hasPopularURLs = krConfig->readBoolEntry( "BM Popular URLs", true ); bool hasDevices = krConfig->readBoolEntry( "BM Devices", true ); bool hasLan = krConfig->readBoolEntry( "BM Lan", true ); bool hasVirtualFS = krConfig->readBoolEntry( "BM Virtual FS", true ); bool hasJumpback = krConfig->readBoolEntry( "BM Jumpback", true ); QPopupMenu menu( _mainBookmarkPopup ); menu.setCaption( i18n( "Enable special bookmarks" ) ); menu.setCheckable( true ); menu.insertItem( i18n( "Popular URLs" ), POPULAR_URLS_ID ); menu.setItemChecked( POPULAR_URLS_ID, hasPopularURLs ); menu.insertItem( i18n( "Devices" ), DEVICES_ID ); menu.setItemChecked( DEVICES_ID, hasDevices ); menu.insertItem( i18n( "Local Network" ), LAN_ID ); menu.setItemChecked( LAN_ID, hasLan ); menu.insertItem( i18n( "Virtual Filesystem" ), VIRTUAL_FS_ID ); menu.setItemChecked( VIRTUAL_FS_ID, hasVirtualFS ); menu.insertItem( i18n( "Jump back" ), JUMP_BACK_ID ); menu.setItemChecked( JUMP_BACK_ID, hasJumpback ); connect( _mainBookmarkPopup, SIGNAL( highlighted( int ) ), &menu, SLOT( close() ) ); connect( _mainBookmarkPopup, SIGNAL( activated( int ) ), &menu, SLOT( close() ) ); int result = menu.exec( QCursor::pos() ); bool doCloseMain = true; krConfig->setGroup( "Private" ); switch( result ) { case POPULAR_URLS_ID: krConfig->writeEntry( "BM Popular URLs", !hasPopularURLs ); break; case DEVICES_ID: krConfig->writeEntry( "BM Devices", !hasDevices ); break; case LAN_ID: krConfig->writeEntry( "BM Lan", !hasLan ); break; case VIRTUAL_FS_ID: krConfig->writeEntry( "BM Virtual FS", !hasVirtualFS ); break; case JUMP_BACK_ID: krConfig->writeEntry( "BM Jumpback", !hasJumpback ); break; default: doCloseMain = false; break; } menu.close(); if( doCloseMain && _mainBookmarkPopup ) _mainBookmarkPopup->close();}#define OPEN_ID 100200#define OPEN_NEW_TAB_ID 100201#define DELETE_ID 100202void KrBookmarkHandler::rightClicked( QPopupMenu *menu, int /*id*/, KrBookmark * bm ) { QPopupMenu popup( _mainBookmarkPopup ); popup.insertItem( krLoader->loadIcon( "fileopen", KIcon::Panel ), i18n( "Open" ), OPEN_ID ); popup.insertItem( krLoader->loadIcon( "tab_new", KIcon::Panel ), i18n( "Open in a new tab" ), OPEN_NEW_TAB_ID ); popup.insertSeparator(); popup.insertItem( krLoader->loadIcon( "editdelete", KIcon::Panel ), i18n( "Delete" ), DELETE_ID ); connect( menu, SIGNAL( highlighted( int ) ), &popup, SLOT( close() ) ); connect( menu, SIGNAL( activated( int ) ), &popup, SLOT( close() ) ); int result = popup.exec( QCursor::pos() ); popup.close(); if( _mainBookmarkPopup && result >= OPEN_ID && result <= DELETE_ID ) { _mainBookmarkPopup->close(); } switch( result ) { case OPEN_ID: SLOTS->refresh( bm->url() ); break; case OPEN_NEW_TAB_ID: SLOTS->newTab( bm->url() ); break; case DELETE_ID: deleteBookmark( bm ); break; }}// used to monitor middle clicks. if mid is found, then the// bookmark is opened in a new tab. ugly, but easier than overloading// KAction and KActionCollection.void KrBookmarkHandler::slotActivated(const KURL& url) { if (_middleClick) SLOTS->newTab(url); else SLOTS->refresh(url);}#include "krbookmarkhandler.moc"
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -