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