@@ -771,14 +771,16 @@ def __init__(self, navigation):
771771 Gtk .Box .__init__ (self )
772772 self .set_property ("orientation" , Gtk .Orientation .VERTICAL )
773773
774- self ._toolbar = Gtk .Toolbar ()
775- self ._toolbar .set_style (Gtk .ToolbarStyle .ICONS )
776- self .pack_start (self ._toolbar , False , False , 0 )
777- self ._toolbar .show_all ()
774+ self ._toolarea = Gtk .Box ()
775+ self ._toolarea .set_property ('orientation' , Gtk .Orientation .HORIZONTAL )
776+ self .pack_start (self ._toolarea , False , False , 0 )
777+ self ._toolarea .show_all ()
778+ self ._groups = {}
778779 self ._toolitems = {}
779780
780781 def add_toolitem (self , name , group , position , image_file , description ,
781782 toggle ):
783+
782784 if toggle :
783785 tbutton = Gtk .ToggleToolButton ()
784786 else :
@@ -792,14 +794,25 @@ def add_toolitem(self, name, group, position, image_file, description,
792794
793795 if position is None :
794796 position = - 1
795- # TODO implement groups positions
796- self ._toolbar . insert (tbutton , - 1 )
797+
798+ self ._add_button (tbutton , group , position )
797799 signal = tbutton .connect ('clicked' , self ._call_tool , name )
798800 tbutton .set_tooltip_text (description )
799801 tbutton .show_all ()
800802 self ._toolitems .setdefault (name , [])
801803 self ._toolitems [name ].append ((tbutton , signal ))
802804
805+ def _add_button (self , button , group , position ):
806+ if group not in self ._groups :
807+ if self ._groups :
808+ self ._add_separator ()
809+ toolbar = Gtk .Toolbar ()
810+ toolbar .set_style (Gtk .ToolbarStyle .ICONS )
811+ self ._toolarea .pack_start (toolbar , False , False , 0 )
812+ toolbar .show_all ()
813+ self ._groups [group ] = toolbar
814+ self ._groups [group ].insert (button , position )
815+
803816 def _call_tool (self , btn , name ):
804817 self .trigger_tool (name )
805818
@@ -815,15 +828,18 @@ def remove_toolitem(self, name):
815828 if name not in self ._toolitems :
816829 self .navigation .message_event ('%s Not in toolbar' % name , self )
817830 return
818- for toolitem , _signal in self ._toolitems [name ]:
819- self ._toolbar .remove (toolitem )
831+
832+ for group in self ._groups :
833+ for toolitem , _signal in self ._toolitems [name ]:
834+ if toolitem in self ._groups [group ]:
835+ self ._groups [group ].remove (toolitem )
820836 del self ._toolitems [name ]
821837
822- def add_separator (self , pos = - 1 ):
823- toolitem = Gtk .SeparatorToolItem ()
824- self . _toolbar . insert ( toolitem , pos )
825- toolitem . show ( )
826- return toolitem
838+ def _add_separator (self ):
839+ sep = Gtk .Separator ()
840+ sep . set_property ( "orientation" , Gtk . Orientation . VERTICAL )
841+ self . _toolarea . pack_start ( sep , False , True , 0 )
842+ sep . show_all ()
827843
828844
829845class StatusbarGTK3 (StatusbarBase , Gtk .Statusbar ):
0 commit comments