aboutsummaryrefslogtreecommitdiff
path: root/lumina-desktop/panel-plugins/systemstart
diff options
context:
space:
mode:
Diffstat (limited to 'lumina-desktop/panel-plugins/systemstart')
-rw-r--r--lumina-desktop/panel-plugins/systemstart/ItemWidget.cpp16
-rw-r--r--lumina-desktop/panel-plugins/systemstart/ItemWidget.h8
-rw-r--r--lumina-desktop/panel-plugins/systemstart/StartMenu.cpp115
-rw-r--r--lumina-desktop/panel-plugins/systemstart/StartMenu.h3
-rw-r--r--lumina-desktop/panel-plugins/systemstart/StartMenu.ui89
5 files changed, 211 insertions, 20 deletions
diff --git a/lumina-desktop/panel-plugins/systemstart/ItemWidget.cpp b/lumina-desktop/panel-plugins/systemstart/ItemWidget.cpp
index 2e14c4e5..8754e534 100644
--- a/lumina-desktop/panel-plugins/systemstart/ItemWidget.cpp
+++ b/lumina-desktop/panel-plugins/systemstart/ItemWidget.cpp
@@ -42,6 +42,16 @@ ItemWidget::ItemWidget(QWidget *parent, QString itemPath, QString type, bool gob
name->setText( itemPath.section("/",-1));
text = itemPath.section("/",-1);
}
+ }else if(type.startsWith("chcat::::")){
+ //Category given
+ actButton->setVisible(false);
+ iconPath = LXDG::DesktopCatToIcon(type.section("::::",1,50));
+ if(goback){ iconPath = "go-previous"; type = "chcat::::"; itemPath = "<B>("+itemPath+")</B>"; }
+ icon->setPixmap( LXDG::findIcon(iconPath,"applications-other").pixmap(64,64) );
+ name->setText(itemPath);
+ text = itemPath;
+ icon->setWhatsThis(type);
+ linkPath = type;
}else{
actButton->setVisible(false);
if(itemPath.endsWith("/")){ itemPath.chop(1); }
@@ -75,6 +85,7 @@ ItemWidget::ItemWidget(QWidget *parent, QString itemPath, QString type, bool gob
setupContextMenu();
}
+// - Application constructor
ItemWidget::ItemWidget(QWidget *parent, XDGDesktop item) : QFrame(parent){
createWidget();
isDirectory = false;
@@ -115,15 +126,10 @@ void ItemWidget::createWidget(){
contextMenu = new QMenu();
connect(contextMenu, SIGNAL(aboutToShow()), this, SLOT(actionMenuOpen()) );
connect(contextMenu, SIGNAL(aboutToHide()), this, SLOT(actionMenuClosed()) );
- /*button = new QToolButton(this);
- button->setIconSize( QSize(14,14) );
- button->setAutoRaise(true);*/
actButton = new QToolButton(this);
actButton->setPopupMode(QToolButton::InstantPopup);
- //actButton->setFixedSize( QSize(17,34) );
actButton->setArrowType(Qt::DownArrow);
icon = new QLabel(this);
- //icon->setFixedSize( QSize(34,34) );
name = new QLabel(this);
name->setWordWrap(true);
//Add them to the layout
diff --git a/lumina-desktop/panel-plugins/systemstart/ItemWidget.h b/lumina-desktop/panel-plugins/systemstart/ItemWidget.h
index acb908ec..0f24cec4 100644
--- a/lumina-desktop/panel-plugins/systemstart/ItemWidget.h
+++ b/lumina-desktop/panel-plugins/systemstart/ItemWidget.h
@@ -28,8 +28,14 @@
class ItemWidget : public QFrame{
Q_OBJECT
public:
+ //Overloaded Constructors for various uses
+ // - Favorites (path/type)
ItemWidget(QWidget *parent=0, QString itemPath="", QString type="unknown", bool goback=false);
+ // - Generic Apps
ItemWidget(QWidget *parent=0, XDGDesktop item= XDGDesktop());
+ // - Categories
+ //ItemWidget(QWidget *parent=0, QString cat="");
+
~ItemWidget();
bool gooditem;
@@ -69,7 +75,7 @@ private slots:
protected:
void mouseReleaseEvent(QMouseEvent *event){
if(menuopen){ resetmenuflag(); } //skip this event if a submenu was open
- else if(event->button() == Qt::RightButton){
+ else if(event->button() == Qt::RightButton && !icon->whatsThis().startsWith("chcat::::") ){
menuopen = true;
setupContextMenu();
contextMenu->popup(event->globalPos());
diff --git a/lumina-desktop/panel-plugins/systemstart/StartMenu.cpp b/lumina-desktop/panel-plugins/systemstart/StartMenu.cpp
index a18478e6..3c418ac5 100644
--- a/lumina-desktop/panel-plugins/systemstart/StartMenu.cpp
+++ b/lumina-desktop/panel-plugins/systemstart/StartMenu.cpp
@@ -6,6 +6,7 @@
//===========================================
#include "StartMenu.h"
#include "ui_StartMenu.h"
+//#include <QtConcurrent>
#include <LuminaOS.h>
#include "../../LSession.h"
@@ -18,6 +19,12 @@ StartMenu::StartMenu(QWidget *parent) : QWidget(parent), ui(new Ui::StartMenu){
this->setMouseTracking(true);
sysapps = LSession::handle()->applicationMenu()->currentAppHash();
connect(LSession::handle()->applicationMenu(), SIGNAL(AppMenuUpdated()), this, SLOT(UpdateApps()) );
+ //Need to load the last used setting of the application list
+ QString state = LSession::handle()->DesktopPluginSettings()->value("panelPlugs/systemstart/showcategories", "partial").toString();
+ if(state=="partial"){ui->check_apps_showcats->setCheckState(Qt::PartiallyChecked); }
+ else if(state=="true"){ ui->check_apps_showcats->setCheckState(Qt::Checked); }
+ else{ ui->check_apps_showcats->setCheckState(Qt::Unchecked); }
+ connect(ui->check_apps_showcats, SIGNAL(stateChanged(int)), this, SLOT(catViewChanged()) );
UpdateAll();
QTimer::singleShot(10, this,SLOT(UpdateApps()));
QTimer::singleShot(10, this, SLOT(UpdateFavs()));
@@ -180,6 +187,10 @@ void StartMenu::SortScrollArea(QScrollArea *area){
// PRIVATE SLOTS
// ========================
void StartMenu::LaunchItem(QString path, bool fix){
+ if(path.startsWith("chcat::::")){
+ ChangeCategory(path.section("::::",1,50));
+ return;
+ }
qDebug() << "Launching Item:" << path << fix;
if(!path.isEmpty()){
qDebug() << "Launch Application:" << path;
@@ -189,21 +200,85 @@ void StartMenu::LaunchItem(QString path, bool fix){
}
}
+void StartMenu::ChangeCategory(QString cat){
+ //This only happens on user interaction - make sure to run the update routine in a separate thread
+ CCat = cat;
+ UpdateApps();
+ //QtConcurrent::run(this, &StartMenu::UpdateApps);
+}
+
//Listing Update routines
void StartMenu::UpdateApps(){
ClearScrollArea(ui->scroll_apps);
//Now assemble the apps list (note: this normally happens in the background - not when it is visible/open)
- QStringList cats = sysapps->keys();
- cats.sort();
- cats.removeAll("All");
- //QStringList QL = LSession::handle()->sessionSettings()->value("QuickLaunchApps",QStringList()).toStringList();
- for(int c=0; c<cats.length(); c++){
- QList<XDGDesktop> apps = sysapps->value(cats[c]);
- if(apps.isEmpty()){ continue; }
- //Add the category label to the scroll
- QLabel *catlabel = new QLabel("<b>"+cats[c]+"</b>",ui->scroll_apps->widget());
- catlabel->setAlignment(Qt::AlignCenter);
- ui->scroll_apps->widget()->layout()->addWidget(catlabel);
+ //qDebug() << "Update Apps:" << CCat << ui->check_apps_showcats->checkState();
+ if(ui->check_apps_showcats->checkState() == Qt::PartiallyChecked){
+ //qDebug() << " - Partially Checked";
+ //Show a single page of apps, but still divided up by categories
+ CCat.clear();
+ QStringList cats = sysapps->keys();
+ cats.sort();
+ cats.removeAll("All");
+ for(int c=0; c<cats.length(); c++){
+ QList<XDGDesktop> apps = sysapps->value(cats[c]);
+ if(apps.isEmpty()){ continue; }
+ //Add the category label to the scroll
+ QLabel *catlabel = new QLabel("<b>"+cats[c]+"</b>",ui->scroll_apps->widget());
+ catlabel->setAlignment(Qt::AlignCenter);
+ ui->scroll_apps->widget()->layout()->addWidget(catlabel);
+ //Now add all the apps for this category
+ for(int i=0; i<apps.length(); i++){
+ ItemWidget *it = new ItemWidget(ui->scroll_apps->widget(), apps[i] );
+ if(!it->gooditem){ continue; } //invalid for some reason
+ ui->scroll_apps->widget()->layout()->addWidget(it);
+ connect(it, SIGNAL(NewShortcut()), this, SLOT(UpdateFavs()) );
+ connect(it, SIGNAL(RemovedShortcut()), this, SLOT(UpdateFavs()) );
+ connect(it, SIGNAL(RunItem(QString)), this, SLOT(LaunchItem(QString)) );
+ connect(it, SIGNAL(toggleQuickLaunch(QString, bool)), this, SLOT(UpdateQuickLaunch(QString, bool)) );
+ }
+ }
+
+ }else if(ui->check_apps_showcats->checkState() == Qt::Checked){
+ //qDebug() << " - Checked";
+ //Only show categories to start with - and have the user click-into a cat to see apps
+ if(CCat.isEmpty()){
+ //No cat selected yet - show cats only
+ QStringList cats = sysapps->keys();
+ cats.sort();
+ cats.removeAll("All"); //This is not a "real" category
+ for(int c=0; c<cats.length(); c++){
+ ItemWidget *it = new ItemWidget(ui->scroll_apps->widget(), cats[c], "chcat::::"+cats[c] );
+ if(!it->gooditem){ continue; } //invalid for some reason
+ ui->scroll_apps->widget()->layout()->addWidget(it);
+ //connect(it, SIGNAL(NewShortcut()), this, SLOT(UpdateFavs()) );
+ //connect(it, SIGNAL(RemovedShortcut()), this, SLOT(UpdateFavs()) );
+ connect(it, SIGNAL(RunItem(QString)), this, SLOT(LaunchItem(QString)) );
+ //connect(it, SIGNAL(toggleQuickLaunch(QString, bool)), this, SLOT(UpdateQuickLaunch(QString, bool)) );
+ }
+ }else{
+ //Show the "go back" button
+ ItemWidget *it = new ItemWidget(ui->scroll_apps->widget(), CCat, "chcat::::"+CCat, true);
+ //if(!it->gooditem){ continue; } //invalid for some reason
+ ui->scroll_apps->widget()->layout()->addWidget(it);
+ connect(it, SIGNAL(RunItem(QString)), this, SLOT(LaunchItem(QString)) );
+ //Show apps for this cat
+ QList<XDGDesktop> apps = sysapps->value(CCat);
+ for(int i=0; i<apps.length(); i++){
+ ItemWidget *it = new ItemWidget(ui->scroll_apps->widget(), apps[i] );
+ if(!it->gooditem){ continue; } //invalid for some reason
+ ui->scroll_apps->widget()->layout()->addWidget(it);
+ connect(it, SIGNAL(NewShortcut()), this, SLOT(UpdateFavs()) );
+ connect(it, SIGNAL(RemovedShortcut()), this, SLOT(UpdateFavs()) );
+ connect(it, SIGNAL(RunItem(QString)), this, SLOT(LaunchItem(QString)) );
+ connect(it, SIGNAL(toggleQuickLaunch(QString, bool)), this, SLOT(UpdateQuickLaunch(QString, bool)) );
+ }
+ }
+
+ }else{
+ //qDebug() << " - Not Checked";
+ //No categories at all - just alphabetize all the apps
+ QList<XDGDesktop> apps = sysapps->value("All");
+ CCat.clear();
//Now add all the apps for this category
for(int i=0; i<apps.length(); i++){
ItemWidget *it = new ItemWidget(ui->scroll_apps->widget(), apps[i] );
@@ -216,6 +291,7 @@ void StartMenu::UpdateApps(){
}
}
+
}
void StartMenu::UpdateFavs(){
@@ -313,6 +389,23 @@ void StartMenu::on_stackedWidget_currentChanged(int val){
}
+void StartMenu::catViewChanged(){
+ QString state;
+ switch(ui->check_apps_showcats->checkState()){
+ case Qt::Checked:
+ state = "true";
+ break;
+ case Qt::PartiallyChecked:
+ state = "partial";
+ break;
+ default:
+ state = "false";
+ }
+ LSession::handle()->DesktopPluginSettings()->setValue("panelPlugs/systemstart/showcategories", state);
+ //Now kick off the reload of the apps list
+ UpdateApps();
+ //QtConcurrent::run(this, &StartMenu::UpdateApps); //this was a direct user change - keep it thread safe
+}
//Page Change Buttons
void StartMenu::on_tool_goto_apps_clicked(){
ui->stackedWidget->setCurrentWidget(ui->page_apps);
diff --git a/lumina-desktop/panel-plugins/systemstart/StartMenu.h b/lumina-desktop/panel-plugins/systemstart/StartMenu.h
index 8e2b2a3c..7a85df70 100644
--- a/lumina-desktop/panel-plugins/systemstart/StartMenu.h
+++ b/lumina-desktop/panel-plugins/systemstart/StartMenu.h
@@ -34,6 +34,7 @@ private:
Ui::StartMenu *ui;
QHash<QString, QList<XDGDesktop> > *sysapps;
QStringList favs;
+ QString CCat; //current category
//Simple utility functions
void ClearScrollArea(QScrollArea *area);
@@ -43,11 +44,13 @@ private slots:
void LaunchItem(QString path, bool fix = true);
//Application/Favorite Listings
+ void ChangeCategory(QString cat);
void UpdateApps();
void UpdateFavs();
// Page update routines
void on_stackedWidget_currentChanged(int); //page changed
+ void catViewChanged(); //application categorization view mode changed
//Page Change Buttons
void on_tool_goto_apps_clicked();
diff --git a/lumina-desktop/panel-plugins/systemstart/StartMenu.ui b/lumina-desktop/panel-plugins/systemstart/StartMenu.ui
index f1abbc97..7156b4f3 100644
--- a/lumina-desktop/panel-plugins/systemstart/StartMenu.ui
+++ b/lumina-desktop/panel-plugins/systemstart/StartMenu.ui
@@ -143,7 +143,7 @@
<x>0</x>
<y>0</y>
<width>178</width>
- <height>193</height>
+ <height>177</height>
</rect>
</property>
</widget>
@@ -164,6 +164,9 @@
<verstretch>0</verstretch>
</sizepolicy>
</property>
+ <property name="focusPolicy">
+ <enum>Qt::NoFocus</enum>
+ </property>
<property name="text">
<string>Browse Files</string>
</property>
@@ -189,6 +192,9 @@
<verstretch>0</verstretch>
</sizepolicy>
</property>
+ <property name="focusPolicy">
+ <enum>Qt::NoFocus</enum>
+ </property>
<property name="text">
<string>Browse Applications</string>
</property>
@@ -221,6 +227,9 @@
<verstretch>0</verstretch>
</sizepolicy>
</property>
+ <property name="focusPolicy">
+ <enum>Qt::NoFocus</enum>
+ </property>
<property name="text">
<string>Control Panel</string>
</property>
@@ -246,6 +255,9 @@
<verstretch>0</verstretch>
</sizepolicy>
</property>
+ <property name="focusPolicy">
+ <enum>Qt::NoFocus</enum>
+ </property>
<property name="text">
<string>Quick Settings</string>
</property>
@@ -283,6 +295,9 @@
<verstretch>0</verstretch>
</sizepolicy>
</property>
+ <property name="focusPolicy">
+ <enum>Qt::NoFocus</enum>
+ </property>
<property name="styleSheet">
<string notr="true">QToolButton::menu-arrow{ image: rightarrow-icon; }</string>
</property>
@@ -311,6 +326,9 @@
</item>
<item>
<widget class="QToolButton" name="tool_lock">
+ <property name="focusPolicy">
+ <enum>Qt::NoFocus</enum>
+ </property>
<property name="text">
<string notr="true">lock</string>
</property>
@@ -354,6 +372,9 @@
<verstretch>0</verstretch>
</sizepolicy>
</property>
+ <property name="focusPolicy">
+ <enum>Qt::NoFocus</enum>
+ </property>
<property name="text">
<string>Manage Applications</string>
</property>
@@ -372,6 +393,29 @@
</widget>
</item>
<item>
+ <widget class="Line" name="line_15">
+ <property name="orientation">
+ <enum>Qt::Horizontal</enum>
+ </property>
+ </widget>
+ </item>
+ <item>
+ <widget class="QCheckBox" name="check_apps_showcats">
+ <property name="focusPolicy">
+ <enum>Qt::NoFocus</enum>
+ </property>
+ <property name="text">
+ <string>Show Categories</string>
+ </property>
+ <property name="checked">
+ <bool>true</bool>
+ </property>
+ <property name="tristate">
+ <bool>true</bool>
+ </property>
+ </widget>
+ </item>
+ <item>
<widget class="Line" name="line_4">
<property name="orientation">
<enum>Qt::Horizontal</enum>
@@ -394,8 +438,8 @@
<rect>
<x>0</x>
<y>0</y>
- <width>98</width>
- <height>28</height>
+ <width>178</width>
+ <height>284</height>
</rect>
</property>
</widget>
@@ -437,6 +481,9 @@
<verstretch>0</verstretch>
</sizepolicy>
</property>
+ <property name="focusPolicy">
+ <enum>Qt::NoFocus</enum>
+ </property>
<property name="text">
<string>Configure Desktop</string>
</property>
@@ -456,6 +503,9 @@
</item>
<item>
<widget class="QToolButton" name="tool_launch_deskinfo">
+ <property name="focusPolicy">
+ <enum>Qt::NoFocus</enum>
+ </property>
<property name="text">
<string notr="true">info</string>
</property>
@@ -504,6 +554,9 @@
<layout class="QHBoxLayout" name="horizontalLayout_5">
<item>
<widget class="QToolButton" name="tool_launch_mixer">
+ <property name="focusPolicy">
+ <enum>Qt::NoFocus</enum>
+ </property>
<property name="text">
<string notr="true"/>
</property>
@@ -520,6 +573,9 @@
</item>
<item>
<widget class="QSlider" name="slider_volume">
+ <property name="focusPolicy">
+ <enum>Qt::NoFocus</enum>
+ </property>
<property name="maximum">
<number>100</number>
</property>
@@ -597,6 +653,9 @@
</item>
<item>
<widget class="QSlider" name="slider_bright">
+ <property name="focusPolicy">
+ <enum>Qt::NoFocus</enum>
+ </property>
<property name="minimum">
<number>10</number>
</property>
@@ -655,6 +714,9 @@
<layout class="QHBoxLayout" name="horizontalLayout_4">
<item>
<widget class="QToolButton" name="tool_set_prevwkspace">
+ <property name="focusPolicy">
+ <enum>Qt::NoFocus</enum>
+ </property>
<property name="text">
<string notr="true">prev</string>
</property>
@@ -678,6 +740,9 @@
</item>
<item>
<widget class="QToolButton" name="tool_set_nextwkspace">
+ <property name="focusPolicy">
+ <enum>Qt::NoFocus</enum>
+ </property>
<property name="text">
<string notr="true">next</string>
</property>
@@ -737,6 +802,9 @@
<verstretch>0</verstretch>
</sizepolicy>
</property>
+ <property name="focusPolicy">
+ <enum>Qt::NoFocus</enum>
+ </property>
</widget>
</item>
</layout>
@@ -826,6 +894,9 @@
<verstretch>0</verstretch>
</sizepolicy>
</property>
+ <property name="focusPolicy">
+ <enum>Qt::NoFocus</enum>
+ </property>
<property name="text">
<string>Suspend System</string>
</property>
@@ -888,6 +959,9 @@
<verstretch>0</verstretch>
</sizepolicy>
</property>
+ <property name="focusPolicy">
+ <enum>Qt::NoFocus</enum>
+ </property>
<property name="text">
<string>Restart System</string>
</property>
@@ -913,6 +987,9 @@
<verstretch>0</verstretch>
</sizepolicy>
</property>
+ <property name="focusPolicy">
+ <enum>Qt::NoFocus</enum>
+ </property>
<property name="text">
<string>Power Off System</string>
</property>
@@ -958,6 +1035,9 @@
<verstretch>0</verstretch>
</sizepolicy>
</property>
+ <property name="focusPolicy">
+ <enum>Qt::NoFocus</enum>
+ </property>
<property name="text">
<string>Sign Out User</string>
</property>
@@ -994,6 +1074,9 @@
<verstretch>0</verstretch>
</sizepolicy>
</property>
+ <property name="focusPolicy">
+ <enum>Qt::NoFocus</enum>
+ </property>
<property name="text">
<string>Back</string>
</property>
bgstack15