[Aptitude-svn-commit] r3555 - in branches/aptitude-0.3/aptitude: . src

Daniel Burrows dburrows@costa.debian.org
Sat, 02 Jul 2005 17:43:56 +0000


Author: dburrows
Date: Sat Jul  2 17:43:53 2005
New Revision: 3555

Modified:
   branches/aptitude-0.3/aptitude/ChangeLog
   branches/aptitude-0.3/aptitude/src/pkg_tree.cc
   branches/aptitude-0.3/aptitude/src/pkg_tree.h
Log:
Update pkg_tree for wide characters.

Modified: branches/aptitude-0.3/aptitude/ChangeLog
==============================================================================
--- branches/aptitude-0.3/aptitude/ChangeLog	(original)
+++ branches/aptitude-0.3/aptitude/ChangeLog	Sat Jul  2 17:43:53 2005
@@ -1,5 +1,9 @@
 2005-07-02  Daniel Burrows  <dburrows@debian.org>
 
+	* src/pkg_tree.cc, src/pkg_tree.h:
+
+	  Wide-character conversion of pkg_tree.
+
 	* src/ui.h:
 
 	  Make the string callbacks take wstrings.

Modified: branches/aptitude-0.3/aptitude/src/pkg_tree.cc
==============================================================================
--- branches/aptitude-0.3/aptitude/src/pkg_tree.cc	(original)
+++ branches/aptitude-0.3/aptitude/src/pkg_tree.cc	Sat Jul  2 17:43:53 2005
@@ -383,18 +383,18 @@
   if(!get_visible())
     return false;
 
-  do_search("~b");
+  do_search(L"~b");
 
   return true;
 }
 
-void pkg_menu_tree::do_search(std::string s)
+void pkg_menu_tree::do_search(std::wstring s)
 {
   if(s.size()!=0)
     {
       delete last_search_matcher;
       last_search_term=s;
-      last_search_matcher=parse_pattern(s);
+      last_search_matcher=parse_pattern(transcode(s));
     }
 
   if(doing_incsearch)
@@ -411,7 +411,7 @@
     }
 }
 
-void pkg_menu_tree::do_incsearch(std::string s)
+void pkg_menu_tree::do_incsearch(std::wstring s)
 {
   if(!aptcfg->FindB(PACKAGE "::UI::Incremental-Search", true))
     return;
@@ -422,7 +422,7 @@
       pre_incsearch_selected=get_selected();
     }
 
-  pkg_matcher *m=parse_pattern(s, false);
+  pkg_matcher *m=parse_pattern(transcode(s), false);
 
   set_selection(pre_incsearch_selected);
 
@@ -450,17 +450,17 @@
   pre_incsearch_selected=get_end();
 }
 
-bool pkg_menu_tree::handle_char(chtype ch)
+bool pkg_menu_tree::handle_key(const key &k)
 {
   // ick -- but having our own bindings is also ugly. hm.
-  if(pkg_tree::bindings->key_matches(ch, "Search"))
+  if(pkg_tree::bindings->key_matches(k, "Search"))
     find_search();
-  else if(pkg_tree::bindings->key_matches(ch, "ReSearch"))
+  else if(pkg_tree::bindings->key_matches(k, "ReSearch"))
     find_research();
-  else if(pkg_tree::bindings->key_matches(ch, "SearchBroken"))
+  else if(pkg_tree::bindings->key_matches(k, "SearchBroken"))
     find_broken();
   else
-    return vs_tree::handle_char(ch);
+    return vs_tree::handle_key(k);
 
   return true;
 }
@@ -470,22 +470,31 @@
   bindings=new keybindings(vs_tree::bindings);
 }
 
-pkg_tree::pkg_tree(const char *def_grouping,
+pkg_tree::pkg_tree(const std::string &def_grouping,
 		   pkg_grouppolicy_factory *_grouping,
-		   const char *def_limit):
-  initialized(false),
-  grouping(_grouping), groupingstr(def_grouping),
-  sorting(parse_sortpolicy(aptcfg->Find(PACKAGE "::UI::Default-Sorting",
+		   const std::wstring &def_limit)
+  :initialized(false),
+   grouping(_grouping), groupingstr(def_grouping),
+   sorting(parse_sortpolicy(aptcfg->Find(PACKAGE "::UI::Default-Sorting",
 					 "name"))),
-  limit(NULL)
+   limit(NULL),
+   limitstr(def_limit)
 {
-  if(def_limit)
-    limitstr=def_limit;
-  else
-    limitstr=aptcfg->Find(PACKAGE "::Pkg-Display-Limit", "");
+  if(!limitstr.empty())
+    limit=parse_pattern(transcode(limitstr));
+}
 
+pkg_tree::pkg_tree(const std::string &def_grouping,
+		   pkg_grouppolicy_factory *_grouping)
+  :initialized(false),
+   grouping(_grouping), groupingstr(def_grouping),
+   sorting(parse_sortpolicy(aptcfg->Find(PACKAGE "::UI::Default-Sorting",
+					 "name"))),
+   limit(NULL),
+   limitstr(transcode(aptcfg->Find(PACKAGE "::Pkg-Display-Limit", "")))
+{
   if(!limitstr.empty())
-    limit=parse_pattern(limitstr);
+    limit=parse_pattern(transcode(limitstr));
 }
 
 void pkg_tree::handle_cache_close()
@@ -513,11 +522,12 @@
   delete oldgrouping;
 }
 
-void pkg_tree::set_grouping(string s)
+void pkg_tree::set_grouping(const std::wstring &s)
 {
-  groupingstr=s;
+  // FIXME: push wstrings down into the parsing code.
+  groupingstr=transcode(s);
 
-  pkg_grouppolicy_factory *grp=parse_grouppolicy(s);
+  pkg_grouppolicy_factory *grp=parse_grouppolicy(groupingstr);
 
   if(grp)
     set_grouping(grp);
@@ -534,9 +544,10 @@
     build_tree();
 }
 
-void pkg_tree::set_sorting(string s)
+void pkg_tree::set_sorting(const std::wstring &s)
 {
-  pkg_sortpolicy *policy=parse_sortpolicy(s);
+  // FIXME: push wstrings down into the parsing code.
+  pkg_sortpolicy *policy=parse_sortpolicy(transcode(s));
 
   if(policy)
     set_sorting(policy);
@@ -565,7 +576,7 @@
     {
       bool empty=true, cache_empty=true;
 
-      pkg_subtree *mytree=new pkg_subtree(_("All Packages"), true);
+      pkg_subtree *mytree=new pkg_subtree(transcode(_("All Packages")), true);
       pkg_grouppolicy *grouper=grouping->instantiate(&selected_signal,
 						     &selected_desc_signal);
 
@@ -591,7 +602,8 @@
 
       progress.OverallProgress(total, total, 1, _("Building view"));
 
-      mytree->sort(pkg_sortpolicy_wrapper(sorting));
+      pkg_sortpolicy_wrapper sorter(sorting);
+      mytree->sort(sorter);
 
       set_root(mytree);
 
@@ -616,12 +628,12 @@
   return rval;
 }
 
-void pkg_tree::set_limit(string _limit)
+void pkg_tree::set_limit(const std::wstring &_limit)
 {
   pkg_matcher *old_limit=limit;
-  string old_limitstr=limitstr;
+  std::wstring old_limitstr=limitstr;
 
-  pkg_matcher *new_limit=parse_pattern(_limit);
+  pkg_matcher *new_limit=parse_pattern(transcode(_limit));
   if(_limit.empty() || new_limit)
     {
       limit=new_limit;
@@ -629,9 +641,9 @@
 
       if(!build_tree())
 	{
-	  char buf[512];
+	  wchar_t buf[512];
 
-	  snprintf(buf, 512, _("No packages matched the pattern \"%s\"."),
+	  swprintf(buf, 512, transcode(_("No packages matched the pattern \"%ls\".")).c_str(),
 		   _limit.c_str());
 
 	  show_message(buf);
@@ -653,7 +665,7 @@
 
 bool pkg_tree::find_limit()
 {
-  prompt_string(_("Enter the new package tree limit: "),
+  prompt_string(transcode(_("Enter the new package tree limit: ")),
 		limitstr,
 		arg(sigc::mem_fun(*this, &pkg_tree::set_limit)),
 		NULL,
@@ -675,35 +687,35 @@
 
   delete limit;
   limit=NULL;
-  limitstr="";
+  limitstr=L"";
 
   build_tree();
 
   return true;
 }
 
-bool pkg_tree::handle_char(chtype ch)
+bool pkg_tree::handle_key(const key &k)
 {
-  if(bindings->key_matches(ch, "ChangePkgTreeLimit"))
+  if(bindings->key_matches(k, "ChangePkgTreeLimit"))
     find_limit();
-  else if(bindings->key_matches(ch, "ChangePkgTreeGrouping"))
+  else if(bindings->key_matches(k, "ChangePkgTreeGrouping"))
     prompt_string(_("Enter the new package grouping mechanism for this display: "),
 		  groupingstr,
 		  arg(sigc::mem_fun(*this,
-				    (void (pkg_tree::*) (string)) &pkg_tree::set_grouping)),
+				    (void (pkg_tree::*) (const std::wstring &)) &pkg_tree::set_grouping)),
 		  NULL,
 		  NULL,
 		  &grouping_history);
-  else if(bindings->key_matches(ch, "ChangePkgTreeSorting"))
+  else if(bindings->key_matches(k, "ChangePkgTreeSorting"))
     prompt_string(_("Enter the new package sorting mechanism for this display: "),
 		  "",
 		  arg(sigc::mem_fun(*this,
-				    (void (pkg_tree::*) (string)) &pkg_tree::set_sorting)),
+				    (void (pkg_tree::*) (const std::wstring &)) &pkg_tree::set_sorting)),
 		  NULL,
 		  NULL,
 		  &sorting_history);
   else
-    return pkg_menu_tree::handle_char(ch);
+    return pkg_menu_tree::handle_key(k);
 
   return true;
 }

Modified: branches/aptitude-0.3/aptitude/src/pkg_tree.h
==============================================================================
--- branches/aptitude-0.3/aptitude/src/pkg_tree.h	(original)
+++ branches/aptitude-0.3/aptitude/src/pkg_tree.h	Sat Jul  2 17:43:53 2005
@@ -51,7 +51,7 @@
   pkg_matcher *last_search_matcher;
 
   /** The string that was compiled to produce the above matcher. */
-  std::string last_search_term;
+  std::wstring last_search_term;
 
   /** \b true if an incremental search is in progress. */
   bool doing_incsearch;
@@ -59,8 +59,8 @@
   /** The iterator that was selected prior to the incremental search. */
   vs_treeiterator pre_incsearch_selected;
 
-  void do_search(std::string s);
-  void do_incsearch(std::string s);
+  void do_search(std::wstring s);
+  void do_incsearch(std::wstring s);
   void do_cancel_incsearch();
 
   /** Execute the given action; this is needed because some "wrapper"
@@ -155,7 +155,7 @@
   /** Find the next broken package (searches for '~b'). */
   bool find_broken();
 
-  bool handle_char(chtype ch);
+  bool handle_key(const key &k);
 };
 
 class pkg_tree:public pkg_menu_tree
@@ -170,7 +170,7 @@
   pkg_sortpolicy *sorting;
 
   pkg_matcher *limit;
-  std::string limitstr;
+  std::wstring limitstr;
   // Defines the limits on the display (what packages will be allowed
   // to be displayed)  This could be a grouping policy, but hardcoding the
   // filter here makes it easier to alter from the UI.
@@ -184,15 +184,24 @@
   void init(const char *limitstr);
 
 protected:
-  virtual bool handle_char(chtype ch);
+  virtual bool handle_key(const key &k);
 public:
   /** Initialize a package tree, but don't build it.  The caller
    *  should call build_tree().  The main reason to do this is so you
    *  can connect up the tree's signals before building it.
    */
-  pkg_tree(const char *groupingstr,
+  pkg_tree(const std::string &groupingstr,
 	   pkg_grouppolicy_factory *_grouping,
-	   const char *limitstr);
+	   const std::wstring &limitstr);
+
+  /** Initialize a package tree, but don't build it.  The caller
+   *  should call build_tree().  The main reason to do this is so you
+   *  can connect up the tree's signals before building it.
+   *
+   *  The default tree limit is used.
+   */
+  pkg_tree(const std::string &groupingstr,
+	   pkg_grouppolicy_factory *_grouping);
 
   // Should you be able to just pass in a string (?)
   ~pkg_tree();
@@ -216,12 +225,12 @@
   bool build_tree();
 
   void set_grouping(pkg_grouppolicy_factory *_grouping);
-  void set_grouping(std::string s);
+  void set_grouping(const std::wstring &s);
   void set_sorting(pkg_sortpolicy *_sorting);
-  void set_sorting(std::string s);
-  void set_limit(string _limit);
+  void set_sorting(const std::wstring &s);
+  void set_limit(const std::wstring &_limit);
   // Selects a new limit and rebuilds the tree.
-  string get_limit_str() {return limitstr;}
+  std::wstring get_limit_str() {return limitstr;}
 
   /** Return \b true. */
   bool find_limit_enabled();
@@ -240,7 +249,7 @@
   static void init_bindings();
 
   sigc::signal2<void, const pkgCache::PkgIterator &, const pkgCache::VerIterator &> selected_signal;
-  sigc::signal1<void, std::string> selected_desc_signal;
+  sigc::signal1<void, std::wstring> selected_desc_signal;
 };
 
 #endif