aboutsummaryrefslogtreecommitdiff
path: root/src-qt5/desktop-utils/lumina-fm
diff options
context:
space:
mode:
Diffstat (limited to 'src-qt5/desktop-utils/lumina-fm')
-rw-r--r--src-qt5/desktop-utils/lumina-fm/Browser.cpp35
-rw-r--r--src-qt5/desktop-utils/lumina-fm/Browser.h5
-rw-r--r--src-qt5/desktop-utils/lumina-fm/MainUI.cpp44
-rw-r--r--src-qt5/desktop-utils/lumina-fm/MainUI.h6
-rw-r--r--src-qt5/desktop-utils/lumina-fm/MainUI.ui18
-rw-r--r--src-qt5/desktop-utils/lumina-fm/lumina-fm.pro1
-rw-r--r--src-qt5/desktop-utils/lumina-fm/widgets/DirWidget2.cpp273
-rw-r--r--src-qt5/desktop-utils/lumina-fm/widgets/DirWidget2.h52
-rw-r--r--src-qt5/desktop-utils/lumina-fm/widgets/DirWidget2.ui62
9 files changed, 342 insertions, 154 deletions
diff --git a/src-qt5/desktop-utils/lumina-fm/Browser.cpp b/src-qt5/desktop-utils/lumina-fm/Browser.cpp
index b7eb9709..010196a4 100644
--- a/src-qt5/desktop-utils/lumina-fm/Browser.cpp
+++ b/src-qt5/desktop-utils/lumina-fm/Browser.cpp
@@ -20,7 +20,7 @@ Browser::Browser(QObject *parent) : QObject(parent){
showHidden = false;
showThumbs = false;
imageFormats = LUtils::imageExtensions(false); //lowercase suffixes
- connect(this, SIGNAL(threadDone(QString, QByteArray)), this, SLOT(futureFinished(QString, QByteArray))); //will always be between different threads
+ connect(this, SIGNAL(threadDone(QString, QImage)), this, SLOT(futureFinished(QString, QImage))); //will always be between different threads
}
Browser::~Browser(){
@@ -53,20 +53,25 @@ bool Browser::showingThumbnails(){
// PRIVATE
void Browser::loadItem(QString info, Browser *obj){
//qDebug() << "LoadItem:" << info;
- QByteArray bytes;
+ QImage pix;
if(imageFormats.contains(info.section(".",-1).toLower()) ){
QFile file(info);
if(file.open(QIODevice::ReadOnly)){
- bytes = file.readAll();
+ QByteArray bytes = file.readAll();
file.close();
+ pix.loadFromData(bytes);
+ if(bytes.size() > (512*1024) ){ //more than 512 KB
+ pix = pix.scaled(256,256, Qt::KeepAspectRatio, Qt::SmoothTransformation);
+ }
}
}
+
//qDebug() << " - done with item:" << info;
- obj->emit threadDone(info, bytes);
+ obj->emit threadDone(info, pix);
}
QIcon Browser::loadIcon(QString icon){
- if(!mimeIcons.contains(icon)){
+ if(!mimeIcons.contains(icon)){
mimeIcons.insert(icon, LXDG::findIcon(icon, "unknown"));
}
@@ -76,7 +81,7 @@ QIcon Browser::loadIcon(QString icon){
// PRIVATE SLOTS
void Browser::fileChanged(QString file){
- if(file.startsWith(currentDir+"/") ){
+ if(file.startsWith(currentDir+"/") ){
if(QFile::exists(file) ){ QtConcurrent::run(this, &Browser::loadItem, file, this); } //file modified but not removed
else{ QTimer::singleShot(0, this, SLOT(loadDirectory()) ); } //file removed - need to update entire dir
}else if(file==currentDir){ QTimer::singleShot(0, this, SLOT(loadDirectory()) ); }
@@ -87,20 +92,20 @@ void Browser::dirChanged(QString dir){
else if(dir.startsWith(currentDir)){ QtConcurrent::run(this, &Browser::loadItem, dir, this ); }
}
-void Browser::futureFinished(QString name, QByteArray icon){
+void Browser::futureFinished(QString name, QImage icon){
//Note: this will be called once for every item that loads
qDebug() << "Future Finished:" << name;
QIcon ico;
LFileInfo info(name);
- if(!icon.isEmpty()){
+ if(!icon.isNull()){
//qDebug() << " -- Data:";
- QPixmap pix;
- if(pix.loadFromData(icon) ){ ico.addPixmap(pix); }
+ QPixmap pix = QPixmap::fromImage(icon);
+ ico.addPixmap(pix);
}else if(info.isDir()){
//qDebug() << " -- Folder:";
- ico = loadIcon("folder");
+ ico = loadIcon("folder");
}
- if(ico.isNull()){
+ if(ico.isNull()){
//qDebug() << " -- MimeType:" << info.fileName() << info.mimetype();
ico = loadIcon(info.iconfile());
}
@@ -116,8 +121,8 @@ void Browser::loadDirectory(QString dir){
qDebug() << "Load Directory" << dir;
if(currentDir != dir){ //let the main widget know to clear all current items (completely different dir)
oldFiles.clear();
- emit clearItems();
- }
+ emit clearItems();
+ }
currentDir = dir; //save this for later
//clean up the watcher first
QStringList watched; watched << watcher->files() << watcher->directories();
@@ -141,7 +146,7 @@ void Browser::loadDirectory(QString dir){
QtConcurrent::run(this, &Browser::loadItem, path, this);
}else{
//No special icon loading - just skip the file read step
- futureFinished(path, QByteArray()); //loadItem(path, this);
+ futureFinished(path, QImage()); //loadItem(path, this);
}
}
watcher->addPath(directory.absolutePath());
diff --git a/src-qt5/desktop-utils/lumina-fm/Browser.h b/src-qt5/desktop-utils/lumina-fm/Browser.h
index b96a7281..40e98753 100644
--- a/src-qt5/desktop-utils/lumina-fm/Browser.h
+++ b/src-qt5/desktop-utils/lumina-fm/Browser.h
@@ -46,7 +46,6 @@ private:
bool showHidden, showThumbs;
QStringList imageFormats, oldFiles;
QHash<QString, QIcon> mimeIcons; //cache for quickly re-using QIcons
-
void loadItem(QString info, Browser *obj); //this is the main loader class - multiple instances each run in a separate thread
QIcon loadIcon(QString icon); //simplification for using/populating the mimIcons cache
@@ -55,7 +54,7 @@ private slots:
void fileChanged(QString); //tied into the watcher - for file change notifications
void dirChanged(QString); // tied into the watcher - for new/removed files in the current dir
- void futureFinished(QString, QByteArray);
+ void futureFinished(QString, QImage);
public slots:
void loadDirectory(QString dir = "");
@@ -70,7 +69,7 @@ signals:
void itemsLoading(int); //number of items which are getting loaded
//Internal signal for the alternate threads
- void threadDone(QString, QByteArray);
+ void threadDone(QString, QImage);
};
#endif
diff --git a/src-qt5/desktop-utils/lumina-fm/MainUI.cpp b/src-qt5/desktop-utils/lumina-fm/MainUI.cpp
index 9962a4bf..73d1420a 100644
--- a/src-qt5/desktop-utils/lumina-fm/MainUI.cpp
+++ b/src-qt5/desktop-utils/lumina-fm/MainUI.cpp
@@ -22,10 +22,10 @@ MainUI::MainUI() : QMainWindow(), ui(new Ui::MainUI){
//qRegisterMetaType<QFileInfoList>("QFileInfoList");
qRegisterMetaType< LFileInfoList >("LFileInfoList");
//just to silence/fix some Qt connect warnings in QtConcurrent
- //qRegisterMetaType< QVector<int> >("QVector<int>");
+ //qRegisterMetaType< QVector<int> >("QVector<int>");
//qRegisterMetaType< QList<QPersistentModelIndex> >("QList<QPersistentModelIndex>");
waitingToClose = false;
-
+
ui->setupUi(this);
if(DEBUG){ qDebug() << "Initilization:"; }
settings = LUtils::openSettings("lumina-desktop", "lumina-fm", this);
@@ -35,7 +35,7 @@ QSize orig = settings->value("preferences/MainWindowSize", QSize()).toSize();
if(!orig.isEmpty() && orig.isValid()){
//Make sure the old size is larger than the default size hint
if(orig.width() < this->sizeHint().width()){ orig.setWidth(this->sizeHint().width()); }
- if(orig.height() < this->sizeHint().height()){ orig.setHeight(this->sizeHint().height()); }
+ if(orig.height() < this->sizeHint().height()){ orig.setHeight(this->sizeHint().height()); }
//Also ensure the old size is smaller than the current screen size
QSize screen = QApplication::desktop()->availableGeometry(this).size();
if(orig.width() > screen.width()){ orig.setWidth(screen.width()); }
@@ -94,6 +94,7 @@ QSize orig = settings->value("preferences/MainWindowSize", QSize()).toSize();
nextTabRShort = new QShortcut( QKeySequence(tr("Shift+Right")), this);
togglehiddenfilesShort = new QShortcut( QKeySequence(tr("Ctrl+H")), this);
focusDirWidgetShort = new QShortcut( QKeySequence(tr("Ctrl+L")), this);
+ toggledirtreepaneShort = new QShortcut( QKeySequence(tr("Ctrl+P")), this);
//Finish loading the interface
workThread->start();
@@ -134,7 +135,7 @@ void MainUI::OpenDirs(QStringList dirs){
if(DEBUG){ qDebug() << "Open Directory:" << dirs[i]; }
///Get a new Unique ID
int id = 0;
- for(int j=0; j<DWLIST.length(); j++){
+ for(int j=0; j<DWLIST.length(); j++){
if(DWLIST[j]->id().section("-",1,1).toInt() >= id){ id = DWLIST[j]->id().section("-",1,1).toInt()+1; }
}
//Create the new DirWidget
@@ -157,7 +158,7 @@ void MainUI::OpenDirs(QStringList dirs){
connect(DW, SIGNAL(PasteFiles(QString,QStringList)), this, SLOT(PasteFiles(QString, QStringList)) );
connect(DW, SIGNAL(CloseBrowser(QString)), this, SLOT(CloseBrowser(QString)) );
connect(DW, SIGNAL(TabNameChanged(QString,QString)), this, SLOT(TabNameChanged(QString, QString)) );
- //Now create the tab for this
+ //Now create the tab for this
//if(radio_view_tabs->isChecked()){
int index = tabBar->addTab( LXDG::findIcon("folder-open",""), dirs[i].section("/",-1) );
tabBar->setTabWhatsThis( index, "DW-"+QString::number(id) );
@@ -175,12 +176,13 @@ void MainUI::OpenDirs(QStringList dirs){
tabBar->setCurrentIndex(index);
}
}*/
-
+
//Initialize the widget with the proper settings
DW->setShowDetails(radio_view_details->isChecked());
DW->setThumbnailSize(settings->value("iconsize", 32).toInt());
DW->showHidden( ui->actionView_Hidden_Files->isChecked() );
DW->showThumbnails( ui->actionShow_Thumbnails->isChecked() );
+ DW->showDirTreePane( ui->actionView_showDirTreePane->isChecked() );
//Now load the directory
DW->ChangeDir(dirs[i]); //kick off loading the directory info
}
@@ -200,7 +202,7 @@ void MainUI::OpenDirs(QStringList dirs){
void MainUI::setupIcons(){
this->setWindowIcon( LXDG::findIcon("Insight-FileManager","") );
-
+
//Setup all the icons using libLumina
// File menu
ui->actionNew_Window->setIcon( LXDG::findIcon("window-new","") );
@@ -254,6 +256,8 @@ void MainUI::setupConnections(){
connect(nextTabRShort, SIGNAL(activated()), this, SLOT( nextTab() ) );
connect(togglehiddenfilesShort, SIGNAL(activated()), this, SLOT( togglehiddenfiles() ) );
connect(focusDirWidgetShort, SIGNAL(activated()), this, SLOT( focusDirWidget() ) );
+ connect(toggledirtreepaneShort, SIGNAL(activated()), this, SLOT( toggleDirTreePane() ) );
+
}
void MainUI::focusDirWidget()
@@ -270,6 +274,14 @@ void MainUI::togglehiddenfiles()
on_actionView_Hidden_Files_triggered();
}
+void MainUI::toggleDirTreePane()
+{
+ //change setChecked to inverse value
+ ui->actionView_Hidden_Files->setChecked( !settings->value("showdirtree", true).toBool() );
+ // then trigger function
+ on_actionView_showDirTreePane_triggered();
+}
+
void MainUI::loadSettings(){
//Note: make sure this is run after all the UI elements are created and connected to slots
// but before the first directory gets loaded
@@ -277,6 +289,9 @@ void MainUI::loadSettings(){
on_actionView_Hidden_Files_triggered(); //make sure to update the models too
ui->actionShow_Thumbnails->setChecked( settings->value("showthumbnails",true).toBool());
on_actionShow_Thumbnails_triggered(); //make sure to update models too
+ ui->actionView_showDirTreePane->setChecked( settings->value("showdirtree", false).toBool());
+ on_actionView_showDirTreePane_triggered(); //make sure to update the models too
+
//ui->actionShow_Action_Buttons->setChecked(settings->value("showactions", true).toBool() );
//on_actionShow_Action_Buttons_triggered(); //make sure to update the UI
//ui->actionShow_Thumbnails->setChecked( settings->value("showthumbnails", true).toBool() );
@@ -289,7 +304,7 @@ void MainUI::loadSettings(){
//bool usetabs = (settings->value("groupmode","tabs").toString()=="tabs");
//if(usetabs){ radio_view_tabs->setChecked(true); }
// else{ radio_view_cols->setChecked(true); }
-
+
}
void MainUI::RebuildBookmarksMenu(){
@@ -344,7 +359,7 @@ void MainUI::RebuildDeviceMenu(){
//Add filesystem type to the label
label = QString(tr("%1 (Type: %2)")).arg(label, fs);
}
- QAction *act = new QAction(label,this);
+ QAction *act = new QAction(label,this);
act->setWhatsThis(path); //full path to mountpoint
act->setToolTip( QString(tr("Filesystem: %1")).arg( devs[i].section("::::",1,1) ) );
//Now set the appropriate icon
@@ -365,7 +380,7 @@ DirWidget* MainUI::FindActiveBrowser(){
//Get the current tab ID to start with
QString cur = tabBar->tabWhatsThis(tabBar->currentIndex());
//if(cur.startsWith("#")){ cur.clear(); } //multimedia/player tab open
-
+
if(DWLIST.length()==1){
//Only 1 browser open - use it
curB = DWLIST[0];
@@ -382,7 +397,6 @@ DirWidget* MainUI::FindActiveBrowser(){
for(int i=0; i<DWLIST.length(); i++){
if(DWLIST[i]->isAncestorOf(focus)){ curB = DWLIST[i]; break; } //This browser has focus
}
-
}else{
//Non-Browser in focus - use the fallback below
}
@@ -476,6 +490,14 @@ void MainUI::on_actionView_Hidden_Files_triggered(){
}
+void MainUI::on_actionView_showDirTreePane_triggered(){
+ //worker->showdirtree = ui->actionView_showDirTreePane->isChecked();
+ settings->setValue("showdirtree", ui->actionView_showDirTreePane->isChecked());
+//Re-load the current browsers
+
+}
+
+
/*void MainUI::on_actionShow_Action_Buttons_triggered(){
bool show = ui->actionShow_Action_Buttons->isChecked();
settings->setValue("showactions", show);
diff --git a/src-qt5/desktop-utils/lumina-fm/MainUI.h b/src-qt5/desktop-utils/lumina-fm/MainUI.h
index 9f542ea9..84ab5a64 100644
--- a/src-qt5/desktop-utils/lumina-fm/MainUI.h
+++ b/src-qt5/desktop-utils/lumina-fm/MainUI.h
@@ -91,7 +91,7 @@ private:
bool waitingToClose;
QSettings *settings;
- QShortcut *nextTabLShort, *nextTabRShort, *togglehiddenfilesShort, *focusDirWidgetShort;
+ QShortcut *nextTabLShort, *nextTabRShort, *togglehiddenfilesShort, *focusDirWidgetShort, *toggledirtreepaneShort;
//QCompleter *dirCompleter;
//Simplification Functions
@@ -126,8 +126,9 @@ private slots:
void on_actionDelete_Selection_triggered();*/
void on_actionRefresh_triggered();
void on_actionView_Hidden_Files_triggered();
+ void on_actionView_showDirTreePane_triggered();
//void on_actionShow_Action_Buttons_triggered();
- void on_actionShow_Thumbnails_triggered();
+ void on_actionShow_Thumbnails_triggered();
void goToBookmark(QAction*);
void goToDevice(QAction*);
void viewModeChanged(bool);
@@ -148,6 +149,7 @@ private slots:
//Other Shortcuts
void togglehiddenfiles();
+ void toggleDirTreePane();
void focusDirWidget();
//Backend Info passing
diff --git a/src-qt5/desktop-utils/lumina-fm/MainUI.ui b/src-qt5/desktop-utils/lumina-fm/MainUI.ui
index 189b563f..744f31a3 100644
--- a/src-qt5/desktop-utils/lumina-fm/MainUI.ui
+++ b/src-qt5/desktop-utils/lumina-fm/MainUI.ui
@@ -69,7 +69,7 @@
<x>0</x>
<y>0</y>
<width>567</width>
- <height>367</height>
+ <height>359</height>
</rect>
</property>
<layout class="QHBoxLayout" name="BrowserLayout">
@@ -106,7 +106,7 @@
<x>0</x>
<y>0</y>
<width>567</width>
- <height>24</height>
+ <height>28</height>
</rect>
</property>
<widget class="QMenu" name="menuFile">
@@ -420,6 +420,20 @@
<string>Clone Repository</string>
</property>
</action>
+ <action name="actionView_showDirTreePane">
+ <property name="checkable">
+ <bool>true</bool>
+ </property>
+ <property name="text">
+ <string>Show Directory Tree Window</string>
+ </property>
+ <property name="toolTip">
+ <string>Show Directory Tree Pane</string>
+ </property>
+ <property name="shortcut">
+ <string>Ctrl+P</string>
+ </property>
+ </action>
</widget>
<resources/>
<connections/>
diff --git a/src-qt5/desktop-utils/lumina-fm/lumina-fm.pro b/src-qt5/desktop-utils/lumina-fm/lumina-fm.pro
index a98161f0..f7253e84 100644
--- a/src-qt5/desktop-utils/lumina-fm/lumina-fm.pro
+++ b/src-qt5/desktop-utils/lumina-fm/lumina-fm.pro
@@ -14,6 +14,7 @@ include(../../core/libLumina/LDesktopUtils.pri) #includes LUtils
include(../../core/libLumina/LuminaXDG.pri)
include(../../core/libLumina/LuminaSingleApplication.pri)
include(../../core/libLumina/LuminaThemes.pri)
+include(../../core/libLumina/ExternalProcess.pri)
SOURCES += main.cpp \
MainUI.cpp \
diff --git a/src-qt5/desktop-utils/lumina-fm/widgets/DirWidget2.cpp b/src-qt5/desktop-utils/lumina-fm/widgets/DirWidget2.cpp
index 293db823..6c2d4f35 100644
--- a/src-qt5/desktop-utils/lumina-fm/widgets/DirWidget2.cpp
+++ b/src-qt5/desktop-utils/lumina-fm/widgets/DirWidget2.cpp
@@ -17,10 +17,12 @@
#include <QScrollBar>
#include <QSettings>
#include <QtConcurrent/QtConcurrentRun>
+#include <QFileSystemModel>
#include <LuminaOS.h>
#include <LuminaXDG.h>
#include <LUtils.h>
+#include <ExternalProcess.h>
#include "../ScrollDialog.h"
@@ -62,14 +64,28 @@ DirWidget::DirWidget(QString objID, QWidget *parent) : QWidget(parent), ui(new U
connect(BW, SIGNAL(contextMenuRequested()), this, SLOT(OpenContextMenu()) );
connect(BW, SIGNAL(updateDirectoryStatus(QString)), this, SLOT(dirStatusChanged(QString)) );
connect(BW, SIGNAL(hasFocus(QString)), this, SLOT(setCurrentBrowser(QString)) );
+
+ // Create treeviewpane QFileSystemModel model and populate
+ QString folderTreePath = QDir::rootPath();
+ dirtreeModel = new QFileSystemModel(this);
+ 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->folderViewPane->setHeaderHidden(true);
+ ui->folderViewPane->resizeColumnToContents(0);
+ ui->folderViewPane->setColumnHidden(1, true);
+ ui->folderViewPane->setColumnHidden(2, true);
+ ui->folderViewPane->setColumnHidden(3, true);
+
//Now update the rest of the UI
canmodify = false; //initial value
contextMenu = new QMenu(this);
- cNewMenu = cOpenMenu = cFModMenu = cFViewMenu = 0; //not created yet
+ cNewMenu = cOpenMenu = cFModMenu = cFViewMenu = cOpenWithMenu = 0; //not created yet
connect(contextMenu, SIGNAL(aboutToShow()), this, SLOT(UpdateContextMenu()) );
UpdateIcons();
- UpdateText();
+ UpdateText();
createShortcuts();
createMenus();
}
@@ -129,6 +145,25 @@ void DirWidget::setThumbnailSize(int px){
ui->tool_zoom_out->setEnabled(px >16); //lower limit on image sizes
}
+//====================
+// Folder Pane
+//====================
+
+void DirWidget::showDirTreePane(bool show){
+ if(show !=showdirtree){
+ showdirtree = show;
+ }
+}
+
+bool DirWidget::showingDirTreePane(){
+ return showdirtree;
+}
+
+void DirWidget::on_folderViewPane_clicked(const QModelIndex &index){
+ QString tPath = dirtreeModel->fileInfo(index).absoluteFilePath(); // get what was clicked
+ ChangeDir(tPath);
+}
+
// ================
// PUBLIC SLOTS
// ================
@@ -140,8 +175,8 @@ void DirWidget::LoadSnaps(QString basedir, QStringList snaps){
snapshots = snaps;
//if(!snapbasedir.isEmpty()){ watcher->addPath(snapbasedir); } //add this to the watcher in case snapshots get created/removed
//Now update the UI as necessary
- if(ui->tool_snap->menu()==0){
- ui->tool_snap->setMenu(new QMenu(this));
+ if(ui->tool_snap->menu()==0){
+ ui->tool_snap->setMenu(new QMenu(this));
connect(ui->tool_snap->menu(), SIGNAL(triggered(QAction*)), this, SLOT(direct_snap_selected(QAction*)) );
}
ui->tool_snap->menu()->clear();
@@ -151,12 +186,12 @@ void DirWidget::LoadSnaps(QString basedir, QStringList snaps){
}
ui->slider_snap->setRange(0, snaps.length());
if(currentBrowser()->currentDirectory().contains(ZSNAPDIR)){
- //The user was already within a snapshot - figure out which one and set the slider appropriately
- int index = snaps.indexOf( currentBrowser()->currentDirectory().section(ZSNAPDIR,1,1).section("/",0,0) );
- if(index < 0){ index = snaps.length(); } //unknown - load the system (should never happen)
- ui->slider_snap->setValue(index);
+ //The user was already within a snapshot - figure out which one and set the slider appropriately
+ int index = snaps.indexOf( currentBrowser()->currentDirectory().section(ZSNAPDIR,1,1).section("/",0,0) );
+ if(index < 0){ index = snaps.length(); } //unknown - load the system (should never happen)
+ ui->slider_snap->setValue(index);
}else{
- ui->slider_snap->setValue(snaps.length()); //last item (normal system)
+ ui->slider_snap->setValue(snaps.length()); //last item (normal system)
}
on_slider_snap_valueChanged();
QApplication::processEvents(); //let the slider changed signal get thrown away before we re-enable the widget
@@ -183,10 +218,9 @@ void DirWidget::UpdateIcons(){
ui->actionMenu->setIcon( LXDG::findIcon("view-more-vertical","format-list-unordered") );
ui->actionSingleColumn->setIcon(LXDG::findIcon("view-right-close","view-close") );
ui->actionDualColumn->setIcon(LXDG::findIcon("view-right-new","view-split-left-right") );
-
+
ui->tool_zoom_in->setIcon(LXDG::findIcon("zoom-in",""));
ui->tool_zoom_out->setIcon(LXDG::findIcon("zoom-out",""));
-
}
void DirWidget::UpdateText(){
@@ -199,36 +233,37 @@ void DirWidget::UpdateText(){
// PRIVATE
// =================
void DirWidget::createShortcuts(){
-kZoomIn= new QShortcut(QKeySequence(QKeySequence::ZoomIn),this);
-kZoomOut= new QShortcut(QKeySequence(QKeySequence::ZoomOut),this);
-kNewFile= new QShortcut(QKeySequence(Qt::CTRL+Qt::SHIFT+Qt::Key_F),this);
-kNewDir= new QShortcut(QKeySequence(Qt::CTRL+Qt::SHIFT+Qt::Key_N),this);
-kNewXDG= new QShortcut(QKeySequence(Qt::CTRL+Qt::Key_G),this);
-kCut= new QShortcut(QKeySequence(QKeySequence::Cut),this);
-kCopy= new QShortcut(QKeySequence(QKeySequence::Copy),this);
-kPaste= new QShortcut(QKeySequence(QKeySequence::Paste),this);
-kRename= new QShortcut(QKeySequence(Qt::Key_F2),this);
-kFav= new QShortcut(QKeySequence(Qt::Key_F3),this);
-kDel= new QShortcut(QKeySequence(QKeySequence::Delete),this);
-kOpSS= new QShortcut(QKeySequence(Qt::Key_F6),this);
-kOpMM= new QShortcut(QKeySequence(Qt::Key_F7),this);
-kOpTerm = new QShortcut(QKeySequence(Qt::Key_F1),this);
-
-connect(kZoomIn, SIGNAL(activated()), this, SLOT(on_tool_zoom_in_clicked()) );
-connect(kZoomOut, SIGNAL(activated()), this, SLOT(on_tool_zoom_out_clicked()) );
-connect(kNewFile, SIGNAL(activated()), this, SLOT(createNewFile()) );
-connect(kNewDir, SIGNAL(activated()), this, SLOT(createNewDir()) );
-connect(kNewXDG, SIGNAL(activated()), this, SLOT(createNewXDGEntry()) );
-connect(kCut, SIGNAL(activated()), this, SLOT(cutFiles()) );
-connect(kCopy, SIGNAL(activated()), this, SLOT(copyFiles()) );
-connect(kPaste, SIGNAL(activated()), this, SLOT(pasteFiles()) );
-connect(kRename, SIGNAL(activated()), this, SLOT(renameFiles()) );
-connect(kFav, SIGNAL(activated()), this, SLOT(favoriteFiles()) );
-connect(kDel, SIGNAL(activated()), this, SLOT(removeFiles()) );
-connect(kOpSS, SIGNAL(activated()), this, SLOT(openInSlideshow()) );
-connect(kOpMM, SIGNAL(activated()), this, SLOT(openMultimedia()) );
-connect(kOpTerm, SIGNAL(activated()), this, SLOT(openTerminal()) );
-
+ kZoomIn= new QShortcut(QKeySequence(QKeySequence::ZoomIn),this);
+ kZoomOut= new QShortcut(QKeySequence(QKeySequence::ZoomOut),this);
+ kNewFile= new QShortcut(QKeySequence(Qt::CTRL+Qt::SHIFT+Qt::Key_F),this);
+ kNewDir= new QShortcut(QKeySequence(Qt::CTRL+Qt::SHIFT+Qt::Key_N),this);
+ kNewXDG= new QShortcut(QKeySequence(Qt::CTRL+Qt::Key_G),this);
+ kCut= new QShortcut(QKeySequence(QKeySequence::Cut),this);
+ kCopy= new QShortcut(QKeySequence(QKeySequence::Copy),this);
+ kPaste= new QShortcut(QKeySequence(QKeySequence::Paste),this);
+ kRename= new QShortcut(QKeySequence(Qt::Key_F2),this);
+ kExtract= new QShortcut(QKeySequence(Qt::CTRL+Qt::Key_E), this);
+ kFav= new QShortcut(QKeySequence(Qt::Key_F3),this);
+ kDel= new QShortcut(QKeySequence(QKeySequence::Delete),this);
+ kOpSS= new QShortcut(QKeySequence(Qt::Key_F6),this);
+ kOpMM= new QShortcut(QKeySequence(Qt::Key_F7),this);
+ kOpTerm = new QShortcut(QKeySequence(Qt::Key_F1),this);
+
+ connect(kZoomIn, SIGNAL(activated()), this, SLOT(on_tool_zoom_in_clicked()) );
+ connect(kZoomOut, SIGNAL(activated()), this, SLOT(on_tool_zoom_out_clicked()) );
+ connect(kNewFile, SIGNAL(activated()), this, SLOT(createNewFile()) );
+ connect(kNewDir, SIGNAL(activated()), this, SLOT(createNewDir()) );
+ connect(kNewXDG, SIGNAL(activated()), this, SLOT(createNewXDGEntry()) );
+ connect(kCut, SIGNAL(activated()), this, SLOT(cutFiles()) );
+ connect(kCopy, SIGNAL(activated()), this, SLOT(copyFiles()) );
+ connect(kPaste, SIGNAL(activated()), this, SLOT(pasteFiles()) );
+ connect(kRename, SIGNAL(activated()), this, SLOT(renameFiles()) );
+ connect(kExtract, SIGNAL(activated()), this, SLOT(autoExtractFiles()) );
+ connect(kFav, SIGNAL(activated()), this, SLOT(favoriteFiles()) );
+ connect(kDel, SIGNAL(activated()), this, SLOT(removeFiles()) );
+ connect(kOpSS, SIGNAL(activated()), this, SLOT(openInSlideshow()) );
+ connect(kOpMM, SIGNAL(activated()), this, SLOT(openMultimedia()) );
+ connect(kOpTerm, SIGNAL(activated()), this, SLOT(openTerminal()) );
}
void DirWidget::createMenus(){
@@ -260,6 +295,38 @@ void DirWidget::createMenus(){
cFModMenu->addSeparator();
cFModMenu->addAction(LXDG::findIcon("edit-delete",""), tr("Delete Selection"), this, SLOT(removeFiles()), kDel->key() );
*/
+
+//---------------------------------------------------//
+ /*
+ 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(cFViewMenu==0){ cFViewMenu = new QMenu(this); }
else{ cFViewMenu->clear(); }
cFViewMenu->setTitle(tr("View Files..."));
@@ -318,7 +385,7 @@ void DirWidget::on_slider_snap_valueChanged(int val){
//Update the snapshot interface
ui->tool_snap_newer->setEnabled(val < ui->slider_snap->maximum());
ui->tool_snap_older->setEnabled(val > ui->slider_snap->minimum());
- if(val >= snapshots.length() || val < 0){
+ if(val >= snapshots.length() || val < 0){
ui->tool_snap->setText(tr("Current"));
}else if(QFile::exists(snapbasedir+snapshots[val])){
ui->tool_snap->setText( QFileInfo(snapbasedir+snapshots[val]).lastModified().toString(Qt::DefaultLocaleShortDate) );
@@ -378,12 +445,12 @@ void DirWidget::on_actionBack_triggered(){
}
void DirWidget::on_actionUp_triggered(){
- QString dir = currentBrowser()->currentDirectory().section("/",0,-2);
+QString dir = currentBrowser()->currentDirectory().section("/",0,-2);
if(dir.isEmpty())
- dir = "/";
- //Quick check to ensure the directory exists
- while(!QFile::exists(dir) && !dir.isEmpty()){
- dir = dir.section("/",0,-2); //back up one additional dir
+ dir = "/";
+ //Quick check to ensure the directory exists
+ while(!QFile::exists(dir) && !dir.isEmpty()){
+ dir = dir.section("/",0,-2); //back up one additional dir
}
currentBrowser()->changeDirectory(dir);
}
@@ -417,7 +484,7 @@ void DirWidget::on_actionSingleColumn_triggered(bool checked){
}
void DirWidget::on_actionDualColumn_triggered(bool checked){
- if(!checked){ return; }
+ if(!checked){ return; }
if(RCBW!=0){ return; } //nothing to do
RCBW = new BrowserWidget("rc", this);
ui->browser_layout->addWidget(RCBW);
@@ -467,7 +534,7 @@ void DirWidget::fileProperties(){
QMessageBox::warning(this, tr("Missing Utility"), tr("The \"lumina-fileinfo\" utility could not be found on the system. Please install it first.") );
return;
}
- for(int i=0; i<sel.length(); i++){
+ for(int i=0; i<sel.length(); i++){
QProcess::startDetached("lumina-fileinfo \""+sel[i]+"\""); //use absolute paths
}
}
@@ -489,18 +556,19 @@ void DirWidget::UpdateContextMenu(){
//qDebug() << " Selection:" << sel;
contextMenu->clear();
- 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()) );
+ 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->addSection(LXDG::findIcon("unknown",""), tr("File Operations"));
// contextMenu->addMenu(cFModMenu);
// cFModMenu->setEnabled(!sel.isEmpty() && canmodify);
- if(!sel.isEmpty()){
+ if(!sel.isEmpty()){
contextMenu->addAction(LXDG::findIcon("edit-rename",""), tr("Rename..."), this, SLOT(renameFiles()), kRename->key() )->setEnabled(canmodify);
contextMenu->addAction(LXDG::findIcon("edit-cut",""), tr("Cut Selection"), this, SLOT(cutFiles()), kCut->key() )->setEnabled(canmodify);
contextMenu->addAction(LXDG::findIcon("edit-copy",""), tr("Copy Selection"), this, SLOT(copyFiles()), kCopy->key() )->setEnabled(canmodify);
+ if(LUtils::isValidBinary("lumina-archiver") && sel.length() ==1){ contextMenu->addAction(LXDG::findIcon("archive",""), tr("Auto-Extract"), this, SLOT(autoExtractFiles()), kExtract->key() )->setEnabled(canmodify); }
}
if( QApplication::clipboard()->mimeData()->hasFormat("x-special/lumina-copied-files") ){
contextMenu->addAction(LXDG::findIcon("edit-paste",""), tr("Paste"), this, SLOT(pasteFiles()), QKeySequence(Qt::CTRL+Qt::Key_V) )->setEnabled(canmodify);
@@ -513,12 +581,12 @@ void DirWidget::UpdateContextMenu(){
contextMenu->addMenu(cFViewMenu);
cFViewMenu->setEnabled(!sel.isEmpty());
- //Now add the general selection options
- contextMenu->addSection(LXDG::findIcon("folder","inode/directory"), tr("Directory Operations"));
- if(canmodify){
- contextMenu->addMenu(cNewMenu);
- }
- contextMenu->addMenu(cOpenMenu);
+ //Now add the general selection options
+ contextMenu->addSection(LXDG::findIcon("folder","inode/directory"), tr("Directory Operations"));
+ if(canmodify){
+ contextMenu->addMenu(cNewMenu);
+ }
+ contextMenu->addMenu(cOpenMenu);
}
void DirWidget::currentDirectoryChanged(bool widgetonly){
@@ -528,10 +596,10 @@ void DirWidget::currentDirectoryChanged(bool widgetonly){
if(widgetonly){ ui->label_status->setText(currentBrowser()->status()); }
else if( !currentBrowser()->isEnabled() ){ ui->label_status->setText(tr("Loading...")); }
//qDebug() << "Start search for snapshots";
- if(!cur.contains("/.zfs/snapshot") ){
+ if(!cur.contains("/.zfs/snapshot") ){
normalbasedir = cur;
ui->group_snaps->setVisible(false);
- emit findSnaps(ID, cur);
+ emit findSnaps(ID, cur);
qDebug() << "Changed to directory:" << cur;
}else{
//Re-assemble the normalbasedir variable (in case moving around within a snapshot)
@@ -540,8 +608,11 @@ void DirWidget::currentDirectoryChanged(bool widgetonly){
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);
+ ui->folderViewPane->setCurrentIndex( index );
+ ui->folderViewPane->scrollTo(index);
}
void DirWidget::dirStatusChanged(QString stat){
@@ -564,12 +635,12 @@ void DirWidget::setCurrentBrowser(QString id){
//Context Menu Functions
void DirWidget::createNewFile(){
- if(!canmodify){ return; } //cannot create anything here
+ if(!canmodify){ return; } //cannot create anything here
//Prompt for the new filename
bool ok = false;
QString newdocument = QInputDialog::getText(this, tr("New Document"), tr("Name:"), QLineEdit::Normal, "", \
&ok, 0, Qt::ImhFormattedNumbersOnly | Qt::ImhUppercaseOnly | Qt::ImhLowercaseOnly);
- if(!ok || newdocument.isEmpty()){ return; }
+ if(!ok || newdocument.isEmpty()){ return; }
//Create the empty file
QString full = currentBrowser()->currentDirectory();
if(!full.endsWith("/")){ full.append("/"); }
@@ -584,7 +655,7 @@ void DirWidget::createNewFile(){
//If successfully opened, it has created a blank file
file.close();
}else{
- QMessageBox::warning(this, tr("Error Creating Document"), tr("The document could not be created. Please ensure that you have the proper permissions."));
+ QMessageBox::warning(this, tr("Error Creating Document"), tr("The document could not be created. Please ensure that you have the proper permissions."));
}
}
@@ -593,7 +664,7 @@ void DirWidget::createNewDir(){
//Prompt for the new dir name
bool ok = false;
QString newdir = QInputDialog::getText(this, tr("New Directory"), tr("Name:"), QLineEdit::Normal, "", \
- &ok, 0, Qt::ImhFormattedNumbersOnly | Qt::ImhUppercaseOnly | Qt::ImhLowercaseOnly);
+ &ok, 0, Qt::ImhFormattedNumbersOnly | Qt::ImhUppercaseOnly | Qt::ImhLowercaseOnly);
if(!ok || newdir.isEmpty()){ return; }
//Now create the new dir
QString full = currentBrowser()->currentDirectory();
@@ -617,7 +688,7 @@ void DirWidget::createNewXDGEntry(){
bool ok = false;
QString newdocument = QInputDialog::getText(this, tr("New Document"), tr("Name:"), QLineEdit::Normal, "", \
&ok, 0, Qt::ImhFormattedNumbersOnly | Qt::ImhUppercaseOnly | Qt::ImhLowercaseOnly);
- if(!ok || newdocument.isEmpty()){ return; }
+ if(!ok || newdocument.isEmpty()){ return; }
if(!newdocument.endsWith(".desktop")){ newdocument.append(".desktop"); }
//Create the empty file
QString full = currentBrowser()->currentDirectory();
@@ -633,57 +704,89 @@ void DirWidget::createNewXDGEntry(){
/*void DirWidget::createNewSymlink{
-}*/
+ }*/
// - Selected FILE operations
+
+//---------------------------------------------------//
+/*
+QStringList DirWidget::getPreferredApplications(){
+ QStringList out;
+ //First list all the applications registered for that same mimetype
+ QString mime = fileEXT;
+ out << LXDG::findAvailableAppsForMime(mime);
+
+ //Now search the internal settings for that extension and find any applications last used
+ QStringList keys = settings->allKeys();
+ for(int i=0; i<keys.length(); i++){
+ if(keys[i].startsWith("default/")){ continue; } //ignore the defaults (they will also be in the main)
+ if(keys[i].toLower() == fileEXT.toLower()){
+ QStringList files = settings->value(keys[i]).toString().split(":::");
+ qDebug() << "Found Files:" << keys[i] << files;
+ bool cleaned = false;
+ for(int j=0; j<files.length(); j++){
+ if(QFile::exists(files[j])){ out << files[j]; }
+ else{ files.removeAt(j); j--; cleaned=true; } //file no longer available - remove it
+ }
+ if(cleaned){ settings->setValue(keys[i], files.join(":::")); } //update the registry
+ if(!out.isEmpty()){ break; } //already found files
+ }
+ }
+ //Make sure we don't have any duplicates before we return the list
+ out.removeDuplicates();
+ return out;
+}
+ */
+ //---------------------------------------------------//
+
void DirWidget::cutFiles(){
QStringList sel = currentBrowser()->currentSelection();
if(sel.isEmpty() || !canmodify){ return; }
- emit CutFiles(sel);
+ emit CutFiles(sel);
}
void DirWidget::copyFiles(){
QStringList sel = currentBrowser()->currentSelection();
if(sel.isEmpty()){ return; }
- emit CopyFiles(sel);
+ emit CopyFiles(sel);
}
void DirWidget::pasteFiles(){
if( !canmodify ){ return; }
- emit PasteFiles(currentBrowser()->currentDirectory(), QStringList() );
+ emit PasteFiles(currentBrowser()->currentDirectory(), QStringList() );
}
void DirWidget::renameFiles(){
QStringList sel = currentBrowser()->currentSelection();
if(sel.isEmpty() || !canmodify){ return; }
qDebug() << "Deleting selected Items:" << sel;
- emit RenameFiles(sel);
+ emit RenameFiles(sel);
}
void DirWidget::favoriteFiles(){
QStringList sel = currentBrowser()->currentSelection();
if(sel.isEmpty()){ return; }
- emit FavoriteFiles(sel);
+ emit FavoriteFiles(sel);
}
void DirWidget::removeFiles(){
QStringList sel = currentBrowser()->currentSelection();
if(sel.isEmpty() || !canmodify){ return; }
qDebug() << "Deleting selected Items:" << sel;
- emit RemoveFiles(sel);
+ emit RemoveFiles(sel);
}
void DirWidget::runFiles(){
QStringList sel = currentBrowser()->currentSelection();
if(sel.isEmpty()){ return; }
QStringList dirs;
- for(int i=0; i<sel.length(); i++){
+ for(int i=0; i<sel.length(); i++){
if(QFileInfo(sel[i]).isDir()){
dirs << sel[i];
}else{
QProcess::startDetached("lumina-open \""+sel[i]+"\"");
}
- }
+ }
if(!dirs.isEmpty()){
currentBrowser()->changeDirectory( dirs.takeFirst()); //load the first directory in this widget
}
@@ -696,13 +799,13 @@ void DirWidget::runWithFiles(){
QStringList sel = currentBrowser()->currentSelection();
if(sel.isEmpty()){ return; }
QStringList dirs;
- for(int i=0; i<sel.length(); i++){
+ for(int i=0; i<sel.length(); i++){
if(QFileInfo(sel[i]).isDir()){
dirs << sel[i];
}else{
QProcess::startDetached("lumina-open -select \""+sel[i]+"\"");
}
- }
+ }
if(!dirs.isEmpty()){
emit OpenDirectories(dirs); //open the rest of the directories in other tabs
}
@@ -710,7 +813,7 @@ void DirWidget::runWithFiles(){
/*void DirWidget::attachToNewEmail(){
-}*/
+}*/
// - Context-specific operations
void DirWidget::openInSlideshow(){
@@ -739,6 +842,18 @@ void DirWidget::openMultimedia(){
if(!list.isEmpty()){ emit PlayFiles(list); }
}
+void DirWidget::autoExtractFiles(){
+ QStringList files = currentBrowser()->currentSelection();
+ qDebug() << "Starting auto-extract:" << files;
+ ExternalProcess::launch("lumina-archiver", QStringList() << "--ax" << files);
+ /*ExternalProcess *pExtract= new ExternalProcess(this);
+ QString program = "lumina-archiver --ax ";
+ QStringList files = currentBrowser()->currentSelection();
+ for(int i=0; i<files.length(); i++){
+ QString runline = program + files[i];
+ pExtract->start(runline);*/
+}
+
//====================
// PROTECTED
//====================
diff --git a/src-qt5/desktop-utils/lumina-fm/widgets/DirWidget2.h b/src-qt5/desktop-utils/lumina-fm/widgets/DirWidget2.h
index 5f06e2b6..20b677d7 100644
--- a/src-qt5/desktop-utils/lumina-fm/widgets/DirWidget2.h
+++ b/src-qt5/desktop-utils/lumina-fm/widgets/DirWidget2.h
@@ -15,6 +15,7 @@
#include <QLineEdit>
#include <QShortcut>
#include <QFileSystemWatcher>
+#include <QFileSystemModel>
#include <QTimer>
#include <QFuture>
@@ -33,28 +34,34 @@ public:
enum DETAILTYPES{ NAME, SIZE, TYPE, DATEMOD, DATECREATE};
DirWidget(QString objID, QWidget *parent = 0); //needs a unique ID (to distinguish from other DirWidgets)
~DirWidget();
-
+
void cleanup(); //called before the browser is closed down
-
+
//Directory Managment
void ChangeDir(QString dirpath);
void setDirCompleter(QCompleter *comp);
-
+
//Information
QString id();
QString currentDir();
+ QFileSystemModel *dirtreeModel;
+ QStringList PREFAPPS;
//View Settings
void setShowDetails(bool show);
void showHidden(bool show);
void showThumbnails(bool show);
void setThumbnailSize(int px);
- void setFocusLineDir();
-
+ void setFocusLineDir();
+ void showDirTreePane(bool show);
+ bool showingDirTreePane();
+
+
+
public slots:
//void LoadDir(QString dir, LFileInfoList list);
void LoadSnaps(QString basedir, QStringList snaps);
-
+
//Refresh options
void refresh(); //Refresh current directory
@@ -69,18 +76,18 @@ private:
QString ID, cBID; //unique ID assigned by the parent, and currently active browser widget
QString normalbasedir, snapbasedir, snaprelpath; //for maintaining directory context while moving between snapshots
QStringList snapshots, needThumbs, tmpSel;
- bool canmodify;
+ bool canmodify, showdirtree;
//The Toolbar and associated items
QToolBar *toolbar;
QLineEdit *line_dir;
//The context menu and associated items
- QMenu *contextMenu, *cNewMenu, *cOpenMenu, *cFModMenu, *cFViewMenu;
+ QMenu *contextMenu, *cNewMenu, *cOpenMenu, *cFModMenu, *cFViewMenu, *cOpenWithMenu;
//The keyboard shortcuts for context menu items
- QShortcut *kZoomIn, *kZoomOut, *kNewFile, *kNewDir, *kNewXDG, *kCut, *kCopy, *kPaste, *kRename, \
- *kFav, *kDel, *kOpSS, *kOpMM, *kOpTerm;
+ QShortcut *kZoomIn, *kZoomOut, *kNewFile, *kNewDir, *kNewXDG, *kCut, *kCopy, *kPaste, *kRename, \
+ *kFav, *kDel, *kOpSS, *kOpMM, *kOpTerm, *kExtract;
//Functions for internal use
void createShortcuts(); //on init only
@@ -89,19 +96,27 @@ private:
BrowserWidget* currentBrowser();
QStringList currentDirFiles(); //all the "files" available within the current dir/browser
+ QProcess *pExtract;
+
+ //OpenWithMenu
+ QString fileEXT, filePath;
+ QStringList mimetypes, keys, files;
+ //QStringList getPreferredApplications();
+
+
private slots:
//UI BUTTONS/Actions
// -- Bottom Action Buttons
void on_tool_zoom_in_clicked();
- void on_tool_zoom_out_clicked();
+ void on_tool_zoom_out_clicked();
// -- Top Snapshot Buttons
void on_tool_snap_newer_clicked();
void on_tool_snap_older_clicked();
void on_slider_snap_valueChanged(int val = -1);
void direct_snap_selected(QAction*);
-
+
//Top Toolbar buttons
void on_actionBack_triggered();
void on_actionUp_triggered();
@@ -115,7 +130,7 @@ private slots:
void fileCheckSums();
void fileProperties();
void openTerminal();
-
+
//Browser Functions
void OpenContextMenu();
@@ -123,7 +138,8 @@ private slots:
void currentDirectoryChanged(bool widgetonly = false);
void dirStatusChanged(QString);
void setCurrentBrowser(QString);
-
+ void on_folderViewPane_clicked(const QModelIndex &index);
+
//Context Menu Functions
// - DIRECTORY operations
void createNewFile();
@@ -140,18 +156,20 @@ private slots:
void removeFiles();
void runFiles();
void runWithFiles();
- //void attachToNewEmail();
+ //void attachToNewEmail();
+ void autoExtractFiles();
// - Context-specific operations
void openInSlideshow();
- void openMultimedia();
+ void openMultimedia();
+
signals:
//Directory loading/finding signals
void OpenDirectories(QStringList); //Directories to open in other tabs/columns
void findSnaps(QString, QString); //ID, dirpath (Request snapshot information for a directory)
void CloseBrowser(QString); //ID (Request that this browser be closed)
-
+
//External App/Widget launching
void PlayFiles(LFileInfoList); //open in multimedia player
void ViewFiles(LFileInfoList); //open in slideshow
diff --git a/src-qt5/desktop-utils/lumina-fm/widgets/DirWidget2.ui b/src-qt5/desktop-utils/lumina-fm/widgets/DirWidget2.ui
index 29660ad4..c49e99ac 100644
--- a/src-qt5/desktop-utils/lumina-fm/widgets/DirWidget2.ui
+++ b/src-qt5/desktop-utils/lumina-fm/widgets/DirWidget2.ui
@@ -19,29 +19,11 @@
<property name="windowTitle">
<string>Form</string>
</property>
- <layout class="QGridLayout" name="gridLayout" rowstretch="0,0,0,0" columnstretch="0,1">
- <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>1</number>
- </property>
- <property name="verticalSpacing">
- <number>2</number>
- </property>
- <item row="0" column="0" rowspan="2" colspan="2">
+ <layout class="QVBoxLayout" name="verticalLayout" stretch="0,0,1,0">
+ <item>
<layout class="QHBoxLayout" name="toolbar_layout"/>
</item>
- <item row="2" column="1">
+ <item>
<layout class="QVBoxLayout" name="browser_layout_main">
<property name="spacing">
<number>1</number>
@@ -122,12 +104,42 @@
</layout>
</widget>
</item>
- <item>
- <layout class="QHBoxLayout" name="browser_layout"/>
- </item>
</layout>
</item>
- <item row="3" column="0" colspan="2">
+ <item>
+ <widget class="QWidget" name="widget" native="true">
+ <layout class="QHBoxLayout" name="horizontalLayout_4">
+ <item>
+ <widget class="QSplitter" name="splitter">
+ <property name="orientation">
+ <enum>Qt::Horizontal</enum>
+ </property>
+ <widget class="QTreeView" name="folderViewPane">
+ <property name="sizePolicy">
+ <sizepolicy hsizetype="Preferred" vsizetype="Expanding">
+ <horstretch>0</horstretch>
+ <verstretch>0</verstretch>
+ </sizepolicy>
+ </property>
+ <property name="indentation">
+ <number>15</number>
+ </property>
+ <property name="uniformRowHeights">
+ <bool>true</bool>
+ </property>
+ <property name="allColumnsShowFocus">
+ <bool>true</bool>
+ </property>
+ </widget>
+ <widget class="QWidget" name="horizontalLayoutWidget">
+ <layout class="QHBoxLayout" name="browser_layout"/>
+ </widget>
+ </widget>
+ </item>
+ </layout>
+ </widget>
+ </item>
+ <item>
<layout class="QHBoxLayout" name="horizontalLayout">
<item>
<widget class="QLabel" name="label_status">
bgstack15