From a993c19853f4addd8eaffbee0509db388f8cfd49 Mon Sep 17 00:00:00 2001 From: Giuseppe Zizza Date: Sat, 13 Jan 2018 16:43:24 +0100 Subject: [PATCH] File Extension management interface (#659) [NEW] Add new interface and functionality to manage database file extension. (Implements feature request #659) --- CMakeLists.txt | 3 + src/FileDialog.cpp | 5 ++ src/FileDialog.h | 5 +- src/FileExtensionManager.cpp | 113 ++++++++++++++++++++++++++ src/FileExtensionManager.h | 30 +++++++ src/FileExtensionManager.ui | 153 +++++++++++++++++++++++++++++++++++ src/PreferencesDialog.cpp | 16 +++- src/PreferencesDialog.h | 4 + src/PreferencesDialog.ui | 14 ++++ src/Settings.cpp | 3 + src/src.pro | 5 +- 11 files changed, 345 insertions(+), 6 deletions(-) create mode 100644 src/FileExtensionManager.cpp create mode 100644 src/FileExtensionManager.h create mode 100644 src/FileExtensionManager.ui diff --git a/CMakeLists.txt b/CMakeLists.txt index 488cfc92..62f4ed8f 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -123,6 +123,7 @@ set(SQLB_MOC_HDR src/RemotePushDialog.h src/FindReplaceDialog.h src/ExtendedScintilla.h + src/FileExtensionManager.h ) set(SQLB_SRC @@ -164,6 +165,7 @@ set(SQLB_SRC src/RemotePushDialog.cpp src/FindReplaceDialog.cpp src/ExtendedScintilla.cpp + src/FileExtensionManager.cpp src/Data.cpp ) @@ -185,6 +187,7 @@ set(SQLB_FORMS src/RemoteDock.ui src/RemotePushDialog.ui src/FindReplaceDialog.ui + src/FileExtensionManager.ui ) set(SQLB_RESOURCES diff --git a/src/FileDialog.cpp b/src/FileDialog.cpp index e7d4b188..a8cb3d91 100644 --- a/src/FileDialog.cpp +++ b/src/FileDialog.cpp @@ -70,3 +70,8 @@ void FileDialog::setFileDialogPath(const QString& new_path) break; // Do nothing } } + +QString FileDialog::getSqlDatabaseFileFilter() +{ + return Settings::getValue("General", "DBFileExtensions").toString() + ";;" + QObject::tr("All files (*)"); //Always add "All files (*)" to the available filters +} diff --git a/src/FileDialog.h b/src/FileDialog.h index 7b19bcaf..d23a8dd1 100644 --- a/src/FileDialog.h +++ b/src/FileDialog.h @@ -20,10 +20,7 @@ public: static QString getExistingDirectory(QWidget* parent = nullptr, const QString& caption = QString(), Options options = 0); - static QString getSqlDatabaseFileFilter() - { - return QObject::tr("SQLite database files (*.db *.sqlite *.sqlite3 *.db3);;All files (*)"); - } + static QString getSqlDatabaseFileFilter(); private: static QString getFileDialogPath(); diff --git a/src/FileExtensionManager.cpp b/src/FileExtensionManager.cpp new file mode 100644 index 00000000..3cb91fa9 --- /dev/null +++ b/src/FileExtensionManager.cpp @@ -0,0 +1,113 @@ +#include "FileExtensionManager.h" +#include "ui_FileExtensionManager.h" + +FileExtensionManager::FileExtensionManager(QStringList init, QWidget *parent) : + QDialog(parent), + ui(new Ui::FileExtensionManager) +{ + ui->setupUi(this); + + int i = 0; + foreach(QString itemString, init) + { + QString description = itemString.left(itemString.indexOf('(')).trimmed(); + QString extension = itemString; + extension = extension.remove (0, itemString.indexOf('(')+1).remove(')').simplified().trimmed(); + if ( extension.compare("*") != 0 ) //We exclude "All files" from the table + { + QTableWidgetItem *newItemDescription = new QTableWidgetItem(description); + QTableWidgetItem *newItemExtension = new QTableWidgetItem(extension); + ui->tableExtensions->insertRow(i); + ui->tableExtensions->setItem(i, 0, newItemDescription); + ui->tableExtensions->setItem(i, 1, newItemExtension); + i++; + } + } + + connect(ui->buttonAdd, SIGNAL(clicked(bool)), this, SLOT(addItem())); + connect(ui->buttonRemove, SIGNAL(clicked(bool)), this, SLOT(removeItem())); + + connect(ui->buttonDown, SIGNAL(clicked(bool)), this, SLOT(downItem())); + connect(ui->buttonUp, SIGNAL(clicked(bool)), this, SLOT(upItem())); +} + +FileExtensionManager::~FileExtensionManager() +{ + delete ui; +} + +void FileExtensionManager::addItem() +{ + int i = ui->tableExtensions->rowCount(); + ui->tableExtensions->insertRow(i); + QTableWidgetItem *newItemDescription = new QTableWidgetItem(tr("Description")); + QTableWidgetItem *newItemExtension = new QTableWidgetItem(tr("*.extension")); + ui->tableExtensions->setItem(i, 0, newItemDescription); + ui->tableExtensions->setItem(i, 1, newItemExtension); +} + +void FileExtensionManager::removeItem() +{ + QList selectedRows; + foreach (QTableWidgetItem *item, ui->tableExtensions->selectedItems()) + { + if (selectedRows.contains(item->row()) == false) + { + selectedRows.append(item->row()); + } + } + + qSort(selectedRows); + + for (int i = selectedRows.size()-1; i >= 0; --i) + { + ui->tableExtensions->removeRow(selectedRows[i]); + } +} + +void FileExtensionManager::upItem() +{ + if (ui->tableExtensions->selectedItems().isEmpty()) return; + + int selectedRow = ui->tableExtensions->selectedItems().first()->row(); + if(selectedRow == 0) + return; + + QTableWidgetItem *t1, *t2; + t1 = ui->tableExtensions->takeItem(selectedRow, 0); + t2 = ui->tableExtensions->takeItem(selectedRow, 1); + ui->tableExtensions->removeRow(selectedRow); + ui->tableExtensions->insertRow(selectedRow-1); + ui->tableExtensions->setItem(selectedRow-1, 0, t1); + ui->tableExtensions->setItem(selectedRow-1, 1, t2); + ui->tableExtensions->selectRow(selectedRow-1); +} + +void FileExtensionManager::downItem() +{ + if (ui->tableExtensions->selectedItems().isEmpty()) return; + + int selectedRow = ui->tableExtensions->selectedItems().first()->row(); + if(selectedRow == ui->tableExtensions->rowCount() - 1) + return; + + QTableWidgetItem *t1, *t2; + t1 = ui->tableExtensions->takeItem(selectedRow, 0); + t2 = ui->tableExtensions->takeItem(selectedRow, 1); + ui->tableExtensions->removeRow(selectedRow); + ui->tableExtensions->insertRow(selectedRow+1); + ui->tableExtensions->setItem(selectedRow+1, 0, t1); + ui->tableExtensions->setItem(selectedRow+1, 1, t2); + ui->tableExtensions->selectRow(selectedRow+1); +} + +QStringList FileExtensionManager::getDBFileExtensions() +{ + QStringList result; + for (int i = 0; i < ui->tableExtensions->rowCount(); ++i) + { + result.append(QString("%1 (%2)").arg(ui->tableExtensions->item(i, 0)->text()).arg(ui->tableExtensions->item(i, 1)->text())); + } + return result; +} + diff --git a/src/FileExtensionManager.h b/src/FileExtensionManager.h new file mode 100644 index 00000000..3b6e9597 --- /dev/null +++ b/src/FileExtensionManager.h @@ -0,0 +1,30 @@ +#ifndef FILEEXTENSIONMANAGER_H +#define FILEEXTENSIONMANAGER_H + +#include + +namespace Ui { +class FileExtensionManager; +} + +class FileExtensionManager : public QDialog +{ + Q_OBJECT + +public: + explicit FileExtensionManager(QStringList init, QWidget *parent = nullptr); + ~FileExtensionManager(); + + QStringList getDBFileExtensions(); + +private: + Ui::FileExtensionManager *ui; + +public slots: + void addItem(); + void removeItem(); + void upItem(); + void downItem(); +}; + +#endif // FILEEXTENSIONMANAGER_H diff --git a/src/FileExtensionManager.ui b/src/FileExtensionManager.ui new file mode 100644 index 00000000..681e8a25 --- /dev/null +++ b/src/FileExtensionManager.ui @@ -0,0 +1,153 @@ + + + FileExtensionManager + + + + 0 + 0 + 578 + 463 + + + + Dialog + + + + + + + + &Up + + + + :/icons/up:/icons/up + + + + + + + &Down + + + + :/icons/down:/icons/down + + + + + + + Qt::Horizontal + + + + 40 + 20 + + + + + + + + &Add + + + + :/icons/field_add:/icons/field_add + + + + + + + &Remove + + + + :/icons/field_delete:/icons/field_delete + + + + + + + + + QAbstractScrollArea::AdjustToContents + + + true + + + 100 + + + 100 + + + + Description + + + + + Extensions + + + + + + + + Qt::Horizontal + + + QDialogButtonBox::Cancel|QDialogButtonBox::Ok + + + + + + + + + + + buttonBox + accepted() + FileExtensionManager + accept() + + + 248 + 254 + + + 157 + 274 + + + + + buttonBox + rejected() + FileExtensionManager + reject() + + + 316 + 260 + + + 286 + 274 + + + + + diff --git a/src/PreferencesDialog.cpp b/src/PreferencesDialog.cpp index 003fcf03..41b9c59d 100644 --- a/src/PreferencesDialog.cpp +++ b/src/PreferencesDialog.cpp @@ -5,6 +5,7 @@ #include "Application.h" #include "MainWindow.h" #include "RemoteDatabase.h" +#include "FileExtensionManager.h" #include #include @@ -14,7 +15,8 @@ PreferencesDialog::PreferencesDialog(QWidget* parent) : QDialog(parent), - ui(new Ui::PreferencesDialog) + ui(new Ui::PreferencesDialog), + m_dbFileExtensions(FileDialog::getSqlDatabaseFileFilter().split(";;")) { ui->setupUi(this); ui->treeSyntaxHighlighting->setColumnHidden(0, true); @@ -280,6 +282,8 @@ void PreferencesDialog::saveSettings() Settings::setValue("General", "language", newLanguage); Settings::setValue("General", "toolbarStyle", ui->toolbarStyleComboBox->currentIndex()); + Settings::setValue("General", "DBFileExtensions", m_dbFileExtensions.join(";;") ); + accept(); } @@ -564,3 +568,13 @@ void PreferencesDialog::updatePreviewFont() ui->txtBlob->setFont(textFont); } } + +void PreferencesDialog::on_buttonManageFileExtension_clicked() +{ + FileExtensionManager *manager = new FileExtensionManager(m_dbFileExtensions, this); + + if(manager->exec() == QDialog::Accepted) + { + m_dbFileExtensions = manager->getDBFileExtensions(); + } +} diff --git a/src/PreferencesDialog.h b/src/PreferencesDialog.h index 94b32eb2..eba8cbc3 100644 --- a/src/PreferencesDialog.h +++ b/src/PreferencesDialog.h @@ -36,9 +36,13 @@ private slots: void chooseRemoteCloneDirectory(); void updatePreviewFont(); + void on_buttonManageFileExtension_clicked(); + private: Ui::PreferencesDialog *ui; + QStringList m_dbFileExtensions; + void fillLanguageBox(); void loadColorSetting(QFrame *frame, const QString &name); void setColorSetting(QFrame *frame, const QColor &color); diff --git a/src/PreferencesDialog.ui b/src/PreferencesDialog.ui index 8f9f7736..1029df6f 100644 --- a/src/PreferencesDialog.ui +++ b/src/PreferencesDialog.ui @@ -216,6 +216,20 @@ + + + + DB file extensions + + + + + + + Manage + + + diff --git a/src/Settings.cpp b/src/Settings.cpp index dd8c4c88..796ba3ac 100644 --- a/src/Settings.cpp +++ b/src/Settings.cpp @@ -152,6 +152,9 @@ QVariant Settings::getDefaultValue(const QString& group, const QString& name) if(group == "General" && name == "toolbarStyle") return static_cast(Qt::ToolButtonTextBesideIcon); + if(group == "General" && name == "DBFileExtensions") + return QObject::tr("SQLite database files (*.db *.sqlite *.sqlite3 *.db3)"); + // checkversion group? if(group == "checkversion") { diff --git a/src/src.pro b/src/src.pro index bc059f39..44f6e33b 100644 --- a/src/src.pro +++ b/src/src.pro @@ -62,6 +62,7 @@ HEADERS += \ jsontextedit.h \ FindReplaceDialog.h \ ExtendedScintilla.h \ + FileExtensionManager.h \ Data.h SOURCES += \ @@ -102,6 +103,7 @@ SOURCES += \ jsontextedit.cpp \ FindReplaceDialog.cpp \ ExtendedScintilla.cpp \ + FileExtensionManager.cpp \ Data.cpp RESOURCES += icons/icons.qrc \ @@ -126,7 +128,8 @@ FORMS += \ PlotDock.ui \ RemoteDock.ui \ RemotePushDialog.ui \ - FindReplaceDialog.ui + FindReplaceDialog.ui \ + FileExtensionManager.ui TRANSLATIONS += \ translations/sqlb_ar_SA.ts \