From 9e2c4cb927b9fc9e6b1451c9f0fd63ae404f7a08 Mon Sep 17 00:00:00 2001
From: Matthias Koefferlein
Date: Sun, 26 Mar 2017 01:02:40 +0100
Subject: [PATCH] WIP: marked mode, update required message
---
src/lay/SaltManagerDialog.ui | 15 +++++--
src/lay/images/marked_16.png | Bin 0 -> 889 bytes
src/lay/images/marked_24.png | Bin 0 -> 1452 bytes
src/lay/images/marked_64.png | Bin 0 -> 3353 bytes
src/lay/layResources.qrc | 3 ++
src/lay/laySaltManagerDialog.cc | 61 ++++++++++++++++++++++----
src/lay/laySaltManagerDialog.h | 5 +++
src/lay/laySaltModel.cc | 73 ++++++++++++++++++++++++++------
src/lay/laySaltModel.h | 17 ++++++++
9 files changed, 147 insertions(+), 27 deletions(-)
create mode 100644 src/lay/images/marked_16.png
create mode 100644 src/lay/images/marked_24.png
create mode 100644 src/lay/images/marked_64.png
diff --git a/src/lay/SaltManagerDialog.ui b/src/lay/SaltManagerDialog.ui
index 9194d7715..a51993a12 100644
--- a/src/lay/SaltManagerDialog.ui
+++ b/src/lay/SaltManagerDialog.ui
@@ -17,7 +17,7 @@
-
- 0
+ 1
@@ -231,8 +231,8 @@
0
0
- 343
- 207
+ 537
+ 284
@@ -456,11 +456,18 @@
-
- Mark for installation
+ Mark or unmark for installation
Mark
+
+
+ :/marked_16.png:/marked_16.png
+
+
+ true
+
-
diff --git a/src/lay/images/marked_16.png b/src/lay/images/marked_16.png
new file mode 100644
index 0000000000000000000000000000000000000000..aa152411be8cfc02a42015b1b194db9e08d7321e
GIT binary patch
literal 889
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
literal 0
HcmV?d00001
diff --git a/src/lay/layResources.qrc b/src/lay/layResources.qrc
index 3ffd9e81e..52e7bc522 100644
--- a/src/lay/layResources.qrc
+++ b/src/lay/layResources.qrc
@@ -120,6 +120,9 @@
images/empty_16.png
images/error_16.png
images/info_16.png
+ images/marked_24.png
+ images/marked_64.png
+ images/marked_16.png
syntax/ruby.xml
diff --git a/src/lay/laySaltManagerDialog.cc b/src/lay/laySaltManagerDialog.cc
index 5ce7cd4eb..57ce3fbf5 100644
--- a/src/lay/laySaltManagerDialog.cc
+++ b/src/lay/laySaltManagerDialog.cc
@@ -155,19 +155,27 @@ SaltManagerDialog::SaltManagerDialog (QWidget *parent)
mp_salt = get_salt ();
mp_salt_mine = get_salt_mine ();
- SaltModel *model;
-
- model = new SaltModel (this, mp_salt);
+ SaltModel *model = new SaltModel (this, mp_salt);
salt_view->setModel (model);
salt_view->setItemDelegate (new SaltItemDelegate (this));
- model = new SaltModel (this, mp_salt_mine);
- salt_mine_view->setModel (model);
+ SaltModel *mine_model = new SaltModel (this, mp_salt_mine);
+ salt_mine_view->setModel (mine_model);
salt_mine_view->setItemDelegate (new SaltItemDelegate (this));
+ // Establish a message saying that an update is available
+ for (Salt::flat_iterator g = mp_salt->begin_flat (); g != mp_salt->end_flat (); ++g) {
+ SaltGrain *gm = mp_salt_mine->grain_by_name ((*g)->name ());
+ if (gm && SaltGrain::compare_versions (gm->version (), (*g)->version ()) > 0) {
+ model->set_message ((*g)->name (), tl::to_string (tr ("An update to version %1 is available").arg (tl::to_qstring (gm->version ()))));
+ mine_model->set_message ((*g)->name (), tl::to_string (tr ("The installed version is outdated (%1)").arg (tl::to_qstring ((*g)->version ()))));
+ }
+ }
+
mode_tab->setCurrentIndex (mp_salt->is_empty () ? 1 : 0);
connect (mode_tab, SIGNAL (currentChanged (int)), this, SLOT (mode_changed ()));
+
connect (mp_salt, SIGNAL (collections_changed ()), this, SLOT (salt_changed ()));
connect (mp_salt_mine, SIGNAL (collections_changed ()), this, SLOT (salt_mine_changed ()));
@@ -175,12 +183,14 @@ SaltManagerDialog::SaltManagerDialog (QWidget *parent)
salt_mine_changed ();
connect (salt_view->selectionModel (), SIGNAL (currentChanged (const QModelIndex &, const QModelIndex &)), this, SLOT (current_changed ()));
- connect (salt_mine_view->selectionModel (), SIGNAL (currentChanged (const QModelIndex &, const QModelIndex &)), this, SLOT (mine_current_changed ()));
+ connect (salt_mine_view->selectionModel (), SIGNAL (currentChanged (const QModelIndex &, const QModelIndex &)), this, SLOT (mine_current_changed ()), Qt::QueuedConnection);
search_installed_edit->set_clear_button_enabled (true);
search_new_edit->set_clear_button_enabled (true);
connect (search_installed_edit, SIGNAL (textChanged (const QString &)), this, SLOT (search_text_changed (const QString &)));
connect (search_new_edit, SIGNAL (textChanged (const QString &)), this, SLOT (search_text_changed (const QString &)));
+
+ connect (mark_button, SIGNAL (clicked ()), this, SLOT (mark_clicked ()));
}
void
@@ -233,6 +243,21 @@ SaltManagerDialog::search_text_changed (const QString &text)
}
}
+void
+SaltManagerDialog::mark_clicked ()
+{
+ SaltModel *model = dynamic_cast (salt_mine_view->model ());
+ if (! model) {
+ return;
+ }
+ SaltGrain *g = mine_current_grain ();
+ if (! g) {
+ return;
+ }
+
+ model->set_marked (g->name (), !model->is_marked (g->name ()));
+}
+
void
SaltManagerDialog::edit_properties ()
{
@@ -379,6 +404,7 @@ SaltManagerDialog::salt_mine_changed ()
void
SaltManagerDialog::mine_current_changed ()
{
+
BEGIN_PROTECTED
SaltGrain *g = mine_current_grain ();
@@ -398,6 +424,22 @@ BEGIN_PROTECTED
throw tl::Exception (tl::to_string (tr ("No download link available")));
}
+ QString text = tr (
+ ""
+ ""
+ ""
+ "
Fetching Package Definition ...
"
+ "URL: %1
"
+ ""
+ ""
+ ""
+ )
+ .arg (tl::to_qstring (SaltGrain::spec_url (g->url ())));
+
+ details_new_text->setHtml (text);
+
+ QApplication::processEvents (QEventLoop::ExcludeUserInputEvents);
+
tl::InputHttpStream http (SaltGrain::spec_url (g->url ()));
tl::InputStream stream (http);
@@ -422,9 +464,10 @@ BEGIN_PROTECTED
""
""
""
- "Error Fetching Package Definition
"
- "URL: %1
"
- "Error: %2
"
+ "Error Fetching Package Definition
"
+ "URL: %1
"
+ "Error: %2
"
+ ""
""
""
)
diff --git a/src/lay/laySaltManagerDialog.h b/src/lay/laySaltManagerDialog.h
index 68576602a..6a5068217 100644
--- a/src/lay/laySaltManagerDialog.h
+++ b/src/lay/laySaltManagerDialog.h
@@ -75,6 +75,11 @@ private slots:
*/
void edit_properties ();
+ /**
+ * @brief Called when the "mark" button is pressed
+ */
+ void mark_clicked ();
+
/**
* @brief Called when the "edit" button is pressed
*/
diff --git a/src/lay/laySaltModel.cc b/src/lay/laySaltModel.cc
index ded796c86..57dd44212 100644
--- a/src/lay/laySaltModel.cc
+++ b/src/lay/laySaltModel.cc
@@ -120,6 +120,12 @@ SaltModel::data (const QModelIndex &index, int role) const
text += tl::escaped_to_html (g->doc ());
text += "
";
}
+
+ std::map::const_iterator m = m_messages.find (g->name ());
+ if (m != m_messages.end ()) {
+ text += "" + tl::escaped_to_html (m->second) + "
";
+ }
+
text += "