00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021
00022
00023
00024
00025 #include "actionmanagerimpl.h"
00026 #include "akregatorconfig.h"
00027 #include "akregator_part.h"
00028 #include "articlelistview.h"
00029 #include "articleviewer.h"
00030 #include "feed.h"
00031 #include "fetchqueue.h"
00032 #include "folder.h"
00033 #include "framemanager.h"
00034 #include "kernel.h"
00035 #include "mainwidget.h"
00036
00037 #include "subscriptionlistview.h"
00038 #include "tabwidget.h"
00039 #include "trayicon.h"
00040 #include "treenode.h"
00041 #include "treenodevisitor.h"
00042
00043 #include <kactionmenu.h>
00044 #include <ktoolbarpopupaction.h>
00045 #include <kaction.h>
00046 #include <KToggleAction>
00047 #include <kactioncollection.h>
00048 #include <kdebug.h>
00049 #include <klocale.h>
00050 #include <kmenu.h>
00051 #include <kshortcut.h>
00052 #include <kstandardshortcut.h>
00053 #include <kstandardaction.h>
00054 #include <kxmlguifactory.h>
00055 #include <kicon.h>
00056
00057 #include <QHash>
00058 #include <QWidget>
00059
00060 namespace Akregator
00061 {
00062
00063 class ActionManagerImpl::NodeSelectVisitor : public TreeNodeVisitor
00064 {
00065 public:
00066 NodeSelectVisitor(ActionManagerImpl* manager) : m_manager(manager) {}
00067
00068 virtual bool visitFeed(Feed* node)
00069 {
00070 QAction* remove = m_manager->action("feed_remove");
00071 if (remove)
00072 remove->setEnabled(true);
00073 QAction* hp = m_manager->action("feed_homepage");
00074 if (hp)
00075 hp->setEnabled(!node->htmlUrl().isEmpty());
00076 m_manager->action("feed_fetch")->setText(i18n("&Fetch Feed"));
00077 m_manager->action("feed_remove")->setText(i18n("&Delete Feed"));
00078 m_manager->action("feed_modify")->setText(i18n("&Edit Feed..."));
00079 m_manager->action("feed_mark_all_as_read")->setText(i18n("&Mark Feed as Read"));
00080
00081 return true;
00082 }
00083
00084 virtual bool visitFolder(Folder* node)
00085 {
00086 QAction* remove = m_manager->action("feed_remove");
00087 if (remove)
00088 remove->setEnabled(node->parent());
00089 QAction* hp = m_manager->action("feed_homepage");
00090 if (hp)
00091 hp->setEnabled(false);
00092
00093 m_manager->action("feed_fetch")->setText(i18n("&Fetch Feeds"));
00094 m_manager->action("feed_remove")->setText(i18n("&Delete Folder"));
00095 m_manager->action("feed_modify")->setText(i18n("&Rename Folder"));
00096 m_manager->action("feed_mark_all_as_read")->setText(i18n("&Mark Feeds as Read"));
00097
00098 return true;
00099 }
00100
00101 private:
00102 ActionManagerImpl* m_manager;
00103 };
00104
00105 class ActionManagerImpl::ActionManagerImplPrivate
00106 {
00107 public:
00108
00109 NodeSelectVisitor* nodeSelectVisitor;
00110 ArticleListView* articleList;
00111 SubscriptionListView* subscriptionListView;
00112 MainWidget* mainWidget;
00113 ArticleViewer* articleViewer;
00114 Part* part;
00115 TrayIcon* trayIcon;
00116 KActionMenu* tagMenu;
00117 KActionCollection* actionCollection;
00118 TabWidget* tabWidget;
00119 KAction* speakSelectedArticlesAction;
00120 FrameManager* frameManager;
00121 };
00122
00123
00124 void ActionManagerImpl::slotNodeSelected(TreeNode* node)
00125 {
00126 if (node != 0)
00127 d->nodeSelectVisitor->visit(node);
00128 }
00129
00130 ActionManagerImpl::ActionManagerImpl(Part* part, QObject* parent ) : ActionManager(parent), d(new ActionManagerImplPrivate)
00131 {
00132 d->nodeSelectVisitor = new NodeSelectVisitor(this);
00133 d->part = part;
00134 d->subscriptionListView = 0;
00135 d->articleList = 0;
00136 d->trayIcon = 0;
00137 d->articleViewer = 0;
00138 d->mainWidget = 0;
00139 d->tabWidget = 0;
00140 d->tagMenu = 0;
00141 d->frameManager = 0;
00142 d->speakSelectedArticlesAction = 0;
00143 d->actionCollection = part->actionCollection();
00144 initPart();
00145 }
00146
00147 ActionManagerImpl::~ActionManagerImpl()
00148 {
00149 delete d->nodeSelectVisitor;
00150 delete d;
00151 d = 0;
00152 }
00153
00154 void ActionManagerImpl::initTrayIcon(TrayIcon* trayIcon)
00155 {
00156 if (d->trayIcon)
00157 return;
00158 else d->trayIcon = trayIcon;
00159
00160 QMenu* traypop = trayIcon->contextMenu();
00161
00162 if (actionCollection()->action("feed_fetch_all"))
00163 traypop->addAction(actionCollection()->action("feed_fetch_all"));
00164 if (actionCollection()->action("options_configure"))
00165 traypop->addAction(actionCollection()->action("options_configure"));
00166 }
00167
00168 void ActionManagerImpl::initPart()
00169 {
00170 KAction *action = d->actionCollection->addAction("file_import");
00171 action->setText(i18n("&Import Feeds..."));
00172 action->setIcon(KIcon("document-import"));
00173 connect(action, SIGNAL(triggered(bool)), d->part, SLOT(fileImport()));
00174 action = d->actionCollection->addAction("file_export");
00175 action->setText(i18n("&Export Feeds..." ));
00176 action->setIcon(KIcon("document-export"));
00177 connect(action, SIGNAL(triggered(bool)), d->part, SLOT(fileExport()));
00178
00179 KAction *configure = d->actionCollection->addAction("options_configure");
00180 configure->setText(i18n("&Configure Akregator..."));
00181 configure->setIcon(KIcon("configure"));
00182 connect(configure, SIGNAL(triggered()), d->part, SLOT(showOptions()));
00183
00184
00185
00186
00187
00188 }
00189
00190 void ActionManagerImpl::initMainWidget(MainWidget* mainWidget)
00191 {
00192 if (d->mainWidget)
00193 return;
00194
00195 d->mainWidget = mainWidget;
00196
00197 KActionCollection* coll = actionCollection();
00198
00199
00200 KAction* action = coll->addAction("feed_homepage");
00201 action->setText(i18n("&Open Homepage"));
00202 connect(action, SIGNAL(triggered(bool)), d->mainWidget, SLOT(slotOpenHomepage()));
00203 action->setShortcuts(KShortcut( "Ctrl+H" ));
00204
00205 action = coll->addAction("feed_add");
00206 action->setIcon(KIcon("feed-subscribe"));
00207 action->setText(i18n("&Add Feed..."));
00208 connect(action, SIGNAL(triggered(bool)), d->mainWidget, SLOT(slotFeedAdd()));
00209 action->setShortcuts(KShortcut( "Insert" ));
00210
00211 action = coll->addAction("feed_add_group");
00212 action->setIcon(KIcon("folder-new"));
00213 action->setText(i18n("Ne&w Folder..."));
00214 connect(action, SIGNAL(triggered(bool)), d->mainWidget, SLOT(slotFeedAddGroup()));
00215 action->setShortcuts(KShortcut( "Shift+Insert" ));
00216
00217 action = coll->addAction("feed_remove");
00218 action->setIcon(KIcon("edit-delete"));
00219 action->setText(i18n("&Delete Feed"));
00220 connect(action, SIGNAL(triggered(bool)), d->mainWidget, SLOT(slotFeedRemove()));
00221 action->setShortcuts(KShortcut( "Alt+Delete" ));
00222
00223 action = coll->addAction("feed_modify");
00224 action->setIcon(KIcon("document-properties"));
00225 action->setText(i18n("&Edit Feed..."));
00226 connect(action, SIGNAL(triggered(bool)), d->mainWidget, SLOT(slotFeedModify()));
00227 action->setShortcuts(KShortcut( "F2" ));
00228
00229 KActionMenu* vm = coll->add<KActionMenu>("view_mode");
00230 vm->setText(i18n("&View Mode"));
00231
00232 QActionGroup* agViewMode = new QActionGroup(this);
00233 KToggleAction *ra = coll->add<KToggleAction>("normal_view");
00234 ra->setIcon(KIcon("view-split-top-bottom"));
00235 ra->setText(i18n("&Normal View"));
00236 connect(ra, SIGNAL(triggered(bool) ), d->mainWidget, SLOT(slotNormalView()));
00237 ra->setShortcuts(KShortcut( "Ctrl+Shift+1" ));
00238 ra->setActionGroup(agViewMode);
00239 vm->addAction(ra);
00240
00241 ra = coll->add<KToggleAction>("widescreen_view");
00242 ra->setIcon(KIcon("view-split-left-right"));
00243 ra->setText(i18n("&Widescreen View"));
00244 connect(ra, SIGNAL(triggered(bool) ), d->mainWidget, SLOT(slotWidescreenView()));
00245 ra->setShortcuts(KShortcut( "Ctrl+Shift+2" ));
00246 ra->setActionGroup(agViewMode);
00247 vm->addAction(ra);
00248
00249 ra = coll->add<KToggleAction>("combined_view");
00250 ra->setIcon(KIcon("view-list-text"));
00251 ra->setText(i18n("C&ombined View"));
00252 connect(ra, SIGNAL(triggered(bool) ), d->mainWidget, SLOT(slotCombinedView()));
00253 ra->setShortcuts(KShortcut( "Ctrl+Shift+3" ));
00254 ra->setActionGroup(agViewMode);
00255 vm->addAction(ra);
00256
00257
00258 action = coll->addAction("feed_fetch");
00259 action->setIcon(KIcon("go-down"));
00260 action->setText(i18n("&Fetch Feed"));
00261 connect(action, SIGNAL(triggered(bool)), d->mainWidget, SLOT(slotFetchCurrentFeed()));
00262 action->setShortcuts(KStandardShortcut::shortcut(KStandardShortcut::Reload));
00263
00264 action = coll->addAction("feed_fetch_all");
00265 action->setIcon(KIcon("go-bottom"));
00266 action->setText(i18n("Fe&tch All Feeds"));
00267 connect(action, SIGNAL(triggered(bool)), d->mainWidget, SLOT(slotFetchAllFeeds()));
00268 action->setShortcuts(KShortcut( "Ctrl+L" ));
00269
00270 KAction *stopAction = coll->addAction("feed_stop");
00271 stopAction->setIcon(KIcon("process-stop"));
00272 stopAction->setText(i18n("&Abort Fetches"));
00273 connect(stopAction, SIGNAL(triggered(bool)), Kernel::self()->fetchQueue(), SLOT(slotAbort()));
00274 stopAction->setShortcut(QKeySequence(Qt::Key_Escape));
00275 stopAction->setEnabled(false);
00276
00277 action = coll->addAction("feed_mark_all_as_read");
00278 action->setIcon(KIcon("mail-mark-read"));
00279 action->setText(i18n("&Mark Feed as Read"));
00280 connect(action, SIGNAL(triggered(bool)), d->mainWidget, SLOT(slotMarkAllRead()));
00281 action->setShortcuts(KShortcut( "Ctrl+R" ));
00282
00283 action = coll->addAction("feed_mark_all_feeds_as_read");
00284 action->setIcon(KIcon("mail-mark-read"));
00285 action->setText(i18n("Ma&rk All Feeds as Read"));
00286 connect(action, SIGNAL(triggered(bool)), d->mainWidget, SLOT(slotMarkAllFeedsRead()));
00287 action->setShortcuts(KShortcut( "Ctrl+Shift+R" ));
00288
00289
00290 KToggleAction *sqf = coll->add<KToggleAction>("show_quick_filter");
00291 sqf->setText(i18n("Show Quick Filter"));
00292 connect(sqf, SIGNAL(triggered(bool) ), d->mainWidget, SLOT(slotToggleShowQuickFilter()));
00293 sqf->setChecked( Settings::showQuickFilter() );
00294
00295 action = coll->addAction("article_open" );
00296 action->setIcon(KIcon("tab-new"));
00297 action->setText(i18n("Open in Tab"));
00298 connect(action, SIGNAL(triggered(bool)), d->mainWidget, SLOT(slotOpenCurrentArticle()));
00299 action->setShortcuts(KShortcut( "Shift+Return" ));
00300
00301 action = coll->addAction("article_open_external" );
00302 action->setIcon(KIcon("window-new"));
00303 action->setText(i18n("Open in External Browser"));
00304 connect(action, SIGNAL(triggered(bool)), d->mainWidget, SLOT(slotOpenCurrentArticleInBrowser()));
00305 action->setShortcuts(KShortcut( "Ctrl+Shift+Return" ));
00306
00307 action = coll->addAction("article_copy_link_address" );
00308 action->setText(i18n("Copy Link Address"));
00309 connect(action, SIGNAL(triggered(bool)), d->mainWidget, SLOT(slotCopyLinkAddress()));
00310
00311 action = coll->addAction("go_prev_unread_article");
00312 action->setText(i18n("Pre&vious Unread Article"));
00313 connect(action, SIGNAL(triggered(bool)), d->mainWidget, SLOT(slotPrevUnreadArticle()));
00314 action->setShortcut(QKeySequence(Qt::Key_Minus));
00315
00316 action = coll->addAction("go_next_unread_article");
00317 action->setText(i18n("Ne&xt Unread Article"));
00318 connect(action, SIGNAL(triggered(bool)), d->mainWidget, SLOT(slotNextUnreadArticle()));
00319 action->setShortcuts(KShortcut(Qt::Key_Equal, Qt::Key_Plus));
00320
00321 action = coll->addAction("article_delete");
00322 action->setIcon(KIcon("edit-delete"));
00323 action->setText(i18n("&Delete"));
00324 connect(action, SIGNAL(triggered(bool)), d->mainWidget, SLOT(slotArticleDelete()));
00325 action->setShortcuts(KShortcut( "Delete" ));
00326
00327 KActionMenu* statusMenu = coll->add<KActionMenu>("article_set_status");
00328 statusMenu->setText(i18n("&Mark As"));
00329
00330
00331
00332
00333
00334
00335
00336
00337
00338
00339
00340
00341 action = coll->addAction("article_set_status_read");
00342 action->setText(i18nc("as in: mark as read","&Read"));
00343 action->setIcon(KIcon("mail-mark-read"));
00344 action->setToolTip(i18n("Mark selected article as read"));
00345 action->setShortcuts(KShortcut( "Ctrl+E" ));
00346 connect(action, SIGNAL(triggered(bool)), d->mainWidget, SLOT(slotSetSelectedArticleRead()));
00347 statusMenu->addAction(action);
00348
00349 action = coll->addAction("article_set_status_new");
00350 action->setText(i18n("&New"));
00351 action->setIcon(KIcon("mail-mark-unread-new"));
00352 action->setShortcuts(KShortcut( "Ctrl+N" ));
00353 action->setToolTip(i18n("Mark selected article as new"));
00354 connect(action, SIGNAL(triggered(bool)), d->mainWidget, SLOT(slotSetSelectedArticleNew()));
00355 statusMenu->addAction(action);
00356
00357
00358 action = coll->addAction("article_set_status_unread");
00359 action->setText(i18n("&Unread"));
00360 action->setIcon(KIcon("mail-mark-unread"));
00361 action->setToolTip(i18n("Mark selected article as unread"));
00362 action->setShortcuts(KShortcut( "Ctrl+U" ));
00363 connect(action, SIGNAL(triggered(bool)), d->mainWidget, SLOT(slotSetSelectedArticleUnread()));
00364 statusMenu->addAction(action);
00365
00366 KToggleAction* importantAction = coll->add<KToggleAction>("article_set_status_important");
00367 importantAction->setText(i18n("&Mark as Important"));
00368 importantAction->setIcon(KIcon("mail-mark-important"));
00369 importantAction->setShortcuts(KShortcut("Ctrl+I"));
00370 importantAction->setCheckedState(KGuiItem(i18n("Remove &Important Mark")));
00371 connect(importantAction, SIGNAL(triggered(bool)), d->mainWidget, SLOT(slotArticleToggleKeepFlag(bool)));
00372
00373 action = coll->addAction("feedstree_move_up");
00374 action->setText(i18n("Move Node Up"));
00375 connect(action, SIGNAL(triggered(bool)), mainWidget, SLOT(slotMoveCurrentNodeUp()));
00376 action->setShortcuts(KShortcut( "Shift+Alt+Up" ));
00377
00378 action = coll->addAction("feedstree_move_down");
00379 action->setText(i18n("Move Node Down"));
00380 connect(action, SIGNAL(triggered(bool)), mainWidget, SLOT(slotMoveCurrentNodeDown()));
00381 action->setShortcuts(KShortcut( "Shift+Alt+Down" ));
00382
00383 action = coll->addAction(i18n("Move Node Left"));
00384 action->setText(i18n("Move Node Left"));
00385 connect(action, SIGNAL(triggered(bool)), mainWidget, SLOT(slotMoveCurrentNodeLeft()));
00386 action->setShortcuts(KShortcut( "Shift+Alt+Left" ));
00387
00388 action = coll->addAction("feedstree_move_right");
00389 action->setText(i18n("Move Node Right"));
00390 connect(action, SIGNAL(triggered(bool)), mainWidget, SLOT(slotMoveCurrentNodeRight()));
00391 action->setShortcuts(KShortcut( "Shift+Alt+Right" ));
00392
00393 action = coll->addAction("file_sendlink");
00394 action->setIcon(KIcon("mail-message-new"));
00395 action->setText(i18n("Send &Link Address..."));
00396 connect(action, SIGNAL(triggered(bool)), mainWidget, SLOT(slotSendLink()));
00397
00398 action = coll->addAction("file_sendfile");
00399 action->setIcon(KIcon("mail-message-new"));
00400 action->setText(i18n("Send &File..."));
00401 connect(action, SIGNAL(triggered(bool)), mainWidget, SLOT(slotSendFile()));
00402 }
00403
00404 void ActionManagerImpl::initArticleViewer(ArticleViewer* articleViewer)
00405 {
00406 if (d->articleViewer)
00407 return;
00408 else
00409 d->articleViewer = articleViewer;
00410 }
00411
00412 void ActionManagerImpl::initArticleListView(ArticleListView* articleList)
00413 {
00414 if (d->articleList)
00415 return;
00416 else
00417 d->articleList = articleList;
00418
00419 KAction *action = actionCollection()->addAction("go_previous_article");
00420 action->setText(i18n("&Previous Article"));
00421 connect(action, SIGNAL(triggered(bool)), articleList, SLOT(slotPreviousArticle()));
00422 action->setShortcuts(KShortcut( "Left" ));
00423 action = actionCollection()->addAction("go_next_article");
00424 action->setText(i18n("&Next Article"));
00425 connect(action, SIGNAL(triggered(bool)), articleList, SLOT(slotNextArticle()));
00426 action->setShortcuts(KShortcut( "Right" ));
00427 }
00428
00429 void ActionManagerImpl::initSubscriptionListView(SubscriptionListView* subscriptionListView)
00430 {
00431 if (d->subscriptionListView)
00432 return;
00433 else
00434 d->subscriptionListView = subscriptionListView;
00435
00436 KActionCollection *coll = actionCollection();
00437
00438 KAction *action = coll->addAction("go_prev_feed");
00439 action->setText(i18n("&Previous Feed"));
00440 connect(action, SIGNAL(triggered(bool)), subscriptionListView, SLOT(slotPrevFeed()));
00441 action->setShortcuts(KShortcut( "P" ));
00442
00443 action = coll->addAction("go_next_feed");
00444 action->setText(i18n("&Next Feed"));
00445 connect(action, SIGNAL(triggered(bool)), subscriptionListView, SLOT(slotNextFeed()));
00446 action->setShortcuts(KShortcut( "N" ));
00447
00448 action = coll->addAction("go_next_unread_feed");
00449 action->setText(i18n("N&ext Unread Feed"));
00450 connect(action, SIGNAL(triggered(bool)), subscriptionListView, SLOT(slotNextUnreadFeed()));
00451 action->setShortcut( QKeySequence(Qt::ALT+Qt::Key_Plus) );
00452
00453 action = coll->addAction("go_prev_unread_feed");
00454 action->setText(i18n("Prev&ious Unread Feed"));
00455 connect(action, SIGNAL(triggered(bool)), subscriptionListView, SLOT(slotPrevUnreadFeed()));
00456 action->setShortcut( QKeySequence(Qt::ALT+Qt::Key_Minus) );
00457
00458 action = coll->addAction("feedstree_home");
00459 action->setText(i18n("Go to Top of Tree"));
00460 connect(action, SIGNAL(triggered(bool)), subscriptionListView, SLOT(slotItemBegin()));
00461 action->setShortcuts(KShortcut( "Ctrl+Home" ));
00462
00463 action = coll->addAction("feedstree_end");
00464 action->setText(i18n("Go to Bottom of Tree"));
00465 connect(action, SIGNAL(triggered(bool)), subscriptionListView, SLOT(slotItemEnd()));
00466 action->setShortcuts(KShortcut( "Ctrl+End" ));
00467
00468 action = coll->addAction("feedstree_left");
00469 action->setText(i18n("Go Left in Tree"));
00470 connect(action, SIGNAL(triggered(bool)), subscriptionListView, SLOT(slotItemLeft()));
00471 action->setShortcuts(KShortcut( "Ctrl+Left" ));
00472
00473 action = coll->addAction("feedstree_right");
00474 action->setText(i18n("Go Right in Tree"));
00475 connect(action, SIGNAL(triggered(bool)), subscriptionListView, SLOT(slotItemRight()));
00476 action->setShortcuts(KShortcut( "Ctrl+Right" ));
00477
00478 action = coll->addAction("feedstree_up");
00479 action->setText(i18n("Go Up in Tree"));
00480 connect(action, SIGNAL(triggered(bool)), subscriptionListView, SLOT(slotItemUp()));
00481 action->setShortcuts(KShortcut( "Ctrl+Up" ));
00482
00483 action = coll->addAction("feedstree_down" );
00484 action->setText(i18n("Go Down in Tree"));
00485 connect(action, SIGNAL(triggered(bool)), subscriptionListView, SLOT(slotItemDown()));
00486 action->setShortcuts(KShortcut( "Ctrl+Down" ));
00487 }
00488
00489 void ActionManagerImpl::initTabWidget(TabWidget* tabWidget)
00490 {
00491 if (d->tabWidget)
00492 return;
00493 else
00494 d->tabWidget = tabWidget;
00495
00496 KActionCollection *coll = actionCollection();
00497
00498 KAction *action = coll->addAction("select_next_tab");
00499 action->setText(i18n("Select Next Tab"));
00500 connect(action, SIGNAL(triggered(bool)), d->tabWidget, SLOT(slotNextTab()));
00501 action->setShortcuts(KShortcut( "Ctrl+Period" ));
00502
00503 action = coll->addAction("select_previous_tab");
00504 action->setText(i18n("Select Previous Tab"));
00505 connect(action, SIGNAL(triggered(bool)), d->tabWidget, SLOT(slotPreviousTab()));
00506 action->setShortcuts(KShortcut( "Ctrl+Comma" ));
00507
00508 action = coll->addAction("tab_detach");
00509 action->setIcon(KIcon("tab-detach"));
00510 action->setText(i18n("Detach Tab"));
00511 connect(action, SIGNAL(triggered(bool)), d->tabWidget, SLOT(slotDetachTab()));
00512 action->setShortcut(QKeySequence(Qt::CTRL+Qt::SHIFT+Qt::Key_B));
00513
00514 action = coll->addAction("tab_copylinkaddress");
00515 action->setText(i18n("Copy Link Address"));
00516 connect(action, SIGNAL(triggered(bool)), d->tabWidget, SLOT(slotCopyLinkAddress()));
00517
00518 action = coll->addAction("tab_remove");
00519 action->setIcon(KIcon("tab-close"));
00520 action->setText(i18n("&Close Tab"));
00521 connect(action, SIGNAL(triggered(bool)), d->tabWidget, SLOT(slotCloseTab()));
00522 action->setShortcuts(KStandardShortcut::close());
00523 }
00524
00525 void ActionManagerImpl::initFrameManager(FrameManager* frameManager)
00526 {
00527 if (d->frameManager)
00528 return;
00529
00530 d->frameManager = frameManager;
00531
00532 KToolBarPopupAction* forward = new KToolBarPopupAction(KIcon("go-next"), i18nc("Go forward in browser history", "Forward"), this);
00533 d->actionCollection->addAction("browser_forward", forward);
00534 forward->setShortcuts(KShortcut("Alt+Right"));
00535 connect(forward, SIGNAL(triggered()), frameManager, SLOT(slotBrowserForward()));
00536
00537 connect(forward->menu(), SIGNAL(aboutToShow()), frameManager, SLOT(slotBrowserForwardAboutToShow()));
00538
00539 KToolBarPopupAction* back = new KToolBarPopupAction(KIcon("go-previous"), i18nc("Go back in browser history", "Back"), this);
00540 d->actionCollection->addAction("browser_back", back);
00541 back->setShortcuts(KShortcut("Alt+Left"));
00542 connect(back, SIGNAL(triggered()), frameManager, SLOT(slotBrowserBack()));
00543
00544 connect(back->menu(), SIGNAL(aboutToShow()), frameManager, SLOT(slotBrowserBackAboutToShow()));
00545
00546 KAction *action = d->actionCollection->addAction("browser_reload");
00547 action->setIcon(KIcon("view-refresh"));
00548 action->setText(i18n("Reload"));
00549 connect(action, SIGNAL(triggered(bool) ), frameManager, SLOT(slotBrowserReload()));
00550
00551 action = d->actionCollection->addAction("browser_stop");
00552 action->setIcon(KIcon("process-stop"));
00553 action->setText(i18n("Stop"));
00554 connect(action, SIGNAL(triggered(bool) ), frameManager, SLOT(slotBrowserStop()));
00555 }
00556
00557 QWidget* ActionManagerImpl::container(const char* name)
00558 {
00559 return d->part->factory()->container(name, d->part);
00560 }
00561
00562
00563 KActionCollection* ActionManagerImpl::actionCollection()
00564 {
00565 return d->actionCollection;
00566 }
00567
00568 QAction* ActionManagerImpl::action(const char* name)
00569 {
00570 return d->actionCollection != 0 ? d->actionCollection->action(name) : 0;
00571 }
00572
00573 }
00574
00575 #include "actionmanagerimpl.moc"