summaryrefslogtreecommitdiff
path: root/src/frontend/keychooser/ckeychooserwidget.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'src/frontend/keychooser/ckeychooserwidget.cpp')
-rw-r--r--src/frontend/keychooser/ckeychooserwidget.cpp510
1 files changed, 234 insertions, 276 deletions
diff --git a/src/frontend/keychooser/ckeychooserwidget.cpp b/src/frontend/keychooser/ckeychooserwidget.cpp
index d3e1a55..88b7ed7 100644
--- a/src/frontend/keychooser/ckeychooserwidget.cpp
+++ b/src/frontend/keychooser/ckeychooserwidget.cpp
@@ -22,345 +22,303 @@
#include <QLineEdit>
#include <QDebug>
-class BtKeyLineEdit : public QLineEdit
-{
-public:
- BtKeyLineEdit(QWidget* parent)
- : QLineEdit(parent)
- {
- }
-protected:
- void focusInEvent(QFocusEvent* event)
- {
- Qt::FocusReason reason = event->reason();
- if (reason == Qt::OtherFocusReason)
- {
- selectAll();
- }
- QWidget::focusInEvent(event);
- }
+class BtKeyLineEdit : public QLineEdit {
+ public:
+ BtKeyLineEdit(QWidget* parent)
+ : QLineEdit(parent) {
+ }
+ protected:
+ void focusInEvent(QFocusEvent* event) {
+ Qt::FocusReason reason = event->reason();
+ if (reason == Qt::OtherFocusReason) {
+ selectAll();
+ }
+ QWidget::focusInEvent(event);
+ }
};
CKCComboBox::CKCComboBox()
-: QComboBox()
-{
- setFocusPolicy(Qt::WheelFocus);
- setLineEdit(new BtKeyLineEdit(this));
- if (lineEdit()) {
- installEventFilter( lineEdit() );
- }
+ : QComboBox() {
+ setFocusPolicy(Qt::WheelFocus);
+ setLineEdit(new BtKeyLineEdit(this));
+ if (lineEdit()) {
+ installEventFilter( lineEdit() );
+ }
}
/** Reimplementation. */
-bool CKCComboBox::eventFilter( QObject *o, QEvent *e )
-{
- if (e->type() == QEvent::FocusOut)
- {
- QFocusEvent* f = static_cast<QFocusEvent*>(e);
-
- if (o == lineEdit() && f->reason() == Qt::TabFocusReason)
- {
- int index = findText(currentText());
- if (index == -1) {
- index = 0;// return 0 if not found
- }
- setCurrentIndex( index );
- emit focusOut( index );
-
- return false;
- }
- else if (f->reason() == Qt::PopupFocusReason)
- {
- return false;
- }
- else if (f->reason() == Qt::ActiveWindowFocusReason)
- {
- emit activated(currentText());
- return false;
- }
- else if (f->reason() == Qt::MouseFocusReason)
- {
- emit activated(currentText());
- return false;
- }
- else if (o == this)
- {
- emit activated(currentText());
- return false;
- }
- }
-
- return QComboBox::eventFilter(o,e);
+bool CKCComboBox::eventFilter( QObject *o, QEvent *e ) {
+ if (e->type() == QEvent::FocusOut) {
+ QFocusEvent* f = static_cast<QFocusEvent*>(e);
+
+ if (o == lineEdit() && f->reason() == Qt::TabFocusReason) {
+ int index = findText(currentText());
+ if (index == -1) {
+ index = 0;// return 0 if not found
+ }
+ setCurrentIndex( index );
+ emit focusOut( index );
+
+ return false;
+ }
+ else if (f->reason() == Qt::PopupFocusReason) {
+ return false;
+ }
+ else if (f->reason() == Qt::ActiveWindowFocusReason) {
+ emit activated(currentText());
+ return false;
+ }
+ else if (f->reason() == Qt::MouseFocusReason) {
+ emit activated(currentText());
+ return false;
+ }
+ else if (o == this) {
+ emit activated(currentText());
+ return false;
+ }
+ }
+
+ return QComboBox::eventFilter(o, e);
}
/** Scrolls in the list if the wheel of the mouse was used. */
-void CKCComboBox::wheelEvent( QWheelEvent* e )
-{
- return QComboBox::wheelEvent(e);
-
- const signed int change = (int)((float)e->delta()/(float)120);
- int current = currentIndex();
-
- if ((current+change >= 0) && (current+change<count()) )
- {
- setCurrentIndex(current+change);
- e->accept();
- emit activated( currentIndex() );
- }
- else {
- e->ignore();
- }
+void CKCComboBox::wheelEvent( QWheelEvent* e ) {
+ return QComboBox::wheelEvent(e);
+
+ const signed int change = (int)((float)e->delta() / (float)120);
+ int current = currentIndex();
+
+ if ((current + change >= 0) && (current + change < count()) ) {
+ setCurrentIndex(current + change);
+ e->accept();
+ emit activated( currentIndex() );
+ }
+ else {
+ e->ignore();
+ }
}
//**********************************************************************************/
-CKeyChooserWidget::CKeyChooserWidget(int count, const bool useNextPrevSignals, QWidget *parent ) : QWidget(parent)
-{
- m_useNextPrevSignals = useNextPrevSignals;
+CKeyChooserWidget::CKeyChooserWidget(int count, const bool useNextPrevSignals, QWidget *parent ) : QWidget(parent) {
+ m_useNextPrevSignals = useNextPrevSignals;
- for (int index=1; index <= count; index++)
- {
- m_list.append( QString::number(index) );
- }
- init();
- reset(m_list,0,false);
+ for (int index = 1; index <= count; index++) {
+ m_list.append( QString::number(index) );
+ }
+ init();
+ reset(m_list, 0, false);
}
-CKeyChooserWidget::CKeyChooserWidget(QStringList *list, const bool useNextPrevSignals, QWidget *parent ) : QWidget(parent)
-{
- m_useNextPrevSignals = useNextPrevSignals;
-
- if (list)
- {
- m_list = *list; //deep copy the items of list
- }
- else
- {
- m_list.clear();
- }
-
- init();
- reset(m_list,0,false);
+CKeyChooserWidget::CKeyChooserWidget(QStringList *list, const bool useNextPrevSignals, QWidget *parent ) : QWidget(parent) {
+ m_useNextPrevSignals = useNextPrevSignals;
+
+ if (list) {
+ m_list = *list; //deep copy the items of list
+ }
+ else {
+ m_list.clear();
+ }
+
+ init();
+ reset(m_list, 0, false);
}
-void CKeyChooserWidget::reset(const int count, int index, bool do_emit)
-{
- //This prevents the widget from resetting during application load, which
- //produces undesirable behavior.
- //if (!updatesEnabled())
- // return;
+void CKeyChooserWidget::reset(const int count, int index, bool do_emit) {
+ //This prevents the widget from resetting during application load, which
+ //produces undesirable behavior.
+ //if (!updatesEnabled())
+ // return;
- m_list.clear();
- for (int i=1; i <= count; i++)
- { //TODO: CHECK
- m_list.append( QString::number(i) );
- }
+ m_list.clear();
+ for (int i = 1; i <= count; i++) { //TODO: CHECK
+ m_list.append( QString::number(i) );
+ }
- reset(&m_list,index,do_emit);
+ reset(&m_list, index, do_emit);
}
-void CKeyChooserWidget::reset(QStringList& list, int index, bool do_emit)
-{
- //This prevents the widget from resetting during application load, which
- //produces undesirable behavior.
- //if (!updatesEnabled())
- // return;
+void CKeyChooserWidget::reset(QStringList& list, int index, bool do_emit) {
+ //This prevents the widget from resetting during application load, which
+ //produces undesirable behavior.
+ //if (!updatesEnabled())
+ // return;
- m_list = list;
- reset(&m_list,index,do_emit);
+ m_list = list;
+ reset(&m_list, index, do_emit);
}
-void CKeyChooserWidget::reset(QStringList *list, int index, bool do_emit)
-{
- //if (isResetting || !updatesEnabled())
- if (isResetting)
- return;
-
- // qWarning("starting insert");
- isResetting = true;
-
- oldKey = QString::null;
-
- // m_comboBox->setUpdatesEnabled(false);
- //DON'T REMOVE THE HIDE: Otherwise QComboBox's sizeHint() function won't work properly
- m_comboBox->hide();
- m_comboBox->clear();
- if (list)
- {
- m_comboBox->insertItems(-1, *list);
- }
-
- if (!list || (list && !list->count())) { //nothing in the combobox
- setEnabled(false);
- }
- else if (!isEnabled())
- { //was disabled
- setEnabled(true);
- }
-
- if (list->count())
- {
- m_comboBox->setCurrentIndex(index);
- }
- if (do_emit) {
- emit changed(m_comboBox->currentIndex());
- }
-
- const QSize dummySize = m_comboBox->sizeHint(); //without this function call the combo box won't be properly sized!
- //DON'T REMOVE OR MOVE THE show()! Otherwise QComboBox's sizeHint() function won't work properly!
- m_comboBox->show();
-
- // m_comboBox->setFont( m_comboBox->font() );
- // m_comboBox->setUpdatesEnabled(true);
-
- isResetting = false;
- // qWarning("inserted");
+void CKeyChooserWidget::reset(QStringList *list, int index, bool do_emit) {
+ //if (isResetting || !updatesEnabled())
+ if (isResetting)
+ return;
+
+ // qWarning("starting insert");
+ isResetting = true;
+
+ oldKey = QString::null;
+
+ // m_comboBox->setUpdatesEnabled(false);
+ //DON'T REMOVE THE HIDE: Otherwise QComboBox's sizeHint() function won't work properly
+ m_comboBox->hide();
+ m_comboBox->clear();
+ if (list) {
+ m_comboBox->insertItems(-1, *list);
+ }
+
+ if (!list || (list && !list->count())) { //nothing in the combobox
+ setEnabled(false);
+ }
+ else if (!isEnabled()) { //was disabled
+ setEnabled(true);
+ }
+
+ if (list->count()) {
+ m_comboBox->setCurrentIndex(index);
+ }
+ if (do_emit) {
+ emit changed(m_comboBox->currentIndex());
+ }
+
+ const QSize dummySize = m_comboBox->sizeHint(); //without this function call the combo box won't be properly sized!
+ //DON'T REMOVE OR MOVE THE show()! Otherwise QComboBox's sizeHint() function won't work properly!
+ m_comboBox->show();
+
+ // m_comboBox->setFont( m_comboBox->font() );
+ // m_comboBox->setUpdatesEnabled(true);
+
+ isResetting = false;
+ // qWarning("inserted");
}
/** Initializes this widget. We need this function because we have more than one constructor. */
-void CKeyChooserWidget::init()
-{
- qDebug("CKeyChooserWidget::init");
- oldKey = QString::null;
+void CKeyChooserWidget::init() {
+ qDebug("CKeyChooserWidget::init");
+ oldKey = QString::null;
- setFocusPolicy(Qt::WheelFocus);
+ setFocusPolicy(Qt::WheelFocus);
- m_comboBox = new CKCComboBox();
- setFocusProxy(m_comboBox);
- m_comboBox->setAutoCompletion( true );
- m_comboBox->setEditable(true);
- m_comboBox->setInsertPolicy(QComboBox::NoInsert);
- m_comboBox->setFocusPolicy(Qt::WheelFocus);
+ m_comboBox = new CKCComboBox();
+ setFocusProxy(m_comboBox);
+ m_comboBox->setAutoCompletion( true );
+ m_comboBox->setEditable(true);
+ m_comboBox->setInsertPolicy(QComboBox::NoInsert);
+ m_comboBox->setFocusPolicy(Qt::WheelFocus);
- m_mainLayout = new QHBoxLayout( this );
- m_mainLayout->setSpacing(0);
- m_mainLayout->setContentsMargins(0,0,0,0);
- m_mainLayout->addWidget(m_comboBox);
+ m_mainLayout = new QHBoxLayout( this );
+ m_mainLayout->setSpacing(0);
+ m_mainLayout->setContentsMargins(0, 0, 0, 0);
+ m_mainLayout->addWidget(m_comboBox);
- m_scroller = new CScrollerWidgetSet(this);
+ m_scroller = new CScrollerWidgetSet(this);
- m_mainLayout->addWidget( m_scroller );
- m_mainLayout->addSpacing(0);
+ m_mainLayout->addWidget( m_scroller );
+ m_mainLayout->addSpacing(0);
- setTabOrder(m_comboBox, 0);
- setFocusProxy(m_comboBox);
+ setTabOrder(m_comboBox, 0);
+ setFocusProxy(m_comboBox);
- connect(m_scroller, SIGNAL(scroller_pressed()), SLOT(lock()));
- connect(m_scroller, SIGNAL(scroller_released()), SLOT(unlock()));
- connect(m_scroller, SIGNAL(change(int)), SLOT(changeCombo(int)) );
+ connect(m_scroller, SIGNAL(scroller_pressed()), SLOT(lock()));
+ connect(m_scroller, SIGNAL(scroller_released()), SLOT(unlock()));
+ connect(m_scroller, SIGNAL(change(int)), SLOT(changeCombo(int)) );
- connect(m_comboBox, SIGNAL(activated(int)), SLOT(slotComboChanged(int)));
- // connect(m_comboBox, SIGNAL(activated(const QString&)), SLOT(slotReturnPressed(const QString&)));
- connect(m_comboBox->lineEdit(), SIGNAL(returnPressed()), SLOT(slotReturnPressed()));
- connect(m_comboBox, SIGNAL(focusOut(int)), SIGNAL(focusOut(int)));
+ connect(m_comboBox, SIGNAL(activated(int)), SLOT(slotComboChanged(int)));
+ // connect(m_comboBox, SIGNAL(activated(const QString&)), SLOT(slotReturnPressed(const QString&)));
+ connect(m_comboBox->lineEdit(), SIGNAL(returnPressed()), SLOT(slotReturnPressed()));
+ connect(m_comboBox, SIGNAL(focusOut(int)), SIGNAL(focusOut(int)));
- updatelock = false;
- isResetting = false;
+ updatelock = false;
+ isResetting = false;
}
/** Is called when the return key was presed in the combobox. */
-void CKeyChooserWidget::slotReturnPressed( /*const QString& text*/)
-{
- Q_ASSERT(comboBox()->lineEdit());
- qDebug("return pressed");
-
- QString text = comboBox()->lineEdit()->text();
- for (int index = 0; index < comboBox()->count(); ++index)
- {
- if (comboBox()->itemText(index) == text)
- {
+void CKeyChooserWidget::slotReturnPressed( /*const QString& text*/) {
+ Q_ASSERT(comboBox()->lineEdit());
+ qDebug("return pressed");
+
+ QString text = comboBox()->lineEdit()->text();
+ for (int index = 0; index < comboBox()->count(); ++index) {
+ if (comboBox()->itemText(index) == text) {
// emit changed(index);
- emit focusOut(index); // a workaround because focusOut is not checked, the slot connected to changed to check
- break;
- }
- }
+ emit focusOut(index); // a workaround because focusOut is not checked, the slot connected to changed to check
+ break;
+ }
+ }
}
/** Is called when the current item of the combo box was changed. */
-void CKeyChooserWidget::slotComboChanged(int index)
-{
- qDebug("CKeyChooserWidget::slotComboChanged(int index)");
- if (!updatesEnabled())
- {
- return;
- }
+void CKeyChooserWidget::slotComboChanged(int index) {
+ qDebug("CKeyChooserWidget::slotComboChanged(int index)");
+ if (!updatesEnabled()) {
+ return;
+ }
- setUpdatesEnabled(false);
+ setUpdatesEnabled(false);
- const QString key = comboBox()->itemText( index );
- if (oldKey.isNull() || (oldKey != key))
- {
- emit changed(index);
- }
+ const QString key = comboBox()->itemText( index );
+ if (oldKey.isNull() || (oldKey != key)) {
+ emit changed(index);
+ }
- oldKey = key;
+ oldKey = key;
- setUpdatesEnabled(true);
+ setUpdatesEnabled(true);
}
/** Sets the tooltips for the given entries using the parameters as text. */
-void CKeyChooserWidget::setToolTips( const QString comboTip, const QString nextEntryTip, const QString scrollButtonTip, const QString previousEntryTip)
-{
- comboBox()->setToolTip(comboTip);
- m_scroller->setToolTips(nextEntryTip, scrollButtonTip, previousEntryTip);
+void CKeyChooserWidget::setToolTips( const QString comboTip, const QString nextEntryTip, const QString scrollButtonTip, const QString previousEntryTip) {
+ comboBox()->setToolTip(comboTip);
+ m_scroller->setToolTips(nextEntryTip, scrollButtonTip, previousEntryTip);
}
/** Sets the current item to the one with the given text */
-bool CKeyChooserWidget::setItem( const QString item )
-{
- bool ret = false;
- const int count = comboBox()->count();
- for (int i = 0; i < count; ++i)
- {
- if (comboBox()->itemText(i) == item)
- {
- comboBox()->setCurrentIndex(i);
- ret = true;
- break;
- }
- }
- if (!ret)
- comboBox()->setCurrentIndex(-1);
- return ret;
+bool CKeyChooserWidget::setItem( const QString item ) {
+ bool ret = false;
+ const int count = comboBox()->count();
+ for (int i = 0; i < count; ++i) {
+ if (comboBox()->itemText(i) == item) {
+ comboBox()->setCurrentIndex(i);
+ ret = true;
+ break;
+ }
+ }
+ if (!ret)
+ comboBox()->setCurrentIndex(-1);
+ return ret;
}
/* Handlers for the various scroller widgetset. */
-void CKeyChooserWidget::lock()
-{
- updatelock = true;
- comboBox()->setEditable(false);
- oldKey = comboBox()->currentText();
+void CKeyChooserWidget::lock() {
+ updatelock = true;
+ comboBox()->setEditable(false);
+ oldKey = comboBox()->currentText();
}
-void CKeyChooserWidget::unlock()
-{
- updatelock = false;
- comboBox()->setEditable(true);
- comboBox()->setEditText(comboBox()->itemText(comboBox()->currentIndex()));
- if (comboBox()->currentText() != oldKey)
- {
- emit changed(comboBox()->currentIndex());
- }
+void CKeyChooserWidget::unlock() {
+ updatelock = false;
+ comboBox()->setEditable(true);
+ comboBox()->setEditText(comboBox()->itemText(comboBox()->currentIndex()));
+ if (comboBox()->currentText() != oldKey) {
+ emit changed(comboBox()->currentIndex());
+ }
}
-void CKeyChooserWidget::changeCombo(int n)
-{
- const int old_index = comboBox()->currentIndex();
- int new_index = old_index + n;
-
- //index of highest Item
- const int max = comboBox()->count()-1;
- if(new_index > max) new_index = max;
- if(new_index < 0) new_index = 0;
-
- if(new_index != old_index)
- {
- comboBox()->setCurrentIndex(new_index);
- if(!updatelock)
- emit changed(new_index);
- }
+void CKeyChooserWidget::changeCombo(int n) {
+ const int old_index = comboBox()->currentIndex();
+ int new_index = old_index + n;
+
+ //index of highest Item
+ const int max = comboBox()->count() - 1;
+ if (new_index > max) new_index = max;
+ if (new_index < 0) new_index = 0;
+
+ if (new_index != old_index) {
+ comboBox()->setCurrentIndex(new_index);
+ if (!updatelock)
+ emit changed(new_index);
+ }
}