diff options
author | Ken Moore <ken@pcbsd.org> | 2014-11-17 14:22:37 -0500 |
---|---|---|
committer | Ken Moore <ken@pcbsd.org> | 2014-11-17 14:22:37 -0500 |
commit | 788f83e26c935b5faee5ef59b355ab9b3818684a (patch) | |
tree | d86084a57da7c4c386e129e8c5b9844808cf9a7a /lumina-config/mainUI.cpp | |
parent | Update the XDG categories that are supported, as well as the add a new "Wine"... (diff) | |
download | lumina-788f83e26c935b5faee5ef59b355ab9b3818684a.tar.gz lumina-788f83e26c935b5faee5ef59b355ab9b3818684a.tar.bz2 lumina-788f83e26c935b5faee5ef59b355ab9b3818684a.zip |
Update the XDG MIME inplementation to support the draft standards for registering default application (Note: does not use the mime association routines, just defaults)
Lumina-config will now use this backend system for default app registrations, but lumina-open does not use it yet. Also, the defaults tab in lumina-config is still not completely updated yet (resulting in some breakage or unusable buttons).
DO NOT BUILD FROM THIS REVISION - Will be fixed very soon but needed a git snapshot
Diffstat (limited to 'lumina-config/mainUI.cpp')
-rw-r--r-- | lumina-config/mainUI.cpp | 176 |
1 files changed, 145 insertions, 31 deletions
diff --git a/lumina-config/mainUI.cpp b/lumina-config/mainUI.cpp index edd1483e..dea72814 100644 --- a/lumina-config/mainUI.cpp +++ b/lumina-config/mainUI.cpp @@ -108,10 +108,11 @@ void MainUI::setupIcons(){ 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_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","") ); //Session Page ui->tool_session_rmapp->setIcon( LXDG::findIcon("list-remove","") ); @@ -183,10 +184,11 @@ void MainUI::setupConnections(){ connect(ui->tool_shortcut_set, SIGNAL(clicked()), this, SLOT(getKeyPress()) ); //Defaults Page - connect(ui->tool_defaults_addextension, SIGNAL(clicked()), this, SLOT(adddefaultextension()) ); - connect(ui->tool_defaults_addgroup, SIGNAL(clicked()), this, SLOT(adddefaultgroup()) ); + //connect(ui->tool_defaults_addextension, SIGNAL(clicked()), this, SLOT(adddefaultextension()) ); + //connect(ui->tool_defaults_addgroup, SIGNAL(clicked()), this, SLOT(adddefaultgroup()) ); 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 @@ -284,16 +286,6 @@ QString MainUI::getNewPanelPlugin(){ } XDGDesktop MainUI::getSysApp(){ - //Prompt the user to select an application on the system - /*QStringList apps; - for(int i=0; i<sysApps.length(); i++){ - apps << sysApps[i].name; - } - bool ok = false; - QString app = QInputDialog::getItem(this, tr("Select Application"), tr("App Name:"), apps, 0, false, &ok); - int index = apps.indexOf(app); - if(app.isEmpty() || index < 0 || !ok){ return XDGDesktop(); } //nothing selected - else{ return sysApps[index]; }*/ AppDialog dlg(this, sysApps); dlg.exec(); return dlg.appselected; @@ -393,6 +385,9 @@ void MainUI::slotChangePage(bool enabled){ 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()); //hide on the default page + //Special functions for particular pages if(ui->page_panels->isVisible()){ checkpanels(); } } @@ -654,7 +649,7 @@ void MainUI::saveCurrentSettings(bool screenonly){ //Defaults page if(moddef && !screenonly){ - saveDefaultSettings(); + //saveDefaultSettings(); } //Session Page @@ -1162,14 +1157,86 @@ void MainUI::getKeyPress(){ //=========== // Defaults Page //=========== +void MainUI::changeDefaultBrowser(){ + +} + +void MainUI::changeDefaultEmail(){ + +} + +void MainUI::changeDefaultFileManager(){ + +} + +void MainUI::changeDefaultTerminal(){ + +} + void MainUI::loadDefaultSettings(){ + //First load the lumina-open specific defaults + QString tmp = appsettings->value("default/directory", "lumina-fm").toString(); + + + //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); + + /* QStringList keys = appsettings->allKeys(); QStringList groups = keys.filter("Groups/"); if(groups.isEmpty()){ //setup default groups appsettings->setValue("Groups/Web", QStringList() << "http" << "https" << "ftp"); - appsettings->setValue("Groups/Email", QStringList() << "eml" << "msg"); + appsettings->setValue("Groups/Email", QStringList() << "eml" << "msg" << "mailto"); appsettings->setValue("Groups/Development-C",QStringList() << "c" << "cpp" << "h" << "hpp"); appsettings->setValue("Groups/Development-Ruby",QStringList() << "rb" << "rbw"); appsettings->setValue("Groups/Development-Python",QStringList() << "py" << "pyw"); @@ -1198,7 +1265,8 @@ void MainUI::loadDefaultSettings(){ it->setWhatsThis(1,path); if(!ok || file.filePath.isEmpty()){ //Might be a binary - just print out the raw "path" - it->setText(1,path); + it->setText(1,path.section("/",-1)); + it->setIcon(1, LXDG::findIcon("application-x-executable","") ); }else{ it->setText(1, file.name); it->setIcon(1, LXDG::findIcon(file.icon,"") ); @@ -1219,7 +1287,8 @@ void MainUI::loadDefaultSettings(){ it->setWhatsThis(1,path); if(!ok || file.filePath.isEmpty()){ //Might be a binary - just print out the raw "path" - it->setText(1,path); + it->setText(1,path.section("/",-1)); + it->setIcon(1, LXDG::findIcon("application-x-executable","") ); }else{ it->setText(1, file.name); it->setIcon(1, LXDG::findIcon(file.icon,"") ); @@ -1229,10 +1298,11 @@ void MainUI::loadDefaultSettings(){ } } } + */ checkdefaulticons(); } -void MainUI::saveDefaultSettings(){ +/*void MainUI::saveDefaultSettings(){ for(int i=0; i<ui->tree_defaults->topLevelItemCount(); i++){ //Groups QTreeWidgetItem *group = ui->tree_defaults->topLevelItem(i); @@ -1250,9 +1320,9 @@ void MainUI::saveDefaultSettings(){ appsettings->setValue("Groups/"+group->text(0), items); } } -} +}*/ -void MainUI::adddefaultgroup(){ +/*void MainUI::adddefaultgroup(){ //Prompt for the group name bool ok = false; QString name = QInputDialog::getText(this, tr("New Application Group"), tr("Name:"), QLineEdit::Normal, "", &ok); @@ -1280,7 +1350,7 @@ void MainUI::adddefaultextension(){ it->addChild( new QTreeWidgetItem( QStringList() << name << "" ) ); ui->push_save->setEnabled(true); moddef = true; -} +}*/ void MainUI::cleardefaultitem(){ QTreeWidgetItem *it = ui->tree_defaults->currentItem(); @@ -1292,12 +1362,15 @@ void MainUI::cleardefaultitem(){ 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; + //ui->push_save->setEnabled(true); + //moddef = true; } void MainUI::setdefaultitem(){ @@ -1313,25 +1386,66 @@ void MainUI::setdefaultitem(){ 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,"")); //clear the icon - list[i]->setText(1,desk.name); //clear the name + 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; + //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_addextension->setEnabled( it!=0); - if(it!=0){ + //ui->tool_defaults_addextension->setEnabled( it!=0); + ui->tool_defaults_setbin->setEnabled(it!=0); + /*if(it!=0){ if(it->text(0)=="Uncategorized"){ ui->tool_defaults_set->setEnabled(false); + ui->tool_defaults_setbin->setEnabled(false); ui->tool_defaults_clear->setEnabled(false); } - } + }*/ } //=========== |