Implement context menu on 'sources' box

master
jp9000 2014-06-30 01:13:32 -07:00
parent 67440b92b5
commit ff2a2cceb3
4 changed files with 77 additions and 4 deletions

View File

@ -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."

View File

@ -152,6 +152,9 @@
<verstretch>0</verstretch>
</sizepolicy>
</property>
<property name="contextMenuPolicy">
<enum>Qt::CustomContextMenu</enum>
</property>
<property name="frameShape">
<enum>QFrame::NoFrame</enum>
</property>
@ -257,6 +260,9 @@
<verstretch>0</verstretch>
</sizepolicy>
</property>
<property name="contextMenuPolicy">
<enum>Qt::CustomContextMenu</enum>
</property>
<property name="frameShape">
<enum>QFrame::NoFrame</enum>
</property>
@ -467,7 +473,7 @@
<property name="title">
<string>Basic.MainMenu.Edit</string>
</property>
<widget class="QMenu" name="menuBasic_MainMenu_Edit_Transform">
<widget class="QMenu" name="transformMenu">
<property name="title">
<string>Basic.MainMenu.Edit.Transform</string>
</property>
@ -488,7 +494,7 @@
<addaction name="actionUndo"/>
<addaction name="actionRedo"/>
<addaction name="separator"/>
<addaction name="menuBasic_MainMenu_Edit_Transform"/>
<addaction name="transformMenu"/>
</widget>
<addaction name="menu_File"/>
<addaction name="menuBasic_MainMenu_Edit"/>

View File

@ -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<QMenu> 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)

View File

@ -19,6 +19,7 @@
#include <QNetworkAccessManager>
#include <QBuffer>
#include <QAction>
#include <obs.hpp>
#include <unordered_map>
#include <vector>
@ -60,6 +61,8 @@ private:
QNetworkAccessManager networkManager;
QPointer<QAction> 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,