[Aptitude-svn-commit] r3548 - in branches/aptitude-0.3/aptitude: . src/vscreen
Daniel Burrows
dburrows@costa.debian.org
Sat, 02 Jul 2005 16:10:55 +0000
Author: dburrows
Date: Sat Jul 2 16:10:52 2005
New Revision: 3548
Modified:
branches/aptitude-0.3/aptitude/ChangeLog
branches/aptitude-0.3/aptitude/src/vscreen/vs_multiplex.cc
branches/aptitude-0.3/aptitude/src/vscreen/vs_multiplex.h
Log:
Allow wide strings in the multiplex tabs.
Modified: branches/aptitude-0.3/aptitude/ChangeLog
==============================================================================
--- branches/aptitude-0.3/aptitude/ChangeLog (original)
+++ branches/aptitude-0.3/aptitude/ChangeLog Sat Jul 2 16:10:52 2005
@@ -1,5 +1,9 @@
2005-07-02 Daniel Burrows <dburrows@debian.org>
+ * src/vscreen/vs_multiplex.cc, src/vscreen/vs_multiplex.h:
+
+ Update the display of the multiplex's tabs for wide characters.
+
* src/pkg_grouppolicy.cc, src/pkg_grouppolicy.h:
Update pkg_grouppolicy for wide characters.
Modified: branches/aptitude-0.3/aptitude/src/vscreen/vs_multiplex.cc
==============================================================================
--- branches/aptitude-0.3/aptitude/src/vscreen/vs_multiplex.cc (original)
+++ branches/aptitude-0.3/aptitude/src/vscreen/vs_multiplex.cc Sat Jul 2 16:10:52 2005
@@ -134,31 +134,36 @@
else
apply_style(tab_style);
- unsigned int thisw=remaining_w/visible_children;
+ int thisw=remaining_w/visible_children;
--visible_children;
remaining_w-=thisw;
- if(i->title.size()>thisw)
- addnstr(i->title.c_str(), thisw);
- else
+ const wstring &title = i->title;
+ int titlew = wcswidth(title.c_str(), title.size());
+ unsigned int leftpadding = (titlew<=thisw) ? (thisw-titlew)/2 : 0;
+
+ while(leftpadding>0)
{
- unsigned int j=0;
- unsigned int firstchar=(thisw-i->title.size())/2;
+ add_wch(L' ');
+ int chw=wcwidth(L' ');
+
+ leftpadding-=chw;
+ thisw-=chw;
+ }
- while(j<firstchar)
- {
- addch(' ');
- ++j;
- }
-
- addnstr(i->title.c_str(), i->title.size());
- j+=i->title.size();
-
- while(j<thisw)
- {
- addch(' ');
- ++j;
- }
+ size_t loc=0;
+ while(thisw>0 && loc<title.size())
+ {
+ wchar_t ch=title[loc];
+ add_wch(ch);
+ thisw-=wcwidth(ch);
+ ++loc;
+ }
+
+ while(thisw>0)
+ {
+ add_wch(L' ');
+ thisw-=wcwidth(L' ');
}
}
assert(visible_children == 0);
@@ -351,7 +356,7 @@
}
void vs_multiplex::add_widget(vscreen_widget *w,
- const string &title)
+ const wstring &title)
{
w->shown_sig.connect(sigc::bind(sigc::mem_fun(*this, &vs_multiplex::show_widget), w));
w->hidden_sig.connect(sigc::bind(sigc::mem_fun(*this, &vs_multiplex::hide_widget), w));
@@ -365,10 +370,10 @@
void vs_multiplex::add_widget(vscreen_widget *w)
{
- add_widget(w, "Untitled");
+ add_widget(w, L"Untitled");
}
-void vs_multiplex::add_widget_after(vscreen_widget *w, vscreen_widget *after, const string &title)
+void vs_multiplex::add_widget_after(vscreen_widget *w, vscreen_widget *after, const wstring &title)
{
for(list<child_info>::iterator i=children.begin();
i!=children.end();
@@ -397,7 +402,7 @@
void vs_multiplex::add_widget_after(vscreen_widget *w, vscreen_widget *after)
{
- add_widget_after(w, after, "Untitled");
+ add_widget_after(w, after, L"Untitled");
}
void vs_multiplex::cycle_forward()
Modified: branches/aptitude-0.3/aptitude/src/vscreen/vs_multiplex.h
==============================================================================
--- branches/aptitude-0.3/aptitude/src/vscreen/vs_multiplex.h (original)
+++ branches/aptitude-0.3/aptitude/src/vscreen/vs_multiplex.h Sat Jul 2 16:10:52 2005
@@ -44,9 +44,9 @@
struct child_info
{
vscreen_widget *w;
- std::string title;
+ std::wstring title;
- child_info(vscreen_widget *_w, const std::string &_title)
+ child_info(vscreen_widget *_w, const std::wstring &_title)
:w(_w), title(_title)
{
}
@@ -104,9 +104,9 @@
* deprecated.
*/
void add_widget(vscreen_widget *widget);
- void add_widget(vscreen_widget *widget, const std::string &title);
+ void add_widget(vscreen_widget *widget, const std::wstring &title);
void add_widget_after(vscreen_widget *widget, vscreen_widget *after);
- void add_widget_after(vscreen_widget *widget, vscreen_widget *after, const std::string &title);
+ void add_widget_after(vscreen_widget *widget, vscreen_widget *after, const std::wstring &title);
void rem_widget(vscreen_widget *widget);
// These cycle forward and backwards through the list of visible items.