731
class FramedSectionAlt(gtk.VBox):
733
def __init__(self, xpadding=SPACING_MED):
734
gtk.VBox.__init__(self)
735
self.set_redraw_on_allocate(False)
737
self.header_alignment = gtk.Alignment(xscale=1.0, yscale=1.0)
738
self.header = gtk.HBox()
739
self.header_vbox = gtk.VBox()
740
header_vb_align = gtk.Alignment(0, 0.5)
741
header_vb_align.add(self.header_vbox)
742
self.header.pack_start(header_vb_align, False)
744
self.header_alignment.add(self.header)
745
self.header_alignment.set_padding(SPACING_SMALL,
750
self.body_alignment = gtk.Alignment(xscale=1.0, yscale=1.0)
751
self.body = gtk.VBox()
752
self.body_alignment.add(self.body)
753
self.body_alignment.set_padding(SPACING_MED, 0, 0, 0)
755
self.body.set_spacing(SPACING_MED)
757
self.pack_start(self.header_alignment, False)
758
self.pack_start(self.body_alignment)
760
self.image = gtk.Image()
761
self.title = EtchedLabel()
762
self.summary = gtk.Label()
764
self.title.set_alignment(0,0.5)
765
self.summary.set_alignment(0,0.5)
767
self.summary.set_line_wrap(True)
769
self.header_vbox.pack_start(self.title, False, False)
770
self.header_vbox.pack_start(self.summary, False)
771
# Make sure the user can select and copy the title/summary
772
#self.label.set_selectable(True)
775
def set_icon_from_name(self, icon_name, icon_size=gtk.ICON_SIZE_MENU):
776
self.image.set_from_icon_name(icon_name, icon_size)
778
if not self.image.parent:
779
self.header.pack_start(self.image, False)
780
self.header.reorder_child(self.image, 0)
784
def set_icon_from_pixbuf(self, pixbuf):
785
self.image.set_from_pixbuf(pixbuf)
787
if not self.image.parent:
788
self.header.pack_start(self.image, False)
789
self.header.reorder_child(self.image, 0)
793
def set_title(self, label='', markup=None):
795
self.title.set_markup(markup)
797
self.title.set_markup('<small>%s</small>' % label)
800
acc = self.get_accessible()
801
acc.set_role(atk.ROLE_SECTION)
804
def set_summary(self, label='', markup=None):
806
self.summary.set_markup(markup)
808
self.summary.set_markup('<small>%s</small>' % label)
811
acc = self.get_accessible()
812
acc.set_role(atk.ROLE_SECTION)
815
def set_xpadding(self, xpadding):
816
self.header_alignment.set_padding(0, 0, xpadding, xpadding)
817
self.body_alignment.set_padding(0, 0, xpadding, xpadding)
818
self.footer_alignment.set_padding(0, 0, xpadding, xpadding)
822
class FramedSection(gtk.VBox):
824
def __init__(self, label_markup=None, xpadding=SPACING_MED):
825
gtk.VBox.__init__(self)
826
self.set_redraw_on_allocate(False)
828
self.header_alignment = gtk.Alignment(xscale=1.0, yscale=1.0)
829
self.header = gtk.HBox()
830
self.header_alignment.add(self.header)
832
self.header_alignment.set_padding(SPACING_SMALL,
837
self.body_alignment = gtk.Alignment(xscale=1.0, yscale=1.0)
838
self.body = gtk.VBox()
839
self.body_alignment.add(self.body)
840
self.body_alignment.set_padding(SPACING_MED, 0, 0, 0)
842
self.footer_alignment = gtk.Alignment(xscale=1.0, yscale=1.0)
843
self.footer = gtk.HBox()
844
self.footer_alignment.add(self.footer)
845
self.footer_alignment.set_padding(0, 0,
849
self.body.set_spacing(SPACING_MED)
850
self.footer.set_size_request(-1, 2*EM)
852
self.pack_start(self.header_alignment, False)
853
self.pack_start(self.body_alignment)
854
self.pack_start(self.footer_alignment, False)
856
self.image = gtk.Image()
857
self.label = EtchedLabel()
858
# Make sure the user can select and copy the title/summary
859
#self.label.set_selectable(True)
860
self.header.pack_start(self.label, False)
862
self.set_label(label_markup)
865
def set_icon_from_name(self, icon_name, icon_size=gtk.ICON_SIZE_MENU):
866
self.image.set_from_icon_name(icon_name, icon_size)
868
if not self.image.parent:
869
self.header.pack_start(self.image, False)
870
self.header.reorder_child(self.image, 0)
874
def set_icon_from_pixbuf(self, pixbuf):
875
self.image.set_from_pixbuf(pixbuf)
877
if not self.image.parent:
878
self.header.pack_start(self.image, False)
879
self.header.reorder_child(self.image, 0)
883
def set_label(self, label='', markup=None):
885
self.label.set_markup(markup)
887
self.label.set_markup('<b>%s</b>' % label)
890
acc = self.get_accessible()
891
acc.set_name(self.label.get_text())
892
acc.set_role(atk.ROLE_SECTION)
895
def set_xpadding(self, xpadding):
896
self.header_alignment.set_padding(0, 0, xpadding, xpadding)
897
self.body_alignment.set_padding(0, 0, xpadding, xpadding)
898
self.footer_alignment.set_padding(0, 0, xpadding, xpadding)
901
def draw(self, cr, a, expose_area, draw_border=True):
902
# if not_overlapping(a, expose_area): return
905
# cr.translate(0.5, 0.5)
909
#a = self.header_alignment.allocation
913
#cr.set_source_rgb(*floats_from_gdkcolor_wit(self.style.base[self.state]))
916
# cr.set_line_width(1)
917
# cr.set_source_rgb(*floats_from_gdkcolor(self.style.dark[self.state]))
925
731
class LayoutView2(gtk.HBox):
927
733
def __init__(self, xspacing=4, yspacing=6):
1003
815
cols[i%n_cols].pack_start(child, False)
1009
class LayoutView(FramedSection):
1012
FramedSection.__init__(self)
1013
self.set_redraw_on_allocate(False)
1015
self.column_hbox = gtk.HBox(spacing=SPACING_SMALL)
1016
self.column_hbox.set_homogeneous(True)
1017
self.body.pack_start(self.column_hbox)
1020
self.widget_list = []
1021
self.theme = get_mkit_theme()
1024
def append(self, widget):
1025
self.widget_list.append(widget)
1028
def set_width(self, width):
1029
self.body.set_size_request(width, -1)
1031
# find widest button/widget
1032
widgets = self.widget_list
1035
widest_w = max(widest_w, btn.calc_width())
1037
# determine number of columns to display
1038
# width -= 100 # fudge number
1039
n_columns = width / widest_w
1040
n_columns = (width - n_columns*self.column_hbox.get_spacing()) / widest_w
1042
if n_columns > len(widgets):
1043
n_columns = len(widgets)
1047
if n_columns == self.n_columns: return
1048
self.clear_columns()
1050
# pack columns into widget
1051
for i in range(n_columns):
1052
self.column_hbox.pack_start(gtk.VBox(spacing=SPACING_LARGE))
1054
# pack buttons into appropriate columns
1056
columns = self.column_hbox.get_children()
1058
columns[i].pack_start(btn, False)
1065
self.n_columns = n_columns
1068
def clear_all(self):
1069
# destroy all columns and column-children
1070
self.widget_list = []
1072
for col in self.column_hbox.get_children():
1073
for child in col.get_children():
1078
def clear_columns(self):
1079
# remove columns, but do not destroy column-children
1080
for col in self.column_hbox.get_children():
1081
for btn in col.get_children():
1086
def draw(self, cr, a, expose_area):
1087
if not_overlapping(a, expose_area): return
1090
# FramedSection.draw(self, cr, a, expose_area)
1092
for btn in self.widget_list:
1094
if a.width == 1 or a.height == 1: break
1096
btn.draw(cr, a, expose_area)
818
self.n_columns = n_cols