diff --git a/src/MainWindow.cpp b/src/MainWindow.cpp index 5ed2f26dd..a599b7459 100644 --- a/src/MainWindow.cpp +++ b/src/MainWindow.cpp @@ -68,6 +68,8 @@ #include "WorkoutWizard.h" #include "ErgDB.h" #include "ErgDBDownloadDialog.h" +#include "DeviceConfiguration.h" +#include "AddDeviceWizard.h" #include "TrainTool.h" #include "GcWindowTool.h" @@ -1809,6 +1811,30 @@ MainWindow::deleteRide() removeCurrentRide(); } +/*---------------------------------------------------------------------- + * Realtime Devices and Workouts + *--------------------------------------------------------------------*/ +void +MainWindow::addDevice() +{ + // get device config + DeviceConfigurations all; + DeviceConfiguration add; + + // lets get a new one + AddDeviceWizard *p = new AddDeviceWizard(this, add); + if (p->exec() == QDialog::Accepted) { + QList list = all.getList(); + list.insert(0, add); + + // call device add wizard. + all.writeConfig(list); + + // tell everyone + emit configChanged(); + } +} + /*---------------------------------------------------------------------- * Cyclists *--------------------------------------------------------------------*/ @@ -2346,5 +2372,4 @@ MainWindow::actionClicked(int index) } } - #endif diff --git a/src/MainWindow.h b/src/MainWindow.h index b046cca43..592df1e7c 100644 --- a/src/MainWindow.h +++ b/src/MainWindow.h @@ -243,6 +243,7 @@ class MainWindow : public QMainWindow void checkCPX(RideItem*); void showTreeContextMenuPopup(const QPoint &); void closeAll(); + void addDevice(); private slots: void rideTreeWidgetSelectionChanged(); diff --git a/src/TrainTool.cpp b/src/TrainTool.cpp index e807ff7d9..db69d0fd3 100644 --- a/src/TrainTool.cpp +++ b/src/TrainTool.cpp @@ -104,6 +104,7 @@ TrainTool::TrainTool(MainWindow *parent, const QDir &home) : GcWindow(parent), h allDevices = new QTreeWidgetItem(deviceTree, HEAD_TYPE); allDevices->setText(0, tr("Devices")); deviceTree->expandItem(allDevices); + deviceTree->setContextMenuPolicy(Qt::CustomContextMenu); workoutTree = new QTreeWidget; workoutTree->setFrameStyle(QFrame::NoFrame); @@ -272,6 +273,7 @@ TrainTool::TrainTool(MainWindow *parent, const QDir &home) : GcWindow(parent), h // handle config changes //connect(serverTree,SIGNAL(itemSelectionChanged()), this, SLOT(serverTreeWidgetSelectionChanged())); connect(deviceTree,SIGNAL(itemSelectionChanged()), this, SLOT(deviceTreeWidgetSelectionChanged())); + connect(deviceTree,SIGNAL(customContextMenuRequested(const QPoint &)), this, SLOT(deviceTreeMenuPopup(const QPoint &))); connect(workoutTree,SIGNAL(itemSelectionChanged()), this, SLOT(workoutTreeWidgetSelectionChanged())); #if defined Q_OS_MAC || defined GC_HAVE_VLC connect(mediaTree,SIGNAL(itemSelectionChanged()), this, SLOT(mediaTreeWidgetSelectionChanged())); @@ -1570,3 +1572,53 @@ MultiDeviceDialog::cancelClicked() { reject(); } + +void +TrainTool::deviceTreeMenuPopup(const QPoint &pos) +{ + QMenu menu(deviceTree); + QAction *addDevice = new QAction(tr("Add Device"), deviceTree); + connect(addDevice, SIGNAL(triggered(void)), main, SLOT(addDevice())); + menu.addAction(addDevice); + + if (deviceTree->selectedItems().size() == 1) { + QAction *delDevice = new QAction(tr("Delete Device"), deviceTree); + connect(delDevice, SIGNAL(triggered(void)), this, SLOT(deleteDevice())); + menu.addAction(delDevice); + } + + menu.exec(deviceTree->mapToGlobal(pos)); +} + +void +TrainTool::deleteDevice() +{ + // get the configuration + DeviceConfigurations all; + QListlist = all.getList(); + + // Delete the selected device + QTreeWidgetItem *selected = deviceTree->selectedItems().first(); + int index = allDevices->indexOfChild(selected); + + if (index < 0 || index > list.size()) return; + + // make sure they really mean this! + QMessageBox msgBox; + msgBox.setText(tr("Are you sure you want to delete this device?")); + msgBox.setInformativeText(list[index].name); + QPushButton *deleteButton = msgBox.addButton(tr("Delete"),QMessageBox::YesRole); + msgBox.setStandardButtons(QMessageBox::Cancel); + msgBox.setDefaultButton(QMessageBox::Cancel); + msgBox.setIcon(QMessageBox::Critical); + msgBox.exec(); + + if(msgBox.clickedButton() != deleteButton) return; + + // find this one and delete it + list.removeAt(index); + all.writeConfig(list); + + // tell everyone + main->notifyConfigChanged(); +} diff --git a/src/TrainTool.h b/src/TrainTool.h index ab5478382..dd7b1f5de 100644 --- a/src/TrainTool.h +++ b/src/TrainTool.h @@ -130,6 +130,12 @@ class TrainTool : public GcWindow void workoutTreeWidgetSelectionChanged(); void mediaTreeWidgetSelectionChanged(); + void deviceTreeMenuPopup(const QPoint &); + void deleteDevice(); + + //XXX void workoutTreeMenuPopup(const QPoint &); + //XXX void mediaTreeMenuPopup(const QPoint &); + public slots: void configChanged();