combjs

annotate 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
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 }