diff --git a/src/EditDialog.cpp b/src/EditDialog.cpp index f80033b6..9895a49b 100644 --- a/src/EditDialog.cpp +++ b/src/EditDialog.cpp @@ -19,6 +19,7 @@ #include #include #include +#include #include #include @@ -65,6 +66,25 @@ EditDialog::EditDialog(QWidget* parent) ui->editorBinary->addAction(ui->actionPrint); ui->editorBinary->addAction(ui->actionCopyHexAscii); + connect(ui->actionOpenInApp, &QAction::triggered, this, [&]() { + QUrl url; + switch (dataSource) { + case SciBuffer: + url.setUrl(sciEdit->text(), QUrl::TolerantMode); + break; + case QtBuffer: + url.setUrl(ui->qtEdit->toPlainText(), QUrl::TolerantMode);; + break; + default: + return; + } + if(url.isValid()) + QDesktopServices::openUrl(url); + else + QMessageBox::warning(this, QApplication::applicationName(), + tr("Content is not a valid URL or filename: %1").arg(url.errorString())); + }); + mustIndentAndCompact = Settings::getValue("databrowser", "indent_compact").toBool(); ui->actionIndent->setChecked(mustIndentAndCompact); diff --git a/src/EditDialog.ui b/src/EditDialog.ui index aa3fc552..b2c4838c 100644 --- a/src/EditDialog.ui +++ b/src/EditDialog.ui @@ -124,6 +124,7 @@ + @@ -175,8 +176,8 @@ Errors are indicated with a red squiggle underline. 0 0 - 598 - 264 + 84 + 35 @@ -402,6 +403,24 @@ Errors are indicated with a red squiggle underline. Wrap lines on word boundaries + + + + :/icons/open_in_app:/icons/open_in_app + + + Open in default application or browser + + + Open in application + + + Open in default application or browser + + + The value is interpreted as a file or URL and opened in the default application or web browser. + + comboMode diff --git a/src/ExtendedTableWidget.cpp b/src/ExtendedTableWidget.cpp index 2f67b481..e9cb0502 100644 --- a/src/ExtendedTableWidget.cpp +++ b/src/ExtendedTableWidget.cpp @@ -24,6 +24,7 @@ #include #include #include +#include #include @@ -901,6 +902,17 @@ void ExtendedTableWidget::cellClicked(const QModelIndex& index) emit foreignKeyClicked(sqlb::ObjectIdentifier(m->currentTableName().schema(), fk.table()), fk.columns().size() ? fk.columns().at(0) : "", m->data(index, Qt::EditRole).toByteArray()); + else { + // If this column does not have a foreign-key, try to interpret it as a filename/URL and open it in external application. + + // TODO: Qt is doing a contiguous selection when Control+Click is pressed. It should be disabled, but at least moving the + // current index gives better result. + setCurrentIndex(index); + + QUrl url (model()->data(index, Qt::EditRole).toString(), QUrl::TolerantMode); + if(url.isValid()) + QDesktopServices::openUrl(url); + } } } diff --git a/src/icons/application_link.png b/src/icons/application_link.png new file mode 100644 index 00000000..f8fbb3ed Binary files /dev/null and b/src/icons/application_link.png differ diff --git a/src/icons/icons.qrc b/src/icons/icons.qrc index 4e59acb3..7cd15d40 100644 --- a/src/icons/icons.qrc +++ b/src/icons/icons.qrc @@ -98,5 +98,6 @@ style_edit.png style_delete.png style_add.png + application_link.png