diff options
author | Ken Moore <ken@pcbsd.org> | 2015-01-21 09:22:27 -0500 |
---|---|---|
committer | Ken Moore <ken@pcbsd.org> | 2015-01-21 09:22:27 -0500 |
commit | 1b194f252557051d4c625b596f2b7928a6cc01db (patch) | |
tree | c815dff4af1ee69a9b4ee1b469aa0ad2313c2aa3 | |
parent | Completely revamp the notepad desktop plugin so that it is now file-based ins... (diff) | |
download | lumina-1b194f252557051d4c625b596f2b7928a6cc01db.tar.gz lumina-1b194f252557051d4c625b596f2b7928a6cc01db.tar.bz2 lumina-1b194f252557051d4c625b596f2b7928a6cc01db.zip |
Add a new panel-plugin: appmenu
This plugin re-creates the classic "start" menu from other OS's.
Also update how panel-plugins open menus, so now the menu will no longer cover the button that opened it.
-rw-r--r-- | lumina-desktop/LPanel.cpp | 1 | ||||
-rw-r--r-- | lumina-desktop/lumina-desktop.pro | 2 | ||||
-rw-r--r-- | lumina-desktop/panel-plugins/NewPP.h | 3 | ||||
-rw-r--r-- | lumina-desktop/panel-plugins/appmenu/LAppMenuPlugin.cpp | 47 | ||||
-rw-r--r-- | lumina-desktop/panel-plugins/appmenu/LAppMenuPlugin.h | 62 | ||||
-rw-r--r-- | lumina-desktop/panel-plugins/systemdashboard/LSysDashboard.cpp | 6 | ||||
-rw-r--r-- | lumina-desktop/panel-plugins/userbutton/LUserButton.cpp | 7 |
7 files changed, 123 insertions, 5 deletions
diff --git a/lumina-desktop/LPanel.cpp b/lumina-desktop/LPanel.cpp index 35d89576..8416faaf 100644 --- a/lumina-desktop/LPanel.cpp +++ b/lumina-desktop/LPanel.cpp @@ -35,6 +35,7 @@ LPanel::LPanel(QSettings *file, int scr, int num, QWidget *parent) : QWidget(){ this->setWindowTitle(""); this->setObjectName("LuminaPanelBackgroundWidget"); + this->setStyleSheet("QToolButton::menu-indicator{ image: none; }"); panelArea->setObjectName("LuminaPanelColor"); layout = new QBoxLayout(QBoxLayout::LeftToRight); layout->setContentsMargins(0,0,0,0); diff --git a/lumina-desktop/lumina-desktop.pro b/lumina-desktop/lumina-desktop.pro index 5a05c878..e71ffa65 100644 --- a/lumina-desktop/lumina-desktop.pro +++ b/lumina-desktop/lumina-desktop.pro @@ -49,6 +49,7 @@ SOURCES += main.cpp \ panel-plugins/systemdashboard/LSysDashboard.cpp \ panel-plugins/systemdashboard/SysMenuQuick.cpp \ panel-plugins/showdesktop/LHomeButton.cpp \ + panel-plugins/appmenu/LAppMenuPlugin.cpp \ desktop-plugins/applauncher/AppLauncherPlugin.cpp \ desktop-plugins/desktopview/DesktopViewPlugin.cpp \ desktop-plugins/notepad/NotepadPlugin.cpp \ @@ -87,6 +88,7 @@ HEADERS += Globals.h \ panel-plugins/systemdashboard/LSysDashboard.h \ panel-plugins/systemdashboard/SysMenuQuick.h \ panel-plugins/showdesktop/LHomeButton.h \ + panel-plugins/appmenu/LAppMenuPlugin.h \ desktop-plugins/SamplePlugin.h \ desktop-plugins/calendar/CalendarPlugin.h \ desktop-plugins/applauncher/AppLauncherPlugin.h \ diff --git a/lumina-desktop/panel-plugins/NewPP.h b/lumina-desktop/panel-plugins/NewPP.h index 6be3ae17..6c5c369c 100644 --- a/lumina-desktop/panel-plugins/NewPP.h +++ b/lumina-desktop/panel-plugins/NewPP.h @@ -22,6 +22,7 @@ #include "taskmanager/LTaskManagerPlugin.h" #include "systemdashboard/LSysDashboard.h" #include "showdesktop/LHomeButton.h" +#include "appmenu/LAppMenuPlugin.h" #include "systemtray/LSysTray.h" //must be last due to X11 compile issues class NewPP{ @@ -49,6 +50,8 @@ public: plug = new LClock(parent, plugin, horizontal); }else if(plugin.startsWith("systemdashboard---")){ plug = new LSysDashboard(parent, plugin, horizontal); + }else if(plugin.startsWith("appmenu---")){ + plug = new LAppMenuPlugin(parent, plugin, horizontal); }else{ qWarning() << "Invalid Panel Plugin:"<<plugin << " -- Ignored"; } diff --git a/lumina-desktop/panel-plugins/appmenu/LAppMenuPlugin.cpp b/lumina-desktop/panel-plugins/appmenu/LAppMenuPlugin.cpp new file mode 100644 index 00000000..c38c4d3f --- /dev/null +++ b/lumina-desktop/panel-plugins/appmenu/LAppMenuPlugin.cpp @@ -0,0 +1,47 @@ +//=========================================== +// Lumina-DE source code +// Copyright (c) 2015, Ken Moore +// Available under the 3-clause BSD license +// See the LICENSE file for full details +//=========================================== +#include "LAppMenuPlugin.h" +#include "../../LSession.h" + +#include <LuminaXDG.h> + +LAppMenuPlugin::LAppMenuPlugin(QWidget *parent, QString id, bool horizontal) : LPPlugin(parent, id, horizontal){ + button = new QToolButton(this); + button->setAutoRaise(true); + button->setToolButtonStyle(Qt::ToolButtonTextBesideIcon); + button->setMenu( LSession::handle()->applicationMenu() ); + button->setPopupMode(QToolButton::InstantPopup); + this->layout()->setContentsMargins(0,0,0,0); + this->layout()->addWidget(button); + + + QTimer::singleShot(0,this, SLOT(OrientationChange())); //Update icons/sizes +} + +LAppMenuPlugin::~LAppMenuPlugin(){ + +} + +void LAppMenuPlugin::updateButtonVisuals(){ + button->setToolTip( tr("Quickly launch applications or open files")); + button->setText( tr("Start Here") ); + //Use the PC-BSD icon by default (or the Lumina icon for non-PC-BSD systems) + button->setIcon( LXDG::findIcon("pcbsd","Lumina-DE") ); +} + +// ======================== +// PRIVATE FUNCTIONS +// ======================== +/*void LAppMenuPlugin::openMenu(){ + usermenu->UpdateMenu(); + menu->popup(this->mapToGlobal(QPoint(0,0))); +} + +void LAppMenuPlugin::closeMenu(){ + menu->hide(); +}*/ + diff --git a/lumina-desktop/panel-plugins/appmenu/LAppMenuPlugin.h b/lumina-desktop/panel-plugins/appmenu/LAppMenuPlugin.h new file mode 100644 index 00000000..cd8d1c1e --- /dev/null +++ b/lumina-desktop/panel-plugins/appmenu/LAppMenuPlugin.h @@ -0,0 +1,62 @@ +//=========================================== +// Lumina-DE source code +// Copyright (c) 2015, Ken Moore +// Available under the 3-clause BSD license +// See the LICENSE file for full details +//=========================================== +// This panel plugin is a re-creation of the classic "start" menu +//=========================================== +#ifndef _LUMINA_DESKTOP_APP_MENU_PANEL_PLUGIN_H +#define _LUMINA_DESKTOP_APP_MENU_PANEL_PLUGIN_H + +// Qt includes +#include <QMenu> +#include <QToolButton> +#include <QString> +#include <QWidget> + + +// Lumina-desktop includes +#include "../LPPlugin.h" //main plugin widget + + +// PANEL PLUGIN BUTTON +class LAppMenuPlugin : public LPPlugin{ + Q_OBJECT + +public: + LAppMenuPlugin(QWidget *parent = 0, QString id = "appmenu", bool horizontal=true); + ~LAppMenuPlugin(); + +private: + QToolButton *button; + + void updateButtonVisuals(); + +private slots: + //void openMenu(); + //void closeMenu(); + +public slots: + void OrientationChange(){ + if(this->layout()->direction()==QBoxLayout::LeftToRight){ + this->setSizePolicy(QSizePolicy::Preferred, QSizePolicy::MinimumExpanding); + button->setIconSize( QSize(this->height(), this->height()) ); + }else{ + this->setSizePolicy(QSizePolicy::MinimumExpanding, QSizePolicy::Preferred); + button->setIconSize( QSize(this->width(), this->width()) ); + } + this->layout()->update(); + updateButtonVisuals(); + } + + void LocaleChange(){ + updateButtonVisuals(); + } + + void ThemeChange(){ + updateButtonVisuals(); + } +}; + +#endif
\ No newline at end of file diff --git a/lumina-desktop/panel-plugins/systemdashboard/LSysDashboard.cpp b/lumina-desktop/panel-plugins/systemdashboard/LSysDashboard.cpp index 4e5b3139..8f663b0f 100644 --- a/lumina-desktop/panel-plugins/systemdashboard/LSysDashboard.cpp +++ b/lumina-desktop/panel-plugins/systemdashboard/LSysDashboard.cpp @@ -13,7 +13,7 @@ LSysDashboard::LSysDashboard(QWidget *parent, QString id, bool horizontal) : LPP button = new QToolButton(this); button->setAutoRaise(true); button->setToolButtonStyle(Qt::ToolButtonIconOnly); - button->setToolTip(QString("System Dashboard")); + button->setPopupMode(QToolButton::DelayedPopup); //make sure it runs the update routine first connect(button, SIGNAL(clicked()), this, SLOT(openMenu())); this->layout()->setContentsMargins(0,0,0,0); this->layout()->addWidget(button); @@ -24,6 +24,7 @@ LSysDashboard::LSysDashboard(QWidget *parent, QString id, bool horizontal) : LPP mact->setDefaultWidget(sysmenu); menu->addAction(mact); + button->setMenu(menu); QTimer::singleShot(0,this, SLOT(OrientationChange())); //Update icons/sizes } @@ -38,6 +39,7 @@ void LSysDashboard::updateIcon(bool force){ //For the visual, show battery state only if important static bool batcharging = false; QPixmap pix; + button->setToolTip(tr("System Dashboard")); if(LOS::hasBattery()){ int bat = LOS::batteryCharge(); bool charging = LOS::batteryIsCharging(); @@ -79,7 +81,7 @@ void LSysDashboard::resetIcon(){ void LSysDashboard::openMenu(){ sysmenu->UpdateMenu(); - menu->popup(this->mapToGlobal(QPoint(0,0))); + button->showMenu(); } void LSysDashboard::closeMenu(){ diff --git a/lumina-desktop/panel-plugins/userbutton/LUserButton.cpp b/lumina-desktop/panel-plugins/userbutton/LUserButton.cpp index 1100f37a..c33f9023 100644 --- a/lumina-desktop/panel-plugins/userbutton/LUserButton.cpp +++ b/lumina-desktop/panel-plugins/userbutton/LUserButton.cpp @@ -11,7 +11,7 @@ LUserButtonPlugin::LUserButtonPlugin(QWidget *parent, QString id, bool horizonta button = new QToolButton(this); button->setAutoRaise(true); button->setToolButtonStyle(Qt::ToolButtonTextBesideIcon); - + button->setPopupMode(QToolButton::DelayedPopup); //make sure it runs the update routine first connect(button, SIGNAL(clicked()), this, SLOT(openMenu())); this->layout()->setContentsMargins(0,0,0,0); this->layout()->addWidget(button); @@ -23,6 +23,7 @@ LUserButtonPlugin::LUserButtonPlugin(QWidget *parent, QString id, bool horizonta mact->setDefaultWidget(usermenu); menu->addAction(mact); + button->setMenu(menu); QTimer::singleShot(0,this, SLOT(OrientationChange())); //Update icons/sizes } @@ -31,7 +32,7 @@ LUserButtonPlugin::~LUserButtonPlugin(){ } void LUserButtonPlugin::updateButtonVisuals(){ - button->setToolTip(QString("Quickly launch applications or open files")); + button->setToolTip(tr("Quickly launch applications or open files")); button->setText( SYSTEM::user() ); if( QFile::exists(QDir::homePath()+"/.loginIcon.png") ){ button->setIcon( QIcon(QDir::homePath()+"/.loginIcon.png") ); @@ -45,7 +46,7 @@ void LUserButtonPlugin::updateButtonVisuals(){ // ======================== void LUserButtonPlugin::openMenu(){ usermenu->UpdateMenu(); - menu->popup(this->mapToGlobal(QPoint(0,0))); + button->showMenu(); } void LUserButtonPlugin::closeMenu(){ |