diff --git a/src/EditDialog.cpp b/src/EditDialog.cpp index 9895a49b..e79a26c3 100644 --- a/src/EditDialog.cpp +++ b/src/EditDialog.cpp @@ -20,6 +20,7 @@ #include #include #include +#include #include #include @@ -66,6 +67,16 @@ EditDialog::EditDialog(QWidget* parent) ui->editorBinary->addAction(ui->actionPrint); ui->editorBinary->addAction(ui->actionCopyHexAscii); + // Set up popup menus + QMenu* popupImportFileMenu = new QMenu(this); + popupImportFileMenu->addAction(ui->actionImportInMenu); + popupImportFileMenu->addAction(ui->actionImportAsLink); + ui->actionImport->setMenu(popupImportFileMenu); + + connect(ui->actionImportAsLink, &QAction::triggered, this, [&]() { + importData(/* asLink */ true); + }); + connect(ui->actionOpenInApp, &QAction::triggered, this, [&]() { QUrl url; switch (dataSource) { @@ -330,7 +341,7 @@ void EditDialog::loadData(const QByteArray& bArrdata) } } -void EditDialog::importData() +void EditDialog::importData(bool asLink) { // Get list of supported image file formats to include them in the file dialog filter QString image_formats; @@ -383,16 +394,22 @@ void EditDialog::importData() ); if(QFile::exists(fileName)) { - QFile file(fileName); - if(file.open(QIODevice::ReadOnly)) - { - QByteArray d = file.readAll(); - loadData(d); - file.close(); + if(asLink) { + QByteArray fileNameBa = fileName.toUtf8(); + loadData(fileNameBa); + updateCellInfoAndMode(fileNameBa); + } else { + QFile file(fileName); + if(file.open(QIODevice::ReadOnly)) + { + QByteArray d = file.readAll(); + loadData(d); + file.close(); - // Update the cell data info in the bottom left of the Edit Cell - // and update mode (if required) to the just imported data type. - updateCellInfoAndMode(d); + // Update the cell data info in the bottom left of the Edit Cell + // and update mode (if required) to the just imported data type. + updateCellInfoAndMode(d); + } } } } diff --git a/src/EditDialog.h b/src/EditDialog.h index 50a0f2d4..783ed935 100644 --- a/src/EditDialog.h +++ b/src/EditDialog.h @@ -32,7 +32,7 @@ protected: void showEvent(QShowEvent* ev) override; private slots: - void importData(); + void importData(bool asLink = false); void exportData(); void setNull(); void updateApplyButton(); diff --git a/src/EditDialog.ui b/src/EditDialog.ui index b2c4838c..466fda33 100644 --- a/src/EditDialog.ui +++ b/src/EditDialog.ui @@ -421,6 +421,33 @@ Errors are indicated with a red squiggle underline. The value is interpreted as a file or URL and opened in the default application or web browser. + + + + :/icons/document_link:/icons/document_link + + + Save file reference... + + + Save reference to file + + + + + + :/icons/document_open:/icons/document_open + + + &Import... + + + Import from file + + + Opens a file dialog used to import any kind of data to this database cell. + + comboMode @@ -623,6 +650,22 @@ Errors are indicated with a red squiggle underline. + + actionImportInMenu + triggered() + EditDialog + importData() + + + -1 + -1 + + + 308 + 190 + + + importData() diff --git a/src/TableBrowser.cpp b/src/TableBrowser.cpp index 0f3bfc67..e2a95066 100644 --- a/src/TableBrowser.cpp +++ b/src/TableBrowser.cpp @@ -42,7 +42,7 @@ TableBrowser::TableBrowser(QWidget* parent) : ui->editGlobalFilter->setPlaceholderText(tr("Filter in all columns")); ui->editGlobalFilter->setConditionFormatContextMenuEnabled(false); - // Set uo popup menus + // Set up popup menus popupNewRecordMenu = new QMenu(this); popupNewRecordMenu->addAction(ui->newRecordAction); popupNewRecordMenu->addAction(ui->insertValuesAction); diff --git a/src/icons/document-link.png b/src/icons/document-link.png new file mode 100644 index 00000000..06df131a Binary files /dev/null and b/src/icons/document-link.png differ diff --git a/src/icons/icons.qrc b/src/icons/icons.qrc index 7cd15d40..fb409427 100644 --- a/src/icons/icons.qrc +++ b/src/icons/icons.qrc @@ -99,5 +99,6 @@ style_delete.png style_add.png application_link.png + document-link.png