/** class Tray * Reimplementation of the KStatusNotifierItem class */ Tray::Tray(MainWindow * parent) : KStatusNotifierItem(parent) { // set up the context menu KMenu * cm = contextMenu(); cm->addAction( parent->actionCollection()->action("new_download") ); cm->addAction( parent->actionCollection()->action("import_links") ); cm->addSeparator(); cm->addAction( parent->actionCollection()->action("start_all_download") ); cm->addAction( parent->actionCollection()->action("stop_all_download") ); cm->addSeparator(); cm->addAction( parent->actionCollection()->action("konqueror_integration") ); cm->addAction( parent->actionCollection()->action("options_configure") ); // Set up basic tray parameters setCategory(ApplicationStatus); setIconByName("kget"); setTitle(i18n("KGet")); setContextMenu(cm); setAssociatedWidget(parent); setToolTipIconByName("kget"); setToolTipTitle(i18n("Download Manager")); // Not of much use atm, but maybe we want to set this later? // setToolTipSubTitle("[..]"); // filter middle mouse clicks to ask scheduler to paste URL connect( this, SIGNAL(secondaryActivateRequested(QPoint)), this, SLOT(slotActivated()) ); }
BangarangNotifierItem::BangarangNotifierItem(QObject* parent) : KStatusNotifierItem(parent) { setTitle(i18n("Bangarang")); setIconByName("bangarang-notifier"); setStandardActionsEnabled(false); connect(this, SIGNAL(scrollRequested(int,Qt::Orientation)), this, SLOT(handleScrollRequested(int,Qt::Orientation))); connect(this, SIGNAL(secondaryActivateRequested(QPoint)), this, SLOT(handleMiddleClick())); }
KMixDockWidget::KMixDockWidget(KMixWindow* parent) : KStatusNotifierItem(parent) , _oldToolTipValue(-1) , _oldPixmapType('-') , _kmixMainWindow(parent) , _delta(0) { setToolTipIconByName("kmix"); setTitle(i18n( "Volume Control")); setCategory(Hardware); setStatus(Active); // TODO Unity / Gnome only support one type of activation (left-click == right-click) // So we should show here the ViewDockAreaPopup instead of the menu: //bool onlyOneMouseButtonAction = onlyHaveOneMouseButtonAction(); createMenuActions(); connect(this, SIGNAL(scrollRequested(int,Qt::Orientation)), this, SLOT(trayWheelEvent(int,Qt::Orientation))); connect(this, SIGNAL(secondaryActivateRequested(QPoint)), this, SLOT(dockMute())); // For bizarre reasons, we wrap the ViewDockAreaPopup in a KMenu. Must relate to how KStatusNotifierItem works. _dockAreaPopupMenuWrapper = new KMenu(parent); _volWA = new QWidgetAction(_dockAreaPopupMenuWrapper); _dockView = new ViewDockAreaPopup(_dockAreaPopupMenuWrapper, "dockArea", 0, QString("no-guiprofile-yet-in-dock"), parent); _volWA->setDefaultWidget(_dockView); _dockAreaPopupMenuWrapper->addAction(_volWA); connect(contextMenu(), SIGNAL(aboutToShow()), this, SLOT(contextMenuAboutToShow())); ControlManager::instance().addListener( QString(), // All mixers (as the Global master Mixer might change) (ControlChangeType::Type) (ControlChangeType::Volume | ControlChangeType::MasterChanged), this, QString("KMixDockWidget")); // Refresh in all cases. When there is no Golbal Master we still need // to initialize correctly (e.g. for showin 0% or hiding it) refreshVolumeLevels(); }
KDEIntegrationTray::KDEIntegrationTray(Main *qtnote, QObject *parent) : TrayImpl(parent), qtnote(qtnote) { sni = new KStatusNotifierItem("qtnote", this); sni->setIconByName("qtnote"); // TODO review dev mode when no icon in /usr/share sni->setStatus(KStatusNotifierItem::Active); sni->setTitle("Notes"); auto *contextMenu = new Menu; sni->setContextMenu(contextMenu); actNew = new QAction(QIcon(":/icons/new"), tr("&New"), this); contextMenu->addAction(actNew); contextMenu->addSeparator(); contextMenu->addAction(QIcon(":/icons/manager"), tr("&Note Manager"), this, SIGNAL(noteManagerTriggered())); contextMenu->addAction(QIcon(":/icons/options"), tr("&Options"), this, SIGNAL(optionsTriggered())); contextMenu->addAction(QIcon(":/icons/trayicon"), tr("&About"), this, SIGNAL(aboutTriggered())); connect(actNew, SIGNAL(triggered()), SIGNAL(newNoteTriggered())); connect(sni, SIGNAL(activateRequested(bool,QPoint)), SLOT(showNotes(bool,QPoint))); connect(sni, SIGNAL(secondaryActivateRequested(QPoint)), SIGNAL(newNoteTriggered())); }
KNotesApp::KNotesApp() : QWidget(), m_alarm( 0 ), m_listener( 0 ), m_publisher( 0 ), m_find( 0 ), m_findPos( 0 ) { new KNotesAdaptor( this ); QDBusConnection::sessionBus().registerObject( "/KNotes" , this ); kapp->setQuitOnLastWindowClosed( false ); // create the dock widget... m_tray = new KStatusNotifierItem(0); m_tray->setToolTipTitle( i18n( "KNotes: Sticky notes for KDE" ) ); m_tray->setIconByName( "knotes" ); m_tray->setToolTipIconByName( "knotes" ); m_tray->setStatus( KStatusNotifierItem::Active ); m_tray->setCategory( KStatusNotifierItem::ApplicationStatus ); m_tray->setStandardActionsEnabled(false); connect( m_tray, SIGNAL(activateRequested(bool,QPoint)), this, SLOT(slotActivateRequested(bool,QPoint)) ); connect( m_tray, SIGNAL(secondaryActivateRequested(QPoint)), this, SLOT(slotSecondaryActivateRequested(QPoint)) ); // set the initial style #ifdef __GNUC__ #warning FIXME #endif // KNote::setStyle( KNotesGlobalConfig::style() ); // create the GUI... KAction *action = new KAction( KIcon( "document-new" ), i18n( "New Note" ), this ); actionCollection()->addAction( "new_note", action ); action->setGlobalShortcut( KShortcut( Qt::ALT + Qt::SHIFT + Qt::Key_N )); connect( action, SIGNAL(triggered()), SLOT(newNote()) ); action = new KAction( KIcon( "edit-paste" ), i18n( "New Note From Clipboard" ), this ); actionCollection()->addAction( "new_note_clipboard", action ); action->setGlobalShortcut( KShortcut( Qt::ALT + Qt::SHIFT + Qt::Key_C )); connect( action, SIGNAL(triggered()), SLOT(newNoteFromClipboard()) ); action = new KAction( KIcon( "knotes" ), i18n( "Show All Notes" ), this ); actionCollection()->addAction( "show_all_notes", action ); action->setGlobalShortcut( KShortcut( Qt::ALT + Qt::SHIFT + Qt::Key_S )); connect( action, SIGNAL(triggered()), SLOT(showAllNotes()) ); action = new KAction( KIcon( "window-close" ), i18n( "Hide All Notes" ), this ); actionCollection()->addAction( "hide_all_notes", action ); action->setGlobalShortcut( KShortcut( Qt::ALT + Qt::SHIFT + Qt::Key_H )); connect( action, SIGNAL(triggered()), SLOT(hideAllNotes()) ); new KHelpMenu( this, KGlobal::mainComponent().aboutData(), false, actionCollection() ); m_findAction = KStandardAction::find( this, SLOT(slotOpenFindDialog()), actionCollection() ); KStandardAction::preferences( this, SLOT(slotPreferences()), actionCollection() ); KStandardAction::keyBindings( this, SLOT(slotConfigureAccels()), actionCollection() ); //FIXME: no shortcut removing!? KStandardAction::quit( this, SLOT(slotQuit()), actionCollection() )->setShortcut( 0 ); setXMLFile( componentData().componentName() + "appui.rc" ); m_guiBuilder = new KXMLGUIBuilder( this ); m_guiFactory = new KXMLGUIFactory( m_guiBuilder, this ); m_guiFactory->addClient( this ); m_contextMenu = static_cast<KMenu *>( m_guiFactory->container( "knotes_context", this ) ); m_noteMenu = static_cast<KMenu *>( m_guiFactory->container( "notes_menu", this ) ); m_tray->setContextMenu( m_contextMenu ); // get the most recent XML UI file QString xmlFileName = componentData().componentName() + "ui.rc"; QString filter = componentData().componentName() + '/' + xmlFileName; const QStringList fileList = componentData().dirs()->findAllResources( "data", filter ) + componentData().dirs()->findAllResources( "data", xmlFileName ); QString doc; KXMLGUIClient::findMostRecentXMLFile( fileList, doc ); m_noteGUI.setContent( doc ); KConfigGroup config( KGlobal::config(), "Global Keybindings" ); // clean up old config files KNotesLegacy::cleanUp(); // create the resource manager m_manager = new KNotesResourceManager(); connect( m_manager, SIGNAL(sigRegisteredNote(KCal::Journal*)), this, SLOT(createNote(KCal::Journal*)) ); connect( m_manager, SIGNAL(sigDeregisteredNote(KCal::Journal*)), this, SLOT(killNote(KCal::Journal*)) ); // read the notes m_manager->load(); // read the old config files, convert and add them KCal::CalendarLocal calendar( QString::fromLatin1( "UTC" ) ); if ( KNotesLegacy::convert( &calendar ) ) { KCal::Journal::List notes = calendar.journals(); KCal::Journal::List::ConstIterator it; for ( it = notes.constBegin(); it != notes.constEnd(); ++it ) { m_manager->addNewNote( *it ); } m_manager->save(); } // set up the alarm reminder - do it after loading the notes because this // is used as a check if updateNoteActions has to be called for a new note m_alarm = new KNotesAlarm( m_manager, this ); updateNetworkListener(); if ( m_notes.size() == 0 && !kapp->isSessionRestored() ) { newNote(); } updateNoteActions(); }