summaryrefslogtreecommitdiffstats
path: root/src/dialog.cpp
diff options
context:
space:
mode:
authorNils Schwabe2014-03-03 15:14:20 +0100
committerNils Schwabe2014-03-03 15:14:20 +0100
commit030d91e628a2ecd5634376c9c4d903a1fa0fb423 (patch)
tree227029e3b48deb1d4d01ce497d9ec3b8d47f7a61 /src/dialog.cpp
parentInitial commit (diff)
downloadvmchooser2-030d91e628a2ecd5634376c9c4d903a1fa0fb423.tar.gz
vmchooser2-030d91e628a2ecd5634376c9c4d903a1fa0fb423.tar.xz
vmchooser2-030d91e628a2ecd5634376c9c4d903a1fa0fb423.zip
added files from vmchooser1
Diffstat (limited to 'src/dialog.cpp')
-rw-r--r--src/dialog.cpp248
1 files changed, 248 insertions, 0 deletions
diff --git a/src/dialog.cpp b/src/dialog.cpp
new file mode 100644
index 0000000..d758b0a
--- /dev/null
+++ b/src/dialog.cpp
@@ -0,0 +1,248 @@
+#include "dialog.h"
+
+#include <QMessageBox>
+#include <QDebug>
+#include <QRegExp>
+#include <QFile>
+#include <QProcess>
+#include <QTimer>
+#include <QDesktopWidget>
+
+#include "ui_dialog.h"
+#include "save_restore_session.h"
+#include "sessiontreeitem.h"
+#include "globals.h"
+
+Dialog::Dialog(QWidget *parent)
+ : QDialog(parent), ui(new Ui::Dialog) {
+ model_ = new SessionTreeModel(parent);
+ ui->setupUi(this);
+
+ pvsSettings_ = NULL;
+ ui->PVSOptionsGroupBox->hide();
+
+ // Re-center dialog every second to account for resolution changes
+ QRect desktopRect = QApplication::desktop()->availableGeometry(this);
+ oldCenter_ = desktopRect.center();
+ centerTimer_ = new QTimer(this);
+ connect(centerTimer_, SIGNAL(timeout()), this, SLOT(on_centerTimer()));
+ centerTimer_->start(1000);
+}
+
+Dialog::~Dialog() {
+ delete ui;
+ delete model_;
+}
+
+void Dialog::changeEvent(QEvent *e) {
+ QDialog::changeEvent(e);
+ switch (e->type()) {
+ case QEvent::LanguageChange:
+ ui->retranslateUi(this);
+ break;
+ default:
+ break;
+ }
+}
+
+void Dialog::on_treeView_activated(QModelIndex index) {
+ // this method gets called when a Session has been activated
+
+ SessionTreeItem* item =
+ static_cast<SessionTreeItem*>(index.internalPointer());
+
+ const Session* s(item->session());
+ if (!s) {
+ // no valid session has been selected, do nothing
+ return;
+ }
+
+ // Run session start script
+ if (QFile::exists(sessionStartScript)) {
+ QProcess scriptProcess;
+ scriptProcess.start(sessionStartScript, QIODevice::ReadOnly);
+ scriptProcess.waitForFinished();
+ scriptProcess.close();
+ }
+
+ if (s->run()) {
+ writePVSSettings();
+ writeSessionName(s->shortDescription());
+ setVisible(false);
+
+ } else {
+ QMessageBox::warning(
+ this, trUtf8("vmchooser"),
+ trUtf8("Vmchooser failed to run the selected session!"));
+ }
+}
+
+void Dialog::addItems(const QList<Session*>& entries, const QString& section) {
+ this->model_->addItems(entries, section);
+ ui->treeView->setModel(model_);
+ ui->treeView->expandAll();
+}
+
+void Dialog::on_pushButtonAbort_clicked() {
+ close();
+}
+
+void Dialog::on_pushButtonStart_clicked() {
+ this->on_treeView_activated(ui->treeView->selectionModel()->currentIndex());
+}
+
+void Dialog::readPVSSettings() {
+ if (!pvsSettings_) return;
+ QString value;
+
+ value = pvsSettings_->value("Permissions/vnc_lecturer").toString();
+ if (value == "rw") {
+ ui->comboBoxLecturer->setCurrentIndex(2);
+ } else if (value == "ro") {
+ ui->comboBoxLecturer->setCurrentIndex(1);
+ } else {
+ ui->comboBoxLecturer->setCurrentIndex(0);
+ }
+
+ value = pvsSettings_->value("Permissions/vnc_other").toString();
+ if (value == "rw") {
+ ui->comboBoxOthers->setCurrentIndex(2);
+ } else if (value == "ro") {
+ ui->comboBoxOthers->setCurrentIndex(1);
+ } else {
+ ui->comboBoxOthers->setCurrentIndex(0);
+ }
+}
+
+void Dialog::writePVSSettings() {
+ if (!pvsSettings_) return;
+ int accessLecturer = ui->comboBoxLecturer->currentIndex();
+ if (accessLecturer == 2) {
+ pvsSettings_->setValue("Permissions/vnc_lecturer", "rw");
+ } else if (accessLecturer == 1) {
+ pvsSettings_->setValue("Permissions/vnc_lecturer", "ro");
+ } else {
+ pvsSettings_->setValue("Permissions/vnc_lecturer", "no");
+ }
+
+ int accessOthers = ui->comboBoxOthers->currentIndex();
+ if (accessOthers == 2) {
+ pvsSettings_->setValue("Permissions/vnc_other", "rw");
+ } else if (accessOthers == 1) {
+ pvsSettings_->setValue("Permissions/vnc_other", "ro");
+ } else {
+ pvsSettings_->setValue("Permissions/vnc_other", "no");
+ }
+ pvsSettings_->sync();
+}
+
+void Dialog::on_comboBoxLecturer_currentIndexChanged(int index) {
+ // TODO (Jan): may others have more access than lecturer?
+ if (index < ui->comboBoxOthers->currentIndex()) {
+ ui->comboBoxOthers->setCurrentIndex(index);
+ }
+}
+
+void Dialog::on_comboBoxOthers_currentIndexChanged(int index) {
+ // TODO (Jan): may others have more access than lecturer?
+ if (index > ui->comboBoxLecturer->currentIndex()) {
+ ui->comboBoxLecturer->setCurrentIndex(index);
+ }
+}
+
+bool Dialog::selectSession(const QString& name) {
+ QModelIndex root(ui->treeView->rootIndex());
+
+ for (int i = 0; i < model_->rowCount(root); ++i) {
+ QModelIndex section = model_->index(i, 0, root);
+ if (!section.isValid()) break;
+ for (int row = 0; row < model_->rowCount(section); ++row) {
+ QModelIndex index = model_->index(row, 0, section);
+ if (!index.isValid()) break;
+
+ SessionTreeItem* item =
+ static_cast<SessionTreeItem*>(index.internalPointer());
+ const Session* s(item->session());
+ if (!s) continue;
+ if (s->shortDescription() == name) {
+ ui->treeView->selectionModel()
+ ->setCurrentIndex(index, QItemSelectionModel::Select);
+ return true;
+ }
+ }
+ }
+ return false;
+}
+
+void Dialog::selectPreviousSession() {
+ selectSession(readSessionName());
+}
+
+void Dialog::startSession(const QString& name) {
+ autoStartEntry_ = name;
+}
+
+void Dialog::showSettingsPVS() {
+ pvsSettings_ = new QSettings("openslx", "pvs", this);
+ QStringList accessOptions;
+ accessOptions <<trUtf8("None") << trUtf8("View Only") << trUtf8("Full");
+ ui->comboBoxLecturer->insertItems(0, accessOptions);
+ ui->comboBoxOthers->insertItems(0, accessOptions);
+ readPVSSettings();
+ ui->PVSOptionsGroupBox->show();
+}
+
+void Dialog::setTheme() {
+ QString label_l_style, label_r_style;
+ QString backgroundColor, imageLeft, imageRight;
+ QString themePathBase, themePathIni, themePathImgLeft, themePathImgRight;
+
+ if (theme.isEmpty()) return;
+
+ themePathBase = QString("%1/%2/").arg(VMCHOOSER_THEME_BASE).arg(theme);
+ themePathIni = QString("%1%2.ini").arg(themePathBase).arg(theme);
+
+ if (!QFile::exists(themePathIni)) return;
+
+
+ QSettings themeSettings(themePathIni, QSettings::IniFormat);
+ backgroundColor = themeSettings.value("background-color").toString();
+ imageLeft = themeSettings.value("image-left").toString();
+ imageRight = themeSettings.value("image-right").toString();
+
+ themePathImgLeft = QString("%1%2").arg(themePathBase).arg(imageLeft);
+ themePathImgRight = QString("%1%2").arg(themePathBase).arg(imageRight);
+
+ QRegExp re;
+
+ ui->label_l->setPixmap(QPixmap(themePathImgLeft));
+ ui->label_r->setPixmap(QPixmap(themePathImgRight));
+ label_l_style = ui->label_l->styleSheet();
+ label_r_style = ui->label_r->styleSheet();
+ backgroundColor.prepend("\\1").append("\\2");
+ label_l_style.replace(QRegExp("(.*background-color:)#[^;]*(;.*)"), backgroundColor);
+ label_r_style.replace(QRegExp("(.*background-color:)#[^;]*(;.*)"), backgroundColor);
+ //qDebug() << label_r_style << label_l_style;
+ ui->label_l->setStyleSheet(label_l_style);
+ ui->label_r->setStyleSheet(label_r_style);
+}
+
+void Dialog::on_centerTimer() {
+ if (!autoStartEntry_.isEmpty()) {
+ if (this->selectSession(autoStartEntry_)) {
+ this->on_treeView_activated(ui->treeView->selectionModel()->currentIndex());
+ } else {
+ QMessageBox::critical(this, "Autostart", QString::fromUtf8("Konnte %1 nicht starten.").arg(autoStartEntry_));
+ }
+ autoStartEntry_.clear();
+ return;
+ }
+ // center dialog on primary screen
+ QRect desktopRect = QApplication::desktop()->availableGeometry(this);
+ QPoint center = desktopRect.center();
+ if (center != oldCenter_) {
+ this->move(center.x() - this->width() / 2, center.y() - this->height() / 2);
+ oldCenter_ = center;
+ }
+}
+