aboutsummaryrefslogtreecommitdiff
path: root/src-qt5/core-utils/lumina-config
diff options
context:
space:
mode:
authorKen Moore <ken@ixsystems.com>2016-12-06 14:34:27 -0500
committerKen Moore <ken@ixsystems.com>2016-12-06 14:34:27 -0500
commitc6e0fe646e78a6aff588277445fde9752f886a71 (patch)
tree58b24f5dd169e89a14a111e86254007c8d68c788 /src-qt5/core-utils/lumina-config
parentCommit a couple tweaks for lumina-fm - trying to get the drag and drop highli... (diff)
downloadlumina-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')
-rw-r--r--src-qt5/core-utils/lumina-config/pages/getPage.h2
-rw-r--r--src-qt5/core-utils/lumina-config/pages/page_mouse.cpp152
-rw-r--r--src-qt5/core-utils/lumina-config/pages/page_mouse.h7
-rw-r--r--src-qt5/core-utils/lumina-config/pages/page_mouse.ui43
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/>
bgstack15