aboutsummaryrefslogtreecommitdiff
path: root/src-qt5/desktop-utils/lumina-fileinfo/MainUI.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'src-qt5/desktop-utils/lumina-fileinfo/MainUI.cpp')
-rw-r--r--src-qt5/desktop-utils/lumina-fileinfo/MainUI.cpp327
1 files changed, 176 insertions, 151 deletions
diff --git a/src-qt5/desktop-utils/lumina-fileinfo/MainUI.cpp b/src-qt5/desktop-utils/lumina-fileinfo/MainUI.cpp
index 0247e011..a990fc29 100644
--- a/src-qt5/desktop-utils/lumina-fileinfo/MainUI.cpp
+++ b/src-qt5/desktop-utils/lumina-fileinfo/MainUI.cpp
@@ -15,13 +15,18 @@
#include <LUtils.h>
#include <LuminaOS.h>
-MainUI::MainUI() : QDialog(), ui(new Ui::MainUI){
+MainUI::MainUI() : QMainWindow(), ui(new Ui::MainUI){
ui->setupUi(this); //load the designer form
canwrite = false;
terminate_thread = false;
INFO = new LFileInfo();
UpdateIcons(); //Set all the icons in the dialog
SetupConnections();
+
+ //Disable buttons that are not working yet
+ ui->actionOpen_File->setVisible(false);
+ ui->actionOpen_Directory->setVisible(false);
+ ui->menuSave_As->setEnabled(false);
}
MainUI::~MainUI(){
@@ -37,123 +42,12 @@ void MainUI::LoadFile(QString path, QString type){
//Do the first file information tab
qDebug() << "Load File:" << path << type;
INFO = new LFileInfo(path);
- if(INFO->exists()){ canwrite = INFO->isWritable(); }
- else if(!INFO->filePath().isEmpty()){
- //See if the containing directory can be written
- //QFileInfo chk(INFO->absolutePath());
- canwrite = (INFO->isDir() && INFO->isWritable());
- }else{
- canwrite = true; //no associated file yet
- }
- 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
if(!INFO->filePath().isEmpty()){
- 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()){
- QPixmap pix(INFO->absoluteFilePath());
- ui->label_file_icon->setPixmap(pix.scaledToHeight(64));
- ui->label_file_size->setText( ui->label_file_size->text()+" ("+QString::number(pix.width())+" x "+QString::number(pix.height())+" px)" );
- }else if(INFO->isVideo()){
- ui->label_file_icon->hide();
- LVideoLabel *mediaLabel = new LVideoLabel(INFO->absoluteFilePath(), true, ui->tab_file);
- mediaLabel->setFixedSize(64,64);
- ui->formLayout->replaceWidget(ui->label_file_icon, mediaLabel);
- }else{
- ui->label_file_icon->setPixmap( LXDG::findIcon( INFO->iconfile(), "unknown").pixmap(QSize(64,64)) );
- }
- //Now verify the tab is available in the widget
- //qDebug() << "Check tab widget";
- if(ui->tabWidget->indexOf(ui->tab_file)<0){
- //qDebug() << "Add File Info Tab";
- ui->tabWidget->addTab(ui->tab_file, tr("File Information"));
- }
- //qDebug() << "Done with Tab Check";
+ SyncFileInfo();
}else{
- if(ui->tabWidget->indexOf(ui->tab_file)>=0){
- ui->tabWidget->removeTab( ui->tabWidget->indexOf(ui->tab_file) );
- }
+ SetupNewFile();
}
-
- //Now load the special XDG desktop info
- qDebug() << "Check XDG Info:" << type;
- //qDebug() << INFO->isDesktopFile() << type;
- if(INFO->isDesktopFile() || !type.isEmpty()){
-
- 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);
- //Now ensure the xdg tab exists in the widget
- if(ui->tabWidget->indexOf(ui->tab_deskedit)<0){
- qDebug() << "Adding the deskedit tab";
- ui->tabWidget->addTab(ui->tab_deskedit, tr("Edit Shortcut"));
- }
- }else{
- xdgvaluechanged(); //just do the disables here
- //Also remove the xdg tab
- if(ui->tabWidget->indexOf(ui->tab_deskedit) >= 0){
- qDebug() << "Removing the deskedit tab";
- ui->tabWidget->removeTab( ui->tabWidget->indexOf(ui->tab_deskedit) );
- }
- }
- //Setup the tab
- if(type.isEmpty()){ ui->tabWidget->setCurrentIndex(0); }
- else if(ui->tabWidget->count()>1){ ui->tabWidget->setCurrentIndex(1); }
- qDebug() << "Done Loading File";
}
void MainUI::UpdateIcons(){
@@ -221,8 +115,160 @@ void MainUI::GetDirSize(const QString dirname) const {
emit folder_size_changed(filesize, file_number, dir_number, true);
}
+void MainUI::SyncFileInfo(){
+ qDebug() << "Sync File Info";
+ if(INFO->filePath().isEmpty()){ return; }
+ if(INFO->exists()){ canwrite = INFO->isWritable(); }
+ else{
+ //See if the containing directory can be written
+ QFileInfo chk(INFO->absolutePath());
+ canwrite = (chk.isDir() && chk.isWritable());
+ }
+ 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(ftype); }
+ ui->label_file_type->setText(ftype);
+
+ //Now load the icon for the file
+ if(INFO->isImage()){
+ QPixmap pix(INFO->absoluteFilePath());
+ ui->label_file_icon->setPixmap(pix.scaledToHeight(64));
+ ui->label_file_size->setText( ui->label_file_size->text()+" ("+QString::number(pix.width())+" x "+QString::number(pix.height())+" px)" );
+ }else if(INFO->isVideo()){
+ ui->label_file_icon->hide();
+ LVideoLabel *mediaLabel = new LVideoLabel(INFO->absoluteFilePath(), true, ui->tab_file);
+ mediaLabel->setFixedSize(64,64);
+ ui->formLayout->replaceWidget(ui->label_file_icon, mediaLabel);
+ }else{
+ ui->label_file_icon->setPixmap( LXDG::findIcon( INFO->iconfile(), "unknown").pixmap(QSize(64,64)) );
+ }
+
+ //qDebug() << "Check XDG Info:"
+ //qDebug() << INFO->isDesktopFile() << type;
+ syncXdgStruct(INFO->XDG());
+ //Make sure the right tabs are available
+ if(ui->tabWidget->indexOf(ui->tab_file)<0){
+ //qDebug() << "Add File Info Tab";
+ ui->tabWidget->addTab(ui->tab_file, tr("File Information"));
+ }
+ if(!INFO->isDesktopFile()){
+ if(ui->tabWidget->indexOf(ui->tab_deskedit)>=0){
+ ui->tabWidget->removeTab( ui->tabWidget->indexOf(ui->tab_deskedit) );
+ }
+ }
+ ui->tabWidget->setCurrentIndex(ui->tabWidget->indexOf(ui->tab_file) );
+}
+
+void MainUI::SetupNewFile(){
+ //qDebug() << "Setup New File";
+ if(!INFO->filePath().isEmpty()){
+ INFO = new LFileInfo();
+ }
+ terminate_thread = true; //just in case
+ canwrite = true; //can always write a new file
+ syncXdgStruct(INFO->XDG());
+ //Make sure the right tabs are enabled
+ if(ui->tabWidget->indexOf(ui->tab_file)>=0){
+ ui->tabWidget->removeTab( ui->tabWidget->indexOf(ui->tab_file) );
+ }
+ if(ui->tabWidget->indexOf(ui->tab_deskedit)<0){
+ //qDebug() << "Adding the deskedit tab";
+ ui->tabWidget->addTab(ui->tab_deskedit, tr("XDG Shortcut"));
+ }
+ ui->tabWidget->setCurrentIndex(ui->tabWidget->indexOf(ui->tab_deskedit) );
+}
+
+void MainUI::syncXdgStruct(XDGDesktop *XDG){
+ bool cleanup = false;
+ if(XDG==0){ XDG = new XDGDesktop(); cleanup = true;} //make sure nothing crashes
+ if(XDG->type == XDGDesktop::APP){
+ ui->line_xdg_command->setText(XDG->exec);
+ ui->line_xdg_wdir->setText(XDG->path);
+ ui->check_xdg_useTerminal->setChecked( XDG->useTerminal );
+ ui->check_xdg_startupNotify->setChecked( XDG->startupNotify );
+ }else if(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( XDG->url );
+ ui->tool_xdg_getDir->setVisible(false); //the dir selection button
+ }
+ ui->line_xdg_name->setText(XDG->name);
+ ui->line_xdg_comment->setText(XDG->comment);
+ ui->line_xdg_icon->setText( XDG->icon );
+ ReloadAppIcon();
+ ui->actionSave_Shortcut->setVisible(true);
+ ui->actionSave_Shortcut->setEnabled(false);
+ if(cleanup){ delete XDG; }
+}
+
+bool MainUI::saveFile(QString path){
+ //qDebug() << "Request save file:" << path;
+ XDGDesktop *XDG = INFO->XDG();
+ if(XDG==0){ XDG = new XDGDesktop(); }
+ if(XDG->type == XDGDesktop::BAD){ XDG->type = XDGDesktop::APP; }
+ //Update the file path in the data structure
+ XDG->filePath = path;
+ //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->line_xdg_icon->text();
+ //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
+ //qDebug() << "Saving File:" << XDG->filePath;
+ return XDG->saveDesktopFile(true); //Try to merge the file/structure as necessary
+}
+
// Initialization procedures
void MainUI::SetupConnections(){
+ connect(ui->actionQuit, SIGNAL(triggered()), this, SLOT(closeApplication()) );
+ connect(ui->actionSave_Shortcut, SIGNAL(triggered()), this, SLOT(save_clicked()) );
+ connect(ui->actionNew_Shortcut, SIGNAL(triggered()), this, SLOT(SetupNewFile()) );
+ connect(ui->actionOpen_File, SIGNAL(triggered()), this, SLOT(open_file()) );
+ connect(ui->actionOpen_Directory, SIGNAL(triggered()), this, SLOT(open_dir()) );
connect(ui->line_xdg_command, SIGNAL(editingFinished()), this, SLOT(xdgvaluechanged()) );
connect(ui->line_xdg_comment, SIGNAL(editingFinished()), this, SLOT(xdgvaluechanged()) );
connect(ui->line_xdg_icon, SIGNAL(textChanged(QString)), this, SLOT(ReloadAppIcon()) );
@@ -235,55 +281,34 @@ void MainUI::SetupConnections(){
}
//UI Buttons
-void MainUI::on_push_close_clicked(){
+void MainUI::closeApplication(){
terminate_thread = true;
- if(ui->push_save->isEnabled()){
+ if(ui->actionSave_Shortcut->isEnabled()){
//Still have unsaved changes
//TO-DO - prompt for whether to save the changes
}
this->close();
}
-void MainUI::on_push_save_clicked(){
+void MainUI::save_clicked(){
//Save all the xdg values into the structure
- if( (!INFO->isDesktopFile() && !INFO->filePath().isEmpty()) || !canwrite){ return; }
- if(INFO->filePath().isEmpty()){
+ QString filePath = INFO->filePath();
+ if( !filePath.isEmpty() && !INFO->isDesktopFile() ){ return; }
+ if(filePath.isEmpty() || !canwrite){
//Need to prompt for where to save the file and what to call it
QString appdir = QString(getenv("XDG_DATA_HOME"))+"/applications/";
if(!QFile::exists(appdir)){ QDir dir; dir.mkpath(appdir); }
- QString filePath = QFileDialog::getSaveFileName(this, tr("Save Application File"), appdir, tr("Application Registrations (*.desktop)") );
+ filePath = QFileDialog::getSaveFileName(this, tr("Save Application File"), appdir, tr("XDG Shortcuts (*.desktop)") );
if(filePath.isEmpty()){ return; }
if(!filePath.endsWith(".desktop")){ filePath.append(".desktop"); }
- //Update the file paths in the data structure
- INFO->setFile(filePath);
- INFO->XDG()->filePath = filePath;
}
- 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->line_xdg_icon->text();
- //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 = XDG->saveDesktopFile(true); //Try to merge the file/structure as necessary
- qDebug() << "File Saved:" << saved;
- ui->push_save->setEnabled( !saved );
+ //qDebug() << " -Try Saving File:" << filePath;
+ bool saved = saveFile(filePath);
+ //qDebug() << "File Saved:" << saved;
+ ui->actionSave_Shortcut->setEnabled( !saved );
if(saved){
//Re-load the file info
- LoadFile(INFO->absoluteFilePath());
+ LoadFile(filePath);
}
}
@@ -331,14 +356,14 @@ void MainUI::on_push_xdg_getIcon_clicked(){
void MainUI::xdgvaluechanged(){
//qDebug() << "xdgvaluechanged";
if( INFO->isDesktopFile() || INFO->filePath().isEmpty() ){
- ui->push_save->setVisible(true);
+ ui->actionSave_Shortcut->setVisible(true);
//Compare the current UI values to the file values
- ui->push_save->setEnabled(canwrite); //assume changed at this point
+ ui->actionSave_Shortcut->setEnabled(canwrite); //assume changed at this point
// TO-DO
}else{
- ui->push_save->setVisible(false);
- ui->push_save->setEnabled(false);
+ ui->actionSave_Shortcut->setVisible(false);
+ ui->actionSave_Shortcut->setEnabled(false);
}
}
bgstack15