On 22/01/2018 17:37, Ken Brown wrote:
If the solver found no problems but added packages to resolve
dependencies, ask the user whether they want to review the added
packages before proceeding.
If they answer Yes, go back to the chooser with the 'Pending' view
selected. The implementation adds several new members to the
PrereqChecker class so that the latter can communicate with the
chooser page.
As discussed, this approach could be confusing.
Attached is a slightly different approach, which adds a new page to
review and confirm what actions we're going to take.
For the moment, this just contains a simple text report, but I guess
this could be extended e.g. to use a grid control, or give reasons for
why packages are being installed.
From f73030816b16d9dbcb0ed13ce84ee6c7914d8c3e Mon Sep 17 00:00:00 2001
From: Jon Turney <jon.tur...@dronecode.org.uk>
Date: Tue, 23 Jan 2018 17:50:13 +0000
Subject: [PATCH setup] Add a new page to let the user review and confirm
actions
Add a new page to let the user review and confirm actions, after
dependencies have been added and problems solved.
Ideally, this would re-use the picker-page grid to present these actions,
but for the moment just write it as text (as we did before in the prereq
page) (This is still a slight improvement as it shows all actions for
review, not just the ones added by the solver)
---
Makefile.am | 2 +
confirm.cc | 137 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
confirm.h | 34 +++++++++++++++
main.cc | 4 ++
prereq.cc | 41 ++----------------
prereq.h | 2 -
res.rc | 16 +++++++
resource.h | 2 +
8 files changed, 199 insertions(+), 39 deletions(-)
create mode 100644 confirm.cc
create mode 100644 confirm.h
diff --git a/Makefile.am b/Makefile.am
index db8d070..37341b9 100644
--- a/Makefile.am
+++ b/Makefile.am
@@ -119,6 +119,8 @@ inilint_SOURCES = \
compress_gz.h \
compress_xz.cc \
compress_xz.h \
+ confirm.cc \
+ confirm.h \
ConnectionSetting.cc \
ConnectionSetting.h \
ControlAdjuster.cc \
diff --git a/confirm.cc b/confirm.cc
new file mode 100644
index 0000000..7f8f5da
--- /dev/null
+++ b/confirm.cc
@@ -0,0 +1,137 @@
+/*
+ * Copyright (c) 2018
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * A copy of the GNU General Public License can be found at
+ * http://www.gnu.org/
+ *
+ */
+
+#include "confirm.h"
+#include "threebar.h"
+#include "resource.h"
+#include "state.h"
+#include "ControlAdjuster.h"
+#include "package_db.h"
+#include "package_meta.h"
+
+extern ThreeBarProgressPage Progress;
+
+// Sizing information.
+static ControlAdjuster::ControlInfo ConfirmControlsInfo[] = {
+ {IDC_CONFIRM_EDIT, CP_STRETCH, CP_STRETCH},
+ {0, CP_LEFT, CP_TOP}
+};
+
+// ---------------------------------------------------------------------------
+// implements class ConfirmPage
+// ---------------------------------------------------------------------------
+
+ConfirmPage::ConfirmPage ()
+{
+ sizeProcessor.AddControlInfo (ConfirmControlsInfo);
+}
+
+bool
+ConfirmPage::Create ()
+{
+ return PropertyPage::Create (IDD_CONFIRM);
+}
+
+void
+ConfirmPage::OnInit ()
+{
+ // set the edit-area to a larger font
+ SetDlgItemFont(IDC_CONFIRM_EDIT, "MS Shell Dlg", 10);
+}
+
+void
+ConfirmPage::OnActivate()
+{
+ // generate a report on actions we're going to take
+ std::string s = "";
+
+ // first list things we will erase
+ packagedb db;
+ const SolverTransactionList & trans = db.solution.transactions ();
+ for (SolverTransactionList::const_iterator i = trans.begin ();
+ i != trans.end (); i++)
+ {
+ if (i->type == SolverTransaction::transErase)
+ {
+ packageversion pv = i->version;
+ packagemeta *pkg = db.findBinary (PackageSpecification (pv.Name
()));
+
+ s += "Uninstall ";
+ s += i->version.Name();
+ s += " ";
+ s += i->version.Canonical_version();
+ if (pkg->desired)
+ s += " (automatically added)";
+ s += "\r\n";
+ }
+ }
+
+ // then list things installed
+ for (SolverTransactionList::const_iterator i = trans.begin ();
+ i != trans.end (); i++)
+ {
+ packageversion pv = i->version;
+ packagemeta *pkg = db.findBinary (PackageSpecification (pv.Name ()));
+
+ if (i->type == SolverTransaction::transInstall)
+ {
+ s += "Install ";
+ s += i->version.Name();
+ s += " ";
+ s += i->version.Canonical_version();
+ if (!pkg->desired)
+ s += " (automatically added)";
+ s += "\r\n";
+ }
+ }
+
+ SetDlgItemText (GetHWND (), IDC_CONFIRM_EDIT, s.c_str ());
+
+ // move focus to 'next' button, so enter doesn't get eaten by edit control
+ HWND nextButton = ::GetDlgItem(::GetParent(GetHWND()), 0x3024 /* ID_WIZNEXT
*/);
+ PostMessage (GetHWND (), WM_NEXTDLGCTL, (WPARAM)nextButton, TRUE);
+}
+
+long
+ConfirmPage::OnNext ()
+{
+ return whatNext();
+}
+
+long
+ConfirmPage::whatNext ()
+{
+ if (source == IDC_SOURCE_LOCALDIR)
+ {
+ // Next, install
+ Progress.SetActivateTask (WM_APP_START_INSTALL);
+ }
+ else
+ {
+ // Next, start download from internet
+ Progress.SetActivateTask (WM_APP_START_DOWNLOAD);
+ }
+ return IDD_INSTATUS;
+}
+
+long
+ConfirmPage::OnBack ()
+{
+ return IDD_CHOOSE;
+}
+
+long
+ConfirmPage::OnUnattended ()
+{
+ return whatNext();
+}
diff --git a/confirm.h b/confirm.h
new file mode 100644
index 0000000..fe11ee0
--- /dev/null
+++ b/confirm.h
@@ -0,0 +1,34 @@
+/*
+ * Copyright (c) 2018
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * A copy of the GNU General Public License can be found at
+ * http://www.gnu.org/
+ *
+ */
+
+#ifndef SETUP_CONFIRM_H
+#define SETUP_CONFIRM_H
+
+#include "proppage.h"
+
+class ConfirmPage:public PropertyPage
+{
+public:
+ ConfirmPage ();
+ virtual ~ConfirmPage () { };
+ bool Create ();
+ virtual void OnInit ();
+ virtual void OnActivate ();
+ virtual long OnNext ();
+ virtual long OnBack ();
+ virtual long OnUnattended ();
+private:
+ long whatNext ();
+};
+
+#endif /* SETUP_CONFIRM_H */
diff --git a/main.cc b/main.cc
index 028f8de..2e57f94 100644
--- a/main.cc
+++ b/main.cc
@@ -55,6 +55,7 @@
#include "site.h"
#include "choose.h"
#include "prereq.h"
+#include "confirm.h"
#include "threebar.h"
#include "desktop.h"
#include "postinstallresults.h"
@@ -135,6 +136,7 @@ main_display ()
SitePage Site;
ChooserPage Chooser;
PrereqPage Prereq;
+ ConfirmPage Confirm;
DesktopSetupPage Desktop;
PropSheet MainWindow;
@@ -175,6 +177,7 @@ main_display ()
Site.Create ();
Chooser.Create ();
Prereq.Create ();
+ Confirm.Create ();
Progress.Create ();
PostInstallResults.Create ();
Desktop.Create ();
@@ -189,6 +192,7 @@ main_display ()
MainWindow.AddPage (&Site);
MainWindow.AddPage (&Chooser);
MainWindow.AddPage (&Prereq);
+ MainWindow.AddPage (&Confirm);
MainWindow.AddPage (&Progress);
MainWindow.AddPage (&PostInstallResults);
MainWindow.AddPage (&Desktop);
diff --git a/prereq.cc b/prereq.cc
index effa7cc..8fcd3ba 100644
--- a/prereq.cc
+++ b/prereq.cc
@@ -13,26 +13,14 @@
*
*/
-#include "win32.h"
-#include <commctrl.h>
-#include <stdio.h>
-#include <io.h>
-#include <ctype.h>
-#include <process.h>
-#include <queue>
-
#include "prereq.h"
-#include "dialog.h"
#include "resource.h"
#include "state.h"
-#include "propsheet.h"
#include "threebar.h"
-#include "Generic.h"
#include "LogSingleton.h"
#include "ControlAdjuster.h"
#include "package_db.h"
-#include "package_meta.h"
-#include "msg.h"
+
#include "Exception.h"
#include "getopt++/BoolOption.h"
@@ -120,23 +108,7 @@ PrereqPage::OnNext ()
PrereqChecker p;
p.finalize();
- return whatNext();
-}
-
-long
-PrereqPage::whatNext ()
-{
- if (source == IDC_SOURCE_LOCALDIR)
- {
- // Next, install
- Progress.SetActivateTask (WM_APP_START_INSTALL);
- }
- else
- {
- // Next, start download from internet
- Progress.SetActivateTask (WM_APP_START_DOWNLOAD);
- }
- return IDD_INSTATUS;
+ return IDD_CONFIRM;
}
long
@@ -160,7 +132,7 @@ PrereqPage::OnUnattended ()
if (unattended_mode == chooseronly)
return -1;
- return whatNext();
+ return IDD_CONFIRM;
}
// ---------------------------------------------------------------------------
@@ -233,12 +205,7 @@ do_prereq_check_thread(HINSTANCE h, HWND owner)
if (p.isMet ())
{
p.finalize();
-
- if (source == IDC_SOURCE_LOCALDIR)
- Progress.SetActivateTask (WM_APP_START_INSTALL); // install
- else
- Progress.SetActivateTask (WM_APP_START_DOWNLOAD); // start download
- retval = IDD_INSTATUS;
+ retval = IDD_CONFIRM;
}
else
{
diff --git a/prereq.h b/prereq.h
index 24e6de5..749d3eb 100644
--- a/prereq.h
+++ b/prereq.h
@@ -27,8 +27,6 @@ public:
virtual long OnNext ();
virtual long OnBack ();
virtual long OnUnattended ();
-private:
- long whatNext ();
};
class PrereqChecker
diff --git a/res.rc b/res.rc
index 3881f14..745b396 100644
--- a/res.rc
+++ b/res.rc
@@ -392,6 +392,22 @@ BEGIN
END
+IDD_CONFIRM DIALOG DISCARDABLE 0, 0, SETUP_STANDARD_DIALOG_DIMS
+STYLE DS_MODALFRAME | DS_3DLOOK | WS_CHILD | WS_VISIBLE | WS_CAPTION |
+ WS_SYSMENU
+CAPTION "Cygwin Setup - Review and confirm changes"
+FONT 8, "MS Shell Dlg"
+BEGIN
+ CONTROL "",IDC_HEADSEPARATOR,"Static",SS_BLACKFRAME | SS_SUNKEN,
+ 0,28,SETUP_STANDARD_DIALOG_W,1
+ ICON IDI_CYGWIN,IDC_HEADICON,SETUP_HEADICON_X,0,21,20
+ LTEXT "Review and confirm changes",IDC_STATIC_HEADER_TITLE
+ ,7,0,258,8,NOT WS_GROUP
+ EDITTEXT IDC_CONFIRM_EDIT,7,41,325,131,WS_VSCROLL | WS_HSCROLL |
+ ES_LEFT | ES_MULTILINE | ES_READONLY | ES_AUTOHSCROLL |
+ ES_AUTOVSCROLL
+END
+
IDD_DROPPED DIALOG DISCARDABLE 0, 0, SETUP_STANDARD_DIALOG_W, 142
STYLE DS_MODALFRAME | DS_CENTER | WS_POPUP | WS_CAPTION | WS_SYSMENU
CAPTION "Cygwin Setup - Use dropped mirrors?"
diff --git a/resource.h b/resource.h
index 5294e38..31e080f 100644
--- a/resource.h
+++ b/resource.h
@@ -69,6 +69,7 @@
#define IDD_POSTINSTALL 222
#define IDD_FILE_INUSE 223
#define IDD_DOWNLOAD_ERROR 224
+#define IDD_CONFIRM 225
// Bitmaps
@@ -181,3 +182,4 @@
#define IDC_DOWNLOAD_EDIT 594
#define IDC_CHOOSE_DO_SEARCH 595
#define IDC_CHOOSE_SYNC 596
+#define IDC_CONFIRM_EDIT 597
--
2.15.1