From 8e6f79403ff5242dc4b4e547d2eeb6a75766894a Mon Sep 17 00:00:00 2001 From: Max Christian Pohle Date: Mon, 23 Nov 2015 04:34:28 +0100 Subject: various changes gui improvements generic programming bug fixes --- mainwindow.cpp | 114 +++++++++++++++++++++++++++++++++++++++++++++------------ 1 file changed, 91 insertions(+), 23 deletions(-) (limited to 'mainwindow.cpp') diff --git a/mainwindow.cpp b/mainwindow.cpp index 55a9769..9385cd6 100644 --- a/mainwindow.cpp +++ b/mainwindow.cpp @@ -15,9 +15,9 @@ MainWindow::MainWindow(QWidget *parent) : this->qsystemtrayicon->setContextMenu(ui->menuMenu1); this->qsystemtrayicon->setToolTip(this->windowTitle()); this->connect(this->qsystemtrayicon, SIGNAL(activated(QSystemTrayIcon::ActivationReason)), this, SLOT(slotActivated(QSystemTrayIcon::ActivationReason))); - this->updateStatus(); - this->updateSpaceList(); + this->updateSpaceList(); + this->updateStatus(); this->timer = new QTimer(); @@ -25,10 +25,15 @@ MainWindow::MainWindow(QWidget *parent) : // update every five minutes... this->timer->start(60000 * 5); + //this->pixmap = new QPixmap(120, 120); + //this->currentIcon = new QIcon(this->pixmap); } MainWindow::~MainWindow() { + qDebug() << "unloading application"; + delete this->qsystemtrayicon; + delete this->timer; delete ui; } @@ -40,6 +45,7 @@ void MainWindow::updateSpaceList() QUrl url("http://spaceapi.net/directory.json"); QJsonObject json = QJsonDocument::fromJson(this->download(url)).object(); + ui->comboBox->setDisabled(true); QJsonObject::Iterator it; for(it=json.begin(); it!=json.end(); it++) { @@ -48,7 +54,18 @@ void MainWindow::updateSpaceList() if(it.key() == defaultSpace) ui->comboBox->setCurrentIndex(ui->comboBox->count()-1); } + ui->comboBox->setDisabled(false); +} +QJsonObject json_find(QJsonObject json, QStringList list) +{ + QJsonObject retval = json; + foreach(const QString str, list) + if(retval.contains(str)) + retval = retval[str].toObject(); + else + return QJsonObject(); + return retval; } // lets not talk about memory leaks. yes, they are there. but it works somehow. @@ -59,14 +76,60 @@ void MainWindow::updateStatus() ui->label_url_json->setText(ui->comboBox->currentData().toString()); QUrl url(ui->comboBox->currentData().toString()); - QByteArray rawData = this->download(url); - //qDebug() << rawData; - QJsonDocument doc = QJsonDocument::fromJson(rawData); - ui->plainTextEdit->setPlainText(doc.toJson(QJsonDocument::Indented)); + QJsonDocument doc = QJsonDocument::fromJson(this->download(url)); + //ui->plainTextEdit->setPlainText(doc.toJson(QJsonDocument::Indented)); //qDebug() << doc.toJson(QJsonDocument::Indented); QJsonObject json = doc.object(); + + foreach (QLabel *label, this->findChildren()) + { + if(label->statusTip().isEmpty()) + continue; + + label->clear(); + //label->setText(""); + QStringList list = label->statusTip().split("/"); + QString name = list.takeLast(); + + + QJsonObject obj = json_find(json, list); + if(!obj.isEmpty()) + { + if(obj.value(name).isString()) + { + QString result = obj.value(name).toString(); + if(name == "logo" || result.endsWith(".png") || result.endsWith(".jpg")) + { + label->setPixmap( + QPixmap::fromImage( + QImage::fromData( + this->download( + QUrl(result)))).scaled(120, 120, Qt::KeepAspectRatio)); + } + else if(result.contains("http")) + { + label->setText("" + name + ":
" + result + " "); + label->setOpenExternalLinks(true); + } + else + label->setText("" + name + ":
" + result); + } + else + { + if(obj.value(name).isBool()) + label->setText("" + name + ":
" + (obj.value(name).toBool() ? "true" : "false")); + else if(name == "lastchange") + label->setText("" + name + ":
" + QDateTime::fromTime_t(obj.value(name).toInt()).toLocalTime().toString()); + } + + } + + qDebug() << "NAME: " << name; + } + QString strUrl; + strUrl = json["state"].toObject() ["icon"].toObject() [json["state"].toObject()["open"].toBool() ? "open" : "closed"].toString(); @@ -77,18 +140,22 @@ void MainWindow::updateStatus() qDebug() << "downloading: " << strUrl; - this->imageArray = this->download(QUrl(strUrl)); - //qDebug("test: " + imageArray.size()); - QImage image = QImage::fromData(imageArray); - - this->currentIcon = new QIcon(QPixmap::fromImage(image)); - this->qsystemtrayicon->setIcon(*currentIcon); - - //QPixmap* pixmap = new QPixmap("/home/max/folder.png"); - QUrl logoURL(json["logo"].toString()); - //qDebug() << "logo: " << logoURL.toString(); - QPixmap pixmap = QPixmap::fromImage(QImage::fromData(this->download(logoURL))); - ui->label_icon->setPixmap(pixmap.scaled(120, 120, Qt::KeepAspectRatio)); + this->qsystemtrayicon->setIcon(QIcon( + QPixmap::fromImage( + QImage::fromData( + this->download( + QUrl(strUrl)))).scaled(120, 120, Qt::KeepAspectRatio))); + + if(this->qsystemtrayicon->icon().isNull()) + { + if(json["state"].toObject().contains("open")) + if(json["state"].toObject()["open"].toBool()) + this->qsystemtrayicon->setIcon(QIcon::fromTheme("face-smile")); + else + this->qsystemtrayicon->setIcon(QIcon::fromTheme("face-sad")); + else + this->qsystemtrayicon->setIcon(QIcon::fromTheme("face-sick")); + } } void MainWindow::saveSettings() @@ -96,8 +163,6 @@ void MainWindow::saveSettings() this->qsettings.setValue("hackerspace", ui->comboBox->currentText()); } - - QByteArray MainWindow::download(QUrl url) { qDebug() << "downloading: " << url.toString(); @@ -164,14 +229,17 @@ void MainWindow::slotActivated(QSystemTrayIcon::ActivationReason reason) void MainWindow::exitApplication() { qDebug() << "exit now!"; - exit(0); + QApplication::quit(); } void MainWindow::on_comboBox_currentIndexChanged(const QString &arg1) { qDebug() << arg1; - this->updateStatus(); - this->saveSettings(); + if(ui->comboBox->isEnabled()) + { + this->updateStatus(); + this->saveSettings(); + } } -- cgit v1.2.3