소스 검색

frontend-tools: Make links in script description clickable

Matt Gajownik 5 년 전
부모
커밋
2ca17e62ce

+ 3 - 0
UI/frontend-plugins/frontend-tools/data/locale/en-US.ini

@@ -38,6 +38,9 @@ PythonSettings.PythonInstallPath64bit="Python Install Path (64bit)"
 PythonSettings.BrowsePythonPath="Browse Python Path"
 ScriptLogWindow="Script Log"
 Description="Description"
+ScriptDescriptionLink.Text="Open this link in your default web browser?"
+ScriptDescriptionLink.Text.Url="URL: %1"
+ScriptDescriptionLink.OpenURL="Open URL"
 
 FileFilter.ScriptFiles="Script Files"
 FileFilter.AllFiles="All Files"

+ 3 - 0
UI/frontend-plugins/frontend-tools/forms/scripts.ui

@@ -174,6 +174,9 @@
            <property name="text">
             <string notr="true"/>
            </property>
+           <property name="openExternalLinks">
+            <bool>false</bool>
+           </property>
            <property name="wordWrap">
             <bool>true</bool>
            </property>

+ 38 - 0
UI/frontend-plugins/frontend-tools/scripts.cpp

@@ -1,3 +1,4 @@
+#include "obs-module.h"
 #include "scripts.hpp"
 #include "frontend-tools-config.h"
 #include "../../properties-view.hpp"
@@ -13,6 +14,9 @@
 #include <QDialogButtonBox>
 #include <QResizeEvent>
 #include <QAction>
+#include <QMessageBox>
+#include <QUrl>
+#include <QDesktopServices>
 
 #include <obs.hpp>
 #include <obs-module.h>
@@ -470,6 +474,40 @@ void ScriptsTool::on_defaults_clicked()
 		item->data(Qt::UserRole).toString().toUtf8().constData());
 }
 
+void ScriptsTool::on_description_linkActivated(const QString &link)
+{
+	QUrl url(link, QUrl::StrictMode);
+	if (url.isValid() && (url.scheme().compare("http") == 0 ||
+			      url.scheme().compare("https") == 0)) {
+		QString msg(obs_module_text("ScriptDescriptionLink.Text"));
+		msg += "\n\n";
+		msg += QString(obs_module_text(
+				       "ScriptDescriptionLink.Text.Url"))
+			       .arg(link);
+
+		const char *open =
+			obs_module_text("ScriptDescriptionLink.OpenURL");
+
+		QMessageBox messageBox(this);
+		messageBox.setWindowTitle(open);
+		messageBox.setText(msg);
+
+		obs_frontend_push_ui_translation(obs_module_get_string);
+		QPushButton *yesButton =
+			messageBox.addButton(open, QMessageBox::YesRole);
+		QPushButton *noButton =
+			messageBox.addButton(tr("Cancel"), QMessageBox::NoRole);
+		obs_frontend_pop_ui_translation();
+		messageBox.setDefaultButton(yesButton);
+		messageBox.setEscapeButton(noButton);
+		messageBox.setIcon(QMessageBox::Question);
+		messageBox.exec();
+
+		if (messageBox.clickedButton() == yesButton)
+			QDesktopServices::openUrl(url);
+	}
+}
+
 /* ----------------------------------------------------------------- */
 
 extern "C" void FreeScripts()

+ 3 - 0
UI/frontend-plugins/frontend-tools/scripts.hpp

@@ -51,4 +51,7 @@ public slots:
 	void on_scripts_currentRowChanged(int row);
 
 	void on_pythonPathBrowse_clicked();
+
+private slots:
+	void on_description_linkActivated(const QString &link);
 };