diff options
author | Ken Moore <moorekou@gmail.com> | 2016-04-25 13:08:12 -0400 |
---|---|---|
committer | Ken Moore <moorekou@gmail.com> | 2016-04-25 13:08:12 -0400 |
commit | ed5ecf7ea7a482b4649e66ecb35fbc60af680684 (patch) | |
tree | acc0fa17d228259e847f55c678db9fb0a9b50f0c /lumina-fileinfo/MainUI.cpp | |
parent | Merge branch 'master' of github.com:pcbsd/lumina (diff) | |
download | lumina-ed5ecf7ea7a482b4649e66ecb35fbc60af680684.tar.gz lumina-ed5ecf7ea7a482b4649e66ecb35fbc60af680684.tar.bz2 lumina-ed5ecf7ea7a482b4649e66ecb35fbc60af680684.zip |
Rearrange the Lumina source tree quite a bit:
Now the utilites are arranged by category (core, core-utils, desktop-utils), so all the -utils may be excluded by a package system (or turned into separate packages) as needed.
Diffstat (limited to 'lumina-fileinfo/MainUI.cpp')
-rw-r--r-- | lumina-fileinfo/MainUI.cpp | 299 |
1 files changed, 0 insertions, 299 deletions
diff --git a/lumina-fileinfo/MainUI.cpp b/lumina-fileinfo/MainUI.cpp deleted file mode 100644 index a2c30ebd..00000000 --- a/lumina-fileinfo/MainUI.cpp +++ /dev/null @@ -1,299 +0,0 @@ -//=========================================== -// Lumina-DE source code -// Copyright (c) 2015, Ken Moore -// Available under the 3-clause BSD license -// See the LICENSE file for full details -//=========================================== -#include <QtConcurrent/QtConcurrentRun> -#include "MainUI.h" -#include "ui_MainUI.h" - -#include <QFileDialog> -#include <QMessageBox> - -#include <LuminaUtils.h> -#include <LuminaOS.h> - -LFileInfo INFO = LFileInfo(""); - -MainUI::MainUI() : QDialog(), ui(new Ui::MainUI){ - ui->setupUi(this); //load the designer form - canwrite = false; - terminate_thread = false; - UpdateIcons(); //Set all the icons in the dialog - SetupConnections(); -} - -MainUI::~MainUI(){ - terminate_thread = true; -} - -//============= -// PUBLIC -//============= -void MainUI::LoadFile(QString path, QString type){ - INFO = LFileInfo(path); - if(INFO.exists()){ canwrite = INFO.isWritable(); } - else{ - //See if the containing directory can be written - QFileInfo chk(INFO.absolutePath()); - canwrite = (chk.isDir() && chk.isWritable()); - } - if(!INFO.exists() && !type.isEmpty()){ - //Set the proper type flag on the shortcut - if(type=="APP"){ INFO.XDG()->type = XDGDesktop::APP; } - else if(type=="LINK"){ INFO.XDG()->type = XDGDesktop::LINK; } - } - - //First load the general file information - ui->label_file_name->setText( INFO.fileName() ); - ui->label_file_mimetype->setText( INFO.mimetype() ); - if(!INFO.isDir()){ ui->label_file_size->setText( LUtils::BytesToDisplaySize( INFO.size() ) ); } - else { - ui->label_file_size->setText(tr("---Calculating---")); - QtConcurrent::run(this, &MainUI::GetDirSize, INFO.absoluteFilePath()); - } - ui->label_file_owner->setText(INFO.owner()); - ui->label_file_group->setText(INFO.group()); - ui->label_file_created->setText( INFO.created().toString(Qt::SystemLocaleLongDate) ); - ui->label_file_modified->setText( INFO.lastModified().toString(Qt::SystemLocaleLongDate) ); - //Get the file permissions - QString perms; - if(INFO.isReadable() && INFO.isWritable()){ perms = tr("Read/Write"); } - else if(INFO.isReadable()){ perms = tr("Read Only"); } - else if(INFO.isWritable()){ perms = tr("Write Only"); } - else{ perms = tr("No Access"); } - ui->label_file_perms->setText(perms); - //Now the special "type" for the file - QString ftype; - if(INFO.suffix().toLower()=="desktop"){ ftype = tr("XDG Shortcut"); } - else if(INFO.isDir()){ ftype = tr("Directory"); } - else if(INFO.isExecutable()){ ftype = tr("Binary"); } - else{ ftype = INFO.suffix().toUpper(); } - if(INFO.isHidden()){ ftype = QString(tr("Hidden %1")).arg(type); } - ui->label_file_type->setText(ftype); - //Now load the icon for the file - if(INFO.isImage()){ - ui->label_file_icon->setPixmap( QPixmap(INFO.absoluteFilePath()).scaledToHeight(64) ); - }else{ - ui->label_file_icon->setPixmap( LXDG::findIcon( INFO.iconfile(), "unknown").pixmap(QSize(64,64)) ); - } - //Now load the special XDG desktop info - if(INFO.isDesktopFile()){ - - if(INFO.XDG()->type == XDGDesktop::APP){ - ui->line_xdg_command->setText(INFO.XDG()->exec); - ui->line_xdg_wdir->setText(INFO.XDG()->path); - ui->check_xdg_useTerminal->setChecked( INFO.XDG()->useTerminal ); - ui->check_xdg_startupNotify->setChecked( INFO.XDG()->startupNotify ); - }else if(INFO.XDG()->type==XDGDesktop::LINK){ - //Hide the options that are unavailable for links - //Command line (exec) - ui->line_xdg_command->setVisible(false); - ui->tool_xdg_getCommand->setVisible(false); - ui->lblCommand->setVisible(false); - //Options - ui->lblOptions->setVisible(false); - ui->check_xdg_useTerminal->setVisible(false); - ui->check_xdg_startupNotify->setVisible(false); - //Now load the variables for this type of shortcut - ui->lblWorkingDir->setText(tr("URL:")); - ui->line_xdg_wdir->setText( INFO.XDG()->url ); - ui->tool_xdg_getDir->setVisible(false); //the dir selection button - - } - ui->line_xdg_name->setText(INFO.XDG()->name); - ui->line_xdg_comment->setText(INFO.XDG()->comment); - ui->push_xdg_getIcon->setWhatsThis( INFO.XDG()->icon ); - ReloadAppIcon(); - ui->push_save->setVisible(true); - ui->push_save->setEnabled(false); - }else{ - xdgvaluechanged(); //just do the disables here - //Also remove the xdg tab - if(ui->tabWidget->count()>1){ ui->tabWidget->removeTab(1); } - } - //Setup the tab - if(type.isEmpty()){ ui->tabWidget->setCurrentIndex(0); } - else if(ui->tabWidget->count()>1){ ui->tabWidget->setCurrentIndex(1); } - //Hide the tab bar (the autoHideTabBar setting was not added until Qt 5.4) - if(ui->tabWidget->count() < 2){ ui->tabWidget->tabBar()->hide(); } -} - -void MainUI::UpdateIcons(){ - this->setWindowIcon(LXDG::findIcon("document-preview","unknown")); - ui->push_close->setIcon( LXDG::findIcon("dialog-close","") ); - ui->push_save->setIcon( LXDG::findIcon("document-save","") ); - ui->tool_xdg_getCommand->setIcon( LXDG::findIcon("edit-find-project","") ); - ui->tool_xdg_getDir->setIcon( LXDG::findIcon("document-open","") ); -} - -//============== -// PRIVATE -//============== -void MainUI::ReloadAppIcon(){ - ui->push_xdg_getIcon->setIcon( LXDG::findIcon(ui->push_xdg_getIcon->whatsThis(),"") ); -} - -void MainUI::GetDirSize(const QString dirname) const { - const quint16 update_frequency = 2000; //For reducing the number of folder_size_changed calls - quint64 filesize = 0; - quint64 file_number = 0; - quint64 dir_number = 1; - QDir folder(dirname); - QFileInfoList file_list; - QString dir_name; - QList<QString> head; - folder.setFilter(QDir::Hidden|QDir::AllEntries|QDir::NoDotAndDotDot); - file_list = folder.entryInfoList(); - for(int i=0; i<file_list.size(); ++i) { - if(terminate_thread) - break; - if(file_list[i].isDir() && !file_list[i].isSymLink()) { - ++dir_number; - head.prepend(file_list[i].absoluteFilePath()); - } - else - ++file_number; - if(!file_list[i].isSymLink()) - filesize += file_list[i].size(); - } - while(!head.isEmpty()) { - if(terminate_thread) - break; - dir_name = head.takeFirst(); - if(!folder.cd(dir_name)) { - qDebug() << "The folder " << dir_name << " doesn't exist"; - continue; - } - file_list = folder.entryInfoList(); - for(int i=0; i<file_list.size(); ++i) { - if(file_list[i].isDir() && !file_list[i].isSymLink()) { - ++dir_number; - head.prepend(file_list[i].absoluteFilePath()); - } - else - ++file_number; - if(!file_list[i].isSymLink()) - filesize += file_list[i].size(); - if(i%update_frequency == 0) - emit folder_size_changed(filesize, file_number, dir_number, false); - } - } - emit folder_size_changed(filesize, file_number, dir_number, true); -} - -// Initialization procedures -void MainUI::SetupConnections(){ - connect(ui->line_xdg_command, SIGNAL(editingFinished()), this, SLOT(xdgvaluechanged()) ); - connect(ui->line_xdg_comment, SIGNAL(editingFinished()), this, SLOT(xdgvaluechanged()) ); - connect(ui->line_xdg_name, SIGNAL(editingFinished()), this, SLOT(xdgvaluechanged()) ); - connect(ui->line_xdg_wdir, SIGNAL(editingFinished()), this, SLOT(xdgvaluechanged()) ); - connect(ui->check_xdg_useTerminal, SIGNAL(clicked()), this, SLOT(xdgvaluechanged()) ); - connect(ui->check_xdg_startupNotify, SIGNAL(clicked()), this, SLOT(xdgvaluechanged()) ); - connect(this, SIGNAL(folder_size_changed(quint64, quint64, quint64, bool)), this, SLOT(refresh_folder_size(quint64, quint64, quint64, bool))); -} - -//UI Buttons -void MainUI::on_push_close_clicked(){ - terminate_thread = true; - if(ui->push_save->isEnabled()){ - //Still have unsaved changes - //TO-DO - prompt for whether to save the changes - - } - this->close(); -} - -void MainUI::on_push_save_clicked(){ - //Save all the xdg values into the structure - if(!INFO.isDesktopFile() || !canwrite){ return; } - XDGDesktop XDG = *INFO.XDG();; - //Now change the structure - XDG.name = ui->line_xdg_name->text(); - XDG.genericName = ui->line_xdg_name->text().toLower(); - XDG.comment = ui->line_xdg_comment->text(); - XDG.icon = ui->push_xdg_getIcon->whatsThis(); - //Now do the type-specific fields - if(XDG.type==XDGDesktop::APP){ - XDG.exec = ui->line_xdg_command->text(); - XDG.tryexec = ui->line_xdg_command->text().section(" ",0,0); //use the first word/binary for the existance check - XDG.path = ui->line_xdg_wdir->text(); //working dir/path - XDG.useTerminal = ui->check_xdg_useTerminal->isChecked(); - XDG.startupNotify = ui->check_xdg_startupNotify->isChecked(); - }else if(XDG.type==XDGDesktop::LINK){ - XDG.url = ui->line_xdg_wdir->text(); //we re-used this field - } - //Clear any info which this utility does not support at the moment - XDG.actionList.clear(); - XDG.actions.clear(); - //Now save the structure to file - bool saved = LXDG::saveDesktopFile( XDG, true); //Try to merge the file/structure as necessary - qDebug() << "File Saved:" << saved; - ui->push_save->setEnabled( !saved ); - if(saved){ - //Re-load the file info - LoadFile(INFO.absoluteFilePath()); - } -} - -void MainUI::on_tool_xdg_getCommand_clicked(QString prev){ - //Find a binary to run - QString dir = prev; //start with the previous attempt (if there was one) - if(dir.isEmpty()){ ui->line_xdg_command->text(); }//then try current selection - if(dir.isEmpty()){ dir = LOS::AppPrefix()+"bin"; } //then open the application binaries directory - QString file = QFileDialog::getOpenFileName(this, tr("Select a binary"), dir ); - if(file.isEmpty()){ return; } //cancelled - if(!LUtils::isValidBinary(file)){ - QMessageBox::warning(this, tr("Error"), tr("Invalid selection: Not a valid executable")); - on_tool_xdg_getCommand_clicked(file); - return; - } - ui->line_xdg_command->setText(file); - xdgvaluechanged(); -} - -void MainUI::on_tool_xdg_getDir_clicked(){ - //Find a directory - QString dir = ui->line_xdg_wdir->text(); - if(dir.isEmpty()){ dir = QDir::homePath(); } - dir = QFileDialog::getExistingDirectory(this, tr("Select a directory"), dir); - if(dir.isEmpty()){ return; } //cancelled - ui->line_xdg_wdir->setText(dir); - xdgvaluechanged(); -} - -void MainUI::on_push_xdg_getIcon_clicked(){ - //Find an image file - QString dir = ui->push_xdg_getIcon->whatsThis(); //then try current selection - if(dir.isEmpty()){ dir = QDir::homePath(); } - //Get the known file extensions - QStringList ext = LUtils::imageExtensions(); - for(int i=0; i<ext.length(); i++){ ext[i].prepend("*."); } //turn them into valid filters - QString file = QFileDialog::getOpenFileName(this, tr("Select an icon"), dir ,QString(tr("Images (%1);; All Files (*)")).arg(ext.join(" ")) ); - if(file.isEmpty()){ return; } //cancelled - ui->push_xdg_getIcon->setWhatsThis(file); - ReloadAppIcon(); - xdgvaluechanged(); -} - -//XDG Value Changed -void MainUI::xdgvaluechanged(){ - if(INFO.isDesktopFile()){ - ui->push_save->setVisible(true); - //Compare the current UI values to the file values - ui->push_save->setEnabled(canwrite); //assume changed at this point - // TO-DO - - }else{ - ui->push_save->setVisible(false); - ui->push_save->setEnabled(false); - } -} - -void MainUI::refresh_folder_size(quint64 size, quint64 files, quint64 folders, bool finished) { - if(finished) - ui->label_file_size->setText( LUtils::BytesToDisplaySize( size ) + " -- " + tr(" Folders: ") + QString::number(folders) + " / " + tr("Files: ") + QString::number(files) ); - else - ui->label_file_size->setText( LUtils::BytesToDisplaySize( size ) + " -- " + tr(" Folders: ") + QString::number(folders) + " / " + tr("Files: ") + QString::number(files) + tr(" Calculating..." )); -} |