diff options
author | Jan Darmochwal | 2010-10-05 12:45:20 +0200 |
---|---|---|
committer | Jan Darmochwal | 2010-10-05 12:45:20 +0200 |
commit | 610840384ff2a04d640ca4d8fe100019bab0ba16 (patch) | |
tree | faea71083d0c33f5389a9833f9576564cf0248eb | |
parent | Allow sessions to be active for a given date range (diff) | |
download | vmchooser-610840384ff2a04d640ca4d8fe100019bab0ba16.tar.gz vmchooser-610840384ff2a04d640ca4d8fe100019bab0ba16.tar.xz vmchooser-610840384ff2a04d640ca4d8fe100019bab0ba16.zip |
simple PVS configuration in vmchooser
This patch adds a GroupBox with PVS access restriction options to vmchooser.
Vmchooser checks if a PVS daemon is running and if so, displays some access configuration options.
The options will be sent to the PVS daemon after a session has been started (just before vmchooser exits).
All PVS configuration program logic is contained in the Dialog class. (It would probably be better to use a custom widget for the PVS options.)
The file org.openslx.pvs.xml has been copied from a PVS build. This file has to be updated manually when the PVS D-Bus specification changes.
-rw-r--r-- | CMakeLists.txt | 3 | ||||
-rw-r--r-- | src/dialog.cpp | 104 | ||||
-rw-r--r-- | src/dialog.h | 6 | ||||
-rw-r--r-- | src/org.openslx.pvs.xml | 85 | ||||
-rw-r--r-- | src/ui/dialog.ui | 101 |
5 files changed, 299 insertions, 0 deletions
diff --git a/CMakeLists.txt b/CMakeLists.txt index 3924f13..0bc9e02 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -66,6 +66,9 @@ QT4_ADD_RESOURCES(VMCHOOSER_RC_SOURCES ${VMCHOOSER_RESOURCES}) QT4_WRAP_UI(VMCHOOSER_UI_HEADERS ${VMCHOOSER_UIS}) QT4_WRAP_CPP(VMCHOOSER_MOC_SOURCES ${VMCHOOSER_MOC_HEADERS}) +# run qdbusxml2cpp on org.openslx.pvs.xml (taken from pvs build) +QT4_ADD_DBUS_INTERFACE(VMCHOOSER_SOURCES src/org.openslx.pvs.xml pvsinterface ) + # # build vmchooser # diff --git a/src/dialog.cpp b/src/dialog.cpp index a7b3a5e..37b6fb6 100644 --- a/src/dialog.cpp +++ b/src/dialog.cpp @@ -3,12 +3,29 @@ #include "save_restore_session.h" #include "sessiontreeitem.h" + Dialog::Dialog(QWidget *parent) : QDialog(parent), ui(new Ui::Dialog) { model_ = new SessionTreeModel(parent); ui->setupUi(this); + + QDBusConnection dbus = QDBusConnection::sessionBus(); + ifaceDBus_ = new OrgOpenslxPvsInterface("org.openslx.pvs", "/", dbus, this); + + if (ifaceDBus_->isValid()) { + // PVS is running + QStringList accessOptions; + accessOptions << "None" << "View Only" << "Full"; + ui->comboBoxLecturer->insertItems(0, accessOptions); + ui->comboBoxOthers->insertItems(0, accessOptions); + + readPVSSettings(); + ui->PVSOptionsGroupBox->show(); + } else { + ui->PVSOptionsGroupBox->hide(); + } } Dialog::~Dialog() @@ -44,6 +61,9 @@ void Dialog::on_treeView_activated(QModelIndex index) return; } if (s->run()) { + if (ifaceDBus_->isValid()) { + writePVSSettings(); + } writeSessionName(s->shortDescription()); close(); } else { @@ -79,3 +99,87 @@ void Dialog::on_pushButtonStart_clicked() // TODO: check if a model is selected this->on_treeView_activated(ui->treeView->selectionModel()->currentIndex()); } + +void Dialog::readPVSSettings() +{ + QDBusPendingReply<QString> reply; + + reply = ifaceDBus_->getConfigValue("Permissions/vnc_lecturer"); + reply.waitForFinished(); + if (reply.isValid()) + { + if (reply.value() == "rw") { + ui->comboBoxLecturer->setCurrentIndex(2); + } else if (reply.value() == "ro") { + ui->comboBoxLecturer->setCurrentIndex(1); + } else { + ui->comboBoxLecturer->setCurrentIndex(0); + } + } + + reply = ifaceDBus_->getConfigValue("Permissions/vnc_other"); + reply.waitForFinished(); + if (reply.isValid()) + { + if (reply.value() == "rw") { + ui->comboBoxOthers->setCurrentIndex(2); + } else if (reply.value() == "ro") { + ui->comboBoxOthers->setCurrentIndex(1); + } else { + ui->comboBoxOthers->setCurrentIndex(0); + } + } + + reply = ifaceDBus_->getConfigValue("Permissions/allow_chat"); + reply.waitForFinished(); + if (reply.isValid()) + ui->checkBoxChat->setChecked(reply.value() == "T"); + + reply = ifaceDBus_->getConfigValue("Permissions/allow_filetransfer"); + reply.waitForFinished(); + if (reply.isValid()) + ui->checkBoxFileTransfer->setChecked(reply.value() == "T"); +} + +void Dialog::writePVSSettings() +{ + int accessLecturer = ui->comboBoxLecturer->currentIndex(); + if (accessLecturer == 2) { + ifaceDBus_->setConfigValue("Permissions/vnc_lecturer", "rw"); + } else if (accessLecturer == 1) { + ifaceDBus_->setConfigValue("Permissions/vnc_lecturer", "ro"); + } else { + ifaceDBus_->setConfigValue("Permissions/vnc_lecturer", "no"); + } + + int accessOthers = ui->comboBoxOthers->currentIndex(); + if (accessOthers == 2) { + ifaceDBus_->setConfigValue("Permissions/vnc_other", "rw"); + } else if (accessOthers == 1) { + ifaceDBus_->setConfigValue("Permissions/vnc_other", "ro"); + } else { + ifaceDBus_->setConfigValue("Permissions/vnc_other", "no"); + } + + ifaceDBus_->setConfigValue("Permissions/allow_chat", + QString(ui->checkBoxChat->isChecked() ? "T" : "F")); + ifaceDBus_->setConfigValue("Permissions/allow_filetransfer", + QString(ui->checkBoxFileTransfer->isChecked() ? "T" : "F")); +} + +void Dialog::on_comboBoxLecturer_currentIndexChanged(int index) +{ + // TODO: may others have more access than lecturer? + if (index < ui->comboBoxOthers->currentIndex()) { + ui->comboBoxOthers->setCurrentIndex(index); + } +} + +void Dialog::on_comboBoxOthers_currentIndexChanged(int index) +{ + // TODO: may others have more access than lecturer? + if (index > ui->comboBoxLecturer->currentIndex()) { + ui->comboBoxLecturer->setCurrentIndex(index); + } + +} diff --git a/src/dialog.h b/src/dialog.h index f452c61..e4d87e9 100644 --- a/src/dialog.h +++ b/src/dialog.h @@ -6,6 +6,7 @@ #include <QList> #include "session.h" #include "sessiontreemodel.h" +#include "pvsinterface.h" namespace Ui { class Dialog; @@ -24,8 +25,13 @@ protected: private: Ui::Dialog *ui; SessionTreeModel *model_; + OrgOpenslxPvsInterface *ifaceDBus_; + void readPVSSettings(); + void writePVSSettings(); private slots: + void on_comboBoxOthers_currentIndexChanged(int index); + void on_comboBoxLecturer_currentIndexChanged(int index); void on_pushButtonStart_clicked(); void on_pushButtonAbort_clicked(); void on_treeView_activated(QModelIndex index); diff --git a/src/org.openslx.pvs.xml b/src/org.openslx.pvs.xml new file mode 100644 index 0000000..382e825 --- /dev/null +++ b/src/org.openslx.pvs.xml @@ -0,0 +1,85 @@ +<!DOCTYPE node PUBLIC "-//freedesktop//DTD D-BUS Object Introspection 1.0//EN" "http://www.freedesktop.org/standards/dbus/1.0/introspect.dtd"> +<node> + <interface name="org.openslx.pvs"> + <signal name="project"> + <arg name="host" type="s" direction="out"/> + <arg name="port" type="i" direction="out"/> + <arg name="passwd" type="s" direction="out"/> + <arg name="fullscreen" type="b" direction="out"/> + <arg name="smoothTransformation" type="b" direction="out"/> + <arg name="quality" type="i" direction="out"/> + </signal> + <signal name="unproject"> + </signal> + <signal name="chat_receive"> + <arg name="nick_from" type="s" direction="out"/> + <arg name="nick_to" type="s" direction="out"/> + <arg name="msg" type="s" direction="out"/> + </signal> + <signal name="chat_client_add"> + <arg name="nick" type="s" direction="out"/> + </signal> + <signal name="chat_client_remove"> + <arg name="nick" type="s" direction="out"/> + </signal> + <signal name="showMessage"> + <arg name="title" type="s" direction="out"/> + <arg name="msg" type="s" direction="out"/> + <arg name="useDialog" type="b" direction="out"/> + </signal> + <signal name="connected"> + <arg name="host" type="s" direction="out"/> + </signal> + <signal name="disconnected"> + </signal> + <signal name="addHost"> + <arg name="host" type="s" direction="out"/> + </signal> + <signal name="delHost"> + <arg name="host" type="s" direction="out"/> + </signal> + <method name="start"> + <arg type="b" direction="out"/> + </method> + <method name="quit"> + </method> + <method name="chat_send"> + <arg name="nick_to" type="s" direction="in"/> + <arg name="nick_from" type="s" direction="in"/> + <arg name="msg" type="s" direction="in"/> + </method> + <method name="chat_getNickname"> + <arg type="s" direction="out"/> + </method> + <method name="chat_getNicknames"> + <arg type="as" direction="out"/> + </method> + <method name="fileChanged"> + <arg name="path" type="s" direction="in"/> + </method> + <method name="pvsConnect"> + <arg name="host" type="s" direction="in"/> + <arg name="passwd" type="s" direction="in"/> + </method> + <method name="pvsDisconnect"> + </method> + <method name="isConnected"> + <arg type="s" direction="out"/> + </method> + <method name="getAvailableHosts"> + <arg type="as" direction="out"/> + </method> + <method name="getIpByNick"> + <arg type="s" direction="out"/> + <arg name="nick" type="s" direction="in"/> + </method> + <method name="setConfigValue"> + <arg name="key" type="s" direction="in"/> + <arg name="value" type="s" direction="in"/> + </method> + <method name="getConfigValue"> + <arg type="s" direction="out"/> + <arg name="key" type="s" direction="in"/> + </method> + </interface> +</node> diff --git a/src/ui/dialog.ui b/src/ui/dialog.ui index 522ae55..fe03b5d 100644 --- a/src/ui/dialog.ui +++ b/src/ui/dialog.ui @@ -28,6 +28,107 @@ </widget> </item> <item> + <widget class="QGroupBox" name="PVSOptionsGroupBox"> + <property name="enabled"> + <bool>true</bool> + </property> + <property name="title"> + <string>PVS Options</string> + </property> + <layout class="QHBoxLayout" name="horizontalLayout"> + <item> + <layout class="QFormLayout" name="formLayout"> + <item row="0" column="0"> + <widget class="QLabel" name="labelLecturer"> + <property name="text"> + <string>VNC access by lecturer:</string> + </property> + </widget> + </item> + <item row="0" column="1"> + <widget class="QComboBox" name="comboBoxLecturer"> + <property name="sizePolicy"> + <sizepolicy hsizetype="Preferred" vsizetype="Fixed"> + <horstretch>0</horstretch> + <verstretch>0</verstretch> + </sizepolicy> + </property> + </widget> + </item> + <item row="1" column="0"> + <widget class="QLabel" name="labelOthers"> + <property name="text"> + <string>VNC access by others:</string> + </property> + </widget> + </item> + <item row="1" column="1"> + <widget class="QComboBox" name="comboBoxOthers"> + <property name="sizePolicy"> + <sizepolicy hsizetype="Preferred" vsizetype="Fixed"> + <horstretch>0</horstretch> + <verstretch>0</verstretch> + </sizepolicy> + </property> + </widget> + </item> + </layout> + </item> + <item> + <spacer name="horizontalSpacer_3"> + <property name="orientation"> + <enum>Qt::Horizontal</enum> + </property> + <property name="sizeHint" stdset="0"> + <size> + <width>40</width> + <height>20</height> + </size> + </property> + </spacer> + </item> + <item> + <widget class="Line" name="line"> + <property name="orientation"> + <enum>Qt::Vertical</enum> + </property> + </widget> + </item> + <item> + <layout class="QVBoxLayout" name="verticalLayout_2"> + <item> + <widget class="QCheckBox" name="checkBoxChat"> + <property name="text"> + <string>Accept chat messages</string> + </property> + </widget> + </item> + <item> + <widget class="QCheckBox" name="checkBoxFileTransfer"> + <property name="text"> + <string>Accept file transfers</string> + </property> + </widget> + </item> + </layout> + </item> + <item> + <spacer name="horizontalSpacer_2"> + <property name="orientation"> + <enum>Qt::Horizontal</enum> + </property> + <property name="sizeHint" stdset="0"> + <size> + <width>40</width> + <height>20</height> + </size> + </property> + </spacer> + </item> + </layout> + </widget> + </item> + <item> <layout class="QHBoxLayout" name="horizontalLayout"> <item> <spacer name="horizontalSpacer"> |