• Skip to content
  • Skip to link menu
KDE API Reference
  • KDE API Reference
  • kdeutils API Reference
  • KDE Home
  • Contact Us
 

kremotecontrol

  • sources
  • kde-4.12
  • kdeutils
  • kremotecontrol
  • kcmremotecontrol
modedialog.cpp
Go to the documentation of this file.
1 /*************************************************************************
2  * Copyright (C) 2010 by Michael Zanetti <michael_zanetti@gmx.net> *
3  * *
4  * This program is free software; you can redistribute it and/or *
5  * modify it under the terms of the GNU General Public License as *
6  * published by the Free Software Foundation; either version 2 of *
7  * the License or (at your option) version 3 or any later version *
8  * accepted by the membership of KDE e.V. (or its successor approved *
9  * by the membership of KDE e.V.), which shall act as a proxy *
10  * defined in Section 14 of version 3 of the license. *
11  * *
12  * This program is distributed in the hope that it will be useful, *
13  * but WITHOUT ANY WARRANTY; without even the implied warranty of *
14  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the *
15  * GNU General Public License for more details. *
16  * *
17  * You should have received a copy of the GNU General Public License *
18  * along with this program. If not, see <http://www.gnu.org/licenses/>. *
19  *************************************************************************/
20 
21 
27 #include "modedialog.h"
28 #include "mode.h"
29 #include "dbusinterface.h"
30 
31 #include <kdebug.h>
32 #include <kmessagebox.h>
33 #include "model.h"
34 
35 ModeDialog::ModeDialog(Remote *remote, Mode *mode, QWidget *parent): KDialog(parent), m_remote(remote), m_mode(mode) {
36  QWidget *widget = new QWidget(this);
37  ui.setupUi(widget);
38  setMainWidget(widget);
39  setButtons( Ok | Cancel);
40  setDefaultButton(Ok);
41 
42  connect(ui.leName, SIGNAL(textChanged(QString)), this, SLOT(checkForComplete()));
43  connect(ui.cbButtonForward, SIGNAL(currentIndexChanged(int)), this, SLOT(forwardButtonChanged()));
44  connect(ui.cbButtonBackward, SIGNAL(currentIndexChanged(int)), this, SLOT(backwardButtonChanged()));
45  connect(ui.gbModeCycle, SIGNAL(clicked(bool)), this, SLOT(modeHandlerChanged()));
46 
47  ui.cbButtons->addItem(i18n("No button"), QString());
48  foreach(const QString &button, remote->availableModeSwitchButtons(mode)){
49  ui.cbButtons->addItem(RemoteControlButton(remote->name(), button).description(), button);
50  }
51 
52  if(m_mode){
53  ui.leName->setText(m_mode->name());
54  ui.ibIcon->setIcon(m_mode->iconName());
55  ui.cbButtons->setCurrentIndex(ui.cbButtons->findData(m_mode->button()));
56  ui.cbSetDefault->setChecked(remote->defaultMode() == mode);
57  if(m_mode == remote->masterMode()){
58  // Hide Non-Master-Mode options
59  ui.cbButtons->setVisible(false);
60  ui.lButton->setVisible(false);
61  ui.leName->setEnabled(false);
62 
63  // Fill in Cycle mode buttons
64  ui.cbButtonBackward->addButtons(remote->availableModeCycleButtons());
65  ui.cbButtonForward->addButtons(remote->availableModeCycleButtons());
66 
67  // Load currently configured buttons
68  ui.cbButtonBackward->setCurrentIndex(ui.cbButtonBackward->findData(remote->previousModeButton()));
69  ui.cbButtonForward->setCurrentIndex(ui.cbButtonForward->findData(remote->nextModeButton()));
70 
71  if(remote->modeChangeMode() == Remote::Cycle){
72  ui.gbModeCycle->setChecked(true);
73  } else {
74  ui.gbModeCycle->setChecked(false);
75  }
76  } else {
77  ui.gbModeCycle->setVisible(false);
78  }
79  } else {
80  ui.ibIcon->setIcon(QLatin1String( "infrared-remote" ));
81  ui.gbModeCycle->setVisible(false);
82  }
83 
84  checkForComplete();
85 
86  // Pause remote to make use of button presses here
87  DBusInterface::getInstance()->ignoreButtonEvents(remote->name());
88  connect(new RemoteControl(remote->name()), SIGNAL(buttonPressed(RemoteControlButton)), SLOT(buttonPressed(RemoteControlButton)));
89 }
90 
91 ModeDialog::~ModeDialog() {
92 }
93 
94 void ModeDialog::checkForComplete() {
95  if(ui.leName->text().isEmpty()){
96  enableButtonOk(false);
97  return;
98  }
99  foreach(const Mode *mode, m_remote->allModes()){
100  if(m_mode == mode){
101  continue; // Don't check the current Mode during Edit
102  }
103  if(mode->name() == ui.leName->text()){
104  enableButtonOk(false);
105  return;
106  }
107  }
108  enableButtonOk(true);
109 }
110 
111 void ModeDialog::slotButtonClicked(int button) {
112  if(button == KDialog::Ok){
113  if(!m_mode){
114  m_mode = new Mode();
115  m_remote->addMode(m_mode);
116  }
117  m_mode->setName(ui.leName->text());
118  m_mode->setIconName(ui.ibIcon->icon());
119  m_mode->setButton(ui.cbButtons->itemData(ui.cbButtons->currentIndex()).toString());
120  if(ui.cbSetDefault->isChecked()){
121  m_remote->setDefaultMode(m_mode);
122  } else if(m_remote->defaultMode() == m_mode){
123  m_remote->setDefaultMode(m_remote->masterMode());
124  }
125  if(m_mode == m_remote->masterMode()){
126  m_remote->setNextModeButton(ui.cbButtonForward->itemData(ui.cbButtonForward->currentIndex()).toString());
127  m_remote->setPreviousModeButton(ui.cbButtonBackward->itemData(ui.cbButtonBackward->currentIndex()).toString());
128  }
129  }
130  DBusInterface::getInstance()->considerButtonEvents(m_remote->name());
131  KDialog::slotButtonClicked(button);
132 }
133 
134 void ModeDialog::forwardButtonChanged() {
135  disconnect(ui.cbButtonBackward, SIGNAL(currentIndexChanged(int)), this, SLOT(backwardButtonChanged()));
136  QString forwardButton = ui.cbButtonForward->itemData(ui.cbButtonForward->currentIndex()).toString();
137  ui.cbButtonBackward->hideButton(forwardButton);
138  connect(ui.cbButtonBackward, SIGNAL(currentIndexChanged(int)), this, SLOT(backwardButtonChanged()));
139 }
140 
141 void ModeDialog::backwardButtonChanged() {
142  disconnect(ui.cbButtonForward, SIGNAL(currentIndexChanged(int)), this, SLOT(forwardButtonChanged()));
143  QString backwardButton = ui.cbButtonBackward->itemData(ui.cbButtonBackward->currentIndex()).toString();
144  ui.cbButtonForward->hideButton(backwardButton);
145  connect(ui.cbButtonForward, SIGNAL(currentIndexChanged(int)), this, SLOT(forwardButtonChanged()));
146 }
147 
148 void ModeDialog::buttonPressed(const RemoteControlButton& button) {
149  kDebug() << "button event received";
150  if(button.remoteName() == m_remote->name()) {
151  if(m_mode != m_remote->masterMode()){
152  ui.cbButtons->setCurrentIndex(ui.cbButtons->findText(button.name()));
153  }
154  }
155 }
156 
157 void ModeDialog::modeHandlerChanged() {
158  Remote::ModeChangeMode modeChangeMode = ui.gbModeCycle->isChecked() ? Remote::Cycle : Remote::Group;
159  if(m_remote->modeChangeMode() != modeChangeMode){
160  if(modeChangeMode == Remote::Cycle){
161  if(KMessageBox::questionYesNo(this, i18n("Using the cycle function will remove all duplicate button assignments from your modes. Are you sure that you would like to proceed?"), i18n("Change mode switch behavior")) == KMessageBox::Yes){
162  m_remote->setModeChangeMode(modeChangeMode);
163  } else {
164  ui.gbModeCycle->setChecked(false);
165  }
166  } else {
167  m_remote->setModeChangeMode(modeChangeMode);
168  }
169  }
170 }
171 
172 ButtonComboBox::ButtonComboBox(QWidget* parent): KComboBox(parent) {
173  addItem(i18n("No Button"), QString());
174 }
175 
176 void ButtonComboBox::addButtons(const QStringList &buttonList){
177  kDebug() << "adding buttons";
178  foreach(const QString &button, buttonList){
179  kDebug() << "adding button" << button;
180  addItem(button, button);
181  }
182 }
183 
184 void ButtonComboBox::hideButton(const QString& button) {
185  kDebug() << "hiding button" << button;
186  if(!m_hiddenButton.isEmpty()){
187  kDebug() << "inserting old hidden button" << m_hiddenButton;
188  insertItem(m_hiddenIndex, m_hiddenButton);
189  }
190  if(!button.isEmpty()){
191  m_hiddenIndex = findData(button);
192  m_hiddenButton = itemData(m_hiddenIndex).toString();
193  removeItem(m_hiddenIndex);
194  }
195 }
196 
197 #include "modedialog.moc"
Mode::setButton
void setButton(const QString &button)
Definition: mode.cpp:56
Remote::setNextModeButton
void setNextModeButton(const QString &button)
Definition: remote.cpp:400
Remote::name
QString name() const
Definition: remote.cpp:247
dbusinterface.h
ButtonComboBox::addButtons
void addButtons(const QStringList &buttonList)
Definition: modedialog.cpp:176
Remote::ModeChangeMode
ModeChangeMode
Definition: remote.h:39
RemoteControlButton::remoteName
QString remoteName() const
Retrieves the name of the RemoteControl this button comes from.
Definition: remotecontrolbutton.cpp:305
QWidget
Mode
Definition: mode.h:31
DBusInterface::considerButtonEvents
void considerButtonEvents(const QString &remoteName)
Definition: dbusinterface.cpp:270
DBusInterface::getInstance
static DBusInterface * getInstance()
Definition: dbusinterface.cpp:50
model.h
ButtonComboBox::hideButton
void hideButton(const QString &button)
Definition: modedialog.cpp:184
KDialog
Remote::allModes
QVector< Mode * > allModes() const
Definition: remote.cpp:269
modedialog.h
Remote::Cycle
Definition: remote.h:39
Mode::button
QString button() const
Definition: mode.cpp:44
Remote::modeChangeMode
ModeChangeMode modeChangeMode() const
Definition: remote.cpp:363
Mode::setIconName
void setIconName(const QString &iconName)
Definition: mode.cpp:52
RemoteControl
Definition: remotecontrol.h:35
RemoteControlButton::name
QString name() const
Retrieves the name of the Button.
Definition: remotecontrolbutton.cpp:315
Remote::setPreviousModeButton
void setPreviousModeButton(const QString &button)
Definition: remote.cpp:409
ButtonComboBox::ButtonComboBox
ButtonComboBox(QWidget *parent=0)
Definition: modedialog.cpp:172
ModeDialog::~ModeDialog
~ModeDialog()
Definition: modedialog.cpp:91
Mode::setName
void setName(const QString &name)
Definition: mode.cpp:48
Remote::previousModeButton
QString previousModeButton() const
Definition: remote.cpp:405
Remote::nextModeButton
QString nextModeButton() const
Definition: remote.cpp:396
Remote::addMode
void addMode(Mode *mode)
Add the given Mode to this Remote.
Definition: remote.cpp:273
KComboBox
Remote::masterMode
Mode * masterMode() const
Definition: remote.cpp:300
Remote::setDefaultMode
void setDefaultMode(Mode *mode)
Definition: remote.cpp:317
Remote::defaultMode
Mode * defaultMode() const
Definition: remote.cpp:313
DBusInterface::ignoreButtonEvents
void ignoreButtonEvents(const QString &remoteName)
Definition: dbusinterface.cpp:280
mode.h
Remote::setModeChangeMode
void setModeChangeMode(ModeChangeMode modeChangeMode)
Definition: remote.cpp:367
Remote::availableModeSwitchButtons
QStringList availableModeSwitchButtons(const Mode *mode=0) const
Get buttons available for this mode (Free buttons + the current button for this mode) ...
Definition: remote.cpp:377
Mode::name
QString name() const
Definition: mode.cpp:36
Remote::Group
Definition: remote.h:39
RemoteControlButton
Definition: remotecontrolbutton.h:30
Remote
Definition: remote.h:32
ModeDialog::ModeDialog
ModeDialog(Remote *remote, Mode *mode=0, QWidget *parent=0)
Creates a ModeDialog for the given Remote.
Definition: modedialog.cpp:35
Mode::iconName
QString iconName() const
Definition: mode.cpp:40
Remote::availableModeCycleButtons
QStringList availableModeCycleButtons() const
Get buttons available for switching to the next or previous mode (Free buttons + the current nextMode...
Definition: remote.cpp:385
This file is part of the KDE documentation.
Documentation copyright © 1996-2014 The KDE developers.
Generated on Tue Oct 14 2014 23:07:43 by doxygen 1.8.7 written by Dimitri van Heesch, © 1997-2006

KDE's Doxygen guidelines are available online.

kremotecontrol

Skip menu "kremotecontrol"
  • Main Page
  • Namespace List
  • Namespace Members
  • Alphabetical List
  • Class List
  • Class Hierarchy
  • Class Members
  • File List
  • File Members

kdeutils API Reference

Skip menu "kdeutils API Reference"
  • ark
  • filelight
  • kcalc
  • kcharselect
  • kdf
  • kfloppy
  • kgpg
  • kremotecontrol
  • ktimer
  • kwallet
  • superkaramba
  • sweeper

Search



Report problems with this website to our bug tracking system.
Contact the specific authors with questions and comments about the page contents.

KDE® and the K Desktop Environment® logo are registered trademarks of KDE e.V. | Legal