combjs

view gui/gui.cc @ 2:4e8f2bbe8426

doing the gui
author John Tsiombikas <nuclear@member.fsf.org>
date Fri, 15 Jul 2011 06:54:32 +0300
parents dd02002227a2
children
line source
1 #include <stdio.h>
2 #include <stdlib.h>
3 #include <QMessageBox>
4 #include <QCloseEvent>
5 #include "gui.h"
6 #include "combjs.h"
8 static void add_to_list(int jsidx, QListWidget *list);
9 static QListWidgetItem *get_selected(QListWidget *list);
10 static int find_item(QListWidget *list, int jsidx);
12 static std::vector<Joystick> jsvec;
14 MainWindow::MainWindow(QWidget *parent)
15 : QMainWindow(parent)
16 {
17 setupUi(this);
19 int num_js = enum_joysticks(&jsvec);
21 list_js->clear();
22 for(int i=0; i<num_js; i++) {
23 add_to_list(i, list_js);
24 }
26 connect(list_js, SIGNAL(itemSelectionChanged()), this, SLOT(jslist_select()));
27 connect(list_newdev, SIGNAL(itemSelectionChanged()), this, SLOT(clist_select()));
29 connect(action_addjs, SIGNAL(triggered()), this, SLOT(add_js()));
30 connect(action_remove, SIGNAL(triggered()), this, SLOT(remove_js()));
31 connect(action_combine, SIGNAL(triggered()), this, SLOT(start_virt()));
32 connect(action_delete, SIGNAL(triggered()), this, SLOT(stop_virt()));
33 }
36 void MainWindow::closeEvent(QCloseEvent *ev)
37 {
38 /*const char *msg_text = "Are you sure you want to quit?\n"
39 "Quitting this application will destroy any virtual joystick devices you created!"
40 "If this wasn't your intention, press cancel and minimize instead of quitting.";
42 if(QMessageBox::question(this, "Quit?", msg_text, QMessageBox::Ok | QMessageBox::Cancel) == QMessageBox::Ok) {
43 ev->accept();
44 } else {
45 ev->ignore();
46 }*/
47 ev->accept();
48 }
50 /* slots */
51 void MainWindow::jslist_select()
52 {
53 QListWidgetItem *item = get_selected(list_js);
55 if(item) {
56 int idx = item->data(Qt::UserRole).toInt();
58 bn_add->setEnabled(true);
59 if(jsvec[idx].isvirt) {
60 bn_del_virt->setEnabled(true);
61 } else {
62 bn_del_virt->setEnabled(false);
63 }
65 lb_name->setText(jsvec[idx].name.c_str());
66 lb_dev->setText(jsvec[idx].dev.c_str());
67 lb_axes->setText(QString::number(jsvec[idx].num_axes));
68 lb_buttons->setText(QString::number(jsvec[idx].num_bn));
70 } else {
71 bn_add->setEnabled(false);
72 bn_del_virt->setEnabled(false);
74 lb_name->setText("");
75 lb_dev->setText("");
76 lb_axes->setText("");
77 lb_buttons->setText("");
78 }
79 }
81 void MainWindow::clist_select()
82 {
83 QListWidgetItem *item = get_selected(list_newdev);
85 bn_remove->setEnabled(item != 0);
86 }
88 void MainWindow::add_js()
89 {
90 QListWidgetItem *item = get_selected(list_js);
91 if(!item) {
92 return;
93 }
95 int idx = item->data(Qt::UserRole).toInt();
96 if(find_item(list_newdev, idx) == -1) {
97 add_to_list(idx, list_newdev);
98 bn_create->setEnabled(true);
99 }
100 }
102 void MainWindow::remove_js()
103 {
104 QListWidgetItem *item = get_selected(list_newdev);
105 if(item) {
106 list_newdev->takeItem(list_newdev->row(item));
107 delete item;
109 if(list_newdev->count() == 0) {
110 bn_create->setEnabled(false);
111 }
112 }
113 }
115 void MainWindow::start_virt()
116 {
117 }
119 void MainWindow::stop_virt()
120 {
121 }
123 static void add_to_list(int jsidx, QListWidget *list)
124 {
125 QListWidgetItem *item = new QListWidgetItem(jsvec[jsidx].name.c_str());
126 item->setData(Qt::UserRole, jsidx);
127 item->setToolTip(jsvec[jsidx].dev.c_str());
128 list->addItem(item);
129 }
131 static QListWidgetItem *get_selected(QListWidget *list)
132 {
133 QList<QListWidgetItem*> sel_list = list->selectedItems();
134 return sel_list.isEmpty() ? 0 : sel_list.first();
135 }
137 static int find_item(QListWidget *list, int jsidx)
138 {
139 int num = list->count();
140 for(int i=0; i<num; i++) {
141 if(list->item(i)->data(Qt::UserRole).toInt() == jsidx) {
142 return i;
143 }
144 }
145 return -1;
146 }