From 030d91e628a2ecd5634376c9c4d903a1fa0fb423 Mon Sep 17 00:00:00 2001 From: Nils Schwabe Date: Mon, 3 Mar 2014 15:14:20 +0100 Subject: added files from vmchooser1 --- src/dialog.cpp | 248 +++++++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 248 insertions(+) create mode 100644 src/dialog.cpp (limited to 'src/dialog.cpp') 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 +#include +#include +#include +#include +#include +#include + +#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(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& 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(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 <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; + } +} + -- cgit v1.2.3-55-g7522