summaryrefslogtreecommitdiffstats
path: root/tcutils/mainwindow.cpp
diff options
context:
space:
mode:
authorLaxmikant Rashinkar <LK.Rashinkar@gmail.com>2013-08-25 18:02:04 -0700
committerLaxmikant Rashinkar <LK.Rashinkar@gmail.com>2013-08-25 18:02:04 -0700
commitf8f648c57432a3238a17dc70909947a30ccaebae (patch)
tree95ffb2fb9409f63be8e322168439cfd1f3f97d3a /tcutils/mainwindow.cpp
parentfa40106a697611a35b57459c9403cc440a0cc865 (diff)
downloadxrdp-proprietary-f8f648c57432a3238a17dc70909947a30ccaebae.tar.gz
xrdp-proprietary-f8f648c57432a3238a17dc70909947a30ccaebae.zip
added tcutils, a utility for unmounting usb drives remotely
Diffstat (limited to 'tcutils/mainwindow.cpp')
-rw-r--r--tcutils/mainwindow.cpp234
1 files changed, 234 insertions, 0 deletions
diff --git a/tcutils/mainwindow.cpp b/tcutils/mainwindow.cpp
new file mode 100644
index 00000000..8cc0a988
--- /dev/null
+++ b/tcutils/mainwindow.cpp
@@ -0,0 +1,234 @@
+#include "mainwindow.h"
+#include "ui_mainwindow.h"
+
+MainWindow::MainWindow(QWidget *parent) :
+ QMainWindow(parent),
+ ui(new Ui::MainWindow)
+{
+ ui->setupUi(this);
+
+ wtsChannel = NULL;
+ okToQuit = false;
+ savedGeometry = this->geometry();
+
+ /* setup tab to unmount drives */
+ ui->tabWidget->setTabText(0, "Unmount drives");
+ connect(ui->btnRefresh, SIGNAL(clicked()), this, SLOT(onBtnRefreshClicked()));
+ connect(ui->btnUnmount, SIGNAL(clicked()), this, SLOT(onBtnUnmountClicked()));
+
+ ui->tabWidget->setTabText(1, "");
+ if (initWtsChannel())
+ {
+ okToQuit = true;
+ QTimer::singleShot(10, qApp, SLOT(quit()));
+ return;
+ }
+ setupSystemTray();
+
+ /* set up status bar to display messages */
+ statusBar = new QStatusBar;
+ this->setStatusBar(statusBar);
+ setStatusMsg("Connected to client");
+}
+
+MainWindow::~MainWindow()
+{
+ delete ui;
+}
+
+void MainWindow::setupSystemTray()
+{
+ trayMenu = new QMenu(this);
+ trayMenu->addAction("Launch Thinclient Utils", this, SLOT(onActionLaunch()));
+ trayMenu->addSeparator();
+ trayMenu->addAction("Quit", this, SLOT(onActionQuit()));
+
+ trayIcon = new QSystemTrayIcon;
+ trayIcon->setContextMenu(trayMenu);
+ trayIcon->setIcon(QIcon(":/images/resources/images/tools.gif"));
+
+ trayIcon->show();
+
+ trayIcon->showMessage("TCutils", "Click on the tcutils icon to launch tcutils",
+ QSystemTrayIcon::Information, 3000);
+
+ connect(trayIcon, SIGNAL(activated(QSystemTrayIcon::ActivationReason)),
+ this, SLOT(onSystemTrayClicked(QSystemTrayIcon::ActivationReason)));
+}
+
+/**
+ *
+ *****************************************************************************/
+
+int MainWindow::initWtsChannel()
+{
+ /* init the channel just once */
+ if (wtsChannel)
+ return 0;
+
+ /* open a WTS channel and connect to remote client */
+ wtsChannel = WTSVirtualChannelOpenEx(WTS_CURRENT_SESSION, "tcutils", 0);
+ if (wtsChannel == NULL)
+ {
+ QMessageBox::information(this, "Open virtual channel", "Error "
+ "connecting to remote client. This program "
+ "can only be used when connected via "
+ "NeutrinoRDP.\n\nClick ok to close this "
+ "application");
+ return -1;
+ }
+
+ return 0;
+}
+
+/**
+ *
+ *****************************************************************************/
+
+int MainWindow::deinitWtsChannel()
+{
+ if (!wtsChannel)
+ return -1;
+
+ WTSVirtualChannelClose(wtsChannel);
+ return 0;
+}
+
+/**
+ * Display a msg on the status bar
+ *
+ * @param msg message to display in status bar
+ *****************************************************************************/
+
+void MainWindow::setStatusMsg(QString msg)
+{
+ statusBar->showMessage(msg, 30000);
+}
+
+/**
+ *
+ *****************************************************************************/
+
+void MainWindow::closeEvent(QCloseEvent *event)
+{
+ if (!okToQuit)
+ {
+ savedGeometry = this->geometry();
+ this->hide();
+ event->ignore();
+ return;
+ }
+
+ if (wtsChannel)
+ deinitWtsChannel();
+
+ event->accept();
+}
+
+/******************************************************************************
+** **
+** slots go here **
+** **
+******************************************************************************/
+#if 1
+void MainWindow::onBtnRefreshClicked()
+{
+ int i;
+
+ /* clear drive list */
+ if (itemList.count())
+ {
+ for (i = 0; i < itemList.count(); i++)
+ ui->listWidget->removeItemWidget(itemList.at(i));
+
+ itemList.clear();
+ }
+ ui->listWidget->clear();
+
+ if (Utils::getMountList(wtsChannel, &itemList))
+ {
+ QMessageBox::information(this, "Get device list", "\nError getting "
+ "device list from client");
+ return;
+ }
+
+ if (itemList.count() == 0)
+ {
+ QMessageBox::information(this, "Get device list",
+ "\nNo devices found!");
+ return;
+ }
+
+ /* add mount point to list widget */
+ for (i = 0; i < itemList.count(); i++)
+ ui->listWidget->insertItem(i, itemList.at(i));
+}
+#else
+void MainWindow::onBtnRefreshClicked()
+{
+ QListWidgetItem *item;
+ int i;
+ int j;
+
+ /* clear drive list */
+ if (itemList.count())
+ {
+ for (i = 0; i < itemList.count(); i++)
+ ui->listWidget->removeItemWidget(itemList.at(i));
+
+ itemList.clear();
+ }
+ ui->listWidget->clear();
+
+ QDir dir(QDir::homePath() + "/xrdp_client");
+ QStringList sl = dir.entryList();
+
+ for (i = 0, j = 0; i < sl.count(); i++)
+ {
+ /* skip files starting with . */
+ if (sl.at(i).startsWith("."))
+ continue;
+
+ /* add mount point to list widget */
+ item = new QListWidgetItem;
+ item->setText(sl.at(i));
+ ui->listWidget->insertItem(j++, item);
+ itemList.append(item);
+ }
+}
+#endif
+
+void MainWindow::onBtnUnmountClicked()
+{
+ QListWidgetItem *item = ui->listWidget->currentItem();
+
+ if (!item)
+ {
+ QMessageBox::information(this, "Unmount device", "\nNo device selected. "
+ "You must select a device to unmount");
+ return;
+ }
+
+ if (Utils::unmountDevice(wtsChannel, item->text(), statusBar) == 0)
+ {
+ delete ui->listWidget->takeItem(itemList.indexOf(item));
+ itemList.removeOne(item);
+ }
+}
+
+void MainWindow::onActionQuit()
+{
+ okToQuit = true;
+ this->close();
+}
+
+void MainWindow::onActionLaunch()
+{
+ this->show();
+ this->setGeometry(savedGeometry);
+}
+
+void MainWindow::onSystemTrayClicked(QSystemTrayIcon::ActivationReason)
+{
+ trayMenu->popup(QCursor::pos());
+}