From ff2a2cceb3684086749ed08cf3d124bd919893fd Mon Sep 17 00:00:00 2001 From: jp9000 Date: Mon, 30 Jun 2014 01:13:32 -0700 Subject: [PATCH] Implement context menu on 'sources' box --- build/data/obs-studio/locale/en.txt | 5 +++ obs/forms/OBSBasic.ui | 10 ++++- obs/window-basic-main.cpp | 58 ++++++++++++++++++++++++++++- obs/window-basic-main.hpp | 8 ++++ 4 files changed, 77 insertions(+), 4 deletions(-) diff --git a/build/data/obs-studio/locale/en.txt b/build/data/obs-studio/locale/en.txt index 3bf3b72b4..0cd55d45d 100644 --- a/build/data/obs-studio/locale/en.txt +++ b/build/data/obs-studio/locale/en.txt @@ -10,6 +10,7 @@ Yes="Yes" No="No" Add="Add" Remove="Remove" +Rename="Rename" Properties="Properties" MoveUp="Move Up" MoveDown="Move Down" @@ -26,6 +27,10 @@ NameExists.Text="The name is already in use." NoNameEntered="Please enter a valid name" +# confirm delete dialog box +ConfirmRemove.Title="Confirm Remove" +ConfirmRemove.Text="Are you sure you wish to remove '$1'?" + # output connect messages Output.ConnectFail.Title="Failed to connect" Output.ConnectFail.BadPath="Invalid Path or Connection URL. Please check your settings to confirm that they are valid." diff --git a/obs/forms/OBSBasic.ui b/obs/forms/OBSBasic.ui index 6568bb9c9..9af2f065a 100644 --- a/obs/forms/OBSBasic.ui +++ b/obs/forms/OBSBasic.ui @@ -152,6 +152,9 @@ 0 + + Qt::CustomContextMenu + QFrame::NoFrame @@ -257,6 +260,9 @@ 0 + + Qt::CustomContextMenu + QFrame::NoFrame @@ -467,7 +473,7 @@ Basic.MainMenu.Edit - + Basic.MainMenu.Edit.Transform @@ -488,7 +494,7 @@ - + diff --git a/obs/window-basic-main.cpp b/obs/window-basic-main.cpp index 699e30c20..9a74eb7f7 100644 --- a/obs/window-basic-main.cpp +++ b/obs/window-basic-main.cpp @@ -88,6 +88,12 @@ OBSBasic::OBSBasic(QWidget *parent) this, SLOT(SceneItemNameEdited(QWidget*, QAbstractItemDelegate::EndEditHint))); + + removeItemAction = new QAction(QTStr("Remove"), this); + removeItemAction->setShortcut(QKeySequence(Qt::Key_Delete)); + connect(removeItemAction, SIGNAL(triggered()), + this, SLOT(RemoveSelectedItem())); + addAction(removeItemAction); } static void SaveAudioDevice(const char *name, int channel, obs_data_t parent) @@ -786,6 +792,25 @@ void OBSBasic::DeactivateAudioSource(OBSSource source) } } +void OBSBasic::RemoveSelectedItem() +{ + OBSSceneItem item = GetCurrentSceneItem(); + if (item) { + obs_source_t source = obs_sceneitem_getsource(item); + const char *name = obs_source_getname(source); + + QString text = QTStr("ConfirmRemove.Text"); + text.replace("$1", QT_UTF8(name)); + + QMessageBox::StandardButton button; + button = QMessageBox::question(this, + QTStr("ConfirmRemove.Remove"), text); + + if (button == QMessageBox::Yes) + obs_sceneitem_remove(item); + } +} + /* OBS Callbacks */ void OBSBasic::SceneItemAdded(void *data, calldata_t params) @@ -1211,6 +1236,11 @@ void OBSBasic::on_scenes_currentItemChanged(QListWidgetItem *current, UNUSED_PARAMETER(prev); } +void OBSBasic::EditSceneName() +{ + ui->scenes->editItem(ui->scenes->currentItem()); +} + void OBSBasic::on_scenes_customContextMenuRequested(const QPoint &pos) { /* TODO */ @@ -1315,10 +1345,34 @@ void OBSBasic::on_sources_currentItemChanged(QListWidgetItem *current, UNUSED_PARAMETER(prev); } +void OBSBasic::EditSceneItemName() +{ + ui->sources->editItem(ui->sources->currentItem()); +} + void OBSBasic::on_sources_customContextMenuRequested(const QPoint &pos) { - /* TODO */ - UNUSED_PARAMETER(pos); + QListWidgetItem *item = ui->sources->itemAt(pos); + + QMenu popup; + QPointer addSourceMenu = CreateAddSourcePopupMenu(); + if (addSourceMenu) + popup.addMenu(addSourceMenu); + + if (item) { + if (addSourceMenu) + popup.addSeparator(); + + popup.addAction(QTStr("Rename"), this, + SLOT(EditSceneItemName())); + popup.addAction(removeItemAction); + popup.addMenu(ui->transformMenu); + popup.addSeparator(); + popup.addAction(QTStr("Properties"), this, + SLOT(on_actionSourceProperties_triggered())); + } + + popup.exec(QCursor::pos()); } void OBSBasic::AddSource(const char *id) diff --git a/obs/window-basic-main.hpp b/obs/window-basic-main.hpp index 98eb16e3e..f93652ec0 100644 --- a/obs/window-basic-main.hpp +++ b/obs/window-basic-main.hpp @@ -19,6 +19,7 @@ #include #include +#include #include #include #include @@ -60,6 +61,8 @@ private: QNetworkAccessManager networkManager; + QPointer removeItemAction; + QBuffer logUploadPostData; QNetworkReply *logUploadReply = nullptr; QByteArray logUploadReturnData; @@ -145,6 +148,8 @@ private slots: void ActivateAudioSource(OBSSource source); void DeactivateAudioSource(OBSSource source); + void RemoveSelectedItem(); + private: /* OBS Callbacks */ static void SceneItemAdded(void *data, calldata_t params); @@ -244,6 +249,9 @@ private slots: void AddSourceFromAction(); + void EditSceneName(); + void EditSceneItemName(); + void SceneNameEdited(QWidget *editor, QAbstractItemDelegate::EndEditHint endHint); void SceneItemNameEdited(QWidget *editor,