public inbox for cygwin-apps-cvs@sourceware.org
help / color / mirror / Atom feed
From: Jon TURNEY <jturney@sourceware.org>
To: cygwin-apps-cvs@sourceware.org
Subject: [setup - the official Cygwin setup program] branch master, updated. release_2.909-16-g6ddcf16b
Date: Fri,  1 Oct 2021 13:14:35 +0000 (GMT)	[thread overview]
Message-ID: <20211001131435.DF46F3858422@sourceware.org> (raw)




https://sourceware.org/git/gitweb.cgi?p=cygwin-apps/setup.git;h=6ddcf16baab947863d1750d452057fc151e73b7f

commit 6ddcf16baab947863d1750d452057fc151e73b7f
Author: Jon Turney <jon.turney@dronecode.org.uk>
Date:   Mon May 10 16:39:37 2021 +0100

    Move column header strings to string table resource

https://sourceware.org/git/gitweb.cgi?p=cygwin-apps/setup.git;h=f7711c51c965bcf685392332d092f474c27cb58f

commit f7711c51c965bcf685392332d092f474c27cb58f
Author: Jon Turney <jon.turney@dronecode.org.uk>
Date:   Mon May 10 15:18:24 2021 +0100

    Move view mode strings to string table resource

https://sourceware.org/git/gitweb.cgi?p=cygwin-apps/setup.git;h=35ee780b29a05a8189ef7cba5bac0ff514ad481c

commit 35ee780b29a05a8189ef7cba5bac0ff514ad481c
Author: Jon Turney <jon.turney@dronecode.org.uk>
Date:   Mon May 10 15:36:39 2021 +0100

    Use package action strings from resources for column width
    
    Use the package action strings from string table resource for computing
    the column width.
    
    (This should have been done as part of f34a20e7, but we didn't notice
    the strings were also duplicated here.)
    
    This requires a bit of enhancement to ListView::noteColumnWidth() to
    work for wstrings as well.


Diff:
---
 ListView.cc | 29 +++++++++++++++++++++++++----
 ListView.h  |  5 +++--
 PickView.cc | 29 ++++++++++++++++-------------
 PickView.h  |  2 +-
 choose.cc   | 17 +++++++++--------
 res.rc      | 13 +++++++++++++
 resource.h  | 13 +++++++++++++
 7 files changed, 80 insertions(+), 28 deletions(-)

diff --git a/ListView.cc b/ListView.cc
index 9966fbd9..dc420e2c 100644
--- a/ListView.cc
+++ b/ListView.cc
@@ -108,18 +108,20 @@ ListView::initColumns(HeaderList headers_)
   headers = headers_;
 
   // create the columns
-  LVCOLUMN lvc;
+  LVCOLUMNW lvc;
   lvc.mask = LVCF_FMT | LVCF_WIDTH | LVCF_TEXT | LVCF_SUBITEM;
 
   int i;
   for (i = 0; headers[i].text != 0; i++)
     {
+      std::wstring h = LoadStringW(headers[i].text);
+
       lvc.iSubItem = i;
-      lvc.pszText = const_cast <char *> (headers[i].text);
+      lvc.pszText = const_cast <wchar_t *> (h.c_str());
       lvc.cx = 100;
       lvc.fmt = headers[i].fmt;
 
-      ListView_InsertColumn(hWndListView, i, &lvc);
+      SendMessage(hWndListView, LVM_INSERTCOLUMNW, i, (LPARAM)&lvc);
     }
 
   // now do some width calculations
@@ -149,8 +151,23 @@ ListView::noteColumnWidthStart()
     }
 }
 
+// wrappers to help instantiations of the noteColumnWidth() template call the
+// right version of GetTextExtentPoint32
+#undef GetTextExtentPoint32
+
+static BOOL GetTextExtentPoint32(HDC hdc, LPCSTR lpString, int c, LPSIZE psizl)
+{
+  return GetTextExtentPoint32A(hdc, lpString, c, psizl);
+}
+
+static BOOL GetTextExtentPoint32(HDC hdc, LPCWSTR lpString, int c, LPSIZE psizl)
+{
+  return GetTextExtentPoint32W(hdc, lpString, c, psizl);
+}
+
+template <typename T>
 void
-ListView::noteColumnWidth(int col_num, const std::string& string)
+ListView::noteColumnWidth(int col_num, const T& string)
 {
   SIZE s = { 0, 0 };
 
@@ -173,6 +190,10 @@ ListView::noteColumnWidth(int col_num, const std::string& string)
     headers[col_num].width = width;
 }
 
+// explicit instantiation
+template void ListView::noteColumnWidth(int col_num, const std::string& string);
+template void ListView::noteColumnWidth(int col_num, const std::wstring& wstring);
+
 void
 ListView::noteColumnWidthEnd()
 {
diff --git a/ListView.h b/ListView.h
index d6a5e32f..8c43fcc7 100644
--- a/ListView.h
+++ b/ListView.h
@@ -56,7 +56,7 @@ class ListView
   class Header
   {
   public:
-    const char *text;
+    unsigned int text; // resource id of header text
     int fmt;
     ControlType type;
     int width;
@@ -67,7 +67,8 @@ class ListView
   void init(HWND parent, int id, HeaderList headers);
 
   void noteColumnWidthStart();
-  void noteColumnWidth(int col_num, const std::string& string);
+  template <typename T>
+  void noteColumnWidth(int col_num, const T& string);
   void noteColumnWidthEnd();
   void resizeColumns(void);
 
diff --git a/PickView.cc b/PickView.cc
index ac07687a..c961b9f2 100644
--- a/PickView.cc
+++ b/PickView.cc
@@ -96,25 +96,25 @@ PickView::getViewMode ()
   return view_mode;
 }
 
-const char *
+unsigned int
 PickView::mode_caption (views mode)
 {
   switch (mode)
     {
     case views::PackageFull:
-      return "Full";
+      return IDS_VIEW_FULL;
     case views::PackagePending:
-      return "Pending";
+      return IDS_VIEW_PENDING;
     case views::PackageKeeps:
-      return "Up To Date";
+      return IDS_VIEW_UPTODATE;
     case views::PackageSkips:
-      return "Not Installed";
+      return IDS_VIEW_NOTINSTALLED;
     case views::PackageUserPicked:
-      return "Picked";
+      return IDS_VIEW_PICKED;
     case views::Category:
-      return "Category";
+      return IDS_VIEW_CATEGORY;
     default:
-      return "";
+      return 0;
     }
 }
 
@@ -238,7 +238,7 @@ PickView::init_headers (void)
 
   // width of the 'src' checkbox column just needs to accommodate the
   // column name
-  listview->noteColumnWidth (srctick_col, "");
+  listview->noteColumnWidth (srctick_col, std::string(""));
 
   // (In category view) accommodate the width of each category name
   packagedb db;
@@ -295,11 +295,14 @@ PickView::init_headers (void)
         }
     }
 
-  // ensure that the new_col is wide enough for all the labels
-  const char *captions[] = { "Uninstall", "Skip", "Reinstall", "Retrieve",
-                             "Source", "Keep", NULL };
+  // also ensure that new_col is wide enough for all the action labels
+  unsigned int captions[] = {
+    IDS_ACTION_UNINSTALL, IDS_ACTION_SKIP, IDS_ACTION_REINSTALL,
+    IDS_ACTION_RETRIEVE, IDS_ACTION_SOURCE, IDS_ACTION_KEEP,
+    IDS_ACTION_UNKNOWN, 0
+  };
   for (int i = 0; captions[i]; i++)
-    listview->noteColumnWidth (new_col, captions[i]);
+    listview->noteColumnWidth (new_col, LoadStringW(captions[i]));
 
   listview->noteColumnWidthEnd();
   listview->resizeColumns();
diff --git a/PickView.h b/PickView.h
index 2db0562c..1e14a74e 100644
--- a/PickView.h
+++ b/PickView.h
@@ -46,7 +46,7 @@ public:
   views getViewMode ();
   void init(views _mode, ListView *_listview, Window *parent);
   void build_category_tree();
-  static const char *mode_caption (views mode);
+  static unsigned int mode_caption (views mode);
   void setObsolete (bool doit);
   void refresh();
   void init_headers ();
diff --git a/choose.cc b/choose.cc
index 51d7197e..44148283 100644
--- a/choose.cc
+++ b/choose.cc
@@ -131,13 +131,13 @@ ChooserPage::~ChooserPage ()
 }
 
 static ListView::Header pkg_headers[] = {
-  {"Package",     LVCFMT_LEFT,  ListView::ControlType::text},
-  {"Current",     LVCFMT_LEFT,  ListView::ControlType::text},
-  {"New",         LVCFMT_LEFT,  ListView::ControlType::popup},
-  {"Src?",        LVCFMT_LEFT,  ListView::ControlType::checkbox},
-  {"Categories",  LVCFMT_LEFT,  ListView::ControlType::text},
-  {"Size",        LVCFMT_RIGHT, ListView::ControlType::text},
-  {"Description", LVCFMT_LEFT,  ListView::ControlType::text},
+  {IDS_COLUMN_PACKAGE,    LVCFMT_LEFT,  ListView::ControlType::text},
+  {IDS_COLUMN_CURRENT,    LVCFMT_LEFT,  ListView::ControlType::text},
+  {IDS_COLUMN_NEW,        LVCFMT_LEFT,  ListView::ControlType::popup},
+  {IDS_COLUMN_SOURCE,     LVCFMT_LEFT,  ListView::ControlType::checkbox},
+  {IDS_COLUMN_CATEGORIES, LVCFMT_LEFT,  ListView::ControlType::text},
+  {IDS_COLUMN_SIZE,       LVCFMT_RIGHT, ListView::ControlType::text},
+  {IDS_COLUMN_DESCR,      LVCFMT_LEFT,  ListView::ControlType::text},
   {0}
 };
 
@@ -262,7 +262,8 @@ ChooserPage::OnInit ()
        view <= (int)PickView::views::Category;
        view++)
     {
-      SendMessage(viewlist, CB_ADDSTRING, 0, (LPARAM)PickView::mode_caption((PickView::views)view));
+      std::wstring mode = LoadStringW(PickView::mode_caption((PickView::views)view));
+      SendMessageW(viewlist, CB_ADDSTRING, 0, (LPARAM)mode.c_str());
     }
 
   if (source == IDC_SOURCE_DOWNLOAD)
diff --git a/res.rc b/res.rc
index 5fc8f243..c3d075ef 100644
--- a/res.rc
+++ b/res.rc
@@ -628,4 +628,17 @@ BEGIN
     IDS_ACTION_RETRIEVE "Retrieve"
     IDS_ACTION_UNKNOWN "Unknown"
     IDS_ACTION_SOURCE "Source"
+    IDS_VIEW_FULL "Full"
+    IDS_VIEW_PENDING "Pending"
+    IDS_VIEW_UPTODATE "Up To Date"
+    IDS_VIEW_NOTINSTALLED "Not Installed"
+    IDS_VIEW_PICKED "Picked"
+    IDS_VIEW_CATEGORY "Category"
+    IDS_COLUMN_PACKAGE "Package"
+    IDS_COLUMN_CURRENT "Current"
+    IDS_COLUMN_NEW "New"
+    IDS_COLUMN_SOURCE "Src?"
+    IDS_COLUMN_CATEGORIES "Categories"
+    IDS_COLUMN_SIZE "Size"
+    IDS_COLUMN_DESCR "Description"
 END
diff --git a/resource.h b/resource.h
index f377e572..463cfafa 100644
--- a/resource.h
+++ b/resource.h
@@ -63,6 +63,19 @@
 #define IDS_ACTION_RETRIEVE               163
 #define IDS_ACTION_UNKNOWN                164
 #define IDS_ACTION_SOURCE                 165
+#define IDS_VIEW_FULL                     166
+#define IDS_VIEW_PENDING                  167
+#define IDS_VIEW_UPTODATE                 168
+#define IDS_VIEW_NOTINSTALLED             169
+#define IDS_VIEW_PICKED                   170
+#define IDS_VIEW_CATEGORY                 171
+#define IDS_COLUMN_PACKAGE                172
+#define IDS_COLUMN_CURRENT                173
+#define IDS_COLUMN_NEW                    174
+#define IDS_COLUMN_SOURCE                 175
+#define IDS_COLUMN_CATEGORIES             176
+#define IDS_COLUMN_SIZE                   177
+#define IDS_COLUMN_DESCR                  178
 
 // Dialogs
 



                 reply	other threads:[~2021-10-01 13:14 UTC|newest]

Thread overview: [no followups] expand[flat|nested]  mbox.gz  Atom feed

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=20211001131435.DF46F3858422@sourceware.org \
    --to=jturney@sourceware.org \
    --cc=cygwin-apps-cvs@sourceware.org \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for read-only IMAP folder(s) and NNTP newsgroup(s).