qpidctrl  0.7.1
qpiddevicelistwidget.cpp
Go to the documentation of this file.
1 #include "qpiddevicelistwidget.h"
2 #include "qpidcontroller.h"
3 #include <QRadioButton>
4 #include <QPushButton>
5 #include <QLabel>
6 #include <QLineEdit>
7 #include <QMenu>
8 #include <QAction>
9 #include <QTableWidgetItem>
10 #include <QMessageBox>
11 #include "qpidmainwindow.h"
12 
14  QTableWidget(parent),
15  m_DeviceConfigMapper(new QSignalMapper(this)),
16  m_DeviceDefaultMapper(new QSignalMapper(this))
17 {
18  connect(m_DeviceConfigMapper, SIGNAL(mapped(int)), this, SLOT(doConfigureDevice(int)));
19  connect(m_DeviceDefaultMapper, SIGNAL(mapped(int)), this, SLOT(doSetDefaultDevice(int)));
20  connect(this, SIGNAL(itemChanged(QTableWidgetItem*)), this, SLOT(onDeviceListItemChanged(QTableWidgetItem*)));
21 }
22 
24 {
25  m_Controller = ctl;
26 
27  connect(m_Controller.data(), SIGNAL(deviceListChanged()), this, SLOT(updateDevicesList())/*, Qt::QueuedConnection*/);
28 }
29 
30 void QPidDeviceListWidget::printMessage(QString msg, QDateTime ts)
31 {
32  QPidMainWindow *win = qobject_cast<QPidMainWindow*>(parent());
33 
34  if (win) {
35  win -> printMessage(msg, ts);
36  }
37 }
38 
40 {
41  setRowCount(0);
42  setColumnCount(4);
43 
45 
46  if (ctrl) {
47  for (int n=0; n<ctrl->countDevices(); n++) {
48  QPidDevicePtr dev = ctrl->getDevice(n);
49 
50  if (dev) {
51  setRowCount(n+1);
52 
53  QRadioButton *defaultButton = new QRadioButton();
54 
55  if (n == ctrl->defaultDeviceNumber()) {
56  defaultButton->setChecked(true);
57  }
58 
59  connect(defaultButton, SIGNAL(clicked()), m_DeviceDefaultMapper, SLOT(map()));
60  m_DeviceDefaultMapper->setMapping(defaultButton, n);
61 
62  QPushButton *configButton = new QPushButton("Configure...");
63 
64  connect(configButton, SIGNAL(clicked()), m_DeviceConfigMapper, SLOT(map()));
65  m_DeviceConfigMapper->setMapping(configButton, n);
66 
67  int col = 0;
68 
69  QTableWidgetItem *devType = new QTableWidgetItem(dev->get_DeviceLongTypeName());
70  QTableWidgetItem *devName = new QTableWidgetItem(dev->get_DeviceName());
71 
72  devType->setFlags(Qt::ItemIsEnabled|Qt::ItemIsSelectable);
73  devName->setFlags(Qt::ItemIsEnabled|Qt::ItemIsSelectable|Qt::ItemIsEditable);
74 
75  bool b = blockSignals(true);
76 
77  setCellWidget(n, col++, defaultButton);
78  setCellWidget(n, col++, configButton);
79  setItem(n, col++, devType);
80  setItem(n, col++, devName);
81 
82  QTableWidgetItem *item= new QTableWidgetItem(tr("%1").arg(n));
83 
84  setVerticalHeaderItem(n, item);
85 
86  blockSignals(b);
87  }
88  }
89  }
90 
91  resizeColumnsToContents();
92 }
93 
95 {
96  QMenu *menu = new QMenu(this);
97 
98  menu->addAction("Create New Device...");
99  menu->addSeparator();
100 
101  for (int i=1; i<QPidDevice::deviceTypeCount(); i++) {
102  menu->addAction(QPidDevice::deviceLongTypeName(i));
103  }
104 
105  QAction *act = menu->exec(QCursor::pos());
106 
107  if (act) {
108  int res = 0;
109  for (int i=1; i<QPidDevice::deviceTypeCount(); i++) {
110  if (act->text() == QPidDevice::deviceLongTypeName(i)) {
111  res = i;
112  break;
113  }
114  }
115 
117 
118  if (ctrl && res) {
119  printMessage(tr("Create new device type %1 = %2").arg(res).arg(QPidDevice::deviceLongTypeName(res)));
120 
121  ctrl->appendDevice(res, "Untitled Device");
122  }
123  }
124 }
125 
127 {
129 
130  if (ctrl) {
131  QList<QTableWidgetSelectionRange> selected = selectedRanges();
132  QVector<int> toDelete(ctrl->countDevices());
133 
134  toDelete.fill(0);
135 
136  foreach (QTableWidgetSelectionRange index, selected) {
137  for (int r1 = index.topRow(); r1 <= index.bottomRow(); r1++) {
138  toDelete[r1] = 1;
139  }
140  }
141 
142  QString msg = "Do you really want to delete\n";
143  QVector<int> devList;
144 
145  for (int i=0; i<toDelete.count(); i++) {
146  if (toDelete.value(i)) {
147  msg += tr("Device %1 : %2 \"%3\"\n")
148  .arg(i)
149  .arg(ctrl->getDevice(i)->get_DeviceLongTypeName())
150  .arg(ctrl->getDevice(i)->get_DeviceName());
151 
152  devList.append(i);
153  }
154  }
155 
156  if (QMessageBox::question(this, "Delete Devices?", msg, QMessageBox::Ok, QMessageBox::Cancel) == QMessageBox::Ok) {
157  ctrl->deleteDevices(devList);
158  }
159  }
160 }
161 
163 {
164 // printMessage(tr("Device List Item [%1,%2] Changed to %3").arg(item->row()).arg(item->column()).arg(item->text()));
165 
167 
168  if (ctrl && item->column() == 3) { // A device name has been changed...
169  ctrl->setDeviceName(item->row(),item->text());
170  }
171 }
172 
174 {
176 
177  if (ctrl) {
178  ctrl->configurationDialog(dev);
179  }
180 }
181 
183 {
184  // printMessage(tr("New default device is %1").arg(dev));
185 
187 
188  if (ctrl) {
189  QString msg = "Do you really want to change the current controller to\n";
190 
191  msg += tr("Device %1 : %2 \"%3\"\n")
192  .arg(dev)
193  .arg(ctrl->getDevice(dev)->get_DeviceLongTypeName())
194  .arg(ctrl->getDevice(dev)->get_DeviceName());
195 
196  if (QMessageBox::question(this, "Change current device?", msg, QMessageBox::Ok, QMessageBox::Cancel) == QMessageBox::Ok) {
197  ctrl->setDefaultDevice(dev);
198  }
199  }
200 }
static int deviceTypeCount()
Definition: qpiddevice.cpp:116
QString deviceLongTypeName
Definition: qpiddevice.h:130
QSharedPointer< QPidDevice > QPidDevicePtr
Definition: qpiddevice-ptr.h:6
void printMessage(QString msg, QDateTime ts=QDateTime::currentDateTime())
QWeakPointer< QPidController > QPidControllerWPtr
QSharedPointer< QPidController > QPidControllerPtr
QPidControllerWPtr m_Controller
QPidDeviceListWidget(QWidget *parent=0)
void setController(QPidControllerWPtr ctl)
void onDeviceListItemChanged(QTableWidgetItem *item)
QSignalMapper * m_DeviceDefaultMapper
QSignalMapper * m_DeviceConfigMapper