diff options
author | Weblate <noreply@weblate.org> | 2017-07-19 18:47:39 +0000 |
---|---|---|
committer | Weblate <noreply@weblate.org> | 2017-07-19 18:47:39 +0000 |
commit | 86f6fadf45c2b87749cffac82411d2371448da53 (patch) | |
tree | dfc1520b8ae2e59118b8a65d3f9438c1eead6b2c /src-qt5/desktop-utils/lumina-fm/widgets/DirWidget2.cpp | |
parent | Add en_GB (diff) | |
parent | Another checkpoint in the compositing saga. Got most of it working, but still... (diff) | |
download | lumina-86f6fadf45c2b87749cffac82411d2371448da53.tar.gz lumina-86f6fadf45c2b87749cffac82411d2371448da53.tar.bz2 lumina-86f6fadf45c2b87749cffac82411d2371448da53.zip |
Merge branch 'master' of github.com:trueos/lumina
Diffstat (limited to 'src-qt5/desktop-utils/lumina-fm/widgets/DirWidget2.cpp')
-rw-r--r-- | src-qt5/desktop-utils/lumina-fm/widgets/DirWidget2.cpp | 128 |
1 files changed, 82 insertions, 46 deletions
diff --git a/src-qt5/desktop-utils/lumina-fm/widgets/DirWidget2.cpp b/src-qt5/desktop-utils/lumina-fm/widgets/DirWidget2.cpp index 6c2d4f35..3790d145 100644 --- a/src-qt5/desktop-utils/lumina-fm/widgets/DirWidget2.cpp +++ b/src-qt5/desktop-utils/lumina-fm/widgets/DirWidget2.cpp @@ -16,9 +16,9 @@ #include <QInputDialog> #include <QScrollBar> #include <QSettings> -#include <QtConcurrent/QtConcurrentRun> +#include <QtConcurrent> #include <QFileSystemModel> - +#include <QCompleter> #include <LuminaOS.h> #include <LuminaXDG.h> #include <LUtils.h> @@ -71,7 +71,7 @@ DirWidget::DirWidget(QString objID, QWidget *parent) : QWidget(parent), ui(new U dirtreeModel->setFilter(QDir::NoDotAndDotDot | QDir::AllDirs); // remove extraneous dirs dirtreeModel->setRootPath(folderTreePath); ui->folderViewPane->setModel(dirtreeModel); - ui->splitter->setSizes( QList<int>() << this->width()/3 << 2*this->width()/3); + ui->splitter->setSizes( QList<int>() << this->width()/4 << 3*this->width()/4); ui->folderViewPane->setHeaderHidden(true); ui->folderViewPane->resizeColumnToContents(0); ui->folderViewPane->setColumnHidden(1, true); @@ -83,11 +83,13 @@ DirWidget::DirWidget(QString objID, QWidget *parent) : QWidget(parent), ui(new U contextMenu = new QMenu(this); cNewMenu = cOpenMenu = cFModMenu = cFViewMenu = cOpenWithMenu = 0; //not created yet connect(contextMenu, SIGNAL(aboutToShow()), this, SLOT(UpdateContextMenu()) ); + connect(ui->splitter, SIGNAL(splitterMoved(int,int)), this, SLOT(splitterMoved()) ); UpdateIcons(); UpdateText(); createShortcuts(); createMenus(); + line_dir->setCompleter(new QCompleter(dirtreeModel, this)); } DirWidget::~DirWidget(){ @@ -112,7 +114,7 @@ void DirWidget::ChangeDir(QString dirpath){ } void DirWidget::setDirCompleter(QCompleter *comp){ - //line_dir->setCompleter(comp); + line_dir->setCompleter(comp); } QString DirWidget::id(){ @@ -131,6 +133,9 @@ void DirWidget::setShowDetails(bool show){ void DirWidget::showHidden(bool show){ BW->showHiddenFiles(show); if(RCBW!=0){ RCBW->showHiddenFiles(show); } + //Also make sure the tree model is showing hidden files as needed + if(show){ dirtreeModel->setFilter(QDir::NoDotAndDotDot | QDir::Hidden | QDir::AllDirs); } + else{ dirtreeModel->setFilter(QDir::NoDotAndDotDot | QDir::AllDirs); } } void DirWidget::showThumbnails(bool show){ @@ -148,15 +153,8 @@ void DirWidget::setThumbnailSize(int px){ //==================== // Folder Pane //==================== - -void DirWidget::showDirTreePane(bool show){ - if(show !=showdirtree){ - showdirtree = show; - } -} - -bool DirWidget::showingDirTreePane(){ - return showdirtree; +void DirWidget::adjustTreeWidget(float percent){ + ui->splitter->setSizes( QList<int>() << this->width()*(percent/100.0) << this->width() * ((100.0-percent)/100.0) ); } void DirWidget::on_folderViewPane_clicked(const QModelIndex &index){ @@ -297,35 +295,15 @@ void DirWidget::createMenus(){ */ //---------------------------------------------------// - /* - if(cOpenWithMenu==0){ cOpenWithMenu = new QMenu(this); } - else{ cOpenWithMenu->clear(); } - cOpenWithMenu->setTitle(tr("Open with...")); - cOpenWithMenu->setIcon( LXDG::findIcon("run-build-configure","") ); - XDGDesktopList applist; - applist.updateList(); - PREFAPPS = getPreferredApplications(); - //qDebug() << "Preferred Apps:" << PREFAPPS; - cOpenWithMenu->clear(); - //Now get the application mimetype for the file extension (if available) - QStringList mimetypes = LXDG::findAppMimeForFile(filePath, true).split("::::"); //use all mimetypes - //Now add all the detected applications - QHash< QString, QList<XDGDesktop*> > hash = LXDG::sortDesktopCats( applist.apps(false,true) ); - QStringList cat = hash.keys(); - cat.sort(); //sort alphabetically - for(int c=0; c<cat.length(); c++){ - QList<XDGDesktop*> app = hash[cat[c]]; - if(app.length()<1){ cOpenWithMenu =0; continue; } - for(int a=0; a<app.length(); a++){ - QString program = app[a]->filePath; - QStringList arguments; - arguments << "%u"; - QProcess *p = new QProcess(); - p->start(program, arguments); - - cOpenWithMenu->addAction(LXDG::findIcon(app[a]->icon), (app[a]->name), this, SLOT(p->start(program, arguments)) );}} - cOpenWithMenu->addAction(LXDG::findIcon("run-build-configure",""), tr("Other..."), this, SLOT(runWithFiles()) ); -*/ + + if(cOpenWithMenu==0){ + cOpenWithMenu = new QMenu(this); + connect(cOpenWithMenu, SIGNAL(triggered(QAction*)), this, SLOT(OpenWithApp(QAction*)) ); + } + else{ cOpenWithMenu->clear(); } + cOpenWithMenu->setTitle(tr("Open with...")); + cOpenWithMenu->setIcon( LXDG::findIcon("system-run-with","") ); + //---------------------------------------------------// if(cFViewMenu==0){ cFViewMenu = new QMenu(this); } else{ cFViewMenu->clear(); } @@ -349,6 +327,10 @@ QStringList DirWidget::currentDirFiles(){ // ================= // PRIVATE SLOTS // ================= +void DirWidget::splitterMoved(){ + float percent = (ui->splitter->sizes().first() / ( (float) this->width()) )*100.0; + this->emit treeWidgetSizeChanged(percent); +} //UI BUTTONS void DirWidget::on_tool_zoom_in_clicked(){ @@ -559,6 +541,7 @@ void DirWidget::UpdateContextMenu(){ if(!sel.isEmpty()){ contextMenu->addAction(LXDG::findIcon("system-run",""), tr("Open"), this, SLOT(runFiles()) ); //contextMenu->addAction(LXDG::findIcon("system-run-with",""), tr("Open With..."), this, SLOT(runWithFiles()) ); + contextMenu->addMenu(cOpenWithMenu); } contextMenu->addSection(LXDG::findIcon("unknown",""), tr("File Operations")); // contextMenu->addMenu(cFModMenu); @@ -587,6 +570,50 @@ void DirWidget::UpdateContextMenu(){ contextMenu->addMenu(cNewMenu); } contextMenu->addMenu(cOpenMenu); + //===================== + //PREFAPPS = getPreferredApplications(); + //qDebug() << "Preferred Apps:" << PREFAPPS; + cOpenWithMenu->clear(); + //Now get the application mimetype for the file extension (if available) + QStringList mimetypes; + for(int i=0; i<sel.length(); i++){ + QStringList mimes = LXDG::findAppMimeForFile(sel[i], true).split("::::"); //use all mimetypes + if(mimetypes.isEmpty()){ mimetypes << mimes; } + else{ + //need to verify that the mimetypes are the same before adding them. + QStringList test; test << mimetypes << mimes; + if(test.removeDuplicates()>0){ mimetypes = test; } + else{ + //Bad match - incompatible file types are selected - disable the recommendations + mimetypes.clear(); + break; + } + } + } + //Now add all the detected applications + if(!mimetypes.isEmpty()){ + static XDGDesktopList applist; + applist.updateList(); + QList<XDGDesktop*> apps = applist.apps(false,true); + QList<XDGDesktop*> found; + for(int a=0; a<apps.length(); a++){ + if(apps[a]->mimeList.isEmpty()){ continue; } //no corresponding mime types for this app + QStringList test; test << mimetypes << apps[a]->mimeList; + if(test.removeDuplicates()>0){ found << apps[a]; } + } + if(!found.isEmpty()){ + //sort the apps by name + found = LXDG::sortDesktopNames(found); + //add apps to the menu + for(int i=0; i<found.length(); i++){ + QAction *act = cOpenWithMenu->addAction( LXDG::findIcon(found[i]->icon, ""), found[i]->name ); + act->setToolTip(found[i]->comment); + act->setWhatsThis(found[i]->filePath); + } + cOpenWithMenu->addSeparator(); + } + } + cOpenWithMenu->addAction(LXDG::findIcon("system-run-with",""), tr("Other..."), this, SLOT(runWithFiles()) ); } void DirWidget::currentDirectoryChanged(bool widgetonly){ @@ -600,17 +627,17 @@ void DirWidget::currentDirectoryChanged(bool widgetonly){ normalbasedir = cur; ui->group_snaps->setVisible(false); emit findSnaps(ID, cur); - qDebug() << "Changed to directory:" << cur; + //qDebug() << "Changed to directory:" << cur; }else{ //Re-assemble the normalbasedir variable (in case moving around within a snapshot) normalbasedir = cur; normalbasedir.replace( QRegExp("\\/\\.zfs\\/snapshot/([^/]+)\\/"), "/" ); - qDebug() << "Changed to snapshot:" << cur << normalbasedir; + //qDebug() << "Changed to snapshot:" << cur << normalbasedir; } ui->actionBack->setEnabled( currentBrowser()->history().length()>1 ); - line_dir->setText(normalbasedir); + line_dir->setText(normalbasedir); emit TabNameChanged(ID, normalbasedir.section("/",-1)); - QModelIndex index = dirtreeModel->index(cur,0); + QModelIndex index = dirtreeModel->index(normalbasedir,0); ui->folderViewPane->setCurrentIndex( index ); ui->folderViewPane->scrollTo(index); } @@ -842,6 +869,15 @@ void DirWidget::openMultimedia(){ if(!list.isEmpty()){ emit PlayFiles(list); } } +void DirWidget::OpenWithApp(QAction* act){ + if(act->whatsThis().isEmpty()){ return; } + QStringList sel = currentBrowser()->currentSelection(); + //Now we need to open the app file, and create the process + XDGDesktop desk(act->whatsThis()); + QString exec = desk.generateExec(sel); + ExternalProcess::launch(exec); +} + void DirWidget::autoExtractFiles(){ QStringList files = currentBrowser()->currentSelection(); qDebug() << "Starting auto-extract:" << files; |