refactor: ActionDialog, Use Combo for action selection
This commit is contained in:
parent
04f73cfcb7
commit
4db2b80d4e
3 changed files with 97 additions and 244 deletions
|
|
@ -25,42 +25,28 @@
|
||||||
#include "KeySequence.h"
|
#include "KeySequence.h"
|
||||||
#include "ServerConfig.h"
|
#include "ServerConfig.h"
|
||||||
|
|
||||||
#include <QButtonGroup>
|
|
||||||
|
|
||||||
ActionDialog::ActionDialog(QWidget *parent, const ServerConfig &config, Hotkey &hotkey, Action &action)
|
ActionDialog::ActionDialog(QWidget *parent, const ServerConfig &config, Hotkey &hotkey, Action &action)
|
||||||
: QDialog(parent, Qt::WindowTitleHint | Qt::WindowSystemMenuHint),
|
: QDialog(parent, Qt::WindowTitleHint | Qt::WindowSystemMenuHint),
|
||||||
ui{std::make_unique<Ui::ActionDialog>()},
|
ui{std::make_unique<Ui::ActionDialog>()},
|
||||||
m_hotkey(hotkey),
|
m_hotkey(hotkey),
|
||||||
m_action(action),
|
m_action(action)
|
||||||
m_buttonGroupType(new QButtonGroup(this))
|
|
||||||
{
|
{
|
||||||
ui->setupUi(this);
|
ui->setupUi(this);
|
||||||
connect(ui->keySequenceWidget, &KeySequenceWidget::keySequenceChanged, this, &ActionDialog::keySequenceChanged);
|
connect(ui->keySequenceWidget, &KeySequenceWidget::keySequenceChanged, this, &ActionDialog::keySequenceChanged);
|
||||||
|
connect(
|
||||||
|
ui->comboActionType, QOverload<int>::of(&QComboBox::currentIndexChanged), this, &ActionDialog::actionTypeChanged
|
||||||
|
);
|
||||||
connect(ui->buttonBox, &QDialogButtonBox::accepted, this, &ActionDialog::accept);
|
connect(ui->buttonBox, &QDialogButtonBox::accepted, this, &ActionDialog::accept);
|
||||||
connect(ui->buttonBox, &QDialogButtonBox::rejected, this, &ActionDialog::reject);
|
connect(ui->buttonBox, &QDialogButtonBox::rejected, this, &ActionDialog::reject);
|
||||||
|
|
||||||
// work around Qt Designer's lack of a QButtonGroup; we need it to get
|
|
||||||
// at the button id of the checked radio button
|
|
||||||
QRadioButton *const typeButtons[] = {
|
|
||||||
ui->m_pRadioPress,
|
|
||||||
ui->m_pRadioRelease,
|
|
||||||
ui->m_pRadioPressAndRelease,
|
|
||||||
ui->m_pRadioSwitchToScreen,
|
|
||||||
ui->m_pRadioSwitchInDirection,
|
|
||||||
ui->m_pRadioLockCursorToScreen,
|
|
||||||
ui->m_pRadioRestartAllConnections
|
|
||||||
};
|
|
||||||
|
|
||||||
for (unsigned int i = 0; i < sizeof(typeButtons) / sizeof(typeButtons[0]); i++)
|
|
||||||
m_buttonGroupType->addButton(typeButtons[i], i);
|
|
||||||
|
|
||||||
ui->keySequenceWidget->setText(m_action.keySequence().toString());
|
ui->keySequenceWidget->setText(m_action.keySequence().toString());
|
||||||
ui->keySequenceWidget->setKeySequence(m_action.keySequence());
|
ui->keySequenceWidget->setKeySequence(m_action.keySequence());
|
||||||
m_buttonGroupType->button(m_action.type())->setChecked(true);
|
|
||||||
ui->m_pComboSwitchInDirection->setCurrentIndex(m_action.switchDirection());
|
ui->m_pComboSwitchInDirection->setCurrentIndex(m_action.switchDirection());
|
||||||
ui->m_pComboLockCursorToScreen->setCurrentIndex(m_action.lockCursorMode());
|
ui->m_pComboLockCursorToScreen->setCurrentIndex(m_action.lockCursorMode());
|
||||||
|
|
||||||
ui->comboTriggerOn->setCurrentIndex(m_action.haveScreens());
|
ui->comboActionType->setCurrentIndex(m_action.type());
|
||||||
|
ui->comboTriggerOn->setCurrentIndex(m_action.activeOnRelease());
|
||||||
|
|
||||||
ui->m_pGroupBoxScreens->setChecked(m_action.haveScreens());
|
ui->m_pGroupBoxScreens->setChecked(m_action.haveScreens());
|
||||||
|
|
||||||
|
|
@ -80,11 +66,12 @@ ActionDialog::ActionDialog(QWidget *parent, const ServerConfig &config, Hotkey &
|
||||||
|
|
||||||
void ActionDialog::accept()
|
void ActionDialog::accept()
|
||||||
{
|
{
|
||||||
if (!ui->keySequenceWidget->valid() && m_buttonGroupType->checkedId() >= 0 && m_buttonGroupType->checkedId() < 3)
|
if (!ui->keySequenceWidget->valid() && ui->comboActionType->currentIndex() >= 0 &&
|
||||||
|
ui->comboActionType->currentIndex() < 3)
|
||||||
return;
|
return;
|
||||||
|
|
||||||
m_action.setKeySequence(ui->keySequenceWidget->keySequence());
|
m_action.setKeySequence(ui->keySequenceWidget->keySequence());
|
||||||
m_action.setType(m_buttonGroupType->checkedId());
|
m_action.setType(ui->comboActionType->currentIndex());
|
||||||
m_action.setHaveScreens(ui->m_pGroupBoxScreens->isChecked());
|
m_action.setHaveScreens(ui->m_pGroupBoxScreens->isChecked());
|
||||||
|
|
||||||
m_action.typeScreenNames().clear();
|
m_action.typeScreenNames().clear();
|
||||||
|
|
@ -97,7 +84,7 @@ void ActionDialog::accept()
|
||||||
m_action.setSwitchDirection(ui->m_pComboSwitchInDirection->currentIndex());
|
m_action.setSwitchDirection(ui->m_pComboSwitchInDirection->currentIndex());
|
||||||
m_action.setLockCursorMode(ui->m_pComboLockCursorToScreen->currentIndex());
|
m_action.setLockCursorMode(ui->m_pComboLockCursorToScreen->currentIndex());
|
||||||
m_action.setActiveOnRelease(ui->comboTriggerOn->currentIndex());
|
m_action.setActiveOnRelease(ui->comboTriggerOn->currentIndex());
|
||||||
m_action.setRestartServer(ui->m_pRadioRestartAllConnections->isChecked());
|
m_action.setRestartServer(ui->comboActionType->currentIndex() == ActionTypes::RestartServer);
|
||||||
|
|
||||||
QDialog::accept();
|
QDialog::accept();
|
||||||
}
|
}
|
||||||
|
|
@ -108,4 +95,18 @@ void ActionDialog::keySequenceChanged()
|
||||||
ui->m_pListScreens->setEnabled(!ui->keySequenceWidget->keySequence().isMouseButton());
|
ui->m_pListScreens->setEnabled(!ui->keySequenceWidget->keySequence().isMouseButton());
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void ActionDialog::actionTypeChanged(int index)
|
||||||
|
{
|
||||||
|
ui->keySequenceWidget->setEnabled(isKeyAction(index));
|
||||||
|
ui->m_pListScreens->setEnabled(isKeyAction(index) && ui->m_pGroupBoxScreens->isChecked());
|
||||||
|
ui->m_pComboSwitchToScreen->setEnabled(index == ActionTypes::SwitchTo);
|
||||||
|
ui->m_pComboSwitchInDirection->setEnabled(index == ActionTypes::SwitchInDirection);
|
||||||
|
ui->m_pComboLockCursorToScreen->setEnabled(index == ActionTypes::ModifyCursorLock);
|
||||||
|
}
|
||||||
|
|
||||||
|
bool ActionDialog::isKeyAction(int index)
|
||||||
|
{
|
||||||
|
return ((index == ActionTypes::PressKey) || (index == ActionTypes::ReleaseKey) || (index == ActionTypes::ToggleKey));
|
||||||
|
}
|
||||||
|
|
||||||
ActionDialog::~ActionDialog() = default;
|
ActionDialog::~ActionDialog() = default;
|
||||||
|
|
|
||||||
|
|
@ -23,7 +23,6 @@
|
||||||
|
|
||||||
class Hotkey;
|
class Hotkey;
|
||||||
class Action;
|
class Action;
|
||||||
class QButtonGroup;
|
|
||||||
class ServerConfig;
|
class ServerConfig;
|
||||||
class KeySequenceWidget;
|
class KeySequenceWidget;
|
||||||
|
|
||||||
|
|
@ -36,6 +35,17 @@ class ActionDialog : public QDialog
|
||||||
Q_OBJECT
|
Q_OBJECT
|
||||||
|
|
||||||
public:
|
public:
|
||||||
|
enum ActionTypes
|
||||||
|
{
|
||||||
|
PressKey,
|
||||||
|
ReleaseKey,
|
||||||
|
ToggleKey,
|
||||||
|
SwitchTo,
|
||||||
|
SwitchInDirection,
|
||||||
|
ModifyCursorLock,
|
||||||
|
RestartServer
|
||||||
|
};
|
||||||
|
|
||||||
ActionDialog(QWidget *parent, const ServerConfig &config, Hotkey &hotkey, Action &action);
|
ActionDialog(QWidget *parent, const ServerConfig &config, Hotkey &hotkey, Action &action);
|
||||||
~ActionDialog() override;
|
~ActionDialog() override;
|
||||||
|
|
||||||
|
|
@ -44,10 +54,10 @@ protected slots:
|
||||||
|
|
||||||
private:
|
private:
|
||||||
void keySequenceChanged();
|
void keySequenceChanged();
|
||||||
|
void actionTypeChanged(int index);
|
||||||
|
bool isKeyAction(int index);
|
||||||
|
|
||||||
std::unique_ptr<Ui::ActionDialog> ui;
|
std::unique_ptr<Ui::ActionDialog> ui;
|
||||||
Hotkey &m_hotkey;
|
Hotkey &m_hotkey;
|
||||||
Action &m_action;
|
Action &m_action;
|
||||||
|
|
||||||
QButtonGroup *m_buttonGroupType;
|
|
||||||
};
|
};
|
||||||
|
|
|
||||||
|
|
@ -15,54 +15,68 @@
|
||||||
</property>
|
</property>
|
||||||
<layout class="QVBoxLayout" name="verticalLayout">
|
<layout class="QVBoxLayout" name="verticalLayout">
|
||||||
<item>
|
<item>
|
||||||
<widget class="QComboBox" name="comboTriggerOn">
|
<layout class="QHBoxLayout" name="horizontalLayout_4">
|
||||||
<item>
|
<item>
|
||||||
<property name="text">
|
<widget class="QComboBox" name="comboTriggerOn">
|
||||||
<string>When the hotkey is pressed</string>
|
<item>
|
||||||
</property>
|
<property name="text">
|
||||||
|
<string>When the hotkey is pressed</string>
|
||||||
|
</property>
|
||||||
|
</item>
|
||||||
|
<item>
|
||||||
|
<property name="text">
|
||||||
|
<string>When the hotkey is released</string>
|
||||||
|
</property>
|
||||||
|
</item>
|
||||||
|
</widget>
|
||||||
</item>
|
</item>
|
||||||
<item>
|
<item>
|
||||||
<property name="text">
|
<widget class="QComboBox" name="comboActionType">
|
||||||
<string>When the hotkey is released</string>
|
<item>
|
||||||
</property>
|
<property name="text">
|
||||||
|
<string>Press key(s)</string>
|
||||||
|
</property>
|
||||||
|
</item>
|
||||||
|
<item>
|
||||||
|
<property name="text">
|
||||||
|
<string>Release key(s)</string>
|
||||||
|
</property>
|
||||||
|
</item>
|
||||||
|
<item>
|
||||||
|
<property name="text">
|
||||||
|
<string>Toggle key(s)</string>
|
||||||
|
</property>
|
||||||
|
</item>
|
||||||
|
<item>
|
||||||
|
<property name="text">
|
||||||
|
<string>Switch to a screen</string>
|
||||||
|
</property>
|
||||||
|
</item>
|
||||||
|
<item>
|
||||||
|
<property name="text">
|
||||||
|
<string>Switch to the screen in a direction</string>
|
||||||
|
</property>
|
||||||
|
</item>
|
||||||
|
<item>
|
||||||
|
<property name="text">
|
||||||
|
<string>Modify the cursor lock</string>
|
||||||
|
</property>
|
||||||
|
</item>
|
||||||
|
<item>
|
||||||
|
<property name="text">
|
||||||
|
<string>Restart the server</string>
|
||||||
|
</property>
|
||||||
|
</item>
|
||||||
|
</widget>
|
||||||
</item>
|
</item>
|
||||||
</widget>
|
</layout>
|
||||||
</item>
|
</item>
|
||||||
<item>
|
<item>
|
||||||
<widget class="QGroupBox" name="m_pGroupType">
|
<widget class="QGroupBox" name="m_pGroupType">
|
||||||
<property name="font">
|
|
||||||
<font>
|
|
||||||
<kerning>true</kerning>
|
|
||||||
</font>
|
|
||||||
</property>
|
|
||||||
<property name="title">
|
<property name="title">
|
||||||
<string>Choose the action to perform</string>
|
<string/>
|
||||||
</property>
|
</property>
|
||||||
<layout class="QVBoxLayout">
|
<layout class="QVBoxLayout">
|
||||||
<item>
|
|
||||||
<widget class="QRadioButton" name="m_pRadioPress">
|
|
||||||
<property name="text">
|
|
||||||
<string>Press a hotkey</string>
|
|
||||||
</property>
|
|
||||||
<property name="checked">
|
|
||||||
<bool>true</bool>
|
|
||||||
</property>
|
|
||||||
</widget>
|
|
||||||
</item>
|
|
||||||
<item>
|
|
||||||
<widget class="QRadioButton" name="m_pRadioRelease">
|
|
||||||
<property name="text">
|
|
||||||
<string>Release a hotkey</string>
|
|
||||||
</property>
|
|
||||||
</widget>
|
|
||||||
</item>
|
|
||||||
<item>
|
|
||||||
<widget class="QRadioButton" name="m_pRadioPressAndRelease">
|
|
||||||
<property name="text">
|
|
||||||
<string>Press and release a hotkey</string>
|
|
||||||
</property>
|
|
||||||
</widget>
|
|
||||||
</item>
|
|
||||||
<item>
|
<item>
|
||||||
<widget class="KeySequenceWidget" name="keySequenceWidget">
|
<widget class="KeySequenceWidget" name="keySequenceWidget">
|
||||||
<property name="sizePolicy">
|
<property name="sizePolicy">
|
||||||
|
|
@ -133,9 +147,9 @@
|
||||||
<item>
|
<item>
|
||||||
<layout class="QHBoxLayout">
|
<layout class="QHBoxLayout">
|
||||||
<item>
|
<item>
|
||||||
<widget class="QRadioButton" name="m_pRadioSwitchToScreen">
|
<widget class="QLabel" name="label">
|
||||||
<property name="text">
|
<property name="text">
|
||||||
<string>Switch to screen</string>
|
<string>Switch to</string>
|
||||||
</property>
|
</property>
|
||||||
</widget>
|
</widget>
|
||||||
</item>
|
</item>
|
||||||
|
|
@ -164,9 +178,9 @@
|
||||||
<item>
|
<item>
|
||||||
<layout class="QHBoxLayout">
|
<layout class="QHBoxLayout">
|
||||||
<item>
|
<item>
|
||||||
<widget class="QRadioButton" name="m_pRadioSwitchInDirection">
|
<widget class="QLabel" name="label_2">
|
||||||
<property name="text">
|
<property name="text">
|
||||||
<string>Switch in direction</string>
|
<string>Direction to move</string>
|
||||||
</property>
|
</property>
|
||||||
</widget>
|
</widget>
|
||||||
</item>
|
</item>
|
||||||
|
|
@ -215,9 +229,9 @@
|
||||||
<item>
|
<item>
|
||||||
<layout class="QHBoxLayout">
|
<layout class="QHBoxLayout">
|
||||||
<item>
|
<item>
|
||||||
<widget class="QRadioButton" name="m_pRadioLockCursorToScreen">
|
<widget class="QLabel" name="label_3">
|
||||||
<property name="text">
|
<property name="text">
|
||||||
<string>Lock cursor to screen</string>
|
<string>Cursor lock will</string>
|
||||||
</property>
|
</property>
|
||||||
</widget>
|
</widget>
|
||||||
</item>
|
</item>
|
||||||
|
|
@ -258,17 +272,6 @@
|
||||||
</item>
|
</item>
|
||||||
</layout>
|
</layout>
|
||||||
</item>
|
</item>
|
||||||
<item>
|
|
||||||
<layout class="QHBoxLayout">
|
|
||||||
<item>
|
|
||||||
<widget class="QRadioButton" name="m_pRadioRestartAllConnections">
|
|
||||||
<property name="text">
|
|
||||||
<string>Restart server</string>
|
|
||||||
</property>
|
|
||||||
</widget>
|
|
||||||
</item>
|
|
||||||
</layout>
|
|
||||||
</item>
|
|
||||||
</layout>
|
</layout>
|
||||||
</widget>
|
</widget>
|
||||||
</item>
|
</item>
|
||||||
|
|
@ -292,166 +295,5 @@
|
||||||
</customwidget>
|
</customwidget>
|
||||||
</customwidgets>
|
</customwidgets>
|
||||||
<resources/>
|
<resources/>
|
||||||
<connections>
|
<connections/>
|
||||||
<connection>
|
|
||||||
<sender>m_pRadioSwitchToScreen</sender>
|
|
||||||
<signal>toggled(bool)</signal>
|
|
||||||
<receiver>m_pComboSwitchToScreen</receiver>
|
|
||||||
<slot>setEnabled(bool)</slot>
|
|
||||||
<hints>
|
|
||||||
<hint type="sourcelabel">
|
|
||||||
<x>148</x>
|
|
||||||
<y>291</y>
|
|
||||||
</hint>
|
|
||||||
<hint type="destinationlabel">
|
|
||||||
<x>350</x>
|
|
||||||
<y>290</y>
|
|
||||||
</hint>
|
|
||||||
</hints>
|
|
||||||
</connection>
|
|
||||||
<connection>
|
|
||||||
<sender>m_pRadioSwitchInDirection</sender>
|
|
||||||
<signal>toggled(bool)</signal>
|
|
||||||
<receiver>m_pComboSwitchInDirection</receiver>
|
|
||||||
<slot>setEnabled(bool)</slot>
|
|
||||||
<hints>
|
|
||||||
<hint type="sourcelabel">
|
|
||||||
<x>158</x>
|
|
||||||
<y>322</y>
|
|
||||||
</hint>
|
|
||||||
<hint type="destinationlabel">
|
|
||||||
<x>350</x>
|
|
||||||
<y>321</y>
|
|
||||||
</hint>
|
|
||||||
</hints>
|
|
||||||
</connection>
|
|
||||||
<connection>
|
|
||||||
<sender>m_pRadioLockCursorToScreen</sender>
|
|
||||||
<signal>toggled(bool)</signal>
|
|
||||||
<receiver>m_pComboLockCursorToScreen</receiver>
|
|
||||||
<slot>setEnabled(bool)</slot>
|
|
||||||
<hints>
|
|
||||||
<hint type="sourcelabel">
|
|
||||||
<x>180</x>
|
|
||||||
<y>353</y>
|
|
||||||
</hint>
|
|
||||||
<hint type="destinationlabel">
|
|
||||||
<x>350</x>
|
|
||||||
<y>352</y>
|
|
||||||
</hint>
|
|
||||||
</hints>
|
|
||||||
</connection>
|
|
||||||
<connection>
|
|
||||||
<sender>m_pRadioPress</sender>
|
|
||||||
<signal>toggled(bool)</signal>
|
|
||||||
<receiver>m_pGroupBoxScreens</receiver>
|
|
||||||
<slot>setEnabled(bool)</slot>
|
|
||||||
<hints>
|
|
||||||
<hint type="sourcelabel">
|
|
||||||
<x>25</x>
|
|
||||||
<y>47</y>
|
|
||||||
</hint>
|
|
||||||
<hint type="destinationlabel">
|
|
||||||
<x>33</x>
|
|
||||||
<y>155</y>
|
|
||||||
</hint>
|
|
||||||
</hints>
|
|
||||||
</connection>
|
|
||||||
<connection>
|
|
||||||
<sender>m_pRadioSwitchToScreen</sender>
|
|
||||||
<signal>toggled(bool)</signal>
|
|
||||||
<receiver>m_pGroupBoxScreens</receiver>
|
|
||||||
<slot>setDisabled(bool)</slot>
|
|
||||||
<hints>
|
|
||||||
<hint type="sourcelabel">
|
|
||||||
<x>48</x>
|
|
||||||
<y>278</y>
|
|
||||||
</hint>
|
|
||||||
<hint type="destinationlabel">
|
|
||||||
<x>98</x>
|
|
||||||
<y>153</y>
|
|
||||||
</hint>
|
|
||||||
</hints>
|
|
||||||
</connection>
|
|
||||||
<connection>
|
|
||||||
<sender>m_pRadioRelease</sender>
|
|
||||||
<signal>toggled(bool)</signal>
|
|
||||||
<receiver>m_pGroupBoxScreens</receiver>
|
|
||||||
<slot>setEnabled(bool)</slot>
|
|
||||||
<hints>
|
|
||||||
<hint type="sourcelabel">
|
|
||||||
<x>264</x>
|
|
||||||
<y>67</y>
|
|
||||||
</hint>
|
|
||||||
<hint type="destinationlabel">
|
|
||||||
<x>241</x>
|
|
||||||
<y>158</y>
|
|
||||||
</hint>
|
|
||||||
</hints>
|
|
||||||
</connection>
|
|
||||||
<connection>
|
|
||||||
<sender>m_pRadioPressAndRelease</sender>
|
|
||||||
<signal>toggled(bool)</signal>
|
|
||||||
<receiver>m_pGroupBoxScreens</receiver>
|
|
||||||
<slot>setEnabled(bool)</slot>
|
|
||||||
<hints>
|
|
||||||
<hint type="sourcelabel">
|
|
||||||
<x>286</x>
|
|
||||||
<y>98</y>
|
|
||||||
</hint>
|
|
||||||
<hint type="destinationlabel">
|
|
||||||
<x>290</x>
|
|
||||||
<y>156</y>
|
|
||||||
</hint>
|
|
||||||
</hints>
|
|
||||||
</connection>
|
|
||||||
<connection>
|
|
||||||
<sender>m_pRadioSwitchInDirection</sender>
|
|
||||||
<signal>toggled(bool)</signal>
|
|
||||||
<receiver>m_pGroupBoxScreens</receiver>
|
|
||||||
<slot>setDisabled(bool)</slot>
|
|
||||||
<hints>
|
|
||||||
<hint type="sourcelabel">
|
|
||||||
<x>38</x>
|
|
||||||
<y>313</y>
|
|
||||||
</hint>
|
|
||||||
<hint type="destinationlabel">
|
|
||||||
<x>64</x>
|
|
||||||
<y>195</y>
|
|
||||||
</hint>
|
|
||||||
</hints>
|
|
||||||
</connection>
|
|
||||||
<connection>
|
|
||||||
<sender>m_pRadioLockCursorToScreen</sender>
|
|
||||||
<signal>toggled(bool)</signal>
|
|
||||||
<receiver>m_pGroupBoxScreens</receiver>
|
|
||||||
<slot>setDisabled(bool)</slot>
|
|
||||||
<hints>
|
|
||||||
<hint type="sourcelabel">
|
|
||||||
<x>48</x>
|
|
||||||
<y>339</y>
|
|
||||||
</hint>
|
|
||||||
<hint type="destinationlabel">
|
|
||||||
<x>79</x>
|
|
||||||
<y>234</y>
|
|
||||||
</hint>
|
|
||||||
</hints>
|
|
||||||
</connection>
|
|
||||||
<connection>
|
|
||||||
<sender>m_pRadioRestartAllConnections</sender>
|
|
||||||
<signal>toggled(bool)</signal>
|
|
||||||
<receiver>m_pGroupBoxScreens</receiver>
|
|
||||||
<slot>setDisabled(bool)</slot>
|
|
||||||
<hints>
|
|
||||||
<hint type="sourcelabel">
|
|
||||||
<x>48</x>
|
|
||||||
<y>339</y>
|
|
||||||
</hint>
|
|
||||||
<hint type="destinationlabel">
|
|
||||||
<x>79</x>
|
|
||||||
<y>234</y>
|
|
||||||
</hint>
|
|
||||||
</hints>
|
|
||||||
</connection>
|
|
||||||
</connections>
|
|
||||||
</ui>
|
</ui>
|
||||||
|
|
|
||||||
Loading…
Reference in a new issue