92 lines
3.0 KiB
C++
92 lines
3.0 KiB
C++
#include "ActionDialog.h"
|
|
|
|
#include "Hotkey.h"
|
|
#include "Action.h"
|
|
#include "ServerConfig.h"
|
|
#include "KeySequence.h"
|
|
|
|
#include <QtCore>
|
|
#include <QtGui>
|
|
|
|
ActionDialog::ActionDialog(QWidget* parent, ServerConfig& config, Hotkey& hotkey, Action& action) :
|
|
QDialog(parent, Qt::WindowTitleHint | Qt::WindowSystemMenuHint),
|
|
Ui::ActionDialogBase(),
|
|
m_ServerConfig(config),
|
|
m_Hotkey(hotkey),
|
|
m_Action(action),
|
|
m_pButtonGroupType(new QButtonGroup(this))
|
|
{
|
|
setupUi(this);
|
|
|
|
// 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[] = { m_pRadioPress, m_pRadioRelease, m_pRadioPressAndRelease, m_pRadioSwitchToScreen, m_pRadioSwitchInDirection, m_pRadioLockCursorToScreen };
|
|
|
|
for (unsigned int i = 0; i < sizeof(typeButtons) / sizeof(typeButtons[0]); i++)
|
|
m_pButtonGroupType->addButton(typeButtons[i], i);
|
|
|
|
m_pKeySequenceWidgetHotkey->setText(m_Action.keySequence().toString());
|
|
m_pKeySequenceWidgetHotkey->setKeySequence(m_Action.keySequence());
|
|
m_pButtonGroupType->button(m_Action.type())->setChecked(true);
|
|
m_pComboSwitchInDirection->setCurrentIndex(m_Action.switchDirection());
|
|
m_pComboLockCursorToScreen->setCurrentIndex(m_Action.lockCursorMode());
|
|
|
|
if (m_Action.activeOnRelease())
|
|
m_pRadioHotkeyReleased->setChecked(true);
|
|
else
|
|
m_pRadioHotkeyPressed->setChecked(true);
|
|
|
|
m_pGroupBoxScreens->setChecked(m_Action.haveScreens());
|
|
|
|
int idx = 0;
|
|
foreach(const Screen& screen, serverConfig().screens())
|
|
if (!screen.isNull())
|
|
{
|
|
QListWidgetItem *pListItem = new QListWidgetItem(screen.name());
|
|
m_pListScreens->addItem(pListItem);
|
|
if (m_Action.typeScreenNames().indexOf(screen.name()) != -1)
|
|
m_pListScreens->setCurrentItem(pListItem);
|
|
|
|
m_pComboSwitchToScreen->addItem(screen.name());
|
|
if (screen.name() == m_Action.switchScreenName())
|
|
m_pComboSwitchToScreen->setCurrentIndex(idx);
|
|
|
|
idx++;
|
|
}
|
|
}
|
|
|
|
void ActionDialog::accept()
|
|
{
|
|
if (!sequenceWidget()->valid() && m_pButtonGroupType->checkedId() >= 0 && m_pButtonGroupType->checkedId() < 3)
|
|
return;
|
|
|
|
m_Action.setKeySequence(sequenceWidget()->keySequence());
|
|
m_Action.setType(m_pButtonGroupType->checkedId());
|
|
m_Action.setHaveScreens(m_pGroupBoxScreens->isChecked());
|
|
|
|
m_Action.typeScreenNames().clear();
|
|
foreach(const QListWidgetItem* pItem, m_pListScreens->selectedItems())
|
|
m_Action.typeScreenNames().append(pItem->text());
|
|
|
|
m_Action.setSwitchScreenName(m_pComboSwitchToScreen->currentText());
|
|
m_Action.setSwitchDirection(m_pComboSwitchInDirection->currentIndex());
|
|
m_Action.setLockCursorMode(m_pComboLockCursorToScreen->currentIndex());
|
|
m_Action.setActiveOnRelease(m_pRadioHotkeyReleased->isChecked());
|
|
|
|
QDialog::accept();
|
|
}
|
|
|
|
void ActionDialog::on_m_pKeySequenceWidgetHotkey_keySequenceChanged()
|
|
{
|
|
if (sequenceWidget()->keySequence().isMouseButton())
|
|
{
|
|
m_pGroupBoxScreens->setEnabled(false);
|
|
m_pListScreens->setEnabled(false);
|
|
}
|
|
else
|
|
{
|
|
m_pGroupBoxScreens->setEnabled(true);
|
|
m_pListScreens->setEnabled(true);
|
|
}
|
|
}
|