#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); } } void 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; } } } } void Dialog::selectPreviousSession() { selectSession(readSessionName()); } 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() { // 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; } }