diff options
author | Ken Moore <ken@ixsystems.com> | 2016-12-06 14:34:27 -0500 |
---|---|---|
committer | Ken Moore <ken@ixsystems.com> | 2016-12-06 14:34:27 -0500 |
commit | c6e0fe646e78a6aff588277445fde9752f886a71 (patch) | |
tree | 58b24f5dd169e89a14a111e86254007c8d68c788 /src-qt5/core-utils/lumina-config | |
parent | Commit a couple tweaks for lumina-fm - trying to get the drag and drop highli... (diff) | |
download | lumina-c6e0fe646e78a6aff588277445fde9752f886a71.tar.gz lumina-c6e0fe646e78a6aff588277445fde9752f886a71.tar.bz2 lumina-c6e0fe646e78a6aff588277445fde9752f886a71.zip |
Get the new input device routines almost ready. Still have the page disabled in lumina-config right now, but it is coming along nicely.
Diffstat (limited to 'src-qt5/core-utils/lumina-config')
4 files changed, 144 insertions, 60 deletions
diff --git a/src-qt5/core-utils/lumina-config/pages/getPage.h b/src-qt5/core-utils/lumina-config/pages/getPage.h index ea0cfb00..a0785266 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("Mouse Settings"), QObject::tr("Mouse Settings"), "input-mouse",QObject::tr("Adjust mouse settings"), "user", QStringList(), QStringList() << "user"<<"speed"<<"accel"<<"mouse"); + //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"); //Now sort the items according to the translated name QStringList names; for(int i=0; i<list.length(); i++){ names << list[i].name; } 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 dbe075d7..1dd41295 100644 --- a/src-qt5/core-utils/lumina-config/pages/page_mouse.cpp +++ b/src-qt5/core-utils/lumina-config/pages/page_mouse.cpp @@ -8,15 +8,17 @@ #include "ui_page_mouse.h" #include "getPage.h" +#include <QSpinBox> +#include <QDoubleSpinBox> + //========== // PUBLIC //========== page_mouse::page_mouse(QWidget *parent) : PageWidget(parent), ui(new Ui::page_mouse()){ ui->setupUi(this); - connect(ui->slider_accel, SIGNAL(valueChanged(int)), this, SLOT(accelChanged(int)) ); - updateIcons(); - qDebug() << "List Devices:"; - QList<LInputDevice*> devices = LInput::listDevices(); + devices = LInput::listDevices(); + //DEBUG Code + /*qDebug() << "List Devices:"; for(int i=0; i<devices.length(); i++){ if(!devices[i]->isPointer()){ ::free( devices.takeAt(i)); @@ -24,9 +26,14 @@ page_mouse::page_mouse(QWidget *parent) : PageWidget(parent), ui(new Ui::page_mo }else{ qDebug() << "Found Pointer:" << devices[i]->devNumber(); qDebug() << " - isExtension:" << devices[i]->isExtension(); - qDebug() << " - Properties:" << devices[i]->listProperties(); + QList<int> props = devices[i]->listProperties(); + qDebug() << " - Properties:"; + for(int j=0; j<props.length(); j++){ + qDebug() << " --" <<devices[i]->propertyName(props[j])+" ("+QString::number(props[j])+")" <<" = " << devices[i]->getPropertyValue(props[j]); + } } - } + }*/ + generateUI(); } page_mouse::~page_mouse(){ @@ -43,35 +50,134 @@ void page_mouse::SaveSettings(){ void page_mouse::LoadSettings(int){ emit HasPendingChanges(false); - emit ChangePageTitle( tr("Desktop Settings") ); + emit ChangePageTitle( tr("Mouse Settings") ); } void page_mouse::updateIcons(){ - + for(int i=0; i<ui->tabWidget->count(); i++){ + ui->tabWidget->setTabIcon( i, LXDG::findIcon( "input-"+ui->tabWidget->tabWhatsThis(i).section(":",0,0), "" ) ); + } } //================= // PRIVATE //================= +void page_mouse::generateUI(){ + ui->tabWidget->clear(); //remove all tabs (just in case) + int mouse = 1; + int keyboard = 1; + qDebug() << "Devices Found:" << devices.length(); + for(int i=0; i<devices.length(); i++){ + QTreeWidget *tree = 0; + if(!devices[i]->isExtension()){ + //Make a new tab for this device + tree = new QTreeWidget(this); + tree->setHeaderHidden(true); + tree->setColumnCount(2); + 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())); + mouse++; + }else{ + int tab = ui->tabWidget->addTab(tree, LXDG::findIcon("input-keyboard",""), QString(tr("Keyboard #%1")).arg(QString::number(keyboard)) ); + ui->tabWidget->setTabWhatsThis(tab, "keyboard:"+QString::number(devices[i]->devNumber()) ); + keyboard++; + } + }else{ + //Find the associated tab for this extension device + int tab = 0; + QString type = devices[i]->isPointer() ? "mouse" : "keyboard"; + int num = devices[i]->devNumber(); + for(int t=ui->tabWidget->count()-1; t>0; t--){ + if(ui->tabWidget->tabWhatsThis(t).startsWith(type) && ui->tabWidget->tabWhatsThis(t).section(":",-1).toInt() < num ){ tab = t; break; } + } + tree = static_cast<QTreeWidget*>( ui->tabWidget->widget(tab) ); + } + if(tree!=0){ populateDeviceTree(tree, devices[i]); } + } +} + +void page_mouse::populateDeviceTree(QTreeWidget *tree, LInputDevice *device){ + QTreeWidgetItem *top = new QTreeWidgetItem(tree); + if(device->isExtension()){ + top->setText( 0, QString(tr("Extension Device #%1")).arg(QString::number(tree->topLevelItemCount())) ); + }else{ top->setText(0, tr("Master Device")); } + top->setWhatsThis(0, QString(device->isPointer() ? "mouse" : "keyboard")+":"+QString::number(device->devNumber()) ); //save this for later + top->setFirstColumnSpanned(true); + top->setExpanded(true); + tree->addTopLevelItem(top); + //Now add all the child properties to this item + QList<int> props = device->listProperties(); + for(int i=0; i<props.length(); i++){ + QTreeWidgetItem *tmp = new QTreeWidgetItem(top); + tmp->setWhatsThis(0, QString::number(props[i]) ); + tmp->setText(0, device->propertyName(props[i])); + top->addChild(tmp); + populateDeviceItemValue(tree, tmp, device->getPropertyValue(props[i]), QString::number(device->devNumber())+":"+QString::number(props[i]) ); + } + //Clean up the tree widget as needed + top->sortChildren(0, Qt::AscendingOrder); + tree->resizeColumnToContents(0); +} + +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") ){ + //Just use a checkable column within the item + bool enabled = (value.toInt()==1); + it->setText(1,""); + it->setCheckState(1, enabled ? Qt::Checked : Qt::Unchecked); + }else{ + //Use a QSpinBox + QSpinBox *box = new QSpinBox(); + box->setRange(0,100); + box->setValue( value.toInt() ); + tree->setItemWidget(it, 1, box); + connect(box, SIGNAL(valueChanged(int)), this, SLOT(valueChanged()) ); + } + }else if(value.canConvert<double>()){ + //Use a QDoubleSpinBox + QDoubleSpinBox *box = new QDoubleSpinBox(); + box->setRange(0,100); + box->setValue( value.toInt() ); + tree->setItemWidget(it, 1, box); + connect(box, SIGNAL(valueChanged(double)), this, SLOT(valueChanged()) ); + }else if(value.canConvert<QList<QVariant>>()){ + //Not Modifiable - just use the label in the item + QList<QVariant> list = value.toList(); + QStringList txtList; + for(int i=0; i<list.length(); i++){ txtList << list[i].toString(); } + it->setText(1, txtList.join(", ") ); + }else if( value.canConvert<QString>() ){ + //Not Modifiable - just use the label in the item + it->setText(1, value.toString()); + } +} //================= // PRIVATE SLOTS //================= -void page_mouse::accelChanged(int val){ - if(val<=4){ - val = 4-val; - ui->label_accel->setText( QString("1/%1").arg(QString::number(val)) ); - QProcess::startDetached("xset mouse 1/"+QString::number(val)); - }else{ - val = val-4; - if(val%2==0){ - val = val/2; - ui->label_accel->setText( QString::number(val) ); - QProcess::startDetached("xset mouse "+QString::number(val)); - }else{ - ui->label_accel->setText( QString::number(val)+"/2" ); - QProcess::startDetached("xset mouse "+QString::number(val)+"/2"); - } +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 + 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 ); } + + } 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 849917c5..d16ec214 100644 --- a/src-qt5/core-utils/lumina-config/pages/page_mouse.h +++ b/src-qt5/core-utils/lumina-config/pages/page_mouse.h @@ -30,7 +30,12 @@ private: Ui::page_mouse *ui; QList<LInputDevice*> devices; + void generateUI(); + void populateDeviceTree(QTreeWidget *tree, LInputDevice *device); + void populateDeviceItemValue(QTreeWidget *tree, QTreeWidgetItem *it, QVariant value, QString id); + private slots: - void accelChanged(int val); + void valueChanged(); + }; #endif diff --git a/src-qt5/core-utils/lumina-config/pages/page_mouse.ui b/src-qt5/core-utils/lumina-config/pages/page_mouse.ui index 619e38dc..a6c2e53f 100644 --- a/src-qt5/core-utils/lumina-config/pages/page_mouse.ui +++ b/src-qt5/core-utils/lumina-config/pages/page_mouse.ui @@ -13,44 +13,17 @@ <property name="windowTitle"> <string>Form</string> </property> - <layout class="QFormLayout" name="formLayout"> - <item row="0" column="0"> - <widget class="QLabel" name="label"> - <property name="text"> - <string>Mouse Acceleration</string> + <layout class="QVBoxLayout" name="verticalLayout"> + <item> + <widget class="QTabWidget" name="tabWidget"> + <property name="iconSize"> + <size> + <width>32</width> + <height>32</height> + </size> </property> </widget> </item> - <item row="0" column="1"> - <layout class="QHBoxLayout" name="horizontalLayout"> - <item> - <widget class="QSlider" name="slider_accel"> - <property name="maximum"> - <number>20</number> - </property> - <property name="value"> - <number>4</number> - </property> - <property name="orientation"> - <enum>Qt::Horizontal</enum> - </property> - <property name="tickPosition"> - <enum>QSlider::TicksBelow</enum> - </property> - <property name="tickInterval"> - <number>2</number> - </property> - </widget> - </item> - <item> - <widget class="QLabel" name="label_accel"> - <property name="text"> - <string notr="true"/> - </property> - </widget> - </item> - </layout> - </item> </layout> </widget> <resources/> |