aboutsummaryrefslogtreecommitdiff
path: root/src-qt5/core-utils
diff options
context:
space:
mode:
authorKen Moore <moorekou@gmail.com>2016-06-29 12:26:59 -0400
committerKen Moore <moorekou@gmail.com>2016-06-29 12:26:59 -0400
commit7ae2868785f32f9bba49df22c9679fdb23edb263 (patch)
tree923863ddfb08896d40157cb8791db57468517428 /src-qt5/core-utils
parentAdd Control+[shift]+Tab shortcuts for cycling between open windows in grouped... (diff)
parentAnother couple quick fixes for the FreeBSD port files. (diff)
downloadlumina-7ae2868785f32f9bba49df22c9679fdb23edb263.tar.gz
lumina-7ae2868785f32f9bba49df22c9679fdb23edb263.tar.bz2
lumina-7ae2868785f32f9bba49df22c9679fdb23edb263.zip
Merge branch 'master' of github.com:trueos/lumina
Diffstat (limited to 'src-qt5/core-utils')
-rw-r--r--src-qt5/core-utils/lumina-config/KeyCatch.h106
-rw-r--r--src-qt5/core-utils/lumina-config/KeyCatch.ui88
-rw-r--r--src-qt5/core-utils/lumina-config/PanelWidget.cpp44
-rw-r--r--src-qt5/core-utils/lumina-config/PanelWidget.h9
-rw-r--r--src-qt5/core-utils/lumina-config/globals.h10
-rw-r--r--src-qt5/core-utils/lumina-config/lumina-config.pro11
-rw-r--r--src-qt5/core-utils/lumina-config/main.cpp5
-rw-r--r--src-qt5/core-utils/lumina-config/mainUI.cpp1932
-rw-r--r--src-qt5/core-utils/lumina-config/mainUI.h171
-rw-r--r--src-qt5/core-utils/lumina-config/mainUI.ui1792
-rw-r--r--src-qt5/core-utils/lumina-config/mainWindow.cpp98
-rw-r--r--src-qt5/core-utils/lumina-config/mainWindow.h9
-rw-r--r--src-qt5/core-utils/lumina-config/mainWindow.ui27
-rw-r--r--src-qt5/core-utils/lumina-config/pages/PageWidget.h6
-rw-r--r--src-qt5/core-utils/lumina-config/pages/getPage.h39
-rw-r--r--src-qt5/core-utils/lumina-config/pages/page_autostart.cpp153
-rw-r--r--src-qt5/core-utils/lumina-config/pages/page_autostart.h38
-rw-r--r--src-qt5/core-utils/lumina-config/pages/page_autostart.ui128
-rw-r--r--src-qt5/core-utils/lumina-config/pages/page_defaultapps.cpp430
-rw-r--r--src-qt5/core-utils/lumina-config/pages/page_defaultapps.h45
-rw-r--r--src-qt5/core-utils/lumina-config/pages/page_defaultapps.ui19
-rw-r--r--src-qt5/core-utils/lumina-config/pages/page_fluxbox_keys.cpp200
-rw-r--r--src-qt5/core-utils/lumina-config/pages/page_fluxbox_keys.h44
-rw-r--r--src-qt5/core-utils/lumina-config/pages/page_fluxbox_keys.ui12
-rw-r--r--src-qt5/core-utils/lumina-config/pages/page_fluxbox_settings.cpp170
-rw-r--r--src-qt5/core-utils/lumina-config/pages/page_fluxbox_settings.h43
-rw-r--r--src-qt5/core-utils/lumina-config/pages/page_fluxbox_settings.ui16
-rw-r--r--src-qt5/core-utils/lumina-config/pages/page_interface_desktop.cpp152
-rw-r--r--src-qt5/core-utils/lumina-config/pages/page_interface_desktop.h42
-rw-r--r--src-qt5/core-utils/lumina-config/pages/page_interface_menu.cpp164
-rw-r--r--src-qt5/core-utils/lumina-config/pages/page_interface_menu.h41
-rw-r--r--src-qt5/core-utils/lumina-config/pages/page_interface_menu.ui8
-rw-r--r--src-qt5/core-utils/lumina-config/pages/page_interface_panels.cpp143
-rw-r--r--src-qt5/core-utils/lumina-config/pages/page_interface_panels.h48
-rw-r--r--src-qt5/core-utils/lumina-config/pages/page_main.cpp82
-rw-r--r--src-qt5/core-utils/lumina-config/pages/page_main.h6
-rw-r--r--src-qt5/core-utils/lumina-config/pages/page_main.ui41
-rw-r--r--src-qt5/core-utils/lumina-config/pages/page_sample.cpp48
-rw-r--r--src-qt5/core-utils/lumina-config/pages/page_sample.h33
-rw-r--r--src-qt5/core-utils/lumina-config/pages/page_session_locale.cpp113
-rw-r--r--src-qt5/core-utils/lumina-config/pages/page_session_locale.h35
-rw-r--r--src-qt5/core-utils/lumina-config/pages/page_session_locale.ui8
-rw-r--r--src-qt5/core-utils/lumina-config/pages/page_session_options.cpp172
-rw-r--r--src-qt5/core-utils/lumina-config/pages/page_session_options.h39
-rw-r--r--src-qt5/core-utils/lumina-config/pages/page_session_options.ui8
-rw-r--r--src-qt5/core-utils/lumina-config/pages/page_theme.cpp168
-rw-r--r--src-qt5/core-utils/lumina-config/pages/page_theme.h42
-rw-r--r--src-qt5/core-utils/lumina-config/pages/page_theme.ui8
-rw-r--r--src-qt5/core-utils/lumina-config/pages/page_wallpaper.cpp282
-rw-r--r--src-qt5/core-utils/lumina-config/pages/page_wallpaper.h52
-rw-r--r--src-qt5/core-utils/lumina-config/pages/page_wallpaper.ui8
-rw-r--r--src-qt5/core-utils/lumina-config/pages/pages.pri75
52 files changed, 3188 insertions, 4275 deletions
diff --git a/src-qt5/core-utils/lumina-config/KeyCatch.h b/src-qt5/core-utils/lumina-config/KeyCatch.h
deleted file mode 100644
index 03193972..00000000
--- a/src-qt5/core-utils/lumina-config/KeyCatch.h
+++ /dev/null
@@ -1,106 +0,0 @@
-//===========================================
-// Lumina-DE source code
-// Copyright (c) 2014, Ken Moore
-// Available under the 3-clause BSD license
-// See the LICENSE file for full details
-//===========================================
-// This is the dialog for catching keyboard events and converting them to X11 keycodes
-//===========================================
-#ifndef _LUMINA_FILE_MANAGER_KEY_CATCH_DIALOG_H
-#define _LUMINA_FILE_MANAGER_KEY_CATCH_DIALOG_H
-
-// Qt includes
-#include <QDialog>
-#include <QKeyEvent>
-#include <QString>
-#include <QDebug>
-
-#include "ui_KeyCatch.h"
-
-namespace Ui{
- class KeyCatch;
-};
-
-class KeyCatch : public QDialog{
- Q_OBJECT
-
-private:
- Ui::KeyCatch *ui;
- QList<int> mods;
-public:
- QString xkeys, qkeys;
- bool cancelled;
-
- KeyCatch(QWidget *parent = 0) : QDialog(parent), ui(new Ui::KeyCatch){
- ui->setupUi(this);
- mods << Qt::Key_Escape << Qt::Key_Tab << Qt::Key_Enter << Qt::Key_Return << Qt::Key_Shift << Qt::Key_Control << Qt::Key_Meta << Qt::Key_Alt;
- cancelled=true; //assume cancelled in case the user closes the window
- this->show();
- this->grabKeyboard(); //will automatically release when the window closes
- }
- ~KeyCatch(){}
-
-private slots:
- void on_buttonBox_rejected(){
- cancelled=true;
- this->close();
- }
-
-protected:
- void keyPressEvent(QKeyEvent *event){
- //Don't catch if the main key is a modifier (shift,ctrl,alt,other..)
- if(event->key()==0 && event->nativeVirtualKey()==0){ return; } //invalid "special" key
- else if( !mods.contains(event->key()) ){
- //Get the modifiers first (if any)
- if(!QKeySequence(event->modifiers()).toString().isEmpty()){// && event->nativeModifiers()!=16){
- if(event->modifiers()!=Qt::KeypadModifier){
- qkeys = QKeySequence(event->modifiers()).toString();
- }
-
- /*//Ignore modifiers that result in a different keycode entirely (shift+a != (shift) + (a) )
- if(event->modifiers()!=Qt::ShiftModifier && event->modifiers()!=Qt::KeypadModifier){
- //Convert the modifier to the fluxbox equivilent
- QStringList mod = qkeys.split("+");
- for(int i=0; i<mod.length(); i++){
- QString key = mod[i].toLower();
- if(key=="shift"){} //this is also a valid fluxbox code
- else if(key=="meta"){ key = "Mod4"; }
- else if(key=="ctrl"){ key = "control"; }
- else if(key=="alt"){ key = "Mod1"; }
- else{ key.clear(); } //unknown fluxbox modifier
- if(!key.isEmpty()){ xkeys.append(key+" "); }
- }
- }*/
-
- }
- //Now get the main key
- qkeys.replace("+"," ");
- if(event->key()==0){
- if(qkeys.isEmpty()){ qkeys="None "; } //For Fluxbox, need "None <X Key number>"
- qkeys.append( QString::number(event->nativeVirtualKey()) );
- }else{
- qkeys.append( QKeySequence(event->key()).toString() ); //also save the text version (for display)
- }
- //Remove the modifier if it is only "shift", and the main key is not a symbol
- xkeys = qkeys;
- qkeys.remove("None "); //The display/Qt keycode does not need to show this
- if(!xkeys.section(" ",-1).isEmpty() && xkeys.contains("Shift ")){
- if(!xkeys.section(" ",-1).at(0).isLetter()){
- xkeys.remove("Shift "); //The symbol/keycode is already different
- qkeys.remove("Shift ");
- }
- }
- qDebug() << "Found Key Press:";
- qDebug() << " - Native Virtual Key:" << event->nativeVirtualKey();
- qDebug() << " - Qt Key Sequence:" << QKeySequence(event->key()).toString();
- qDebug() << " - Full Detected Sequence (Display):" << qkeys;
- qDebug() << " - Full Detected Sequence (backend):" << xkeys;
- //Now close the dialog
- cancelled=false;
- this->close();
- }
- }
-
-};
-
-#endif
diff --git a/src-qt5/core-utils/lumina-config/KeyCatch.ui b/src-qt5/core-utils/lumina-config/KeyCatch.ui
deleted file mode 100644
index 99f4095d..00000000
--- a/src-qt5/core-utils/lumina-config/KeyCatch.ui
+++ /dev/null
@@ -1,88 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<ui version="4.0">
- <class>KeyCatch</class>
- <widget class="QDialog" name="KeyCatch">
- <property name="geometry">
- <rect>
- <x>0</x>
- <y>0</y>
- <width>439</width>
- <height>147</height>
- </rect>
- </property>
- <property name="windowTitle">
- <string>Key Press Detection</string>
- </property>
- <property name="modal">
- <bool>false</bool>
- </property>
- <layout class="QVBoxLayout" name="verticalLayout">
- <item>
- <spacer name="verticalSpacer_2">
- <property name="orientation">
- <enum>Qt::Vertical</enum>
- </property>
- <property name="sizeHint" stdset="0">
- <size>
- <width>20</width>
- <height>40</height>
- </size>
- </property>
- </spacer>
- </item>
- <item>
- <widget class="QLabel" name="label">
- <property name="font">
- <font>
- <weight>75</weight>
- <bold>true</bold>
- </font>
- </property>
- <property name="text">
- <string>Press the keys you wish to assign.</string>
- </property>
- <property name="alignment">
- <set>Qt::AlignCenter</set>
- </property>
- </widget>
- </item>
- <item>
- <spacer name="verticalSpacer">
- <property name="orientation">
- <enum>Qt::Vertical</enum>
- </property>
- <property name="sizeHint" stdset="0">
- <size>
- <width>20</width>
- <height>40</height>
- </size>
- </property>
- </spacer>
- </item>
- <item>
- <widget class="QLabel" name="label_2">
- <property name="text">
- <string>Notes:
-Special keys can only be detected if the proper keyboard driver is in use.
-Current keyboard bindings will also be ignored.</string>
- </property>
- <property name="alignment">
- <set>Qt::AlignCenter</set>
- </property>
- <property name="wordWrap">
- <bool>true</bool>
- </property>
- </widget>
- </item>
- <item>
- <widget class="QDialogButtonBox" name="buttonBox">
- <property name="standardButtons">
- <set>QDialogButtonBox::Cancel</set>
- </property>
- </widget>
- </item>
- </layout>
- </widget>
- <resources/>
- <connections/>
-</ui>
diff --git a/src-qt5/core-utils/lumina-config/PanelWidget.cpp b/src-qt5/core-utils/lumina-config/PanelWidget.cpp
index 49b3d797..10e12cbb 100644
--- a/src-qt5/core-utils/lumina-config/PanelWidget.cpp
+++ b/src-qt5/core-utils/lumina-config/PanelWidget.cpp
@@ -7,13 +7,8 @@
#include "PanelWidget.h"
#include "ui_PanelWidget.h"
-#include "LPlugins.h"
#include "GetPluginDialog.h"
-#include "mainUI.h"
-#include <LuminaXDG.h>
-
-#include <QSettings>
-#include <QStringList>
+#include "AppDialog.h"
PanelWidget::PanelWidget(QWidget *parent, QWidget *Main, LPlugins *Pinfo) : QWidget(parent), ui(new Ui::PanelWidget){
@@ -126,6 +121,39 @@ void PanelWidget::reloadColorSample(){
ui->label_color_sample->setStyleSheet("background: "+ui->label_color_sample->whatsThis());
}
+XDGDesktop PanelWidget::getSysApp(bool allowreset){
+ AppDialog dlg(this, LXDG::sortDesktopNames( LXDG::systemDesktopFiles() ) );
+ dlg.allowReset(allowreset);
+ dlg.exec();
+ XDGDesktop desk;
+ if(dlg.appreset && allowreset){
+ desk.filePath = "reset"; //special internal flag
+ }else{
+ desk = dlg.appselected;
+ }
+ return desk;
+}
+
+QString PanelWidget::getColorStyle(QString current, bool allowTransparency){
+ QString out;
+ //Convert the current color string into a QColor
+ QStringList col = current.section(")",0,0).section("(",1,1).split(",");
+ if(col.length()!=4){ col.clear(); col << "255" << "255" << "255" << "255"; }
+ QColor ccol = QColor(col[0].toInt(), col[1].toInt(), col[2].toInt(), col[3].toInt()); //RGBA
+ QColor ncol;
+ if(allowTransparency){ ncol= QColorDialog::getColor(ccol, this, tr("Select Color"), QColorDialog::ShowAlphaChannel); }
+ else{ ncol= QColorDialog::getColor(ccol, this, tr("Select Color")); }
+ //Now convert the new color into a usable string and return
+ if(ncol.isValid()){ //if the dialog was not cancelled
+ if(allowTransparency){
+ out = "rgba("+QString::number(ncol.red())+","+QString::number(ncol.green())+","+QString::number(ncol.blue())+","+QString::number(ncol.alpha())+")";
+ }else{
+ out = "rgb("+QString::number(ncol.red())+","+QString::number(ncol.green())+","+QString::number(ncol.blue())+")";
+ }
+ }
+ return out;
+}
+
void PanelWidget::on_tool_rm_clicked(){
emit PanelRemoved(pnum);
}
@@ -140,7 +168,7 @@ void PanelWidget::UseColorChanged(){
}
void PanelWidget::on_tool_selectcolor_clicked(){
- QString color = static_cast<MainUI*>(mainui)->getColorStyle(ui->label_color_sample->whatsThis());
+ QString color = getColorStyle(ui->label_color_sample->whatsThis());
if( color.isEmpty()){ return; }
ui->label_color_sample->setWhatsThis(color);
reloadColorSample();
@@ -155,7 +183,7 @@ void PanelWidget::on_tool_addplugin_clicked(){
QString pan = dlg.plugID; //getNewPanelPlugin();
if(pan == "applauncher"){
//Prompt for the application to add
- XDGDesktop app = static_cast<MainUI*>(mainui)->getSysApp();
+ XDGDesktop app =getSysApp();
if(app.filePath.isEmpty()){ return; } //cancelled
pan.append("::"+app.filePath);
QListWidgetItem *it = new QListWidgetItem( LXDG::findIcon(app.icon,""), app.name);
diff --git a/src-qt5/core-utils/lumina-config/PanelWidget.h b/src-qt5/core-utils/lumina-config/PanelWidget.h
index e407391e..3f3cb360 100644
--- a/src-qt5/core-utils/lumina-config/PanelWidget.h
+++ b/src-qt5/core-utils/lumina-config/PanelWidget.h
@@ -7,11 +7,8 @@
#ifndef _LUMINA_CONFIG_PANEL_WIDGET_H
#define _LUMINA_CONFIG_PANEL_WIDGET_H
-#include <QWidget>
-#include <QObject>
-#include <QSettings>
+#include "globals.h"
-//#include "mainUI.h"
#include "LPlugins.h"
//namespace for using the *.ui file
@@ -42,7 +39,8 @@ private:
int dnum, pnum;
void reloadColorSample();
-
+ XDGDesktop getSysApp(bool allowreset = false);
+ QString getColorStyle(QString current, bool allowTransparency = true);
private slots:
void on_tool_rm_clicked();
void ItemChanged();
@@ -60,4 +58,3 @@ signals:
};
#endif
-
diff --git a/src-qt5/core-utils/lumina-config/globals.h b/src-qt5/core-utils/lumina-config/globals.h
index 11bfaeb3..c96aaaa3 100644
--- a/src-qt5/core-utils/lumina-config/globals.h
+++ b/src-qt5/core-utils/lumina-config/globals.h
@@ -12,12 +12,22 @@
#include <QList>
#include <QWidget>
#include <QDesktopWidget>
+#include <QScreen>
#include <QMainWindow>
+#include <QTreeWidgetItem>
+#include <QToolButton>
+#include <QSettings>
+#include <QFileDialog>
+#include <QColorDialog>
+#include <QMessageBox>
+#include <QShortcut>
+#include <QImageReader>
//Now the Lumina Library classes
#include <LuminaXDG.h>
#include <LuminaUtils.h>
#include <LuminaX11.h>
#include <LuminaOS.h>
+#include <LuminaThemes.h>
#endif
diff --git a/src-qt5/core-utils/lumina-config/lumina-config.pro b/src-qt5/core-utils/lumina-config/lumina-config.pro
index 4560036c..2e950fe1 100644
--- a/src-qt5/core-utils/lumina-config/lumina-config.pro
+++ b/src-qt5/core-utils/lumina-config/lumina-config.pro
@@ -11,7 +11,6 @@ target.path = $${L_BINDIR}
TEMPLATE = app
SOURCES += main.cpp \
- mainUI.cpp \
mainWindow.cpp \
LPlugins.cpp \
ColorDialog.cpp \
@@ -19,19 +18,15 @@ SOURCES += main.cpp \
GetPluginDialog.cpp \
PanelWidget.cpp
-HEADERS += mainUI.h \
- mainWindow.h \
+HEADERS += mainWindow.h \
LPlugins.h \
- KeyCatch.h \
AppDialog.h \
ColorDialog.h \
ThemeDialog.h \
GetPluginDialog.h \
PanelWidget.h
-FORMS += mainUI.ui \
- mainWindow.ui \
- KeyCatch.ui \
+FORMS += mainWindow.ui \
AppDialog.ui \
ColorDialog.ui \
ThemeDialog.ui \
@@ -45,7 +40,7 @@ include("pages/pages.pri")
LIBS += -lLuminaUtils
-DEPENDPATH += ../libLumina
+DEPENDPATH += ../../core/libLumina
TRANSLATIONS = i18n/lumina-config_af.ts \
i18n/lumina-config_ar.ts \
diff --git a/src-qt5/core-utils/lumina-config/main.cpp b/src-qt5/core-utils/lumina-config/main.cpp
index a63e0fbe..856570c0 100644
--- a/src-qt5/core-utils/lumina-config/main.cpp
+++ b/src-qt5/core-utils/lumina-config/main.cpp
@@ -4,7 +4,7 @@
#include <QDebug>
#include <QFile>
-#include "mainUI.h"
+
#include "mainWindow.h"
#include <LuminaOS.h>
#include <LuminaUtils.h>
@@ -19,8 +19,7 @@ int main(int argc, char ** argv)
LuminaThemeEngine theme(&a);
- MainUI w;
- //mainWindow w;
+ mainWindow w;
QObject::connect(&a, SIGNAL(InputsAvailable(QStringList)), &w, SLOT(slotSingleInstance()) );
QObject::connect(&theme, SIGNAL(updateIcons()), &w, SLOT(setupIcons()) );
w.show();
diff --git a/src-qt5/core-utils/lumina-config/mainUI.cpp b/src-qt5/core-utils/lumina-config/mainUI.cpp
deleted file mode 100644
index 36e45a9e..00000000
--- a/src-qt5/core-utils/lumina-config/mainUI.cpp
+++ /dev/null
@@ -1,1932 +0,0 @@
-//===========================================
-// Lumina-DE source code
-// Copyright (c) 2014-2015, Ken Moore
-// Available under the 3-clause BSD license
-// See the LICENSE file for full details
-//===========================================
-#include "mainUI.h"
-#include "ui_mainUI.h" //the designer *.ui file
-
-#include <LuminaOS.h>
-#include <QImageReader>
-#include <QTime>
-#include <QDate>
-//#include <QTimeZone>
-#include <QScrollBar>
-
-#include <unistd.h>
-
-MainUI::MainUI() : QMainWindow(), ui(new Ui::MainUI()){
- ui->setupUi(this); //load the designer file
- this->setWindowIcon( LXDG::findIcon("preferences-desktop-display","") );
- PINFO = new LPlugins(); //load the info class
- panadjust = false;
- DEFAULTBG = LOS::LuminaShare()+"desktop-background.jpg";
- //Be careful about the QSettings setup, it must match the lumina-desktop setup
- settings = new QSettings( QSettings::UserScope, "lumina-desktop", "desktopsettings", this);
- appsettings = new QSettings( QSettings::UserScope, "lumina-desktop", "lumina-open", this);
- sessionsettings = new QSettings( QSettings::UserScope, "lumina-desktop","sessionsettings", this);
- qDebug() << "Settings File:" << settings->fileName();
- desktop = new QDesktopWidget();
- ui->spin_screen->setMinimum(1);
- //Make sure this is only allows the current number of screens
- ui->spin_screen->setMaximum(desktop->screenCount());
- ui->spin_screen->setValue(desktop->screenNumber(this->mapToGlobal(this->geometry().center()))+1); //have the current screen auto-selected
- //qDebug() << "Number of Screens:" << desktop->screenCount();
- sysApps = LXDG::sortDesktopNames( LXDG::systemDesktopFiles() );
- //Add a couple spacers to center the toolbar items
- QWidget *tmp = new QWidget(this);
- tmp->setSizePolicy(QSizePolicy::Expanding, QSizePolicy::Preferred);
- ui->toolBar->insertWidget(ui->actionDesktop, tmp);
- tmp = new QWidget(this);
- tmp->setSizePolicy(QSizePolicy::Expanding, QSizePolicy::Preferred);
- ui->toolBar->addWidget(tmp);
- //Now finish setting up the UI
- setupIcons();
- setupMenus();
- setupConnections();
-
- //Start on the Desktop page (and first tab for all tab widgets)
- ui->stackedWidget->setCurrentWidget(ui->page_desktop);
- ui->tabWidget_desktop->setCurrentWidget(ui->tab_wallpaper);
- ui->tabWidget_session->setCurrentIndex(0);
- ui->tabWidget_apps->setCurrentIndex(0);
- ui->tabWidget_panels->setCurrentIndex(0);
-
- slotChangePage(false);
-
- QTimer::singleShot(10, this, SLOT(loadCurrentSettings()) );
-
- //Disable the incomplete pages/items at the moment
-
-}
-
-MainUI::~MainUI(){
-
-}
-
-void MainUI::slotSingleInstance(){
- //Make sure this window is visible
- this->showNormal();
- this->activateWindow();
- this->raise();
-}
-
-//================
-// PRIVATE FUNCTIONS
-//================
-void MainUI::setupIcons(){
- //Pull all the icons from the current theme using libLumina (LXDG)
-
- //General UI
- ui->actionDesktop->setIcon( LXDG::findIcon("preferences-desktop-display","") );
- ui->actionPanels->setIcon( LXDG::findIcon("preferences-desktop-icons","") );
- //ui->actionMenu->setIcon( LXDG::findIcon("preferences-desktop-icons","") );
- ui->actionShortcuts->setIcon( LXDG::findIcon("configure-shortcuts","") );
- ui->actionDefaults->setIcon( LXDG::findIcon("preferences-system-windows","") );
- ui->actionSession->setIcon( LXDG::findIcon("preferences-system-session-services","") );
- ui->push_save->setIcon( LXDG::findIcon("document-save","") );
-
-
- //Desktop Page
- ui->tool_desk_addbg->setIcon( LXDG::findIcon("list-add","") );
- ui->tool_desk_rmbg->setIcon( LXDG::findIcon("list-remove","") );
- ui->tabWidget_desktop->setTabIcon( ui->tabWidget_desktop->indexOf(ui->tab_wallpaper), LXDG::findIcon("preferences-desktop-wallpaper","") );
- ui->tabWidget_desktop->setTabIcon( ui->tabWidget_desktop->indexOf(ui->tab_themes), LXDG::findIcon("preferences-desktop-theme","") );
- ui->tool_desktop_addplugin->setIcon( LXDG::findIcon("list-add","") );
- ui->tool_desktop_rmplugin->setIcon( LXDG::findIcon("list-remove","") );
-
- //Panels Page
- ui->tool_panels_add->setIcon( LXDG::findIcon("list-add","") );
-
- //Menu Page
- ui->tool_menu_add->setIcon( LXDG::findIcon("list-add","") );
- ui->tool_menu_rm->setIcon( LXDG::findIcon("list-remove","") );
- ui->tool_menu_up->setIcon( LXDG::findIcon("go-up","") );
- ui->tool_menu_dn->setIcon( LXDG::findIcon("go-down","") );
-
- //Shortcuts Page
- ui->tool_shortcut_set->setIcon( LXDG::findIcon("input-keyboard","") );
- ui->tool_shortcut_clear->setIcon( LXDG::findIcon("edit-clear","") );
-
- //Defaults Page
- //ui->tool_defaults_addextension->setIcon( LXDG::findIcon("list-add","") );
- //ui->tool_defaults_addgroup->setIcon( LXDG::findIcon("list-add","") );
- ui->tool_defaults_clear->setIcon( LXDG::findIcon("edit-clear","") );
- ui->tool_defaults_set->setIcon( LXDG::findIcon("system-run","") );
- ui->tool_defaults_setbin->setIcon( LXDG::findIcon("application-x-executable","") );
- ui->tabWidget_apps->setTabIcon( ui->tabWidget_apps->indexOf(ui->tab_auto), LXDG::findIcon("system-run", "") );
- ui->tabWidget_apps->setTabIcon( ui->tabWidget_apps->indexOf(ui->tab_defaults), LXDG::findIcon("preferences-desktop-filetype-association", "") );
-
- //Session Page
- //ui->tool_session_rmapp->setIcon( LXDG::findIcon("list-remove","") );
- ui->tool_session_addapp->setIcon( LXDG::findIcon("system-run","") );
- ui->tool_session_addbin->setIcon( LXDG::findIcon("system-search","") );
- ui->tool_session_addfile->setIcon( LXDG::findIcon("run-build-file","") );
- ui->tool_session_newtheme->setIcon( LXDG::findIcon("preferences-desktop-theme","") );
- ui->tool_session_newcolor->setIcon( LXDG::findIcon("preferences-desktop-color","") );
- ui->push_session_resetSysDefaults->setIcon( LXDG::findIcon("pcbsd","view-refresh") );
- ui->push_session_resetLuminaDefaults->setIcon( LXDG::findIcon("Lumina-DE","") );
- ui->tool_help_time->setIcon( LXDG::findIcon("help-about","") );
- ui->tool_help_date->setIcon( LXDG::findIcon("help-about","") );
-}
-
-void MainUI::setupConnections(){
- //General UI
- connect(ui->actionDesktop, SIGNAL(triggered(bool)), this, SLOT( slotChangePage(bool)) );
- connect(ui->actionPanels, SIGNAL(triggered(bool)), this, SLOT( slotChangePage(bool)) );
- //connect(ui->actionMenu, SIGNAL(triggered(bool)), this, SLOT( slotChangePage(bool)) );
- connect(ui->actionShortcuts, SIGNAL(triggered(bool)), this, SLOT( slotChangePage(bool)) );
- connect(ui->actionDefaults, SIGNAL(triggered(bool)), this, SLOT( slotChangePage(bool)) );
- connect(ui->actionSession, SIGNAL(triggered(bool)), this, SLOT( slotChangePage(bool)) );
- connect(ui->push_save, SIGNAL(clicked()), this, SLOT(saveCurrentSettings()) );
- connect(ui->spin_screen, SIGNAL(valueChanged(int)), this, SLOT(slotChangeScreen()) );
-
- //Desktop Page
- //connect(ui->combo_desk_plugs, SIGNAL(currentIndexChanged(int)), this, SLOT(deskplugchanged()) );
- connect(ui->combo_desk_bg, SIGNAL(currentIndexChanged(int)), this, SLOT(deskbgchanged()) );
- connect(ui->radio_desk_multi, SIGNAL(toggled(bool)), this, SLOT(desktimechanged()) );
- connect(ui->tool_desktop_addplugin, SIGNAL(clicked()), this, SLOT(deskplugadded()) );
- connect(ui->tool_desktop_rmplugin, SIGNAL(clicked()), this, SLOT(deskplugremoved()) );
- connect(ui->tool_desk_addbg, SIGNAL(clicked()), this, SLOT(deskbgadded()) );
- connect(ui->tool_desk_rmbg, SIGNAL(clicked()), this, SLOT(deskbgremoved()) );
- connect(ui->spin_desk_min, SIGNAL(valueChanged(int)), this, SLOT(desktimechanged()) );
- connect(ui->check_desktop_autolaunchers, SIGNAL(clicked()), this, SLOT(desktimechanged()) ); //just need to poke the save routines
- connect(ui->combo_desk_layout, SIGNAL(currentIndexChanged(int)), this, SLOT(desktimechanged()) ); //just need to poke the save routines
-
- //Panels Page
- connect(ui->tool_panels_add, SIGNAL(clicked()), this, SLOT(newPanel()) );
-
- //Menu Page
- connect(ui->tool_menu_add, SIGNAL(clicked()), this, SLOT(addmenuplugin()) );
- connect(ui->tool_menu_rm, SIGNAL(clicked()), this, SLOT(rmmenuplugin()) );
- connect(ui->tool_menu_up, SIGNAL(clicked()), this, SLOT(upmenuplugin()) );
- connect(ui->tool_menu_dn, SIGNAL(clicked()), this, SLOT(downmenuplugin()) );
- connect(ui->list_menu, SIGNAL(currentRowChanged(int)), this, SLOT(checkmenuicons()) );
-
- //Shortcuts Page
- connect(ui->tool_shortcut_clear, SIGNAL(clicked()), this, SLOT(clearKeyBinding()) );
- connect(ui->tool_shortcut_set, SIGNAL(clicked()), this, SLOT(applyKeyBinding()) );
- connect(ui->tree_shortcut, SIGNAL(itemSelectionChanged()), this, SLOT(updateKeyConfig()) );
-
- //Defaults Page
- connect(ui->tool_default_filemanager, SIGNAL(clicked()), this, SLOT(changeDefaultFileManager()) );
- connect(ui->tool_default_terminal, SIGNAL(clicked()), this, SLOT(changeDefaultTerminal()) );
- connect(ui->tool_default_webbrowser, SIGNAL(clicked()), this, SLOT(changeDefaultBrowser()) );
- connect(ui->tool_default_email, SIGNAL(clicked()), this, SLOT(changeDefaultEmail()) );
- connect(ui->tool_defaults_clear, SIGNAL(clicked()), this, SLOT(cleardefaultitem()) );
- connect(ui->tool_defaults_set, SIGNAL(clicked()), this, SLOT(setdefaultitem()) );
- connect(ui->tool_defaults_setbin, SIGNAL(clicked()), this, SLOT(setdefaultbinary()) );
- connect(ui->tree_defaults, SIGNAL(itemSelectionChanged()), this, SLOT(checkdefaulticons()) );
-
- //Session Page
- connect(ui->tool_session_addapp, SIGNAL(clicked()), this, SLOT(addsessionstartapp()) );
- connect(ui->tool_session_addbin, SIGNAL(clicked()), this, SLOT(addsessionstartbin()) );
- connect(ui->tool_session_addfile, SIGNAL(clicked()), this, SLOT(addsessionstartfile()) );
- connect(ui->combo_session_wfocus, SIGNAL(currentIndexChanged(int)), this, SLOT(sessionoptchanged()) );
- connect(ui->combo_session_wloc, SIGNAL(currentIndexChanged(int)), this, SLOT(sessionoptchanged()) );
- connect(ui->combo_session_wtheme, SIGNAL(currentIndexChanged(int)), this, SLOT(sessionthemechanged()) );
- connect(ui->combo_session_cursortheme, SIGNAL(currentIndexChanged(int)), this, SLOT(sessionCursorChanged()) );
- connect(ui->check_session_numlock, SIGNAL(stateChanged(int)), this, SLOT(sessionoptchanged()) );
- connect(ui->check_session_playloginaudio, SIGNAL(stateChanged(int)), this, SLOT(sessionoptchanged()) );
- connect(ui->check_session_playlogoutaudio, SIGNAL(stateChanged(int)), this, SLOT(sessionoptchanged()) );
- connect(ui->spin_session_wkspaces, SIGNAL(valueChanged(int)), this, SLOT(sessionoptchanged()) );
- //connect(ui->list_session_start, SIGNAL(currentRowChanged(int)), this, SLOT(sessionstartchanged()) );
- connect(ui->list_session_start, SIGNAL(itemChanged(QListWidgetItem*)), this, SLOT(sessionoptchanged()) );
- connect(ui->spin_session_fontsize, SIGNAL(valueChanged(int)), this, SLOT(sessionoptchanged()) );
- connect(ui->combo_session_themefile, SIGNAL(currentIndexChanged(int)), this, SLOT(sessionoptchanged()) );
- connect(ui->combo_session_colorfile, SIGNAL(currentIndexChanged(int)), this, SLOT(sessionoptchanged()) );
- connect(ui->combo_session_icontheme, SIGNAL(currentIndexChanged(int)), this, SLOT(sessionoptchanged()) );
- connect(ui->font_session_theme, SIGNAL(currentIndexChanged(int)), this, SLOT(sessionoptchanged()) );
- connect(ui->tool_session_newcolor, SIGNAL(clicked()), this, SLOT(sessionEditColor()) );
- connect(ui->tool_session_newtheme, SIGNAL(clicked()), this, SLOT(sessionEditTheme()) );
- connect(ui->push_session_setUserIcon, SIGNAL(clicked()), this, SLOT(sessionChangeUserIcon()) );
- connect(ui->push_session_resetSysDefaults, SIGNAL(clicked()), this, SLOT(sessionResetSys()) );
- connect(ui->push_session_resetLuminaDefaults, SIGNAL(clicked()), this, SLOT(sessionResetLumina()) );
- connect(ui->tool_help_time, SIGNAL(clicked()), this, SLOT(sessionShowTimeCodes()) );
- connect(ui->tool_help_date, SIGNAL(clicked()), this, SLOT(sessionShowDateCodes()) );
- connect(ui->line_session_time, SIGNAL(textChanged(QString)), this, SLOT(sessionLoadTimeSample()) );
- connect(ui->line_session_date, SIGNAL(textChanged(QString)), this, SLOT(sessionLoadDateSample()) );
- connect(ui->combo_session_datetimeorder, SIGNAL(currentIndexChanged(int)), this, SLOT(sessionoptchanged()) );
- connect(ui->combo_locale_lang, SIGNAL(currentIndexChanged(int)), this, SLOT(sessionoptchanged()) );
- connect(ui->combo_locale_collate, SIGNAL(currentIndexChanged(int)), this, SLOT(sessionoptchanged()) );
- connect(ui->combo_locale_ctype, SIGNAL(currentIndexChanged(int)), this, SLOT(sessionoptchanged()) );
- connect(ui->combo_locale_message, SIGNAL(currentIndexChanged(int)), this, SLOT(sessionoptchanged()) );
- connect(ui->combo_locale_monetary, SIGNAL(currentIndexChanged(int)), this, SLOT(sessionoptchanged()) );
- connect(ui->combo_locale_numeric, SIGNAL(currentIndexChanged(int)), this, SLOT(sessionoptchanged()) );
- connect(ui->combo_locale_time, SIGNAL(currentIndexChanged(int)), this, SLOT(sessionoptchanged()) );
-}
-
-void MainUI::setupMenus(){
- //Background file menu (different ways of loading files)
- if(ui->tool_desk_addbg->menu()==0){ ui->tool_desk_addbg->setMenu(new QMenu(this)); }
- ui->tool_desk_addbg->menu()->clear();
- ui->tool_desk_addbg->menu()->addAction(LXDG::findIcon("document-new",""), tr("File(s)"), this, SLOT(deskbgadded()) );
- ui->tool_desk_addbg->menu()->addAction(LXDG::findIcon("folder-new",""), tr("Directory (Single)"), this, SLOT(deskbgdiradded()) );
- ui->tool_desk_addbg->menu()->addAction(LXDG::findIcon("document-open-folder",""), tr("Directory (Recursive)"), this, SLOT(deskbgdirradded()) );
- ui->tool_desk_addbg->menu()->addAction(LXDG::findIcon("format-fill-color",""), tr("Solid Color"), this, SLOT(deskbgcoloradded()) );
-
- //Session window manager settings
- ui->combo_session_wfocus->clear();
- ui->combo_session_wfocus->addItem( tr("Click To Focus"), "ClickToFocus");
- ui->combo_session_wfocus->addItem( tr("Active Mouse Focus"), "MouseFocus");
- ui->combo_session_wfocus->addItem( tr("Strict Mouse Focus"), "StrictMouseFocus");
- ui->combo_session_wloc->clear();
- ui->combo_session_wloc->addItem( tr("Align in a Row"), "RowSmartPlacement");
- ui->combo_session_wloc->addItem( tr("Align in a Column"), "ColSmartPlacement");
- ui->combo_session_wloc->addItem( tr("Cascade"), "CascadePlacement");
- ui->combo_session_wloc->addItem( tr("Underneath Mouse"), "UnderMousePlacement");
- ui->combo_session_wtheme->clear();
- QStringList dirs; dirs << LOS::AppPrefix()+"share/fluxbox/styles" << QDir::homePath()+"/.fluxbox/styles";
- QFileInfoList fbstyles;
- for(int i=0; i<dirs.length(); i++){
- QDir fbdir(dirs[i]);
- fbstyles << fbdir.entryInfoList(QDir::Files | QDir::Dirs | QDir::NoDotAndDotDot, QDir::Name | QDir::IgnoreCase);
- }
- QString lastdir;
- for(int i=0; i<fbstyles.length(); i++){
- if(lastdir!=fbstyles[i].absolutePath()){
- lastdir = fbstyles[i].absolutePath(); //save for checking later
- if(ui->combo_session_wtheme->count()>0){ ui->combo_session_wtheme->insertSeparator(ui->combo_session_wtheme->count()); }
- }
- ui->combo_session_wtheme->addItem(fbstyles[i].fileName(), fbstyles[i].absoluteFilePath());
- }
- //Display formats for panel clock
- ui->combo_session_datetimeorder->clear();
- ui->combo_session_datetimeorder->addItem( tr("Time (Date as tooltip)"), "timeonly");
- ui->combo_session_datetimeorder->addItem( tr("Date (Time as tooltip)"), "dateonly");
- ui->combo_session_datetimeorder->addItem( tr("Time first then Date"), "timedate");
- ui->combo_session_datetimeorder->addItem( tr("Date first then Time"), "datetime");
-
- //Available Cursor Themes
- ui->combo_session_cursortheme->clear();
- ui->combo_session_cursortheme->addItems( LTHEME::availableSystemCursors() );
- //int cur = ui->combo_session_cursortheme->findText( LTHEME::currentCursor() );
- //if(cur>=0){ ui->combo_session_cursortheme->setCurrentIndex(cur); }
-
- //Available Wallpaper layout options
- ui->combo_desk_layout->clear();
- ui->combo_desk_layout->addItem(tr("Automatic"), "stretch");
- ui->combo_desk_layout->addItem(tr("Fullscreen"), "full");
- ui->combo_desk_layout->addItem(tr("Fit screen"), "fit");
- ui->combo_desk_layout->addItem(tr("Tile"), "tile");
- ui->combo_desk_layout->addItem(tr("Center"), "center");
- ui->combo_desk_layout->addItem(tr("Top Left"), "topleft");
- ui->combo_desk_layout->addItem(tr("Top Right"), "topright");
- ui->combo_desk_layout->addItem(tr("Bottom Left"), "bottomleft");
- ui->combo_desk_layout->addItem(tr("Bottom Right"), "bottomright");
-
-
-
- //Available localizations
- QStringList langs = LUtils::knownLocales();
- langs.sort();
- QString def = tr("System Default");
- ui->combo_locale_lang->addItem(def,"");
- ui->combo_locale_collate->addItem(def,"");
- ui->combo_locale_ctype->addItem(def,"");
- ui->combo_locale_message->addItem(def,"");
- ui->combo_locale_monetary->addItem(def,"");
- ui->combo_locale_numeric->addItem(def,"");
- ui->combo_locale_time->addItem(def,"");
- for(int i=0; i<langs.length(); i++){
- QString lan = QLocale(langs[i]).nativeLanguageName();
- ui->combo_locale_lang->addItem(lan,langs[i]);
- ui->combo_locale_collate->addItem(lan,langs[i]);
- ui->combo_locale_ctype->addItem(lan,langs[i]);
- ui->combo_locale_message->addItem(lan,langs[i]);
- ui->combo_locale_monetary->addItem(lan,langs[i]);
- ui->combo_locale_numeric->addItem(lan,langs[i]);
- ui->combo_locale_time->addItem(lan,langs[i]);
- }
-}
-
-int MainUI::currentDesktop(){
- return ui->spin_screen->value()-1; //backend starts at 0, not 1
-}
-
-QString MainUI::getColorStyle(QString current, bool allowTransparency){
- QString out;
- //Convert the current color string into a QColor
- QStringList col = current.section(")",0,0).section("(",1,1).split(",");
- if(col.length()!=4){ col.clear(); col << "255" << "255" << "255" << "255"; }
- QColor ccol = QColor(col[0].toInt(), col[1].toInt(), col[2].toInt(), col[3].toInt()); //RGBA
- QColor ncol;
- if(allowTransparency){ ncol= QColorDialog::getColor(ccol, this, tr("Select Color"), QColorDialog::ShowAlphaChannel); }
- else{ ncol= QColorDialog::getColor(ccol, this, tr("Select Color")); }
- //Now convert the new color into a usable string and return
- if(ncol.isValid()){ //if the dialog was not cancelled
- if(allowTransparency){
- out = "rgba("+QString::number(ncol.red())+","+QString::number(ncol.green())+","+QString::number(ncol.blue())+","+QString::number(ncol.alpha())+")";
- }else{
- out = "rgb("+QString::number(ncol.red())+","+QString::number(ncol.green())+","+QString::number(ncol.blue())+")";
- }
- }
- return out;
-}
-
-XDGDesktop MainUI::getSysApp(bool allowreset){
- AppDialog dlg(this, sysApps);
- dlg.allowReset(allowreset);
- dlg.exec();
- XDGDesktop desk;
- if(dlg.appreset && allowreset){
- desk.filePath = "reset"; //special internal flag
- }else{
- desk = dlg.appselected;
- }
- return desk;
-}
-
-//Convert to/from fluxbox key codes
-QString MainUI::dispToFluxKeys(QString in){
- in.replace("Ctrl", "Control");
- in.replace("Shift", "Shift");
- in.replace("Alt", "Mod1");
- in.replace("Meta", "Mod4");
- in.replace("PgUp", "Prior");
- in.replace("PgDown", "Next");
- in.replace("Del", "Delete");
- in.replace("Backspace", "BackSpace");
- in.replace("Ins","Insert");
- in.replace("Volume Up", "XF86AudioRaiseVolume"); //multimedia key
- in.replace("Volume Down", "XF86AudioLowerVolume"); //multimedia key
- in.replace("+"," ");
- return in;
-}
-
-QString MainUI::fluxToDispKeys(QString in){
- in.replace("Control", "Ctrl");
- in.replace("Shift", "Shift");
- in.replace("Mod1", "Alt");
- in.replace("Mod4", "Meta");
- in.replace("Prior", "PgUp");
- in.replace("Next", "PgDown");
- //in.replace("Delete", "Del"); //the "Delete" is better looking
- in.replace("BackSpace", "Backspace");
- //in.replace("Insert", "Ins"); //the "Insert" is better looking
- in.replace("XF86AudioRaiseVolume", "Volume Up"); //multimedia key
- in.replace("XF86AudioLowerVolume", "Volume Down"); //multimedia key
- return in;
-}
-
-//Read/overwrite a text file
-QStringList MainUI::readFile(QString path){
- QStringList out;
- QFile file(path);
- if(file.open(QIODevice::ReadOnly | QIODevice::Text)){
- QTextStream txt(&file);
- while(!txt.atEnd()){
- out << txt.readLine();
- }
- file.close();
- }
- return out;
-}
-
-bool MainUI::overwriteFile(QString path, QStringList contents){
- QFile file(path);
- if(file.open(QIODevice::WriteOnly | QIODevice::Text | QIODevice::Truncate)){
- QTextStream txt(&file);
- for(int i=0; i<contents.length(); i++){
- txt << contents[i]+"\n";
- }
- file.close();
- return true;
- }
- return false;
-}
-
-//================
-// PRIVATE SLOTS
-//================
-void MainUI::slotChangePage(bool enabled){
- //Do not allow the user to de-select a button (make them act like radio buttons)
- //qDebug() << "Page Change:" << enabled;
- bool showScreen = false; //set this for pages that have per-screen settings
- if(!enabled){
- //Re-enable the current button
- ui->actionDesktop->setChecked(ui->stackedWidget->currentWidget()==ui->page_desktop);
- ui->actionPanels->setChecked(ui->stackedWidget->currentWidget()==ui->page_panels);
- //ui->actionMenu->setChecked(ui->stackedWidget->currentWidget()==ui->page_menu);
- ui->actionShortcuts->setChecked(ui->stackedWidget->currentWidget()==ui->page_shortcuts);
- ui->actionDefaults->setChecked(ui->stackedWidget->currentWidget()==ui->page_defaults);
- ui->actionSession->setChecked(ui->stackedWidget->currentWidget()==ui->page_session);
- showScreen = (ui->actionDesktop->isChecked() || ui->actionPanels->isChecked());
- //Ask if they want to reset any changes on the current page
-
- }else{
- //uncheck the button associated with the currently open page
- if(ui->stackedWidget->currentWidget()==ui->page_desktop){ ui->actionDesktop->setChecked(false); }
- if(ui->stackedWidget->currentWidget()==ui->page_panels){ ui->actionPanels->setChecked(false); }
- //if(ui->stackedWidget->currentWidget()==ui->page_menu){ ui->actionMenu->setChecked(false); }
- if(ui->stackedWidget->currentWidget()==ui->page_shortcuts){ ui->actionShortcuts->setChecked(false); }
- if(ui->stackedWidget->currentWidget()==ui->page_defaults){ ui->actionDefaults->setChecked(false); }
- if(ui->stackedWidget->currentWidget()==ui->page_session){ ui->actionSession->setChecked(false); }
- //switch to the new page
- if(ui->actionDesktop->isChecked()){ ui->stackedWidget->setCurrentWidget(ui->page_desktop); showScreen=true;}
- else if(ui->actionPanels->isChecked()){ ui->stackedWidget->setCurrentWidget(ui->page_panels); showScreen=true; }
- //else if(ui->actionMenu->isChecked()){ ui->stackedWidget->setCurrentWidget(ui->page_menu); }
- else if(ui->actionShortcuts->isChecked()){ ui->stackedWidget->setCurrentWidget(ui->page_shortcuts); }
- else if(ui->actionDefaults->isChecked()){ ui->stackedWidget->setCurrentWidget(ui->page_defaults); }
- else if(ui->actionSession->isChecked()){ ui->stackedWidget->setCurrentWidget(ui->page_session); }
- }
- ui->group_screen->setVisible(showScreen && (ui->spin_screen->maximum()>1) );
- //Hide the save button for particular pages
- //ui->push_save->setVisible(!ui->actionDefaults->isChecked() || moddesk || modpan || modmenu || modshort || moddef || modses); //hide on the default page if nothing waiting to be saved
- //Special functions for particular pages
- //if(ui->page_panels->isVisible()){ checkpanels(); }
-
-}
-
-void MainUI::slotChangeScreen(){
- static int cscreen = 0; //current screen
- int newscreen = currentDesktop();
- if(cscreen!=newscreen){
- if(moddesk || modpan){
- if(QMessageBox::Yes == QMessageBox::question(this, tr("Save Changes?"), tr("You currently have unsaved changes for this screen. Do you want to save them first?"), QMessageBox::Yes | QMessageBox::No, QMessageBox::Yes) ){
- ui->spin_screen->setValue(cscreen+1); //Make sure the old screen is selected for a moment
- saveCurrentSettings(true); //only save current screen settings
- ui->spin_screen->setValue(newscreen+1); //Now reset back to the new screen
- }
- }
- loadCurrentSettings(true);
- cscreen = newscreen; //save that this screen is current now
- }
-}
-
-void MainUI::saveAndQuit(){
- saveCurrentSettings();
- this->close();
-}
-
-//General Utility Functions
-void MainUI::loadCurrentSettings(bool screenonly){
- loading = true;
- settings->sync();
- appsettings->sync();
- int cdesk = currentDesktop();
- QString DPrefix = "desktop-"+QString::number(cdesk)+"/";
- bool primary = (desktop->screenGeometry(cdesk).x()==0);
-
- //Desktop Page
- QStringList bgs = settings->value(DPrefix+"background/filelist", QStringList()<<"default").toStringList();
- ui->combo_desk_bg->clear();
- for(int i=0; i<bgs.length(); i++){
- if(bgs[i]=="default"){ ui->combo_desk_bg->addItem( QIcon(DEFAULTBG), tr("System Default"), bgs[i] ); }
- else if(bgs[i].startsWith("rgb(")){ui->combo_desk_bg->addItem(QString(tr("Solid Color: %1")).arg(bgs[i]), bgs[i]); }
- //else{ ui->combo_desk_bg->addItem( QIcon(QPixmap(bgs[i]).scaled(64,64)), bgs[i].section("/",-1), bgs[i] ); }
- else{ ui->combo_desk_bg->addItem( bgs[i].section("/",-1), bgs[i] ); } //disable the thumbnail - takes a long time for large collections of files
- }
- ui->check_desktop_autolaunchers->setChecked(settings->value(DPrefix+"generateDesktopIcons", false).toBool());
- ui->radio_desk_multi->setEnabled(bgs.length()>1);
- if(bgs.length()>1){ ui->radio_desk_multi->setChecked(true);}
- else{ ui->radio_desk_single->setChecked(true); }
- ui->spin_desk_min->setValue( settings->value(DPrefix+"background/minutesToChange", 5).toInt() );
- desktimechanged(); //ensure the display gets updated (in case the radio selection did not change);
- ui->label_desk_res->setText( tr("Screen Resolution:")+"\n"+QString::number(desktop->screenGeometry(cdesk).width())+"x"+QString::number(desktop->screenGeometry(cdesk).height()) );
- int tmp = ui->combo_desk_layout->findData(settings->value(DPrefix+"background/format","stretch"));
- if(tmp>=0){ ui->combo_desk_layout->setCurrentIndex(tmp); }
- QStringList dplugs = settings->value(DPrefix+"pluginlist",QStringList()).toStringList();
- ui->list_desktop_plugins->clear();
- for(int i=0; i<dplugs.length(); i++){
- QListWidgetItem* it = new QListWidgetItem();
- it->setWhatsThis(dplugs[i]); //save the full thing instantly
- //Now load the rest of the info about the plugin
- QString num;
- if(dplugs[i].contains("---")){
- num = dplugs[i].section("---",1,1).section(".",1,1).simplified(); //Skip the screen number
- if(num=="1"){ num.clear(); } //don't bother showing the number
- dplugs[i] = dplugs[i].section("---",0,0);
- }
- if(dplugs[i].startsWith("applauncher::")){
- bool ok = false;
- XDGDesktop app = LXDG::loadDesktopFile(dplugs[i].section("::",1,50), ok);
- if(!ok){ continue; } //invalid for some reason
- //Now fill the item with the necessary info
- it->setText(app.name);
- it->setIcon(LXDG::findIcon(app.icon,"") );
- it->setToolTip(app.comment);
- }else{
- //Load the info for this plugin
- LPI info = PINFO->desktopPluginInfo(dplugs[i]);
- if( info.ID.isEmpty() ){ continue; } //invalid plugin for some reason
- it->setText(info.name);
- it->setToolTip(info.description);
- it->setIcon( LXDG::findIcon(info.icon,"") );
- }
- if(!num.isEmpty()){ it->setText( it->text()+" ("+num+")"); } //append the number
- ui->list_desktop_plugins->addItem(it);
- }
-
- //Panels Page
- int panels = settings->value(DPrefix+"panels",-1).toInt();
- if(panels==-1 && primary){ panels=1; }
- panelnumber = panels;
- loadPanels();
-
- if(!screenonly){
- // Menu Page
- //Default terminal and filemanager binary
- //ui->line_menu_term->setText( settings->value("default-terminal","xterm").toString() );
- //ui->line_menu_fm->setText( settings->value("default-filemanager","lumina-fm").toString() );
- //Menu Items
- QStringList items = settings->value("menu/itemlist", QStringList() ).toStringList();
- if(items.isEmpty()){ items << "terminal" << "filemanager" << "applications" << "line" << "settings"; }
- //qDebug() << "Menu Items:" << items;
- ui->list_menu->clear();
- for(int i=0; i<items.length(); i++){
- LPI info = PINFO->menuPluginInfo(items[i]);
- if(items[i].startsWith("app::::")){
- bool ok = false;
- XDGDesktop desk = LXDG::loadDesktopFile(items[i].section("::::",1,1), ok);
- if(!ok){ continue; } //invalid application file (no longer installed?)
- QListWidgetItem *item = new QListWidgetItem();
- item->setWhatsThis( items[i] );
- item->setIcon( LXDG::findIcon(desk.icon) );
- item->setText( desk.name );
- item->setToolTip( desk.comment );
- ui->list_menu->addItem(item);
- continue; //now go to the next item
- }
- if(info.ID.isEmpty()){ continue; } //invalid plugin
- //qDebug() << "Add Menu Item:" << info.ID;
- QListWidgetItem *item = new QListWidgetItem();
- item->setWhatsThis( info.ID );
- item->setIcon( LXDG::findIcon(info.icon,"") );
- item->setText( info.name );
- item->setToolTip( info.description );
- ui->list_menu->addItem(item);
- }
- checkmenuicons(); //update buttons
- }
- //Shortcuts Page
- if(!screenonly){ loadKeyboardShortcuts(); }
-
- //Defaults Page
- if(!screenonly){ loadDefaultSettings(); }
-
- //Session Page
- if(!screenonly){ loadSessionSettings(); }
-
- //Now disable the save button since nothing has changed yet
- loading = false;
- moddesk = modpan =false;
- if(!screenonly){ modmenu = modshort = moddef = modses = false; }//all setup back to original
- ui->push_save->setEnabled(modmenu || modshort || moddef || modses);
-}
-
-void MainUI::saveCurrentSettings(bool screenonly){
- QString DPrefix = "desktop-"+QString::number(currentDesktop())+"/";
- bool needreload = false;
- // Desktop Page
- if(moddesk){
- QStringList bgs; //get the list of backgrounds to use
- if(ui->radio_desk_multi->isChecked()){
- for(int i=0; i<ui->combo_desk_bg->count(); i++){
- bgs << ui->combo_desk_bg->itemData(i).toString();
- }
- }else if(ui->combo_desk_bg->count() > 0){
- bgs << ui->combo_desk_bg->itemData( ui->combo_desk_bg->currentIndex() ).toString();
- bgs.removeAll("default");
- }
- if(bgs.isEmpty()){ bgs << "default"; } //Make sure to always fall back on the default
- settings->setValue(DPrefix+"background/filelist", bgs);
- settings->setValue(DPrefix+"background/minutesToChange", ui->spin_desk_min->value());
- settings->setValue(DPrefix+"generateDesktopIcons", ui->check_desktop_autolaunchers->isChecked());
- settings->setValue(DPrefix+"background/format", ui->combo_desk_layout->currentData().toString());
- QStringList plugs;
- for(int i=0; i<ui->list_desktop_plugins->count(); i++){
- plugs << ui->list_desktop_plugins->item(i)->whatsThis();
- }
- if(settings->value(DPrefix+"pluginlist",QStringList()).toStringList() != plugs){
- settings->setValue(DPrefix+"pluginlist", plugs);
- needreload = true;
- }
- }
-
- // Panels Page
- if(modpan){
- settings->setValue(DPrefix+"panels", PANELS.length());
- savePanels();
- }
-
- // Menu Page
- if(modmenu && !screenonly){
- QStringList items;
- for(int i=0; i<ui->list_menu->count(); i++){
- items << ui->list_menu->item(i)->whatsThis();
- }
- settings->setValue("menu/itemlist", items);
- }
-
- //Shortcuts page
- if(modshort && !screenonly){
- saveKeyboardShortcuts();
- }
-
- //Defaults page
- if(moddef && !screenonly){
- //saveDefaultSettings();
- }
-
- //Session Page
- if(modses && !screenonly){
- saveSessionSettings();
- }
-
- //All done - make sure the changes get saved to file right now
- settings->sync();
- appsettings->sync();
- moddesk = modpan = false;
- if(!screenonly){ modmenu = modshort = moddef = modses = false; }
- ui->push_save->setEnabled(modmenu || modshort || moddef || modses); //wait for new changes
- //ui->push_save->setVisible(!ui->actionDefaults->isChecked() || modmenu || modshort || moddef || modses);
- if(needreload){
- //Wait 1 second
- for(int i=0; i<10; i++){ QApplication::processEvents(); usleep(100000); }
- loadCurrentSettings(screenonly);
- }
-}
-
-
-//===============
-// DESKTOP PAGE
-//===============
-void MainUI::deskbgchanged(){
- //Load the new image preview
- if(ui->combo_desk_bg->count()==0){
- ui->label_desk_bgview->setPixmap(QPixmap());
- ui->label_desk_bgview->setText(tr("No Background")+"\n"+tr("(use system default)"));
- ui->label_desk_bgview->setStyleSheet("");
- }else{
- QString path = ui->combo_desk_bg->itemData( ui->combo_desk_bg->currentIndex() ).toString();
- if(path=="default"){ path = DEFAULTBG; }
- if(QFile::exists(path)){
- QSize sz = ui->label_desk_bgview->size();
- sz.setWidth( sz.width() - (2*ui->label_desk_bgview->frameWidth()) );
- sz.setHeight( sz.height() - (2*ui->label_desk_bgview->frameWidth()) );
- //Update the preview/thumbnail for this item
- QPixmap pix(path);
- ui->label_desk_bgview->setPixmap( pix.scaled(sz, Qt::KeepAspectRatio, Qt::SmoothTransformation) );
- ui->combo_desk_bg->setItemIcon(ui->combo_desk_bg->currentIndex(), pix.scaled(64,64) );
- ui->label_desk_bgview->setStyleSheet("");
- }else if(path.startsWith("rgb(")){
- ui->label_desk_bgview->setPixmap(QPixmap());
- ui->label_desk_bgview->setText("");
- ui->label_desk_bgview->setStyleSheet("background-color: "+path+";");
- }else{
- ui->label_desk_bgview->setPixmap(QPixmap());
- ui->label_desk_bgview->setText(tr("File does not exist"));
- ui->label_desk_bgview->setStyleSheet("");
- }
- }
- //See if this constitues a change to the current settings and enable the save button
- if(!loading && ui->radio_desk_single->isChecked()){ ui->push_save->setEnabled(true); moddesk=true;}
- //Disable the background rotation option if only one background selected
- if(ui->combo_desk_bg->count()<2){
- ui->radio_desk_single->setChecked(true);
- ui->radio_desk_multi->setEnabled(false);
- ui->spin_desk_min->setEnabled(false);
- }else{
- ui->radio_desk_multi->setEnabled(true);
- ui->spin_desk_min->setEnabled(ui->radio_desk_multi->isChecked());
- }
-
- //Disable the bg remove button if no backgrounds loaded
- ui->tool_desk_rmbg->setEnabled(ui->combo_desk_bg->count()>0);
-}
-
-void MainUI::desktimechanged(){
- ui->spin_desk_min->setEnabled(ui->radio_desk_multi->isChecked());
- if(!loading){ ui->push_save->setEnabled(true); moddesk = true; }
-}
-
-void MainUI::deskbgremoved(){
- if(ui->combo_desk_bg->count()<1){ return; } //nothing to remove
- ui->combo_desk_bg->removeItem( ui->combo_desk_bg->currentIndex() );
- ui->push_save->setEnabled(true);
- moddesk = true;
-}
-
-void MainUI::deskbgadded(){
- //Prompt the user to find an image file to use for a background
- QString dir = LOS::LuminaShare().section("/lumina-desktop",0,0)+"/wallpapers/Lumina-DE";
- qDebug() << "Looking for wallpaper dir:" << dir;
- if( !QFile::exists(dir) ){ dir = QDir::homePath(); }
- QStringList imgs = LUtils::imageExtensions();
- for(int i=0; i<imgs.length(); i++){ imgs[i].prepend("*."); }
- QStringList bgs = QFileDialog::getOpenFileNames(this, tr("Find Background Image(s)"), dir, "Images ("+imgs.join(" ")+");;All Files (*)");
- if(bgs.isEmpty()){ return; }
- for(int i=0; i<bgs.length(); i++){
- ui->combo_desk_bg->addItem( QIcon(bgs[i]), bgs[i].section("/",-1), bgs[i]);
- }
- //Now move to the last item in the list (the new image(s));
- ui->combo_desk_bg->setCurrentIndex( ui->combo_desk_bg->count()-1 );
- //If multiple items selected, automatically enable the background rotation option
- if(bgs.length() > 1 && !ui->radio_desk_multi->isChecked()){
- ui->radio_desk_multi->setChecked(true);
- }
- ui->push_save->setEnabled(true); //this is definitely a change
- moddesk = true;
-}
-
-void MainUI::deskbgcoloradded(){
- //Prompt the user to select a color (no transparency allowed)
- QString color = getColorStyle("",false); //no initial color
- if(color.isEmpty()){ return; }
- //Add it to the list
- ui->combo_desk_bg->addItem( QString(tr("Solid Color: %1")).arg(color), color);
- //Now move to the last item in the list (the new image(s));
- ui->combo_desk_bg->setCurrentIndex( ui->combo_desk_bg->count()-1 );
-
- ui->push_save->setEnabled(true); //this is definitely a change
- moddesk = true;
-}
-
-void MainUI::deskbgdiradded(){
- //Add the files from a single directory
- QString dir = LOS::LuminaShare().section("/lumina-desktop",0,0)+"/wallpapers/Lumina-DE";
- qDebug() << "Looking for wallpaper dir:" << dir;
- if( !QFile::exists(dir) ){ dir = QDir::homePath(); }
- dir = QFileDialog::getExistingDirectory(this, tr("Find Background Image Directory"), dir, QFileDialog::ReadOnly);
- if(dir.isEmpty()){ return; }
- //Got a directory - go ahead and find all the valid image files within it
- QStringList imgs = LUtils::imageExtensions();
- for(int i=0; i<imgs.length(); i++){ imgs[i].prepend("*."); }
- QDir qdir(dir);
- QStringList bgs = qdir.entryList(imgs, QDir::Files | QDir::NoDotAndDotDot, QDir::Name);
- if(bgs.isEmpty()){ return; }
- for(int i=0; i<bgs.length(); i++){
- ui->combo_desk_bg->addItem( bgs[i], qdir.absoluteFilePath(bgs[i]));
- }
- //Now move to the last item in the list (the new image(s));
- ui->combo_desk_bg->setCurrentIndex( ui->combo_desk_bg->count()-1 );
- //If multiple items selected, automatically enable the background rotation option
- if(bgs.length() > 1 && !ui->radio_desk_multi->isChecked()){
- ui->radio_desk_multi->setChecked(true);
- }
- ui->push_save->setEnabled(true); //this is definitely a change
- moddesk = true;
-}
-
-void MainUI::deskbgdirradded(){
- //Recursively add files from a directory
- QString dir = LOS::LuminaShare().section("/lumina-desktop",0,0)+"/wallpapers/Lumina-DE";
- qDebug() << "Looking for wallpaper dir:" << dir;
- if( !QFile::exists(dir) ){ dir = QDir::homePath(); }
- dir = QFileDialog::getExistingDirectory(this, tr("Find Background Image Directory"), dir, QFileDialog::ReadOnly);
- if(dir.isEmpty()){ return; }
- //Got a directory - go ahead and get all the valid image file formats
- QStringList imgs = LUtils::imageExtensions();
- for(int i=0; i<imgs.length(); i++){ imgs[i].prepend("*."); }
- //Now load the directory and add all the valid files
- QStringList dirs = LUtils::listSubDirectories(dir, true); //find/list all the dirs
- dirs.prepend(dir); //make sure the main dir is also listed
- QStringList bgs;
- for(int d=0; d<dirs.length(); d++){
- QDir qdir(dirs[d]);
- QStringList tmp = qdir.entryList(imgs, QDir::Files | QDir::NoDotAndDotDot, QDir::Name);
- for(int j=0; j<tmp.length(); j++){ bgs << qdir.absoluteFilePath(tmp[j]); }
- }
- //Now add all the files into the widget
- for(int i=0; i<bgs.length(); i++){
- ui->combo_desk_bg->addItem( bgs[i].section("/",-1), bgs[i] );
- }
- //Now move to the last item in the list (the new image(s));
- ui->combo_desk_bg->setCurrentIndex( ui->combo_desk_bg->count()-1 );
- //If multiple items selected, automatically enable the background rotation option
- if(bgs.length() > 1 && !ui->radio_desk_multi->isChecked()){
- ui->radio_desk_multi->setChecked(true);
- }
- ui->push_save->setEnabled(true); //this is definitely a change
- moddesk = true;
-}
-
-
-void MainUI::deskplugadded(){
- GetPluginDialog dlg(this);
- dlg.LoadPlugins("desktop", PINFO);
- dlg.exec();
- if( !dlg.selected ){ return; } //cancelled
- QString newplug = dlg.plugID;
- QListWidgetItem *it = new QListWidgetItem();
- if(newplug=="applauncher"){
- //Prompt for the application to add
- XDGDesktop app = getSysApp();
- if(app.filePath.isEmpty()){ return; } //cancelled
- newplug.append("::"+app.filePath);
- //Now fill the item with the necessary info
- it->setWhatsThis(newplug);
- it->setText(app.name);
- it->setIcon(LXDG::findIcon(app.icon,"") );
- it->setToolTip(app.comment);
- }else{
- //Load the info for this plugin
- LPI info = PINFO->desktopPluginInfo(newplug);
- if( info.ID.isEmpty() ){ return; } //invalid plugin for some reason (should never happen)
- it->setWhatsThis(newplug);
- it->setText(info.name);
- it->setToolTip(info.description);
- it->setIcon( LXDG::findIcon(info.icon,"") );
- }
- ui->list_desktop_plugins->addItem(it);
- ui->list_desktop_plugins->scrollToItem(it);
- ui->push_save->setEnabled(true);
- moddesk = true;
-}
-
-void MainUI::deskplugremoved(){
- QList<QListWidgetItem*> sel = ui->list_desktop_plugins->selectedItems();
- if(sel.isEmpty()){ return; } //nothing to do
- for(int i=0; i<sel.length(); i++){
- delete sel[i];
- }
- ui->push_save->setEnabled(true);
- moddesk = true;
-}
-
-//=============
-// PANELS PAGE
-//=============
-void MainUI::panelValChanged(){
- ui->tool_panels_add->setEnabled(panelnumber < 12);
- if(!loading){ ui->push_save->setEnabled(true); modpan = true; }
-}
-
-void MainUI::newPanel(){
-
- if(panelnumber<0){ panelnumber=0; } //just in case
- panelnumber++;
- //Now create a new Panel widget with this number
- PanelWidget *tmp = new PanelWidget(ui->scroll_panels->widget(), this, PINFO);
- tmp->LoadSettings(settings, currentDesktop(), panelnumber-1);
- PANELS << tmp;
- connect(tmp, SIGNAL(PanelChanged()), this, SLOT(panelValChanged()) );
- connect(tmp, SIGNAL(PanelRemoved(int)), this, SLOT(removePanel(int)) );
- static_cast<QBoxLayout*>(ui->scroll_panels->widget()->layout())->insertWidget(PANELS.length()-1, tmp);
- //update the widget first (2 necessary for scroll below to work)
- ui->scroll_panels->update();
- QApplication::processEvents();
- QApplication::processEvents();
- ui->scroll_panels->ensureWidgetVisible(tmp);
- panelValChanged();
-}
-
-void MainUI::removePanel(int pan){
- //connected to a signal from the panel widget
- bool changed = false;
- for(int i=0; i<PANELS.length(); i++){
- int num = PANELS[i]->PanelNumber();
- if(num==pan){
- delete PANELS.takeAt(i);
- i--;
- changed = true;
- }else if(num > pan){
- PANELS[i]->ChangePanelNumber(num-1);
- changed = true;
- }
- }
- if(!changed){ return; } //nothing done
- panelnumber--;
- panelValChanged();
-}
-
-void MainUI::loadPanels(){
- //First clean any current panels
- for(int i=0; i<PANELS.length(); i++){ delete PANELS.takeAt(i); i--; }
- //Now create new panels
- int dnum = currentDesktop();
- if(ui->scroll_panels->widget()->layout()==0){
- ui->scroll_panels->widget()->setLayout( new QHBoxLayout() );
- ui->scroll_panels->widget()->layout()->setContentsMargins(0,0,0,0);
- }
- ui->scroll_panels->widget()->layout()->setAlignment(Qt::AlignLeft);
- //Clear anything left over in the layout
- for(int i=0; i<ui->scroll_panels->widget()->layout()->count(); i++){
- delete ui->scroll_panels->widget()->layout()->takeAt(i);
- }
- for(int i=0; i<panelnumber; i++){
- PanelWidget *tmp = new PanelWidget(ui->scroll_panels->widget(), this, PINFO);
- tmp->LoadSettings(settings, dnum, i);
- PANELS << tmp;
- connect(tmp, SIGNAL(PanelChanged()), this, SLOT(panelValChanged()) );
- connect(tmp, SIGNAL(PanelRemoved(int)), this, SLOT(removePanel(int)) );
- ui->scroll_panels->widget()->layout()->addWidget(tmp);
- }
- static_cast<QHBoxLayout*>(ui->scroll_panels->widget()->layout())->addStretch();
-}
-
-void MainUI::savePanels(){
- for(int i=0; i<PANELS.length(); i++){
- PANELS[i]->SaveSettings(settings);
- }
-}
-
-//============
-// MENU PAGE
-//============
-void MainUI::addmenuplugin(){
- GetPluginDialog dlg(this);
- dlg.LoadPlugins("menu", PINFO);
- dlg.exec();
- if(!dlg.selected){ return; } //cancelled
- QString plug = dlg.plugID;
- //Now add the item to the list
- LPI info = PINFO->menuPluginInfo(plug);
- QListWidgetItem *it;
- if(info.ID=="app"){
- //Need to prompt for the exact application to add to the menu
- // Note: whatsThis() format: "app::::< *.desktop file path >"
- XDGDesktop desk = getSysApp();
- if(desk.filePath.isEmpty()){ return; }//nothing selected
- //Create the item for the list
- it = new QListWidgetItem(LXDG::findIcon(desk.icon,""), desk.name );
- it->setWhatsThis(info.ID+"::::"+desk.filePath);
- it->setToolTip( desk.comment );
- }else{
- it = new QListWidgetItem( LXDG::findIcon(info.icon,""), info.name );
- it->setWhatsThis(info.ID);
- it->setToolTip( info.description );
- }
- ui->list_menu->addItem(it);
- ui->list_menu->setCurrentRow(ui->list_menu->count()-1); //make sure it is auto-selected
- ui->push_save->setEnabled(true);
- modmenu = true;
-}
-
-void MainUI::rmmenuplugin(){
- if(ui->list_menu->currentRow() < 0){ return; } //no selection
- delete ui->list_menu->takeItem( ui->list_menu->currentRow() );
- ui->push_save->setEnabled(true);
- modmenu = true;
-}
-
-void MainUI::upmenuplugin(){
- int row = ui->list_menu->currentRow();
- if(row <= 0){ return; }
- ui->list_menu->insertItem(row-1, ui->list_menu->takeItem(row));
- ui->list_menu->setCurrentRow(row-1);
- ui->push_save->setEnabled(true);
- checkmenuicons();
- modmenu = true;
-}
-
-void MainUI::downmenuplugin(){
- int row = ui->list_menu->currentRow();
- if(row < 0 || row >= (ui->list_menu->count()-1) ){ return; }
- ui->list_menu->insertItem(row+1, ui->list_menu->takeItem(row));
- ui->list_menu->setCurrentRow(row+1);
- ui->push_save->setEnabled(true);
- checkmenuicons();
- modmenu = true;
-}
-
-void MainUI::checkmenuicons(){
- ui->tool_menu_up->setEnabled( ui->list_menu->currentRow() > 0 );
- ui->tool_menu_dn->setEnabled( ui->list_menu->currentRow() < (ui->list_menu->count()-1) );
- ui->tool_menu_rm->setEnabled( ui->list_menu->currentRow() >=0 );
-}
-
-//===========
-// Shortcuts Page
-//===========
-void MainUI::loadKeyboardShortcuts(){
- ui->tree_shortcut->clear();
- QStringList info = readFile(QString(getenv("XDG_CONFIG_HOME"))+"/lumina-desktop/fluxbox-keys");
- //First take care of the special Lumina options
- QStringList special;
- special << "Exec lumina-open -volumeup::::"+tr("Audio Volume Up") \
- << "Exec lumina-open -volumedown::::"+tr("Audio Volume Down") \
- << "Exec lumina-open -brightnessup::::"+tr("Screen Brightness Up") \
- << "Exec lumina-open -brightnessdown::::"+tr("Screen Brightness Down") \
- << "Exec lumina-screenshot::::"+tr("Take Screenshot") \
- << "Exec xscreensaver-command -lock::::"+tr("Lock Screen");
- for(int i=0; i<special.length(); i++){
- QString spec = info.filter(":"+special[i].section("::::",0,0)).join("").simplified();
- QTreeWidgetItem *it = new QTreeWidgetItem();
- it->setText(0, special[i].section("::::",1,1));
- it->setWhatsThis(0, special[i].section("::::",0,0));
- if(!spec.isEmpty()){
- info.removeAll(spec); //this line has been dealt with - remove it
- it->setText(1, fluxToDispKeys(spec.section(":",0,0)) ); //need to make this easier to read later
- it->setWhatsThis(1, spec.section(":",0,0) );
- }
- ui->tree_shortcut->addTopLevelItem(it);
- }
- //Now add support for all the other fluxbox shortcuts
- for(int i=0; i<info.length(); i++){
- //skip empty/invalid lines, as well as non-global shortcuts (OnMenu, OnWindow, etc..)
- if(info[i].isEmpty() || info[i].startsWith("#") || info[i].startsWith("!") || info[i].startsWith("On")){ continue; }
- QString exec = info[i].section(":",1,100);
- QString showexec = exec;
- if(showexec.startsWith("If {Matches")){ showexec = showexec.section("{",2,2).section("}",0,0); }
- if(showexec.startsWith("Exec ")){ showexec.replace("Exec ","Run "); }
- else{ showexec = showexec.section("(",0,0).section("{",0,0); } //built-in command - remove the extra commands on some of them
- QTreeWidgetItem *it = new QTreeWidgetItem();
- it->setText(0, showexec.simplified() );
- it->setWhatsThis(0, exec);
- it->setText(1, fluxToDispKeys(info[i].section(":",0,0)) ); //need to make this easier to read later
- it->setWhatsThis(1, info[i].section(":",0,0) );
- ui->tree_shortcut->addTopLevelItem(it);
- }
-}
-
-void MainUI::saveKeyboardShortcuts(){
- //First get all the current listings
- QStringList current;
- for(int i=0; i<ui->tree_shortcut->topLevelItemCount(); i++){
- QTreeWidgetItem *it = ui->tree_shortcut->topLevelItem(i);
- current << it->whatsThis(1)+" :"+it->whatsThis(0); //Full Fluxbox command line
- }
-
- QStringList info = readFile(QString(getenv("XDG_CONFIG_HOME"))+"/lumina-desktop/fluxbox-keys");
- for(int i=0; i<info.length(); i++){
- if(info[i].isEmpty() || info[i].startsWith("#") || info[i].startsWith("!")){ continue; }
- if(current.filter(info[i].section(":",1,10)).length() > 0){
- //Found Item to be replaced/removed
- QString it = current.filter(info[i].section(":",1,10)).join("\n").section("\n",0,0); //ensure only the first match
- if(it.section(" :",0,0).isEmpty()){ info.removeAt(i); i--; } //remove this entry
- else{ info[i] = it; } //replace this entry
- current.removeAll(it); //already taken care of - remove it from the current list
- }
- }
- //Now save the new contents
- for(int i=0; i<current.length(); i++){
- if(!current[i].section(" :",0,0).isEmpty()){ info << current[i]; }
- }
- bool ok = overwriteFile(QString(getenv("XDG_CONFIG_HOME"))+"/lumina-desktop/fluxbox-keys", info);
- if(!ok){ qDebug() << "Warning: Could not save ~/.lumina/fluxbox-keys"; }
-}
-
-void MainUI::clearKeyBinding(){
- if(ui->tree_shortcut->currentItem()==0){ return; }
- ui->tree_shortcut->currentItem()->setText(1,"");
- ui->tree_shortcut->currentItem()->setWhatsThis(1,"");
- ui->push_save->setEnabled(true);
- modshort=true;
-}
-
-void MainUI::applyKeyBinding(){
- QKeySequence seq = ui->keyEdit_shortcut->keySequence();
- qDebug() << "New Key Sequence:" << seq.toString(QKeySequence::NativeText) << seq.toString(QKeySequence::PortableText);
- if(seq.isEmpty()){
- //Verify removal of the action first
-
- //Now remove the action
- delete ui->tree_shortcut->currentItem();
- }else{
- QTreeWidgetItem *it = ui->tree_shortcut->currentItem();
- it->setText(1,seq.toString(QKeySequence::NativeText));
- it->setWhatsThis(1,dispToFluxKeys(seq.toString(QKeySequence::PortableText)));
- qDebug() << " - Flux Sequence:" << it->whatsThis(1);
- }
- ui->keyEdit_shortcut->clear();
- ui->push_save->setEnabled(true);
- modshort=true;
-}
-
-void MainUI::updateKeyConfig(){
- ui->group_shortcut_modify->setEnabled(ui->tree_shortcut->currentItem()!=0);
- ui->keyEdit_shortcut->clear();
-}
-
-//===========
-// Defaults Page
-//===========
-void MainUI::changeDefaultBrowser(){
- //Prompt for the new app
- XDGDesktop desk = getSysApp(true);
- if(desk.filePath.isEmpty()){ return; }//nothing selected
- if(desk.filePath=="reset"){
- desk.filePath="";
- }
- //save the new app setting and adjust the button appearance
- appsettings->setValue("default/webbrowser", desk.filePath);
- LXDG::setDefaultAppForMime("x-scheme-handler/http", desk.filePath.section("/",-1));
- LXDG::setDefaultAppForMime("x-scheme-handler/https", desk.filePath.section("/",-1));
- QString tmp = desk.filePath;
- if(tmp.endsWith(".desktop")){
- bool ok = false;
- XDGDesktop file = LXDG::loadDesktopFile(tmp, ok);
- if(!ok || file.filePath.isEmpty()){
- //Might be a binary - just print out the raw "path"
- ui->tool_default_webbrowser->setText(tmp.section("/",-1));
- ui->tool_default_webbrowser->setIcon( LXDG::findIcon("application-x-executable","") );
- }else{
- ui->tool_default_webbrowser->setText(desk.name);
- ui->tool_default_webbrowser->setIcon(LXDG::findIcon(desk.icon,"") );
- }
- }else if(tmp.isEmpty()){
- ui->tool_default_webbrowser->setText(tr("Click to Set"));
- ui->tool_default_webbrowser->setIcon( LXDG::findIcon("system-help","") );
- }else{
- //Might be a binary - just print out the raw "path"
- ui->tool_default_webbrowser->setText(tmp.section("/",-1));
- ui->tool_default_webbrowser->setIcon( LXDG::findIcon("application-x-executable","") );
- }
-}
-
-void MainUI::changeDefaultEmail(){
- //Prompt for the new app
- XDGDesktop desk = getSysApp(true); //allow reset to default
- if(desk.filePath.isEmpty()){ return; }//nothing selected
- if(desk.filePath=="reset"){
- desk.filePath="";
- }
- //save the new app setting and adjust the button appearance
- LXDG::setDefaultAppForMime("application/email",desk.filePath);
- // appsettings->setValue("default/email", desk.filePath);
- QString tmp = desk.filePath;
- if(tmp.endsWith(".desktop")){
- bool ok = false;
- XDGDesktop file = LXDG::loadDesktopFile(tmp, ok);
- if(!ok || file.filePath.isEmpty()){
- //Might be a binary - just print out the raw "path"
- ui->tool_default_email->setText(tmp.section("/",-1));
- ui->tool_default_email->setIcon( LXDG::findIcon("application-x-executable","") );
- }else{
- ui->tool_default_email->setText(file.name);
- ui->tool_default_email->setIcon(LXDG::findIcon(file.icon,"") );
- }
- }else if(tmp.isEmpty()){
- ui->tool_default_email->setText(tr("Click to Set"));
- ui->tool_default_email->setIcon( LXDG::findIcon("system-help","") );
- }else{
- //Might be a binary - just print out the raw "path"
- ui->tool_default_email->setText(tmp.section("/",-1));
- ui->tool_default_email->setIcon( LXDG::findIcon("application-x-executable","") );
- }
-}
-
-void MainUI::changeDefaultFileManager(){
- //Prompt for the new app
- XDGDesktop desk = getSysApp(true);
- if(desk.filePath.isEmpty()){ return; }//nothing selected
- if(desk.filePath=="reset"){
- desk.filePath="lumina-fm";
- }
- //save the new app setting and adjust the button appearance
- //appsettings->setValue("default/directory", desk.filePath);
- //sessionsettings->setValue("default-filemanager", desk.filePath);
- LXDG::setDefaultAppForMime("inode/directory", desk.filePath.section("/",-1));
- QString tmp = desk.filePath;
- if(tmp.endsWith(".desktop")){
- bool ok = false;
- XDGDesktop file = LXDG::loadDesktopFile(tmp, ok);
- if(!ok || file.filePath.isEmpty()){
- //Might be a binary - just print out the raw "path"
- ui->tool_default_filemanager->setText(tmp.section("/",-1));
- ui->tool_default_filemanager->setIcon( LXDG::findIcon("application-x-executable","") );
- }else{
- ui->tool_default_filemanager->setText(file.name);
- ui->tool_default_filemanager->setIcon(LXDG::findIcon(file.icon,"") );
- }
- }else if(tmp.isEmpty()){
- ui->tool_default_filemanager->setText(tr("Click to Set"));
- ui->tool_default_filemanager->setIcon( LXDG::findIcon("system-help","") );
- }else{
- //Might be a binary - just print out the raw "path"
- ui->tool_default_filemanager->setText(tmp.section("/",-1));
- ui->tool_default_filemanager->setIcon( LXDG::findIcon("application-x-executable","") );
- }
-}
-
-void MainUI::changeDefaultTerminal(){
- //Prompt for the new app
- XDGDesktop desk = getSysApp(true);
- if(desk.filePath.isEmpty()){ return; }//nothing selected
- if(desk.filePath=="reset"){
- desk.filePath="xterm";
- }
- //save the new app setting and adjust the button appearance
- LXDG::setDefaultAppForMime("application/terminal",desk.filePath);
- //sessionsettings->setValue("default-terminal", desk.filePath);
- QString tmp = desk.filePath;
- if(tmp.endsWith(".desktop")){
- bool ok = false;
- XDGDesktop file = LXDG::loadDesktopFile(tmp, ok);
- if(!ok || file.filePath.isEmpty()){
- //Might be a binary - just print out the raw "path"
- ui->tool_default_terminal->setText(tmp.section("/",-1));
- ui->tool_default_terminal->setIcon( LXDG::findIcon("application-x-executable","") );
- }else{
- ui->tool_default_terminal->setText(file.name);
- ui->tool_default_terminal->setIcon(LXDG::findIcon(file.icon,"") );
- }
- }else if(tmp.isEmpty()){
- ui->tool_default_terminal->setText(tr("Click to Set"));
- ui->tool_default_terminal->setIcon( LXDG::findIcon("system-help","") );
- }else{
- //Might be a binary - just print out the raw "path"
- ui->tool_default_terminal->setText(tmp.section("/",-1));
- ui->tool_default_terminal->setIcon( LXDG::findIcon("application-x-executable","") );
- }
-}
-
-void MainUI::loadDefaultSettings(){
- //First load the lumina-open specific defaults
- // - Default File Manager
- QString tmp = LXDG::findDefaultAppForMime("inode/directory");
- if(tmp.isEmpty()){ tmp = "lumina-fm"; }
- if( !QFile::exists(tmp) && !LUtils::isValidBinary(tmp) ){ qDebug() << "Invalid Settings:" << tmp; tmp.clear(); } //invalid settings
- if(tmp.endsWith(".desktop")){
- bool ok = false;
- XDGDesktop file = LXDG::loadDesktopFile(tmp, ok);
- if(!ok || file.filePath.isEmpty()){
- //Might be a binary - just print out the raw "path"
- ui->tool_default_filemanager->setText(tmp.section("/",-1));
- ui->tool_default_filemanager->setIcon( LXDG::findIcon("application-x-executable","") );
- }else{
- ui->tool_default_filemanager->setText(file.name);
- ui->tool_default_filemanager->setIcon(LXDG::findIcon(file.icon,"") );
- }
- }else if(tmp.isEmpty()){
- ui->tool_default_filemanager->setText(tr("Click to Set"));
- ui->tool_default_filemanager->setIcon( LXDG::findIcon("system-help","") );
- }else{
- //Might be a binary - just print out the raw "path"
- ui->tool_default_filemanager->setText(tmp.section("/",-1));
- ui->tool_default_filemanager->setIcon( LXDG::findIcon("application-x-executable","") );
- }
- // - Default Terminal
- tmp =LXDG::findDefaultAppForMime("application/terminal"); //sessionsettings->value("default-terminal", "xterm").toString();
- if( !QFile::exists(tmp) && !LUtils::isValidBinary(tmp) ){ qDebug() << "Invalid Settings:" << tmp; tmp.clear(); } //invalid settings
- if(tmp.endsWith(".desktop")){
- bool ok = false;
- XDGDesktop file = LXDG::loadDesktopFile(tmp, ok);
- if(!ok || file.filePath.isEmpty()){
- //Might be a binary - just print out the raw "path"
- ui->tool_default_terminal->setText(tmp.section("/",-1));
- ui->tool_default_terminal->setIcon( LXDG::findIcon("application-x-executable","") );
- }else{
- ui->tool_default_terminal->setText(file.name);
- ui->tool_default_terminal->setIcon(LXDG::findIcon(file.icon,"") );
- }
- }else if(tmp.isEmpty()){
- ui->tool_default_terminal->setText(tr("Click to Set"));
- ui->tool_default_terminal->setIcon( LXDG::findIcon("system-help","") );
- }else{
- //Might be a binary - just print out the raw "path"
- ui->tool_default_terminal->setText(tmp.section("/",-1));
- ui->tool_default_terminal->setIcon( LXDG::findIcon("application-x-executable","") );
- }
- // - Default Web Browser
- tmp = LXDG::findDefaultAppForMime("x-scheme-handler/http"); //appsettings->value("default/webbrowser", "").toString();
- if( !QFile::exists(tmp) && !LUtils::isValidBinary(tmp) ){ qDebug() << "Invalid Settings:" << tmp; tmp.clear(); } //invalid settings
- if(tmp.endsWith(".desktop")){
- bool ok = false;
- XDGDesktop file = LXDG::loadDesktopFile(tmp, ok);
- if(!ok || file.filePath.isEmpty()){
- //Might be a binary - just print out the raw "path"
- ui->tool_default_webbrowser->setText(tmp.section("/",-1));
- ui->tool_default_webbrowser->setIcon( LXDG::findIcon("application-x-executable","") );
- }else{
- ui->tool_default_webbrowser->setText(file.name);
- ui->tool_default_webbrowser->setIcon(LXDG::findIcon(file.icon,"") );
- }
- }else if(tmp.isEmpty()){
- ui->tool_default_webbrowser->setText(tr("Click to Set"));
- ui->tool_default_webbrowser->setIcon( LXDG::findIcon("system-help","") );
- }else{
- //Might be a binary - just print out the raw "path"
- ui->tool_default_webbrowser->setText(tmp.section("/",-1));
- ui->tool_default_webbrowser->setIcon( LXDG::findIcon("application-x-executable","") );
- }
- // - Default Email Client
- tmp = LXDG::findDefaultAppForMime("application/email"); //appsettings->value("default/email", "").toString();
- if( !QFile::exists(tmp) && !LUtils::isValidBinary(tmp) ){ qDebug() << "Invalid Settings:" << tmp; tmp.clear(); } //invalid settings
- if(tmp.endsWith(".desktop")){
- bool ok = false;
- XDGDesktop file = LXDG::loadDesktopFile(tmp, ok);
- if(!ok || file.filePath.isEmpty()){
- //Might be a binary - just print out the raw "path"
- ui->tool_default_email->setText(tmp.section("/",-1));
- ui->tool_default_email->setIcon( LXDG::findIcon("application-x-executable","") );
- }else{
- ui->tool_default_email->setText(file.name);
- ui->tool_default_email->setIcon(LXDG::findIcon(file.icon,"") );
- }
- }else if(tmp.isEmpty()){
- ui->tool_default_email->setText(tr("Click to Set"));
- ui->tool_default_email->setIcon( LXDG::findIcon("system-help","") );
- }else{
- //Might be a binary - just print out the raw "path"
- ui->tool_default_email->setText(tmp.section("/",-1));
- ui->tool_default_email->setIcon( LXDG::findIcon("application-x-executable","") );
- }
-
- //Now load the XDG mime defaults
- ui->tree_defaults->clear();
- QStringList defMimeList = LXDG::listFileMimeDefaults();
- //qDebug() << "Mime List:\n" << defMimeList.join("\n");
- defMimeList.sort(); //sort by group/mime
- //Now fill the tree by group/mime
- QTreeWidgetItem *group = new QTreeWidgetItem(0); //nothing at the moment
- QString ccat;
- for(int i=0; i<defMimeList.length(); i++){
- //Get the info from this entry
- QString mime = defMimeList[i].section("::::",0,0);
- QString cat = mime.section("/",0,0);
- QString extlist = defMimeList[i].section("::::",1,1);
- QString def = defMimeList[i].section("::::",2,2);
- QString comment = defMimeList[i].section("::::",3,50);
- //Now check if this is a new category
- if(ccat!=cat){
- //New group
- group = new QTreeWidgetItem(0);
- group->setText(0, cat); //add translations for known/common groups later
- ui->tree_defaults->addTopLevelItem(group);
- ccat = cat;
- }
- //Now create the entry
- QTreeWidgetItem *it = new QTreeWidgetItem();
- it->setWhatsThis(0,mime); // full mimetype
- it->setText(0, QString(tr("%1 (%2)")).arg(mime.section("/",-1), extlist) );
- it->setText(2,comment);
- it->setToolTip(0, comment); it->setToolTip(1,comment);
- //Now load the default (if there is one)
- it->setWhatsThis(1,def); //save for later
- if(def.endsWith(".desktop")){
- bool ok = false;
- XDGDesktop file = LXDG::loadDesktopFile(def, ok);
- if(!ok || file.filePath.isEmpty()){
- //Might be a binary - just print out the raw "path"
- it->setText(1,def.section("/",-1));
- it->setIcon(1, LXDG::findIcon("application-x-executable","") );
- }else{
- it->setText(1, file.name);
- it->setIcon(1, LXDG::findIcon(file.icon,"") );
- }
- }else if(!def.isEmpty()){
- //Binary/Other default
- it->setText(1, def.section("/",-1));
- it->setIcon(1, LXDG::findIcon("application-x-executable","") );
- }
- group->addChild(it);
- }
-
- ui->tree_defaults->sortItems(0,Qt::AscendingOrder);
-
- checkdefaulticons();
-}
-
-void MainUI::cleardefaultitem(){
- QTreeWidgetItem *it = ui->tree_defaults->currentItem();
- if(it==0){ return; } //no item selected
- QList<QTreeWidgetItem*> list;
- for(int i=0; i<it->childCount(); i++){
- list << it->child(i);
- }
- if(list.isEmpty()){ list << it; } //just do the current item
- //Now clear the items
- for(int i=0; i<list.length(); i++){
- //Clear it in the back end
- LXDG::setDefaultAppForMime(list[i]->whatsThis(0), "");
- //Now clear it in the UI
- list[i]->setWhatsThis(1,""); //clear the app path
- list[i]->setIcon(1,QIcon()); //clear the icon
- list[i]->setText(1,""); //clear the name
- }
- //ui->push_save->setEnabled(true);
- //moddef = true;
-}
-
-void MainUI::setdefaultitem(){
- QTreeWidgetItem *it = ui->tree_defaults->currentItem();
- if(it==0){ return; } //no item selected
- QList<QTreeWidgetItem*> list;
- for(int i=0; i<it->childCount(); i++){
- list << it->child(i);
- }
- if(list.isEmpty()){ list << it; } //just do the current item
- //Prompt for which application to use
- XDGDesktop desk = getSysApp();
- if(desk.filePath.isEmpty()){ return; }//nothing selected
- //Now set the items
- for(int i=0; i<list.length(); i++){
- //Set it in the back end
- LXDG::setDefaultAppForMime(list[i]->whatsThis(0), desk.filePath);
- //Set it in the UI
- list[i]->setWhatsThis(1,desk.filePath); //app path
- list[i]->setIcon(1,LXDG::findIcon(desk.icon,"")); //reset the icon
- list[i]->setText(1,desk.name); //reset the name
- }
- //ui->push_save->setEnabled(true);
- //moddef = true;
-}
-
-void MainUI::setdefaultbinary(){
- QTreeWidgetItem *it = ui->tree_defaults->currentItem();
- if(it==0){ return; } //no item selected
- QList<QTreeWidgetItem*> list;
- for(int i=0; i<it->childCount(); i++){
- list << it->child(i);
- }
- if(list.isEmpty()){ list << it; } //just do the current item
- //Prompt for which binary to use
- QFileDialog dlg(this);
- //dlg.setFilter(QDir::Executable | QDir::Files); //Does not work! Filters executable files as well as breaks browsing capabilities
- dlg.setFileMode(QFileDialog::ExistingFile);
- dlg.setDirectory( LOS::AppPrefix()+"bin" );
- dlg.setWindowTitle(tr("Select Binary"));
- if( !dlg.exec() || dlg.selectedFiles().isEmpty() ){
- return; //cancelled
- }
- QString path = dlg.selectedFiles().first();
- //Make sure it is executable
- if( !QFileInfo(path).isExecutable()){
- QMessageBox::warning(this, tr("Invalid Binary"), tr("The selected binary is not executable!"));
- return;
- }
- //Now set the items
- for(int i=0; i<list.length(); i++){
- //Set it in the back end
- LXDG::setDefaultAppForMime(list[i]->whatsThis(0), path);
- //Set it in the UI
- list[i]->setWhatsThis(1,path); //app path
- list[i]->setIcon(1,LXDG::findIcon("application-x-executable","")); //clear the icon
- list[i]->setText(1,path.section("/",-1)); //clear the name
- }
- //ui->push_save->setEnabled(true);
- //moddef = true;
-}
-
-void MainUI::checkdefaulticons(){
- QTreeWidgetItem *it = ui->tree_defaults->currentItem();
- ui->tool_defaults_set->setEnabled(it!=0);
- ui->tool_defaults_clear->setEnabled(it!=0);
- ui->tool_defaults_setbin->setEnabled(it!=0);
-}
-
-//===========
-// Session Page
-//===========
-void MainUI::loadSessionSettings(){
- QStringList FB = readFile(QString(getenv("XDG_CONFIG_HOME"))+"/lumina-desktop/fluxbox-init");
- QString val;
- //Do the window placement
- val = FB.filter("session.screen0.windowPlacement:").join("").section(":",1,1).simplified();
- //qDebug() << "Window Placement:" << val;
- int index = ui->combo_session_wloc->findData(val);
- if(index<0){ index = 0;} //use the default
- ui->combo_session_wloc->setCurrentIndex(index);
-
- //Do the window focus
- val = FB.filter("session.screen0.focusModel:").join("").section(":",1,1).simplified();
- //qDebug() << "Window Focus:" << val;
- index = ui->combo_session_wfocus->findData(val);
- if(index<0){ index = 0;} //use the default
- ui->combo_session_wfocus->setCurrentIndex(index);
-
- //Do the window theme
- val = FB.filter("session.styleFile:").join("").section(":",1,1).simplified();
- //qDebug() << "Window Theme:" << val;
- index = ui->combo_session_wtheme->findData(val);
- if(index<0){ index = 0;} //use the default
- ui->combo_session_wtheme->setCurrentIndex(index);
-
- //Now the number of workspaces
- val = FB.filter("session.screen0.workspaces:").join("").section(":",1,1).simplified();
- //qDebug() << "Number of Workspaces:" << val;
- if(!val.isEmpty()){ ui->spin_session_wkspaces->setValue(val.toInt()); }
-
- //Now do the startup applications
- STARTAPPS = LXDG::findAutoStartFiles(true); //also want invalid/disabled items
- //qDebug() << "StartApps:";
- ui->list_session_start->clear();
- for(int i=0; i<STARTAPPS.length(); i++){
- //qDebug() << STARTAPPS[i].filePath +" -> " +STARTAPPS[i].name << STARTAPPS[i].isHidden;
- if( !LXDG::checkValidity(STARTAPPS[i],false) || !QFile::exists(STARTAPPS[i].filePath) ){ continue; }
- QListWidgetItem *it = new QListWidgetItem( LXDG::findIcon(STARTAPPS[i].icon,"application-x-executable"), STARTAPPS[i].name );
- it->setWhatsThis(STARTAPPS[i].filePath); //keep the file location
- it->setToolTip(STARTAPPS[i].comment);
- if(STARTAPPS[i].isHidden){ it->setCheckState( Qt::Unchecked); }
- else{it->setCheckState( Qt::Checked); }
- ui->list_session_start->addItem(it);
- }
-
-
- //Now do the general session options
- ui->check_session_numlock->setChecked( sessionsettings->value("EnableNumlock", true).toBool() );
- ui->check_session_playloginaudio->setChecked( sessionsettings->value("PlayStartupAudio",true).toBool() );
- ui->check_session_playlogoutaudio->setChecked( sessionsettings->value("PlayLogoutAudio",true).toBool() );
- ui->push_session_setUserIcon->setIcon( LXDG::findIcon(QDir::homePath()+"/.loginIcon.png", "user-identity") );
- ui->line_session_time->setText( sessionsettings->value("TimeFormat","").toString() );
- ui->line_session_date->setText( sessionsettings->value("DateFormat","").toString() );
- index = ui->combo_session_datetimeorder->findData( sessionsettings->value("DateTimeOrder","timeonly").toString() );
- ui->combo_session_datetimeorder->setCurrentIndex(index);
-
- //Now do the localization settings
- val = sessionsettings->value("InitLocale/LANG", "").toString();
- index = ui->combo_locale_lang->findData(val);
- if(index<0){ index = 0; } //system default
- ui->combo_locale_lang->setCurrentIndex(index);
- val = sessionsettings->value("InitLocale/LC_MESSAGES", "").toString();
- index = ui->combo_locale_message->findData(val);
- if(index<0){ index = 0; } //system default
- ui->combo_locale_message->setCurrentIndex(index);
- val = sessionsettings->value("InitLocale/LC_TIME", "").toString();
- index = ui->combo_locale_time->findData(val);
- if(index<0){ index = 0; } //system default
- ui->combo_locale_time->setCurrentIndex(index);
- val = sessionsettings->value("InitLocale/NUMERIC", "").toString();
- index = ui->combo_locale_numeric->findData(val);
- if(index<0){ index = 0; } //system default
- ui->combo_locale_numeric->setCurrentIndex(index);
- val = sessionsettings->value("InitLocale/MONETARY", "").toString();
- index = ui->combo_locale_monetary->findData(val);
- if(index<0){ index = 0; } //system default
- ui->combo_locale_monetary->setCurrentIndex(index);
- val = sessionsettings->value("InitLocale/COLLATE", "").toString();
- index = ui->combo_locale_collate->findData(val);
- if(index<0){ index = 0; } //system default
- ui->combo_locale_collate->setCurrentIndex(index);
- val = sessionsettings->value("InitLocale/CTYPE", "").toString();
- index = ui->combo_locale_ctype->findData(val);
- if(index<0){ index = 0; } //system default
- ui->combo_locale_ctype->setCurrentIndex(index);
-
- //Now do the session theme options
- ui->combo_session_themefile->clear();
- ui->combo_session_colorfile->clear();
- ui->combo_session_icontheme->clear();
- QStringList current = LTHEME::currentSettings();
- // - local theme templates
- QStringList tmp = LTHEME::availableLocalThemes();
- tmp.sort();
- for(int i=0; i<tmp.length(); i++){
- ui->combo_session_themefile->addItem(tmp[i].section("::::",0,0)+" ("+tr("Local")+")", tmp[i].section("::::",1,1));
- if(tmp[i].section("::::",1,1)==current[0]){ ui->combo_session_themefile->setCurrentIndex(ui->combo_session_themefile->count()-1); }
- }
- // - system theme templates
- tmp = LTHEME::availableSystemThemes();
- tmp.sort();
- for(int i=0; i<tmp.length(); i++){
- ui->combo_session_themefile->addItem(tmp[i].section("::::",0,0)+" ("+tr("System")+")", tmp[i].section("::::",1,1));
- if(tmp[i].section("::::",1,1)==current[0]){ ui->combo_session_themefile->setCurrentIndex(ui->combo_session_themefile->count()-1); }
- }
- // - local color schemes
- tmp = LTHEME::availableLocalColors();
- tmp.sort();
- for(int i=0; i<tmp.length(); i++){
- ui->combo_session_colorfile->addItem(tmp[i].section("::::",0,0)+" ("+tr("Local")+")", tmp[i].section("::::",1,1));
- if(tmp[i].section("::::",1,1)==current[1]){ ui->combo_session_colorfile->setCurrentIndex(ui->combo_session_colorfile->count()-1); }
- }
- // - system color schemes
- tmp = LTHEME::availableSystemColors();
- tmp.sort();
- for(int i=0; i<tmp.length(); i++){
- ui->combo_session_colorfile->addItem(tmp[i].section("::::",0,0)+" ("+tr("System")+")", tmp[i].section("::::",1,1));
- if(tmp[i].section("::::",1,1)==current[1]){ ui->combo_session_colorfile->setCurrentIndex(ui->combo_session_colorfile->count()-1); }
- }
- // - icon themes
- tmp = LTHEME::availableSystemIcons();
- tmp.sort();
- for(int i=0; i<tmp.length(); i++){
- ui->combo_session_icontheme->addItem(tmp[i]);
- if(tmp[i]==current[2]){ ui->combo_session_icontheme->setCurrentIndex(i); }
- }
- // - Font
- ui->font_session_theme->setCurrentFont( QFont(current[3]) );
- // - Font Size
- ui->spin_session_fontsize->setValue( current[4].section("p",0,0).toInt() );
-
- int cur = ui->combo_session_cursortheme->findText( LTHEME::currentCursor() );
- if(cur>=0){ ui->combo_session_cursortheme->setCurrentIndex(cur); }
-
- //sessionstartchanged(); //make sure to update buttons
- sessionLoadTimeSample();
- sessionLoadDateSample();
- sessionCursorChanged();
-}
-
-void MainUI::saveSessionSettings(){
- //Do the fluxbox settings first
- QStringList FB = readFile(QString(getenv("XDG_CONFIG_HOME"))+"/lumina-desktop/fluxbox-init");
- // - window placement
- int index = FB.indexOf( FB.filter("session.screen0.windowPlacement:").join("") );
- QString line = "session.screen0.windowPlacement:\t"+ui->combo_session_wloc->itemData( ui->combo_session_wloc->currentIndex() ).toString();
- if(index < 0){ FB << line; } //add line to the end of the file
- else{ FB[index] = line; } //replace the current setting with the new one
- // - window focus
- index = FB.indexOf( FB.filter("session.screen0.focusModel:").join("") );
- line = "session.screen0.focusModel:\t"+ui->combo_session_wfocus->itemData( ui->combo_session_wfocus->currentIndex() ).toString();
- if(index < 0){ FB << line; } //add line to the end of the file
- else{ FB[index] = line; } //replace the current setting with the new one
- // - window theme
- index = FB.indexOf( FB.filter("session.styleFile:").join("") );
- line = "session.styleFile:\t"+ui->combo_session_wtheme->itemData( ui->combo_session_wtheme->currentIndex() ).toString();
- if(index < 0){ FB << line; } //add line to the end of the file
- else{ FB[index] = line; } //replace the current setting with the new one
- // - workspace number
- index = FB.indexOf( FB.filter("session.screen0.workspaces:").join("") );
- line = "session.screen0.workspaces:\t"+QString::number(ui->spin_session_wkspaces->value());
- if(index < 0){ FB << line; } //add line to the end of the file
- else{ FB[index] = line; } //replace the current setting with the new one
-
- //Save the fluxbox settings
- bool ok = overwriteFile(QString(getenv("XDG_CONFIG_HOME"))+"/lumina-desktop/fluxbox-init", FB);
- if(!ok){ qDebug() << "Warning: Could not save ~/.lumina/fluxbox-init"; }
-
- //Now do the start apps
- bool newstartapps = false;
- for(int i=0; i<ui->list_session_start->count(); i++){
- QString file = ui->list_session_start->item(i)->whatsThis();
- bool enabled = ui->list_session_start->item(i)->checkState()==Qt::Checked;
- bool found = false;
- for(int i=0; i<STARTAPPS.length(); i++){
- if(STARTAPPS[i].filePath==file){
- found = true;
- if(enabled != !STARTAPPS[i].isHidden){
- //value is different
- qDebug() << "Setting Autostart:" << enabled << STARTAPPS[i].filePath;
- LXDG::setAutoStarted(enabled, STARTAPPS[i]);
- }
- break;
- }
- }
- if(!found && enabled){
- //New file/binary/app
- qDebug() << "Adding new AutoStart File:" << file;
- LXDG::setAutoStarted(enabled, file);
- newstartapps = true;
- }
- }
-
-
-
- if( !ui->push_session_setUserIcon->whatsThis().isEmpty()){
- QString filepath = ui->push_session_setUserIcon->whatsThis();
- if(filepath.isEmpty()){ filepath = QDir::homePath()+"/.loginIcon.png"; }
- if(filepath=="reset"){
- QFile::remove(QDir::homePath()+"/.loginIcon.png");
- }else{
- QPixmap pix(filepath);
- //Now scale it down if necessary
- if(pix.width() > 64 || pix.height()>64){
- pix = pix.scaled(64,64,Qt::KeepAspectRatio, Qt::SmoothTransformation);
- }
- //Now save that to the icon file (will automatically convert it to a PNG file format)
- pix.save(QDir::homePath()+"/.loginIcon.png");
- }
- ui->push_session_setUserIcon->setWhatsThis(""); //clear it for later
- //Now touch the settings file so that it re-loads the panel
- QProcess::startDetached("touch \""+settings->fileName()+"\"");
- }
-
- //Now do the general session options
- sessionsettings->setValue("EnableNumlock", ui->check_session_numlock->isChecked());
- sessionsettings->setValue("PlayStartupAudio", ui->check_session_playloginaudio->isChecked());
- sessionsettings->setValue("PlayLogoutAudio", ui->check_session_playlogoutaudio->isChecked());
- sessionsettings->setValue("TimeFormat", ui->line_session_time->text());
- sessionsettings->setValue("DateFormat", ui->line_session_date->text());
- sessionsettings->setValue("DateTimeOrder", ui->combo_session_datetimeorder->currentData().toString());
-
- //Now do the locale settings
- sessionsettings->setValue("InitLocale/LANG", ui->combo_locale_lang->currentData().toString() );
- sessionsettings->setValue("InitLocale/LC_MESSAGES", ui->combo_locale_message->currentData().toString() );
- sessionsettings->setValue("InitLocale/LC_TIME", ui->combo_locale_time->currentData().toString() );
- sessionsettings->setValue("InitLocale/LC_NUMERIC", ui->combo_locale_numeric->currentData().toString() );
- sessionsettings->setValue("InitLocale/LC_MONETARY", ui->combo_locale_monetary->currentData().toString() );
- sessionsettings->setValue("InitLocale/LC_COLLATE", ui->combo_locale_collate->currentData().toString() );
- sessionsettings->setValue("InitLocale/LC_CTYPE", ui->combo_locale_ctype->currentData().toString() );
-
-
- //Now do the theme options
- QString themefile = ui->combo_session_themefile->itemData( ui->combo_session_themefile->currentIndex() ).toString();
- QString colorfile = ui->combo_session_colorfile->itemData( ui->combo_session_colorfile->currentIndex() ).toString();
- QString iconset = ui->combo_session_icontheme->currentText();
- QString font = ui->font_session_theme->currentFont().family();
- QString fontsize = QString::number(ui->spin_session_fontsize->value())+"pt";
- //qDebug() << "Saving theme options:" << themefile << colorfile << iconset << font << fontsize;
- LTHEME::setCurrentSettings( themefile, colorfile, iconset, font, fontsize);
- LTHEME::setCursorTheme(ui->combo_session_cursortheme->currentText());
- if(newstartapps){ loadSessionSettings(); } //make sure to re-load the session settings to catch the new files
-}
-
-void MainUI::rmsessionstartitem(){
- if(ui->list_session_start->currentRow() < 0){ return; } //no item selected
- delete ui->list_session_start->takeItem(ui->list_session_start->currentRow());
- sessionoptchanged();
-}
-
-void MainUI::addsessionstartapp(){
- //Prompt for the application to start
- XDGDesktop desk = getSysApp();
- if(desk.filePath.isEmpty()){ return; } //cancelled
- QListWidgetItem *it = new QListWidgetItem( LXDG::findIcon(desk.icon,""), desk.name );
- it->setWhatsThis(desk.filePath);
- it->setToolTip(desk.comment);
- it->setCheckState(Qt::Checked);
-
- ui->list_session_start->addItem(it);
- ui->list_session_start->setCurrentItem(it);
- sessionoptchanged();
-}
-
-void MainUI::addsessionstartbin(){
- QString chkpath = LOS::AppPrefix() + "bin";
- if(!QFile::exists(chkpath)){ chkpath = QDir::homePath(); }
- QString bin = QFileDialog::getOpenFileName(this, tr("Select Binary"), chkpath, tr("Application Binaries (*)") );
- if( bin.isEmpty() || !QFile::exists(bin) ){ return; } //cancelled
- if( !QFileInfo(bin).isExecutable() ){
- QMessageBox::warning(this, tr("Invalid Binary"), tr("The selected file is not executable!"));
- return;
- }
- QListWidgetItem *it = new QListWidgetItem( LXDG::findIcon("application-x-executable",""), bin.section("/",-1) );
- it->setWhatsThis(bin); //command to be saved/run
- it->setToolTip(bin);
- it->setCheckState(Qt::Checked);
- ui->list_session_start->addItem(it);
- ui->list_session_start->setCurrentItem(it);
- sessionoptchanged();
-}
-
-void MainUI::addsessionstartfile(){
- QString chkpath = QDir::homePath();
- QString bin = QFileDialog::getOpenFileName(this, tr("Select File"), chkpath, tr("All Files (*)") );
- if( bin.isEmpty() || !QFile::exists(bin) ){ return; } //cancelled
- QListWidgetItem *it = new QListWidgetItem( LXDG::findMimeIcon(bin), bin.section("/",-1) );
- it->setWhatsThis(bin); //file to be saved/run
- it->setToolTip(bin);
- it->setCheckState(Qt::Checked);
- ui->list_session_start->addItem(it);
- ui->list_session_start->setCurrentItem(it);
- sessionoptchanged();
-}
-
-void MainUI::sessionoptchanged(){
- if(!loading){
- ui->push_save->setEnabled(true);
- modses = true;
- }
-}
-
-void MainUI::sessionthemechanged(){
- //Update the Fluxbox Theme preview
- QString previewfile = ui->combo_session_wtheme->itemData( ui->combo_session_wtheme->currentIndex() ).toString();
- previewfile.append( (previewfile.endsWith("/") ? "preview.jpg": "/preview.jpg") );
- if(QFile::exists(previewfile)){
- ui->label_session_wpreview->setPixmap(QPixmap(previewfile));
- }else{
- ui->label_session_wpreview->setText(tr("No Preview Available"));
- }
- sessionoptchanged();
-}
-
-void MainUI::sessionCursorChanged(){
- //Update the Cursor Theme preview
- QStringList info = LTHEME::cursorInformation(ui->combo_session_cursortheme->currentText());
- // - info format: [name, comment. sample file]
- qDebug() << "Cursor Information:" << ui->combo_session_cursortheme->currentText() << info;
- QPixmap img(info[2]);
- //qDebug() << "Image Data:" << img.isNull() << img.size();
- if(!img.isNull()){
- ui->label_cursor_sample->setPixmap( img.scaledToHeight(ui->label_cursor_sample->height(), Qt::SmoothTransformation) );
- }
- ui->label_cursor_sample->setToolTip(info[1]);
- ui->combo_session_cursortheme->setToolTip(info[1]);
- sessionoptchanged();
-}
-
-void MainUI::sessionEditColor(){
- //Get the current color file
- QString file = ui->combo_session_colorfile->itemData( ui->combo_session_colorfile->currentIndex() ).toString();
- //Open the color edit dialog
- ColorDialog dlg(this, PINFO, file);
- dlg.exec();
- //Check whether the file got saved/changed
- if(dlg.colorname.isEmpty() || dlg.colorpath.isEmpty() ){ return; } //cancelled
- //Reload the color list and activate the new color
- // - local color schemes
- ui->combo_session_colorfile->clear();
- QStringList tmp = LTHEME::availableLocalColors();
- tmp.sort();
- for(int i=0; i<tmp.length(); i++){
- ui->combo_session_colorfile->addItem(tmp[i].section("::::",0,0)+" ("+tr("Local")+")", tmp[i].section("::::",1,1));
- if(tmp[i].section("::::",1,1)==dlg.colorpath){ ui->combo_session_colorfile->setCurrentIndex(ui->combo_session_colorfile->count()-1); }
- }
- // - system color schemes
- tmp = LTHEME::availableSystemColors();
- tmp.sort();
- for(int i=0; i<tmp.length(); i++){
- ui->combo_session_colorfile->addItem(tmp[i].section("::::",0,0)+" ("+tr("System")+")", tmp[i].section("::::",1,1));
- if(tmp[i].section("::::",1,1)==dlg.colorpath){ ui->combo_session_colorfile->setCurrentIndex(ui->combo_session_colorfile->count()-1); }
- }
-
-}
-
-void MainUI::sessionEditTheme(){
- QString file = ui->combo_session_themefile->itemData( ui->combo_session_themefile->currentIndex() ).toString();
- //Open the theme editor dialog
- ThemeDialog dlg(this, PINFO, file);
- dlg.exec();
- //Check for file change/save
- if(dlg.themename.isEmpty() || dlg.themepath.isEmpty()){ return; } //cancelled
- //Reload the theme list and activate the new theme
- ui->combo_session_themefile->clear();
- // - local theme templates
- QStringList tmp = LTHEME::availableLocalThemes();
- tmp.sort();
- for(int i=0; i<tmp.length(); i++){
- ui->combo_session_themefile->addItem(tmp[i].section("::::",0,0)+" ("+tr("Local")+")", tmp[i].section("::::",1,1));
- if(tmp[i].section("::::",1,1)==dlg.themepath){ ui->combo_session_themefile->setCurrentIndex(ui->combo_session_themefile->count()-1); }
- }
- // - system theme templates
- tmp = LTHEME::availableSystemThemes();
- tmp.sort();
- for(int i=0; i<tmp.length(); i++){
- ui->combo_session_themefile->addItem(tmp[i].section("::::",0,0)+" ("+tr("System")+")", tmp[i].section("::::",1,1));
- if(tmp[i].section("::::",1,1)==dlg.themepath){ ui->combo_session_themefile->setCurrentIndex(ui->combo_session_themefile->count()-1); }
- }
-}
-
-void MainUI::sessionChangeUserIcon(){
- //Prompt for a new image file
- QStringList imgformats;
- QList<QByteArray> fmts = QImageReader::supportedImageFormats();
- for(int i=0; i<fmts.length(); i++){
- imgformats << "*."+QString(fmts[i]);
- }
- QString filepath = QFileDialog::getOpenFileName(this, tr("Select an image"), QDir::homePath(), \
- tr("Images")+" ("+imgformats.join(" ")+")");
- if(filepath.isEmpty()){
- //User cancelled the operation
- if(QFile::exists(QDir::homePath()+"/.loginIcon.png")){
- if(QMessageBox::Yes == QMessageBox::question(this,tr("Reset User Image"), tr("Would you like to reset the user image to the system default?"), QMessageBox::Yes | QMessageBox::No, QMessageBox::No) ){
- //QFile::remove(QDir::homePath()+"/.loginIcon.png");
- ui->push_session_setUserIcon->setWhatsThis("reset");
- }else{
- return;
- }
- }
- }else{
- ui->push_session_setUserIcon->setWhatsThis(filepath);
- }
- //Now re-load the icon in the UI
- QString path = ui->push_session_setUserIcon->whatsThis();
- if(path.isEmpty()){ path = QDir::homePath()+"/.loginIcon.png"; }
- if(path=="reset"){ path.clear(); }
- ui->push_session_setUserIcon->setIcon( LXDG::findIcon(path, "user-identity") );
- sessionoptchanged();
-}
-
-void MainUI::sessionResetSys(){
- LUtils::LoadSystemDefaults();
- QTimer::singleShot(500,this, SLOT(loadCurrentSettings()) );
-}
-
-void MainUI::sessionResetLumina(){
- LUtils::LoadSystemDefaults(true); //skip OS customizations
- QTimer::singleShot(500,this, SLOT(loadCurrentSettings()) );
-}
-
-void MainUI::sessionLoadTimeSample(){
- if(ui->line_session_time->text().simplified().isEmpty()){
- ui->label_session_timesample->setText( QTime::currentTime().toString(Qt::DefaultLocaleShortDate) );
- }else{
- ui->label_session_timesample->setText( QTime::currentTime().toString( ui->line_session_time->text() ) );
- }
- sessionoptchanged();
-}
-
-void MainUI::sessionShowTimeCodes(){
- QStringList msg;
- msg << tr("Valid Time Codes:") << "\n";
- msg << QString(tr("%1: Hour without leading zero (1)")).arg("h");
- msg << QString(tr("%1: Hour with leading zero (01)")).arg("hh");
- msg << QString(tr("%1: Minutes without leading zero (2)")).arg("m");
- msg << QString(tr("%1: Minutes with leading zero (02)")).arg("mm");
- msg << QString(tr("%1: Seconds without leading zero (3)")).arg("s");
- msg << QString(tr("%1: Seconds with leading zero (03)")).arg("ss");
- msg << QString(tr("%1: AM/PM (12-hour) clock (upper or lower case)")).arg("A or a");
- msg << QString(tr("%1: Timezone")).arg("t");
- QMessageBox::information(this, tr("Time Codes"), msg.join("\n") );
-}
-
-void MainUI::sessionLoadDateSample(){
- if(ui->line_session_date->text().simplified().isEmpty()){
- ui->label_session_datesample->setText( QDate::currentDate().toString(Qt::DefaultLocaleShortDate) );
- }else{
- ui->label_session_datesample->setText( QDate::currentDate().toString( ui->line_session_date->text() ) );
- }
- sessionoptchanged();
-}
-
-void MainUI::sessionShowDateCodes(){
- QStringList msg;
- msg << tr("Valid Date Codes:") << "\n";
- msg << QString(tr("%1: Numeric day without a leading zero (1)")).arg("d");
- msg << QString(tr("%1: Numeric day with leading zero (01)")).arg("dd");
- msg << QString(tr("%1: Day as abbreviation (localized)")).arg("ddd");
- msg << QString(tr("%1: Day as full name (localized)")).arg("dddd");
- msg << QString(tr("%1: Numeric month without leading zero (2)")).arg("M");
- msg << QString(tr("%1: Numeric month with leading zero (02)")).arg("MM");
- msg << QString(tr("%1: Month as abbreviation (localized)")).arg("MMM");
- msg << QString(tr("%1: Month as full name (localized)")).arg("MMMM");
- msg << QString(tr("%1: Year as 2-digit number (15)")).arg("yy");
- msg << QString(tr("%1: Year as 4-digit number (2015)")).arg("yyyy");
- msg << tr("Text may be contained within single-quotes to ignore replacements");
- QMessageBox::information(this, tr("Date Codes"), msg.join("\n") );
-}
diff --git a/src-qt5/core-utils/lumina-config/mainUI.h b/src-qt5/core-utils/lumina-config/mainUI.h
deleted file mode 100644
index da267948..00000000
--- a/src-qt5/core-utils/lumina-config/mainUI.h
+++ /dev/null
@@ -1,171 +0,0 @@
-//===========================================
-// Lumina-DE source code
-// Copyright (c) 2014-2015, Ken Moore
-// Available under the 3-clause BSD license
-// See the LICENSE file for full details
-//===========================================
-#ifndef _LUMINA_CONFIG_MAIN_UI_H
-#define _LUMINA_CONFIG_MAIN_UI_H
-
-// Qt includes
-#include <QMainWindow>
-#include <QDir>
-#include <QDesktopWidget>
-#include <QSettings>
-#include <QStringList>
-#include <QString>
-#include <QIcon>
-#include <QTimer>
-#include <QFileDialog>
-#include <QFile>
-#include <QTextStream>
-#include <QMessageBox>
-#include <QColorDialog>
-#include <QColor>
-#include <QInputDialog>
-#include <QListWidgetItem>
-
-// libLumina includes
-#include <LuminaXDG.h>
-#include <LuminaThemes.h>
-
-// local includes
-#include "LPlugins.h"
-//#include "KeyCatch.h"
-#include "AppDialog.h"
-#include "ColorDialog.h"
-#include "ThemeDialog.h"
-#include "GetPluginDialog.h"
-#include "PanelWidget.h"
-
-//namespace for using the *.ui file
-namespace Ui{
- class MainUI;
-};
-
-class MainUI : public QMainWindow{
- Q_OBJECT
-public:
- MainUI();
- ~MainUI();
-
- //Panels Page simplifications
- QString getColorStyle(QString current, bool allowTransparency = true);
-
- //Get an application on the system
- XDGDesktop getSysApp(bool allowreset = false);
-
-private:
- Ui::MainUI *ui; //the *.ui file access
- QSettings *settings, *appsettings, *sessionsettings;
- QDesktopWidget *desktop;
- LPlugins *PINFO;
- QMenu *ppmenu, *mpmenu;
- QString panelcolor;
- QString DEFAULTBG;
- QList<XDGDesktop> sysApps;
- QList<XDGDesktop> STARTAPPS;
- bool loading, panadjust;
- bool moddesk, modpan, modmenu, modshort, moddef, modses; //page modified flags
- int panelnumber;
- QList<PanelWidget*> PANELS;
-
- //General purpose functions (not connected to buttons)
- void setupMenus(); //called during initialization
- void setupConnections(); //called during intialization
-
- int currentDesktop(); //the number for the current desktop
-
- //Convert to/from fluxbox keyboard shortcuts
- QString dispToFluxKeys(QString);
- QString fluxToDispKeys(QString);
-
- //Read/overwrite a text file
- QStringList readFile(QString path);
- bool overwriteFile(QString path, QStringList contents);
-
-public slots:
- void setupIcons(); //called during initialization
-
-private slots:
- void slotSingleInstance();
-
- //General UI Behavior
- void slotChangePage(bool enabled);
- void slotChangeScreen();
- void saveAndQuit();
-
- //General Utility Functions
- void loadCurrentSettings(bool screenonly = false);
- void saveCurrentSettings(bool screenonly = false);
-
- //Desktop Page
- //void deskplugchanged();
- void deskbgchanged();
- void desktimechanged();
- void deskbgremoved();
- void deskbgadded();
- void deskbgcoloradded();
- void deskbgdiradded();
- void deskbgdirradded();
- void deskplugadded();
- void deskplugremoved();
-
-
- //Panels Page
- void panelValChanged();
- void newPanel();
- void removePanel(int); //connected to a signal from the panel widget
- void loadPanels();
- void savePanels();
-
- //Menu Page/Tab
- void addmenuplugin();
- void rmmenuplugin();
- void upmenuplugin();
- void downmenuplugin();
- void checkmenuicons();
-
- //Shortcuts Page
- void loadKeyboardShortcuts();
- void saveKeyboardShortcuts();
- void clearKeyBinding();
- void applyKeyBinding();
- void updateKeyConfig();
- //void getKeyPress();
-
- //Defaults Page
- void changeDefaultBrowser();
- void changeDefaultEmail();
- void changeDefaultFileManager();
- void changeDefaultTerminal();
- void loadDefaultSettings();
- //void saveDefaultSettings();
- void cleardefaultitem();
- void setdefaultitem();
- void setdefaultbinary();
- void checkdefaulticons();
-
- //Session Page
- void loadSessionSettings();
- void saveSessionSettings();
- void rmsessionstartitem();
- void addsessionstartapp();
- void addsessionstartbin();
- void addsessionstartfile();
- void sessionoptchanged();
- void sessionthemechanged();
- void sessionCursorChanged();
- //void sessionstartchanged();
- void sessionEditColor();
- void sessionEditTheme();
- void sessionChangeUserIcon();
- void sessionResetSys();
- void sessionResetLumina();
- void sessionLoadTimeSample();
- void sessionShowTimeCodes();
- void sessionLoadDateSample();
- void sessionShowDateCodes();
-};
-
-#endif
diff --git a/src-qt5/core-utils/lumina-config/mainUI.ui b/src-qt5/core-utils/lumina-config/mainUI.ui
deleted file mode 100644
index 9edff2e7..00000000
--- a/src-qt5/core-utils/lumina-config/mainUI.ui
+++ /dev/null
@@ -1,1792 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<ui version="4.0">
- <class>MainUI</class>
- <widget class="QMainWindow" name="MainUI">
- <property name="enabled">
- <bool>true</bool>
- </property>
- <property name="geometry">
- <rect>
- <x>0</x>
- <y>0</y>
- <width>660</width>
- <height>448</height>
- </rect>
- </property>
- <property name="windowTitle">
- <string>Lumina Settings</string>
- </property>
- <property name="animated">
- <bool>true</bool>
- </property>
- <property name="documentMode">
- <bool>false</bool>
- </property>
- <property name="unifiedTitleAndToolBarOnMac">
- <bool>false</bool>
- </property>
- <widget class="QWidget" name="centralwidget">
- <layout class="QVBoxLayout" name="verticalLayout">
- <property name="spacing">
- <number>0</number>
- </property>
- <property name="topMargin">
- <number>0</number>
- </property>
- <item>
- <widget class="QFrame" name="group_screen">
- <property name="frameShape">
- <enum>QFrame::NoFrame</enum>
- </property>
- <property name="frameShadow">
- <enum>QFrame::Raised</enum>
- </property>
- <layout class="QHBoxLayout" name="horizontalLayout_18">
- <property name="leftMargin">
- <number>0</number>
- </property>
- <property name="topMargin">
- <number>1</number>
- </property>
- <property name="rightMargin">
- <number>0</number>
- </property>
- <property name="bottomMargin">
- <number>1</number>
- </property>
- <item>
- <spacer name="horizontalSpacer_3">
- <property name="orientation">
- <enum>Qt::Horizontal</enum>
- </property>
- <property name="sizeHint" stdset="0">
- <size>
- <width>195</width>
- <height>20</height>
- </size>
- </property>
- </spacer>
- </item>
- <item>
- <widget class="QLabel" name="label_screen">
- <property name="text">
- <string>Screen Number:</string>
- </property>
- </widget>
- </item>
- <item>
- <widget class="QSpinBox" name="spin_screen">
- <property name="minimum">
- <number>1</number>
- </property>
- </widget>
- </item>
- <item>
- <spacer name="horizontalSpacer_4">
- <property name="orientation">
- <enum>Qt::Horizontal</enum>
- </property>
- <property name="sizeHint" stdset="0">
- <size>
- <width>40</width>
- <height>20</height>
- </size>
- </property>
- </spacer>
- </item>
- </layout>
- </widget>
- </item>
- <item>
- <widget class="QStackedWidget" name="stackedWidget">
- <property name="sizePolicy">
- <sizepolicy hsizetype="Expanding" vsizetype="Preferred">
- <horstretch>0</horstretch>
- <verstretch>0</verstretch>
- </sizepolicy>
- </property>
- <property name="frameShape">
- <enum>QFrame::StyledPanel</enum>
- </property>
- <property name="currentIndex">
- <number>4</number>
- </property>
- <widget class="QWidget" name="page_desktop">
- <layout class="QVBoxLayout" name="verticalLayout_3">
- <property name="leftMargin">
- <number>3</number>
- </property>
- <property name="topMargin">
- <number>2</number>
- </property>
- <property name="bottomMargin">
- <number>2</number>
- </property>
- <item>
- <widget class="QTabWidget" name="tabWidget_desktop">
- <property name="currentIndex">
- <number>0</number>
- </property>
- <widget class="QWidget" name="tab_wallpaper">
- <attribute name="title">
- <string>Wallpaper</string>
- </attribute>
- <layout class="QVBoxLayout" name="verticalLayout_16">
- <item>
- <layout class="QHBoxLayout" name="horizontalLayout_4">
- <item>
- <widget class="QToolButton" name="tool_desk_addbg">
- <property name="text">
- <string notr="true"/>
- </property>
- <property name="popupMode">
- <enum>QToolButton::InstantPopup</enum>
- </property>
- <property name="toolButtonStyle">
- <enum>Qt::ToolButtonTextBesideIcon</enum>
- </property>
- </widget>
- </item>
- <item>
- <widget class="QToolButton" name="tool_desk_rmbg">
- <property name="text">
- <string notr="true">rm</string>
- </property>
- </widget>
- </item>
- <item>
- <widget class="QComboBox" name="combo_desk_bg"/>
- </item>
- </layout>
- </item>
- <item>
- <layout class="QHBoxLayout" name="horizontalLayout_5">
- <item>
- <layout class="QVBoxLayout" name="verticalLayout_2">
- <item>
- <widget class="Line" name="line_4">
- <property name="orientation">
- <enum>Qt::Horizontal</enum>
- </property>
- </widget>
- </item>
- <item>
- <widget class="QLabel" name="label_desk_res">
- <property name="text">
- <string notr="true">(Resolution)</string>
- </property>
- <property name="alignment">
- <set>Qt::AlignCenter</set>
- </property>
- <property name="wordWrap">
- <bool>false</bool>
- </property>
- </widget>
- </item>
- <item>
- <widget class="Line" name="line_2">
- <property name="orientation">
- <enum>Qt::Horizontal</enum>
- </property>
- </widget>
- </item>
- <item>
- <widget class="QRadioButton" name="radio_desk_single">
- <property name="text">
- <string>Single Background</string>
- </property>
- <property name="checked">
- <bool>true</bool>
- </property>
- </widget>
- </item>
- <item>
- <widget class="QRadioButton" name="radio_desk_multi">
- <property name="text">
- <string>Rotate Background</string>
- </property>
- </widget>
- </item>
- <item>
- <widget class="QSpinBox" name="spin_desk_min">
- <property name="suffix">
- <string> Minutes</string>
- </property>
- <property name="prefix">
- <string>Every </string>
- </property>
- <property name="minimum">
- <number>1</number>
- </property>
- <property name="maximum">
- <number>120</number>
- </property>
- <property name="value">
- <number>5</number>
- </property>
- </widget>
- </item>
- <item>
- <widget class="Line" name="line_3">
- <property name="orientation">
- <enum>Qt::Horizontal</enum>
- </property>
- </widget>
- </item>
- <item>
- <widget class="QLabel" name="label_26">
- <property name="text">
- <string>Layout:</string>
- </property>
- </widget>
- </item>
- <item>
- <widget class="QComboBox" name="combo_desk_layout"/>
- </item>
- <item>
- <spacer name="verticalSpacer">
- <property name="orientation">
- <enum>Qt::Vertical</enum>
- </property>
- <property name="sizeHint" stdset="0">
- <size>
- <width>20</width>
- <height>40</height>
- </size>
- </property>
- </spacer>
- </item>
- </layout>
- </item>
- <item>
- <widget class="QLabel" name="label_desk_bgview">
- <property name="sizePolicy">
- <sizepolicy hsizetype="Expanding" vsizetype="Expanding">
- <horstretch>0</horstretch>
- <verstretch>0</verstretch>
- </sizepolicy>
- </property>
- <property name="frameShape">
- <enum>QFrame::StyledPanel</enum>
- </property>
- <property name="text">
- <string notr="true">BG-sample</string>
- </property>
- <property name="scaledContents">
- <bool>false</bool>
- </property>
- <property name="alignment">
- <set>Qt::AlignCenter</set>
- </property>
- </widget>
- </item>
- </layout>
- </item>
- </layout>
- </widget>
- <widget class="QWidget" name="tab_themes">
- <attribute name="title">
- <string>Theme</string>
- </attribute>
- <layout class="QFormLayout" name="formLayout_5">
- <item row="0" column="0">
- <widget class="QLabel" name="label_12">
- <property name="text">
- <string>Font:</string>
- </property>
- </widget>
- </item>
- <item row="0" column="1">
- <widget class="QFontComboBox" name="font_session_theme">
- <property name="editable">
- <bool>false</bool>
- </property>
- </widget>
- </item>
- <item row="1" column="0">
- <widget class="QLabel" name="label_14">
- <property name="text">
- <string>Font Size:</string>
- </property>
- </widget>
- </item>
- <item row="1" column="1">
- <widget class="QSpinBox" name="spin_session_fontsize">
- <property name="suffix">
- <string> point</string>
- </property>
- </widget>
- </item>
- <item row="2" column="0">
- <widget class="QLabel" name="label_16">
- <property name="text">
- <string>Theme Template:</string>
- </property>
- </widget>
- </item>
- <item row="2" column="1">
- <layout class="QHBoxLayout" name="horizontalLayout_12">
- <item>
- <widget class="QComboBox" name="combo_session_themefile">
- <property name="sizeAdjustPolicy">
- <enum>QComboBox::AdjustToContents</enum>
- </property>
- </widget>
- </item>
- <item>
- <widget class="QToolButton" name="tool_session_newtheme">
- <property name="toolTip">
- <string>Create/Edit a theme template (Advanced)</string>
- </property>
- <property name="statusTip">
- <string/>
- </property>
- <property name="text">
- <string>Edit</string>
- </property>
- <property name="toolButtonStyle">
- <enum>Qt::ToolButtonTextBesideIcon</enum>
- </property>
- </widget>
- </item>
- </layout>
- </item>
- <item row="3" column="0">
- <widget class="QLabel" name="label_17">
- <property name="text">
- <string>Color Scheme:</string>
- </property>
- </widget>
- </item>
- <item row="3" column="1">
- <layout class="QHBoxLayout" name="horizontalLayout_19">
- <item>
- <widget class="QComboBox" name="combo_session_colorfile">
- <property name="sizeAdjustPolicy">
- <enum>QComboBox::AdjustToContents</enum>
- </property>
- </widget>
- </item>
- <item>
- <widget class="QToolButton" name="tool_session_newcolor">
- <property name="toolTip">
- <string>Create/Edit a color scheme</string>
- </property>
- <property name="statusTip">
- <string/>
- </property>
- <property name="text">
- <string>Edit</string>
- </property>
- <property name="toolButtonStyle">
- <enum>Qt::ToolButtonTextBesideIcon</enum>
- </property>
- </widget>
- </item>
- </layout>
- </item>
- <item row="4" column="0">
- <widget class="QLabel" name="label_18">
- <property name="text">
- <string>Icon Pack:</string>
- </property>
- </widget>
- </item>
- <item row="4" column="1">
- <widget class="QComboBox" name="combo_session_icontheme"/>
- </item>
- <item row="5" column="0">
- <widget class="QLabel" name="label_31">
- <property name="text">
- <string>Mouse Cursors:</string>
- </property>
- </widget>
- </item>
- <item row="5" column="1">
- <layout class="QHBoxLayout" name="horizontalLayout_2">
- <item>
- <widget class="QComboBox" name="combo_session_cursortheme">
- <property name="sizePolicy">
- <sizepolicy hsizetype="MinimumExpanding" vsizetype="Fixed">
- <horstretch>0</horstretch>
- <verstretch>0</verstretch>
- </sizepolicy>
- </property>
- </widget>
- </item>
- <item>
- <widget class="QLabel" name="label_cursor_sample">
- <property name="sizePolicy">
- <sizepolicy hsizetype="Preferred" vsizetype="Preferred">
- <horstretch>0</horstretch>
- <verstretch>0</verstretch>
- </sizepolicy>
- </property>
- <property name="toolTip">
- <string notr="true"/>
- </property>
- <property name="text">
- <string notr="true"/>
- </property>
- <property name="scaledContents">
- <bool>true</bool>
- </property>
- <property name="alignment">
- <set>Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter</set>
- </property>
- </widget>
- </item>
- </layout>
- </item>
- </layout>
- </widget>
- </widget>
- </item>
- </layout>
- </widget>
- <widget class="QWidget" name="page_panels">
- <layout class="QVBoxLayout" name="verticalLayout_17">
- <property name="leftMargin">
- <number>3</number>
- </property>
- <property name="topMargin">
- <number>2</number>
- </property>
- <property name="rightMargin">
- <number>3</number>
- </property>
- <property name="bottomMargin">
- <number>2</number>
- </property>
- <item>
- <widget class="QTabWidget" name="tabWidget_panels">
- <property name="currentIndex">
- <number>1</number>
- </property>
- <widget class="QWidget" name="tab_desktopInterface">
- <attribute name="title">
- <string>Desktop</string>
- </attribute>
- <layout class="QGridLayout" name="gridLayout_3">
- <item row="0" column="0">
- <widget class="QLabel" name="label_10">
- <property name="font">
- <font>
- <weight>75</weight>
- <bold>true</bold>
- </font>
- </property>
- <property name="text">
- <string>Quick-Access Menu</string>
- </property>
- <property name="alignment">
- <set>Qt::AlignCenter</set>
- </property>
- </widget>
- </item>
- <item row="0" column="1" rowspan="5">
- <widget class="Line" name="line">
- <property name="orientation">
- <enum>Qt::Vertical</enum>
- </property>
- </widget>
- </item>
- <item row="0" column="2" colspan="2">
- <widget class="QLabel" name="label_15">
- <property name="font">
- <font>
- <weight>75</weight>
- <bold>true</bold>
- </font>
- </property>
- <property name="text">
- <string>Embedded Utilities</string>
- </property>
- <property name="alignment">
- <set>Qt::AlignCenter</set>
- </property>
- </widget>
- </item>
- <item row="1" column="0" rowspan="2">
- <widget class="QListWidget" name="list_menu"/>
- </item>
- <item row="1" column="2" colspan="2">
- <widget class="QListWidget" name="list_desktop_plugins">
- <property name="selectionMode">
- <enum>QAbstractItemView::ExtendedSelection</enum>
- </property>
- <property name="sortingEnabled">
- <bool>true</bool>
- </property>
- </widget>
- </item>
- <item row="2" column="3">
- <layout class="QHBoxLayout" name="horizontalLayout_6">
- <item>
- <widget class="QToolButton" name="tool_desktop_addplugin">
- <property name="text">
- <string notr="true">add</string>
- </property>
- </widget>
- </item>
- <item>
- <widget class="QToolButton" name="tool_desktop_rmplugin">
- <property name="text">
- <string notr="true">rem</string>
- </property>
- </widget>
- </item>
- <item>
- <spacer name="horizontalSpacer_5">
- <property name="orientation">
- <enum>Qt::Horizontal</enum>
- </property>
- <property name="sizeHint" stdset="0">
- <size>
- <width>10</width>
- <height>20</height>
- </size>
- </property>
- </spacer>
- </item>
- </layout>
- </item>
- <item row="3" column="0" rowspan="2">
- <layout class="QHBoxLayout" name="horizontalLayout_13">
- <item>
- <widget class="QToolButton" name="tool_menu_add">
- <property name="text">
- <string notr="true">add</string>
- </property>
- </widget>
- </item>
- <item>
- <widget class="QToolButton" name="tool_menu_rm">
- <property name="text">
- <string notr="true">rem</string>
- </property>
- </widget>
- </item>
- <item>
- <spacer name="horizontalSpacer_9">
- <property name="orientation">
- <enum>Qt::Horizontal</enum>
- </property>
- <property name="sizeHint" stdset="0">
- <size>
- <width>40</width>
- <height>20</height>
- </size>
- </property>
- </spacer>
- </item>
- <item>
- <widget class="QToolButton" name="tool_menu_up">
- <property name="text">
- <string notr="true">up</string>
- </property>
- </widget>
- </item>
- <item>
- <widget class="QToolButton" name="tool_menu_dn">
- <property name="text">
- <string notr="true">dn</string>
- </property>
- </widget>
- </item>
- </layout>
- </item>
- <item row="4" column="3">
- <widget class="QCheckBox" name="check_desktop_autolaunchers">
- <property name="text">
- <string>Display Desktop Folder Contents</string>
- </property>
- </widget>
- </item>
- </layout>
- </widget>
- <widget class="QWidget" name="tab_panels">
- <attribute name="title">
- <string>Panels</string>
- </attribute>
- <layout class="QGridLayout" name="gridLayout_panels" rowstretch="0" columnstretch="0,0">
- <property name="leftMargin">
- <number>0</number>
- </property>
- <property name="topMargin">
- <number>0</number>
- </property>
- <property name="rightMargin">
- <number>0</number>
- </property>
- <property name="bottomMargin">
- <number>0</number>
- </property>
- <property name="horizontalSpacing">
- <number>2</number>
- </property>
- <item row="0" column="0">
- <layout class="QVBoxLayout" name="verticalLayout_5">
- <item>
- <widget class="QToolButton" name="tool_panels_add">
- <property name="text">
- <string notr="true">add</string>
- </property>
- </widget>
- </item>
- <item>
- <spacer name="verticalSpacer_3">
- <property name="orientation">
- <enum>Qt::Vertical</enum>
- </property>
- <property name="sizeHint" stdset="0">
- <size>
- <width>20</width>
- <height>40</height>
- </size>
- </property>
- </spacer>
- </item>
- </layout>
- </item>
- <item row="0" column="1">
- <widget class="QScrollArea" name="scroll_panels">
- <property name="sizeAdjustPolicy">
- <enum>QAbstractScrollArea::AdjustToContents</enum>
- </property>
- <property name="widgetResizable">
- <bool>true</bool>
- </property>
- <property name="alignment">
- <set>Qt::AlignLeading|Qt::AlignLeft|Qt::AlignTop</set>
- </property>
- <widget class="QWidget" name="scrollAreaWidgetContents_2">
- <property name="geometry">
- <rect>
- <x>0</x>
- <y>0</y>
- <width>98</width>
- <height>28</height>
- </rect>
- </property>
- </widget>
- </widget>
- </item>
- </layout>
- </widget>
- </widget>
- </item>
- </layout>
- </widget>
- <widget class="QWidget" name="page_shortcuts">
- <layout class="QVBoxLayout" name="verticalLayout_8">
- <property name="leftMargin">
- <number>3</number>
- </property>
- <property name="topMargin">
- <number>2</number>
- </property>
- <property name="bottomMargin">
- <number>2</number>
- </property>
- <item>
- <widget class="QTreeWidget" name="tree_shortcut">
- <property name="indentation">
- <number>0</number>
- </property>
- <property name="rootIsDecorated">
- <bool>false</bool>
- </property>
- <property name="itemsExpandable">
- <bool>false</bool>
- </property>
- <property name="sortingEnabled">
- <bool>true</bool>
- </property>
- <property name="expandsOnDoubleClick">
- <bool>false</bool>
- </property>
- <attribute name="headerDefaultSectionSize">
- <number>200</number>
- </attribute>
- <attribute name="headerHighlightSections">
- <bool>true</bool>
- </attribute>
- <attribute name="headerMinimumSectionSize">
- <number>200</number>
- </attribute>
- <attribute name="headerShowSortIndicator" stdset="0">
- <bool>true</bool>
- </attribute>
- <column>
- <property name="text">
- <string>Action</string>
- </property>
- </column>
- <column>
- <property name="text">
- <string>Keyboard Shortcut</string>
- </property>
- </column>
- </widget>
- </item>
- <item>
- <widget class="QGroupBox" name="group_shortcut_modify">
- <property name="title">
- <string>Modify Shortcut</string>
- </property>
- <layout class="QGridLayout" name="gridLayout_4">
- <property name="leftMargin">
- <number>3</number>
- </property>
- <property name="topMargin">
- <number>3</number>
- </property>
- <property name="rightMargin">
- <number>3</number>
- </property>
- <property name="bottomMargin">
- <number>3</number>
- </property>
- <item row="0" column="3">
- <widget class="QKeySequenceEdit" name="keyEdit_shortcut"/>
- </item>
- <item row="0" column="0">
- <widget class="QToolButton" name="tool_shortcut_clear">
- <property name="text">
- <string>Clear Shortcut</string>
- </property>
- <property name="toolButtonStyle">
- <enum>Qt::ToolButtonTextBesideIcon</enum>
- </property>
- </widget>
- </item>
- <item row="0" column="4">
- <widget class="QToolButton" name="tool_shortcut_set">
- <property name="text">
- <string>Apply Change</string>
- </property>
- <property name="toolButtonStyle">
- <enum>Qt::ToolButtonTextBesideIcon</enum>
- </property>
- </widget>
- </item>
- <item row="0" column="2">
- <widget class="QLabel" name="label_32">
- <property name="text">
- <string>Change Key Binding:</string>
- </property>
- </widget>
- </item>
- <item row="0" column="1">
- <spacer name="horizontalSpacer_10">
- <property name="orientation">
- <enum>Qt::Horizontal</enum>
- </property>
- <property name="sizeHint" stdset="0">
- <size>
- <width>40</width>
- <height>20</height>
- </size>
- </property>
- </spacer>
- </item>
- </layout>
- </widget>
- </item>
- <item>
- <widget class="QLabel" name="label_11">
- <property name="text">
- <string>Note: Current key bindings need to be cleared and saved before they can be re-used.</string>
- </property>
- <property name="alignment">
- <set>Qt::AlignCenter</set>
- </property>
- <property name="wordWrap">
- <bool>true</bool>
- </property>
- </widget>
- </item>
- </layout>
- </widget>
- <widget class="QWidget" name="page_defaults">
- <layout class="QVBoxLayout" name="verticalLayout_9">
- <property name="leftMargin">
- <number>3</number>
- </property>
- <property name="topMargin">
- <number>2</number>
- </property>
- <property name="bottomMargin">
- <number>2</number>
- </property>
- <item>
- <widget class="QTabWidget" name="tabWidget_apps">
- <property name="currentIndex">
- <number>0</number>
- </property>
- <widget class="QWidget" name="tab_auto">
- <attribute name="title">
- <string>Auto-Started</string>
- </attribute>
- <layout class="QVBoxLayout" name="verticalLayout_19">
- <item>
- <layout class="QHBoxLayout" name="horizontalLayout_17">
- <item>
- <spacer name="horizontalSpacer_14">
- <property name="orientation">
- <enum>Qt::Horizontal</enum>
- </property>
- <property name="sizeHint" stdset="0">
- <size>
- <width>40</width>
- <height>20</height>
- </size>
- </property>
- </spacer>
- </item>
- <item>
- <widget class="QToolButton" name="tool_session_addapp">
- <property name="text">
- <string>Application</string>
- </property>
- <property name="toolButtonStyle">
- <enum>Qt::ToolButtonTextBesideIcon</enum>
- </property>
- </widget>
- </item>
- <item>
- <widget class="QToolButton" name="tool_session_addbin">
- <property name="text">
- <string>Binary</string>
- </property>
- <property name="toolButtonStyle">
- <enum>Qt::ToolButtonTextBesideIcon</enum>
- </property>
- </widget>
- </item>
- <item>
- <widget class="QToolButton" name="tool_session_addfile">
- <property name="text">
- <string>File</string>
- </property>
- <property name="toolButtonStyle">
- <enum>Qt::ToolButtonTextBesideIcon</enum>
- </property>
- </widget>
- </item>
- </layout>
- </item>
- <item>
- <widget class="QListWidget" name="list_session_start">
- <property name="sortingEnabled">
- <bool>true</bool>
- </property>
- </widget>
- </item>
- </layout>
- </widget>
- <widget class="QWidget" name="tab_defaults">
- <attribute name="title">
- <string>File Defaults</string>
- </attribute>
- <layout class="QVBoxLayout" name="verticalLayout_6">
- <property name="leftMargin">
- <number>3</number>
- </property>
- <property name="topMargin">
- <number>3</number>
- </property>
- <property name="rightMargin">
- <number>3</number>
- </property>
- <property name="bottomMargin">
- <number>3</number>
- </property>
- <item>
- <widget class="QGroupBox" name="group_default_filetypes">
- <property name="font">
- <font>
- <italic>false</italic>
- </font>
- </property>
- <property name="title">
- <string>Specific File Types</string>
- </property>
- <layout class="QVBoxLayout" name="verticalLayout_15">
- <property name="leftMargin">
- <number>2</number>
- </property>
- <property name="rightMargin">
- <number>2</number>
- </property>
- <item>
- <widget class="QTreeWidget" name="tree_defaults">
- <property name="iconSize">
- <size>
- <width>20</width>
- <height>20</height>
- </size>
- </property>
- <property name="indentation">
- <number>20</number>
- </property>
- <property name="sortingEnabled">
- <bool>true</bool>
- </property>
- <property name="animated">
- <bool>true</bool>
- </property>
- <property name="allColumnsShowFocus">
- <bool>true</bool>
- </property>
- <attribute name="headerDefaultSectionSize">
- <number>200</number>
- </attribute>
- <attribute name="headerMinimumSectionSize">
- <number>150</number>
- </attribute>
- <column>
- <property name="text">
- <string>Type/Group</string>
- </property>
- </column>
- <column>
- <property name="text">
- <string>Default Application</string>
- </property>
- </column>
- <column>
- <property name="text">
- <string>Description</string>
- </property>
- </column>
- </widget>
- </item>
- <item>
- <layout class="QHBoxLayout" name="horizontalLayout_16">
- <item>
- <widget class="QToolButton" name="tool_defaults_clear">
- <property name="text">
- <string>Clear</string>
- </property>
- <property name="toolButtonStyle">
- <enum>Qt::ToolButtonTextBesideIcon</enum>
- </property>
- </widget>
- </item>
- <item>
- <spacer name="horizontalSpacer_13">
- <property name="orientation">
- <enum>Qt::Horizontal</enum>
- </property>
- <property name="sizeHint" stdset="0">
- <size>
- <width>40</width>
- <height>20</height>
- </size>
- </property>
- </spacer>
- </item>
- <item>
- <widget class="QToolButton" name="tool_defaults_set">
- <property name="text">
- <string>Set App</string>
- </property>
- <property name="toolButtonStyle">
- <enum>Qt::ToolButtonTextBesideIcon</enum>
- </property>
- </widget>
- </item>
- <item>
- <widget class="QToolButton" name="tool_defaults_setbin">
- <property name="text">
- <string>Set Binary</string>
- </property>
- <property name="toolButtonStyle">
- <enum>Qt::ToolButtonTextBesideIcon</enum>
- </property>
- </widget>
- </item>
- </layout>
- </item>
- </layout>
- </widget>
- </item>
- </layout>
- </widget>
- <widget class="QWidget" name="tab_2">
- <attribute name="title">
- <string>Common Applications</string>
- </attribute>
- <layout class="QVBoxLayout" name="verticalLayout_7">
- <item>
- <layout class="QGridLayout" name="gridLayout_6">
- <item row="0" column="0">
- <layout class="QFormLayout" name="formLayout_10">
- <property name="fieldGrowthPolicy">
- <enum>QFormLayout::ExpandingFieldsGrow</enum>
- </property>
- <item row="0" column="0">
- <widget class="QLabel" name="label_37">
- <property name="font">
- <font>
- <weight>75</weight>
- <bold>true</bold>
- </font>
- </property>
- <property name="text">
- <string>Web Browser:</string>
- </property>
- </widget>
- </item>
- <item row="0" column="1">
- <widget class="QToolButton" name="tool_default_webbrowser">
- <property name="text">
- <string notr="true">...</string>
- </property>
- <property name="toolButtonStyle">
- <enum>Qt::ToolButtonTextBesideIcon</enum>
- </property>
- </widget>
- </item>
- <item row="1" column="0">
- <widget class="QLabel" name="label_38">
- <property name="font">
- <font>
- <weight>75</weight>
- <bold>true</bold>
- </font>
- </property>
- <property name="text">
- <string>E-Mail Client:</string>
- </property>
- </widget>
- </item>
- <item row="1" column="1">
- <widget class="QToolButton" name="tool_default_email">
- <property name="text">
- <string notr="true">...</string>
- </property>
- <property name="toolButtonStyle">
- <enum>Qt::ToolButtonTextBesideIcon</enum>
- </property>
- </widget>
- </item>
- </layout>
- </item>
- <item row="0" column="1">
- <layout class="QFormLayout" name="formLayout_11">
- <item row="0" column="0">
- <widget class="QLabel" name="label_39">
- <property name="font">
- <font>
- <weight>75</weight>
- <bold>true</bold>
- </font>
- </property>
- <property name="text">
- <string>File Manager:</string>
- </property>
- </widget>
- </item>
- <item row="1" column="0">
- <widget class="QLabel" name="label_40">
- <property name="font">
- <font>
- <weight>75</weight>
- <bold>true</bold>
- </font>
- </property>
- <property name="text">
- <string>Virtual Terminal:</string>
- </property>
- </widget>
- </item>
- <item row="0" column="1">
- <widget class="QToolButton" name="tool_default_filemanager">
- <property name="text">
- <string>...</string>
- </property>
- <property name="toolButtonStyle">
- <enum>Qt::ToolButtonTextBesideIcon</enum>
- </property>
- </widget>
- </item>
- <item row="1" column="1">
- <widget class="QToolButton" name="tool_default_terminal">
- <property name="text">
- <string>...</string>
- </property>
- <property name="toolButtonStyle">
- <enum>Qt::ToolButtonTextBesideIcon</enum>
- </property>
- </widget>
- </item>
- </layout>
- </item>
- </layout>
- </item>
- <item>
- <spacer name="verticalSpacer_4">
- <property name="orientation">
- <enum>Qt::Vertical</enum>
- </property>
- <property name="sizeHint" stdset="0">
- <size>
- <width>20</width>
- <height>40</height>
- </size>
- </property>
- </spacer>
- </item>
- </layout>
- </widget>
- </widget>
- </item>
- </layout>
- </widget>
- <widget class="QWidget" name="page_session">
- <layout class="QVBoxLayout" name="verticalLayout_10">
- <property name="leftMargin">
- <number>3</number>
- </property>
- <property name="topMargin">
- <number>2</number>
- </property>
- <property name="bottomMargin">
- <number>2</number>
- </property>
- <item>
- <widget class="QTabWidget" name="tabWidget_session">
- <property name="toolTip">
- <string/>
- </property>
- <property name="currentIndex">
- <number>2</number>
- </property>
- <widget class="QWidget" name="tab">
- <attribute name="title">
- <string>General Options</string>
- </attribute>
- <layout class="QGridLayout" name="gridLayout">
- <item row="0" column="0">
- <layout class="QVBoxLayout" name="verticalLayout_4">
- <item>
- <widget class="QCheckBox" name="check_session_numlock">
- <property name="text">
- <string>Enable numlock on startup</string>
- </property>
- </widget>
- </item>
- <item>
- <widget class="QCheckBox" name="check_session_playloginaudio">
- <property name="text">
- <string>Play chimes on startup</string>
- </property>
- </widget>
- </item>
- <item>
- <widget class="QCheckBox" name="check_session_playlogoutaudio">
- <property name="text">
- <string>Play chimes on exit</string>
- </property>
- </widget>
- </item>
- <item>
- <layout class="QHBoxLayout" name="horizontalLayout_14">
- <item>
- <widget class="QPushButton" name="push_session_setUserIcon">
- <property name="text">
- <string>Change User Icon</string>
- </property>
- <property name="iconSize">
- <size>
- <width>32</width>
- <height>32</height>
- </size>
- </property>
- </widget>
- </item>
- <item>
- <spacer name="horizontalSpacer_16">
- <property name="orientation">
- <enum>Qt::Horizontal</enum>
- </property>
- <property name="sizeHint" stdset="0">
- <size>
- <width>40</width>
- <height>20</height>
- </size>
- </property>
- </spacer>
- </item>
- </layout>
- </item>
- </layout>
- </item>
- <item row="6" column="0" colspan="2">
- <widget class="QGroupBox" name="groupBox_2">
- <property name="font">
- <font>
- <weight>50</weight>
- <bold>false</bold>
- </font>
- </property>
- <property name="title">
- <string>Reset Desktop Settings</string>
- </property>
- <layout class="QHBoxLayout" name="horizontalLayout_20">
- <item>
- <spacer name="horizontalSpacer_18">
- <property name="orientation">
- <enum>Qt::Horizontal</enum>
- </property>
- <property name="sizeHint" stdset="0">
- <size>
- <width>40</width>
- <height>20</height>
- </size>
- </property>
- </spacer>
- </item>
- <item>
- <widget class="QPushButton" name="push_session_resetSysDefaults">
- <property name="text">
- <string>Return to system defaults</string>
- </property>
- </widget>
- </item>
- <item>
- <widget class="QPushButton" name="push_session_resetLuminaDefaults">
- <property name="text">
- <string>Return to Lumina defaults</string>
- </property>
- </widget>
- </item>
- <item>
- <spacer name="horizontalSpacer_17">
- <property name="orientation">
- <enum>Qt::Horizontal</enum>
- </property>
- <property name="sizeHint" stdset="0">
- <size>
- <width>40</width>
- <height>20</height>
- </size>
- </property>
- </spacer>
- </item>
- </layout>
- </widget>
- </item>
- <item row="0" column="1" rowspan="2">
- <layout class="QFormLayout" name="formLayout_3">
- <property name="fieldGrowthPolicy">
- <enum>QFormLayout::AllNonFixedFieldsGrow</enum>
- </property>
- <property name="labelAlignment">
- <set>Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter</set>
- </property>
- <item row="0" column="0">
- <widget class="QLabel" name="label_24">
- <property name="text">
- <string>Time Format:</string>
- </property>
- </widget>
- </item>
- <item row="0" column="1">
- <layout class="QHBoxLayout" name="horizontalLayout_3">
- <item>
- <widget class="QLineEdit" name="line_session_time"/>
- </item>
- <item>
- <widget class="QToolButton" name="tool_help_time">
- <property name="toolTip">
- <string>View format codes</string>
- </property>
- <property name="text">
- <string notr="true">...</string>
- </property>
- <property name="autoRaise">
- <bool>true</bool>
- </property>
- </widget>
- </item>
- </layout>
- </item>
- <item row="1" column="0">
- <widget class="QLabel" name="label_28">
- <property name="text">
- <string>Sample:</string>
- </property>
- </widget>
- </item>
- <item row="1" column="1">
- <widget class="QLabel" name="label_session_timesample">
- <property name="text">
- <string notr="true"/>
- </property>
- <property name="alignment">
- <set>Qt::AlignCenter</set>
- </property>
- </widget>
- </item>
- <item row="2" column="0">
- <widget class="QLabel" name="label_25">
- <property name="text">
- <string>Date Format:</string>
- </property>
- </widget>
- </item>
- <item row="2" column="1">
- <layout class="QHBoxLayout" name="horizontalLayout_21">
- <item>
- <widget class="QLineEdit" name="line_session_date"/>
- </item>
- <item>
- <widget class="QToolButton" name="tool_help_date">
- <property name="toolTip">
- <string>View format codes</string>
- </property>
- <property name="text">
- <string notr="true">...</string>
- </property>
- <property name="autoRaise">
- <bool>true</bool>
- </property>
- </widget>
- </item>
- </layout>
- </item>
- <item row="3" column="0">
- <widget class="QLabel" name="label_29">
- <property name="text">
- <string>Sample:</string>
- </property>
- <property name="alignment">
- <set>Qt::AlignLeading|Qt::AlignLeft|Qt::AlignVCenter</set>
- </property>
- </widget>
- </item>
- <item row="3" column="1">
- <widget class="QLabel" name="label_session_datesample">
- <property name="text">
- <string notr="true"/>
- </property>
- <property name="alignment">
- <set>Qt::AlignCenter</set>
- </property>
- </widget>
- </item>
- <item row="4" column="0">
- <widget class="QLabel" name="label_27">
- <property name="text">
- <string>Display Format</string>
- </property>
- </widget>
- </item>
- <item row="4" column="1">
- <widget class="QComboBox" name="combo_session_datetimeorder"/>
- </item>
- </layout>
- </item>
- <item row="1" column="0">
- <spacer name="verticalSpacer_2">
- <property name="orientation">
- <enum>Qt::Vertical</enum>
- </property>
- <property name="sizeHint" stdset="0">
- <size>
- <width>20</width>
- <height>128</height>
- </size>
- </property>
- </spacer>
- </item>
- </layout>
- </widget>
- <widget class="QWidget" name="tab_locale">
- <attribute name="title">
- <string>Locale</string>
- </attribute>
- <layout class="QFormLayout" name="formLayout">
- <item row="1" column="0">
- <widget class="QLabel" name="label_3">
- <property name="text">
- <string>Language</string>
- </property>
- </widget>
- </item>
- <item row="1" column="1">
- <widget class="QComboBox" name="combo_locale_lang"/>
- </item>
- <item row="2" column="0">
- <widget class="QLabel" name="label_4">
- <property name="text">
- <string>Messages</string>
- </property>
- </widget>
- </item>
- <item row="2" column="1">
- <widget class="QComboBox" name="combo_locale_message"/>
- </item>
- <item row="3" column="0">
- <widget class="QLabel" name="label_5">
- <property name="text">
- <string>Time</string>
- </property>
- </widget>
- </item>
- <item row="3" column="1">
- <widget class="QComboBox" name="combo_locale_time"/>
- </item>
- <item row="4" column="0">
- <widget class="QLabel" name="label_7">
- <property name="text">
- <string>Numeric</string>
- </property>
- </widget>
- </item>
- <item row="4" column="1">
- <widget class="QComboBox" name="combo_locale_numeric"/>
- </item>
- <item row="5" column="0">
- <widget class="QLabel" name="label_8">
- <property name="text">
- <string>Monetary</string>
- </property>
- </widget>
- </item>
- <item row="5" column="1">
- <widget class="QComboBox" name="combo_locale_monetary"/>
- </item>
- <item row="6" column="0">
- <widget class="QLabel" name="label_9">
- <property name="text">
- <string>Collate</string>
- </property>
- </widget>
- </item>
- <item row="6" column="1">
- <widget class="QComboBox" name="combo_locale_collate"/>
- </item>
- <item row="7" column="0">
- <widget class="QLabel" name="label_23">
- <property name="text">
- <string>CType</string>
- </property>
- </widget>
- </item>
- <item row="7" column="1">
- <widget class="QComboBox" name="combo_locale_ctype"/>
- </item>
- <item row="0" column="0" colspan="2">
- <widget class="QLabel" name="label_30">
- <property name="text">
- <string>System localization settings (restart required)</string>
- </property>
- </widget>
- </item>
- </layout>
- </widget>
- <widget class="QWidget" name="tab_fluxbox">
- <attribute name="title">
- <string>Window System</string>
- </attribute>
- <layout class="QVBoxLayout" name="verticalLayout_14">
- <item>
- <layout class="QFormLayout" name="formLayout_4">
- <item row="0" column="0">
- <widget class="QLabel" name="label_2">
- <property name="text">
- <string>Number of Workspaces</string>
- </property>
- </widget>
- </item>
- <item row="0" column="1">
- <widget class="QSpinBox" name="spin_session_wkspaces">
- <property name="minimum">
- <number>1</number>
- </property>
- <property name="maximum">
- <number>10</number>
- </property>
- </widget>
- </item>
- <item row="1" column="0">
- <widget class="QLabel" name="label">
- <property name="text">
- <string>New Window Placement</string>
- </property>
- </widget>
- </item>
- <item row="1" column="1">
- <widget class="QComboBox" name="combo_session_wloc"/>
- </item>
- <item row="2" column="0">
- <widget class="QLabel" name="label_6">
- <property name="text">
- <string>Focus Policy</string>
- </property>
- </widget>
- </item>
- <item row="2" column="1">
- <widget class="QComboBox" name="combo_session_wfocus"/>
- </item>
- <item row="3" column="0">
- <widget class="QLabel" name="label_13">
- <property name="text">
- <string>Window Theme</string>
- </property>
- </widget>
- </item>
- <item row="3" column="1">
- <widget class="QComboBox" name="combo_session_wtheme"/>
- </item>
- </layout>
- </item>
- <item>
- <widget class="QGroupBox" name="group_session_preview">
- <property name="sizePolicy">
- <sizepolicy hsizetype="Preferred" vsizetype="Expanding">
- <horstretch>0</horstretch>
- <verstretch>0</verstretch>
- </sizepolicy>
- </property>
- <property name="title">
- <string>Window Theme Preview</string>
- </property>
- <layout class="QVBoxLayout" name="verticalLayout_12">
- <item>
- <widget class="QScrollArea" name="scrollArea">
- <property name="widgetResizable">
- <bool>true</bool>
- </property>
- <widget class="QWidget" name="scrollAreaWidgetContents">
- <property name="geometry">
- <rect>
- <x>0</x>
- <y>0</y>
- <width>573</width>
- <height>97</height>
- </rect>
- </property>
- <property name="sizePolicy">
- <sizepolicy hsizetype="Expanding" vsizetype="Expanding">
- <horstretch>0</horstretch>
- <verstretch>0</verstretch>
- </sizepolicy>
- </property>
- <layout class="QVBoxLayout" name="verticalLayout_13">
- <property name="leftMargin">
- <number>1</number>
- </property>
- <property name="topMargin">
- <number>1</number>
- </property>
- <property name="rightMargin">
- <number>1</number>
- </property>
- <property name="bottomMargin">
- <number>1</number>
- </property>
- <item>
- <widget class="QLabel" name="label_session_wpreview">
- <property name="sizePolicy">
- <sizepolicy hsizetype="Expanding" vsizetype="Expanding">
- <horstretch>0</horstretch>
- <verstretch>0</verstretch>
- </sizepolicy>
- </property>
- <property name="styleSheet">
- <string notr="true"/>
- </property>
- <property name="frameShape">
- <enum>QFrame::NoFrame</enum>
- </property>
- <property name="frameShadow">
- <enum>QFrame::Sunken</enum>
- </property>
- <property name="text">
- <string>No Preview Available</string>
- </property>
- <property name="scaledContents">
- <bool>false</bool>
- </property>
- <property name="alignment">
- <set>Qt::AlignCenter</set>
- </property>
- </widget>
- </item>
- </layout>
- </widget>
- </widget>
- </item>
- </layout>
- </widget>
- </item>
- </layout>
- </widget>
- </widget>
- </item>
- </layout>
- </widget>
- </widget>
- </item>
- <item>
- <layout class="QHBoxLayout" name="horizontalLayout">
- <property name="topMargin">
- <number>4</number>
- </property>
- <item>
- <spacer name="horizontalSpacer">
- <property name="orientation">
- <enum>Qt::Horizontal</enum>
- </property>
- <property name="sizeHint" stdset="0">
- <size>
- <width>40</width>
- <height>20</height>
- </size>
- </property>
- </spacer>
- </item>
- <item>
- <widget class="QPushButton" name="push_save">
- <property name="text">
- <string>Save Changes</string>
- </property>
- <property name="shortcut">
- <string>Ctrl+S</string>
- </property>
- <property name="flat">
- <bool>false</bool>
- </property>
- </widget>
- </item>
- <item>
- <spacer name="horizontalSpacer_2">
- <property name="orientation">
- <enum>Qt::Horizontal</enum>
- </property>
- <property name="sizeHint" stdset="0">
- <size>
- <width>40</width>
- <height>20</height>
- </size>
- </property>
- </spacer>
- </item>
- </layout>
- </item>
- </layout>
- </widget>
- <widget class="QToolBar" name="toolBar">
- <property name="minimumSize">
- <size>
- <width>120</width>
- <height>0</height>
- </size>
- </property>
- <property name="contextMenuPolicy">
- <enum>Qt::CustomContextMenu</enum>
- </property>
- <property name="windowTitle">
- <string>toolBar</string>
- </property>
- <property name="movable">
- <bool>false</bool>
- </property>
- <property name="toolButtonStyle">
- <enum>Qt::ToolButtonTextUnderIcon</enum>
- </property>
- <property name="floatable">
- <bool>false</bool>
- </property>
- <attribute name="toolBarArea">
- <enum>TopToolBarArea</enum>
- </attribute>
- <attribute name="toolBarBreak">
- <bool>false</bool>
- </attribute>
- <addaction name="actionDesktop"/>
- <addaction name="actionPanels"/>
- <addaction name="actionDefaults"/>
- <addaction name="actionShortcuts"/>
- <addaction name="actionSession"/>
- </widget>
- <action name="actionDesktop">
- <property name="checkable">
- <bool>true</bool>
- </property>
- <property name="text">
- <string>Appearance</string>
- </property>
- <property name="iconText">
- <string> Appearance </string>
- </property>
- <property name="toolTip">
- <string>Desktop Appearance</string>
- </property>
- </action>
- <action name="actionPanels">
- <property name="checkable">
- <bool>true</bool>
- </property>
- <property name="text">
- <string> Interface </string>
- </property>
- <property name="iconText">
- <string> Interface </string>
- </property>
- <property name="toolTip">
- <string>Interface Configuration</string>
- </property>
- </action>
- <action name="actionSession">
- <property name="checkable">
- <bool>true</bool>
- </property>
- <property name="text">
- <string> Session </string>
- </property>
- <property name="iconText">
- <string> Session </string>
- </property>
- <property name="toolTip">
- <string>Session Options</string>
- </property>
- </action>
- <action name="actionDefaults">
- <property name="checkable">
- <bool>true</bool>
- </property>
- <property name="text">
- <string>Applications</string>
- </property>
- <property name="iconText">
- <string> Applications </string>
- </property>
- <property name="toolTip">
- <string>Application Management</string>
- </property>
- </action>
- <action name="actionShortcuts">
- <property name="checkable">
- <bool>true</bool>
- </property>
- <property name="text">
- <string>Shortcuts</string>
- </property>
- <property name="iconText">
- <string> Shortcuts </string>
- </property>
- <property name="toolTip">
- <string>Keyboard Shortcuts</string>
- </property>
- </action>
- </widget>
- <resources/>
- <connections/>
-</ui>
diff --git a/src-qt5/core-utils/lumina-config/mainWindow.cpp b/src-qt5/core-utils/lumina-config/mainWindow.cpp
index 45008b07..0bb3cbf0 100644
--- a/src-qt5/core-utils/lumina-config/mainWindow.cpp
+++ b/src-qt5/core-utils/lumina-config/mainWindow.cpp
@@ -15,6 +15,15 @@
//=============
mainWindow::mainWindow() : QMainWindow(), ui(new Ui::mainWindow()){
ui->setupUi(this);
+ cpage = "somerandomjunktostartwith";
+ //Need to insert a spacer action in the toolbar
+ QWidget *tmp = new QWidget(this);
+ tmp->setSizePolicy(QSizePolicy::Expanding, QSizePolicy::Preferred);
+ ui->toolBar->insertWidget(ui->actionSave, tmp); //after the save button
+ backShortcut = new QShortcut(Qt::Key_Escape, this);
+ connect(backShortcut, SIGNAL(activated()), this, SLOT(on_actionBack_triggered()) );
+ setupIcons();
+ loadMonitors();
changePage(""); //load the default main page
}
@@ -30,29 +39,63 @@ void mainWindow::slotSingleInstance(){
}
void mainWindow::setupIcons(){
+ this->setWindowIcon( LXDG::findIcon("preferences-desktop") );
ui->actionSave->setIcon( LXDG::findIcon("document-save","") );
+ ui->actionBack->setIcon( LXDG::findIcon("go-previous-view","") );
+ ui->actionMonitor->setIcon(LXDG::findIcon("preferences-desktop-display","") );
+}
+
+void mainWindow::loadMonitors(){
+ if(ui->actionMonitor->menu()==0){
+ ui->actionMonitor->setMenu( new QMenu(this) );
+ ui->actionMonitor->setWhatsThis("0");
+ connect( ui->actionMonitor->menu(), SIGNAL(triggered(QAction*)), this, SLOT(changeMonitor(QAction*)) );
+ QToolButton *b = static_cast<QToolButton*>(ui->toolBar->widgetForAction(ui->actionMonitor));
+ b->setPopupMode(QToolButton::InstantPopup);
+ }
+ int cnum = ui->actionMonitor->whatsThis().toInt();
+ ui->actionMonitor->menu()->clear();
+ QList<QScreen*> SL = QApplication::screens();
+ for(int i=0; i<SL.length(); i++){
+ QAction *tmp = ui->actionMonitor->menu()->addAction( QString("%1: %2").arg(QString::number(i), SL[i]->name()) );
+ tmp->setWhatsThis(QString::number(i));
+ if(i==cnum || (i==0 && cnum>= SL.length()) ){
+ ui->actionMonitor->setText( tmp->text() );
+ ui->actionMonitor->setWhatsThis(tmp->whatsThis() );
+ }
+ }
+
}
//=============
// PRIVATE
//=============
void mainWindow::changePage(QString id){
- PageWidget *page = GetNewPage(id, this);
- if(page==0){ return; }
- qDebug() << "Changing page:" << id;
- cpage = id;
- QWidget *old = this->centralWidget();
- this->setCentralWidget(page);
- if(old!=0 && old!=ui->centralwidget){ old->disconnect(); old->deleteLater(); }
- //Connect the new page
- connect(page, SIGNAL(HasPendingChanges(bool)), this, SLOT(pageCanSave(bool)) );
- connect(page, SIGNAL(ChangePageTitle(QString)), this, SLOT(pageSetTitle(QString)) );
- connect(page, SIGNAL(ChangePage(QString)), this, SLOT(page_change(QString)) );
+ PageWidget *page = 0;
+ if(id!=cpage){
+ page = GetNewPage(id, this);
+ if(page==0){ return; }
+ qDebug() << "Changing page:" << id;
+ cpage = id;
+ QWidget *old = this->centralWidget();
+ this->setCentralWidget(page);
+ if(old!=0 && old!=ui->centralwidget){ old->disconnect(); old->deleteLater(); }
+ //Connect the new page
+ connect(page, SIGNAL(HasPendingChanges(bool)), this, SLOT(pageCanSave(bool)) );
+ connect(page, SIGNAL(ChangePageTitle(QString)), this, SLOT(pageSetTitle(QString)) );
+ connect(page, SIGNAL(ChangePage(QString)), this, SLOT(page_change(QString)) );
+ page->setFocus();
+ ui->toolBar->setVisible( !cpage.isEmpty() );
+ }else{
+ //No change in page (some other refresh)
+ // just re-use the current widget
+ page = static_cast<PageWidget*>(this->centralWidget());
+ }
//Now load the new page
- page->LoadSettings(0); //need to make this show the current screen as needed
+ page->LoadSettings(ui->actionMonitor->whatsThis().toInt()); //need to make this show the current screen as needed
//Now update this UI a bit based on page settings
- bool needscreen = page->needsScreenSelector();
-
+ ui->actionMonitor->setVisible( page->needsScreenSelector() && ui->actionMonitor->menu()->actions().length()>1 );
+
this->showNormal();
}
//================
@@ -68,10 +111,33 @@ void mainWindow::pageSetTitle(QString title){
this->setWindowTitle(title);
}
-void mainWindow::page_change(QString id){
+bool mainWindow::page_change(QString id){
if(ui->actionSave->isEnabled()){
//unsaved changed available - prompt to save first
- // TO-DO
+ QMessageBox::StandardButton result = QMessageBox::question(this, tr("Unsaved Changes"), tr("This page currently has unsaved changes, do you wish to save them now?"), QMessageBox::Yes | QMessageBox::No | QMessageBox::Cancel, QMessageBox::No);
+ if(result == QMessageBox::Yes){ on_actionSave_triggered(); }
+ else if(result == QMessageBox::Cancel){ return false; } //stop now
}
changePage(id);
+ return true;
+}
+
+void mainWindow::on_actionSave_triggered(){
+ pageCanSave(false); //disable for the moment (page might re-enable later)
+ static_cast<PageWidget*>(this->centralWidget())->SaveSettings();
+
+}
+
+void mainWindow::on_actionBack_triggered(){
+ if(cpage.isEmpty()){ this->close(); } //main menu - go ahead and close it
+ else{ page_change(""); } //Use the interactive wrapper (check for save state, etc).
+}
+
+void mainWindow::changeMonitor(QAction *act){
+ QString oldWT = ui->actionMonitor->whatsThis();
+ //Update the current selection shown on the button
+ ui->actionMonitor->setWhatsThis( act->whatsThis() );
+ //Now prompt the current page to re-load settings
+ if( page_change(cpage) ){ ui->actionMonitor->setText(act->text()); }
+ else{ ui->actionMonitor->setWhatsThis(oldWT); } //cancelled - go back to old setting
}
diff --git a/src-qt5/core-utils/lumina-config/mainWindow.h b/src-qt5/core-utils/lumina-config/mainWindow.h
index 3a6e0161..14969473 100644
--- a/src-qt5/core-utils/lumina-config/mainWindow.h
+++ b/src-qt5/core-utils/lumina-config/mainWindow.h
@@ -21,18 +21,25 @@ public:
public slots:
void slotSingleInstance();
void setupIcons();
+ void loadMonitors();
private:
Ui::mainWindow *ui;
+ QShortcut *backShortcut;
QString cpage; //current page
+
void changePage(QString id);
private slots:
//Page signals
void pageCanSave(bool);
void pageSetTitle(QString);
- void page_change(QString);
+ bool page_change(QString);
+ //Toolbar actions
+ void on_actionSave_triggered();
+ void on_actionBack_triggered();
+ void changeMonitor(QAction*);
};
#endif
diff --git a/src-qt5/core-utils/lumina-config/mainWindow.ui b/src-qt5/core-utils/lumina-config/mainWindow.ui
index 55e39233..0a9f6896 100644
--- a/src-qt5/core-utils/lumina-config/mainWindow.ui
+++ b/src-qt5/core-utils/lumina-config/mainWindow.ui
@@ -6,7 +6,7 @@
<rect>
<x>0</x>
<y>0</y>
- <width>486</width>
+ <width>504</width>
<height>388</height>
</rect>
</property>
@@ -28,6 +28,12 @@
<property name="allowedAreas">
<set>Qt::TopToolBarArea</set>
</property>
+ <property name="toolButtonStyle">
+ <enum>Qt::ToolButtonTextBesideIcon</enum>
+ </property>
+ <property name="floatable">
+ <bool>false</bool>
+ </property>
<attribute name="toolBarArea">
<enum>TopToolBarArea</enum>
</attribute>
@@ -37,6 +43,7 @@
<addaction name="actionBack"/>
<addaction name="separator"/>
<addaction name="actionSave"/>
+ <addaction name="actionMonitor"/>
</widget>
<action name="actionSave">
<property name="text">
@@ -59,8 +66,22 @@
<property name="statusTip">
<string>Back to overall settings</string>
</property>
- <property name="shortcut">
- <string>Esc</string>
+ <property name="shortcutContext">
+ <enum>Qt::ApplicationShortcut</enum>
+ </property>
+ </action>
+ <action name="actionMonitor">
+ <property name="text">
+ <string notr="true">Monitor</string>
+ </property>
+ <property name="toolTip">
+ <string>Select monitor/desktop to configure</string>
+ </property>
+ <property name="statusTip">
+ <string>Select monitor/desktop to configure</string>
+ </property>
+ <property name="menuRole">
+ <enum>QAction::ApplicationSpecificRole</enum>
</property>
</action>
</widget>
diff --git a/src-qt5/core-utils/lumina-config/pages/PageWidget.h b/src-qt5/core-utils/lumina-config/pages/PageWidget.h
index 937e6692..66fce36a 100644
--- a/src-qt5/core-utils/lumina-config/pages/PageWidget.h
+++ b/src-qt5/core-utils/lumina-config/pages/PageWidget.h
@@ -28,7 +28,9 @@ class PageWidget : public QWidget{
public:
//Main constructor/destructor (create/destroy any interface items)
- PageWidget(QWidget *parent) : QWidget(parent){}
+ PageWidget(QWidget *parent) : QWidget(parent){
+ //this->setFocusPolicy(Qt::NoFocus);
+ }
~PageWidget(){}
virtual bool needsScreenSelector(){ return false; } //change this to true for pages which load/set options on a per-screen basis
@@ -48,7 +50,7 @@ public slots:
virtual void updateIcons(){}
//Simplification function for widget connections
- void settingChanged(){
+ virtual void settingChanged(){
emit HasPendingChanges(true);
}
};
diff --git a/src-qt5/core-utils/lumina-config/pages/getPage.h b/src-qt5/core-utils/lumina-config/pages/getPage.h
index 96e22985..b38e614f 100644
--- a/src-qt5/core-utils/lumina-config/pages/getPage.h
+++ b/src-qt5/core-utils/lumina-config/pages/getPage.h
@@ -23,19 +23,50 @@ static PAGEINFO PageInfo(QString ID, QString i_name, QString i_title, QString i_
//List all the known pages
// **** Add new page entries here ****
static QList<PAGEINFO> KnownPages(){
- // Valid Groups: ["appearance", "interface", "session", "apps"]
+ // Valid Groups: ["appearance", "interface", "session", "user"]
QList<PAGEINFO> list;
//Reminder: <ID>, <name>, <title>, <icon>, <comment>, <category>, <server subsytem list>, <search tags>
-
- return list;
+ list << PageInfo("wallpaper", QObject::tr("Change Wallpaper"), QObject::tr("Wallpaper Settings"), "preferences-desktop-wallpaper",QObject::tr("Change background image(s)"), "appearance", QStringList(), QStringList() << "background" << "wallpaper" << "color" << "image");
+ list << PageInfo("theme", QObject::tr("Change Desktop Theme"), QObject::tr("Theme Settings"), "preferences-desktop-theme",QObject::tr("Change interface fonts and colors"), "appearance", QStringList(), QStringList() << "background" << "interface" << "color" << "theme" << "plugins");
+ list << PageInfo("autostart", QObject::tr("Startup Services and Applications"), QObject::tr("Startup Settings"), "preferences-system-session-services",QObject::tr("Automatically start applications or services"), "session", QStringList(), QStringList() << "apps" << "autostart" << "services" << "xdg" << "startup" << "session");
+ list << PageInfo("defaultapps", QObject::tr("Default Applications for File Type"), QObject::tr("Mimetype Settings"), "preferences-desktop-default-applications",QObject::tr("Change default applications"), "session", QStringList(), QStringList() << "apps" << "default" << "services" << "xdg" << "session");
+ list << PageInfo("fluxbox-keys", QObject::tr("Keyboard Shortcuts"), QObject::tr("Keyboard Shortcuts"), "preferences-desktop-keyboard",QObject::tr("Change keyboard shortcuts"), "session", QStringList(), QStringList() << "apps" << "fluxbox" << "keys" << "keyboard" << "session" << "launch");
+ list << PageInfo("fluxbox-settings", QObject::tr("Window Manager"), QObject::tr("Window Settings"), "preferences-system-windows",QObject::tr("Change window settings and appearances"), "appearance", QStringList(), QStringList() << "window" << "frame" << "border" << "workspace" << "theme" << "fluxbox" << "session");
+ list << PageInfo("interface-desktop", QObject::tr("Desktop Icons and Plugins"), QObject::tr("Desktop Plugins"), "preferences-desktop-icons",QObject::tr("Change what icons or tools are embedded on the desktop"), "interface", QStringList(), QStringList() << "desktop" << "plugins" << "embed" << "icons" << "utilities");
+ list << PageInfo("interface-panel", QObject::tr("Floating Panels and Plugins"), QObject::tr("Panels and Plugins"), "configure-toolbars",QObject::tr("Change any floating panels and what they show"), "interface", QStringList(), QStringList() << "desktop" << "toolbar" << "panel" << "floating" << "plugins");
+ list << PageInfo("interface-menu", QObject::tr("Context Menu and Plugins"), QObject::tr("Menu Plugins"), "preferences-plugin",QObject::tr("Change what options are shown on the desktop context menu"), "interface", QStringList(), QStringList() << "desktop" << "menu" << "plugins" << "shortcuts");
+ list << PageInfo("session-locale", QObject::tr("Localization Options"), QObject::tr("Locale Settings"), "preferences-desktop-locale",QObject::tr("Change the default locale settings for this user"), "user", QStringList(), QStringList() << "user"<<"locale"<<"language"<<"translations");
+ list << PageInfo("session-options", QObject::tr("General Options"), QObject::tr("User Settings"), "configure",QObject::tr("Change basic user settings such as time/date formats"), "user", QStringList(), QStringList() << "user"<<"settings"<<"time"<<"date"<<"icon"<<"reset"<<"numlock"<<"clock");
+ return list;
}
//Add any sub-pages here
#include "page_main.h"
+#include "page_wallpaper.h"
+#include "page_theme.h"
+#include "page_autostart.h"
+#include "page_defaultapps.h"
+#include "page_fluxbox_keys.h"
+#include "page_fluxbox_settings.h"
+#include "page_interface_desktop.h"
+#include "page_interface_panels.h"
+#include "page_interface_menu.h"
+#include "page_session_locale.h"
+#include "page_session_options.h"
static PageWidget* GetNewPage(QString id, QWidget *parent){
//Find the page that matches this "id"
- //if(id=="page_beadm"){ return new beadm_page(parent, core); }
+ if(id=="wallpaper"){ return new page_wallpaper(parent); }
+ else if(id=="theme"){ return new page_theme(parent); }
+ else if(id=="autostart"){ return new page_autostart(parent); }
+ else if(id=="defaultapps"){ return new page_defaultapps(parent); }
+ else if(id=="fluxbox-keys"){ return new page_fluxbox_keys(parent); }
+ else if(id=="fluxbox-settings"){ return new page_fluxbox_settings(parent); }
+ else if(id=="interface-desktop"){ return new page_interface_desktop(parent); }
+ else if(id=="interface-panel"){ return new page_interface_panels(parent); }
+ else if(id=="interface-menu"){ return new page_interface_menu(parent); }
+ else if(id=="session-locale"){ return new page_session_locale(parent); }
+ else if(id=="session-options"){ return new page_session_options(parent); }
//Return the main control_panel page as the fallback/default
return new page_main(parent);
}
diff --git a/src-qt5/core-utils/lumina-config/pages/page_autostart.cpp b/src-qt5/core-utils/lumina-config/pages/page_autostart.cpp
new file mode 100644
index 00000000..b7c52fb7
--- /dev/null
+++ b/src-qt5/core-utils/lumina-config/pages/page_autostart.cpp
@@ -0,0 +1,153 @@
+//===========================================
+// Lumina Desktop Source Code
+// Copyright (c) 2016, Ken Moore
+// Available under the 3-clause BSD license
+// See the LICENSE file for full details
+//===========================================
+#include "page_autostart.h"
+#include "ui_page_autostart.h"
+#include "getPage.h"
+
+#include "../AppDialog.h"
+//==========
+// PUBLIC
+//==========
+page_autostart::page_autostart(QWidget *parent) : PageWidget(parent), ui(new Ui::page_autostart()){
+ ui->setupUi(this);
+ ui->list_session_start->setMouseTracking(true);
+ updateIcons();
+ connect(ui->tool_session_addapp, SIGNAL(clicked()), this, SLOT(addsessionstartapp()) );
+ connect(ui->tool_session_addbin, SIGNAL(clicked()), this, SLOT(addsessionstartbin()) );
+ connect(ui->tool_session_addfile, SIGNAL(clicked()), this, SLOT(addsessionstartfile()) );
+ connect(ui->list_session_start, SIGNAL(itemChanged(QListWidgetItem*)), this, SLOT(settingChanged()) );
+}
+
+page_autostart::~page_autostart(){
+
+}
+
+
+
+//================
+// PUBLIC SLOTS
+//================
+void page_autostart::SaveSettings(){
+ QList<XDGDesktop> STARTAPPS = LXDG::findAutoStartFiles(true); //also want invalid/disabled items
+ //bool newstartapps = false;
+ for(int i=0; i<ui->list_session_start->count(); i++){
+ QString file = ui->list_session_start->item(i)->whatsThis();
+ bool enabled = ui->list_session_start->item(i)->checkState()==Qt::Checked;
+ bool found = false;
+ for(int i=0; i<STARTAPPS.length(); i++){
+ if(STARTAPPS[i].filePath==file){
+ found = true;
+ if(enabled != !STARTAPPS[i].isHidden){
+ //value is different
+ qDebug() << "Setting Autostart:" << enabled << STARTAPPS[i].filePath;
+ LXDG::setAutoStarted(enabled, STARTAPPS[i]);
+ }
+ break;
+ }
+ }
+ if(!found && enabled){
+ //New file/binary/app
+ qDebug() << "Adding new AutoStart File:" << file;
+ LXDG::setAutoStarted(enabled, file);
+ //newstartapps = true;
+ }
+ }
+}
+
+void page_autostart::LoadSettings(int){
+ emit HasPendingChanges(false);
+ emit ChangePageTitle( tr("Startup Services") );
+ QList<XDGDesktop> STARTAPPS = LXDG::findAutoStartFiles(true); //also want invalid/disabled items
+ //qDebug() << "StartApps:";
+ ui->list_session_start->clear();
+ for(int i=0; i<STARTAPPS.length(); i++){
+ //qDebug() << STARTAPPS[i].filePath +" -> " +STARTAPPS[i].name << STARTAPPS[i].isHidden;
+ if( !LXDG::checkValidity(STARTAPPS[i],false) || !QFile::exists(STARTAPPS[i].filePath) ){ continue; }
+ QListWidgetItem *it = new QListWidgetItem( LXDG::findIcon(STARTAPPS[i].icon,"application-x-executable"), STARTAPPS[i].name );
+ it->setWhatsThis(STARTAPPS[i].filePath); //keep the file location
+ it->setToolTip(STARTAPPS[i].comment);
+ if(STARTAPPS[i].isHidden){ it->setCheckState( Qt::Unchecked); }
+ else{it->setCheckState( Qt::Checked); }
+ ui->list_session_start->addItem(it);
+ }
+}
+
+void page_autostart::updateIcons(){
+ ui->tool_session_addapp->setIcon( LXDG::findIcon("system-run","") );
+ ui->tool_session_addbin->setIcon( LXDG::findIcon("system-search","") );
+ ui->tool_session_addfile->setIcon( LXDG::findIcon("run-build-file","") );
+}
+
+//=================
+// PRIVATE
+//=================
+XDGDesktop page_autostart::getSysApp(bool allowreset){
+ AppDialog dlg(this, LXDG::sortDesktopNames( LXDG::systemDesktopFiles() ) );
+ dlg.allowReset(allowreset);
+ dlg.exec();
+ XDGDesktop desk;
+ if(dlg.appreset && allowreset){
+ desk.filePath = "reset"; //special internal flag
+ }else{
+ desk = dlg.appselected;
+ }
+ return desk;
+}
+
+//=================
+// PRIVATE SLOTS
+//=================
+void page_autostart::rmsessionstartitem(){
+ if(ui->list_session_start->currentRow() < 0){ return; } //no item selected
+ delete ui->list_session_start->takeItem(ui->list_session_start->currentRow());
+ settingChanged();
+}
+
+void page_autostart::addsessionstartapp(){
+ //Prompt for the application to start
+ XDGDesktop desk = getSysApp(false); //no reset
+ if(desk.filePath.isEmpty()){ return; } //cancelled
+ QListWidgetItem *it = new QListWidgetItem( LXDG::findIcon(desk.icon,""), desk.name );
+ it->setWhatsThis(desk.filePath);
+ it->setToolTip(desk.comment);
+ it->setCheckState(Qt::Checked);
+
+ ui->list_session_start->addItem(it);
+ ui->list_session_start->setCurrentItem(it);
+ settingChanged();
+}
+
+void page_autostart::addsessionstartbin(){
+ QString chkpath = LOS::AppPrefix() + "bin";
+ if(!QFile::exists(chkpath)){ chkpath = QDir::homePath(); }
+ QString bin = QFileDialog::getOpenFileName(this, tr("Select Binary"), chkpath, tr("Application Binaries (*)") );
+ if( bin.isEmpty() || !QFile::exists(bin) ){ return; } //cancelled
+ if( !QFileInfo(bin).isExecutable() ){
+ QMessageBox::warning(this, tr("Invalid Binary"), tr("The selected file is not executable!"));
+ return;
+ }
+ QListWidgetItem *it = new QListWidgetItem( LXDG::findIcon("application-x-executable",""), bin.section("/",-1) );
+ it->setWhatsThis(bin); //command to be saved/run
+ it->setToolTip(bin);
+ it->setCheckState(Qt::Checked);
+ ui->list_session_start->addItem(it);
+ ui->list_session_start->setCurrentItem(it);
+ settingChanged();
+}
+
+void page_autostart::addsessionstartfile(){
+ QString chkpath = QDir::homePath();
+ QString bin = QFileDialog::getOpenFileName(this, tr("Select File"), chkpath, tr("All Files (*)") );
+ if( bin.isEmpty() || !QFile::exists(bin) ){ return; } //cancelled
+ QListWidgetItem *it = new QListWidgetItem( LXDG::findMimeIcon(bin), bin.section("/",-1) );
+ it->setWhatsThis(bin); //file to be saved/run
+ it->setToolTip(bin);
+ it->setCheckState(Qt::Checked);
+ ui->list_session_start->addItem(it);
+ ui->list_session_start->setCurrentItem(it);
+ settingChanged();
+}
diff --git a/src-qt5/core-utils/lumina-config/pages/page_autostart.h b/src-qt5/core-utils/lumina-config/pages/page_autostart.h
new file mode 100644
index 00000000..88f1ef94
--- /dev/null
+++ b/src-qt5/core-utils/lumina-config/pages/page_autostart.h
@@ -0,0 +1,38 @@
+//===========================================
+// Lumina Desktop Source Code
+// Copyright (c) 2016, Ken Moore
+// Available under the 3-clause BSD license
+// See the LICENSE file for full details
+//===========================================
+#ifndef _LUMINA_CONFIG_PAGE_AUTOSTART_H
+#define _LUMINA_CONFIG_PAGE_AUTOSTART_H
+#include "../globals.h"
+#include "PageWidget.h"
+
+namespace Ui{
+ class page_autostart;
+};
+
+class page_autostart : public PageWidget{
+ Q_OBJECT
+public:
+ page_autostart(QWidget *parent);
+ ~page_autostart();
+
+public slots:
+ void SaveSettings();
+ void LoadSettings(int screennum);
+ void updateIcons();
+
+private:
+ Ui::page_autostart *ui;
+
+ XDGDesktop getSysApp(bool allowreset);
+
+private slots:
+ void rmsessionstartitem();
+ void addsessionstartapp();
+ void addsessionstartbin();
+ void addsessionstartfile();
+};
+#endif
diff --git a/src-qt5/core-utils/lumina-config/pages/page_autostart.ui b/src-qt5/core-utils/lumina-config/pages/page_autostart.ui
index 0d49005d..b286b4a5 100644
--- a/src-qt5/core-utils/lumina-config/pages/page_autostart.ui
+++ b/src-qt5/core-utils/lumina-config/pages/page_autostart.ui
@@ -15,71 +15,95 @@
</property>
<layout class="QVBoxLayout" name="verticalLayout">
<property name="leftMargin">
- <number>0</number>
+ <number>9</number>
</property>
<property name="topMargin">
- <number>0</number>
+ <number>6</number>
</property>
<property name="rightMargin">
- <number>0</number>
+ <number>9</number>
</property>
<property name="bottomMargin">
- <number>0</number>
+ <number>9</number>
</property>
<item>
- <layout class="QHBoxLayout" name="horizontalLayout_18">
- <item>
- <spacer name="horizontalSpacer_15">
- <property name="orientation">
- <enum>Qt::Horizontal</enum>
- </property>
- <property name="sizeHint" stdset="0">
- <size>
- <width>40</width>
- <height>20</height>
- </size>
- </property>
- </spacer>
- </item>
- <item>
- <widget class="QToolButton" name="tool_session_addapp_2">
- <property name="text">
- <string>Application</string>
- </property>
- <property name="toolButtonStyle">
- <enum>Qt::ToolButtonTextBesideIcon</enum>
- </property>
- </widget>
- </item>
- <item>
- <widget class="QToolButton" name="tool_session_addbin_2">
- <property name="text">
- <string>Binary</string>
- </property>
- <property name="toolButtonStyle">
- <enum>Qt::ToolButtonTextBesideIcon</enum>
- </property>
- </widget>
- </item>
- <item>
- <widget class="QToolButton" name="tool_session_addfile_2">
- <property name="text">
- <string>File</string>
- </property>
- <property name="toolButtonStyle">
- <enum>Qt::ToolButtonTextBesideIcon</enum>
- </property>
- </widget>
- </item>
- </layout>
- </item>
- <item>
- <widget class="QListWidget" name="list_session_start_2">
+ <widget class="QListWidget" name="list_session_start">
<property name="sortingEnabled">
<bool>true</bool>
</property>
</widget>
</item>
+ <item>
+ <widget class="QGroupBox" name="groupBox">
+ <property name="title">
+ <string>Add New Startup Service</string>
+ </property>
+ <property name="alignment">
+ <set>Qt::AlignCenter</set>
+ </property>
+ <layout class="QHBoxLayout" name="horizontalLayout">
+ <property name="leftMargin">
+ <number>0</number>
+ </property>
+ <property name="topMargin">
+ <number>0</number>
+ </property>
+ <property name="rightMargin">
+ <number>0</number>
+ </property>
+ <property name="bottomMargin">
+ <number>0</number>
+ </property>
+ <item>
+ <layout class="QHBoxLayout" name="horizontalLayout_18">
+ <item>
+ <spacer name="horizontalSpacer_15">
+ <property name="orientation">
+ <enum>Qt::Horizontal</enum>
+ </property>
+ <property name="sizeHint" stdset="0">
+ <size>
+ <width>40</width>
+ <height>20</height>
+ </size>
+ </property>
+ </spacer>
+ </item>
+ <item>
+ <widget class="QToolButton" name="tool_session_addapp">
+ <property name="text">
+ <string>Application</string>
+ </property>
+ <property name="toolButtonStyle">
+ <enum>Qt::ToolButtonTextBesideIcon</enum>
+ </property>
+ </widget>
+ </item>
+ <item>
+ <widget class="QToolButton" name="tool_session_addbin">
+ <property name="text">
+ <string>Binary</string>
+ </property>
+ <property name="toolButtonStyle">
+ <enum>Qt::ToolButtonTextBesideIcon</enum>
+ </property>
+ </widget>
+ </item>
+ <item>
+ <widget class="QToolButton" name="tool_session_addfile">
+ <property name="text">
+ <string>File</string>
+ </property>
+ <property name="toolButtonStyle">
+ <enum>Qt::ToolButtonTextBesideIcon</enum>
+ </property>
+ </widget>
+ </item>
+ </layout>
+ </item>
+ </layout>
+ </widget>
+ </item>
</layout>
</widget>
<resources/>
diff --git a/src-qt5/core-utils/lumina-config/pages/page_defaultapps.cpp b/src-qt5/core-utils/lumina-config/pages/page_defaultapps.cpp
new file mode 100644
index 00000000..e55beba6
--- /dev/null
+++ b/src-qt5/core-utils/lumina-config/pages/page_defaultapps.cpp
@@ -0,0 +1,430 @@
+//===========================================
+// Lumina Desktop Source Code
+// Copyright (c) 2016, Ken Moore
+// Available under the 3-clause BSD license
+// See the LICENSE file for full details
+//===========================================
+#include "page_defaultapps.h"
+#include "ui_page_defaultapps.h"
+#include "getPage.h"
+#include "../AppDialog.h"
+
+//==========
+// PUBLIC
+//==========
+page_defaultapps::page_defaultapps(QWidget *parent) : PageWidget(parent), ui(new Ui::page_defaultapps()){
+ ui->setupUi(this);
+
+ connect(ui->tool_default_filemanager, SIGNAL(clicked()), this, SLOT(changeDefaultFileManager()) );
+ connect(ui->tool_default_terminal, SIGNAL(clicked()), this, SLOT(changeDefaultTerminal()) );
+ connect(ui->tool_default_webbrowser, SIGNAL(clicked()), this, SLOT(changeDefaultBrowser()) );
+ connect(ui->tool_default_email, SIGNAL(clicked()), this, SLOT(changeDefaultEmail()) );
+ connect(ui->tool_defaults_clear, SIGNAL(clicked()), this, SLOT(cleardefaultitem()) );
+ connect(ui->tool_defaults_set, SIGNAL(clicked()), this, SLOT(setdefaultitem()) );
+ connect(ui->tool_defaults_setbin, SIGNAL(clicked()), this, SLOT(setdefaultbinary()) );
+ connect(ui->tree_defaults, SIGNAL(itemSelectionChanged()), this, SLOT(checkdefaulticons()) );
+ updateIcons();
+ ui->tabWidget_apps->setCurrentWidget(ui->tab_auto);
+}
+
+page_defaultapps::~page_defaultapps(){
+
+}
+
+//================
+// PUBLIC SLOTS
+//================
+void page_defaultapps::SaveSettings(){
+
+}
+
+void page_defaultapps::LoadSettings(int){
+ emit HasPendingChanges(false);
+ emit ChangePageTitle( tr("Default Applications") );
+
+//First load the lumina-open specific defaults
+ // - Default File Manager
+ QString tmp = LXDG::findDefaultAppForMime("inode/directory");
+ if(tmp.isEmpty()){ tmp = "lumina-fm"; }
+ if( !QFile::exists(tmp) && !LUtils::isValidBinary(tmp) ){ qDebug() << "Invalid Settings:" << tmp; tmp.clear(); } //invalid settings
+ if(tmp.endsWith(".desktop")){
+ bool ok = false;
+ XDGDesktop file = LXDG::loadDesktopFile(tmp, ok);
+ if(!ok || file.filePath.isEmpty()){
+ //Might be a binary - just print out the raw "path"
+ ui->tool_default_filemanager->setText(tmp.section("/",-1));
+ ui->tool_default_filemanager->setIcon( LXDG::findIcon("application-x-executable","") );
+ }else{
+ ui->tool_default_filemanager->setText(file.name);
+ ui->tool_default_filemanager->setIcon(LXDG::findIcon(file.icon,"") );
+ }
+ }else if(tmp.isEmpty()){
+ ui->tool_default_filemanager->setText(tr("Click to Set"));
+ ui->tool_default_filemanager->setIcon( LXDG::findIcon("system-help","") );
+ }else{
+ //Might be a binary - just print out the raw "path"
+ ui->tool_default_filemanager->setText(tmp.section("/",-1));
+ ui->tool_default_filemanager->setIcon( LXDG::findIcon("application-x-executable","") );
+ }
+ // - Default Terminal
+ tmp =LXDG::findDefaultAppForMime("application/terminal"); //sessionsettings->value("default-terminal", "xterm").toString();
+ if( !QFile::exists(tmp) && !LUtils::isValidBinary(tmp) ){ qDebug() << "Invalid Settings:" << tmp; tmp.clear(); } //invalid settings
+ if(tmp.endsWith(".desktop")){
+ bool ok = false;
+ XDGDesktop file = LXDG::loadDesktopFile(tmp, ok);
+ if(!ok || file.filePath.isEmpty()){
+ //Might be a binary - just print out the raw "path"
+ ui->tool_default_terminal->setText(tmp.section("/",-1));
+ ui->tool_default_terminal->setIcon( LXDG::findIcon("application-x-executable","") );
+ }else{
+ ui->tool_default_terminal->setText(file.name);
+ ui->tool_default_terminal->setIcon(LXDG::findIcon(file.icon,"") );
+ }
+ }else if(tmp.isEmpty()){
+ ui->tool_default_terminal->setText(tr("Click to Set"));
+ ui->tool_default_terminal->setIcon( LXDG::findIcon("system-help","") );
+ }else{
+ //Might be a binary - just print out the raw "path"
+ ui->tool_default_terminal->setText(tmp.section("/",-1));
+ ui->tool_default_terminal->setIcon( LXDG::findIcon("application-x-executable","") );
+ }
+ // - Default Web Browser
+ tmp = LXDG::findDefaultAppForMime("x-scheme-handler/http"); //appsettings->value("default/webbrowser", "").toString();
+ if( !QFile::exists(tmp) && !LUtils::isValidBinary(tmp) ){ qDebug() << "Invalid Settings:" << tmp; tmp.clear(); } //invalid settings
+ if(tmp.endsWith(".desktop")){
+ bool ok = false;
+ XDGDesktop file = LXDG::loadDesktopFile(tmp, ok);
+ if(!ok || file.filePath.isEmpty()){
+ //Might be a binary - just print out the raw "path"
+ ui->tool_default_webbrowser->setText(tmp.section("/",-1));
+ ui->tool_default_webbrowser->setIcon( LXDG::findIcon("application-x-executable","") );
+ }else{
+ ui->tool_default_webbrowser->setText(file.name);
+ ui->tool_default_webbrowser->setIcon(LXDG::findIcon(file.icon,"") );
+ }
+ }else if(tmp.isEmpty()){
+ ui->tool_default_webbrowser->setText(tr("Click to Set"));
+ ui->tool_default_webbrowser->setIcon( LXDG::findIcon("system-help","") );
+ }else{
+ //Might be a binary - just print out the raw "path"
+ ui->tool_default_webbrowser->setText(tmp.section("/",-1));
+ ui->tool_default_webbrowser->setIcon( LXDG::findIcon("application-x-executable","") );
+ }
+ // - Default Email Client
+ tmp = LXDG::findDefaultAppForMime("application/email"); //appsettings->value("default/email", "").toString();
+ if( !QFile::exists(tmp) && !LUtils::isValidBinary(tmp) ){ qDebug() << "Invalid Settings:" << tmp; tmp.clear(); } //invalid settings
+ if(tmp.endsWith(".desktop")){
+ bool ok = false;
+ XDGDesktop file = LXDG::loadDesktopFile(tmp, ok);
+ if(!ok || file.filePath.isEmpty()){
+ //Might be a binary - just print out the raw "path"
+ ui->tool_default_email->setText(tmp.section("/",-1));
+ ui->tool_default_email->setIcon( LXDG::findIcon("application-x-executable","") );
+ }else{
+ ui->tool_default_email->setText(file.name);
+ ui->tool_default_email->setIcon(LXDG::findIcon(file.icon,"") );
+ }
+ }else if(tmp.isEmpty()){
+ ui->tool_default_email->setText(tr("Click to Set"));
+ ui->tool_default_email->setIcon( LXDG::findIcon("system-help","") );
+ }else{
+ //Might be a binary - just print out the raw "path"
+ ui->tool_default_email->setText(tmp.section("/",-1));
+ ui->tool_default_email->setIcon( LXDG::findIcon("application-x-executable","") );
+ }
+
+ //Now load the XDG mime defaults
+ ui->tree_defaults->clear();
+ QStringList defMimeList = LXDG::listFileMimeDefaults();
+ //qDebug() << "Mime List:\n" << defMimeList.join("\n");
+ defMimeList.sort(); //sort by group/mime
+ //Now fill the tree by group/mime
+ QTreeWidgetItem *group = new QTreeWidgetItem(0); //nothing at the moment
+ QString ccat;
+ for(int i=0; i<defMimeList.length(); i++){
+ //Get the info from this entry
+ QString mime = defMimeList[i].section("::::",0,0);
+ QString cat = mime.section("/",0,0);
+ QString extlist = defMimeList[i].section("::::",1,1);
+ QString def = defMimeList[i].section("::::",2,2);
+ QString comment = defMimeList[i].section("::::",3,50);
+ //Now check if this is a new category
+ if(ccat!=cat){
+ //New group
+ group = new QTreeWidgetItem(0);
+ group->setText(0, cat); //add translations for known/common groups later
+ ui->tree_defaults->addTopLevelItem(group);
+ ccat = cat;
+ }
+ //Now create the entry
+ QTreeWidgetItem *it = new QTreeWidgetItem();
+ it->setWhatsThis(0,mime); // full mimetype
+ it->setText(0, QString(tr("%1 (%2)")).arg(mime.section("/",-1), extlist) );
+ it->setText(2,comment);
+ it->setToolTip(0, comment); it->setToolTip(1,comment);
+ //Now load the default (if there is one)
+ it->setWhatsThis(1,def); //save for later
+ if(def.endsWith(".desktop")){
+ bool ok = false;
+ XDGDesktop file = LXDG::loadDesktopFile(def, ok);
+ if(!ok || file.filePath.isEmpty()){
+ //Might be a binary - just print out the raw "path"
+ it->setText(1,def.section("/",-1));
+ it->setIcon(1, LXDG::findIcon("application-x-executable","") );
+ }else{
+ it->setText(1, file.name);
+ it->setIcon(1, LXDG::findIcon(file.icon,"") );
+ }
+ }else if(!def.isEmpty()){
+ //Binary/Other default
+ it->setText(1, def.section("/",-1));
+ it->setIcon(1, LXDG::findIcon("application-x-executable","") );
+ }
+ group->addChild(it);
+ }
+
+ ui->tree_defaults->sortItems(0,Qt::AscendingOrder);
+
+ checkdefaulticons();
+}
+
+void page_defaultapps::updateIcons(){
+ ui->tool_defaults_clear->setIcon( LXDG::findIcon("edit-clear","") );
+ ui->tool_defaults_set->setIcon( LXDG::findIcon("system-run","") );
+ ui->tool_defaults_setbin->setIcon( LXDG::findIcon("application-x-executable","") );
+ ui->tabWidget_apps->setTabIcon( ui->tabWidget_apps->indexOf(ui->tab_auto), LXDG::findIcon("system-run", "") );
+ ui->tabWidget_apps->setTabIcon( ui->tabWidget_apps->indexOf(ui->tab_defaults), LXDG::findIcon("preferences-desktop-filetype-association", "") );
+}
+
+//=================
+// PRIVATE
+//=================
+XDGDesktop page_defaultapps::getSysApp(bool allowreset){
+ AppDialog dlg(this, LXDG::sortDesktopNames( LXDG::systemDesktopFiles() ) );
+ dlg.allowReset(allowreset);
+ dlg.exec();
+ XDGDesktop desk;
+ if(dlg.appreset && allowreset){
+ desk.filePath = "reset"; //special internal flag
+ }else{
+ desk = dlg.appselected;
+ }
+ return desk;
+}
+
+//=================
+// PRIVATE SLOTS
+//=================
+void page_defaultapps::changeDefaultBrowser(){
+ //Prompt for the new app
+ XDGDesktop desk = getSysApp(true);
+ if(desk.filePath.isEmpty()){ return; }//nothing selected
+ if(desk.filePath=="reset"){
+ desk.filePath="";
+ }
+ //save the new app setting and adjust the button appearance
+ //appsettings->setValue("default/webbrowser", desk.filePath);
+ LXDG::setDefaultAppForMime("x-scheme-handler/http", desk.filePath.section("/",-1));
+ LXDG::setDefaultAppForMime("x-scheme-handler/https", desk.filePath.section("/",-1));
+ QString tmp = desk.filePath;
+ if(tmp.endsWith(".desktop")){
+ bool ok = false;
+ XDGDesktop file = LXDG::loadDesktopFile(tmp, ok);
+ if(!ok || file.filePath.isEmpty()){
+ //Might be a binary - just print out the raw "path"
+ ui->tool_default_webbrowser->setText(tmp.section("/",-1));
+ ui->tool_default_webbrowser->setIcon( LXDG::findIcon("application-x-executable","") );
+ }else{
+ ui->tool_default_webbrowser->setText(desk.name);
+ ui->tool_default_webbrowser->setIcon(LXDG::findIcon(desk.icon,"") );
+ }
+ }else if(tmp.isEmpty()){
+ ui->tool_default_webbrowser->setText(tr("Click to Set"));
+ ui->tool_default_webbrowser->setIcon( LXDG::findIcon("system-help","") );
+ }else{
+ //Might be a binary - just print out the raw "path"
+ ui->tool_default_webbrowser->setText(tmp.section("/",-1));
+ ui->tool_default_webbrowser->setIcon( LXDG::findIcon("application-x-executable","") );
+ }
+}
+
+void page_defaultapps::changeDefaultEmail(){
+ //Prompt for the new app
+ XDGDesktop desk = getSysApp(true); //allow reset to default
+ if(desk.filePath.isEmpty()){ return; }//nothing selected
+ if(desk.filePath=="reset"){
+ desk.filePath="";
+ }
+ //save the new app setting and adjust the button appearance
+ LXDG::setDefaultAppForMime("application/email",desk.filePath);
+ // appsettings->setValue("default/email", desk.filePath);
+ QString tmp = desk.filePath;
+ if(tmp.endsWith(".desktop")){
+ bool ok = false;
+ XDGDesktop file = LXDG::loadDesktopFile(tmp, ok);
+ if(!ok || file.filePath.isEmpty()){
+ //Might be a binary - just print out the raw "path"
+ ui->tool_default_email->setText(tmp.section("/",-1));
+ ui->tool_default_email->setIcon( LXDG::findIcon("application-x-executable","") );
+ }else{
+ ui->tool_default_email->setText(file.name);
+ ui->tool_default_email->setIcon(LXDG::findIcon(file.icon,"") );
+ }
+ }else if(tmp.isEmpty()){
+ ui->tool_default_email->setText(tr("Click to Set"));
+ ui->tool_default_email->setIcon( LXDG::findIcon("system-help","") );
+ }else{
+ //Might be a binary - just print out the raw "path"
+ ui->tool_default_email->setText(tmp.section("/",-1));
+ ui->tool_default_email->setIcon( LXDG::findIcon("application-x-executable","") );
+ }
+}
+
+void page_defaultapps::changeDefaultFileManager(){
+ //Prompt for the new app
+ XDGDesktop desk = getSysApp(true);
+ if(desk.filePath.isEmpty()){ return; }//nothing selected
+ if(desk.filePath=="reset"){
+ desk.filePath="lumina-fm";
+ }
+ //save the new app setting and adjust the button appearance
+ //appsettings->setValue("default/directory", desk.filePath);
+ //sessionsettings->setValue("default-filemanager", desk.filePath);
+ LXDG::setDefaultAppForMime("inode/directory", desk.filePath.section("/",-1));
+ QString tmp = desk.filePath;
+ if(tmp.endsWith(".desktop")){
+ bool ok = false;
+ XDGDesktop file = LXDG::loadDesktopFile(tmp, ok);
+ if(!ok || file.filePath.isEmpty()){
+ //Might be a binary - just print out the raw "path"
+ ui->tool_default_filemanager->setText(tmp.section("/",-1));
+ ui->tool_default_filemanager->setIcon( LXDG::findIcon("application-x-executable","") );
+ }else{
+ ui->tool_default_filemanager->setText(file.name);
+ ui->tool_default_filemanager->setIcon(LXDG::findIcon(file.icon,"") );
+ }
+ }else if(tmp.isEmpty()){
+ ui->tool_default_filemanager->setText(tr("Click to Set"));
+ ui->tool_default_filemanager->setIcon( LXDG::findIcon("system-help","") );
+ }else{
+ //Might be a binary - just print out the raw "path"
+ ui->tool_default_filemanager->setText(tmp.section("/",-1));
+ ui->tool_default_filemanager->setIcon( LXDG::findIcon("application-x-executable","") );
+ }
+}
+
+void page_defaultapps::changeDefaultTerminal(){
+ //Prompt for the new app
+ XDGDesktop desk = getSysApp(true);
+ if(desk.filePath.isEmpty()){ return; }//nothing selected
+ if(desk.filePath=="reset"){
+ desk.filePath="xterm";
+ }
+ //save the new app setting and adjust the button appearance
+ LXDG::setDefaultAppForMime("application/terminal",desk.filePath);
+ //sessionsettings->setValue("default-terminal", desk.filePath);
+ QString tmp = desk.filePath;
+ if(tmp.endsWith(".desktop")){
+ bool ok = false;
+ XDGDesktop file = LXDG::loadDesktopFile(tmp, ok);
+ if(!ok || file.filePath.isEmpty()){
+ //Might be a binary - just print out the raw "path"
+ ui->tool_default_terminal->setText(tmp.section("/",-1));
+ ui->tool_default_terminal->setIcon( LXDG::findIcon("application-x-executable","") );
+ }else{
+ ui->tool_default_terminal->setText(file.name);
+ ui->tool_default_terminal->setIcon(LXDG::findIcon(file.icon,"") );
+ }
+ }else if(tmp.isEmpty()){
+ ui->tool_default_terminal->setText(tr("Click to Set"));
+ ui->tool_default_terminal->setIcon( LXDG::findIcon("system-help","") );
+ }else{
+ //Might be a binary - just print out the raw "path"
+ ui->tool_default_terminal->setText(tmp.section("/",-1));
+ ui->tool_default_terminal->setIcon( LXDG::findIcon("application-x-executable","") );
+ }
+}
+
+void page_defaultapps::cleardefaultitem(){
+ QTreeWidgetItem *it = ui->tree_defaults->currentItem();
+ if(it==0){ return; } //no item selected
+ QList<QTreeWidgetItem*> list;
+ for(int i=0; i<it->childCount(); i++){
+ list << it->child(i);
+ }
+ if(list.isEmpty()){ list << it; } //just do the current item
+ //Now clear the items
+ for(int i=0; i<list.length(); i++){
+ //Clear it in the back end
+ LXDG::setDefaultAppForMime(list[i]->whatsThis(0), "");
+ //Now clear it in the UI
+ list[i]->setWhatsThis(1,""); //clear the app path
+ list[i]->setIcon(1,QIcon()); //clear the icon
+ list[i]->setText(1,""); //clear the name
+ }
+
+}
+
+void page_defaultapps::setdefaultitem(){
+ QTreeWidgetItem *it = ui->tree_defaults->currentItem();
+ if(it==0){ return; } //no item selected
+ QList<QTreeWidgetItem*> list;
+ for(int i=0; i<it->childCount(); i++){
+ list << it->child(i);
+ }
+ if(list.isEmpty()){ list << it; } //just do the current item
+ //Prompt for which application to use
+ XDGDesktop desk = getSysApp(false); //no "reset" option
+ if(desk.filePath.isEmpty()){ return; }//nothing selected
+ //Now set the items
+ for(int i=0; i<list.length(); i++){
+ //Set it in the back end
+ LXDG::setDefaultAppForMime(list[i]->whatsThis(0), desk.filePath);
+ //Set it in the UI
+ list[i]->setWhatsThis(1,desk.filePath); //app path
+ list[i]->setIcon(1,LXDG::findIcon(desk.icon,"")); //reset the icon
+ list[i]->setText(1,desk.name); //reset the name
+ }
+
+}
+
+void page_defaultapps::setdefaultbinary(){
+ QTreeWidgetItem *it = ui->tree_defaults->currentItem();
+ if(it==0){ return; } //no item selected
+ QList<QTreeWidgetItem*> list;
+ for(int i=0; i<it->childCount(); i++){
+ list << it->child(i);
+ }
+ if(list.isEmpty()){ list << it; } //just do the current item
+ //Prompt for which binary to use
+ QFileDialog dlg(this);
+ //dlg.setFilter(QDir::Executable | QDir::Files); //Does not work! Filters executable files as well as breaks browsing capabilities
+ dlg.setFileMode(QFileDialog::ExistingFile);
+ dlg.setDirectory( LOS::AppPrefix()+"bin" );
+ dlg.setWindowTitle(tr("Select Binary"));
+ if( !dlg.exec() || dlg.selectedFiles().isEmpty() ){
+ return; //cancelled
+ }
+ QString path = dlg.selectedFiles().first();
+ //Make sure it is executable
+ if( !QFileInfo(path).isExecutable()){
+ QMessageBox::warning(this, tr("Invalid Binary"), tr("The selected binary is not executable!"));
+ return;
+ }
+ //Now set the items
+ for(int i=0; i<list.length(); i++){
+ //Set it in the back end
+ LXDG::setDefaultAppForMime(list[i]->whatsThis(0), path);
+ //Set it in the UI
+ list[i]->setWhatsThis(1,path); //app path
+ list[i]->setIcon(1,LXDG::findIcon("application-x-executable","")); //clear the icon
+ list[i]->setText(1,path.section("/",-1)); //clear the name
+ }
+}
+
+void page_defaultapps::checkdefaulticons(){
+ QTreeWidgetItem *it = ui->tree_defaults->currentItem();
+ ui->tool_defaults_set->setEnabled(it!=0);
+ ui->tool_defaults_clear->setEnabled(it!=0);
+ ui->tool_defaults_setbin->setEnabled(it!=0);
+}
diff --git a/src-qt5/core-utils/lumina-config/pages/page_defaultapps.h b/src-qt5/core-utils/lumina-config/pages/page_defaultapps.h
new file mode 100644
index 00000000..afe99d4b
--- /dev/null
+++ b/src-qt5/core-utils/lumina-config/pages/page_defaultapps.h
@@ -0,0 +1,45 @@
+//===========================================
+// Lumina Desktop Source Code
+// Copyright (c) 2016, Ken Moore
+// Available under the 3-clause BSD license
+// See the LICENSE file for full details
+//===========================================
+#ifndef _LUMINA_CONFIG_PAGE_DEFAULTAPPS_H
+#define _LUMINA_CONFIG_PAGE_DEFAULTAPPS_H
+#include "../globals.h"
+#include "PageWidget.h"
+
+namespace Ui{
+ class page_defaultapps;
+};
+
+class page_defaultapps : public PageWidget{
+ Q_OBJECT
+public:
+ page_defaultapps(QWidget *parent);
+ ~page_defaultapps();
+
+public slots:
+ void SaveSettings();
+ void LoadSettings(int screennum);
+ void updateIcons();
+
+private:
+ Ui::page_defaultapps *ui;
+
+ XDGDesktop getSysApp(bool allowreset);
+
+private slots:
+ //Simple defaults tab
+ void changeDefaultBrowser();
+ void changeDefaultEmail();
+ void changeDefaultFileManager();
+ void changeDefaultTerminal();
+ //Advanced defaults tab
+ void cleardefaultitem();
+ void setdefaultitem();
+ void setdefaultbinary();
+ void checkdefaulticons();
+
+};
+#endif
diff --git a/src-qt5/core-utils/lumina-config/pages/page_defaultapps.ui b/src-qt5/core-utils/lumina-config/pages/page_defaultapps.ui
index 16e65bdf..ef72c4f1 100644
--- a/src-qt5/core-utils/lumina-config/pages/page_defaultapps.ui
+++ b/src-qt5/core-utils/lumina-config/pages/page_defaultapps.ui
@@ -15,25 +15,28 @@
</property>
<layout class="QVBoxLayout" name="verticalLayout">
<property name="leftMargin">
- <number>0</number>
+ <number>6</number>
</property>
<property name="topMargin">
- <number>0</number>
+ <number>6</number>
</property>
<property name="rightMargin">
- <number>0</number>
+ <number>6</number>
</property>
<property name="bottomMargin">
- <number>0</number>
+ <number>6</number>
</property>
<item>
<widget class="QTabWidget" name="tabWidget_apps">
<property name="currentIndex">
- <number>0</number>
+ <number>1</number>
+ </property>
+ <property name="movable">
+ <bool>false</bool>
</property>
<widget class="QWidget" name="tab_defaults">
<attribute name="title">
- <string>File Defaults</string>
+ <string>Advanced</string>
</attribute>
<layout class="QVBoxLayout" name="verticalLayout_6">
<property name="leftMargin">
@@ -160,9 +163,9 @@
</item>
</layout>
</widget>
- <widget class="QWidget" name="tab_2">
+ <widget class="QWidget" name="tab_auto">
<attribute name="title">
- <string>Common Applications</string>
+ <string>Basic Settings</string>
</attribute>
<layout class="QVBoxLayout" name="verticalLayout_7">
<item>
diff --git a/src-qt5/core-utils/lumina-config/pages/page_fluxbox_keys.cpp b/src-qt5/core-utils/lumina-config/pages/page_fluxbox_keys.cpp
new file mode 100644
index 00000000..ed382bb8
--- /dev/null
+++ b/src-qt5/core-utils/lumina-config/pages/page_fluxbox_keys.cpp
@@ -0,0 +1,200 @@
+//===========================================
+// Lumina Desktop Source Code
+// Copyright (c) 2016, Ken Moore
+// Available under the 3-clause BSD license
+// See the LICENSE file for full details
+//===========================================
+#include "page_fluxbox_keys.h"
+#include "ui_page_fluxbox_keys.h"
+#include "getPage.h"
+
+//==========
+// PUBLIC
+//==========
+page_fluxbox_keys::page_fluxbox_keys(QWidget *parent) : PageWidget(parent), ui(new Ui::page_fluxbox_keys()){
+ ui->setupUi(this);
+
+ connect(ui->tool_shortcut_clear, SIGNAL(clicked()), this, SLOT(clearKeyBinding()) );
+ connect(ui->tool_shortcut_set, SIGNAL(clicked()), this, SLOT(applyKeyBinding()) );
+ connect(ui->tree_shortcut, SIGNAL(itemSelectionChanged()), this, SLOT(updateKeyConfig()) );
+ updateIcons();
+}
+
+page_fluxbox_keys::~page_fluxbox_keys(){
+
+}
+
+//================
+// PUBLIC SLOTS
+//================
+void page_fluxbox_keys::SaveSettings(){
+QStringList current;
+ for(int i=0; i<ui->tree_shortcut->topLevelItemCount(); i++){
+ QTreeWidgetItem *it = ui->tree_shortcut->topLevelItem(i);
+ current << it->whatsThis(1)+" :"+it->whatsThis(0); //Full Fluxbox command line
+ }
+
+ QStringList info = readFile(QString(getenv("XDG_CONFIG_HOME"))+"/lumina-desktop/fluxbox-keys");
+ for(int i=0; i<info.length(); i++){
+ if(info[i].isEmpty() || info[i].startsWith("#") || info[i].startsWith("!")){ continue; }
+ if(current.filter(info[i].section(":",1,-1)).length() > 0){
+ //Found Item to be replaced/removed
+ QString it = current.filter(info[i].section(":",1,10)).join("\n").section("\n",0,0); //ensure only the first match
+ if(it.section(" :",0,0).isEmpty()){ info.removeAt(i); i--; } //remove this entry
+ else{ info[i] = it; } //replace this entry
+ current.removeAll(it); //already taken care of - remove it from the current list
+ }
+ }
+ //Now save the new contents
+ for(int i=0; i<current.length(); i++){
+ if(!current[i].section(" :",0,0).isEmpty()){ info << current[i]; }
+ }
+ bool ok = overwriteFile(QString(getenv("XDG_CONFIG_HOME"))+"/lumina-desktop/fluxbox-keys", info);
+ if(!ok){ qDebug() << "Warning: Could not save fluxbox-keys"; }
+ emit HasPendingChanges(false);
+}
+
+void page_fluxbox_keys::LoadSettings(int){
+ emit HasPendingChanges(false);
+ emit ChangePageTitle( tr("Keyboard Shortcuts") );
+
+ui->tree_shortcut->clear();
+ QStringList info = readFile(QString(getenv("XDG_CONFIG_HOME"))+"/lumina-desktop/fluxbox-keys");
+ //First take care of the special Lumina options
+ QStringList special;
+ special << "Exec lumina-open -volumeup::::"+tr("Audio Volume Up") \
+ << "Exec lumina-open -volumedown::::"+tr("Audio Volume Down") \
+ << "Exec lumina-open -brightnessup::::"+tr("Screen Brightness Up") \
+ << "Exec lumina-open -brightnessdown::::"+tr("Screen Brightness Down") \
+ << "Exec lumina-screenshot::::"+tr("Take Screenshot") \
+ << "Exec xscreensaver-command -lock::::"+tr("Lock Screen");
+ for(int i=0; i<special.length(); i++){
+ QString spec = info.filter(":"+special[i].section("::::",0,0)).join("").simplified();
+ QTreeWidgetItem *it = new QTreeWidgetItem();
+ it->setText(0, special[i].section("::::",1,1));
+ it->setWhatsThis(0, special[i].section("::::",0,0));
+ if(!spec.isEmpty()){
+ info.removeAll(spec); //this line has been dealt with - remove it
+ it->setText(1, fluxToDispKeys(spec.section(":",0,0)) ); //need to make this easier to read later
+ it->setWhatsThis(1, spec.section(":",0,0) );
+ }
+ ui->tree_shortcut->addTopLevelItem(it);
+ }
+ //Now add support for all the other fluxbox shortcuts
+ for(int i=0; i<info.length(); i++){
+ //skip empty/invalid lines, as well as non-global shortcuts (OnMenu, OnWindow, etc..)
+ if(info[i].isEmpty() || info[i].startsWith("#") || info[i].startsWith("!") || info[i].startsWith("On")){ continue; }
+ QString exec = info[i].section(":",1,100);
+ QString showexec = exec;
+ if(showexec.startsWith("If {Matches")){ showexec = showexec.section("{",2,2).section("}",0,0); }
+ if(showexec.startsWith("Exec ")){ showexec.replace("Exec ","Run "); }
+ else{ showexec = showexec.section("(",0,0).section("{",0,0); } //built-in command - remove the extra commands on some of them
+ QTreeWidgetItem *it = new QTreeWidgetItem();
+ it->setText(0, showexec.simplified() );
+ it->setWhatsThis(0, exec);
+ it->setText(1, fluxToDispKeys(info[i].section(":",0,0)) ); //need to make this easier to read later
+ it->setWhatsThis(1, info[i].section(":",0,0) );
+ ui->tree_shortcut->addTopLevelItem(it);
+ }
+
+}
+
+void page_fluxbox_keys::updateIcons(){
+ ui->tool_shortcut_set->setIcon( LXDG::findIcon("input-keyboard","") );
+ ui->tool_shortcut_clear->setIcon( LXDG::findIcon("edit-clear","") );
+}
+
+//=================
+// PRIVATE
+//=================
+//Convert to/from fluxbox key codes
+QString page_fluxbox_keys::dispToFluxKeys(QString in){
+ in.replace("Ctrl", "Control");
+ in.replace("Shift", "Shift");
+ in.replace("Alt", "Mod1");
+ in.replace("Meta", "Mod4");
+ in.replace("PgUp", "Prior");
+ in.replace("PgDown", "Next");
+ in.replace("Del", "Delete");
+ in.replace("Backspace", "BackSpace");
+ in.replace("Ins","Insert");
+ in.replace("Volume Up", "XF86AudioRaiseVolume"); //multimedia key
+ in.replace("Volume Down", "XF86AudioLowerVolume"); //multimedia key
+ in.replace("+"," ");
+ return in;
+}
+
+QString page_fluxbox_keys::fluxToDispKeys(QString in){
+ in.replace("Control", "Ctrl");
+ in.replace("Shift", "Shift");
+ in.replace("Mod1", "Alt");
+ in.replace("Mod4", "Meta");
+ in.replace("Prior", "PgUp");
+ in.replace("Next", "PgDown");
+ //in.replace("Delete", "Del"); //the "Delete" is better looking
+ in.replace("BackSpace", "Backspace");
+ //in.replace("Insert", "Ins"); //the "Insert" is better looking
+ in.replace("XF86AudioRaiseVolume", "Volume Up"); //multimedia key
+ in.replace("XF86AudioLowerVolume", "Volume Down"); //multimedia key
+ return in;
+}
+
+//Read/overwrite a text file
+QStringList page_fluxbox_keys::readFile(QString path){
+ QStringList out;
+ QFile file(path);
+ if(file.open(QIODevice::ReadOnly | QIODevice::Text)){
+ QTextStream txt(&file);
+ while(!txt.atEnd()){
+ out << txt.readLine();
+ }
+ file.close();
+ }
+ return out;
+}
+
+bool page_fluxbox_keys::overwriteFile(QString path, QStringList contents){
+ QFile file(path);
+ if(file.open(QIODevice::WriteOnly | QIODevice::Text | QIODevice::Truncate)){
+ QTextStream txt(&file);
+ for(int i=0; i<contents.length(); i++){
+ txt << contents[i]+"\n";
+ }
+ file.close();
+ return true;
+ }
+ return false;
+}
+
+//=================
+// PRIVATE SLOTS
+//=================
+void page_fluxbox_keys::clearKeyBinding(){
+ if(ui->tree_shortcut->currentItem()==0){ return; }
+ ui->tree_shortcut->currentItem()->setText(1,"");
+ ui->tree_shortcut->currentItem()->setWhatsThis(1,"");
+ settingChanged();
+}
+
+void page_fluxbox_keys::applyKeyBinding(){
+ QKeySequence seq = ui->keyEdit_shortcut->keySequence();
+ qDebug() << "New Key Sequence:" << seq.toString(QKeySequence::NativeText) << seq.toString(QKeySequence::PortableText);
+ if(seq.isEmpty()){
+ //Verify removal of the action first
+
+ //Now remove the action
+ delete ui->tree_shortcut->currentItem();
+ }else{
+ QTreeWidgetItem *it = ui->tree_shortcut->currentItem();
+ it->setText(1,seq.toString(QKeySequence::NativeText));
+ it->setWhatsThis(1,dispToFluxKeys(seq.toString(QKeySequence::PortableText)));
+ qDebug() << " - Flux Sequence:" << it->whatsThis(1);
+ }
+ ui->keyEdit_shortcut->clear();
+ settingChanged();
+}
+
+void page_fluxbox_keys::updateKeyConfig(){
+ ui->group_shortcut_modify->setEnabled(ui->tree_shortcut->currentItem()!=0);
+ ui->keyEdit_shortcut->clear();
+}
diff --git a/src-qt5/core-utils/lumina-config/pages/page_fluxbox_keys.h b/src-qt5/core-utils/lumina-config/pages/page_fluxbox_keys.h
new file mode 100644
index 00000000..7fc143ff
--- /dev/null
+++ b/src-qt5/core-utils/lumina-config/pages/page_fluxbox_keys.h
@@ -0,0 +1,44 @@
+//===========================================
+// Lumina Desktop Source Code
+// Copyright (c) 2016, Ken Moore
+// Available under the 3-clause BSD license
+// See the LICENSE file for full details
+//===========================================
+#ifndef _LUMINA_CONFIG_PAGE_FLUXBOX_KEYS_H
+#define _LUMINA_CONFIG_PAGE_FLUXBOX_KEYS_H
+#include "../globals.h"
+#include "PageWidget.h"
+
+namespace Ui{
+ class page_fluxbox_keys;
+};
+
+class page_fluxbox_keys : public PageWidget{
+ Q_OBJECT
+public:
+ page_fluxbox_keys(QWidget *parent);
+ ~page_fluxbox_keys();
+
+public slots:
+ void SaveSettings();
+ void LoadSettings(int screennum);
+ void updateIcons();
+
+private:
+ Ui::page_fluxbox_keys *ui;
+
+ //Convert to/from fluxbox keyboard shortcuts
+ QString dispToFluxKeys(QString);
+ QString fluxToDispKeys(QString);
+
+ //Read/overwrite a text file
+ QStringList readFile(QString path);
+ bool overwriteFile(QString path, QStringList contents);
+
+private slots:
+ void clearKeyBinding();
+ void applyKeyBinding();
+ void updateKeyConfig();
+
+};
+#endif
diff --git a/src-qt5/core-utils/lumina-config/pages/page_fluxbox_keys.ui b/src-qt5/core-utils/lumina-config/pages/page_fluxbox_keys.ui
index 0c950672..2ded896e 100644
--- a/src-qt5/core-utils/lumina-config/pages/page_fluxbox_keys.ui
+++ b/src-qt5/core-utils/lumina-config/pages/page_fluxbox_keys.ui
@@ -1,7 +1,7 @@
<?xml version="1.0" encoding="UTF-8"?>
<ui version="4.0">
- <class>Form</class>
- <widget class="QWidget" name="Form">
+ <class>page_fluxbox_keys</class>
+ <widget class="QWidget" name="page_fluxbox_keys">
<property name="geometry">
<rect>
<x>0</x>
@@ -15,16 +15,16 @@
</property>
<layout class="QVBoxLayout" name="verticalLayout">
<property name="leftMargin">
- <number>0</number>
+ <number>6</number>
</property>
<property name="topMargin">
- <number>0</number>
+ <number>6</number>
</property>
<property name="rightMargin">
- <number>0</number>
+ <number>6</number>
</property>
<property name="bottomMargin">
- <number>0</number>
+ <number>6</number>
</property>
<item>
<widget class="QTreeWidget" name="tree_shortcut">
diff --git a/src-qt5/core-utils/lumina-config/pages/page_fluxbox_settings.cpp b/src-qt5/core-utils/lumina-config/pages/page_fluxbox_settings.cpp
new file mode 100644
index 00000000..8f075488
--- /dev/null
+++ b/src-qt5/core-utils/lumina-config/pages/page_fluxbox_settings.cpp
@@ -0,0 +1,170 @@
+//===========================================
+// Lumina Desktop Source Code
+// Copyright (c) 2016, Ken Moore
+// Available under the 3-clause BSD license
+// See the LICENSE file for full details
+//===========================================
+#include "page_fluxbox_settings.h"
+#include "ui_page_fluxbox_settings.h"
+#include "getPage.h"
+
+//==========
+// PUBLIC
+//==========
+page_fluxbox_settings::page_fluxbox_settings(QWidget *parent) : PageWidget(parent), ui(new Ui::page_fluxbox_settings()){
+ ui->setupUi(this);
+ loading= false;
+ connect(ui->combo_session_wfocus, SIGNAL(currentIndexChanged(int)), this, SLOT(settingChanged()) );
+ connect(ui->combo_session_wloc, SIGNAL(currentIndexChanged(int)), this, SLOT(settingChanged()) );
+ connect(ui->combo_session_wtheme, SIGNAL(currentIndexChanged(int)), this, SLOT(sessionthemechanged()) );
+ connect(ui->spin_session_wkspaces, SIGNAL(valueChanged(int)), this, SLOT(settingChanged()) );
+ updateIcons();
+}
+
+page_fluxbox_settings::~page_fluxbox_settings(){
+
+}
+
+//================
+// PUBLIC SLOTS
+//================
+void page_fluxbox_settings::SaveSettings(){
+ QStringList FB = readFile(QString(getenv("XDG_CONFIG_HOME"))+"/lumina-desktop/fluxbox-init");
+ // - window placement
+ int index = FB.indexOf( FB.filter("session.screen0.windowPlacement:").join("") );
+ QString line = "session.screen0.windowPlacement:\t"+ui->combo_session_wloc->itemData( ui->combo_session_wloc->currentIndex() ).toString();
+ if(index < 0){ FB << line; } //add line to the end of the file
+ else{ FB[index] = line; } //replace the current setting with the new one
+ // - window focus
+ index = FB.indexOf( FB.filter("session.screen0.focusModel:").join("") );
+ line = "session.screen0.focusModel:\t"+ui->combo_session_wfocus->itemData( ui->combo_session_wfocus->currentIndex() ).toString();
+ if(index < 0){ FB << line; } //add line to the end of the file
+ else{ FB[index] = line; } //replace the current setting with the new one
+ // - window theme
+ index = FB.indexOf( FB.filter("session.styleFile:").join("") );
+ line = "session.styleFile:\t"+ui->combo_session_wtheme->itemData( ui->combo_session_wtheme->currentIndex() ).toString();
+ if(index < 0){ FB << line; } //add line to the end of the file
+ else{ FB[index] = line; } //replace the current setting with the new one
+ // - workspace number
+ index = FB.indexOf( FB.filter("session.screen0.workspaces:").join("") );
+ line = "session.screen0.workspaces:\t"+QString::number(ui->spin_session_wkspaces->value());
+ if(index < 0){ FB << line; } //add line to the end of the file
+ else{ FB[index] = line; } //replace the current setting with the new one
+
+ //Save the fluxbox settings
+ bool ok = overwriteFile(QString(getenv("XDG_CONFIG_HOME"))+"/lumina-desktop/fluxbox-init", FB);
+ if(!ok){ qDebug() << "Warning: Could not save fluxbox-init"; }
+ emit HasPendingChanges(false);
+}
+
+void page_fluxbox_settings::LoadSettings(int){
+ emit HasPendingChanges(false);
+ emit ChangePageTitle( tr("Window Manager Settings") );
+ loading = true;
+ ui->combo_session_wfocus->clear();
+ ui->combo_session_wfocus->addItem( tr("Click To Focus"), "ClickToFocus");
+ ui->combo_session_wfocus->addItem( tr("Active Mouse Focus"), "MouseFocus");
+ ui->combo_session_wfocus->addItem( tr("Strict Mouse Focus"), "StrictMouseFocus");
+
+ ui->combo_session_wloc->clear();
+ ui->combo_session_wloc->addItem( tr("Align in a Row"), "RowSmartPlacement");
+ ui->combo_session_wloc->addItem( tr("Align in a Column"), "ColSmartPlacement");
+ ui->combo_session_wloc->addItem( tr("Cascade"), "CascadePlacement");
+ ui->combo_session_wloc->addItem( tr("Underneath Mouse"), "UnderMousePlacement");
+
+ ui->combo_session_wtheme->clear();
+ QStringList dirs; dirs << LOS::AppPrefix()+"share/fluxbox/styles" << QDir::homePath()+"/.fluxbox/styles";
+ QFileInfoList fbstyles;
+ for(int i=0; i<dirs.length(); i++){
+ QDir fbdir(dirs[i]);
+ fbstyles << fbdir.entryInfoList(QDir::Files | QDir::Dirs | QDir::NoDotAndDotDot, QDir::Name | QDir::IgnoreCase);
+ }
+ QString lastdir;
+ for(int i=0; i<fbstyles.length(); i++){
+ if(lastdir!=fbstyles[i].absolutePath()){
+ lastdir = fbstyles[i].absolutePath(); //save for checking later
+ if(ui->combo_session_wtheme->count()>0){ ui->combo_session_wtheme->insertSeparator(ui->combo_session_wtheme->count()); }
+ }
+ ui->combo_session_wtheme->addItem(fbstyles[i].fileName(), fbstyles[i].absoluteFilePath());
+ }
+
+ QStringList FB = readFile(QString(getenv("XDG_CONFIG_HOME"))+"/lumina-desktop/fluxbox-init");
+ QString val;
+ //Do the window placement
+ val = FB.filter("session.screen0.windowPlacement:").join("").section(":",1,1).simplified();
+ //qDebug() << "Window Placement:" << val;
+ int index = ui->combo_session_wloc->findData(val);
+ if(index<0){ index = 0;} //use the default
+ ui->combo_session_wloc->setCurrentIndex(index);
+
+ //Do the window focus
+ val = FB.filter("session.screen0.focusModel:").join("").section(":",1,1).simplified();
+ //qDebug() << "Window Focus:" << val;
+ index = ui->combo_session_wfocus->findData(val);
+ if(index<0){ index = 0;} //use the default
+ ui->combo_session_wfocus->setCurrentIndex(index);
+
+ //Do the window theme
+ val = FB.filter("session.styleFile:").join("").section(":",1,1).simplified();
+ //qDebug() << "Window Theme:" << val;
+ index = ui->combo_session_wtheme->findData(val);
+ if(index<0){ index = 0;} //use the default
+ ui->combo_session_wtheme->setCurrentIndex(index);
+
+ //Now the number of workspaces
+ val = FB.filter("session.screen0.workspaces:").join("").section(":",1,1).simplified();
+ //qDebug() << "Number of Workspaces:" << val;
+ if(!val.isEmpty()){ ui->spin_session_wkspaces->setValue(val.toInt()); }
+
+ QApplication::processEvents();
+ loading = false;
+}
+
+void page_fluxbox_settings::updateIcons(){
+
+}
+
+//=================
+// PRIVATE
+//=================
+//Read/overwrite a text file
+QStringList page_fluxbox_settings::readFile(QString path){
+ QStringList out;
+ QFile file(path);
+ if(file.open(QIODevice::ReadOnly | QIODevice::Text)){
+ QTextStream txt(&file);
+ while(!txt.atEnd()){
+ out << txt.readLine();
+ }
+ file.close();
+ }
+ return out;
+}
+
+bool page_fluxbox_settings::overwriteFile(QString path, QStringList contents){
+ QFile file(path);
+ if(file.open(QIODevice::WriteOnly | QIODevice::Text | QIODevice::Truncate)){
+ QTextStream txt(&file);
+ for(int i=0; i<contents.length(); i++){
+ txt << contents[i]+"\n";
+ }
+ file.close();
+ return true;
+ }
+ return false;
+}
+
+//=================
+// PRIVATE SLOTS
+//=================
+void page_fluxbox_settings::sessionthemechanged(){
+ //Update the Fluxbox Theme preview
+ QString previewfile = ui->combo_session_wtheme->itemData( ui->combo_session_wtheme->currentIndex() ).toString();
+ previewfile.append( (previewfile.endsWith("/") ? "preview.jpg": "/preview.jpg") );
+ if(QFile::exists(previewfile)){
+ ui->label_session_wpreview->setPixmap(QPixmap(previewfile));
+ }else{
+ ui->label_session_wpreview->setText(tr("No Preview Available"));
+ }
+ settingChanged();
+}
diff --git a/src-qt5/core-utils/lumina-config/pages/page_fluxbox_settings.h b/src-qt5/core-utils/lumina-config/pages/page_fluxbox_settings.h
new file mode 100644
index 00000000..b78b204b
--- /dev/null
+++ b/src-qt5/core-utils/lumina-config/pages/page_fluxbox_settings.h
@@ -0,0 +1,43 @@
+//===========================================
+// Lumina Desktop Source Code
+// Copyright (c) 2016, Ken Moore
+// Available under the 3-clause BSD license
+// See the LICENSE file for full details
+//===========================================
+#ifndef _LUMINA_CONFIG_PAGE_FLUXBOX_SETTINGS_H
+#define _LUMINA_CONFIG_PAGE_FLUXBOX_SETTINGS_H
+#include "../globals.h"
+#include "PageWidget.h"
+
+namespace Ui{
+ class page_fluxbox_settings;
+};
+
+class page_fluxbox_settings : public PageWidget{
+ Q_OBJECT
+public:
+ page_fluxbox_settings(QWidget *parent);
+ ~page_fluxbox_settings();
+
+public slots:
+ void SaveSettings();
+ void LoadSettings(int screennum);
+ void updateIcons();
+
+private:
+ Ui::page_fluxbox_settings *ui;
+ bool loading;
+
+ //Read/overwrite a text file
+ QStringList readFile(QString path);
+ bool overwriteFile(QString path, QStringList contents);
+
+private slots:
+ //Simplification function for widget connections
+ void settingChanged(){
+ if(!loading){ emit HasPendingChanges(true); }
+ }
+
+ void sessionthemechanged();
+};
+#endif
diff --git a/src-qt5/core-utils/lumina-config/pages/page_fluxbox_settings.ui b/src-qt5/core-utils/lumina-config/pages/page_fluxbox_settings.ui
index e15f1dd9..677eac62 100644
--- a/src-qt5/core-utils/lumina-config/pages/page_fluxbox_settings.ui
+++ b/src-qt5/core-utils/lumina-config/pages/page_fluxbox_settings.ui
@@ -14,6 +14,18 @@
<string>Form</string>
</property>
<layout class="QVBoxLayout" name="verticalLayout">
+ <property name="leftMargin">
+ <number>6</number>
+ </property>
+ <property name="topMargin">
+ <number>6</number>
+ </property>
+ <property name="rightMargin">
+ <number>6</number>
+ </property>
+ <property name="bottomMargin">
+ <number>6</number>
+ </property>
<item>
<layout class="QFormLayout" name="formLayout_4">
<item row="0" column="0">
@@ -87,8 +99,8 @@
<rect>
<x>0</x>
<y>0</y>
- <width>356</width>
- <height>109</height>
+ <width>362</width>
+ <height>115</height>
</rect>
</property>
<property name="sizePolicy">
diff --git a/src-qt5/core-utils/lumina-config/pages/page_interface_desktop.cpp b/src-qt5/core-utils/lumina-config/pages/page_interface_desktop.cpp
new file mode 100644
index 00000000..9c319780
--- /dev/null
+++ b/src-qt5/core-utils/lumina-config/pages/page_interface_desktop.cpp
@@ -0,0 +1,152 @@
+//===========================================
+// Lumina Desktop Source Code
+// Copyright (c) 2016, Ken Moore
+// Available under the 3-clause BSD license
+// See the LICENSE file for full details
+//===========================================
+#include "page_interface_desktop.h"
+#include "ui_page_interface_desktop.h"
+#include "getPage.h"
+#include "../GetPluginDialog.h"
+#include "../AppDialog.h"
+
+//==========
+// PUBLIC
+//==========
+page_interface_desktop::page_interface_desktop(QWidget *parent) : PageWidget(parent), ui(new Ui::page_interface_desktop()){
+ ui->setupUi(this);
+ PINFO = new LPlugins();
+ connect(ui->tool_desktop_addplugin, SIGNAL(clicked()), this, SLOT(deskplugadded()) );
+ connect(ui->tool_desktop_rmplugin, SIGNAL(clicked()), this, SLOT(deskplugremoved()) );
+ connect(ui->check_desktop_autolaunchers, SIGNAL(clicked()), this, SLOT(settingChanged()) );
+ updateIcons();
+}
+
+page_interface_desktop::~page_interface_desktop(){
+ delete PINFO;
+}
+
+//================
+// PUBLIC SLOTS
+//================
+void page_interface_desktop::SaveSettings(){
+ QSettings settings("lumina-desktop","desktopsettings");
+ QString DPrefix = "desktop-"+QString::number(cscreen)+"/";
+
+ QStringList plugs;
+ for(int i=0; i<ui->list_desktop_plugins->count(); i++){
+ plugs << ui->list_desktop_plugins->item(i)->whatsThis();
+ }
+ if(settings.value(DPrefix+"pluginlist",QStringList()).toStringList() != plugs){
+ settings.setValue(DPrefix+"pluginlist", plugs);
+ }
+ //The plugin ID's will be changed to unique ID's by the desktop - reload in a moment
+ emit HasPendingChanges(false);
+ QTimer::singleShot(1000, this, SLOT(LoadSettings()) );
+}
+
+void page_interface_desktop::LoadSettings(int screennum){
+ if(screennum>=0){
+ cscreen = screennum;
+ }
+ emit HasPendingChanges(false);
+ emit ChangePageTitle( tr("Desktop Settings") );
+ QSettings settings("lumina-desktop","desktopsettings");
+ QString DPrefix = "desktop-"+QString::number(cscreen)+"/";
+
+ QStringList dplugs = settings.value(DPrefix+"pluginlist",QStringList()).toStringList();
+ ui->list_desktop_plugins->clear();
+ for(int i=0; i<dplugs.length(); i++){
+ QListWidgetItem* it = new QListWidgetItem();
+ it->setWhatsThis(dplugs[i]); //save the full thing instantly
+ //Now load the rest of the info about the plugin
+ QString num;
+ if(dplugs[i].contains("---")){
+ num = dplugs[i].section("---",1,1).section(".",1,1).simplified(); //Skip the screen number
+ if(num=="1"){ num.clear(); } //don't bother showing the number
+ dplugs[i] = dplugs[i].section("---",0,0);
+ }
+ if(dplugs[i].startsWith("applauncher::")){
+ bool ok = false;
+ XDGDesktop app = LXDG::loadDesktopFile(dplugs[i].section("::",1,50), ok);
+ if(!ok){ continue; } //invalid for some reason
+ //Now fill the item with the necessary info
+ it->setText(app.name);
+ it->setIcon(LXDG::findIcon(app.icon,"") );
+ it->setToolTip(app.comment);
+ }else{
+ //Load the info for this plugin
+ LPI info = PINFO->desktopPluginInfo(dplugs[i]);
+ if( info.ID.isEmpty() ){ continue; } //invalid plugin for some reason
+ it->setText(info.name);
+ it->setToolTip(info.description);
+ it->setIcon( LXDG::findIcon(info.icon,"") );
+ }
+ if(!num.isEmpty()){ it->setText( it->text()+" ("+num+")"); } //append the number
+ ui->list_desktop_plugins->addItem(it);
+ }
+}
+
+void page_interface_desktop::updateIcons(){
+ ui->tool_desktop_addplugin->setIcon( LXDG::findIcon("list-add","") );
+ ui->tool_desktop_rmplugin->setIcon( LXDG::findIcon("list-remove","") );
+}
+
+//=================
+// PRIVATE
+//=================
+XDGDesktop page_interface_desktop::getSysApp(bool allowreset){
+ AppDialog dlg(this, LXDG::sortDesktopNames( LXDG::systemDesktopFiles() ) );
+ dlg.allowReset(allowreset);
+ dlg.exec();
+ XDGDesktop desk;
+ if(dlg.appreset && allowreset){
+ desk.filePath = "reset"; //special internal flag
+ }else{
+ desk = dlg.appselected;
+ }
+ return desk;
+}
+
+//=================
+// PRIVATE SLOTS
+//=================
+void page_interface_desktop::deskplugadded(){
+ GetPluginDialog dlg(this);
+ dlg.LoadPlugins("desktop", PINFO);
+ dlg.exec();
+ if( !dlg.selected ){ return; } //cancelled
+ QString newplug = dlg.plugID;
+ QListWidgetItem *it = new QListWidgetItem();
+ if(newplug=="applauncher"){
+ //Prompt for the application to add
+ XDGDesktop app = getSysApp();
+ if(app.filePath.isEmpty()){ return; } //cancelled
+ newplug.append("::"+app.filePath);
+ //Now fill the item with the necessary info
+ it->setWhatsThis(newplug);
+ it->setText(app.name);
+ it->setIcon(LXDG::findIcon(app.icon,"") );
+ it->setToolTip(app.comment);
+ }else{
+ //Load the info for this plugin
+ LPI info = PINFO->desktopPluginInfo(newplug);
+ if( info.ID.isEmpty() ){ return; } //invalid plugin for some reason (should never happen)
+ it->setWhatsThis(newplug);
+ it->setText(info.name);
+ it->setToolTip(info.description);
+ it->setIcon( LXDG::findIcon(info.icon,"") );
+ }
+ ui->list_desktop_plugins->addItem(it);
+ ui->list_desktop_plugins->scrollToItem(it);
+ settingChanged();
+}
+
+void page_interface_desktop::deskplugremoved(){
+ QList<QListWidgetItem*> sel = ui->list_desktop_plugins->selectedItems();
+ if(sel.isEmpty()){ return; } //nothing to do
+ for(int i=0; i<sel.length(); i++){
+ delete sel[i];
+ }
+ settingChanged();
+}
diff --git a/src-qt5/core-utils/lumina-config/pages/page_interface_desktop.h b/src-qt5/core-utils/lumina-config/pages/page_interface_desktop.h
new file mode 100644
index 00000000..e212182a
--- /dev/null
+++ b/src-qt5/core-utils/lumina-config/pages/page_interface_desktop.h
@@ -0,0 +1,42 @@
+//===========================================
+// Lumina Desktop Source Code
+// Copyright (c) 2016, Ken Moore
+// Available under the 3-clause BSD license
+// See the LICENSE file for full details
+//===========================================
+#ifndef _LUMINA_CONFIG_PAGE_INTERFACE_DESKTOP_H
+#define _LUMINA_CONFIG_PAGE_INTERFACE_DESKTOP_H
+#include "../globals.h"
+#include "PageWidget.h"
+#include "../LPlugins.h"
+
+namespace Ui{
+ class page_interface_desktop;
+};
+
+class page_interface_desktop : public PageWidget{
+ Q_OBJECT
+public:
+ page_interface_desktop(QWidget *parent);
+ ~page_interface_desktop();
+
+ bool needsScreenSelector(){ return true; }
+
+public slots:
+ void SaveSettings();
+ void LoadSettings(int screennum = -1);
+ void updateIcons();
+
+private:
+ Ui::page_interface_desktop *ui;
+ int cscreen; //current monitor/screen number
+ LPlugins *PINFO;
+
+ //Get an application on the system
+ XDGDesktop getSysApp(bool allowreset = false);
+
+private slots:
+ void deskplugadded();
+ void deskplugremoved();
+};
+#endif
diff --git a/src-qt5/core-utils/lumina-config/pages/page_interface_menu.cpp b/src-qt5/core-utils/lumina-config/pages/page_interface_menu.cpp
new file mode 100644
index 00000000..742c5728
--- /dev/null
+++ b/src-qt5/core-utils/lumina-config/pages/page_interface_menu.cpp
@@ -0,0 +1,164 @@
+//===========================================
+// Lumina Desktop Source Code
+// Copyright (c) 2016, Ken Moore
+// Available under the 3-clause BSD license
+// See the LICENSE file for full details
+//===========================================
+#include "page_interface_menu.h"
+#include "ui_page_interface_menu.h"
+#include "getPage.h"
+#include "../AppDialog.h"
+#include "../GetPluginDialog.h"
+
+//==========
+// PUBLIC
+//==========
+page_interface_menu::page_interface_menu(QWidget *parent) : PageWidget(parent), ui(new Ui::page_interface_menu()){
+ ui->setupUi(this);
+ PINFO = new LPlugins();
+ connect(ui->tool_menu_add, SIGNAL(clicked()), this, SLOT(addmenuplugin()) );
+ connect(ui->tool_menu_rm, SIGNAL(clicked()), this, SLOT(rmmenuplugin()) );
+ connect(ui->tool_menu_up, SIGNAL(clicked()), this, SLOT(upmenuplugin()) );
+ connect(ui->tool_menu_dn, SIGNAL(clicked()), this, SLOT(downmenuplugin()) );
+ connect(ui->list_menu, SIGNAL(currentRowChanged(int)), this, SLOT(checkmenuicons()) );
+
+ updateIcons();
+}
+
+page_interface_menu::~page_interface_menu(){
+ delete PINFO;
+}
+
+//================
+// PUBLIC SLOTS
+//================
+void page_interface_menu::SaveSettings(){
+ QSettings settings("lumina-desktop","desktopsettings");
+ QStringList items;
+ for(int i=0; i<ui->list_menu->count(); i++){
+ items << ui->list_menu->item(i)->whatsThis();
+ }
+ settings.setValue("menu/itemlist", items);
+ emit HasPendingChanges(false);
+}
+
+void page_interface_menu::LoadSettings(int){
+ emit HasPendingChanges(false);
+ emit ChangePageTitle( tr("Desktop Settings") );
+ QSettings settings("lumina-desktop","desktopsettings");
+
+QStringList items = settings.value("menu/itemlist", QStringList() ).toStringList();
+ if(items.isEmpty()){ items << "terminal" << "filemanager" << "applications" << "line" << "settings"; }
+ //qDebug() << "Menu Items:" << items;
+ ui->list_menu->clear();
+ for(int i=0; i<items.length(); i++){
+ LPI info = PINFO->menuPluginInfo(items[i]);
+ if(items[i].startsWith("app::::")){
+ bool ok = false;
+ XDGDesktop desk = LXDG::loadDesktopFile(items[i].section("::::",1,1), ok);
+ if(!ok){ continue; } //invalid application file (no longer installed?)
+ QListWidgetItem *item = new QListWidgetItem();
+ item->setWhatsThis( items[i] );
+ item->setIcon( LXDG::findIcon(desk.icon) );
+ item->setText( desk.name );
+ item->setToolTip( desk.comment );
+ ui->list_menu->addItem(item);
+ continue; //now go to the next item
+ }
+ if(info.ID.isEmpty()){ continue; } //invalid plugin
+ //qDebug() << "Add Menu Item:" << info.ID;
+ QListWidgetItem *item = new QListWidgetItem();
+ item->setWhatsThis( info.ID );
+ item->setIcon( LXDG::findIcon(info.icon,"") );
+ item->setText( info.name );
+ item->setToolTip( info.description );
+ ui->list_menu->addItem(item);
+ }
+ checkmenuicons(); //update buttons
+}
+
+void page_interface_menu::updateIcons(){
+ ui->tool_menu_add->setIcon( LXDG::findIcon("list-add","") );
+ ui->tool_menu_rm->setIcon( LXDG::findIcon("list-remove","") );
+ ui->tool_menu_up->setIcon( LXDG::findIcon("go-up","") );
+ ui->tool_menu_dn->setIcon( LXDG::findIcon("go-down","") );
+}
+
+//=================
+// PRIVATE
+//=================
+XDGDesktop page_interface_menu::getSysApp(bool allowreset){
+ AppDialog dlg(this, LXDG::sortDesktopNames( LXDG::systemDesktopFiles() ) );
+ dlg.allowReset(allowreset);
+ dlg.exec();
+ XDGDesktop desk;
+ if(dlg.appreset && allowreset){
+ desk.filePath = "reset"; //special internal flag
+ }else{
+ desk = dlg.appselected;
+ }
+ return desk;
+}
+
+//=================
+// PRIVATE SLOTS
+//=================
+void page_interface_menu::addmenuplugin(){
+ GetPluginDialog dlg(this);
+ dlg.LoadPlugins("menu", PINFO);
+ dlg.exec();
+ if(!dlg.selected){ return; } //cancelled
+ QString plug = dlg.plugID;
+ //Now add the item to the list
+ LPI info = PINFO->menuPluginInfo(plug);
+ QListWidgetItem *it;
+ if(info.ID=="app"){
+ //Need to prompt for the exact application to add to the menu
+ // Note: whatsThis() format: "app::::< *.desktop file path >"
+ XDGDesktop desk = getSysApp();
+ if(desk.filePath.isEmpty()){ return; }//nothing selected
+ //Create the item for the list
+ it = new QListWidgetItem(LXDG::findIcon(desk.icon,""), desk.name );
+ it->setWhatsThis(info.ID+"::::"+desk.filePath);
+ it->setToolTip( desk.comment );
+ }else{
+ it = new QListWidgetItem( LXDG::findIcon(info.icon,""), info.name );
+ it->setWhatsThis(info.ID);
+ it->setToolTip( info.description );
+ }
+ ui->list_menu->addItem(it);
+ ui->list_menu->setCurrentRow(ui->list_menu->count()-1); //make sure it is auto-selected
+ settingChanged();
+}
+
+void page_interface_menu::rmmenuplugin(){
+ if(ui->list_menu->currentRow() < 0){ return; } //no selection
+ delete ui->list_menu->takeItem( ui->list_menu->currentRow() );
+ settingChanged();
+}
+
+void page_interface_menu::upmenuplugin(){
+ int row = ui->list_menu->currentRow();
+ if(row <= 0){ return; }
+ ui->list_menu->insertItem(row-1, ui->list_menu->takeItem(row));
+ ui->list_menu->setCurrentRow(row-1);
+
+ checkmenuicons();
+ settingChanged();
+}
+
+void page_interface_menu::downmenuplugin(){
+ int row = ui->list_menu->currentRow();
+ if(row < 0 || row >= (ui->list_menu->count()-1) ){ return; }
+ ui->list_menu->insertItem(row+1, ui->list_menu->takeItem(row));
+ ui->list_menu->setCurrentRow(row+1);
+
+ checkmenuicons();
+ settingChanged();
+}
+
+void page_interface_menu::checkmenuicons(){
+ ui->tool_menu_up->setEnabled( ui->list_menu->currentRow() > 0 );
+ ui->tool_menu_dn->setEnabled( ui->list_menu->currentRow() < (ui->list_menu->count()-1) );
+ ui->tool_menu_rm->setEnabled( ui->list_menu->currentRow() >=0 );
+}
diff --git a/src-qt5/core-utils/lumina-config/pages/page_interface_menu.h b/src-qt5/core-utils/lumina-config/pages/page_interface_menu.h
new file mode 100644
index 00000000..f2a53007
--- /dev/null
+++ b/src-qt5/core-utils/lumina-config/pages/page_interface_menu.h
@@ -0,0 +1,41 @@
+//===========================================
+// Lumina Desktop Source Code
+// Copyright (c) 2016, Ken Moore
+// Available under the 3-clause BSD license
+// See the LICENSE file for full details
+//===========================================
+#ifndef _LUMINA_CONFIG_PAGE_INTERFACE_MENU_H
+#define _LUMINA_CONFIG_PAGE_INTERFACE_MENU_H
+#include "../globals.h"
+#include "PageWidget.h"
+#include "../LPlugins.h"
+
+namespace Ui{
+ class page_interface_menu;
+};
+
+class page_interface_menu : public PageWidget{
+ Q_OBJECT
+public:
+ page_interface_menu(QWidget *parent);
+ ~page_interface_menu();
+
+public slots:
+ void SaveSettings();
+ void LoadSettings(int screennum);
+ void updateIcons();
+
+private:
+ Ui::page_interface_menu *ui;
+ LPlugins *PINFO;
+ //Get an application on the system
+ XDGDesktop getSysApp(bool allowreset = false);
+
+private slots:
+ void addmenuplugin();
+ void rmmenuplugin();
+ void upmenuplugin();
+ void downmenuplugin();
+ void checkmenuicons();
+};
+#endif
diff --git a/src-qt5/core-utils/lumina-config/pages/page_interface_menu.ui b/src-qt5/core-utils/lumina-config/pages/page_interface_menu.ui
index 1d230494..4579ef54 100644
--- a/src-qt5/core-utils/lumina-config/pages/page_interface_menu.ui
+++ b/src-qt5/core-utils/lumina-config/pages/page_interface_menu.ui
@@ -15,16 +15,16 @@
</property>
<layout class="QVBoxLayout" name="verticalLayout">
<property name="leftMargin">
- <number>0</number>
+ <number>6</number>
</property>
<property name="topMargin">
- <number>0</number>
+ <number>6</number>
</property>
<property name="rightMargin">
- <number>0</number>
+ <number>6</number>
</property>
<property name="bottomMargin">
- <number>0</number>
+ <number>6</number>
</property>
<item>
<widget class="QLabel" name="label_10">
diff --git a/src-qt5/core-utils/lumina-config/pages/page_interface_panels.cpp b/src-qt5/core-utils/lumina-config/pages/page_interface_panels.cpp
new file mode 100644
index 00000000..9d940033
--- /dev/null
+++ b/src-qt5/core-utils/lumina-config/pages/page_interface_panels.cpp
@@ -0,0 +1,143 @@
+//===========================================
+// Lumina Desktop Source Code
+// Copyright (c) 2016, Ken Moore
+// Available under the 3-clause BSD license
+// See the LICENSE file for full details
+//===========================================
+#include "page_interface_panels.h"
+#include "ui_page_interface_panels.h"
+#include "getPage.h"
+#include "../GetPluginDialog.h"
+#include "../AppDialog.h"
+
+//==========
+// PUBLIC
+//==========
+page_interface_panels::page_interface_panels(QWidget *parent) : PageWidget(parent), ui(new Ui::page_interface_panels()){
+ ui->setupUi(this);
+ loading = false;
+ PINFO = new LPlugins();
+ settings = new QSettings("lumina-desktop","desktopsettings");
+ connect(ui->tool_panels_add, SIGNAL(clicked()), this, SLOT(newPanel()) );
+ updateIcons();
+}
+
+page_interface_panels::~page_interface_panels(){
+ delete PINFO;
+}
+
+//================
+// PUBLIC SLOTS
+//================
+void page_interface_panels::SaveSettings(){
+ QString DPrefix = "desktop-"+QString::number(cscreen)+"/";
+ settings->setValue(DPrefix+"panels", PANELS.length());
+ for(int i=0; i<PANELS.length(); i++){
+ PANELS[i]->SaveSettings(settings);
+ }
+ //The plugin ID's will be changed to unique ID's by the desktop - reload in a moment
+ emit HasPendingChanges(false);
+ settings->sync(); //save to disk right now
+ QTimer::singleShot(1000, this, SLOT(LoadSettings()) );
+}
+
+void page_interface_panels::LoadSettings(int screennum){
+ if(screennum>=0){
+ cscreen = screennum;
+ }
+ loading = true;
+ emit HasPendingChanges(false);
+ emit ChangePageTitle( tr("Desktop Settings") );
+ QString DPrefix = "desktop-"+QString::number(cscreen)+"/";
+ int panelnumber = settings->value(DPrefix+"panels",-1).toInt();
+
+//First clean any current panels
+ for(int i=0; i<PANELS.length(); i++){ delete PANELS.takeAt(i); i--; }
+ //Now create new panels
+ if(ui->scroll_panels->widget()->layout()==0){
+ ui->scroll_panels->widget()->setLayout( new QHBoxLayout() );
+ ui->scroll_panels->widget()->layout()->setContentsMargins(0,0,0,0);
+ }
+ ui->scroll_panels->widget()->layout()->setAlignment(Qt::AlignLeft);
+ //Clear anything left over in the layout
+ for(int i=0; i<ui->scroll_panels->widget()->layout()->count(); i++){
+ delete ui->scroll_panels->widget()->layout()->takeAt(i);
+ }
+ for(int i=0; i<panelnumber; i++){
+ PanelWidget *tmp = new PanelWidget(ui->scroll_panels->widget(), this, PINFO);
+ tmp->LoadSettings(settings, cscreen, i);
+ PANELS << tmp;
+ connect(tmp, SIGNAL(PanelChanged()), this, SLOT(panelValChanged()) );
+ connect(tmp, SIGNAL(PanelRemoved(int)), this, SLOT(removePanel(int)) );
+ ui->scroll_panels->widget()->layout()->addWidget(tmp);
+ }
+ static_cast<QHBoxLayout*>(ui->scroll_panels->widget()->layout())->addStretch();
+
+ QApplication::processEvents();
+ loading = false;
+}
+
+void page_interface_panels::updateIcons(){
+ ui->tool_panels_add->setIcon( LXDG::findIcon("list-add","") );
+}
+
+//=================
+// PRIVATE
+//=================
+/*XDGDesktop page_interface_panels::getSysApp(bool allowreset){
+ AppDialog dlg(this, LXDG::sortDesktopNames( LXDG::systemDesktopFiles() ) );
+ dlg.allowReset(allowreset);
+ dlg.exec();
+ XDGDesktop desk;
+ if(dlg.appreset && allowreset){
+ desk.filePath = "reset"; //special internal flag
+ }else{
+ desk = dlg.appselected;
+ }
+ return desk;
+}*/
+
+//=================
+// PRIVATE SLOTS
+//=================
+void page_interface_panels::panelValChanged(){
+ ui->tool_panels_add->setEnabled(panelnumber < 12);
+ if(!loading){ settingChanged(); }
+}
+
+void page_interface_panels::newPanel(){
+ if(panelnumber<0){ panelnumber=0; } //just in case
+ panelnumber++;
+ //Now create a new Panel widget with this number
+ PanelWidget *tmp = new PanelWidget(ui->scroll_panels->widget(), this, PINFO);
+ tmp->LoadSettings(settings, cscreen, panelnumber-1);
+ PANELS << tmp;
+ connect(tmp, SIGNAL(PanelChanged()), this, SLOT(panelValChanged()) );
+ connect(tmp, SIGNAL(PanelRemoved(int)), this, SLOT(removePanel(int)) );
+ static_cast<QBoxLayout*>(ui->scroll_panels->widget()->layout())->insertWidget(PANELS.length()-1, tmp);
+ //update the widget first (2 necessary for scroll below to work)
+ ui->scroll_panels->update();
+ QApplication::processEvents();
+ QApplication::processEvents();
+ ui->scroll_panels->ensureWidgetVisible(tmp);
+ panelValChanged();
+}
+
+void page_interface_panels::removePanel(int pan){
+ //connected to a signal from the panel widget
+ bool changed = false;
+ for(int i=0; i<PANELS.length(); i++){
+ int num = PANELS[i]->PanelNumber();
+ if(num==pan){
+ delete PANELS.takeAt(i);
+ i--;
+ changed = true;
+ }else if(num > pan){
+ PANELS[i]->ChangePanelNumber(num-1);
+ changed = true;
+ }
+ }
+ if(!changed){ return; } //nothing done
+ panelnumber--;
+ panelValChanged();
+}
diff --git a/src-qt5/core-utils/lumina-config/pages/page_interface_panels.h b/src-qt5/core-utils/lumina-config/pages/page_interface_panels.h
new file mode 100644
index 00000000..308bbd9a
--- /dev/null
+++ b/src-qt5/core-utils/lumina-config/pages/page_interface_panels.h
@@ -0,0 +1,48 @@
+//===========================================
+// Lumina Desktop Source Code
+// Copyright (c) 2016, Ken Moore
+// Available under the 3-clause BSD license
+// See the LICENSE file for full details
+//===========================================
+#ifndef _LUMINA_CONFIG_PAGE_INTERFACE_PANELS_H
+#define _LUMINA_CONFIG_PAGE_INTERFACE_PANELS_H
+#include "../globals.h"
+#include "PageWidget.h"
+#include "../LPlugins.h"
+#include "../PanelWidget.h"
+
+namespace Ui{
+ class page_interface_panels;
+};
+
+class page_interface_panels : public PageWidget{
+ Q_OBJECT
+public:
+ page_interface_panels(QWidget *parent);
+ ~page_interface_panels();
+
+ bool needsScreenSelector(){ return true; }
+
+public slots:
+ void SaveSettings();
+ void LoadSettings(int screennum = -1);
+ void updateIcons();
+
+private:
+ Ui::page_interface_panels *ui;
+ bool loading;
+ int cscreen; //current monitor/screen number
+ int panelnumber; //current number of panels
+ QSettings *settings;
+ LPlugins *PINFO;
+ QList<PanelWidget*> PANELS;
+
+ //Get an application on the system
+ //XDGDesktop getSysApp(bool allowreset = false);
+
+private slots:
+ void panelValChanged();
+ void newPanel();
+ void removePanel(int); //connected to a signal from the panel widget
+};
+#endif
diff --git a/src-qt5/core-utils/lumina-config/pages/page_main.cpp b/src-qt5/core-utils/lumina-config/pages/page_main.cpp
index a45c0477..976e7c69 100644
--- a/src-qt5/core-utils/lumina-config/pages/page_main.cpp
+++ b/src-qt5/core-utils/lumina-config/pages/page_main.cpp
@@ -6,20 +6,72 @@
//===========================================
#include "page_main.h"
#include "ui_page_main.h"
+#include "getPage.h"
//==========
// PUBLIC
//==========
page_main::page_main(QWidget *parent) : PageWidget(parent), ui(new Ui::page_main()){
ui->setupUi(this);
-
+ ui->treeWidget->setMouseTracking(true);
+ ui->treeWidget->setSortingEnabled(false); //the QTreeView sort flag always puts them in backwards (reverse-alphabetical)
+ connect(ui->treeWidget, SIGNAL(itemActivated(QTreeWidgetItem*,int)), this, SLOT(itemTriggered(QTreeWidgetItem*)) );
+ connect(ui->treeWidget, SIGNAL(itemClicked(QTreeWidgetItem*,int)), this, SLOT(itemTriggered(QTreeWidgetItem*)) );
+ connect(ui->lineEdit, SIGNAL(textChanged(QString)), this, SLOT(searchChanged(QString)) );
}
page_main::~page_main(){
}
-
+void page_main::UpdateItems(QString search){
+ ui->treeWidget->clear();
+ //First create the categories
+ QTreeWidgetItem *interface = new QTreeWidgetItem();
+ interface->setIcon(0, LXDG::findIcon("preferences-desktop",""));
+ interface->setText(0, tr("Interface Configuration"));
+ QTreeWidgetItem *appearance = new QTreeWidgetItem();
+ appearance->setIcon(0, LXDG::findIcon("preferences-desktop-color",""));
+ appearance->setText(0, tr("Appearance"));
+ QTreeWidgetItem *session = new QTreeWidgetItem();
+ session->setIcon(0, LXDG::findIcon("preferences-system-session-services",""));
+ session->setText(0, tr("Desktop Session Options"));
+ QTreeWidgetItem *user = new QTreeWidgetItem();
+ user->setIcon(0, LXDG::findIcon("preferences-desktop-user",""));
+ user->setText(0, tr("User Settings"));
+ //Now go through and add in the known pages for each category
+ QStringList SL = search.split(" "); //search list
+ for(int i=0; i<INFO.length(); i++){
+ if(!search.isEmpty() ){
+ //See if this item needs to be included or not
+ QStringList info; info << INFO[i].name.split(" ") << INFO[i].title.split(" ") << INFO[i].comment.split(" ") << INFO[i].search_tags;
+ info.removeDuplicates(); //remove any duplicate terms/info first
+ bool ok = true;
+ for(int s=0; s<SL.length() && ok; s++){
+ ok = !info.filter(SL[s]).isEmpty();
+ }
+ if(!ok){ continue; } //no duplicates between search terms and available info
+ }
+ //qDebug() << "Item Found:" << INFO[i].id << INFO[i].title;
+ QTreeWidgetItem *it = new QTreeWidgetItem();
+ it->setIcon(0, LXDG::findIcon(INFO[i].icon,"") );
+ it->setText(0, INFO[i].name);
+ it->setStatusTip(0, INFO[i].comment);
+ it->setToolTip(0, INFO[i].comment);
+ it->setWhatsThis(0, INFO[i].id);
+ if(INFO[i].category=="interface"){ interface->addChild(it); }
+ else if(INFO[i].category=="appearance"){ appearance->addChild(it); }
+ else if(INFO[i].category=="session"){ session->addChild(it); }
+ else if(INFO[i].category=="user"){ user->addChild(it); }
+ else{ ui->treeWidget->addTopLevelItem(it); }
+ }
+ //Now add the categories to the tree widget if they are non-empty
+ if(interface->childCount()>0){ ui->treeWidget->addTopLevelItem(interface); interface->setExpanded(!search.isEmpty()); }
+ if(appearance->childCount()>0){ ui->treeWidget->addTopLevelItem(appearance); appearance->setExpanded(!search.isEmpty()); }
+ if(session->childCount()>0){ ui->treeWidget->addTopLevelItem(session); session->setExpanded(!search.isEmpty()); }
+ if(user->childCount()>0){ ui->treeWidget->addTopLevelItem(user); user->setExpanded(!search.isEmpty()); }
+ ui->treeWidget->sortItems(0, Qt::AscendingOrder);
+}
//================
// PUBLIC SLOTS
@@ -28,14 +80,30 @@ void page_main::SaveSettings(){
}
-void page_main::LoadSettings(int screennum){
-
+void page_main::LoadSettings(int){
+ emit HasPendingChanges(false);
+ emit ChangePageTitle( tr("Desktop Settings") );
+ INFO.clear();
+ INFO = KnownPages();
+ UpdateItems("");
+ ui->lineEdit->setFocus();
}
void page_main::updateIcons(){
+ UpdateItems("");
+}
+//=================
+// PRIVATE SLOTS
+//=================
+void page_main::itemTriggered(QTreeWidgetItem *it){
+ if(it->childCount()>0){
+ it->setExpanded( !it->isExpanded() );
+ }else if(!it->whatsThis(0).isEmpty()){
+ emit ChangePage(it->whatsThis(0));
+ }
}
-//===========
-// PRIVATE
-//===========
+void page_main::searchChanged(QString txt){
+ UpdateItems(txt.simplified());
+}
diff --git a/src-qt5/core-utils/lumina-config/pages/page_main.h b/src-qt5/core-utils/lumina-config/pages/page_main.h
index d5c5c8be..2e38eb64 100644
--- a/src-qt5/core-utils/lumina-config/pages/page_main.h
+++ b/src-qt5/core-utils/lumina-config/pages/page_main.h
@@ -26,8 +26,12 @@ public slots:
private:
Ui::page_main *ui;
+ QList<PAGEINFO> INFO;
+
+ void UpdateItems(QString search);
private slots:
-
+ void itemTriggered(QTreeWidgetItem*);
+ void searchChanged(QString);
};
#endif
diff --git a/src-qt5/core-utils/lumina-config/pages/page_main.ui b/src-qt5/core-utils/lumina-config/pages/page_main.ui
index 31cb372f..2331152b 100644
--- a/src-qt5/core-utils/lumina-config/pages/page_main.ui
+++ b/src-qt5/core-utils/lumina-config/pages/page_main.ui
@@ -15,25 +15,62 @@
</property>
<layout class="QVBoxLayout" name="verticalLayout">
<property name="leftMargin">
- <number>0</number>
+ <number>2</number>
</property>
<property name="topMargin">
<number>0</number>
</property>
<property name="rightMargin">
- <number>0</number>
+ <number>2</number>
</property>
<property name="bottomMargin">
<number>0</number>
</property>
<item>
+ <widget class="QLineEdit" name="lineEdit">
+ <property name="placeholderText">
+ <string>Search for....</string>
+ </property>
+ </widget>
+ </item>
+ <item>
<widget class="QTreeWidget" name="treeWidget">
+ <property name="focusPolicy">
+ <enum>Qt::NoFocus</enum>
+ </property>
<property name="styleSheet">
<string notr="true">QTreeWidget{background: transparent; }</string>
</property>
+ <property name="editTriggers">
+ <set>QAbstractItemView::DoubleClicked|QAbstractItemView::EditKeyPressed|QAbstractItemView::SelectedClicked</set>
+ </property>
+ <property name="iconSize">
+ <size>
+ <width>32</width>
+ <height>32</height>
+ </size>
+ </property>
+ <property name="indentation">
+ <number>20</number>
+ </property>
+ <property name="uniformRowHeights">
+ <bool>true</bool>
+ </property>
<property name="sortingEnabled">
<bool>true</bool>
</property>
+ <property name="animated">
+ <bool>true</bool>
+ </property>
+ <property name="allColumnsShowFocus">
+ <bool>false</bool>
+ </property>
+ <property name="wordWrap">
+ <bool>true</bool>
+ </property>
+ <property name="expandsOnDoubleClick">
+ <bool>false</bool>
+ </property>
<attribute name="headerVisible">
<bool>false</bool>
</attribute>
diff --git a/src-qt5/core-utils/lumina-config/pages/page_sample.cpp b/src-qt5/core-utils/lumina-config/pages/page_sample.cpp
new file mode 100644
index 00000000..0256df8d
--- /dev/null
+++ b/src-qt5/core-utils/lumina-config/pages/page_sample.cpp
@@ -0,0 +1,48 @@
+//===========================================
+// Lumina Desktop Source Code
+// Copyright (c) 2016, Ken Moore
+// Available under the 3-clause BSD license
+// See the LICENSE file for full details
+//===========================================
+#include "page_sample.h"
+#include "ui_page_sample.h"
+#include "getPage.h"
+
+//==========
+// PUBLIC
+//==========
+page_sample::page_sample(QWidget *parent) : PageWidget(parent), ui(new Ui::page_sample()){
+ ui->setupUi(this);
+
+ updateIcons();
+}
+
+page_sample::~page_sample(){
+
+}
+
+//================
+// PUBLIC SLOTS
+//================
+void page_sample::SaveSettings(){
+
+ emit HasPendingChanged(false);
+}
+
+void page_sample::LoadSettings(int){
+ emit HasPendingChanges(false);
+ emit ChangePageTitle( tr("Desktop Settings") );
+
+}
+
+void page_sample::updateIcons(){
+
+}
+
+//=================
+// PRIVATE
+//=================
+
+//=================
+// PRIVATE SLOTS
+//=================
diff --git a/src-qt5/core-utils/lumina-config/pages/page_sample.h b/src-qt5/core-utils/lumina-config/pages/page_sample.h
new file mode 100644
index 00000000..f31e981d
--- /dev/null
+++ b/src-qt5/core-utils/lumina-config/pages/page_sample.h
@@ -0,0 +1,33 @@
+//===========================================
+// Lumina Desktop Source Code
+// Copyright (c) 2016, Ken Moore
+// Available under the 3-clause BSD license
+// See the LICENSE file for full details
+//===========================================
+#ifndef _LUMINA_CONFIG_PAGE_SAMPLE_H
+#define _LUMINA_CONFIG_PAGE_SAMPLE_H
+#include "../globals.h"
+#include "PageWidget.h"
+
+namespace Ui{
+ class page_sample;
+};
+
+class page_sample : public PageWidget{
+ Q_OBJECT
+public:
+ page_sample(QWidget *parent);
+ ~page_sample();
+
+public slots:
+ void SaveSettings();
+ void LoadSettings(int screennum);
+ void updateIcons();
+
+private:
+ Ui::page_sample *ui;
+
+private slots:
+
+};
+#endif
diff --git a/src-qt5/core-utils/lumina-config/pages/page_session_locale.cpp b/src-qt5/core-utils/lumina-config/pages/page_session_locale.cpp
new file mode 100644
index 00000000..ad5aa7f7
--- /dev/null
+++ b/src-qt5/core-utils/lumina-config/pages/page_session_locale.cpp
@@ -0,0 +1,113 @@
+//===========================================
+// Lumina Desktop Source Code
+// Copyright (c) 2016, Ken Moore
+// Available under the 3-clause BSD license
+// See the LICENSE file for full details
+//===========================================
+#include "page_session_locale.h"
+#include "ui_page_session_locale.h"
+#include "getPage.h"
+
+//==========
+// PUBLIC
+//==========
+page_session_locale::page_session_locale(QWidget *parent) : PageWidget(parent), ui(new Ui::page_session_locale()){
+ ui->setupUi(this);
+ setupLocales();
+ connect(ui->combo_locale_lang, SIGNAL(currentIndexChanged(int)), this, SLOT(settingChanged()) );
+ connect(ui->combo_locale_collate, SIGNAL(currentIndexChanged(int)), this, SLOT(settingChanged()) );
+ connect(ui->combo_locale_ctype, SIGNAL(currentIndexChanged(int)), this, SLOT(settingChanged()) );
+ connect(ui->combo_locale_message, SIGNAL(currentIndexChanged(int)), this, SLOT(settingChanged()) );
+ connect(ui->combo_locale_monetary, SIGNAL(currentIndexChanged(int)), this, SLOT(settingChanged()) );
+ connect(ui->combo_locale_numeric, SIGNAL(currentIndexChanged(int)), this, SLOT(settingChanged()) );
+ connect(ui->combo_locale_time, SIGNAL(currentIndexChanged(int)), this, SLOT(settingChanged()) );
+ updateIcons();
+}
+
+page_session_locale::~page_session_locale(){
+
+}
+
+//================
+// PUBLIC SLOTS
+//================
+void page_session_locale::SaveSettings(){
+ QSettings sessionsettings("lumina-desktop","sessionsettings");
+ sessionsettings.setValue("InitLocale/LANG", ui->combo_locale_lang->currentData().toString() );
+ sessionsettings.setValue("InitLocale/LC_MESSAGES", ui->combo_locale_message->currentData().toString() );
+ sessionsettings.setValue("InitLocale/LC_TIME", ui->combo_locale_time->currentData().toString() );
+ sessionsettings.setValue("InitLocale/LC_NUMERIC", ui->combo_locale_numeric->currentData().toString() );
+ sessionsettings.setValue("InitLocale/LC_MONETARY", ui->combo_locale_monetary->currentData().toString() );
+ sessionsettings.setValue("InitLocale/LC_COLLATE", ui->combo_locale_collate->currentData().toString() );
+ sessionsettings.setValue("InitLocale/LC_CTYPE", ui->combo_locale_ctype->currentData().toString() );
+ emit HasPendingChanges(false);
+}
+
+void page_session_locale::LoadSettings(int){
+ emit HasPendingChanges(false);
+ emit ChangePageTitle( tr("Desktop Settings") );
+ QSettings sessionsettings("lumina-desktop","sessionsettings");
+
+ QString val = sessionsettings.value("InitLocale/LANG", "").toString();
+ int index = ui->combo_locale_lang->findData(val);
+ if(index<0){ index = 0; } //system default
+ ui->combo_locale_lang->setCurrentIndex(index);
+ val = sessionsettings.value("InitLocale/LC_MESSAGES", "").toString();
+ index = ui->combo_locale_message->findData(val);
+ if(index<0){ index = 0; } //system default
+ ui->combo_locale_message->setCurrentIndex(index);
+ val = sessionsettings.value("InitLocale/LC_TIME", "").toString();
+ index = ui->combo_locale_time->findData(val);
+ if(index<0){ index = 0; } //system default
+ ui->combo_locale_time->setCurrentIndex(index);
+ val = sessionsettings.value("InitLocale/NUMERIC", "").toString();
+ index = ui->combo_locale_numeric->findData(val);
+ if(index<0){ index = 0; } //system default
+ ui->combo_locale_numeric->setCurrentIndex(index);
+ val = sessionsettings.value("InitLocale/MONETARY", "").toString();
+ index = ui->combo_locale_monetary->findData(val);
+ if(index<0){ index = 0; } //system default
+ ui->combo_locale_monetary->setCurrentIndex(index);
+ val = sessionsettings.value("InitLocale/COLLATE", "").toString();
+ index = ui->combo_locale_collate->findData(val);
+ if(index<0){ index = 0; } //system default
+ ui->combo_locale_collate->setCurrentIndex(index);
+ val = sessionsettings.value("InitLocale/CTYPE", "").toString();
+ index = ui->combo_locale_ctype->findData(val);
+ if(index<0){ index = 0; } //system default
+ ui->combo_locale_ctype->setCurrentIndex(index);
+}
+
+void page_session_locale::updateIcons(){
+
+}
+
+//=================
+// PRIVATE
+//=================
+void page_session_locale::setupLocales(){
+//Available localizations
+ QStringList langs = LUtils::knownLocales();
+ langs.sort();
+ QString def = tr("System Default");
+ ui->combo_locale_lang->addItem(def,"");
+ ui->combo_locale_collate->addItem(def,"");
+ ui->combo_locale_ctype->addItem(def,"");
+ ui->combo_locale_message->addItem(def,"");
+ ui->combo_locale_monetary->addItem(def,"");
+ ui->combo_locale_numeric->addItem(def,"");
+ ui->combo_locale_time->addItem(def,"");
+ for(int i=0; i<langs.length(); i++){
+ QString lan = QLocale(langs[i]).nativeLanguageName();
+ ui->combo_locale_lang->addItem(lan,langs[i]);
+ ui->combo_locale_collate->addItem(lan,langs[i]);
+ ui->combo_locale_ctype->addItem(lan,langs[i]);
+ ui->combo_locale_message->addItem(lan,langs[i]);
+ ui->combo_locale_monetary->addItem(lan,langs[i]);
+ ui->combo_locale_numeric->addItem(lan,langs[i]);
+ ui->combo_locale_time->addItem(lan,langs[i]);
+ }
+}
+//=================
+// PRIVATE SLOTS
+//=================
diff --git a/src-qt5/core-utils/lumina-config/pages/page_session_locale.h b/src-qt5/core-utils/lumina-config/pages/page_session_locale.h
new file mode 100644
index 00000000..57b06081
--- /dev/null
+++ b/src-qt5/core-utils/lumina-config/pages/page_session_locale.h
@@ -0,0 +1,35 @@
+//===========================================
+// Lumina Desktop Source Code
+// Copyright (c) 2016, Ken Moore
+// Available under the 3-clause BSD license
+// See the LICENSE file for full details
+//===========================================
+#ifndef _LUMINA_CONFIG_PAGE_SESSION_LOCALE_H
+#define _LUMINA_CONFIG_PAGE_SESSION_LOCALE_H
+#include "../globals.h"
+#include "PageWidget.h"
+
+namespace Ui{
+ class page_session_locale;
+};
+
+class page_session_locale : public PageWidget{
+ Q_OBJECT
+public:
+ page_session_locale(QWidget *parent);
+ ~page_session_locale();
+
+public slots:
+ void SaveSettings();
+ void LoadSettings(int screennum);
+ void updateIcons();
+
+private:
+ Ui::page_session_locale *ui;
+
+ void setupLocales();
+
+private slots:
+
+};
+#endif
diff --git a/src-qt5/core-utils/lumina-config/pages/page_session_locale.ui b/src-qt5/core-utils/lumina-config/pages/page_session_locale.ui
index 90cd4ca1..d514e5f2 100644
--- a/src-qt5/core-utils/lumina-config/pages/page_session_locale.ui
+++ b/src-qt5/core-utils/lumina-config/pages/page_session_locale.ui
@@ -15,16 +15,16 @@
</property>
<layout class="QFormLayout" name="formLayout">
<property name="leftMargin">
- <number>0</number>
+ <number>6</number>
</property>
<property name="topMargin">
- <number>0</number>
+ <number>6</number>
</property>
<property name="rightMargin">
- <number>0</number>
+ <number>6</number>
</property>
<property name="bottomMargin">
- <number>0</number>
+ <number>6</number>
</property>
<item row="0" column="0" colspan="2">
<widget class="QLabel" name="label_30">
diff --git a/src-qt5/core-utils/lumina-config/pages/page_session_options.cpp b/src-qt5/core-utils/lumina-config/pages/page_session_options.cpp
new file mode 100644
index 00000000..4f678ab3
--- /dev/null
+++ b/src-qt5/core-utils/lumina-config/pages/page_session_options.cpp
@@ -0,0 +1,172 @@
+//===========================================
+// Lumina Desktop Source Code
+// Copyright (c) 2016, Ken Moore
+// Available under the 3-clause BSD license
+// See the LICENSE file for full details
+//===========================================
+#include "page_session_options.h"
+#include "ui_page_session_options.h"
+#include "getPage.h"
+
+//==========
+// PUBLIC
+//==========
+page_session_options::page_session_options(QWidget *parent) : PageWidget(parent), ui(new Ui::page_session_options()){
+ ui->setupUi(this);
+
+ //Display formats for panel clock
+ ui->combo_session_datetimeorder->clear();
+ ui->combo_session_datetimeorder->addItem( tr("Time (Date as tooltip)"), "timeonly");
+ ui->combo_session_datetimeorder->addItem( tr("Date (Time as tooltip)"), "dateonly");
+ ui->combo_session_datetimeorder->addItem( tr("Time first then Date"), "timedate");
+ ui->combo_session_datetimeorder->addItem( tr("Date first then Time"), "datetime");
+
+ connect(ui->push_session_setUserIcon, SIGNAL(clicked()), this, SLOT(sessionChangeUserIcon()) );
+ connect(ui->push_session_resetSysDefaults, SIGNAL(clicked()), this, SLOT(sessionResetSys()) );
+ connect(ui->push_session_resetLuminaDefaults, SIGNAL(clicked()), this, SLOT(sessionResetLumina()) );
+ connect(ui->tool_help_time, SIGNAL(clicked()), this, SLOT(sessionShowTimeCodes()) );
+ connect(ui->tool_help_date, SIGNAL(clicked()), this, SLOT(sessionShowDateCodes()) );
+ connect(ui->line_session_time, SIGNAL(textChanged(QString)), this, SLOT(sessionLoadTimeSample()) );
+ connect(ui->line_session_date, SIGNAL(textChanged(QString)), this, SLOT(sessionLoadDateSample()) );
+ connect(ui->combo_session_datetimeorder, SIGNAL(currentIndexChanged(int)), this, SLOT(settingChanged()) );
+ updateIcons();
+
+}
+
+page_session_options::~page_session_options(){
+
+}
+
+//================
+// PUBLIC SLOTS
+//================
+void page_session_options::SaveSettings(){
+ QSettings sessionsettings("lumina-desktop","sessionsettings");
+ sessionsettings.setValue("EnableNumlock", ui->check_session_numlock->isChecked());
+ sessionsettings.setValue("PlayStartupAudio", ui->check_session_playloginaudio->isChecked());
+ sessionsettings.setValue("PlayLogoutAudio", ui->check_session_playlogoutaudio->isChecked());
+ sessionsettings.setValue("TimeFormat", ui->line_session_time->text());
+ sessionsettings.setValue("DateFormat", ui->line_session_date->text());
+ sessionsettings.setValue("DateTimeOrder", ui->combo_session_datetimeorder->currentData().toString());
+ emit HasPendingChanges(false);
+}
+
+void page_session_options::LoadSettings(int){
+ emit HasPendingChanges(false);
+ emit ChangePageTitle( tr("Desktop Settings") );
+ QSettings sessionsettings("lumina-desktop","sessionsettings");
+ ui->check_session_numlock->setChecked( sessionsettings.value("EnableNumlock", true).toBool() );
+ ui->check_session_playloginaudio->setChecked( sessionsettings.value("PlayStartupAudio",true).toBool() );
+ ui->check_session_playlogoutaudio->setChecked( sessionsettings.value("PlayLogoutAudio",true).toBool() );
+ ui->push_session_setUserIcon->setIcon( LXDG::findIcon(QDir::homePath()+"/.loginIcon.png", "user-identity") );
+ ui->line_session_time->setText( sessionsettings.value("TimeFormat","").toString() );
+ ui->line_session_date->setText( sessionsettings.value("DateFormat","").toString() );
+ int index = ui->combo_session_datetimeorder->findData( sessionsettings.value("DateTimeOrder","timeonly").toString() );
+ ui->combo_session_datetimeorder->setCurrentIndex(index);
+
+ sessionLoadTimeSample();
+ sessionLoadDateSample();
+}
+
+void page_session_options::updateIcons(){
+ ui->push_session_resetSysDefaults->setIcon( LXDG::findIcon("start-here-lumina","view-refresh") );
+ ui->push_session_resetLuminaDefaults->setIcon( LXDG::findIcon("Lumina-DE","") );
+ ui->tool_help_time->setIcon( LXDG::findIcon("help-about","") );
+ ui->tool_help_date->setIcon( LXDG::findIcon("help-about","") );
+}
+
+//=================
+// PRIVATE
+//=================
+
+//=================
+// PRIVATE SLOTS
+//=================
+void page_session_options::sessionChangeUserIcon(){
+ //Prompt for a new image file
+ QStringList imgformats;
+ QList<QByteArray> fmts = QImageReader::supportedImageFormats();
+ for(int i=0; i<fmts.length(); i++){
+ imgformats << "*."+QString(fmts[i]);
+ }
+ QString filepath = QFileDialog::getOpenFileName(this, tr("Select an image"), QDir::homePath(), \
+ tr("Images")+" ("+imgformats.join(" ")+")");
+ if(filepath.isEmpty()){
+ //User cancelled the operation
+ if(QFile::exists(QDir::homePath()+"/.loginIcon.png")){
+ if(QMessageBox::Yes == QMessageBox::question(this,tr("Reset User Image"), tr("Would you like to reset the user image to the system default?"), QMessageBox::Yes | QMessageBox::No, QMessageBox::No) ){
+ //QFile::remove(QDir::homePath()+"/.loginIcon.png");
+ ui->push_session_setUserIcon->setWhatsThis("reset");
+ }else{
+ return;
+ }
+ }
+ }else{
+ ui->push_session_setUserIcon->setWhatsThis(filepath);
+ }
+ //Now re-load the icon in the UI
+ QString path = ui->push_session_setUserIcon->whatsThis();
+ if(path.isEmpty()){ path = QDir::homePath()+"/.loginIcon.png"; }
+ if(path=="reset"){ path.clear(); }
+ ui->push_session_setUserIcon->setIcon( LXDG::findIcon(path, "user-identity") );
+ settingChanged();
+}
+
+void page_session_options::sessionResetSys(){
+ LUtils::LoadSystemDefaults();
+ QTimer::singleShot(500,this, SLOT(LoadSettings()) );
+}
+
+void page_session_options::sessionResetLumina(){
+ LUtils::LoadSystemDefaults(true); //skip OS customizations
+ QTimer::singleShot(500,this, SLOT(LoadSettings()) );
+}
+
+void page_session_options::sessionLoadTimeSample(){
+ if(ui->line_session_time->text().simplified().isEmpty()){
+ ui->label_session_timesample->setText( QTime::currentTime().toString(Qt::DefaultLocaleShortDate) );
+ }else{
+ ui->label_session_timesample->setText( QTime::currentTime().toString( ui->line_session_time->text() ) );
+ }
+ settingChanged();
+}
+
+void page_session_options::sessionShowTimeCodes(){
+ QStringList msg;
+ msg << tr("Valid Time Codes:") << "\n";
+ msg << QString(tr("%1: Hour without leading zero (1)")).arg("h");
+ msg << QString(tr("%1: Hour with leading zero (01)")).arg("hh");
+ msg << QString(tr("%1: Minutes without leading zero (2)")).arg("m");
+ msg << QString(tr("%1: Minutes with leading zero (02)")).arg("mm");
+ msg << QString(tr("%1: Seconds without leading zero (3)")).arg("s");
+ msg << QString(tr("%1: Seconds with leading zero (03)")).arg("ss");
+ msg << QString(tr("%1: AM/PM (12-hour) clock (upper or lower case)")).arg("A or a");
+ msg << QString(tr("%1: Timezone")).arg("t");
+ QMessageBox::information(this, tr("Time Codes"), msg.join("\n") );
+}
+
+void page_session_options::sessionLoadDateSample(){
+ if(ui->line_session_date->text().simplified().isEmpty()){
+ ui->label_session_datesample->setText( QDate::currentDate().toString(Qt::DefaultLocaleShortDate) );
+ }else{
+ ui->label_session_datesample->setText( QDate::currentDate().toString( ui->line_session_date->text() ) );
+ }
+ settingChanged();
+}
+
+void page_session_options::sessionShowDateCodes(){
+ QStringList msg;
+ msg << tr("Valid Date Codes:") << "\n";
+ msg << QString(tr("%1: Numeric day without a leading zero (1)")).arg("d");
+ msg << QString(tr("%1: Numeric day with leading zero (01)")).arg("dd");
+ msg << QString(tr("%1: Day as abbreviation (localized)")).arg("ddd");
+ msg << QString(tr("%1: Day as full name (localized)")).arg("dddd");
+ msg << QString(tr("%1: Numeric month without leading zero (2)")).arg("M");
+ msg << QString(tr("%1: Numeric month with leading zero (02)")).arg("MM");
+ msg << QString(tr("%1: Month as abbreviation (localized)")).arg("MMM");
+ msg << QString(tr("%1: Month as full name (localized)")).arg("MMMM");
+ msg << QString(tr("%1: Year as 2-digit number (15)")).arg("yy");
+ msg << QString(tr("%1: Year as 4-digit number (2015)")).arg("yyyy");
+ msg << tr("Text may be contained within single-quotes to ignore replacements");
+ QMessageBox::information(this, tr("Date Codes"), msg.join("\n") );
+}
diff --git a/src-qt5/core-utils/lumina-config/pages/page_session_options.h b/src-qt5/core-utils/lumina-config/pages/page_session_options.h
new file mode 100644
index 00000000..bd293972
--- /dev/null
+++ b/src-qt5/core-utils/lumina-config/pages/page_session_options.h
@@ -0,0 +1,39 @@
+//===========================================
+// Lumina Desktop Source Code
+// Copyright (c) 2016, Ken Moore
+// Available under the 3-clause BSD license
+// See the LICENSE file for full details
+//===========================================
+#ifndef _LUMINA_CONFIG_PAGE_SESSION_OPTIONS_H
+#define _LUMINA_CONFIG_PAGE_SESSION_OPTIONS_H
+#include "../globals.h"
+#include "PageWidget.h"
+
+namespace Ui{
+ class page_session_options;
+};
+
+class page_session_options : public PageWidget{
+ Q_OBJECT
+public:
+ page_session_options(QWidget *parent);
+ ~page_session_options();
+
+public slots:
+ void SaveSettings();
+ void LoadSettings(int screennum = -1);
+ void updateIcons();
+
+private:
+ Ui::page_session_options *ui;
+
+private slots:
+ void sessionChangeUserIcon();
+ void sessionResetSys();
+ void sessionResetLumina();
+ void sessionLoadTimeSample();
+ void sessionShowTimeCodes();
+ void sessionLoadDateSample();
+ void sessionShowDateCodes();
+};
+#endif
diff --git a/src-qt5/core-utils/lumina-config/pages/page_session_options.ui b/src-qt5/core-utils/lumina-config/pages/page_session_options.ui
index 03453d6d..b0e5fb91 100644
--- a/src-qt5/core-utils/lumina-config/pages/page_session_options.ui
+++ b/src-qt5/core-utils/lumina-config/pages/page_session_options.ui
@@ -15,16 +15,16 @@
</property>
<layout class="QGridLayout" name="gridLayout">
<property name="leftMargin">
- <number>0</number>
+ <number>6</number>
</property>
<property name="topMargin">
- <number>0</number>
+ <number>6</number>
</property>
<property name="rightMargin">
- <number>0</number>
+ <number>6</number>
</property>
<property name="bottomMargin">
- <number>0</number>
+ <number>6</number>
</property>
<item row="0" column="0">
<layout class="QVBoxLayout" name="verticalLayout_4">
diff --git a/src-qt5/core-utils/lumina-config/pages/page_theme.cpp b/src-qt5/core-utils/lumina-config/pages/page_theme.cpp
new file mode 100644
index 00000000..781e650d
--- /dev/null
+++ b/src-qt5/core-utils/lumina-config/pages/page_theme.cpp
@@ -0,0 +1,168 @@
+//===========================================
+// Lumina-DE source code
+// Copyright (c) 2016, Ken Moore
+// Available under the 3-clause BSD license
+// See the LICENSE file for full details
+//===========================================
+#include "page_theme.h"
+#include "ui_page_theme.h"
+
+#include "../ColorDialog.h"
+#include "../ThemeDialog.h"
+//==========
+// PUBLIC
+//==========
+page_theme::page_theme(QWidget *parent) : PageWidget(parent), ui(new Ui::page_theme()){
+ ui->setupUi(this);
+ loading = false;
+ PINFO = new LPlugins(); //load the info class
+ connect(ui->spin_session_fontsize, SIGNAL(valueChanged(int)), this, SLOT(settingsChanged()) );
+ connect(ui->combo_session_themefile, SIGNAL(currentIndexChanged(int)), this, SLOT(settingsChanged()) );
+ connect(ui->combo_session_colorfile, SIGNAL(currentIndexChanged(int)), this, SLOT(settingsChanged()) );
+ connect(ui->combo_session_icontheme, SIGNAL(currentIndexChanged(int)), this, SLOT(settingsChanged()) );
+ connect(ui->font_session_theme, SIGNAL(currentIndexChanged(int)), this, SLOT(settingsChanged()) );
+ connect(ui->tool_session_newcolor, SIGNAL(clicked()), this, SLOT(sessionEditColor()) );
+ connect(ui->tool_session_newtheme, SIGNAL(clicked()), this, SLOT(sessionEditTheme()) );
+
+ updateIcons();
+}
+
+page_theme::~page_theme(){
+
+}
+
+//================
+// PUBLIC SLOTS
+//================
+void page_theme::SaveSettings(){
+ QString themefile = ui->combo_session_themefile->itemData( ui->combo_session_themefile->currentIndex() ).toString();
+ QString colorfile = ui->combo_session_colorfile->itemData( ui->combo_session_colorfile->currentIndex() ).toString();
+ QString iconset = ui->combo_session_icontheme->currentText();
+ QString font = ui->font_session_theme->currentFont().family();
+ QString fontsize = QString::number(ui->spin_session_fontsize->value())+"pt";
+ //qDebug() << "Saving theme options:" << themefile << colorfile << iconset << font << fontsize;
+ LTHEME::setCurrentSettings( themefile, colorfile, iconset, font, fontsize);
+ LTHEME::setCursorTheme(ui->combo_session_cursortheme->currentText());
+ emit HasPendingChanges(false);
+}
+
+void page_theme::LoadSettings(int){
+ emit HasPendingChanges(false);
+ emit ChangePageTitle( tr("Theme Settings") );
+
+ loading = true;
+ //Load the available settings
+ ui->combo_session_cursortheme->clear();
+ ui->combo_session_cursortheme->addItems( LTHEME::availableSystemCursors() );
+
+ui->combo_session_themefile->clear();
+ ui->combo_session_colorfile->clear();
+ ui->combo_session_icontheme->clear();
+ QStringList current = LTHEME::currentSettings();
+ // - local theme templates
+ QStringList tmp = LTHEME::availableLocalThemes();
+ tmp.sort();
+ for(int i=0; i<tmp.length(); i++){
+ ui->combo_session_themefile->addItem(tmp[i].section("::::",0,0)+" ("+tr("Local")+")", tmp[i].section("::::",1,1));
+ if(tmp[i].section("::::",1,1)==current[0]){ ui->combo_session_themefile->setCurrentIndex(ui->combo_session_themefile->count()-1); }
+ }
+ // - system theme templates
+ tmp = LTHEME::availableSystemThemes();
+ tmp.sort();
+ for(int i=0; i<tmp.length(); i++){
+ ui->combo_session_themefile->addItem(tmp[i].section("::::",0,0)+" ("+tr("System")+")", tmp[i].section("::::",1,1));
+ if(tmp[i].section("::::",1,1)==current[0]){ ui->combo_session_themefile->setCurrentIndex(ui->combo_session_themefile->count()-1); }
+ }
+ // - local color schemes
+ tmp = LTHEME::availableLocalColors();
+ tmp.sort();
+ for(int i=0; i<tmp.length(); i++){
+ ui->combo_session_colorfile->addItem(tmp[i].section("::::",0,0)+" ("+tr("Local")+")", tmp[i].section("::::",1,1));
+ if(tmp[i].section("::::",1,1)==current[1]){ ui->combo_session_colorfile->setCurrentIndex(ui->combo_session_colorfile->count()-1); }
+ }
+ // - system color schemes
+ tmp = LTHEME::availableSystemColors();
+ tmp.sort();
+ for(int i=0; i<tmp.length(); i++){
+ ui->combo_session_colorfile->addItem(tmp[i].section("::::",0,0)+" ("+tr("System")+")", tmp[i].section("::::",1,1));
+ if(tmp[i].section("::::",1,1)==current[1]){ ui->combo_session_colorfile->setCurrentIndex(ui->combo_session_colorfile->count()-1); }
+ }
+ // - icon themes
+ tmp = LTHEME::availableSystemIcons();
+ tmp.sort();
+ for(int i=0; i<tmp.length(); i++){
+ ui->combo_session_icontheme->addItem(tmp[i]);
+ if(tmp[i]==current[2]){ ui->combo_session_icontheme->setCurrentIndex(i); }
+ }
+ // - Font
+ ui->font_session_theme->setCurrentFont( QFont(current[3]) );
+ // - Font Size
+ ui->spin_session_fontsize->setValue( current[4].section("p",0,0).toInt() );
+
+ int cur = ui->combo_session_cursortheme->findText( LTHEME::currentCursor() );
+ if(cur>=0){ ui->combo_session_cursortheme->setCurrentIndex(cur); }
+
+ QApplication::processEvents();
+ loading = false;
+}
+
+void page_theme::updateIcons(){
+ ui->tool_session_newtheme->setIcon( LXDG::findIcon("preferences-desktop-theme","") );
+ ui->tool_session_newcolor->setIcon( LXDG::findIcon("preferences-desktop-color","") );
+}
+
+//=================
+// PRIVATE SLOTS
+//=================
+void page_theme::sessionEditColor(){
+ //Get the current color file
+ QString file = ui->combo_session_colorfile->itemData( ui->combo_session_colorfile->currentIndex() ).toString();
+ //Open the color edit dialog
+ ColorDialog dlg(this, PINFO, file);
+ dlg.exec();
+ //Check whether the file got saved/changed
+ if(dlg.colorname.isEmpty() || dlg.colorpath.isEmpty() ){ return; } //cancelled
+ //Reload the color list and activate the new color
+ // - local color schemes
+ ui->combo_session_colorfile->clear();
+ QStringList tmp = LTHEME::availableLocalColors();
+ tmp.sort();
+ for(int i=0; i<tmp.length(); i++){
+ ui->combo_session_colorfile->addItem(tmp[i].section("::::",0,0)+" ("+tr("Local")+")", tmp[i].section("::::",1,1));
+ if(tmp[i].section("::::",1,1)==dlg.colorpath){ ui->combo_session_colorfile->setCurrentIndex(ui->combo_session_colorfile->count()-1); }
+ }
+ // - system color schemes
+ tmp = LTHEME::availableSystemColors();
+ tmp.sort();
+ for(int i=0; i<tmp.length(); i++){
+ ui->combo_session_colorfile->addItem(tmp[i].section("::::",0,0)+" ("+tr("System")+")", tmp[i].section("::::",1,1));
+ if(tmp[i].section("::::",1,1)==dlg.colorpath){ ui->combo_session_colorfile->setCurrentIndex(ui->combo_session_colorfile->count()-1); }
+ }
+ emit HasPendingChanges(true);
+}
+
+void page_theme::sessionEditTheme(){
+ QString file = ui->combo_session_themefile->itemData( ui->combo_session_themefile->currentIndex() ).toString();
+ //Open the theme editor dialog
+ ThemeDialog dlg(this, PINFO, file);
+ dlg.exec();
+ //Check for file change/save
+ if(dlg.themename.isEmpty() || dlg.themepath.isEmpty()){ return; } //cancelled
+ //Reload the theme list and activate the new theme
+ ui->combo_session_themefile->clear();
+ // - local theme templates
+ QStringList tmp = LTHEME::availableLocalThemes();
+ tmp.sort();
+ for(int i=0; i<tmp.length(); i++){
+ ui->combo_session_themefile->addItem(tmp[i].section("::::",0,0)+" ("+tr("Local")+")", tmp[i].section("::::",1,1));
+ if(tmp[i].section("::::",1,1)==dlg.themepath){ ui->combo_session_themefile->setCurrentIndex(ui->combo_session_themefile->count()-1); }
+ }
+ // - system theme templates
+ tmp = LTHEME::availableSystemThemes();
+ tmp.sort();
+ for(int i=0; i<tmp.length(); i++){
+ ui->combo_session_themefile->addItem(tmp[i].section("::::",0,0)+" ("+tr("System")+")", tmp[i].section("::::",1,1));
+ if(tmp[i].section("::::",1,1)==dlg.themepath){ ui->combo_session_themefile->setCurrentIndex(ui->combo_session_themefile->count()-1); }
+ }
+ emit HasPendingChanges(true);
+}
diff --git a/src-qt5/core-utils/lumina-config/pages/page_theme.h b/src-qt5/core-utils/lumina-config/pages/page_theme.h
new file mode 100644
index 00000000..a56fba7b
--- /dev/null
+++ b/src-qt5/core-utils/lumina-config/pages/page_theme.h
@@ -0,0 +1,42 @@
+//===========================================
+// Lumina Desktop Source Code
+// Copyright (c) 2016, Ken Moore
+// Available under the 3-clause BSD license
+// See the LICENSE file for full details
+//===========================================
+#ifndef _LUMINA_CONFIG_PAGE_THEME_H
+#define _LUMINA_CONFIG_PAGE_THEME_H
+#include "../globals.h"
+#include "PageWidget.h"
+
+#include "../LPlugins.h"
+
+namespace Ui{
+ class page_theme;
+};
+
+class page_theme : public PageWidget{
+ Q_OBJECT
+public:
+ page_theme(QWidget *parent);
+ ~page_theme();
+
+public slots:
+ void SaveSettings();
+ void LoadSettings(int screennum);
+ void updateIcons();
+
+private:
+ Ui::page_theme *ui;
+ LPlugins *PINFO;
+ bool loading;
+
+private slots:
+ void settingsChanged(){
+ //qDebug() << "Setting Changed:" << !loading;
+ if(!loading){ emit HasPendingChanges(true); }
+ }
+ void sessionEditColor();
+ void sessionEditTheme();
+};
+#endif
diff --git a/src-qt5/core-utils/lumina-config/pages/page_theme.ui b/src-qt5/core-utils/lumina-config/pages/page_theme.ui
index 9c5e2064..decd543f 100644
--- a/src-qt5/core-utils/lumina-config/pages/page_theme.ui
+++ b/src-qt5/core-utils/lumina-config/pages/page_theme.ui
@@ -15,16 +15,16 @@
</property>
<layout class="QFormLayout" name="formLayout">
<property name="leftMargin">
- <number>0</number>
+ <number>9</number>
</property>
<property name="topMargin">
- <number>0</number>
+ <number>9</number>
</property>
<property name="rightMargin">
- <number>0</number>
+ <number>9</number>
</property>
<property name="bottomMargin">
- <number>0</number>
+ <number>9</number>
</property>
<item row="0" column="0">
<widget class="QLabel" name="label_12">
diff --git a/src-qt5/core-utils/lumina-config/pages/page_wallpaper.cpp b/src-qt5/core-utils/lumina-config/pages/page_wallpaper.cpp
new file mode 100644
index 00000000..b54e07bd
--- /dev/null
+++ b/src-qt5/core-utils/lumina-config/pages/page_wallpaper.cpp
@@ -0,0 +1,282 @@
+//===========================================
+// Lumina Desktop Source Code
+// Copyright (c) 2016, Ken Moore
+// Available under the 3-clause BSD license
+// See the LICENSE file for full details
+//===========================================
+#include "page_wallpaper.h"
+#include "ui_page_wallpaper.h"
+#include "getPage.h"
+
+//==========
+// PUBLIC
+//==========
+page_wallpaper::page_wallpaper(QWidget *parent) : PageWidget(parent), ui(new Ui::page_wallpaper()){
+ ui->setupUi(this);
+ DEFAULTBG = LOS::LuminaShare()+"/desktop-background.jpg";
+ updateIcons();
+ connect(ui->combo_desk_bg, SIGNAL(currentIndexChanged(int)), this, SLOT(deskbgchanged()) );
+ connect(ui->radio_desk_multi, SIGNAL(toggled(bool)), this, SLOT(desktimechanged()) );
+ connect(ui->tool_desk_addbg, SIGNAL(clicked()), this, SLOT(deskbgadded()) );
+ connect(ui->tool_desk_rmbg, SIGNAL(clicked()), this, SLOT(deskbgremoved()) );
+ connect(ui->spin_desk_min, SIGNAL(valueChanged(int)), this, SLOT(desktimechanged()) );
+ connect(ui->combo_desk_layout, SIGNAL(currentIndexChanged(int)), this, SLOT(desktimechanged()) ); //just need to poke the save routines
+}
+
+page_wallpaper::~page_wallpaper(){
+
+}
+
+//================
+// PUBLIC SLOTS
+//================
+void page_wallpaper::SaveSettings(){
+ QSettings settings("lumina-desktop","desktopsettings");
+ QString DPrefix = "desktop-"+QString::number(cScreen)+"/";
+ QStringList bgs; //get the list of backgrounds to use
+ if(ui->radio_desk_multi->isChecked()){
+ for(int i=0; i<ui->combo_desk_bg->count(); i++){
+ bgs << ui->combo_desk_bg->itemData(i).toString();
+ }
+ }else if(ui->combo_desk_bg->count() > 0){
+ bgs << ui->combo_desk_bg->itemData( ui->combo_desk_bg->currentIndex() ).toString();
+ bgs.removeAll("default");
+ }
+ if(bgs.isEmpty()){ bgs << "default"; } //Make sure to always fall back on the default
+ settings.setValue(DPrefix+"background/filelist", bgs);
+ settings.setValue(DPrefix+"background/minutesToChange", ui->spin_desk_min->value());
+ settings.setValue(DPrefix+"background/format", ui->combo_desk_layout->currentData().toString());
+
+ emit HasPendingChanges(false);
+}
+
+void page_wallpaper::LoadSettings(int screennum){
+ emit HasPendingChanges(false);
+ emit ChangePageTitle( tr("Wallpaper Settings") );
+ cScreen = screennum; //save for later
+ loading = true;
+ QSettings settings("lumina-desktop","desktopsettings");
+ QString DPrefix = "desktop-"+QString::number(cScreen)+"/";
+
+ QStringList bgs = settings.value(DPrefix+"background/filelist", QStringList()<<"default").toStringList();
+ ui->combo_desk_bg->clear();
+ for(int i=0; i<bgs.length(); i++){
+ if(bgs[i]=="default"){ ui->combo_desk_bg->addItem( QIcon(DEFAULTBG), tr("System Default"), bgs[i] ); }
+ else if(bgs[i].startsWith("rgb(")){ui->combo_desk_bg->addItem(QString(tr("Solid Color: %1")).arg(bgs[i]), bgs[i]); }
+ //else{ ui->combo_desk_bg->addItem( QIcon(QPixmap(bgs[i]).scaled(64,64)), bgs[i].section("/",-1), bgs[i] ); }
+ else{ ui->combo_desk_bg->addItem( bgs[i].section("/",-1), bgs[i] ); } //disable the thumbnail - takes a long time for large collections of files
+ }
+
+ ui->radio_desk_multi->setEnabled(bgs.length()>1);
+ if(bgs.length()>1){ ui->radio_desk_multi->setChecked(true);}
+ else{ ui->radio_desk_single->setChecked(true); }
+ ui->spin_desk_min->setValue( settings.value(DPrefix+"background/minutesToChange", 5).toInt() );
+ desktimechanged(); //ensure the display gets updated (in case the radio selection did not change);
+ QRect geom = QApplication::desktop()->screenGeometry(cScreen);
+ ui->label_desk_res->setText( tr("Screen Resolution:")+"\n"+QString::number(geom.width())+"x"+QString::number(geom.height()) );
+ int tmp = ui->combo_desk_layout->findData(settings.value(DPrefix+"background/format","stretch"));
+ if(tmp>=0){ ui->combo_desk_layout->setCurrentIndex(tmp); }
+ loading = false;
+}
+
+void page_wallpaper::updateIcons(){
+ ui->tool_desk_addbg->setIcon( LXDG::findIcon("list-add","") );
+ ui->tool_desk_rmbg->setIcon( LXDG::findIcon("list-remove","") );
+ updateMenus();
+}
+
+//=================
+// PRIVATE
+//=================
+QString page_wallpaper::getColorStyle(QString current, bool allowTransparency){
+ QString out;
+ //Convert the current color string into a QColor
+ QStringList col = current.section(")",0,0).section("(",1,1).split(",");
+ if(col.length()!=4){ col.clear(); col << "255" << "255" << "255" << "255"; }
+ QColor ccol = QColor(col[0].toInt(), col[1].toInt(), col[2].toInt(), col[3].toInt()); //RGBA
+ QColor ncol;
+ if(allowTransparency){ ncol= QColorDialog::getColor(ccol, this, tr("Select Color"), QColorDialog::ShowAlphaChannel); }
+ else{ ncol= QColorDialog::getColor(ccol, this, tr("Select Color")); }
+ //Now convert the new color into a usable string and return
+ if(ncol.isValid()){ //if the dialog was not cancelled
+ if(allowTransparency){
+ out = "rgba("+QString::number(ncol.red())+","+QString::number(ncol.green())+","+QString::number(ncol.blue())+","+QString::number(ncol.alpha())+")";
+ }else{
+ out = "rgb("+QString::number(ncol.red())+","+QString::number(ncol.green())+","+QString::number(ncol.blue())+")";
+ }
+ }
+ return out;
+}
+
+//=================
+// PRIVATE SLOTS
+//=================
+void page_wallpaper::updateMenus(){
+ //Background file menu (different ways of loading files)
+ if(ui->tool_desk_addbg->menu()==0){ ui->tool_desk_addbg->setMenu(new QMenu(this)); }
+ ui->tool_desk_addbg->menu()->clear();
+ ui->tool_desk_addbg->menu()->addAction(LXDG::findIcon("document-new",""), tr("File(s)"), this, SLOT(deskbgadded()) );
+ ui->tool_desk_addbg->menu()->addAction(LXDG::findIcon("folder-new",""), tr("Directory (Single)"), this, SLOT(deskbgdiradded()) );
+ ui->tool_desk_addbg->menu()->addAction(LXDG::findIcon("document-open-folder",""), tr("Directory (Recursive)"), this, SLOT(deskbgdirradded()) );
+ ui->tool_desk_addbg->menu()->addAction(LXDG::findIcon("format-fill-color",""), tr("Solid Color"), this, SLOT(deskbgcoloradded()) );
+
+ //Available Wallpaper layout options
+ ui->combo_desk_layout->clear();
+ ui->combo_desk_layout->addItem(tr("Automatic"), "stretch");
+ ui->combo_desk_layout->addItem(tr("Fullscreen"), "full");
+ ui->combo_desk_layout->addItem(tr("Fit screen"), "fit");
+ ui->combo_desk_layout->addItem(tr("Tile"), "tile");
+ ui->combo_desk_layout->addItem(tr("Center"), "center");
+ ui->combo_desk_layout->addItem(tr("Top Left"), "topleft");
+ ui->combo_desk_layout->addItem(tr("Top Right"), "topright");
+ ui->combo_desk_layout->addItem(tr("Bottom Left"), "bottomleft");
+ ui->combo_desk_layout->addItem(tr("Bottom Right"), "bottomright");
+
+}
+
+void page_wallpaper::deskbgchanged(){
+ //Load the new image preview
+ if(ui->combo_desk_bg->count()==0){
+ ui->label_desk_bgview->setPixmap(QPixmap());
+ ui->label_desk_bgview->setText(tr("No Background")+"\n"+tr("(use system default)"));
+ ui->label_desk_bgview->setStyleSheet("");
+ }else{
+ QString path = ui->combo_desk_bg->itemData( ui->combo_desk_bg->currentIndex() ).toString();
+ if(path=="default"){ path = DEFAULTBG; }
+ if(QFile::exists(path)){
+ QSize sz = ui->label_desk_bgview->size();
+ sz.setWidth( sz.width() - (2*ui->label_desk_bgview->frameWidth()) );
+ sz.setHeight( sz.height() - (2*ui->label_desk_bgview->frameWidth()) );
+ //Update the preview/thumbnail for this item
+ QPixmap pix(path);
+ ui->label_desk_bgview->setPixmap( pix.scaled(sz, Qt::KeepAspectRatio, Qt::SmoothTransformation) );
+ ui->combo_desk_bg->setItemIcon(ui->combo_desk_bg->currentIndex(), pix.scaled(64,64) );
+ ui->label_desk_bgview->setStyleSheet("");
+ }else if(path.startsWith("rgb(")){
+ ui->label_desk_bgview->setPixmap(QPixmap());
+ ui->label_desk_bgview->setText("");
+ ui->label_desk_bgview->setStyleSheet("background-color: "+path+";");
+ }else{
+ ui->label_desk_bgview->setPixmap(QPixmap());
+ ui->label_desk_bgview->setText(tr("File does not exist"));
+ ui->label_desk_bgview->setStyleSheet("");
+ }
+ }
+ //See if this constitues a change to the current settings and enable the save button
+ if(!loading && ui->radio_desk_single->isChecked() && cBG!=ui->combo_desk_bg->currentIndex()){ emit HasPendingChanges(true); }
+ cBG = ui->combo_desk_bg->currentIndex(); //keep track of this for later
+ //Disable the background rotation option if only one background selected
+ if(ui->combo_desk_bg->count()<2){
+ ui->radio_desk_single->setChecked(true);
+ ui->radio_desk_multi->setEnabled(false);
+ ui->spin_desk_min->setEnabled(false);
+ }else{
+ ui->radio_desk_multi->setEnabled(true);
+ ui->spin_desk_min->setEnabled(ui->radio_desk_multi->isChecked());
+ }
+
+ //Disable the bg remove button if no backgrounds loaded
+ ui->tool_desk_rmbg->setEnabled(ui->combo_desk_bg->count()>0);
+ ui->label_desk_bgview->setMinimumSize(10,10);
+}
+
+void page_wallpaper::desktimechanged(){
+ ui->spin_desk_min->setEnabled(ui->radio_desk_multi->isChecked());
+ if(!loading){ emit HasPendingChanges(true); }
+}
+
+void page_wallpaper::deskbgremoved(){
+ if(ui->combo_desk_bg->count()<1){ return; } //nothing to remove
+ ui->combo_desk_bg->removeItem( ui->combo_desk_bg->currentIndex() );
+ emit HasPendingChanges(true);
+}
+
+void page_wallpaper::deskbgadded(){
+ //Prompt the user to find an image file to use for a background
+ QString dir = LOS::LuminaShare().section("/lumina-desktop",0,0)+"/wallpapers/Lumina-DE";
+ qDebug() << "Looking for wallpaper dir:" << dir;
+ if( !QFile::exists(dir) ){ dir = QDir::homePath(); }
+ QStringList imgs = LUtils::imageExtensions();
+ for(int i=0; i<imgs.length(); i++){ imgs[i].prepend("*."); }
+ QStringList bgs = QFileDialog::getOpenFileNames(this, tr("Find Background Image(s)"), dir, "Images ("+imgs.join(" ")+");;All Files (*)");
+ if(bgs.isEmpty()){ return; }
+ for(int i=0; i<bgs.length(); i++){
+ ui->combo_desk_bg->addItem( QIcon(bgs[i]), bgs[i].section("/",-1), bgs[i]);
+ }
+ //Now move to the last item in the list (the new image(s));
+ ui->combo_desk_bg->setCurrentIndex( ui->combo_desk_bg->count()-1 );
+ //If multiple items selected, automatically enable the background rotation option
+ if(bgs.length() > 1 && !ui->radio_desk_multi->isChecked()){
+ ui->radio_desk_multi->setChecked(true);
+ }
+ emit HasPendingChanges(true);
+}
+
+void page_wallpaper::deskbgcoloradded(){
+ //Prompt the user to select a color (no transparency allowed)
+ QString color = getColorStyle("",false); //no initial color
+ if(color.isEmpty()){ return; }
+ //Add it to the list
+ ui->combo_desk_bg->addItem( QString(tr("Solid Color: %1")).arg(color), color);
+ //Now move to the last item in the list (the new image(s));
+ ui->combo_desk_bg->setCurrentIndex( ui->combo_desk_bg->count()-1 );
+
+ emit HasPendingChanges(true);
+}
+
+void page_wallpaper::deskbgdiradded(){
+ //Add the files from a single directory
+ QString dir = LOS::LuminaShare().section("/lumina-desktop",0,0)+"/wallpapers/Lumina-DE";
+ qDebug() << "Looking for wallpaper dir:" << dir;
+ if( !QFile::exists(dir) ){ dir = QDir::homePath(); }
+ dir = QFileDialog::getExistingDirectory(this, tr("Find Background Image Directory"), dir, QFileDialog::ReadOnly);
+ if(dir.isEmpty()){ return; }
+ //Got a directory - go ahead and find all the valid image files within it
+ QStringList imgs = LUtils::imageExtensions();
+ for(int i=0; i<imgs.length(); i++){ imgs[i].prepend("*."); }
+ QDir qdir(dir);
+ QStringList bgs = qdir.entryList(imgs, QDir::Files | QDir::NoDotAndDotDot, QDir::Name);
+ if(bgs.isEmpty()){ return; }
+ for(int i=0; i<bgs.length(); i++){
+ ui->combo_desk_bg->addItem( bgs[i], qdir.absoluteFilePath(bgs[i]));
+ }
+ //Now move to the last item in the list (the new image(s));
+ ui->combo_desk_bg->setCurrentIndex( ui->combo_desk_bg->count()-1 );
+ //If multiple items selected, automatically enable the background rotation option
+ if(bgs.length() > 1 && !ui->radio_desk_multi->isChecked()){
+ ui->radio_desk_multi->setChecked(true);
+ }
+ emit HasPendingChanges(true);
+}
+
+void page_wallpaper::deskbgdirradded(){
+ //Recursively add files from a directory
+ QString dir = LOS::LuminaShare().section("/lumina-desktop",0,0)+"/wallpapers/Lumina-DE";
+ qDebug() << "Looking for wallpaper dir:" << dir;
+ if( !QFile::exists(dir) ){ dir = QDir::homePath(); }
+ dir = QFileDialog::getExistingDirectory(this, tr("Find Background Image Directory"), dir, QFileDialog::ReadOnly);
+ if(dir.isEmpty()){ return; }
+ //Got a directory - go ahead and get all the valid image file formats
+ QStringList imgs = LUtils::imageExtensions();
+ for(int i=0; i<imgs.length(); i++){ imgs[i].prepend("*."); }
+ //Now load the directory and add all the valid files
+ QStringList dirs = LUtils::listSubDirectories(dir, true); //find/list all the dirs
+ dirs.prepend(dir); //make sure the main dir is also listed
+ QStringList bgs;
+ for(int d=0; d<dirs.length(); d++){
+ QDir qdir(dirs[d]);
+ QStringList tmp = qdir.entryList(imgs, QDir::Files | QDir::NoDotAndDotDot, QDir::Name);
+ for(int j=0; j<tmp.length(); j++){ bgs << qdir.absoluteFilePath(tmp[j]); }
+ }
+ //Now add all the files into the widget
+ for(int i=0; i<bgs.length(); i++){
+ ui->combo_desk_bg->addItem( bgs[i].section("/",-1), bgs[i] );
+ }
+ //Now move to the last item in the list (the new image(s));
+ ui->combo_desk_bg->setCurrentIndex( ui->combo_desk_bg->count()-1 );
+ //If multiple items selected, automatically enable the background rotation option
+ if(bgs.length() > 1 && !ui->radio_desk_multi->isChecked()){
+ ui->radio_desk_multi->setChecked(true);
+ }
+ emit HasPendingChanges(true);
+}
diff --git a/src-qt5/core-utils/lumina-config/pages/page_wallpaper.h b/src-qt5/core-utils/lumina-config/pages/page_wallpaper.h
new file mode 100644
index 00000000..ece613f9
--- /dev/null
+++ b/src-qt5/core-utils/lumina-config/pages/page_wallpaper.h
@@ -0,0 +1,52 @@
+//===========================================
+// Lumina Desktop Source Code
+// Copyright (c) 2016, Ken Moore
+// Available under the 3-clause BSD license
+// See the LICENSE file for full details
+//===========================================
+#ifndef _LUMINA_CONFIG_PAGE_WALLPAPER_H
+#define _LUMINA_CONFIG_PAGE_WALLPAPER_H
+#include "../globals.h"
+#include "PageWidget.h"
+
+namespace Ui{
+ class page_wallpaper;
+};
+
+class page_wallpaper : public PageWidget{
+ Q_OBJECT
+public:
+ page_wallpaper(QWidget *parent);
+ ~page_wallpaper();
+
+ bool needsScreenSelector(){ return true; }
+
+public slots:
+ void SaveSettings();
+ void LoadSettings(int screennum);
+ void updateIcons();
+
+private:
+ Ui::page_wallpaper *ui;
+ int cScreen, cBG; //current screen number/background
+ QString DEFAULTBG;
+ bool loading;
+
+ QString getColorStyle(QString current, bool allowTransparency);
+
+private slots:
+ void updateMenus();
+ void deskbgchanged();
+ void desktimechanged();
+ void deskbgremoved();
+ void deskbgadded();
+ void deskbgcoloradded();
+ void deskbgdiradded();
+ void deskbgdirradded();
+
+protected:
+ void resizeEvent(QResizeEvent*){
+ deskbgchanged(); //update the wallpaper preview
+ }
+};
+#endif
diff --git a/src-qt5/core-utils/lumina-config/pages/page_wallpaper.ui b/src-qt5/core-utils/lumina-config/pages/page_wallpaper.ui
index 9dfbef2c..ca927c69 100644
--- a/src-qt5/core-utils/lumina-config/pages/page_wallpaper.ui
+++ b/src-qt5/core-utils/lumina-config/pages/page_wallpaper.ui
@@ -15,16 +15,16 @@
</property>
<layout class="QVBoxLayout" name="verticalLayout">
<property name="leftMargin">
- <number>0</number>
+ <number>9</number>
</property>
<property name="topMargin">
- <number>0</number>
+ <number>9</number>
</property>
<property name="rightMargin">
- <number>0</number>
+ <number>9</number>
</property>
<property name="bottomMargin">
- <number>0</number>
+ <number>9</number>
</property>
<item>
<layout class="QHBoxLayout" name="horizontalLayout_4">
diff --git a/src-qt5/core-utils/lumina-config/pages/pages.pri b/src-qt5/core-utils/lumina-config/pages/pages.pri
index 2ebf2c46..5e4ffca9 100644
--- a/src-qt5/core-utils/lumina-config/pages/pages.pri
+++ b/src-qt5/core-utils/lumina-config/pages/pages.pri
@@ -1,42 +1,43 @@
HEADERS += $${PWD}/getPage.h \
$${PWD}/PageWidget.h \
- $${PWD}/page_main.h
-# $${PWD}/page_autostart.h \
-# $${PWD}/page_defaultapps.h \
-# $${PWD}/page_fluxbox_keys.h \
-# $${PWD}/page_fluxbox_settings.h \
-# $${PWD}/page_interface_desktop.h \
-# $${PWD}/page_interface_menu.h \
-# $${PWD}/page_interface_panels.h \
-# $${PWD}/page_session_locale.h \
-# $${PWD}/page_session_options.h \
-# $${PWD}/page_theme.h \
-# $${PWD}/page_wallpaper.h
-
+ $${PWD}/page_main.h \
+ $${PWD}/page_wallpaper.h \
+ $${PWD}/page_theme.h \
+ $${PWD}/page_autostart.h \
+ $${PWD}/page_defaultapps.h \
+ $${PWD}/page_fluxbox_keys.h \
+ $${PWD}/page_fluxbox_settings.h \
+ $${PWD}/page_interface_desktop.h \
+ $${PWD}/page_interface_menu.h \
+ $${PWD}/page_interface_panels.h \
+ $${PWD}/page_session_locale.h \
+ $${PWD}/page_session_options.h
+
+
+SOURCES += $${PWD}/page_main.cpp \
+ $${PWD}/page_wallpaper.cpp \
+ $${PWD}/page_theme.cpp \
+ $${PWD}/page_autostart.cpp \
+ $${PWD}/page_defaultapps.cpp \
+ $${PWD}/page_fluxbox_keys.cpp \
+ $${PWD}/page_fluxbox_settings.cpp \
+ $${PWD}/page_interface_desktop.cpp \
+ $${PWD}/page_interface_menu.cpp \
+ $${PWD}/page_interface_panels.cpp \
+ $${PWD}/page_session_locale.cpp \
+ $${PWD}/page_session_options.cpp
-SOURCES += $${PWD}/page_main.cpp
-# $${PWD}/page_autostart.cpp \
-# $${PWD}/page_defaultapps.cpp \
-# $${PWD}/page_fluxbox_keys.cpp \
-# $${PWD}/page_fluxbox_settings.cpp \
-# $${PWD}/page_interface_desktop.cpp \
-# $${PWD}/page_interface_menu.cpp \
-# $${PWD}/page_interface_panels.cpp \
-# $${PWD}/page_session_locale.cpp \
-# $${PWD}/page_session_options.cpp \
-# $${PWD}/page_theme.cpp \
-# $${PWD}/page_wallpaper.cpp
-FORMS += $${PWD}/page_main.ui
-# $${PWD}/page_autostart.ui \
-# $${PWD}/page_defaultapps.ui \
-# $${PWD}/page_fluxbox_keys.ui \
-# $${PWD}/page_fluxbox_settings.ui \
-# $${PWD}/page_interface_desktop.ui \
-# $${PWD}/page_interface_menu.ui \
-# $${PWD}/page_interface_panels.ui \
-# $${PWD}/page_session_locale.ui \
-# $${PWD}/page_session_options.ui \
-# $${PWD}/page_theme.ui \
-# $${PWD}/page_wallpaper.ui
+FORMS += $${PWD}/page_main.ui \
+ $${PWD}/page_wallpaper.ui \
+ $${PWD}/page_theme.ui \
+ $${PWD}/page_autostart.ui \
+ $${PWD}/page_defaultapps.ui \
+ $${PWD}/page_fluxbox_keys.ui \
+ $${PWD}/page_fluxbox_settings.ui \
+ $${PWD}/page_interface_desktop.ui \
+ $${PWD}/page_interface_menu.ui \
+ $${PWD}/page_interface_panels.ui \
+ $${PWD}/page_session_locale.ui \
+ $${PWD}/page_session_options.ui
bgstack15