diff options
Diffstat (limited to 'src-qt5/core-utils/lumina-config')
-rw-r--r-- | src-qt5/core-utils/lumina-config/pages/getPage.h | 4 | ||||
-rw-r--r-- | src-qt5/core-utils/lumina-config/pages/page_mouse.cpp | 73 | ||||
-rw-r--r-- | src-qt5/core-utils/lumina-config/pages/page_mouse.h | 2 |
3 files changed, 57 insertions, 22 deletions
diff --git a/src-qt5/core-utils/lumina-config/pages/getPage.h b/src-qt5/core-utils/lumina-config/pages/getPage.h index a0785266..b209bb20 100644 --- a/src-qt5/core-utils/lumina-config/pages/getPage.h +++ b/src-qt5/core-utils/lumina-config/pages/getPage.h @@ -38,7 +38,7 @@ static QList<PAGEINFO> KnownPages(){ list << PageInfo("interface-menu", QObject::tr("Menu"), QObject::tr("Menu Plugins"), "preferences-plugin",QObject::tr("Change what options are shown on the desktop context menu"), "interface", QStringList(), QStringList() << "desktop" << "menu" << "plugins" << "shortcuts"); list << PageInfo("session-locale", QObject::tr("Localization"), QObject::tr("Locale Settings"), "preferences-desktop-locale",QObject::tr("Change the default locale settings for this user"), "user", QStringList(), QStringList() << "user"<<"locale"<<"language"<<"translations"); list << PageInfo("session-options", QObject::tr("General Options"), QObject::tr("User Settings"), "configure",QObject::tr("Change basic user settings such as time/date formats"), "user", QStringList(), QStringList() << "user"<<"settings"<<"time"<<"date"<<"icon"<<"reset"<<"numlock"<<"clock"); - //list << PageInfo("mouse", QObject::tr("Input Device Settings"), QObject::tr("Input Device Settings"), "preferences-desktop-peripherals",QObject::tr("Adjust keyboard and mouse devices"), "user", QStringList(), QStringList() << "user"<<"speed"<<"accel"<<"mouse" << "keyboard"); + list << PageInfo("input-devices", QObject::tr("Input Device Settings"), QObject::tr("Input Device Settings"), "preferences-desktop-peripherals",QObject::tr("Adjust keyboard and mouse devices"), "user", QStringList(), QStringList() << "user"<<"speed"<<"accel"<<"mouse" << "keyboard"); //Now sort the items according to the translated name QStringList names; for(int i=0; i<list.length(); i++){ names << list[i].name; } @@ -83,7 +83,7 @@ static PageWidget* GetNewPage(QString id, QWidget *parent){ else if(id=="session-locale"){ page = new page_session_locale(parent); } else if(id=="session-options"){ page = new page_session_options(parent); } else if(id=="compton"){ page = new page_compton(parent); } - else if(id=="mouse"){ page = new page_mouse(parent); } + else if(id=="input-devices"){ page = new page_mouse(parent); } //Return the main control_panel page as the fallback/default if(page==0){ id.clear(); page = new page_main(parent); } page->setWhatsThis(id); diff --git a/src-qt5/core-utils/lumina-config/pages/page_mouse.cpp b/src-qt5/core-utils/lumina-config/pages/page_mouse.cpp index 1dd41295..36ce81dc 100644 --- a/src-qt5/core-utils/lumina-config/pages/page_mouse.cpp +++ b/src-qt5/core-utils/lumina-config/pages/page_mouse.cpp @@ -75,6 +75,7 @@ void page_mouse::generateUI(){ tree = new QTreeWidget(this); tree->setHeaderHidden(true); tree->setColumnCount(2); + connect(tree, SIGNAL(itemClicked(QTreeWidgetItem*, int)), this, SLOT(itemClicked(QTreeWidgetItem*,int)) ); if(devices[i]->isPointer()){ int tab = ui->tabWidget->addTab(tree, LXDG::findIcon("input-mouse",""), QString(tr("Mouse #%1")).arg(QString::number(mouse)) ); ui->tabWidget->setTabWhatsThis(tab, "mouse:"+QString::number(devices[i]->devNumber())); @@ -110,6 +111,7 @@ void page_mouse::populateDeviceTree(QTreeWidget *tree, LInputDevice *device){ //Now add all the child properties to this item QList<int> props = device->listProperties(); for(int i=0; i<props.length(); i++){ + if(device->propertyName(props[i]).toLower().contains("matrix")){ continue; } //skip this one - can not change from UI and most people will never want to anyway QTreeWidgetItem *tmp = new QTreeWidgetItem(top); tmp->setWhatsThis(0, QString::number(props[i]) ); tmp->setText(0, device->propertyName(props[i])); @@ -124,24 +126,27 @@ void page_mouse::populateDeviceTree(QTreeWidget *tree, LInputDevice *device){ void page_mouse::populateDeviceItemValue(QTreeWidget *tree, QTreeWidgetItem *it, QVariant value, QString id){ if(value.type()==QVariant::Int){ //Could be a boolian - check the name for known "enable" states - if(it->text(0).toLower().contains("enable") || it->text(0).toLower().contains("emulation") ){ + if(value.toInt() < 2 && (it->text(0).toLower().contains("enable") || it->text(0).toLower().contains("emulation") || it->text(0)==("XTEST Device") ) ){ //Just use a checkable column within the item bool enabled = (value.toInt()==1); it->setText(1,""); + it->setWhatsThis(1, "bool:"+id); it->setCheckState(1, enabled ? Qt::Checked : Qt::Unchecked); }else{ //Use a QSpinBox QSpinBox *box = new QSpinBox(); box->setRange(0,100); box->setValue( value.toInt() ); + box->setWhatsThis("int:"+id); tree->setItemWidget(it, 1, box); connect(box, SIGNAL(valueChanged(int)), this, SLOT(valueChanged()) ); } - }else if(value.canConvert<double>()){ + }else if(value.type()==QVariant::Double){ //Use a QDoubleSpinBox QDoubleSpinBox *box = new QDoubleSpinBox(); - box->setRange(0,100); + box->setRange(0,1000); box->setValue( value.toInt() ); + box->setWhatsThis("double:"+id); tree->setItemWidget(it, 1, box); connect(box, SIGNAL(valueChanged(double)), this, SLOT(valueChanged()) ); @@ -151,6 +156,7 @@ void page_mouse::populateDeviceItemValue(QTreeWidget *tree, QTreeWidgetItem *it, QStringList txtList; for(int i=0; i<list.length(); i++){ txtList << list[i].toString(); } it->setText(1, txtList.join(", ") ); + it->setToolTip(1, txtList.join(", ")); }else if( value.canConvert<QString>() ){ //Not Modifiable - just use the label in the item it->setText(1, value.toString()); @@ -160,24 +166,51 @@ void page_mouse::populateDeviceItemValue(QTreeWidget *tree, QTreeWidgetItem *it, // PRIVATE SLOTS //================= void page_mouse::valueChanged(){ - //WILL NOT WORK - the widgets within the tree item *do not* activate the item when clicked - // - so the current item is NOT guaranteed to be the one which was modified - //Get the current Tab/TreeWidget - QTreeWidget *tree = static_cast<QTreeWidget*>(ui->tabWidget->widget( ui->tabWidget->currentIndex() ) ); - if(tree==0){ return; } - //Now get the current item in the tree - QTreeWidgetItem *it = tree->currentItem(); - if(it==0){ return; } - qDebug() << "Item Value Changed:" << it->text(0); - //Now read the value of the item and save that into the device + //Now get the currently focused widget + QWidget *foc = this->focusWidget(); + if(foc==0){ return; } + //qDebug() << "Focus Widget:" << foc->whatsThis(); + //Now pull out the value and device/property numbers + unsigned int dev = foc->whatsThis().section(":",1,1).toInt(); + int prop = foc->whatsThis().section(":",2,2).toInt(); QVariant value; - if(tree->itemWidget(it, 1)!=0){ - //Got Item Widget - - }else if(it->text(1)==""){ - //Checkbox - value = QVariant( (it->checkState(1)==Qt::Checked) ? 1 : 0 ); + if(foc->whatsThis().startsWith("int:")){ value.setValue( static_cast<QSpinBox*>(foc)->value() ); } + else if(foc->whatsThis().startsWith("double:")){ value.setValue( static_cast<QDoubleSpinBox*>(foc)->value() ); } + //Now change the property for the device + qDebug() << " - Device:" <<dev << "prop:" << prop << "value:" << value; + for(int i=0; i<devices.length(); i++){ + if(devices[i]->devNumber() == dev){ + bool ok = devices[i]->setPropertyValue(prop, value); + if(ok){ foc->setStyleSheet(""); } + else{ foc->setStyleSheet("background: red"); } + //qDebug() << " - Changed property:" << (ok ? "success" : "failure"); + break; + } } +} - +void page_mouse::itemClicked(QTreeWidgetItem *it, int col){ + if(col!=1){ return; } //only care about value changes + if(it->whatsThis(1).isEmpty()){ return; }//not a checkable item + qDebug() << "item Clicked:" << it->whatsThis(1) << it->text(0); + //Now pull out the value and device/property numbers + unsigned int dev = it->whatsThis(1).section(":",1,1).toInt(); + int prop = it->whatsThis(1).section(":",2,2).toInt(); + QVariant value( (it->checkState(1)==Qt::Checked) ? 1 : 0 ); + //Now change the property for the device + qDebug() << " - Device:" <<dev << "prop:" << prop << "value:" << value; + for(int i=0; i<devices.length(); i++){ + if(devices[i]->devNumber() == dev){ + //Since this "clicked" signal can get sent out even if the value has not changed, go ahead and make sure we have a different value first + QVariant current = devices[i]->getPropertyValue(prop); + //qDebug() << " - Current Value:" << current; + if(value.toInt()!=current.toInt()){ + bool ok = devices[i]->setPropertyValue(prop, value); + //if(ok){ foc->setStyleSheet(""); } + //else{ foc->setStyleSheet("background: red"); } + qDebug() << " - Changed property:" << (ok ? "success" : "failure"); + } + break; + } + } } diff --git a/src-qt5/core-utils/lumina-config/pages/page_mouse.h b/src-qt5/core-utils/lumina-config/pages/page_mouse.h index d16ec214..00487910 100644 --- a/src-qt5/core-utils/lumina-config/pages/page_mouse.h +++ b/src-qt5/core-utils/lumina-config/pages/page_mouse.h @@ -10,6 +10,7 @@ #include "PageWidget.h" #include <LInputDevice.h> +#include <QTreeWidgetItem> namespace Ui{ class page_mouse; @@ -36,6 +37,7 @@ private: private slots: void valueChanged(); + void itemClicked(QTreeWidgetItem*, int); }; #endif |