Index: choose.cc
===================================================================
RCS file: /cvs/cygwin-apps/setup/choose.cc,v
retrieving revision 2.142
diff -p -b -u -r2.142 choose.cc
--- choose.cc	9 Sep 2005 19:52:51 -0000	2.142
+++ choose.cc	12 Mar 2006 06:45:31 -0000
@@ -66,18 +66,39 @@ extern ThreeBarProgressPage Progress;
   Sizing information.
  */
 static ControlAdjuster::ControlInfo ChooserControlsInfo[] = {
-  {IDC_CHOOSE_KEEP, 		CP_RIGHT,   CP_TOP},
-  {IDC_CHOOSE_PREV, 		CP_RIGHT,   CP_TOP},
-  {IDC_CHOOSE_CURR, 		CP_RIGHT,   CP_TOP},
-  {IDC_CHOOSE_EXP, 		CP_RIGHT,   CP_TOP},
+  {IDC_SELECTION_LABEL,		CP_LEFT,   CP_TOP},
+  {IDC_CHOOSE_KEEP, 		CP_LEFT,   CP_TOP},
+  {IDC_CHOOSE_PREV, 		CP_LEFT,   CP_TOP},
+  {IDC_CHOOSE_CURR, 		CP_LEFT,   CP_TOP},
+  {IDC_CHOOSE_EXP, 		    CP_LEFT,   CP_TOP},
   {IDC_CHOOSE_VIEW, 		CP_RIGHT,   CP_TOP},
+  {IDC_CHOOSE_VIEW_LABEL,	CP_RIGHT,   CP_TOP},
   {IDC_LISTVIEW_POS, 		CP_RIGHT,   CP_TOP},
-  {IDC_CHOOSE_VIEWCAPTION,	CP_RIGHT,   CP_TOP},
   {IDC_CHOOSE_LIST,		CP_STRETCH, CP_STRETCH},
   {IDC_CHOOSE_HIDE,             CP_LEFT,    CP_BOTTOM},
   {0, CP_LEFT, CP_TOP}
 };
 
+/*
+  Combo box to view mode conversions.
+ */
+
+#define VIEWMODE_NAME_MAX   60
+
+static struct {
+    ULONG                   name_id;
+    const PickView::views   mode;
+    TCHAR                   name_string[VIEWMODE_NAME_MAX];
+} ChooserViewModes [] = {
+    {   IDS_VIEWMODE_CATEGORY,      PickView::views::Category,      { "Category"    }  },
+    {   IDS_VIEWMODE_FULL,          PickView::views::PackageFull,   { "Full"        }  },
+    {   IDS_VIEWMODE_PARTIAL,       PickView::views::Package,       { "Partial"     }  },
+    {   IDS_VIEWMODE_UP_TO_DATE,    PickView::views::PackageKeeps,  { "UpToDate"    }  },
+    {   IDS_VIEWMODE_NOT_INSTALLED, PickView::views::PackageSkips,  { "UnInstalled" }  },
+};
+
+static const int NumChooserViewModes = sizeof (ChooserViewModes) / sizeof (ChooserViewModes[0]);
+
 ChooserPage::ChooserPage ()
 {
   sizeProcessor.AddControlInfo (ChooserControlsInfo);
@@ -97,13 +118,19 @@ ChooserPage::createListview ()
 
   chooser->defaultTrust (TRUST_CURR);
   chooser->setViewMode (PickView::views::Category);
-  if (!SetDlgItemText (GetHWND (), IDC_CHOOSE_VIEWCAPTION, chooser->mode_caption ()))
-    log (LOG_BABBLE) << "Failed to set View button caption %ld" << 
-	 GetLastError () << endLog;
   for_each (db.packages.begin(), db.packages.end(), bind2nd(mem_fun(&packagemeta::set_requirements), chooser->deftrust));
   /* FIXME: do we need to init the desired fields ? */
-  static int ta[] = { IDC_CHOOSE_KEEP, IDC_CHOOSE_PREV, IDC_CHOOSE_CURR, IDC_CHOOSE_EXP, 0 };
-  rbset (GetHWND (), ta, IDC_CHOOSE_CURR);
+  combobox = GetDlgItem (IDC_CHOOSE_VIEW);
+  SendMessage (combobox, CB_RESETCONTENT, 0, 0);
+  for (int n = 0; n < NumChooserViewModes; n++)
+  {
+    LoadString (GetInstance (), ChooserViewModes[n].name_id,
+        &ChooserViewModes[n].name_string[0], VIEWMODE_NAME_MAX);
+    DWORD j = SendMessage (combobox, CB_ADDSTRING, 0,
+	      (LPARAM) &ChooserViewModes[n].name_string[0]);
+    SendMessage (combobox, CB_SETITEMDATA, j, (LPARAM)n);
+  }
+  SendMessage (combobox, CB_SETCURSEL, 0, 0);
 }
 
 /* TODO: review ::overrides for possible consolidation */
@@ -253,6 +280,21 @@ ChooserPage::changeTrust(trusts aTrust)
 bool
 ChooserPage::OnMessageCmd (int id, HWND hwndctl, UINT code)
 {
+  if (id == IDC_CHOOSE_VIEW)
+    {
+      switch (code)
+        {
+        case CBN_SELENDOK:
+          DWORD sel = SendMessage (combobox, CB_GETCURSEL, 0, 0);
+          DWORD index = SendMessage (combobox, CB_GETITEMDATA, sel, 0);
+          chooser->setViewMode(ChooserViewModes[index].mode);
+          // handled
+          return true;
+        }
+        // not handled
+        return false;
+    }
+
   if (code != BN_CLICKED)
     {
       // Not a click notification, we don't care.
@@ -262,33 +304,21 @@ ChooserPage::OnMessageCmd (int id, HWND 
   switch (id)
     {
     case IDC_CHOOSE_KEEP:
-      if (IsButtonChecked (id))
         keepClicked();
       break;
       
     case IDC_CHOOSE_PREV:
-      if (IsButtonChecked (id))
         changeTrust (TRUST_PREV);
       break;
       
     case IDC_CHOOSE_CURR:
-      if (IsButtonChecked (id))
         changeTrust (TRUST_CURR);
       break;
       
     case IDC_CHOOSE_EXP:
-      if (IsButtonChecked (id))
         changeTrust (TRUST_TEST);
       break;
 
-    case IDC_CHOOSE_VIEW:
-      chooser->cycleViewMode ();
-      if (!SetDlgItemText
-        (GetHWND (), IDC_CHOOSE_VIEWCAPTION, chooser->mode_caption ()))
-      log (LOG_BABBLE) << "Failed to set View button caption " << 
-           GetLastError () << endLog;
-      break;
-      
     case IDC_CHOOSE_HIDE:
       chooser->setObsolete (!IsButtonChecked (id));
       break;
Index: choose.h
===================================================================
RCS file: /cvs/cygwin-apps/setup/choose.h,v
retrieving revision 2.36
diff -p -b -u -r2.36 choose.h
--- choose.h	21 May 2005 23:04:02 -0000	2.36
+++ choose.h	12 Mar 2006 06:45:31 -0000
@@ -53,6 +53,7 @@ public:
   void logResults();
   void setPrompt(char const *aPrompt);
   PickView *chooser;
+  HWND combobox;
 };
 
 #endif /* SETUP_CHOOSE_H */
Index: res.rc
===================================================================
RCS file: /cvs/cygwin-apps/setup/res.rc,v
retrieving revision 2.70
diff -p -b -u -r2.70 res.rc
--- res.rc	10 Mar 2006 17:18:20 -0000	2.70
+++ res.rc	12 Mar 2006 06:45:31 -0000
@@ -311,15 +311,14 @@ STYLE DS_MODALFRAME | DS_3DLOOK | WS_CHI
 CAPTION "Cygwin Setup - Select Packages"
 FONT 8, "MS Shell Dlg"
 BEGIN
-    CONTROL         "&Keep",IDC_CHOOSE_KEEP,"Button",BS_AUTORADIOBUTTON | 
-                    WS_GROUP | WS_TABSTOP,99,30,30,14
-    CONTROL         "&Prev",IDC_CHOOSE_PREV,"Button",BS_AUTORADIOBUTTON , 
-                    134,30,27,14
-    CONTROL         "&Curr",IDC_CHOOSE_CURR,"Button",BS_AUTORADIOBUTTON , 
-                    169,30,25,14
-    CONTROL         "E&xp",IDC_CHOOSE_EXP,"Button",BS_AUTORADIOBUTTON , 
-                    204,30,25,14
-    PUSHBUTTON      "&View",IDC_CHOOSE_VIEW,239,30,26,14,WS_GROUP
+    PUSHBUTTON      "&Keep",IDC_CHOOSE_KEEP,67,31,21,13,WS_GROUP | WS_TABSTOP
+    PUSHBUTTON      "&Prev",IDC_CHOOSE_PREV,89,31,21,13, WS_TABSTOP
+    PUSHBUTTON      "&Curr",IDC_CHOOSE_CURR,111,31,21,13, WS_TABSTOP
+    PUSHBUTTON      "E&xp",IDC_CHOOSE_EXP,133,31,21,13, WS_TABSTOP
+    LTEXT           "Set selection to...",IDC_SELECTION_LABEL,9,33,56,8
+    LTEXT           "&View:",IDC_CHOOSE_VIEW_LABEL,187,32,18,8
+    COMBOBOX        IDC_CHOOSE_VIEW,209,31,102,96,CBS_DROPDOWNLIST | 
+                    WS_VSCROLL | WS_TABSTOP
     CONTROL         "",IDC_HEADSEPARATOR,"Static",SS_BLACKFRAME | SS_SUNKEN,0,28,
                     317,1
     CONTROL         "",IDC_LISTVIEW_POS,"Static",SS_BLACKFRAME | NOT 
@@ -331,7 +330,6 @@ BEGIN
                     IDC_CHOOSE_INST_TEXT,21,9,239,16,NOT WS_GROUP
     LTEXT           "Select Packages",IDC_STATIC_HEADER_TITLE,7,0,258,8,NOT 
                     WS_GROUP
-    LTEXT           "",IDC_CHOOSE_VIEWCAPTION,270,33,40,10
 END
 
 IDD_PREREQ DIALOG DISCARDABLE  0, 0, 317, 179
@@ -479,4 +477,13 @@ BEGIN
        "with names that begin with '_'.  Such packages are usually empty "
        "placeholders for packages that have been removed or renamed, or are "
        "infrastructure packages that are handled automatically."
-END
+    IDS_VIEWMODE_CATEGORY       "Category"
+    IDS_VIEWMODE_FULL           "Full"
+    IDS_VIEWMODE_PARTIAL        "Partial"
+    IDS_VIEWMODE_UP_TO_DATE     "Up To Date"
+    IDS_VIEWMODE_NOT_INSTALLED  "Not Installed"
+
+
+       
+       
+       END
Index: resource.h
===================================================================
RCS file: /cvs/cygwin-apps/setup/resource.h,v
retrieving revision 2.33
diff -p -b -u -r2.33 resource.h
--- resource.h	10 Mar 2006 17:18:20 -0000	2.33
+++ resource.h	12 Mar 2006 06:45:31 -0000
@@ -31,6 +31,11 @@
 #define IDS_TRUSTEXP_TOOLTIP              128
 #define IDS_VIEWBUTTON_TOOLTIP            129
 #define IDS_HIDEOBS_TOOLTIP               130
+#define IDS_VIEWMODE_CATEGORY             131
+#define IDS_VIEWMODE_FULL                 132
+#define IDS_VIEWMODE_PARTIAL              133
+#define IDS_VIEWMODE_UP_TO_DATE           134
+#define IDS_VIEWMODE_NOT_INSTALLED        135
 
 // Dialogs
 
@@ -121,7 +126,7 @@
 #define IDC_DLS_PPROGRESS_TEXT            544
 #define IDC_DLS_IPROGRESS_TEXT            545
 #define IDC_CHOOSE_INST_TEXT              546
-#define IDC_CHOOSE_VIEWCAPTION            547
+#define IDC_CHOOSE_VIEW_LABEL             547
 #define IDC_CHOOSE_LISTHEADER             548
 #define IDC_INS_BL_PACKAGE                549
 #define IDC_INS_BL_TOTAL                  550
@@ -155,3 +160,4 @@
 #define IDC_PREREQ_CHECK                  578
 #define IDC_DROP_MIRRORS                  579
 #define IDC_DROP_NOWARN                   580
+#define IDC_SELECTION_LABEL               581
