From a1a4425f1634287d3c81693d96a1bf0944992ede Mon Sep 17 00:00:00 2001 From: Huang Peng Date: Wed, 28 May 2008 14:41:48 +0800 Subject: [PATCH] Add CandidatesArea class. --- panel/candidatepanel.py | 104 ++++++++++++++++++++++++++++++++++++++---------- 1 file changed, 83 insertions(+), 21 deletions(-) diff --git a/panel/candidatepanel.py b/panel/candidatepanel.py index 40f3a7d..65b5924 100644 --- a/panel/candidatepanel.py +++ b/panel/candidatepanel.py @@ -1,3 +1,4 @@ +# -*- coding: utf-8 -*- import gtk import gtk.gdk as gdk import gobject @@ -13,6 +14,64 @@ class VSeparator (gtk.VBox): gtk.VBox.__init__ (self) self.pack_start (gtk.VSeparator (), True, True, 4) +class CandidatesArea (gtk.HBox): + def __init__ (self, orientation): + gtk.HBox.__init__ (self) + self._orientation = orientation + self._labels = [] + self._create_ui () + + def _create_ui (self): + if self._orientation == gtk.ORIENTATION_VERTICAL: + self._vbox1 = gtk.VBox () + self._vbox2 = gtk.VBox () + self.pack_start (self._vbox1, False, False, 4) + self.pack_start (VSeparator(), False, False, 0) + self.pack_start (self._vbox2, True, True, 4) + + for i in xrange (1, 10): + label1 = gtk.Label ("%d." % i) + label1.set_alignment (0.0, 0.5) + label1.set_no_show_all (True) + + label2 = gtk.Label () + label2.set_alignment (0.0, 0.5) + label2.set_no_show_all (True) + + if self._orientation == gtk.ORIENTATION_VERTICAL: + label1.set_property ("xpad", 8) + label2.set_property ("xpad", 8) + self._vbox1.pack_start (label1, False, False, 2) + self._vbox2.pack_start (label2, False, False, 2) + else: + hbox = gtk.HBox () + hbox.pack_start (label1, False, False, 1) + hbox.pack_start (label2, False, False, 1) + self.pack_start (hbox, False, False, 4) + + self._labels.append ((label1, label2)) + + def set_candidates (self, candidates, focus_candidate = 0): + assert len (candidates) <= len (self._labels) + i = 0 + for text, attrs in candidates: + self._labels[i][1].set_text (text) + self._labels[i][1].set_attributes (attrs) + self._labels[i][0].show () + self._labels[i][1].show () + if i == focus_candidate: + self._labels[i][0].set_state (gtk.STATE_SELECTED) + self._labels[i][1].set_state (gtk.STATE_SELECTED) + else: + self._labels[i][0].set_state (gtk.STATE_NORMAL) + self._labels[i][1].set_state (gtk.STATE_NORMAL) + + i += 1 + + for label1, label2 in self._labels[len(candidates):]: + label1.hide () + label2.hide () + class CandidatePanel (gtk.VBox): __gproperties__ = { 'orientation' : (gtk.Orientation, # type @@ -25,18 +84,18 @@ class CandidatePanel (gtk.VBox): def __init__ (self): gtk.VBox.__init__ (self) self._tooltips = gtk.Tooltips () - + self._orientation = gtk.ORIENTATION_HORIZONTAL self._orientation = gtk.ORIENTATION_VERTICAL - self._show_preedit_string = True + self._show_preedit_string = False self._preedit_string = "preedit string" self._preedit_attrs = pango.AttrList () self._aux_string = "aux string" self._aux_attrs = pango.AttrList () self._lookup_table = None - + self._recreate_ui () - + def _recreate_ui (self): for w in self: @@ -45,8 +104,8 @@ class CandidatePanel (gtk.VBox): # create preedit label self._preedit_label = gtk.Label (self._preedit_string) self._preedit_label.set_attributes (self._preedit_attrs) - self._preedit_label.set_property ("xalign", 0.0) - self._preedit_label.set_property ("xpad", 8) + self._preedit_label.set_alignment (0.0, 0.5) + self._preedit_label.set_padding (8, 0) self._preedit_label.set_no_show_all (True) if self._show_preedit_string: self._preedit_label.show () @@ -54,13 +113,16 @@ class CandidatePanel (gtk.VBox): # create aux label self._aux_label = gtk.Label (self._aux_string) self._aux_label.set_attributes (self._aux_attrs) - self._aux_label.set_property ("xalign", 0.0) - self._aux_label.set_property ("xpad", 8) + self._aux_label.set_alignment (0.0, 0.5) + self._aux_label.set_padding (8, 0) self._tooltips.set_tip (self._aux_label, "Aux string") # create candidates area - self._candidates_area = gtk.HBox () - self._candidates_area.pack_start (gtk.Label ("Candidates Area")) + self._candidates_area = CandidatesArea (self._orientation) + candidates = [] + for i in xrange (0, 7): + candidates.append (("你好", pango.AttrList ())) + self._candidates_area.set_candidates (candidates) # create state label self._state_label = gtk.Label () @@ -69,15 +131,15 @@ class CandidatePanel (gtk.VBox): self._prev_button = gtk.Button () self._prev_button.set_relief (gtk.RELIEF_NONE) self._tooltips.set_tip (self._prev_button, "Previous candidate") - + self._next_button = gtk.Button () self._next_button.set_relief (gtk.RELIEF_NONE) self._tooltips.set_tip (self._next_button, "Next candidate") - + self._pack_all_widgets () def _pack_all_widgets (self): - if self._orientation == gtk.ORIENTATION_VERTICAL: + if self._orientation == gtk.ORIENTATION_VERTICAL: # package all widgets in vertical mode image = gtk.Image () image.set_from_stock (gtk.STOCK_GO_UP, gtk.ICON_SIZE_MENU) @@ -89,9 +151,9 @@ class CandidatePanel (gtk.VBox): vbox = gtk.VBox () vbox.pack_start (self._preedit_label, False, False, 0) vbox.pack_start (self._aux_label, False, False, 0) - self.pack_start (vbox, False, False, 4) + self.pack_start (vbox, False, False, 5) self.pack_start (HSeparator (), False, False) - self.pack_start (self._candidates_area, False, False, 4) + self.pack_start (self._candidates_area, False, False, 2) self.pack_start (HSeparator (), False, False) hbox= gtk.HBox () hbox.pack_start (self._state_label, True, True) @@ -112,15 +174,15 @@ class CandidatePanel (gtk.VBox): vbox = gtk.VBox () vbox.pack_start (self._preedit_label, False, False, 0) vbox.pack_start (self._aux_label, False, False, 0) - self.pack_start (vbox, False, False, 4) + self.pack_start (vbox, False, False, 5) self.pack_start (HSeparator (), False, False) hbox= gtk.HBox () - hbox.pack_start (self._candidates_area, True, True, 4) + hbox.pack_start (self._candidates_area, True, True, 2) hbox.pack_start (VSeparator (), False, False) hbox.pack_start (self._prev_button, False, False, 2) hbox.pack_start (self._next_button, False, False, 2) self.pack_start (hbox, False, False) - + self.hide_all () self.show_all () @@ -140,7 +202,7 @@ class CandidatePanel (gtk.VBox): attrs = pango.AttrList () self._aux_attrs = attrs self._aux_label.set_attributes (attrs) - + def set_preedit_string (self, text, attrs): self._preedit_string = text self._preedit_label.set_text (text) @@ -158,7 +220,7 @@ class CandidatePanel (gtk.VBox): return self._orientation = orientation self._recreate_ui () - + def get_orientation (self): return self._orientation @@ -167,7 +229,7 @@ class CandidatePanel (gtk.VBox): self.set_orientation (value) else: return gtk.DrawingArea.do_set_property (property, value) - + def do_get_property (self, property): if property == 'orientation': return self._orientation -- 2.7.4