From f4b89e8c1331efb29c65808cf7f5e273108ef3fa Mon Sep 17 00:00:00 2001 From: Arnar Mar Sig Date: Fri, 3 Feb 2017 00:10:34 +0000 Subject: * Initialize PanelWidget layout in the constructor. * Instead of removing all PanelWidgets in LoadSettings, remove any extra panels and add more if needed. --- .../lumina-config/pages/page_interface_panels.cpp | 35 ++++++++++++++-------- 1 file changed, 22 insertions(+), 13 deletions(-) (limited to 'src-qt5/core-utils/lumina-config') 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 index 827061af..3c355aa7 100644 --- a/src-qt5/core-utils/lumina-config/pages/page_interface_panels.cpp +++ b/src-qt5/core-utils/lumina-config/pages/page_interface_panels.cpp @@ -21,6 +21,13 @@ page_interface_panels::page_interface_panels(QWidget *parent) : PageWidget(paren connect(ui->tool_panels_add, SIGNAL(clicked()), this, SLOT(newPanel()) ); updateIcons(); setupProfiles(); + + //Create panels container + QHBoxLayout *panels_layout = new QHBoxLayout(); + panels_layout->setContentsMargins(0,0,0,0); + panels_layout->setAlignment(Qt::AlignLeft); + panels_layout->addStretch(); + ui->scroll_panels->widget()->setLayout(panels_layout); } page_interface_panels::~page_interface_panels(){ @@ -53,28 +60,30 @@ void page_interface_panels::LoadSettings(int screennum){ QString screenID = QApplication::screens().at(cscreen)->name(); QString DPrefix = "desktop-"+screenID+"/"; int panelnumber = settings->value(DPrefix+"panels",-1).toInt(); + QBoxLayout *panels_layout = static_cast(ui->scroll_panels->widget()->layout()); -//First clean any current panels - for(int i=0; iscroll_panels->widget()->layout()==0){ - ui->scroll_panels->widget()->setLayout( new QHBoxLayout() ); - ui->scroll_panels->widget()->layout()->setContentsMargins(0,0,0,0); + //Remove extra panels (if any) + for(int i=panelnumber; iscroll_panels->widget()->layout()->setAlignment(Qt::AlignLeft); - //Clear anything left over in the layout - for(int i=0; iscroll_panels->widget()->layout()->count(); i++){ - delete ui->scroll_panels->widget()->layout()->takeAt(i); + + int current_count = panels_layout->count()-1; + + //Update current panels + for(int i=0; iLoadSettings(settings, cscreen, i); } - for(int i=0; iscroll_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); + panels_layout->insertWidget(panels_layout->count()-1, tmp); } - static_cast(ui->scroll_panels->widget()->layout())->addStretch(); QApplication::processEvents(); loading = false; -- cgit From f08f30ab10bd67bb97db480cbac062d1dfc57c85 Mon Sep 17 00:00:00 2001 From: Arnar Mar Sig Date: Fri, 3 Feb 2017 21:08:23 +0000 Subject: Change the app selection comboBox to list and add search feature. Allow double clicking the app to select it. --- src-qt5/core-utils/lumina-config/AppDialog.h | 34 ++++++++++++++++++++-- src-qt5/core-utils/lumina-config/AppDialog.ui | 42 ++++----------------------- 2 files changed, 36 insertions(+), 40 deletions(-) (limited to 'src-qt5/core-utils/lumina-config') diff --git a/src-qt5/core-utils/lumina-config/AppDialog.h b/src-qt5/core-utils/lumina-config/AppDialog.h index ea7615e2..4eb6471c 100644 --- a/src-qt5/core-utils/lumina-config/AppDialog.h +++ b/src-qt5/core-utils/lumina-config/AppDialog.h @@ -26,10 +26,15 @@ public: AppDialog(QWidget *parent = 0) : QDialog(parent), ui(new Ui::AppDialog){ ui->setupUi(this); //load the designer file appreset = false; - ui->comboBox->clear(); + ui->listApps->clear(); QList APPS = LXDG::sortDesktopNames(APPSLIST->apps(false,false)); //Don't show all/hidden for(int i=0; icomboBox->addItem( LXDG::findIcon(APPS[i]->icon,"application-x-executable"), APPS[i]->name, APPS[i]->filePath); + QListWidgetItem *app = new QListWidgetItem(LXDG::findIcon(APPS[i]->icon,"application-x-executable"), APPS[i]->name); + app->setData(Qt::UserRole, APPS[i]->filePath); + ui->listApps->addItem(app); + } + if(ui->listApps->count()){ + ui->listApps->setCurrentItem(ui->listApps->item(0)); } this->setWindowIcon( LXDG::findIcon("system-search","") ); if(parent!=0){ @@ -56,7 +61,10 @@ public: private slots: void on_buttonBox_accepted(){ - appselected = ui->comboBox->currentData().toString(); + QListWidgetItem *item = ui->listApps->currentItem(); + if(item != nullptr){ + appselected = item->data(Qt::UserRole).toString(); + } this->close(); } void on_buttonBox_rejected(){ @@ -68,6 +76,26 @@ private slots: this->close(); } } + void on_listApps_itemDoubleClicked(QListWidgetItem *item){ + appselected = item->data(Qt::UserRole).toString(); + this->close(); + } + void on_lineSearch_textChanged(const QString &term){ + QListWidgetItem *first_visible = nullptr; + for(int i = 0; i < ui->listApps->count(); i++){ + QListWidgetItem *item = ui->listApps->item(i); + bool visible = item->text().contains(term, Qt::CaseInsensitive); + item->setHidden(!visible); + if(visible && first_visible == nullptr){ + first_visible = item; + } + } + //Select the first app + ui->listApps->setCurrentItem(first_visible); + if(first_visible != nullptr){ + ui->listApps->scrollToItem(first_visible); + } + } }; #endif diff --git a/src-qt5/core-utils/lumina-config/AppDialog.ui b/src-qt5/core-utils/lumina-config/AppDialog.ui index 63323f7d..ec7de974 100644 --- a/src-qt5/core-utils/lumina-config/AppDialog.ui +++ b/src-qt5/core-utils/lumina-config/AppDialog.ui @@ -7,7 +7,7 @@ 0 0 348 - 91 + 300 @@ -15,46 +15,14 @@ - - - Qt::Vertical - - - - 20 - 40 - - - - - - - - - 0 - 0 - - - - - 32 - 32 - + + + Search for.... - - - Qt::Vertical - - - - 20 - 40 - - - + -- cgit From cd433a5466fabe22df271f0e7de088d72a244381 Mon Sep 17 00:00:00 2001 From: Arnar Mar Sig Date: Sat, 4 Feb 2017 22:01:51 +0000 Subject: Add defaultPath parameter to set what app is selected by default. --- src-qt5/core-utils/lumina-config/AppDialog.h | 8 ++++++-- 1 file changed, 6 insertions(+), 2 deletions(-) (limited to 'src-qt5/core-utils/lumina-config') diff --git a/src-qt5/core-utils/lumina-config/AppDialog.h b/src-qt5/core-utils/lumina-config/AppDialog.h index 4eb6471c..2b03fc76 100644 --- a/src-qt5/core-utils/lumina-config/AppDialog.h +++ b/src-qt5/core-utils/lumina-config/AppDialog.h @@ -23,18 +23,22 @@ private: Ui::AppDialog *ui; public: - AppDialog(QWidget *parent = 0) : QDialog(parent), ui(new Ui::AppDialog){ + AppDialog(QWidget *parent = 0, QString defaultPath = "") : QDialog(parent), ui(new Ui::AppDialog){ ui->setupUi(this); //load the designer file appreset = false; ui->listApps->clear(); + QListWidgetItem *defaultItem = nullptr; QList APPS = LXDG::sortDesktopNames(APPSLIST->apps(false,false)); //Don't show all/hidden for(int i=0; iicon,"application-x-executable"), APPS[i]->name); app->setData(Qt::UserRole, APPS[i]->filePath); ui->listApps->addItem(app); + if(APPS[i]->filePath == defaultPath){ + defaultItem = app; + } } if(ui->listApps->count()){ - ui->listApps->setCurrentItem(ui->listApps->item(0)); + ui->listApps->setCurrentItem(defaultItem != nullptr ? defaultItem : ui->listApps->item(0)); } this->setWindowIcon( LXDG::findIcon("system-search","") ); if(parent!=0){ -- cgit From 44925b54a56beca7b05c9a58a6ef5fd17e99d934 Mon Sep 17 00:00:00 2001 From: Arnar Mar Sig Date: Sat, 4 Feb 2017 22:02:53 +0000 Subject: * Remove code duplication from LoadSettings() and fix indentation (tab to space) * Select current app when AppDialog is shown, this works both for basic and advanced but only for a single type. --- .../lumina-config/pages/page_defaultapps.cpp | 191 ++++++++------------- .../lumina-config/pages/page_defaultapps.h | 6 +- 2 files changed, 72 insertions(+), 125 deletions(-) (limited to 'src-qt5/core-utils/lumina-config') diff --git a/src-qt5/core-utils/lumina-config/pages/page_defaultapps.cpp b/src-qt5/core-utils/lumina-config/pages/page_defaultapps.cpp index b2a0896c..2e2d6f0d 100644 --- a/src-qt5/core-utils/lumina-config/pages/page_defaultapps.cpp +++ b/src-qt5/core-utils/lumina-config/pages/page_defaultapps.cpp @@ -42,92 +42,23 @@ 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")){ - XDGDesktop file(tmp); - if(file.type == XDGDesktop::BAD){ - //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","") ); - } + //First load the lumina-open specific defaults + // - Default File Manager + defaultFileManager = LXDG::findDefaultAppForMime("inode/directory"); + if(defaultFileManager.isEmpty()){ defaultFileManager = "lumina-fm"; } + updateDefaultButton(ui->tool_default_filemanager, defaultFileManager); + // - 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")){ - XDGDesktop file(tmp); - if(file.type == XDGDesktop::BAD){ - //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","") ); - } + defaultTerminal = LXDG::findDefaultAppForMime("application/terminal"); //sessionsettings->value("default-terminal", "xterm").toString(); + updateDefaultButton(ui->tool_default_terminal, defaultTerminal); + // - 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")){ - XDGDesktop file(tmp); - if(file.type == XDGDesktop::BAD){ - //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","") ); - } + defaultBrowser = LXDG::findDefaultAppForMime("x-scheme-handler/http"); //appsettings->value("default/webbrowser", "").toString(); + updateDefaultButton(ui->tool_default_webbrowser, defaultBrowser); + // - 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")){ - XDGDesktop file(tmp); - if(file.type == XDGDesktop::BAD){ - //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","") ); - } + defaultEmail = LXDG::findDefaultAppForMime("application/email"); //appsettings->value("default/email", "").toString(); + updateDefaultButton(ui->tool_default_email, defaultEmail); //Now load the XDG mime defaults ui->tree_defaults->clear(); @@ -146,36 +77,37 @@ void page_defaultapps::LoadSettings(int){ QString comment = defMimeList[i].section("::::",3,50); //Now check if this is a new category if(ccat!=cat){ - //New group - group = new QTreeWidgetItem(0); + //New group + group = new QTreeWidgetItem(0); group->setText(0, cat); //add translations for known/common groups later - ui->tree_defaults->addTopLevelItem(group); - ccat = cat; + 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")){ - XDGDesktop file(def); - if(file.type == XDGDesktop::BAD){ - //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","") ); + 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 + it->setData(1, Qt::UserRole, def); + if(def.endsWith(".desktop")){ + XDGDesktop file(def); + if(file.type == XDGDesktop::BAD){ + //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,"") ); } - group->addChild(it); + }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); @@ -194,8 +126,8 @@ void page_defaultapps::updateIcons(){ //================= // PRIVATE //================= -QString page_defaultapps::getSysApp(bool allowreset){ - AppDialog dlg(this); +QString page_defaultapps::getSysApp(bool allowreset, QString defaultPath){ + AppDialog dlg(this, defaultPath); dlg.allowReset(allowreset); dlg.exec(); if(dlg.appreset && allowreset){ @@ -206,6 +138,7 @@ QString page_defaultapps::getSysApp(bool allowreset){ } void page_defaultapps::updateDefaultButton(QToolButton *button, QString app){ + if( !QFile::exists(app) && !LUtils::isValidBinary(app) ){ qDebug() << "Invalid Settings:" << app; app.clear(); } //invalid settings if(app.endsWith(".desktop")){ XDGDesktop file(app); if(file.type == XDGDesktop::BAD){ @@ -231,10 +164,11 @@ void page_defaultapps::updateDefaultButton(QToolButton *button, QString app){ //================= void page_defaultapps::changeDefaultBrowser(){ //Prompt for the new app - QString app = getSysApp(true); - if(app.isEmpty()){ return; }//nothing selected - if(app=="reset"){ app.clear(); } + QString app = getSysApp(true, defaultBrowser); + if(app.isEmpty()){ return; }//nothing selected + if(app=="reset"){ app.clear(); } //save the new app setting and adjust the button appearance + defaultBrowser = app; LXDG::setDefaultAppForMime("x-scheme-handler/http", app.section("/",-1)); LXDG::setDefaultAppForMime("x-scheme-handler/https", app.section("/",-1)); updateDefaultButton(ui->tool_default_webbrowser, app); @@ -242,30 +176,33 @@ void page_defaultapps::changeDefaultBrowser(){ void page_defaultapps::changeDefaultEmail(){ //Prompt for the new app - QString app = getSysApp(true); - if(app.isEmpty()){ return; }//nothing selected - if(app=="reset"){ app.clear(); } + QString app = getSysApp(true, defaultEmail); + if(app.isEmpty()){ return; }//nothing selected + if(app=="reset"){ app.clear(); } //save the new app setting and adjust the button appearance + defaultEmail = app; LXDG::setDefaultAppForMime("application/email",app.section("/",-1)); updateDefaultButton(ui->tool_default_email, app); } void page_defaultapps::changeDefaultFileManager(){ //Prompt for the new app - QString app = getSysApp(true); - if(app.isEmpty()){ return; }//nothing selected - if(app=="reset"){ app = "lumina-fm"; } + QString app = getSysApp(true, defaultFileManager); + if(app.isEmpty()){ return; }//nothing selected + if(app=="reset"){ app = "lumina-fm"; } //save the new app setting and adjust the button appearance + defaultFileManager = app; LXDG::setDefaultAppForMime("inode/directory", app.section("/",-1)); updateDefaultButton(ui->tool_default_filemanager, app); } void page_defaultapps::changeDefaultTerminal(){ //Prompt for the new app - QString app = getSysApp(true); - if(app.isEmpty()){ return; }//nothing selected - if(app=="reset"){ app = "xterm"; } + QString app = getSysApp(true, defaultTerminal); + if(app.isEmpty()){ return; }//nothing selected + if(app=="reset"){ app = "xterm"; } //save the new app setting and adjust the button appearance + defaultTerminal = app; LXDG::setDefaultAppForMime("application/terminal", app.section("/",-1) ); updateDefaultButton(ui->tool_default_terminal, app); } @@ -292,14 +229,19 @@ void page_defaultapps::cleardefaultitem(){ void page_defaultapps::setdefaultitem(){ QTreeWidgetItem *it = ui->tree_defaults->currentItem(); + QString path; if(it==0){ return; } //no item selected QList list; for(int i=0; ichildCount(); i++){ list << it->child(i); } - if(list.isEmpty()){ list << it; } //just do the current item + if(list.isEmpty()){ + //just do the current item + list << it; + path = it->data(1, Qt::UserRole).toString(); + } //Prompt for which application to use - QString app = getSysApp(false); //no "reset" option + QString app = getSysApp(false, path); //no "reset" option if(app.isEmpty()){ return; }//nothing selected //Now set the items for(int i=0; isetWhatsThis(1,app); //app path list[i]->setIcon(1,LXDG::findIcon(desk.icon,"")); //reset the icon list[i]->setText(1,desk.name); //reset the name + list[i]->setData(1, Qt::UserRole, app); } } diff --git a/src-qt5/core-utils/lumina-config/pages/page_defaultapps.h b/src-qt5/core-utils/lumina-config/pages/page_defaultapps.h index f80ea1ab..d8e2bcde 100644 --- a/src-qt5/core-utils/lumina-config/pages/page_defaultapps.h +++ b/src-qt5/core-utils/lumina-config/pages/page_defaultapps.h @@ -26,8 +26,12 @@ public slots: private: Ui::page_defaultapps *ui; + QString defaultBrowser; + QString defaultEmail; + QString defaultFileManager; + QString defaultTerminal; - QString getSysApp(bool allowreset); + QString getSysApp(bool allowreset, QString defaultPath = ""); void updateDefaultButton(QToolButton *button, QString app); -- cgit From 1822d6f3c7b1c4f75868d2d74f0dbe0d988dd372 Mon Sep 17 00:00:00 2001 From: Arnar Mar Sig Date: Mon, 6 Feb 2017 17:39:38 +0000 Subject: Fix memory leak. --- src-qt5/core-utils/lumina-config/pages/page_defaultapps.cpp | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) (limited to 'src-qt5/core-utils/lumina-config') diff --git a/src-qt5/core-utils/lumina-config/pages/page_defaultapps.cpp b/src-qt5/core-utils/lumina-config/pages/page_defaultapps.cpp index 2e2d6f0d..a21653c9 100644 --- a/src-qt5/core-utils/lumina-config/pages/page_defaultapps.cpp +++ b/src-qt5/core-utils/lumina-config/pages/page_defaultapps.cpp @@ -66,7 +66,7 @@ void page_defaultapps::LoadSettings(int){ //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 + QTreeWidgetItem *group = nullptr; QString ccat; for(int i=0; isetText(0, cat); //add translations for known/common groups later -- cgit