aboutsummaryrefslogtreecommitdiff
path: root/lumina-fm/MainUI-old.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'lumina-fm/MainUI-old.cpp')
-rw-r--r--lumina-fm/MainUI-old.cpp1597
1 files changed, 0 insertions, 1597 deletions
diff --git a/lumina-fm/MainUI-old.cpp b/lumina-fm/MainUI-old.cpp
deleted file mode 100644
index 732554dd..00000000
--- a/lumina-fm/MainUI-old.cpp
+++ /dev/null
@@ -1,1597 +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
-//===========================================
-#include "MainUI.h"
-#include "ui_MainUI.h"
-
-#include <QImageWriter>
-#include <QFileInfo>
-
-#define DEBUG 0
-
-MainUI::MainUI() : QMainWindow(), ui(new Ui::MainUI){
- //for Signal/slot we must register the Typedef of QFileInfoList
- qRegisterMetaType<QFileInfoList>("QFileInfoList");
- ui->setupUi(this);
- if(DEBUG){ qDebug() << "Initilization:"; }
- //Be careful about the QSettings setup, it must match the lumina-desktop setup
- QSettings::setPath(QSettings::NativeFormat, QSettings::UserScope, QDir::homePath()+"/.lumina");
- settings = new QSettings( QSettings::UserScope, "LuminaDE", "lumina-fm", this);
- favdir = QDir::homePath()+"/.lumina/favorites/"; //save this for later
- syncTimer = new QTimer(this);
- syncTimer->setInterval(200); //1/5 second (collect as many signals/slots as necessary
- syncTimer->setSingleShot(true);
- //Reset the UI to the previously used size (if possible)
- if(DEBUG){ qDebug() << " - Reset window size"; }
- int height = settings->value("geometry/height",-1).toInt();
- if(height>100 && height <= QApplication::desktop()->availableGeometry(this).height()){ this->resize(this->width(), height); }
- int width = settings->value("geometry/width",-1).toInt();
- if(width>100 && width <= QApplication::desktop()->availableGeometry(this).width()){ this->resize(width, this->height() ); }
- //initialize the non-ui widgets
- if(DEBUG){ qDebug() << " - Tab Bar Setup"; }
- tabBar = new QTabBar(this);
- tabBar->setTabsClosable(true);
- tabBar->setMovable(true); //tabs are independant - so allow the user to sort them
- tabBar->setShape(QTabBar::RoundedNorth);
- tabBar->setFocusPolicy(Qt::NoFocus);
- ui->verticalLayout_browser->insertWidget(0,tabBar);
- currentDir = new QLineEdit(this);
- ui->toolBar->insertWidget(ui->actionBookMark, currentDir);
- currentDir->setFocusPolicy(Qt::StrongFocus);
- if(DEBUG){ qDebug() << " - Threading"; }
- workThread = new QThread;
- workThread->setObjectName("Lumina-fm filesystem worker");
- worker = new BackgroundWorker;
- worker->moveToThread(workThread);
- if(DEBUG){ qDebug() << " - File System Model"; }
- fsmod = new DDFileSystemModel(this);
- fsmod->setRootPath("/");
- //fsmod->setReadOnly(false); //required for DnD, but also enables a lot of other stuff
- //qDebug() << "DnD options:" << fsmod->supportedDropActions();
- ui->tree_dir_view->setModel(fsmod);
- ui->tree_dir_view->sortByColumn(0, Qt::AscendingOrder);
- ui->tree_dir_view->setColumnWidth(0,200);
- ui->tree_dir_view->setColumnWidth(1,80); //size column should be small
- ui->tree_dir_view->setColumnWidth(2,80); //type column should be small
- ui->list_dir_view->setModel(fsmod);
- dirCompleter = new QCompleter(fsmod, this);
- dirCompleter->setModelSorting( QCompleter::CaseInsensitivelySortedModel );
- currentDir->setCompleter(dirCompleter);
- snapmod = new QFileSystemModel(this);
- ui->tree_zfs_dir->setModel(snapmod);
- ui->tree_zfs_dir->sortByColumn(0, Qt::AscendingOrder);
- if(DEBUG){ qDebug() << " - Icon Provider"; }
- iconProv = new MimeIconProvider();
- fsmod->setIconProvider(iconProv);
- snapmod->setIconProvider(iconProv);
- if(DEBUG){ qDebug() << " - Context Menu"; }
- contextMenu = new QMenu(this);
- radio_view_details = new QRadioButton(tr("Detailed List"), this);
- radio_view_list = new QRadioButton(tr("Basic List"), this);
- radio_view_icons = new QRadioButton(tr("Icons"), this);
- detWA = new QWidgetAction(this);
- detWA->setDefaultWidget(radio_view_details);
- listWA = new QWidgetAction(this);
- listWA->setDefaultWidget(radio_view_list);
- icoWA = new QWidgetAction(this);
- icoWA->setDefaultWidget(radio_view_icons);
- ui->menuView->addAction(detWA);
- ui->menuView->addAction(listWA);
- ui->menuView->addAction(icoWA);
- //Setup the special Phonon widgets
- if(DEBUG){ qDebug() << " - Multimedia Widgets"; }
- mediaObj = new QMediaPlayer(this);
- mediaObj->setVolume(100);
- mediaObj->setNotifyInterval(500); //only every 1/2 second update
- videoDisplay = new QVideoWidget(this);
- videoDisplay->setSizePolicy(QSizePolicy::Expanding, QSizePolicy::Expanding);
- ui->videoLayout->addWidget(videoDisplay);
- mediaObj->setVideoOutput(videoDisplay);
- videoDisplay->setVisible(false);
- playerSlider = new QSlider(this);
- playerSlider->setOrientation(Qt::Horizontal);
- ui->videoControlLayout->insertWidget(4, playerSlider);
- ui->tool_player_stop->setEnabled(false); //nothing to stop yet
- ui->tool_player_pause->setVisible(false); //nothing to pause yet
- playerSlider->setEnabled(false); //nothing to seek yet
- //Setup any specialty keyboard shortcuts
- if(DEBUG){ qDebug() << " - Keyboard Shortcuts"; }
- nextTabLShort = new QShortcut( QKeySequence(tr("Shift+Left")), this);
- nextTabRShort = new QShortcut( QKeySequence(tr("Shift+Right")), this);
- closeTabShort = new QShortcut( QKeySequence(tr("Ctrl+W")), this);
- copyFilesShort = new QShortcut( QKeySequence(tr("Ctrl+C")), this);
- pasteFilesShort = new QShortcut( QKeySequence(tr("Ctrl+V")), this);
- cutFilesShort = new QShortcut( QKeySequence(tr("Ctrl+X")), this);
- deleteFilesShort = new QShortcut( QKeySequence(tr("Delete")), this);
- //Finish loading the interface
- workThread->start();
- if(DEBUG){ qDebug() << " - Icons"; }
- setupIcons();
- if(DEBUG){ qDebug() << " - Connections"; }
- setupConnections();
- if(DEBUG){ qDebug() << " - Settings"; }
- loadSettings();
- if(DEBUG){ qDebug() << " - Bookmarks"; }
- RebuildBookmarksMenu();
- if(DEBUG){ qDebug() << " - Devices"; }
- RebuildDeviceMenu();
- //Make sure we start on the browser page
- if(DEBUG){ qDebug() << " - Load Browser Page"; }
- goToBrowserPage();
- if(DEBUG){ qDebug() << " - Done with init"; }
-}
-
-MainUI::~MainUI(){
- workThread->quit();
- workThread->wait();
-}
-
-void MainUI::OpenDirs(QStringList dirs){
- QStringList invalid;
- for(int i=0; i<dirs.length(); i++){
- //Add this directory in a new tab
- if(dirs[i].endsWith("/")){ dirs[i].chop(1); }
- if(!QFile::exists(dirs[i])){ invalid << dirs[i]; continue; }
- if(DEBUG){ qDebug() << "Open Directory:" << dirs[i]; }
- int index = tabBar->addTab( dirs[i].section("/",-1) );
- tabBar->setTabWhatsThis( index, dirs[i] );
- if(index==0){ setCurrentDir(dirs[i]); }//display this as the current dir
- }
- tabBar->setVisible( tabBar->count() > 1 );
- if(!invalid.isEmpty()){
- QMessageBox::warning(this, tr("Invalid Directories"), tr("The following directories are invalid and could not be opened:")+"\n"+invalid.join(", ") );
- }
-}
-
-//==========
-// PRIVATE
-//==========
-void MainUI::setupIcons(){
- this->setWindowIcon( LXDG::findIcon("Insight-FileManager","") );
-
- //Setup all the icons using libLumina
- ui->actionClose->setIcon( LXDG::findIcon("application-exit","") );
- ui->actionNew_Tab->setIcon( LXDG::findIcon("tab-new-background","") );
- //ui->action_Preferences->setIcon( LXDG::findIcon("configure","") );
- ui->actionUpDir->setIcon( LXDG::findIcon("go-up","") );
- ui->actionBack->setIcon( LXDG::findIcon("go-previous","") );
- ui->actionHome->setIcon( LXDG::findIcon("go-home","") );
- ui->actionBookMark->setIcon( LXDG::findIcon("bookmarks","") );
- ui->actionBackToBrowser->setIcon( LXDG::findIcon("go-previous","") );
- ui->actionManage_Bookmarks->setIcon( LXDG::findIcon("bookmarks-organize","") );
- ui->actionScan->setIcon( LXDG::findIcon("system-search","") );
- ui->actionSearch->setIcon( LXDG::findIcon("edit-find","") );
-
- //Browser page
- ui->tool_addNewFile->setIcon( LXDG::findIcon("document-new",""));
- ui->tool_addToDir->setIcon( LXDG::findIcon("folder-new","") );
- ui->tool_goToImages->setIcon( LXDG::findIcon("fileview-preview","") );
- ui->tool_goToPlayer->setIcon( LXDG::findIcon("applications-multimedia","") );
- ui->tool_goToRestore->setIcon( LXDG::findIcon("document-revert","") );
- ui->tool_act_run->setIcon( LXDG::findIcon("run-build-file","") );
- ui->tool_act_runwith->setIcon( LXDG::findIcon("run-build-configure","") );
- ui->tool_act_cut->setIcon( LXDG::findIcon("edit-cut","") );
- ui->tool_act_copy->setIcon( LXDG::findIcon("edit-copy","") );
- ui->tool_act_paste->setIcon( LXDG::findIcon("edit-paste","") );
- ui->tool_act_rename->setIcon( LXDG::findIcon("edit-rename","") );
- ui->tool_act_rm->setIcon( LXDG::findIcon("edit-delete","") );
- ui->tool_act_fav->setIcon( LXDG::findIcon("bookmark-toolbar","") );
-
- //Multimedia Player page
- ui->tool_player_next->setIcon( LXDG::findIcon("media-skip-forward","") );
- ui->tool_player_prev->setIcon( LXDG::findIcon("media-skip-backward","") );
- ui->tool_player_pause->setIcon( LXDG::findIcon("media-playback-pause","") );
- ui->tool_player_play->setIcon( LXDG::findIcon("media-playback-start","") );
- ui->tool_player_stop->setIcon( LXDG::findIcon("media-playback-stop","") );
-
- //Slideshow page
- ui->tool_image_goBegin->setIcon( LXDG::findIcon("go-first-view","") );
- ui->tool_image_goEnd->setIcon( LXDG::findIcon("go-last-view","") );
- ui->tool_image_goPrev->setIcon( LXDG::findIcon("go-previous-view","") );
- ui->tool_image_goNext->setIcon( LXDG::findIcon("go-next-view","") );
- ui->tool_image_remove->setIcon( LXDG::findIcon("edit-delete","") );
- ui->tool_image_rotateleft->setIcon( LXDG::findIcon("object-rotate-left","") );
- ui->tool_image_rotateright->setIcon( LXDG::findIcon("object-rotate-right","") );
-
- //ZFS Restore page
- ui->tool_zfs_nextSnap->setIcon( LXDG::findIcon("go-next-view","") );
- ui->tool_zfs_prevSnap->setIcon( LXDG::findIcon("go-previous-view","") );
- ui->tool_zfs_restoreItem->setIcon( LXDG::findIcon("document-revert","") );
-}
-
-void MainUI::setupConnections(){
- connect(QApplication::instance(), SIGNAL(focusChanged(QWidget*, QWidget*)), this, SLOT(startEditDir(QWidget*, QWidget*)) );
- connect(tabBar, SIGNAL(currentChanged(int)), this, SLOT(tabChanged(int)) );
- connect(tabBar, SIGNAL(tabCloseRequested(int)), this, SLOT(tabClosed(int)) );
- connect(ui->menuBookmarks, SIGNAL(triggered(QAction*)), this, SLOT(goToBookmark(QAction*)) );
- connect(ui->menuExternal_Devices, SIGNAL(triggered(QAction*)), this, SLOT(goToDevice(QAction*)) );
- connect(currentDir, SIGNAL(returnPressed()), this, SLOT(goToDirectory()));
- connect(radio_view_details, SIGNAL(toggled(bool)), this, SLOT(viewModeChanged(bool)) );
- connect(radio_view_list, SIGNAL(toggled(bool)), this, SLOT(viewModeChanged(bool)) );
- connect(radio_view_icons, SIGNAL(toggled(bool)), this, SLOT(viewModeChanged(bool)) );
- connect(fsmod, SIGNAL(directoryLoaded(QString)), this, SLOT(slotStartSyncTimer()) );
- connect(syncTimer, SIGNAL(timeout()), this, SLOT(currentDirectoryLoaded()) );
- //Background worker class
- connect(this, SIGNAL(DirChanged(QString)), worker, SLOT(startDirChecks(QString)) );
- connect(worker, SIGNAL(ImagesAvailable(QStringList)), this, SLOT(AvailablePictures(QStringList)) );
- connect(worker, SIGNAL(MultimediaAvailable(QStringList)), this, SLOT(AvailableMultimediaFiles(QStringList)) );
- connect(worker, SIGNAL(SnapshotsAvailable(QString, QStringList)), this, SLOT(AvailableBackups(QString, QStringList)) );
-
- //Background worker class for statusbar
- connect(this, SIGNAL(Si_AdaptStatusBar(QFileInfoList, QString, QString, QString)), worker, SLOT(createStatusBarMsg(QFileInfoList, QString, QString, QString)) );
- connect(worker, SIGNAL(Si_DisplayStatusBar(QString)), this, SLOT(DisplayStatusBar(QString)) );
-
- //Action buttons on browser page
- connect(ui->tool_act_run, SIGNAL(clicked()), this, SLOT(OpenItem()) );
- connect(ui->tool_act_runwith, SIGNAL(clicked()), this, SLOT(OpenItemWith()) );
- connect(ui->tool_act_rm, SIGNAL(clicked()), this, SLOT(RemoveItem()) );
- connect(ui->tool_act_rename, SIGNAL(clicked()), this, SLOT(RenameItem()) );
- connect(ui->tool_act_paste, SIGNAL(clicked()), this, SLOT(PasteItems()) );
- connect(ui->tool_act_cut, SIGNAL(clicked()), this, SLOT(CutItems()) );
- connect(ui->tool_act_copy, SIGNAL(clicked()), this, SLOT(CopyItems()) );
- connect(ui->tool_act_fav, SIGNAL(clicked()), this, SLOT(FavoriteItem()) );
-
- //Tree Widget interaction
- connect(ui->tree_dir_view, SIGNAL(activated(const QModelIndex&)), this, SLOT(ItemRun(const QModelIndex&)) );
- connect(ui->list_dir_view, SIGNAL(activated(const QModelIndex&)), this, SLOT(ItemRun(const QModelIndex&)) );
- connect(ui->tree_dir_view, SIGNAL(customContextMenuRequested(const QPoint&)), this, SLOT(OpenContextMenu(const QPoint&)) );
- connect(ui->list_dir_view, SIGNAL(customContextMenuRequested(const QPoint&)), this, SLOT(OpenContextMenu(const QPoint&)) );
- connect(ui->tree_dir_view->selectionModel(), SIGNAL(selectionChanged(const QItemSelection, const QItemSelection)), this, SLOT(ItemSelectionChanged()) );
- connect(ui->list_dir_view->selectionModel(), SIGNAL(selectionChanged(const QItemSelection, const QItemSelection)), this, SLOT(ItemSelectionChanged()) );
-
- //Page Switching
- connect(ui->tool_goToPlayer, SIGNAL(clicked()), this, SLOT(goToMultimediaPage()) );
- connect(ui->tool_goToRestore, SIGNAL(clicked()), this, SLOT(goToRestorePage()) );
- connect(ui->tool_goToImages, SIGNAL(clicked()), this, SLOT(goToSlideshowPage()) );
- connect(ui->actionBackToBrowser, SIGNAL(triggered()), this, SLOT(goToBrowserPage()) );
-
- //Slideshow page
- connect(ui->combo_image_name, SIGNAL(currentIndexChanged(int)), this, SLOT(showNewPicture()) );
- connect(ui->tool_image_goBegin, SIGNAL(clicked()), this, SLOT(firstPicture()) );
- connect(ui->tool_image_goEnd, SIGNAL(clicked()), this, SLOT(lastPicture()) );
- connect(ui->tool_image_goNext, SIGNAL(clicked()), this, SLOT(nextPicture()) );
- connect(ui->tool_image_goPrev, SIGNAL(clicked()), this, SLOT(prevPicture()) );
- connect(ui->tool_image_remove, SIGNAL(clicked()), this, SLOT(removePicture()) );
- connect(ui->tool_image_rotateleft, SIGNAL(clicked()), this, SLOT(rotatePictureLeft()) );
- connect(ui->tool_image_rotateright, SIGNAL(clicked()), this, SLOT(rotatePictureRight()) );
-
- //ZFS Restore page
- connect(ui->slider_zfs_snapshot, SIGNAL(valueChanged(int)), this, SLOT(showSnapshot()) );
- connect(ui->tool_zfs_nextSnap, SIGNAL(clicked()), this, SLOT(nextSnapshot()) );
- connect(ui->tool_zfs_prevSnap, SIGNAL(clicked()), this, SLOT(prevSnapshot()) );
- connect(ui->tool_zfs_restoreItem, SIGNAL(clicked()), this, SLOT(restoreItems()) );
-
- //Multimedia Player page
- connect(ui->tool_player_next, SIGNAL(clicked()), this, SLOT(playerNext()));
- connect(ui->tool_player_prev, SIGNAL(clicked()), this, SLOT(playerPrevious()));
- connect(ui->tool_player_pause, SIGNAL(clicked()), this, SLOT(playerPause()));
- connect(ui->tool_player_play, SIGNAL(clicked()), this, SLOT(playerStart()));
- connect(ui->tool_player_stop, SIGNAL(clicked()), this, SLOT(playerStop()));
- connect(ui->combo_player_list, SIGNAL(currentIndexChanged(int)), this, SLOT(playerFileChanged()) );
- connect(playerSlider, SIGNAL(sliderPressed()), this, SLOT(playerSliderHeld()) );
- connect(playerSlider, SIGNAL(sliderReleased()), this, SLOT(playerSliderChanged()) );
- connect(playerSlider, SIGNAL(valueChanged(int)), this, SLOT(playerSliderMoved(int)) );
- connect(mediaObj, SIGNAL(durationChanged(qint64)), this, SLOT(playerDurationChanged(qint64)) );
- connect(mediaObj, SIGNAL(seekableChanged(bool)), playerSlider, SLOT(setEnabled(bool)) );
- connect(mediaObj, SIGNAL(mediaStatusChanged(QMediaPlayer::MediaStatus)), this, SLOT(playerStatusChanged(QMediaPlayer::MediaStatus)) );
- connect(mediaObj, SIGNAL(positionChanged(qint64)), this, SLOT(playerTimeChanged(qint64)) );
- connect(mediaObj, SIGNAL(stateChanged(QMediaPlayer::State)), this, SLOT(playerStateChanged(QMediaPlayer::State)) );
- connect(mediaObj, SIGNAL(videoAvailableChanged(bool)), this, SLOT(playerVideoAvailable(bool)) );
- connect(mediaObj, SIGNAL(error(QMediaPlayer::Error)), this, SLOT(playerError()) );
- //Special Keyboard Shortcuts
- connect(nextTabLShort, SIGNAL(activated()), this, SLOT( prevTab() ) );
- connect(nextTabRShort, SIGNAL(activated()), this, SLOT( nextTab() ) );
- connect(closeTabShort, SIGNAL(activated()), this, SLOT( tabClosed() ) );
- connect(copyFilesShort, SIGNAL(activated()), this, SLOT( CopyItems() ) );
- connect(cutFilesShort, SIGNAL(activated()), this, SLOT( CutItems() ) );
- connect(pasteFilesShort, SIGNAL(activated()), this, SLOT( PasteItems() ) );
- connect(deleteFilesShort, SIGNAL(activated()), this, SLOT( RemoveItem() ) );
-}
-
-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
- ui->actionView_Hidden_Files->setChecked( settings->value("showhidden", false).toBool() );
- on_actionView_Hidden_Files_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() );
- iconProv->showthumbnails = ui->actionShow_Thumbnails->isChecked();
- QString view = settings->value("viewmode","details").toString();
- if(view=="icons"){ radio_view_icons->setChecked(true); }
- else if(view=="list"){ radio_view_list->setChecked(true); }
- else{ radio_view_details->setChecked(true); }
-}
-
-void MainUI::RebuildBookmarksMenu(){
- //Create the bookmarks menu
- ui->menuBookmarks->clear();
- ui->menuBookmarks->addAction(ui->actionManage_Bookmarks);
- ui->menuBookmarks->addSeparator();
- QStringList BM = settings->value("bookmarks", QStringList()).toStringList();
- ui->menuBookmarks->clear();
- ui->menuBookmarks->addAction(ui->actionManage_Bookmarks);
- ui->menuBookmarks->addSeparator();
- bool changed = false;
- BM.sort(); //Sort alphabetically
- for(int i=0; i<BM.length(); i++){
- if(QFile::exists(BM[i].section("::::",1,1)) ){
- QAction *act = new QAction(BM[i].section("::::",0,0),this);
- act->setWhatsThis(BM[i].section("::::",1,1));
- ui->menuBookmarks->addAction(act);
- }else{
- //Invalid directory - remove the bookmark
- BM.removeAt(i);
- i--;
- changed = true;
- }
- }
- if(changed){ settings->setValue("bookmarks",BM); }
- ui->actionManage_Bookmarks->setEnabled(BM.length()>0);
-}
-
-void MainUI::RebuildDeviceMenu(){
- //Create the External Devices Menu appropriately
- ui->menuExternal_Devices->clear();
- ui->menuExternal_Devices->addAction( ui->actionScan );
- ui->menuExternal_Devices->addSeparator();
- //Scan for externally mounted devices
- QStringList devs = LOS::ExternalDevicePaths();
- //Output Format: <type>::::<filesystem>::::<path> (6/24/14 - version 0.4.0 )
- // <type> = [USB, HDRIVE, SDCARD, DVD, LVM, UNKNOWN]
-
- //Now add them to the menu appropriately
- for(int i=0; i<devs.length(); i++){
- //Skip hidden mount points (usually only for system usage - not user browsing)
- QString label, path, fs;
- //Format inputs as necesary
- path = devs[i].section("::::",2,2);
- fs = devs[i].section("::::",1,1);
- if(path.endsWith("/") && path.length()>1 ){ path.chop(1); }
- if(path == "/"){ label = tr("Root"); }
- else{ label = path.section("/",-1).simplified(); }
- if(label.startsWith(".") ){ continue; } //don't show hidden mountpoint (not usually user-browsable)
- //Create entry for this device
- if( !fs.simplified().isEmpty()){
- //Add filesystem type to the label
- label = QString(tr("%1 (Type: %2)")).arg(label, fs);
- }
- 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
- QString type = devs[i].section("::::",0,0);
- if(type=="USB"){ type = "drive-removable-media-usb"; }
- else if(type=="HDRIVE" || type=="LVM"){ type = "drive-harddisk"; }
- else if(type=="SDCARD"){ type = "media-flash-sd-mmc"; }
- else if(type=="DVD"){ type = "media-optical"; }
- else{ type = "drive-removable-media"; }
- act->setIcon( LXDG::findIcon(type, "") );
- ui->menuExternal_Devices->addAction(act);
- }
-}
-
-bool MainUI::checkUserPerms(){
- if(!isUserWritable){
- QMessageBox::warning(this, tr("Invalid Permissions"), tr("You do not have permission to edit this directory!") );
- }
- return isUserWritable;
-}
-
-QString MainUI::msToText(qint64 ms){
- QString disp;
- if(ms>3600000){
- disp.append( QString::number(ms/3600000)+":" );
- ms = ms%3600000;
- }
- if(ms>60000){
- disp.append( QString::number(ms/60000)+":" );
- ms = ms%60000;
- }else{
- disp.append("0:");
- }
- if(ms>1000){
- if(ms>=10000){ disp.append( QString::number(ms/1000) ); }
- else{ disp.append( "0"+QString::number(ms/1000) ); }
- }else{
- disp.append("00");
- }
- return disp;
-}
-
-QString MainUI::getCurrentDir(){
- return currentDir->whatsThis();
-}
-
-void MainUI::setCurrentDir(QString dir){
- if(dir.isEmpty()){ return; }
- if(syncTimer->isActive()){ syncTimer->stop(); } //already loading the info
- QFileInfo info(dir);
- QString olddir = currentDir->whatsThis();
- if(!info.isDir() || !info.exists() ){
- qDebug() << "Invalid Directory:" << dir;
- //Try to just go up the dir tree one level
- dir.chop(dir.section("/",-1).length());
- if(!QFile::exists(dir)){
- //Still bad dir - try to return to previously shown dir
- if(currentDir->whatsThis().isEmpty()){ return; } //nothing to return to
- else{ dir = currentDir->whatsThis(); }
- }
- }
- //qDebug() << "Show Directory:" << dir;
- //qDebug() << "Dir Info:" << dir;
- //qDebug() << " - RWXLOG:" << info.isReadable() << info.isWritable() << info.isExecutable() << info.isSymLink() << info.ownerId() << info.groupId();
- isUserWritable = info.isWritable();
- if(dir.endsWith("/") && dir!="/" ){ dir.chop(1); }
- QString rawdir = dir;
- //dir.replace(QDir::homePath()+"/", "~/");
- currentDir->setText(dir);
- //Update the directory viewer and update the line edit
- keepFocus = !currentDir->hasFocus();
- currentDir->setWhatsThis(dir); //save the full path internally
- fsmod->setRootPath(rawdir);
- if(radio_view_details->isChecked()){
- ui->tree_dir_view->setRootIndex(fsmod->index(dir));
- ui->tree_dir_view->selectionModel()->clearSelection();
- if(olddir.startsWith(rawdir)){
- ui->tree_dir_view->setCurrentIndex( fsmod->index(olddir));
- ui->tree_dir_view->scrollTo( fsmod->index(olddir), QAbstractItemView::PositionAtTop);
- }
- }else{
- ui->list_dir_view->setRootIndex(fsmod->index(dir));
- ui->list_dir_view->selectionModel()->clearSelection();
- if(olddir.startsWith(rawdir)){
- ui->list_dir_view->setCurrentIndex( fsmod->index(olddir));
- ui->list_dir_view->scrollTo( fsmod->index(olddir), QAbstractItemView::PositionAtTop);
- }
- }
- //Adjust the tab data
- tabBar->setTabWhatsThis( tabBar->currentIndex(), rawdir );
- if(dir!="/"){ tabBar->setTabText( tabBar->currentIndex(), dir.section("/",-1) ); }
- else{ tabBar->setTabText( tabBar->currentIndex(), dir); }
- QStringList history = tabBar->tabData(tabBar->currentIndex()).toStringList();
- if(history.isEmpty() || history.first()!=rawdir){ history.prepend(rawdir); history.removeAll(""); }
- //qDebug() << "History:" << history;
- tabBar->setTabData(tabBar->currentIndex(), history);
- //Now adjust the items as necessary
- if(rawdir != olddir){
- //The Filesystem model will need to load the new directory (triggering the background checks)
- ui->tool_goToPlayer->setVisible(false);
- ui->tool_goToRestore->setVisible(false);
- ui->tool_goToImages->setVisible(false);
- }
- //Make sure the shortcut buttons are enabled as necessary
- // If the dir is already loaded into the fsmodel cache it will not emit the directoryLoaded() signal
- /*if(rawdir == olddir){
- emit DirChanged(rawdir); //This will be automatically run when a new dir is loaded
- }
- emit Si_AdaptStatusBar(fsmod->rootDirectory().entryInfoList(), rawdir, tr("Items"));*/
- if(isUserWritable){ ui->label_dir_stats->setText(""); }
- else{ ui->label_dir_stats->setText(tr("Limited Access Directory"));
- }
-
- ui->tool_addToDir->setVisible(isUserWritable);
- ui->tool_addNewFile->setVisible(isUserWritable);
- ui->actionUpDir->setEnabled(dir!="/");
- ui->actionBack->setEnabled(history.length() > 1);
- ui->actionBookMark->setEnabled( rawdir!=QDir::homePath() && settings->value("bookmarks", QStringList()).toStringList().filter("::::"+rawdir).length()<1 );
- ItemSelectionChanged();
- RebuildDeviceMenu(); //keep this refreshed
-
-}
-
-QFileInfoList MainUI::getSelectedItems(){
- QFileInfoList out;
- if(radio_view_details->isChecked()){
- QModelIndexList items = ui->tree_dir_view->selectionModel()->selectedIndexes();
- for(int i=0; i<items.length(); i++){
- if(!out.contains(fsmod->fileInfo(items[i]))){
- out << fsmod->fileInfo(items[i]);
- }
- }
- }else{
- QModelIndexList items = ui->list_dir_view->selectionModel()->selectedIndexes();
- for(int i=0; i<items.length(); i++){
- if(!out.contains(fsmod->fileInfo(items[i]))){
- out << fsmod->fileInfo(items[i]);
- }
- }
- }
- return out;
-}
-
-/*QModelIndexList MainUI::getVisibleItems(){
- QModelIndexList out;
- if(radio_view_details->isChecked()){
- QModelIndex index = ui->tree_dir_view->indexAt(QPoint(0,0));
- while( index.isValid()){
- if(index.column()!=0){
- //move on - multiple index's per row when we only need one
- }else if(ui->tree_dir_view->viewport()->rect().contains( ui->tree_dir_view->visualRect(index) ) ){
- //index within the viewport - add it to the list
- out << index;
- }else{
- break; //index not in the viewport
- }
- index = ui->tree_dir_view->indexBelow(index); //go to the next
- if(out.contains(index)){ break; } //end of the list
- }
-
- }else{
- QModelIndex index = ui->list_dir_view->indexAt(QPoint(0,0));
- while( index.isValid()){
- if(ui->list_dir_view->viewport()->rect().contains( ui->list_dir_view->visualRect(index) ) ){
- //index within the viewport - add it to the list
- out << index;
- }else{
- break; //index not in the viewport
- }
- index = ui->list_dir_view->indexBelow(index); //go to the next
- if(out.contains(index)){ break; } //end of the list
- }
-
- }
- return out;
-}*/
-
-//==============
-// PRIVATE SLOTS
-//==============
-void MainUI::slotStartSyncTimer(){
- if(ui->stackedWidget->currentWidget()!=ui->page_browser){ return; }
- if(syncTimer->isActive()){ syncTimer->stop(); }
- syncTimer->start();
-}
-
-//General button check functions
-void MainUI::AvailableMultimediaFiles(QStringList files){
- if(!files.isEmpty()){
- ui->combo_player_list->clear();
- ui->combo_player_list->addItems(files);
- ui->tool_goToPlayer->setVisible(true);
- }else{
- ui->tool_goToPlayer->setVisible(false);
- }
-
-}
-
-void MainUI::AvailableBackups(QString basedir, QStringList snapdirs){
- snapmod->setRootPath(basedir); //set the base snapshot dir as the new root
- snapDirs = snapdirs;
-
- //Now enable the button if any snapshots available
- ui->tool_goToRestore->setVisible(!snapDirs.isEmpty());
-}
-
-void MainUI::DisplayStatusBar(QString msg){
- //qDebug() << "message to show in the status bar:" << msg;
- ui->statusbar->showMessage(msg);
-}
-
-void MainUI::AvailablePictures(QStringList pics){
- if(!pics.isEmpty()){
- QString citem = ui->combo_image_name->currentText();
- ui->combo_image_name->clear();
- ui->combo_image_name->addItems(pics);
- if(pics.contains(citem)){
- ui->combo_image_name->setCurrentText(citem);
- }
- ui->tool_goToImages->setVisible(true);
- }
-
-}
-
-//-----------------------------------
-//General page switching
-//-----------------------------------
-void MainUI::goToMultimediaPage(){
- //Make toolbar items disappear appropriately
- ui->actionBackToBrowser->setVisible(true);
- ui->actionBack->setVisible(false);
- ui->actionUpDir->setVisible(false);
- ui->actionHome->setVisible(false);
- ui->actionBookMark->setVisible(false);
- currentDir->setEnabled(false);
- //Disable all the UI elements specifically for the Browser side of things
- ui->actionNew_Tab->setEnabled(false);
- ui->menuView->setEnabled(false);
- ui->menuBookmarks->setEnabled(false);
- ui->menuExternal_Devices->setEnabled(false);
- //Start the player on the first selected item
- QFileInfoList sel = getSelectedItems();
- if(!sel.isEmpty()){
- QStringList names;
- for(int i=0; i<sel.length(); i++){ names << sel[i].fileName(); }
- //start the slideshow on the first selected picture
- for(int i=0; i<ui->combo_player_list->count(); i++){
- if(names.contains( ui->combo_player_list->itemText(i) )){ ui->combo_player_list->setCurrentIndex(i); break; }
- }
- }
- //Now go to the Multimedia player
- ui->label_player_novideo->setText(tr("Click Play to Start"));
- ui->stackedWidget->setCurrentWidget(ui->page_audioPlayer);
-}
-
-void MainUI::goToRestorePage(){
- //Make toolbar items disappear appropriately
- ui->actionBackToBrowser->setVisible(true);
- ui->actionBack->setVisible(false);
- ui->actionUpDir->setVisible(false);
- ui->actionHome->setVisible(false);
- ui->actionBookMark->setVisible(false);
- currentDir->setEnabled(false);
- //Disable all the UI elements specifically for the Browser side of things
- ui->actionNew_Tab->setEnabled(false);
- ui->menuView->setEnabled(false);
- ui->menuBookmarks->setEnabled(false);
- ui->menuExternal_Devices->setEnabled(false);
- //Load all the info into the file restore page
- ui->slider_zfs_snapshot->setRange(1,snapDirs.length());
- ui->slider_zfs_snapshot->setValue(snapDirs.length());
- //Now go to the file restore page
- showSnapshot(); //Make sure it is updated for the current directory
- ui->stackedWidget->setCurrentWidget(ui->page_zfs);
-}
-
-void MainUI::goToSlideshowPage(){
- //Make toolbar items disappear appropriately
- ui->actionBackToBrowser->setVisible(true);
- ui->actionBack->setVisible(false);
- ui->actionUpDir->setVisible(false);
- ui->actionHome->setVisible(false);
- ui->actionBookMark->setVisible(false);
- currentDir->setEnabled(false);
- //Disable all the UI elements specifically for the Browser side of things
- ui->actionNew_Tab->setEnabled(false);
- ui->menuView->setEnabled(false);
- ui->menuBookmarks->setEnabled(false);
- ui->menuExternal_Devices->setEnabled(false);
- QFileInfoList sel = getSelectedItems();
- if(!sel.isEmpty()){
- QStringList names;
- for(int i=0; i<sel.length(); i++){ names << sel[i].fileName(); }
- //start the slideshow on the first selected picture
- for(int i=0; i<ui->combo_image_name->count(); i++){
- if(names.contains( ui->combo_image_name->itemText(i) )){ ui->combo_image_name->setCurrentIndex(i); break; }
- }
- }
- //Now go to the Slideshow player
- ui->stackedWidget->setCurrentWidget(ui->page_image_view);
- showNewPicture(); //make sure it is up to date with the widget size
-}
-
-void MainUI::goToBrowserPage(){
- //Make toolbar items re-appear appropriately
- ui->actionBackToBrowser->setVisible(false);
- ui->actionBack->setVisible(true);
- ui->actionUpDir->setVisible(true);
- ui->actionHome->setVisible(true);
- ui->actionBookMark->setVisible(true);
- currentDir->setEnabled(true);
- //Disable all the UI elements specifically for the Browser side of things
- ui->actionNew_Tab->setEnabled(true);
- ui->menuView->setEnabled(true);
- ui->menuBookmarks->setEnabled(true);
- ui->menuExternal_Devices->setEnabled(true);
- //Now go to the browser
- if(ui->stackedWidget->currentWidget()==ui->page_audioPlayer){ mediaObj->stop(); }
- ui->stackedWidget->setCurrentWidget(ui->page_browser);
- reloadDirectory();
-}
-
-//---------------------
-//Menu Actions
-//---------------------
-void MainUI::on_actionNew_Tab_triggered(){
- OpenDirs(QStringList() << QDir::homePath());
- //Now go to that tab (always last)
- tabBar->setCurrentIndex(tabBar->count()-1);
-}
-
-void MainUI::on_actionSearch_triggered(){
- QProcess::startDetached("lumina-search -dir \""+getCurrentDir()+"\"");
-}
-
-void MainUI::on_actionClose_triggered(){
- if(tabBar->count() > 1){
- if(QMessageBox::Yes != QMessageBox::question(this, tr("Verify Quit"), tr("You have multiple tabs open. Are you sure you want to quit?"), QMessageBox::Yes | QMessageBox::No, QMessageBox::Yes ) ){
- return;
- }
- }
- qDebug() << "Closing Down...";
- this->close();
-}
-
-void MainUI::on_actionView_Hidden_Files_triggered(){
- if(ui->actionView_Hidden_Files->isChecked()){
- fsmod->setFilter( QDir::AllEntries | QDir::NoDotAndDotDot | QDir::AllDirs | QDir::Hidden );
- snapmod->setFilter( QDir::AllEntries | QDir::NoDotAndDotDot | QDir::AllDirs | QDir::Hidden );
- }else{
- fsmod->setFilter( QDir::AllEntries | QDir::NoDotAndDotDot | QDir::AllDirs );
- snapmod->setFilter( QDir::AllEntries | QDir::NoDotAndDotDot | QDir::AllDirs );
- }
- //Now save this setting for later
- settings->setValue("showhidden", ui->actionView_Hidden_Files->isChecked());
- //Re-load the view widget
- setCurrentDir(getCurrentDir());
-}
-
-void MainUI::on_actionShow_Action_Buttons_triggered(){
- ui->group_actions->setVisible(ui->actionShow_Action_Buttons->isChecked());
- settings->setValue("showactions", ui->actionShow_Action_Buttons->isChecked());
-}
-
-void MainUI::on_actionShow_Thumbnails_triggered(){
- //Now save this setting for later
- settings->setValue("showthumbnails", ui->actionShow_Thumbnails->isChecked());
- //Set the value in the icon provider
- iconProv->showthumbnails = ui->actionShow_Thumbnails->isChecked();
- //Now make sure the filesystem model knows to re-load the image data
- fsmod->revert();
- //Re-load the view widget
- setCurrentDir(getCurrentDir());
-}
-
-void MainUI::goToBookmark(QAction *act){
- if(act==ui->actionManage_Bookmarks){
- BMMDialog dlg(this);
- dlg.loadSettings(settings);
- dlg.exec();
- RebuildBookmarksMenu();
- }else{
- setCurrentDir(act->whatsThis());
- }
-}
-
-void MainUI::goToDevice(QAction *act){
- if(act==ui->actionScan){
- RebuildDeviceMenu();
- }else{
- setCurrentDir(act->whatsThis());
- }
-}
-
-void MainUI::viewModeChanged(bool active){
- if(!active){ return; } //on every view change, all 3 radio buttons will call this function - only run this once though
- if(radio_view_details->isChecked()){
- ui->tree_dir_view->setVisible(true);
- ui->list_dir_view->setVisible(false);
- settings->setValue("viewmode","details");
- }else if(radio_view_list->isChecked()){
- ui->tree_dir_view->setVisible(false);
- ui->list_dir_view->setVisible(true);
- ui->list_dir_view->setViewMode( QListView::ListMode );
- ui->list_dir_view->setUniformItemSizes(false);
- ui->list_dir_view->setIconSize( QSize(20,20) );
- settings->setValue("viewmode","list");
- }else{ //icons
- ui->tree_dir_view->setVisible(false);
- ui->list_dir_view->setVisible(true);
- ui->list_dir_view->setViewMode( QListView::IconMode );
- ui->list_dir_view->setUniformItemSizes(true);
- ui->list_dir_view->setIconSize( QSize(90,64) );
- settings->setValue("viewmode","icons");
- }
- //Re-load the view widget
- setCurrentDir(getCurrentDir());
-
-}
-
-//-----------------------
-//Toolbar Actions
-//-----------------------
-void MainUI::on_actionBack_triggered(){
- QStringList history = tabBar->tabData(tabBar->currentIndex()).toStringList();
- if(history.length() <= 1){ return; } //need the second item
- history.removeAt(0); //remove the first item (the current dir)
- tabBar->setTabData(tabBar->currentIndex(), history); //re-write the saved history
- setCurrentDir(history.first()); //go to the previous entry in the history
-}
-
-void MainUI::on_actionUpDir_triggered(){
- QString dir = getCurrentDir();
- dir.chop( dir.section("/",-1).length() );
- setCurrentDir(dir);
-}
-
-void MainUI::on_actionHome_triggered(){
- setCurrentDir(QDir::homePath());
-}
-
-void MainUI::on_actionBookMark_triggered(){
- QString dir = getCurrentDir();
- bool ok = false;
- QString name = QInputDialog::getText(this, tr("New Bookmark"), tr("Name:"), QLineEdit::Normal, dir, \
- &ok, 0, Qt::ImhFormattedNumbersOnly | Qt::ImhUppercaseOnly | Qt::ImhLowercaseOnly);
- if(!ok || name.isEmpty()){ return; } //cancelled
- QStringList BM = settings->value("bookmarks",QStringList()).toStringList();
- if(BM.filter(name+"::::").length() >0){
- QMessageBox::warning(this, tr("Invalid Name"), tr("This bookmark name already exists. Please choose another.") );
- QTimer::singleShot(0,this, SLOT(on_actionBookMark_triggered()));
- return;
- }
- BM.append(name+"::::"+dir);
- BM.sort(); //sort alphabetically by name
- settings->setValue("bookmarks", BM);
- //Now rebuild the bookmarks menu
- RebuildBookmarksMenu();
- ui->actionBookMark->setEnabled(false); //already bookmarked
-}
-
-//-----------------------------
-//Browser Functions
-//-----------------------------
-void MainUI::startEditDir(QWidget *old, QWidget *now){
- if(now==currentDir){
- //The dir edit just got focus
- QString dir = currentDir->text();
- dir.replace("~/", QDir::homePath()+"/");
- currentDir->setText(dir);
- //Try to move to the end
- currentDir->selectAll();
- }else if(old==currentDir){
- QString dir = currentDir->text();
- setCurrentDir(dir);
- }
-}
-
-void MainUI::goToDirectory(){
- QString dir = currentDir->text();
- dir.replace("~/",QDir::homePath()+"/");
- setCurrentDir(dir);
-}
-
-void MainUI::reloadDirectory(){
- setCurrentDir( getCurrentDir() );
-}
-
-/*void MainUI::viewportChanged(){
- if( !ui->actionsShow_Thumbnails->isChecked()){ return; }
- QModelIndexList list = getVisibleItems();
- for(int i=0; i<list.length(); i++){
- if( !ui->actionsShow_Thumbnails->isChecked()){ return; } //break out as necessary
- if( imgFilter.contains("*."+fsmod->filePath(list[i]).section("/",-1).section(".",-1).toLower()){
- fmod->
- }
- }
-}*/
-
-void MainUI::currentDirectoryLoaded(){
- //The directory was just loaded: refresh the action buttons as neccesary
- // NOTE: This is only "caught" when a *new* directory is loaded into the model
- ui->tool_goToPlayer->setVisible(false);
- ui->tool_goToRestore->setVisible(false);
- ui->tool_goToImages->setVisible(false);
- emit DirChanged(getCurrentDir());
- emit Si_AdaptStatusBar(fsmod->rootDirectory().entryInfoList(), getCurrentDir(), tr("Folders"), tr("Files"));
- ItemSelectionChanged();
-}
-
-void MainUI::on_tool_addToDir_clicked(){
- bool ok = false;
- QString newdir = QInputDialog::getText(this, tr("New Directory"), tr("Name:"), QLineEdit::Normal, "", \
- &ok, 0, Qt::ImhFormattedNumbersOnly | Qt::ImhUppercaseOnly | Qt::ImhLowercaseOnly);
- if(!ok || newdir.isEmpty()){ return; }
- QString full = getCurrentDir();
- if(!full.endsWith("/")){ full.append("/"); }
- QDir dir(full); //open the current dir
- full.append(newdir); //append the new name to the current dir
- //Verify that the new dir does not already exist
- if(dir.exists(full)){
- QMessageBox::warning(this, tr("Invalid Name"), tr("A file or directory with that name already exists! Please pick a different name."));
- QTimer::singleShot(0,this, SLOT(on_tool_addToDir_clicked()) ); //repeat this function
- }else{
- if(!dir.mkdir(newdir) ){
- QMessageBox::warning(this, tr("Error Creating Directory"), tr("The directory could not be created. Please ensure that you have the proper permissions to modify the current directory."));
- }
- }
-}
-
-void MainUI::on_tool_addNewFile_clicked(){
- 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; }
- QString full = getCurrentDir();
- if(!full.endsWith("/")){ full.append("/"); }
- QFile file(full+newdocument);
- if(file.open(QIODevice::ReadWrite)){
- //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."));
- }
-
-}
-
-void MainUI::tabChanged(int tab){
- //Load the directory contained in the new tab
- qDebug() << "Change to Tab:" << tab << tabBar->tabText(tab);
- QString dir = tabBar->tabWhatsThis(tab); //get the full directory
- setCurrentDir(dir); //display this as the current dir
-}
-
-void MainUI::tabClosed(int tab){
- if(tabBar->count()==1){ return; } //Can't close the only tab
- if(tab < 0){ tab = tabBar->currentIndex(); }
- //Remove the tab (will automatically move to a different one);
- qDebug() << "Closing tab:" << tab << tabBar->tabText(tab);
- tabBar->removeTab(tab);
- tabBar->setVisible( tabBar->count() > 1 );
-}
-
-void MainUI::prevTab(){
- int cur = tabBar->currentIndex();
- if(cur == 0){ tabBar->setCurrentIndex( tabBar->count()-1 ); }
- else{ tabBar->setCurrentIndex( cur-1 ); }
-}
-
-void MainUI::nextTab(){
- int cur = tabBar->currentIndex();
- if(cur == (tabBar->count()-1) ){ tabBar->setCurrentIndex(0); }
- else{ tabBar->setCurrentIndex( cur+1 ); }
-}
-
-void MainUI::ItemRun(const QModelIndex &index){
- //This is called when the user double clicks a file/directory
- QString val = fsmod->filePath(index).section("/",-1);
- QString itemPath = getCurrentDir();
- if( !itemPath.endsWith("/")){ itemPath.append("/"); }
- itemPath.append(val);
- if(fsmod->isDir(index)){
- setCurrentDir( itemPath );
- }else{
- //Must be a file, try to run it
- QProcess::startDetached("lumina-open \""+itemPath+"\"");
- }
-}
-
-void MainUI::OpenContextMenu(const QPoint &pt){
- QFileInfo info;
- if(radio_view_details->isChecked()){
- QModelIndex it = ui->tree_dir_view->indexAt(pt);
- if(!it.isValid()){ CItem.clear();}
- else{
- info = fsmod->fileInfo(it);
- CItem = info.absoluteFilePath();
- }
- }else{
- QModelIndex it = ui->list_dir_view->indexAt(pt);
- if(!it.isValid()){ CItem.clear();}
- else{
- info = fsmod->fileInfo(it);
- CItem = info.absoluteFilePath();
- }
- }
- //Create the context menu
- contextMenu->clear();
- if(!CItem.isEmpty()){
- contextMenu->addAction(LXDG::findIcon("run-build-file",""), tr("Open"), this, SLOT(OpenItem()) );
- contextMenu->addAction(LXDG::findIcon("run-build-configure",""), tr("Open With..."), this, SLOT(OpenItemWith()) );
-
- contextMenu->addAction(LXDG::findIcon("edit-rename",""), tr("Rename"), this, SLOT(RenameItem()) )->setEnabled(info.isWritable());
- contextMenu->addAction(LXDG::findIcon("document-encrypted",""), tr("View Checksums"), this, SLOT(ChecksumItems()) );
- contextMenu->addSeparator();
- }
- bool hasSelection = !getSelectedItems().isEmpty();
- //Now add the general selection options
- contextMenu->addAction(LXDG::findIcon("edit-cut",""), tr("Cut Selection"), this, SLOT(CutItems()) )->setEnabled(info.isWritable() && hasSelection);
- contextMenu->addAction(LXDG::findIcon("edit-copy",""), tr("Copy Selection"), this, SLOT(CopyItems()) )->setEnabled(hasSelection);
- contextMenu->addAction(LXDG::findIcon("edit-paste",""), tr("Paste"), this, SLOT(PasteItems()) )->setEnabled(QApplication::clipboard()->mimeData()->hasFormat("x-special/lumina-copied-files") && isUserWritable);
- contextMenu->addSeparator();
- contextMenu->addAction(LXDG::findIcon("edit-delete",""), tr("Delete Selection"), this, SLOT(RemoveItem()) )->setEnabled(info.isWritable()&&hasSelection);
- if(LUtils::isValidBinary("lumina-fileinfo")){
- contextMenu->addSeparator();
- contextMenu->addAction(LXDG::findIcon("edit-find-replace",""), tr("File Properties"), this, SLOT(ViewPropertiesItem()) )->setEnabled(hasSelection);
- }
- if (info.isDir() || CItem.isEmpty()) {
- //in case the user click on a directory or click on the background
- contextMenu->addSeparator();
- contextMenu->addAction(LXDG::findIcon("system-search",""), tr("Open Terminal here"), this, SLOT(openTerminal()));
- }
- //Now show the menu
- if(radio_view_details->isChecked()){
- contextMenu->popup(ui->tree_dir_view->mapToGlobal(pt));
- }else{
- contextMenu->popup(ui->list_dir_view->mapToGlobal(pt));
- }
-}
-
-void MainUI::ItemSelectionChanged(){
- //Enable/disable the action buttons
- QFileInfoList sel = getSelectedItems();
- //display info related to files selected.
- //TO CHECK: impact if filesystem is very slow
- if(sel.size()>0){ emit Si_AdaptStatusBar(sel, "", tr("Selected Folders"), tr("Files"));}
- else{ emit Si_AdaptStatusBar(fsmod->rootDirectory().entryInfoList(), getCurrentDir(), tr("Folders"), tr("Files")); }
-
- ui->tool_act_run->setEnabled(!sel.isEmpty());
- ui->tool_act_runwith->setEnabled(!sel.isEmpty());
- ui->tool_act_rm->setEnabled(!sel.isEmpty() && isUserWritable);
- ui->tool_act_rename->setEnabled(sel.length()==1 && isUserWritable);
- ui->tool_act_cut->setEnabled(!sel.isEmpty() && isUserWritable);
- ui->tool_act_copy->setEnabled(!sel.isEmpty());
- ui->tool_act_paste->setEnabled(QApplication::clipboard()->mimeData()->hasFormat("x-special/lumina-copied-files") && isUserWritable);
- if(ui->tool_act_paste->isEnabled()){
- ui->tool_act_paste->setToolTip( QString(tr("Currently on clipboard:\n%1")).arg( QString(QApplication::clipboard()->mimeData()->data("x-special/lumina-copied-files")).replace("::::",": ") ) );
- }else{
- ui->tool_act_paste->setToolTip("");
- }
- QString itname;
- if(sel.length()==1){ itname = sel[0].fileName(); }
- bool ok = !itname.isEmpty() && (getCurrentDir()!=QDir::homePath()+"/Desktop");
- if(ok){
- ok = !LUtils::isFavorite(sel[0].canonicalFilePath());
- }
- ui->tool_act_fav->setEnabled(ok);
-}
-
-//-------------------------------
-//Slideshow Functions
-//-------------------------------
-void MainUI::showNewPicture(){
- if( !ui->label_image->isVisible() ){ return; } //don't update if not visible - can cause strange resizing issues
- QString file = getCurrentDir();
- if(!file.endsWith("/")){ file.append("/"); }
- file.append(ui->combo_image_name->currentText());
- //qDebug() << "Show Image:" << file;
- QPixmap pix(file);
- if(pix.size().width() > ui->label_image->contentsRect().width() || pix.size().height() > ui->label_image->contentsRect().height()){
- pix = pix.scaled(ui->label_image->contentsRect().size(), Qt::KeepAspectRatio, Qt::SmoothTransformation);
- }
- ui->label_image->setPixmap(pix);
- //Now set/load the buttons
- ui->tool_image_goBegin->setEnabled(ui->combo_image_name->currentIndex()>0);
- ui->tool_image_goPrev->setEnabled(ui->combo_image_name->currentIndex()>0);
- ui->tool_image_goEnd->setEnabled(ui->combo_image_name->currentIndex()<(ui->combo_image_name->count()-1));
- ui->tool_image_goNext->setEnabled(ui->combo_image_name->currentIndex()<(ui->combo_image_name->count()-1));
- ui->label_image_index->setText( QString::number(ui->combo_image_name->currentIndex()+1)+"/"+QString::number(ui->combo_image_name->count()) );
- static QList<QByteArray> writeableformats;
- if(writeableformats.isEmpty()){
- writeableformats = QImageWriter::supportedImageFormats();
- qDebug() << "Writeable image formats:" << writeableformats;
- }
- bool canwrite = writeableformats.contains(file.section(".",-1).toLower().toLocal8Bit()); //compare the suffix with the list
- ui->tool_image_remove->setEnabled(isUserWritable);
- ui->tool_image_rotateleft->setEnabled(isUserWritable && canwrite);
- ui->tool_image_rotateright->setEnabled(isUserWritable && canwrite);
-}
-
-void MainUI::firstPicture(){
- ui->combo_image_name->setCurrentIndex(0);
-}
-
-void MainUI::prevPicture(){
- ui->combo_image_name->setCurrentIndex( ui->combo_image_name->currentIndex()-1 );
-}
-
-void MainUI::nextPicture(){
- ui->combo_image_name->setCurrentIndex( ui->combo_image_name->currentIndex()+1 );
-}
-
-void MainUI::lastPicture(){
- ui->combo_image_name->setCurrentIndex( ui->combo_image_name->count()-1 );
-}
-
-void MainUI::removePicture(){
- QString file = getCurrentDir();
- if(!file.endsWith("/")){ file.append("/"); }
- file.append(ui->combo_image_name->currentText());
- //Verify permanent removal of file/dir
- if(QMessageBox::Yes != QMessageBox::question(this, tr("Verify Removal"), tr("WARNING: This will permanently delete the file from the system!")+"\n"+tr("Are you sure you want to continue?")+"\n\n"+file, QMessageBox::Yes | QMessageBox::No, QMessageBox::No) ){
- return; //cancelled
- }
- if( QFile::remove(file) ){
- int index = ui->combo_image_name->currentIndex();
- ui->combo_image_name->removeItem( index );
- }
-}
-
-void MainUI::rotatePictureLeft(){
- //First load the file fresh (not the scaled version in the UI)
- QString file = getCurrentDir();
- if(!file.endsWith("/")){ file.append("/"); }
- file.append(ui->combo_image_name->currentText());
- QPixmap pix(file);
- //Now rotate the image 90 degrees counter-clockwise
- QTransform trans;
- pix = pix.transformed( trans.rotate(-90) , Qt::SmoothTransformation);
- //Now save the image back to the same file
- pix.save(file);
- //Now re-load the image in the UI
- showNewPicture();
-}
-
-void MainUI::rotatePictureRight(){
- //First load the file fresh (not the scaled version in the UI)
- QString file = getCurrentDir();
- if(!file.endsWith("/")){ file.append("/"); }
- file.append(ui->combo_image_name->currentText());
- QPixmap pix(file);
- //Now rotate the image 90 degrees counter-clockwise
- QTransform trans;
- pix = pix.transformed( trans.rotate(90) , Qt::SmoothTransformation);
- //Now save the image back to the same file
- pix.save(file);
- //Now re-load the image in the UI
- showNewPicture();
-}
-
-//----------------------------------
-//ZFS Restore Functions
-//----------------------------------
-void MainUI::snapshotLoaded(){
- ui->tree_zfs_dir->resizeColumnToContents(0);
-}
-
-void MainUI::showSnapshot(){
- ui->tool_zfs_prevSnap->setEnabled(ui->slider_zfs_snapshot->value()!=1);
- ui->tool_zfs_nextSnap->setEnabled(ui->slider_zfs_snapshot->value()!=ui->slider_zfs_snapshot->maximum());
- ui->label_zfs_snap->setText( snapDirs[ui->slider_zfs_snapshot->value()-1].section("/.zfs/snapshot/",1,1).section("/",0,0) );
- //Load the dir contents
- ui->tree_zfs_dir->setRootIndex(snapmod->index(snapDirs[ui->slider_zfs_snapshot->value()-1]));
-}
-
-void MainUI::prevSnapshot(){
- ui->slider_zfs_snapshot->setValue(ui->slider_zfs_snapshot->value()-1);
-}
-
-void MainUI::nextSnapshot(){
- ui->slider_zfs_snapshot->setValue(ui->slider_zfs_snapshot->value()+1);
-}
-
-void MainUI::restoreItems(){
- //Get the selected items
- QStringList sel; //= getSelectedItems();
- QModelIndexList items = ui->tree_zfs_dir->selectionModel()->selectedIndexes();
- for(int i=0; i<items.length(); i++){
- sel << snapmod->filePath(items[i]).section("/",-1);
- }
- sel.removeDuplicates();
- if(sel.isEmpty()){ return; } //nothing selected
- if(!checkUserPerms()){ return; }
- //Get the directories
- QString snapdir = snapDirs[ui->slider_zfs_snapshot->value()-1];
- QString basedir = getCurrentDir();
- if(!basedir.endsWith("/")){ basedir.append("/"); }
- if(!snapdir.endsWith("/")){ snapdir.append("/"); }
- //Fill out the lists appropriately
- QStringList resto;
- qDebug() << "Items Selected:" << sel;
- for(int i=0; i<sel.length(); i++){
- resto << basedir+sel[i];
- sel[i] = snapdir+sel[i];
- }
- qDebug() << "Restore Items:" << sel << "\n" << resto;
- //Restore the items
- FODialog dlg(this);
- dlg.setOverwrite(ui->check_zfs_overwrite->isChecked());
- dlg.RestoreFiles(sel, resto);
- dlg.exec();
- if(dlg.noerrors){
- QMessageBox::information(this, tr("Success"), tr("Successfully restored selection") );
- }
-}
-
-//----------------------------
-// Multimedia Player
-//----------------------------
-void MainUI::playerStart(){
- if(ui->stackedWidget->currentWidget()!=ui->page_audioPlayer){ return; } //don't play if not in the player
-
- if(mediaObj->state()==QMediaPlayer::PausedState \
- && mediaObj->currentMedia().canonicalUrl().fileName()==ui->combo_player_list->currentText() ){
- mediaObj->play();
- }else{
- mediaObj->stop();
- //Get the selected file path
- QString filePath = getCurrentDir();
- if(!filePath.endsWith("/")){ filePath.append("/"); }
- filePath.append( ui->combo_player_list->currentText() );
- mediaObj->setMedia( QUrl::fromLocalFile(filePath) );
- playerTTime.clear();
- playerSlider->setEnabled(mediaObj->isSeekable());
- mediaObj->play();
- }
-}
-
-void MainUI::playerError(){
- QString msg = QString(tr("Error Playing File: %1"));
- msg = msg.arg( mediaObj->currentMedia().canonicalUrl().fileName() );
- msg.append("\n"+mediaObj->errorString());
- ui->label_player_novideo->setText(msg);
-}
-
-void MainUI::playerStop(){
- mediaObj->stop();
-}
-
-void MainUI::playerPause(){
- mediaObj->pause();
-}
-
-void MainUI::playerNext(){
- ui->combo_player_list->setCurrentIndex( ui->combo_player_list->currentIndex()+1);
- if(mediaObj->state()!=QMediaPlayer::StoppedState){ playerStart(); }
-}
-
-void MainUI::playerPrevious(){
- ui->combo_player_list->setCurrentIndex( ui->combo_player_list->currentIndex()-1);
- if(mediaObj->state()!=QMediaPlayer::StoppedState){ playerStart(); }
-}
-
-void MainUI::playerFinished(){
- if(ui->combo_player_list->currentIndex()<(ui->combo_player_list->count()-1) && ui->check_player_gotonext->isChecked()){
- ui->combo_player_list->setCurrentIndex( ui->combo_player_list->currentIndex()+1 );
- QTimer::singleShot(0,this,SLOT(playerStart()));
- }else{
- ui->label_player_novideo->setText(tr("Finished"));
- }
-}
-
-void MainUI::playerStatusChanged(QMediaPlayer::MediaStatus stat){
- //Only use this for end-of-file detection - use the state detection otherwise
- if(stat == QMediaPlayer::EndOfMedia){
- if(!mediaObj->isMuted()){ playerFinished(); } //make sure it is not being seeked right now
- }
-}
-
-void MainUI::playerStateChanged(QMediaPlayer::State newstate){
- //This function keeps track of updating the visuals of the player
- bool running = false;
- bool showVideo = false;
- QString msg;
- switch(newstate){
- case QMediaPlayer::PlayingState:
- running=true;
- showVideo = mediaObj->isVideoAvailable();
- msg = "";//mediaObj->metaData(Phonon::TitleMetaData).join(" ");
- if(msg.simplified().isEmpty()){ msg = ui->combo_player_list->currentText(); }
- ui->label_player_novideo->setText(tr("Playing:")+"\n"+msg);
- break;
- case QMediaPlayer::PausedState:
- showVideo=videoDisplay->isVisible(); //don't change the screen
- break;
- case QMediaPlayer::StoppedState:
- ui->label_player_novideo->setText(tr("Stopped"));
- break;
- }
- ui->tool_player_play->setVisible(!running);
- ui->tool_player_pause->setVisible(running);
- ui->tool_player_stop->setEnabled(running);
- ui->label_player_novideo->setVisible(!showVideo);
- videoDisplay->setVisible(showVideo);
-}
-
-void MainUI::playerVideoAvailable(bool showVideo){
- ui->label_player_novideo->setVisible(!showVideo);
- videoDisplay->setVisible(showVideo);
-}
-
-void MainUI::playerDurationChanged(qint64 dur){
- if(dur < 0){ return; } //not ready yet
- playerSlider->setMaximum(mediaObj->duration());
- playerTTime = msToText(dur);
-}
-
-void MainUI::playerTimeChanged(qint64 ctime){
- if(mediaObj->isMuted() || playerTTime.isEmpty() ){ return; } //currently being moved
- playerSlider->setSliderPosition(ctime);
-}
-
-void MainUI::playerSliderMoved(int val){
- ui->label_player_runstats->setText( msToText(val)+"/"+playerTTime );
- if(mediaObj->isMuted()){ mediaObj->setPosition(playerSlider->value()); } //currently seeking
-}
-
-void MainUI::playerSliderHeld(){
- mediaObj->setMuted(true);
- mediaObj->pause();
-}
-void MainUI::playerSliderChanged(){
- if(mediaObj->state()==QMediaPlayer::PausedState){ mediaObj->play(); }
- mediaObj->setMuted(false);
-}
-
-void MainUI::playerFileChanged(){
- ui->tool_player_next->setEnabled( ui->combo_player_list->count() > (ui->combo_player_list->currentIndex()+1) );
- ui->tool_player_prev->setEnabled( (ui->combo_player_list->currentIndex()-1) >= 0 );
-}
-
-//----------------------------------
-// Context Menu Actions
-//----------------------------------
-void MainUI::OpenItem(){
- QFileInfoList sel = getSelectedItems();
- if(sel.isEmpty()){ return; }
-
- QStringList dirs;
- for(int i=0; i<sel.length(); i++){
- if(sel[i].isDir()){ dirs << sel[i].absoluteFilePath(); }
- else{
- qDebug() << "Opening File:" << sel[i].absoluteFilePath();
- QProcess::startDetached("lumina-open \""+sel[i].absoluteFilePath()+"\"");
- }
- }
- if(!dirs.isEmpty()){ OpenDirs(dirs); }
- CItem.clear();
-}
-
-void MainUI::OpenItemWith(){
- QFileInfoList sel = getSelectedItems();
- if(sel.isEmpty()){ return; }
- for(int i=0; i<sel.length(); i++){
- qDebug() << "Opening File With:" << sel[i].absoluteFilePath();
- QProcess::startDetached("lumina-open -select \""+sel[i].absoluteFilePath()+"\"");
- }
- CItem.clear();
-}
-
-/*void MainUI::OpenDir(){
- if(CItem.isEmpty()){
- QFileInfoList sel = getSelectedItems();
- if(sel.isEmpty()){ return; }
- else{ CItem = sel[0].absoluteFilePath(); }
- }
- OpenDirs(QStringList() << CItem);
- CItem.clear();
-}*/
-
-void MainUI::RemoveItem(){
- //Only let this run if viewing the browser page
- if(ui->stackedWidget->currentWidget()!=ui->page_browser){ return; }
- if(!checkUserPerms()){ return; }
- //Get the selected items
- QStringList paths, names;
- //if(CItem.isEmpty()){
- QFileInfoList sel = getSelectedItems();
- for(int i=0; i<sel.length(); i++){
- paths << sel[i].absoluteFilePath();
- names << sel[i].fileName();
- }
- if(sel.isEmpty()){ return; } //nothing selected
- /*}else{
- paths << CItem;
- names << CItem.section("/",-1);
- }*/
- //Verify permanent removal of file/dir
- if(QMessageBox::Yes != QMessageBox::question(this, tr("Verify Removal"), tr("WARNING: This will permanently delete the file(s) from the system!")+"\n"+tr("Are you sure you want to continue?")+"\n\n"+names.join("\n"), QMessageBox::Yes | QMessageBox::No, QMessageBox::No) ){
- return; //cancelled
- }
- //Now remove the file/dir
- qDebug() << "Delete: "<<paths;
- FODialog dlg(this);
- dlg.RemoveFiles(paths);
- dlg.show();
- dlg.exec();
- CItem.clear();
-}
-
-void MainUI::RenameItem(){
- //Only let this run if viewing the browser page
- if(ui->stackedWidget->currentWidget()!=ui->page_browser){ return; }
- if(!checkUserPerms()){ return; }
- if(CItem.isEmpty()){
- QFileInfoList sel = getSelectedItems();
- if(sel.isEmpty()){ return; }
- else{ CItem = sel[0].absoluteFilePath(); }
- }
- QString fname = CItem;
- QString path = fname;
- fname = fname.section("/",-1); //turn this into just the file name
- path.chop(fname.length()); //turn this into the base directory path (has a "/" at the end)
- //Now prompt for the new filename
- bool ok = false;
- QString nname = QInputDialog::getText(this, tr("Rename File"),tr("New Name:"), QLineEdit::Normal, fname, &ok);
- if(!ok || nname.isEmpty()){ CItem.clear(); return; } //cancelled
- //Now check for a file extension and add it if necessary
- QString oext = fname.section(".",-1);
- if("."+oext == fname){ oext.clear(); } //hidden file without an extension
- else if(oext==fname){ oext.clear(); } //no extension
- QString next = nname.section(".",-1);
- if(next==nname){ next.clear(); } //no extension
- if(next.isEmpty() && !oext.isEmpty()){
- nname.append( "."+oext );
- }
- //Check if this filename already exists
- bool overwrite = QFile::exists(path+nname);
- if(overwrite){
- if(QMessageBox::Yes != QMessageBox::question(this, tr("Overwrite File?"), tr("An existing file with the same name will be replaced. Are you sure you want to proceed?"), QMessageBox::Yes | QMessageBox::No, QMessageBox::No) ){
- CItem.clear(); return; //cancelled
- }
- }
- //Now perform the move
- qDebug() << "Rename:" << path+fname << "->" << path+nname;
- FODialog dlg(this);
- dlg.setOverwrite(overwrite);
- dlg.MoveFiles(QStringList() << path+fname, QStringList() << path+nname);
- dlg.show();
- dlg.exec();
- CItem.clear();
-
- ItemSelectionChanged();
-}
-
-void MainUI::FavoriteItem(){
- if(CItem.isEmpty()){
- QFileInfoList sel = getSelectedItems();
- if(sel.isEmpty()){ return; }
- else{ CItem = sel[0].canonicalFilePath(); }
- }
- //QString fname = CItem;
- QString fullpath = CItem;
- /*fname = fname.section("/",-1); //turn this into just the file name
- if(QFile::exists(favdir+fname)){ QFile::remove(favdir+fname); } //remove the stale link
- QFile::link(fullpath, favdir+fname);*/
- LUtils::addFavorite(fullpath);
- CItem.clear();
- ItemSelectionChanged();
-}
-
-void MainUI::ViewPropertiesItem(){
- QFileInfoList sel = getSelectedItems();
- if(sel.isEmpty()){ return; }
- for(int i=0; i<sel.length(); i++){
- QProcess::startDetached("lumina-fileinfo \""+sel[i].absoluteFilePath()+"\"");
- }
-}
-
-void MainUI::openTerminal(){
- QFileInfoList sel = getSelectedItems();
- QString shell;
- //we get the shell has defined in the environment
- if (getenv("SHELL")) shell = QString(getenv("SHELL"));
- else shell = QString("/bin/sh");
- //we use the application defined as thate default terminal
- QSettings *sessionsettings = new QSettings( QSettings::UserScope, "LuminaDE","sessionsettings", this);
- //xterm remains the default
- QString defTerminal = sessionsettings->value("default-terminal", "xterm").toString();
- if(defTerminal.endsWith(".desktop")){
- //Pull the binary name out of the shortcut
- bool ok = false;
- XDGDesktop DF = LXDG::loadDesktopFile(defTerminal,ok);
- if(!ok){ defTerminal = "xterm"; }
- else{ defTerminal = DF.exec.section(" ",0,0); } //only take the binary name - not any other flags
- }
- if( !LUtils::isValidBinary(defTerminal) ){
- //The binary does not exist or is invalid
- defTerminal = "xterm";
- }
- if(sel.isEmpty()){
- //-e is the parameter for most of the terminal appliction to execute an external command.
- //In your case we start a shell in the selected directory
- QProcess::startDetached(defTerminal + " -e \"cd " + getCurrentDir() + " && " + shell + " \" ");
- } else {
- QProcess::startDetached(defTerminal + " -e \"cd " + sel[0].absoluteFilePath() + " && " + shell + " \" ");
- }
-}
-
-
-void MainUI::CutItems(){
- //Only let this run if viewing the browser page
- if(ui->stackedWidget->currentWidget()!=ui->page_browser){ return; }
- if(!checkUserPerms()){ return; }
- //Get all the selected Items
- QFileInfoList sel = getSelectedItems();
- QStringList items;
- if(sel.isEmpty()){ return; } //nothing selected
- //Format the data string
- for(int i=0; i<sel.length(); i++){
- items << "cut::::"+sel[i].absoluteFilePath();
- //sel[i] = sel[i].prepend("cut::::");
- }
-
- //Now save that data to the global clipboard
- QMimeData *dat = new QMimeData;
- dat->clear();
- dat->setData("x-special/lumina-copied-files", items.join("\n").toLocal8Bit());
- QApplication::clipboard()->clear();
- QApplication::clipboard()->setMimeData(dat);
- ItemSelectionChanged();
-}
-
-void MainUI::CopyItems(){
- //Only let this run if viewing the browser page
- if(ui->stackedWidget->currentWidget()!=ui->page_browser){ return; }
- //Get all the selected Items
- QFileInfoList sel = getSelectedItems();
- QStringList items;
- if(sel.isEmpty()){ return; } //nothing selected
- //Format the data string
- for(int i=0; i<sel.length(); i++){
- items << "copy::::"+sel[i].absoluteFilePath();
- //sel[i] = sel[i].prepend("copy::::");
- }
- //Now save that data to the global clipboard
- QMimeData *dat = new QMimeData;
- dat->clear();
- dat->setData("x-special/lumina-copied-files", items.join("\n").toLocal8Bit());
- QApplication::clipboard()->clear();
- QApplication::clipboard()->setMimeData(dat);
- ItemSelectionChanged();
-}
-
-void MainUI::PasteItems(){
- //Only let this run if viewing the browser page
- if(ui->stackedWidget->currentWidget()!=ui->page_browser){ return; }
- const QMimeData *dat = QApplication::clipboard()->mimeData();
- if(!dat->hasFormat("x-special/lumina-copied-files")){ return; } //nothing to paste
- if(!checkUserPerms()){ return; }
- QStringList cut, copy, newcut, newcopy;
- QStringList raw = QString(dat->data("x-special/lumina-copied-files")).split("\n");
- QString base = getCurrentDir();
- if(!base.endsWith("/")){ base.append("/"); }
- for(int i=0; i<raw.length(); i++){
- if(raw[i].startsWith("cut::::")){
- cut << raw[i].section("::::",1,50);
- newcut << base+raw[i].section("::::",1,50).section("/",-1);
- }
- else if(raw[i].startsWith("copy::::")){
- copy << raw[i].section("::::",1,50);
- newcopy<< base+raw[i].section("::::",1,50).section("/",-1);
- }
- }
- bool errs = false;
- //Perform the copy/move operations
- if(!copy.isEmpty()){
- qDebug() << "Paste Copy:" << copy << "->" << newcopy;
- FODialog dlg(this);
- dlg.CopyFiles(copy, newcopy);
- dlg.show();
- dlg.exec();
- errs = errs || !dlg.noerrors;
- }
- if(!cut.isEmpty()){
- qDebug() << "Paste Cut:" << cut << "->" << newcut;
- FODialog dlg(this);
- dlg.MoveFiles(cut, newcut);
- dlg.show();
- dlg.exec();
- errs = errs || !dlg.noerrors;
- }
- //Modify the clipboard appropriately
- if(!errs && !cut.isEmpty()){
- //Now clear the clipboard since those old file locations are now invalid
- QApplication::clipboard()->clear();
- if(!copy.isEmpty()){
- //There were also files copied: save those files back into the clipboard
- QMimeData *dat = new QMimeData;
- dat->clear();
- dat->setData("x-special/lumina-copied-files", raw.filter("copy::::").join("\n").toLocal8Bit());
- QApplication::clipboard()->setMimeData(dat);
- }
- }
- ItemSelectionChanged();
-}
-
-void MainUI::ChecksumItems(){
- if(ui->stackedWidget->currentWidget()!=ui->page_browser){ return; }
- QFileInfoList sel = getSelectedItems();
- if(sel.isEmpty()){ return; }
- QStringList info, files;
- for(int i=0; i<sel.length(); i++){
- files << sel[i].absoluteFilePath();
- }
- qDebug() << "Run Checksums:" << files;
- info = LOS::Checksums(files);
- qDebug() << " - Info:" << info;
- if(info.isEmpty() || (info.length() != files.length()) ){ return; }
- for(int i=0; i<info.length(); i++){
- info[i] = QString("%2 \t(%1)").arg(files[i].section("/",-1), info[i]);
- }
- /*QMessageBox dlg(this);
- dlg.setWindowFlags( Qt::Dialog );
- dlg.setWindowTitle( tr("File Checksums") );
- dlg.setDetailedText(info.join("\n"));
- dlg.exec();*/
- QMessageBox::information(this, tr("File Checksums"), info.join("\n") );
-}
-
-void MainUI::resizeEvent(QResizeEvent *event){
- //Save the new size internally
- settings->setValue("geometry/height", event->size().height());
- settings->setValue("geometry/width", event->size().width());
-}
bgstack15