Dave Korn wrote:
> Dave Korn wrote:
>> Andrew Punch wrote:
>>> Hi,
>>> 
>>> I have attached a patch for searching packages in the package selection
>>>  screen. The patch is against version 2.573.2.3 - I couldn't get the
>>> CVS head to build due to a libtool version problem.
>> Thanks for contributing this.  I'm currently up-porting it to CVS HEAD
>> and giving it some testing.  

>  I think the search box needs a label attached and a tool-tip, and IMO I
> think it might look nicer if it was left-aligned away from the view
> controls; what do you (and everyone else) think?  

  So, I've up-ported to HEAD, adjusted coding style to match its surroundings,
slightly restructured a couple of bits, and added a label and tool-tip and
left-aligned it.  The result is attached for whoever else would like to test it.

  One consequence of doing this is that it draws attention to the fact we need
to implement minimum window size dimensions for the chooser page; it's bad
enough that you can shrink it down far enough that controls slide off the
left-hand edge, but it looks even uglier when the right-aligned controls start
to slide over the left-aligned ones.  If that sounds like the right thing to
do, I'll roll a patch.

> Secondly, every time you
> change the search-box contents in the category view, it collapses all
> expanded categories; I'd like to avoid that if we can, but haven't yet
> looked to see how.

  I decided not to go any further into this one for now, because it's only the
same behaviour that all the other buttons display when using the category
view.  Maybe we'll fix it later, maybe it will prove less tractable, but it's
another patch for another day.

  Revised changelog follows.  What do you think, everyone: OK for HEAD?

2009-03-27  Andrew Punch  <and...@xxxxxxxxxxxxx.xxx.xx>

        * PickView.h:  Add #include <string>.
        (PickView::SetPackageFilter):  Add new function.
        (PickView::packageFilterString):  Add new string data member.
        * PickView.cc (PickView::setViewMode):  Use it to filter names.
        (PickView::insert_category):  Likewise.
        (PickView::PickView):  Initialise packageFilterString to blank.
        * res.rc (IDD_CHOOSE):  Add IDC_CHOOSE_SEARCH_EDIT and
        IDC_CHOOSE_SEARCH_LABEL controls.
        (IDS_SEARCH_TOOLTIP):  Add new string resource.
        * resource.h (IDS_SEARCH_TOOLTIP):  New string resource ID.
        (IDC_CHOOSE_SEARCH_EDIT):  New edit control ID.
        (IDC_CHOOSE_SEARCH_LABEL):  Mew static text control ID.
        * choose.cc (ChooserControlsInfo[]):  Add IDC_CHOOSE_SEARCH_LABEL
        and IDC_CHOOSE_SEARCH_EDIT controls to auto-resize list.
        (ChooserPage::OnInit):  Add tooltip to search edit box.
        (ChooserPage::OnMessageCmd):  Handle EN_CHANGE event from
        IDC_CHOOSE_SEARCH_EDIT.


    cheers,
      DaveK

Index: choose.cc
===================================================================
RCS file: /cvs/cygwin-apps/setup/choose.cc,v
retrieving revision 2.145
diff -p -u -r2.145 choose.cc
--- choose.cc   5 Aug 2008 15:48:55 -0000       2.145
+++ choose.cc   1 Apr 2009 15:28:07 -0000
@@ -67,6 +67,8 @@ extern ThreeBarProgressPage Progress;
   Sizing information.
  */
 static ControlAdjuster::ControlInfo ChooserControlsInfo[] = {
+  {IDC_CHOOSE_SEARCH_LABEL,    CP_LEFT,    CP_TOP},
+  {IDC_CHOOSE_SEARCH_EDIT,     CP_LEFT,    CP_TOP},
   {IDC_CHOOSE_KEEP,            CP_RIGHT,   CP_TOP},
   {IDC_CHOOSE_PREV,            CP_RIGHT,   CP_TOP},
   {IDC_CHOOSE_CURR,            CP_RIGHT,   CP_TOP},
@@ -172,6 +174,7 @@ ChooserPage::OnInit ()
   AddTooltip (IDC_CHOOSE_EXP, IDS_TRUSTEXP_TOOLTIP);
   AddTooltip (IDC_CHOOSE_VIEW, IDS_VIEWBUTTON_TOOLTIP);  
   AddTooltip (IDC_CHOOSE_HIDE, IDS_HIDEOBS_TOOLTIP);
+  AddTooltip (IDC_CHOOSE_SEARCH_EDIT, IDS_SEARCH_TOOLTIP);
 }
 
 void
@@ -255,7 +258,14 @@ ChooserPage::changeTrust(trusts aTrust)
 bool
 ChooserPage::OnMessageCmd (int id, HWND hwndctl, UINT code)
 {
-  if (code != BN_CLICKED)
+  if (code == EN_CHANGE && id == IDC_CHOOSE_SEARCH_EDIT)
+    {
+      std::string value (egetString (GetHWND (), IDC_CHOOSE_SEARCH_EDIT));
+      chooser->SetPackageFilter (value);
+      chooser->refresh ();
+      return true;
+    }
+  else if (code != BN_CLICKED && code != EN_CHANGE)
     {
       // Not a click notification, we don't care.
       return false;
Index: resource.h
===================================================================
RCS file: /cvs/cygwin-apps/setup/resource.h,v
retrieving revision 2.36
diff -p -u -r2.36 resource.h
--- resource.h  22 Jun 2008 02:37:16 -0000      2.36
+++ resource.h  1 Apr 2009 15:28:07 -0000
@@ -33,6 +33,7 @@
 #define IDS_HIDEOBS_TOOLTIP               130
 #define IDS_SIG_INVALID                   131
 #define IDS_CRYPTO_ERROR                  132
+#define IDS_SEARCH_TOOLTIP                133
 
 // Dialogs
 
@@ -161,3 +162,5 @@
 #define IDC_STATUS_HEADER                 582
 #define IDC_STATUS                        583
 #define IDC_STATIC_HEADER                 584
+#define IDC_CHOOSE_SEARCH_EDIT            585
+#define IDC_CHOOSE_SEARCH_LABEL           586
Index: res.rc
===================================================================
RCS file: /cvs/cygwin-apps/setup/res.rc,v
retrieving revision 2.75
diff -p -u -r2.75 res.rc
--- res.rc      22 Jun 2008 02:37:16 -0000      2.75
+++ res.rc      1 Apr 2009 15:28:07 -0000
@@ -316,6 +316,9 @@ STYLE DS_MODALFRAME | DS_3DLOOK | WS_CHI
 CAPTION "Cygwin Setup - Select Packages"
 FONT 8, "MS Shell Dlg"
 BEGIN
+    RTEXT           "&Search",IDC_STATIC,0,30,32,12,SS_CENTERIMAGE,
+                    WS_EX_RIGHT
+    EDITTEXT        IDC_CHOOSE_SEARCH_EDIT, 34, 30, 60, 12
     CONTROL         "&Keep",IDC_CHOOSE_KEEP,"Button",BS_AUTORADIOBUTTON | 
                     WS_GROUP | WS_TABSTOP,99,30,30,14
     CONTROL         "&Prev",IDC_CHOOSE_PREV,"Button",BS_AUTORADIOBUTTON , 
@@ -486,4 +489,5 @@ BEGIN
        "infrastructure packages that are handled automatically."
     IDS_SIG_INVALID    "Mirror Error:  Setup.ini signature %s from %s failed 
to verify.\nPossible corrupt mirror?  Setup.ini rejected."
     IDS_CRYPTO_ERROR   "Internal Error:  gcrypt library error %d %s"
+    IDS_SEARCH_TOOLTIP "Search for this string in package names."
 END
Index: PickView.h
===================================================================
RCS file: /cvs/cygwin-apps/setup/PickView.h,v
retrieving revision 2.17
diff -p -u -r2.17 PickView.h
--- PickView.h  24 May 2006 13:01:34 -0000      2.17
+++ PickView.h  1 Apr 2009 15:28:07 -0000
@@ -16,6 +16,7 @@
 #ifndef SETUP_PICKVIEW_H
 #define SETUP_PICKVIEW_H
 
+#include <string>
 #include "win32.h"
 #include "window.h"
 #include "RECTWrapper.h"
@@ -82,6 +83,13 @@ public:
   int header_height;
   PickCategoryLine contents;
   void scroll (HWND hwnd, int which, int *var, int code, int howmany);
+
+  void SetPackageFilter (const std::string &filterString)
+  {
+    packageFilterString = filterString;
+  }
+  
+  
   HWND ListHeader (void) const
   {
     return listheader;
@@ -135,6 +143,7 @@ private:
   HWND listheader;
   views view_mode;
   bool showObsolete;
+  std::string packageFilterString;
 
   // Stuff needed to handle resizing
   bool hasClientRect;
Index: PickView.cc
===================================================================
RCS file: /cvs/cygwin-apps/setup/PickView.cc,v
retrieving revision 2.32
diff -p -u -r2.32 PickView.cc
--- PickView.cc 8 Apr 2008 23:50:54 -0000       2.32
+++ PickView.cc 1 Apr 2009 15:28:07 -0000
@@ -191,8 +191,12 @@ PickView::setViewMode (views mode)
               // "Not installed"
               || (view_mode == PickView::views::PackageSkips &&
                   (!pkg.desired && !pkg.installed)))
-            
-            insert_pkg (pkg);
+            {
+              // Filter by package name
+              if (packageFilterString.empty ()
+                  || pkg.name.find (packageFilterString) != std::string::npos)
+                insert_pkg (pkg);
+            }
         }
     }
 
@@ -309,13 +313,23 @@ PickView::insert_category (Category *cat
       (!showObsolete && isObsolete (cat->first)))
     return;
   PickCategoryLine & catline = *new PickCategoryLine (*this, *cat, 1, 
collapsed);
+  int packageCount = 0;
   for (vector <packagemeta *>::iterator i = cat->second.begin ();
        i != cat->second.end () ; ++i)
     {
-      PickLine & line = *new PickPackageLine (*this, **i);
-      catline.insert (line);
+      if (packageFilterString.empty () \
+          || (*i && (*i)->name.find (packageFilterString) != 
std::string::npos))
+       {
+         PickLine & line = *new PickPackageLine (*this, **i);
+         catline.insert (line);
+         packageCount++;
+       }
     }
-  contents.insert (catline);
+  
+  if (packageFilterString.empty () || packageCount)
+    contents.insert (catline);
+  else
+    delete &catline;
 }
 
 PickView::views&
@@ -502,7 +516,7 @@ PickView::init_headers (HDC dc)
 
 PickView::PickView (Category &cat) : deftrust (TRUST_UNKNOWN),
 contents (*this, cat, 0, false, true), showObsolete (false), 
-hasClientRect (false)
+packageFilterString (), hasClientRect (false)
 {
 }
 

Reply via email to