From 56d213b3c8984ef033784e60fccf25d3cfbdbb13 Mon Sep 17 00:00:00 2001 From: Nils Schwabe Date: Fri, 7 Mar 2014 16:23:16 +0100 Subject: Added function to add info entries if the xml file could not be loaded --- src/dialog.cpp | 24 +++++++++++++++++++++++- src/dialog.h | 2 ++ src/i18n/de.ts | 10 ++++++++++ src/main.cpp | 3 +++ src/sessiontreeitem.cpp | 4 ++++ src/sessiontreeitem.h | 1 + src/sessiontreemodel.cpp | 47 +++++++++++++++++++++++++++++++++++++++++++++++ src/sessiontreemodel.h | 2 ++ 8 files changed, 92 insertions(+), 1 deletion(-) (limited to 'src') diff --git a/src/dialog.cpp b/src/dialog.cpp index 9367bf8..b48ff1b 100644 --- a/src/dialog.cpp +++ b/src/dialog.cpp @@ -84,6 +84,18 @@ void Dialog::addItems(const QList& entries, const QString& section) { ui->treeView->expandAll(); } +void Dialog::addLabelItem(const QString& label, const QString& section) { + this->model_->addLabelItem(label, section); + ui->treeView->setModel(model_); + ui->treeView->expandAll(); +} + +void Dialog::removeItem(const QString& name, const QString& section) { + this->model_->removeItem(name, section); + ui->treeView->setModel(model_); + ui->treeView->expandAll(); +} + void Dialog::on_pushButtonAbort_clicked() { close(); } @@ -262,6 +274,8 @@ void Dialog::addSessionsAfterDownload(QNetworkReply* reply) { if (debugMode) { qDebug() << "Cannot read backup file " << backup_filename << " either"; } + this->removeItem(QCoreApplication::instance()->translate("Dialog", "Loading..."),QCoreApplication::instance()->translate("Dialog", "Virtual Sessions")); + this->addLabelItem(QCoreApplication::instance()->translate("Dialog", "URL Error"), QCoreApplication::instance()->translate("Dialog", "Virtual Sessions")); return; } @@ -292,6 +306,14 @@ void Dialog::addSessionsAfterDownload(QNetworkReply* reply) { file.close(); } - this->addItems(VSession::readXmlFile(filename), QCoreApplication::instance()->translate("Dialog", "Virtual Sessions")); + const QList sessions = VSession::readXmlFile(filename); + + this->removeItem(QCoreApplication::instance()->translate("Dialog", "Loading..."),QCoreApplication::instance()->translate("Dialog", "Virtual Sessions")); + + if (!sessions.isEmpty()) { + this->addItems(sessions, QCoreApplication::instance()->translate("Dialog", "Virtual Sessions")); + } else { + this->addLabelItem(QCoreApplication::instance()->translate("Dialog", "No Items"), QCoreApplication::instance()->translate("Dialog", "Virtual Sessions")); + } } diff --git a/src/dialog.h b/src/dialog.h index 4627a8e..63f7c45 100644 --- a/src/dialog.h +++ b/src/dialog.h @@ -20,6 +20,8 @@ class Dialog : public QDialog { explicit Dialog(QWidget *parent = 0); ~Dialog(); void addItems(const QList&, const QString& section); + void addLabelItem(const QString& label, const QString& section); + void removeItem(const QString& name, const QString& section); bool selectSession(const QString& name); void selectPreviousSession(); void showSettingsPVS(); diff --git a/src/i18n/de.ts b/src/i18n/de.ts index b920b73..25ecae9 100644 --- a/src/i18n/de.ts +++ b/src/i18n/de.ts @@ -130,5 +130,15 @@ FILE can be a vmware .xml or an X .desktop file Virtual Sessions Virtuelle Sitzungen + + + Loading... + Laden... + + + + No Items + Keine Einträge + diff --git a/src/main.cpp b/src/main.cpp index 3c16e17..e9e8328 100644 --- a/src/main.cpp +++ b/src/main.cpp @@ -222,6 +222,9 @@ int main(int argc, char *argv[]) { qSort(xsessions.begin(), xsessions.end(), myLessThan); w.addItems(xsessions, a.translate("Dialog", "X Sessions")); } + + w.addLabelItem(a.translate("Dialog", "Loading..."), a.translate("Dialog", "Virtual Sessions")); + if (vsessions.size()) { if (!(QFile::permissions(runVmScript) & QFile::ExeUser)) { std::cerr << a.translate( diff --git a/src/sessiontreeitem.cpp b/src/sessiontreeitem.cpp index 45a4774..bdc3edf 100644 --- a/src/sessiontreeitem.cpp +++ b/src/sessiontreeitem.cpp @@ -17,6 +17,10 @@ void SessionTreeItem::appendChild(SessionTreeItem *item) { children_.append(item); } +void SessionTreeItem::removeChild(SessionTreeItem *item) { + children_.removeOne(item); +} + SessionTreeItem *SessionTreeItem::child(int row) { return children_.value(row); } diff --git a/src/sessiontreeitem.h b/src/sessiontreeitem.h index 77a1078..a95fb45 100644 --- a/src/sessiontreeitem.h +++ b/src/sessiontreeitem.h @@ -15,6 +15,7 @@ class SessionTreeItem { ~SessionTreeItem(); void appendChild(SessionTreeItem *child); + void removeChild(SessionTreeItem *child); SessionTreeItem *child(int row); int childCount() const; diff --git a/src/sessiontreemodel.cpp b/src/sessiontreemodel.cpp index 12eebf5..d63bab5 100644 --- a/src/sessiontreemodel.cpp +++ b/src/sessiontreemodel.cpp @@ -4,6 +4,7 @@ #include #include #include +#include #include "sessiontreeitem.h" @@ -160,3 +161,49 @@ void SessionTreeModel::addItems(const QList& sessions, parentItem->appendChild(new SessionTreeItem(s, parentItem)); } } + +void SessionTreeModel::addLabelItem(const QString& label, const QString& section) { + SessionTreeItem* parentItem; + + bool sectionExists = false; + + for (int i = 0; i < root_->childCount(); ++i) { + SessionTreeItem* item = root_->child(i); + if (item->text() == section) { + parentItem = item; + sectionExists = true; + break; + } + } + + if (!sectionExists) { + parentItem = new SessionTreeItem(section, root_); + root_->appendChild(parentItem); + } + + parentItem->appendChild(new SessionTreeItem(label, parentItem)); +} + +void SessionTreeModel::removeItem(const QString& name, const QString& section) { + SessionTreeItem* parentItem; + + bool sectionExists = false; + + for (int i = 0; i < root_->childCount(); ++i) { + SessionTreeItem* item = root_->child(i); + if (item->text() == section) { + parentItem = item; + sectionExists = true; + break; + } + } + + if (sectionExists) { + for (int i = 0; i < parentItem->childCount(); ++i) { + SessionTreeItem* item = parentItem->child(i); + if (item->text() == name) { + parentItem->removeChild(item); + } + } + } +} diff --git a/src/sessiontreemodel.h b/src/sessiontreemodel.h index b5d8ff8..a768bf1 100644 --- a/src/sessiontreemodel.h +++ b/src/sessiontreemodel.h @@ -26,6 +26,8 @@ class SessionTreeModel : public QAbstractItemModel { int columnCount(const QModelIndex &parent = QModelIndex()) const; void addItems(const QList& sessions, const QString& section); + void addLabelItem(const QString& label, const QString& section); + void removeItem(const QString& name, const QString& section); private: -- cgit v1.2.3-55-g7522