Beispiel #1
0
    def build_dlg(self):
	top = self.top

	button = UpdatedButton(top, text = _("Close"), name = 'close',
				       command = self.close_dlg)
	button.pack(side = BOTTOM, expand = 0, fill = X)
	button = UpdatedButton(top, text = _("Apply"),
			       command = self.apply_style,
			       sensitivecb = self.can_apply)
	button.pack(side = BOTTOM, expand = 0, fill = X)
	self.Subscribe(SELECTION, button.Update)

	button = UpdatedButton(top, text = _("Delete"),
			       command = self.remove_style,
			       sensitivecb = self.can_remove)
	button.pack(side = BOTTOM, expand = 0, fill = X)

	list_frame = Frame(top)
	list_frame.pack(side = TOP, expand = 1, fill = BOTH)

	sb_vert = Scrollbar(list_frame, takefocus = 0)
	sb_vert.pack(side = RIGHT, fill = Y)
	styles = UpdatedListbox(list_frame, name = 'list')
	styles.pack(expand = 1, fill = BOTH)
	styles.Subscribe(COMMAND, self.apply_style)
	sb_vert['command'] = (styles, 'yview')
	styles['yscrollcommand'] = (sb_vert, 'set')
	self.styles = styles
Beispiel #2
0
    def build_dlg(self):
        top = self.top

        list_frame = Frame(top)
        list_frame.pack(side=TOP, expand=1, fill=BOTH)

        sb_vert = Scrollbar(list_frame, takefocus=0)
        sb_vert.pack(side=RIGHT, fill=Y)
        module_list = UpdatedListbox(list_frame, name="list")
        module_list.pack(expand=1, fill=BOTH)
        module_list.Subscribe(COMMAND, self.do_reload)
        sb_vert["command"] = (module_list, "yview")
        module_list["yscrollcommand"] = (sb_vert, "set")
        self.module_list = module_list

        frame = Frame(top)
        frame.pack(side=BOTTOM, fill=X)
        for text, cmd in [
            ("Reload Module", self.do_reload),
            ("Update List", self.update_list),
            ("Close", self.close_dlg),
        ]:
            button = UpdatedButton(frame, text=text, command=cmd)
            button.pack(side=TOP, fill=X, expand=1)

        self.update_list()
Beispiel #3
0
    def build_dlg(self):
	top = self.top

	var_number = DoubleVar(top)
	var_unit = StringVar(top)
	self.var_pos = LengthVar(1.0, config.preferences.default_unit,
                                 var_number, var_unit, command = self.set_pos)
	pos_frame = Frame(top)
	pos_frame.pack(side = TOP, fill = X, expand = 0)
	self.var_label = StringVar(top)
	self.var_label.set('X:')
	label = Label(pos_frame, textvariable = self.var_label)
	label.pack(side = LEFT, expand = 1, anchor = E)
	entry = MyEntry(pos_frame, textvariable = var_number,
			justify = RIGHT, width = 4,
			command = self.var_pos.UpdateNumber)
	entry.pack(side = LEFT, expand = 1, fill = X, anchor = E)
	scroll = MiniScroller(pos_frame, variable = var_number,
			      min = 0, max = None, step = 1)
	scroll.pack(side = LEFT, fill = Y)
	optmenu = create_unit_menu(pos_frame, self.set_unit,
				   variable = var_unit,
				   indicatoron = 0, width = 3)
	optmenu.pack(side = LEFT, expand = 1, fill = X, anchor = W)

	list_frame = Frame(top)
	list_frame.pack(side = TOP, expand = 1, fill = BOTH)

	sb_vert = Scrollbar(list_frame, takefocus = 0)
	sb_vert.pack(side = RIGHT, fill = Y)
	guides = UpdatedListbox(list_frame, name = 'list')
	guides.pack(expand = 1, fill = BOTH)
	guides.Subscribe(SELECTION, self.select_guide)
	sb_vert['command'] = (guides, 'yview')
	guides['yscrollcommand'] = (sb_vert, 'set')
	self.guides = guides
	self.selected = None

	frame = Frame(top)
	frame.pack(side = BOTTOM, fill = X)
	button = UpdatedButton(frame, text = _("Add H"),
			       command = self.add_guide, args = 1)
	button.pack(side = LEFT)
	button = UpdatedButton(frame, text = _("Add V"),
			       command = self.add_guide, args = 0)
	button.pack(side = LEFT)
	button = UpdatedButton(frame, text = _("Delete"),
			       command = self.del_guide)
	button.pack(side = LEFT)
	button = UpdatedButton(frame, text = _("Close"),
			       command = self.close_dlg)
	button.pack(side = RIGHT)
Beispiel #4
0
    def build_dlg(self):
        top = self.top

        list_frame = Frame(top)
        list_frame.pack(side=TOP, expand=1, fill=BOTH)

        sb_vert = Scrollbar(list_frame, takefocus=0)
        sb_vert.pack(side=RIGHT, fill=Y)
        module_list = UpdatedListbox(list_frame, name='list')
        module_list.pack(expand=1, fill=BOTH)
        module_list.Subscribe(COMMAND, self.do_reload)
        sb_vert['command'] = (module_list, 'yview')
        module_list['yscrollcommand'] = (sb_vert, 'set')
        self.module_list = module_list

        frame = Frame(top)
        frame.pack(side=BOTTOM, fill=X)
        for text, cmd in [('Reload Module', self.do_reload),
                          ('Update List', self.update_list),
                          ('Close', self.close_dlg)]:
            button = UpdatedButton(frame, text=text, command=cmd)
            button.pack(side=TOP, fill=X, expand=1)

        self.update_list()
Beispiel #5
0
    def build_dlg(self):
        top = self.top

        buttons = self.create_std_buttons(top)
        buttons.grid(row=3, column=4, columnspan=2, sticky="news")

        self.sample = FontPreview(top)
        self.sample.grid(column=0, row=3, columnspan=4, sticky="news")
        # XXX: the background color of the sample text should be
        # configurable

        label = Label(top, text=_("Font Family:"), anchor=W)
        label.grid(column=0, row=0, columnspan=2, sticky="ew")
        sb_vert = Scrollbar(top, takefocus=0)
        sb_vert.grid(column=1, row=1, rowspan=2, sticky="news")
        family_list = UpdatedListbox(top, name='families', height=8)
        family_list.grid(column=0, row=1, rowspan=2, sticky="news")
        family_list.Subscribe(SELECTION, self.family_selected)
        sb_vert['command'] = (family_list, 'yview')
        family_list['yscrollcommand'] = (sb_vert, 'set')
        self.family_list = family_list

        label = Label(top, text=_("Font Style:"), anchor=W)
        label.grid(column=2, row=0, sticky="ew")
        sb_vert = Scrollbar(top, takefocus=0)
        sb_vert.grid(column=3, row=1, rowspan=2, sticky="news")
        self.font_attr_list = UpdatedListbox(top,
                                             name='weights',
                                             height=4,
                                             width=15)
        self.font_attr_list.grid(column=2, row=1, rowspan=2, sticky="news")
        self.font_attr_list.Subscribe(SELECTION, self.attr_selected)
        sb_vert['command'] = (self.font_attr_list, 'yview')
        self.font_attr_list['yscrollcommand'] = (sb_vert, 'set')

        label = Label(top, text=_("Size:"), anchor=W)
        label.grid(column=4, row=0, columnspan=2, sticky="ew")

        frame = Frame(top)
        frame.grid(column=4, row=1, columnspan=2, sticky='ew')
        self.var_size = DoubleVar(top)
        scroll = MiniScroller(frame,
                              variable=self.var_size,
                              min=0.0,
                              max=None,
                              step=1)
        scroll.pack(side=RIGHT, fill=Y)
        self.size_entry = MyEntry(frame,
                                  textvariable=self.var_size,
                                  width=4,
                                  command=self.apply_size,
                                  justify=RIGHT)
        self.size_entry.pack(side=LEFT, expand=1, fill=BOTH)

        sb_vert = Scrollbar(top, takefocus=0)
        sb_vert.grid(column=5, row=2, sticky="news")
        self.size_list = UpdatedListbox(top, name='sizes', width=4, height=5)
        self.size_list.grid(column=4, row=2, sticky="news")
        self.size_list.Subscribe(SELECTION, self.size_selected)
        self.size_list.SetList(std_sizes)
        sb_vert['command'] = (self.size_list, 'yview')
        self.size_list['yscrollcommand'] = (sb_vert, 'set')

        top.columnconfigure(0, weight=1000)
        top.columnconfigure(4, weight=1)
        top.rowconfigure(2, weight=1)
Beispiel #6
0
class FontPanel(StylePropertyPanel):

    title = _("Fonts")

    def __init__(self, master, main_window, doc):
        self.family_to_fonts = font.make_family_to_fonts()
        self.families = self.family_to_fonts.keys()
        self.families.sort()
        StylePropertyPanel.__init__(self,
                                    master,
                                    main_window,
                                    doc,
                                    name='fontdlg')
        self.family_list.SetList(self.families)
        index = self.families.index(self.font_family)
        self.family_list.select_set(index)
        self.family_list.yview(index)

    def build_dlg(self):
        top = self.top

        buttons = self.create_std_buttons(top)
        buttons.grid(row=3, column=4, columnspan=2, sticky="news")

        self.sample = FontPreview(top)
        self.sample.grid(column=0, row=3, columnspan=4, sticky="news")
        # XXX: the background color of the sample text should be
        # configurable

        label = Label(top, text=_("Font Family:"), anchor=W)
        label.grid(column=0, row=0, columnspan=2, sticky="ew")
        sb_vert = Scrollbar(top, takefocus=0)
        sb_vert.grid(column=1, row=1, rowspan=2, sticky="news")
        family_list = UpdatedListbox(top, name='families', height=8)
        family_list.grid(column=0, row=1, rowspan=2, sticky="news")
        family_list.Subscribe(SELECTION, self.family_selected)
        sb_vert['command'] = (family_list, 'yview')
        family_list['yscrollcommand'] = (sb_vert, 'set')
        self.family_list = family_list

        label = Label(top, text=_("Font Style:"), anchor=W)
        label.grid(column=2, row=0, sticky="ew")
        sb_vert = Scrollbar(top, takefocus=0)
        sb_vert.grid(column=3, row=1, rowspan=2, sticky="news")
        self.font_attr_list = UpdatedListbox(top,
                                             name='weights',
                                             height=4,
                                             width=15)
        self.font_attr_list.grid(column=2, row=1, rowspan=2, sticky="news")
        self.font_attr_list.Subscribe(SELECTION, self.attr_selected)
        sb_vert['command'] = (self.font_attr_list, 'yview')
        self.font_attr_list['yscrollcommand'] = (sb_vert, 'set')

        label = Label(top, text=_("Size:"), anchor=W)
        label.grid(column=4, row=0, columnspan=2, sticky="ew")

        frame = Frame(top)
        frame.grid(column=4, row=1, columnspan=2, sticky='ew')
        self.var_size = DoubleVar(top)
        scroll = MiniScroller(frame,
                              variable=self.var_size,
                              min=0.0,
                              max=None,
                              step=1)
        scroll.pack(side=RIGHT, fill=Y)
        self.size_entry = MyEntry(frame,
                                  textvariable=self.var_size,
                                  width=4,
                                  command=self.apply_size,
                                  justify=RIGHT)
        self.size_entry.pack(side=LEFT, expand=1, fill=BOTH)

        sb_vert = Scrollbar(top, takefocus=0)
        sb_vert.grid(column=5, row=2, sticky="news")
        self.size_list = UpdatedListbox(top, name='sizes', width=4, height=5)
        self.size_list.grid(column=4, row=2, sticky="news")
        self.size_list.Subscribe(SELECTION, self.size_selected)
        self.size_list.SetList(std_sizes)
        sb_vert['command'] = (self.size_list, 'yview')
        self.size_list['yscrollcommand'] = (sb_vert, 'set')

        top.columnconfigure(0, weight=1000)
        top.columnconfigure(4, weight=1)
        top.rowconfigure(2, weight=1)

    def init_from_doc(self):
        object = self.document.CurrentObject()
        if object is not None and object.is_Text:
            self.update_from_object_cb(object)
        else:
            default = font.GetFont(config.preferences.default_font)
            self.font_family = default.family
            self.font_attr = default.font_attrs
            self.update_from_family()
            self.update_size(properties.default_text_style.font_size)

    def Update(self):
        self.update_from_object_cb(self.document.CurrentObject())

    def update_from_object_cb(self, obj):
        if obj is not None and obj.is_Text:
            font = obj.Font()
            self.font_family = font.family
            self.font_attr = font.font_attrs
            self.update_size(obj.FontSize())
            self.update_from_family()

    def do_apply(self):
        name = self.current_font_ps()
        if not name:
            if __debug__:
                pdebug(None, 'FontPanel.do_apply: no ps name!')
            return
        kw = {
            'font': font.GetFont(name),
            'font_size': self.var_size.get(),
            # set if_type_present to one to make sure that font
            # properties are only set on objects that can have font
            # properties. This is not ideal, but it works and needed
            # only simple changes to base.py
            'if_type_present': 1
        }
        self.set_properties(_("Set Font `%s'") % name, 'font', kw)

    def update_from_family(self, set_view=1):
        index = self.families.index(self.font_family)
        self.family_list.Select(index, set_view)
        fonts = self.family_to_fonts[self.font_family]
        attrs = []
        for name in fonts:
            attrs.append(font.fontmap[name][1])

        attrs.sort()
        self.set_font_attrs(attrs)
        self.update_sample()

    def update_size(self, size):
        self.var_size.set(size)
        if size in std_sizes:
            self.size_list.Select(list(std_sizes).index(size), 1)
        else:
            self.size_list.SelectNone()

    def update_sample(self):
        self.sample.SetFont(self.current_font_ps())

    def set_font_attrs(self, attrs):
        self.font_attrs = attrs
        self.font_attr_list.SetList(attrs)
        self.font_attr = get_from_list(self.font_attr, attrs)
        self.font_attr_list.Select(attrs.index(self.font_attr), 1)

    def current_font_xlfd(self):
        fonts = self.family_to_fonts[self.font_family]
        for name in fonts:
            family, attrs, xlfd_start, encoding = font.fontmap[name]
            if attrs == self.font_attr:
                return font.xlfd_template % (xlfd_start, 24, encoding)
        return ''

    def current_font_ps(self):
        fonts = self.family_to_fonts[self.font_family]
        for name in fonts:
            family, attrs, xlfd_start, encoding = font.fontmap[name]
            if attrs == self.font_attr:
                return name
        return ''

    def family_selected(self):
        sel = self.family_list.curselection()
        if sel:
            index = sel[0]
            self.font_family = self.families[index]
            self.update_from_family(set_view=0)

    def attr_selected(self):
        sel = self.font_attr_list.curselection()
        if sel:
            index = sel[0]
            self.font_attr = self.font_attrs[index]
            self.update_sample()

    def size_selected(self):
        sel = self.size_list.curselection()
        if sel:
            self.var_size.set(self.size_list.get(sel[0]))

    def apply_size(self, *args):
        if self.can_apply():
            size = self.var_size.get()
            self.document.CallObjectMethod(text.CommonText,
                                           _("Set Font Size %.1f") % size,
                                           'SetFontSize', size)

    def save_prefs(self):
        StylePropertyPanel.save_prefs(self)
        config.preferences.sample_text = self.sample.Text()
Beispiel #7
0
    def build_dlg(self):
        top = self.top

        var_number = DoubleVar(top)
        var_unit = StringVar(top)
        self.var_pos = LengthVar(1.0,
                                 config.preferences.default_unit,
                                 var_number,
                                 var_unit,
                                 command=self.set_pos)
        pos_frame = Frame(top)
        pos_frame.pack(side=TOP, fill=X, expand=0)
        self.var_label = StringVar(top)
        self.var_label.set('X:')
        label = Label(pos_frame, textvariable=self.var_label)
        label.pack(side=LEFT, expand=1, anchor=E)
        entry = MyEntry(pos_frame,
                        textvariable=var_number,
                        justify=RIGHT,
                        width=4,
                        command=self.var_pos.UpdateNumber)
        entry.pack(side=LEFT, expand=1, fill=X, anchor=E)
        scroll = MiniScroller(pos_frame,
                              variable=var_number,
                              min=0,
                              max=None,
                              step=1)
        scroll.pack(side=LEFT, fill=Y)
        optmenu = create_unit_menu(pos_frame,
                                   self.set_unit,
                                   variable=var_unit,
                                   indicatoron=0,
                                   width=3)
        optmenu.pack(side=LEFT, expand=1, fill=X, anchor=W)

        list_frame = Frame(top)
        list_frame.pack(side=TOP, expand=1, fill=BOTH)

        sb_vert = Scrollbar(list_frame, takefocus=0)
        sb_vert.pack(side=RIGHT, fill=Y)
        guides = UpdatedListbox(list_frame, name='list')
        guides.pack(expand=1, fill=BOTH)
        guides.Subscribe(SELECTION, self.select_guide)
        sb_vert['command'] = (guides, 'yview')
        guides['yscrollcommand'] = (sb_vert, 'set')
        self.guides = guides
        self.selected = None

        frame = Frame(top)
        frame.pack(side=BOTTOM, fill=X)
        button = UpdatedButton(frame,
                               text=_("Add H"),
                               command=self.add_guide,
                               args=1)
        button.pack(side=LEFT)
        button = UpdatedButton(frame,
                               text=_("Add V"),
                               command=self.add_guide,
                               args=0)
        button.pack(side=LEFT)
        button = UpdatedButton(frame, text=_("Delete"), command=self.del_guide)
        button.pack(side=LEFT)
        button = UpdatedButton(frame, text=_("Close"), command=self.close_dlg)
        button.pack(side=RIGHT)
Beispiel #8
0
    def build_dlg(self):
	top = self.top

	buttons = self.create_std_buttons(top)
	buttons.grid(row = 3, column = 4, columnspan = 2, sticky = "news")

	self.sample_text = StringVar(top)
	self.sample_text.set(config.preferences.sample_text)
	self.sample = Entry(top, textvariable = self.sample_text,
			    relief = FLAT, bg = top['bg'],
			    width = len(config.preferences.sample_text))
	self.sample.grid(column = 0, row = 3, columnspan = 4, sticky = "news")
	# XXX: the background color of the sample text should be
	# configurable

	label = Label(top, text = _("Font Family:"), anchor = W)
	label.grid(column = 0, row = 0, columnspan = 2, sticky = "ew")
	sb_vert = Scrollbar(top, takefocus = 0)
	sb_vert.grid(column = 1, row = 1, rowspan = 2, sticky = "news")
	family_list = UpdatedListbox(top, name = 'families', height = 8)
	family_list.grid(column = 0, row = 1, rowspan = 2, sticky = "news")
	family_list.Subscribe(SELECTION, self.family_selected)
	sb_vert['command'] = (family_list, 'yview')
	family_list['yscrollcommand'] = (sb_vert, 'set')
	self.family_list = family_list

	label = Label(top, text = _("Font Style:"), anchor = W)
	label.grid(column = 2, row = 0, sticky = "ew")
	sb_vert = Scrollbar(top, takefocus = 0)
	sb_vert.grid(column = 3, row = 1, rowspan = 2, sticky = "news")
	self.font_attr_list = UpdatedListbox(top, name = 'weights', height = 4,
					     width = 15)
	self.font_attr_list.grid(column = 2, row = 1, rowspan = 2,
				 sticky = "news")
	self.font_attr_list.Subscribe(SELECTION, self.attr_selected)
	sb_vert['command'] = (self.font_attr_list, 'yview')
	self.font_attr_list['yscrollcommand'] = (sb_vert, 'set')

	label = Label(top, text = _("Size:"), anchor = W)
	label.grid(column = 4, row = 0, columnspan = 2, sticky = "ew")

	frame = Frame(top)
	frame.grid(column = 4, row = 1, columnspan = 2, sticky = 'ew')
	self.var_size = DoubleVar(top)
	scroll = MiniScroller(frame, variable = self.var_size,
			      min = 0.0, max = None, step = 1)
	scroll.pack(side = RIGHT, fill = Y)
	self.size_entry = MyEntry(frame, textvariable = self.var_size,
				  width = 4, command = self.apply_size,
				  justify = RIGHT)
	self.size_entry.pack(side = LEFT, expand = 1, fill = BOTH)

	sb_vert = Scrollbar(top, takefocus = 0)
	sb_vert.grid(column = 5, row = 2, sticky = "news")
	self.size_list = UpdatedListbox(top, name = 'sizes', width = 4,
					height = 5)
	self.size_list.grid(column = 4, row = 2, sticky = "news")
	self.size_list.Subscribe(SELECTION, self.size_selected)
	self.size_list.SetList(std_sizes)
	sb_vert['command'] = (self.size_list, 'yview')
	self.size_list['yscrollcommand'] = (sb_vert, 'set')

	top.columnconfigure(0, weight = 1000)
	top.columnconfigure(4, weight = 1)
	top.rowconfigure(2, weight = 1)
Beispiel #9
0
class FontPanel(StylePropertyPanel):

    title = _("Fonts")

    def __init__(self, master, main_window, doc):
	self.family_to_fonts = font.make_family_to_fonts()
	self.families = self.family_to_fonts.keys()
	self.families.sort()
	StylePropertyPanel.__init__(self, master, main_window, doc,
                                    name = 'fontdlg')
	self.family_list.SetList(self.families)
	index = self.families.index(self.font_family)
	self.family_list.select_set(index)
	self.family_list.yview(index)

    def build_dlg(self):
	top = self.top

	buttons = self.create_std_buttons(top)
	buttons.grid(row = 3, column = 4, columnspan = 2, sticky = "news")

	self.sample_text = StringVar(top)
	self.sample_text.set(config.preferences.sample_text)
	self.sample = Entry(top, textvariable = self.sample_text,
			    relief = FLAT, bg = top['bg'],
			    width = len(config.preferences.sample_text))
	self.sample.grid(column = 0, row = 3, columnspan = 4, sticky = "news")
	# XXX: the background color of the sample text should be
	# configurable

	label = Label(top, text = _("Font Family:"), anchor = W)
	label.grid(column = 0, row = 0, columnspan = 2, sticky = "ew")
	sb_vert = Scrollbar(top, takefocus = 0)
	sb_vert.grid(column = 1, row = 1, rowspan = 2, sticky = "news")
	family_list = UpdatedListbox(top, name = 'families', height = 8)
	family_list.grid(column = 0, row = 1, rowspan = 2, sticky = "news")
	family_list.Subscribe(SELECTION, self.family_selected)
	sb_vert['command'] = (family_list, 'yview')
	family_list['yscrollcommand'] = (sb_vert, 'set')
	self.family_list = family_list

	label = Label(top, text = _("Font Style:"), anchor = W)
	label.grid(column = 2, row = 0, sticky = "ew")
	sb_vert = Scrollbar(top, takefocus = 0)
	sb_vert.grid(column = 3, row = 1, rowspan = 2, sticky = "news")
	self.font_attr_list = UpdatedListbox(top, name = 'weights', height = 4,
					     width = 15)
	self.font_attr_list.grid(column = 2, row = 1, rowspan = 2,
				 sticky = "news")
	self.font_attr_list.Subscribe(SELECTION, self.attr_selected)
	sb_vert['command'] = (self.font_attr_list, 'yview')
	self.font_attr_list['yscrollcommand'] = (sb_vert, 'set')

	label = Label(top, text = _("Size:"), anchor = W)
	label.grid(column = 4, row = 0, columnspan = 2, sticky = "ew")

	frame = Frame(top)
	frame.grid(column = 4, row = 1, columnspan = 2, sticky = 'ew')
	self.var_size = DoubleVar(top)
	scroll = MiniScroller(frame, variable = self.var_size,
			      min = 0.0, max = None, step = 1)
	scroll.pack(side = RIGHT, fill = Y)
	self.size_entry = MyEntry(frame, textvariable = self.var_size,
				  width = 4, command = self.apply_size,
				  justify = RIGHT)
	self.size_entry.pack(side = LEFT, expand = 1, fill = BOTH)

	sb_vert = Scrollbar(top, takefocus = 0)
	sb_vert.grid(column = 5, row = 2, sticky = "news")
	self.size_list = UpdatedListbox(top, name = 'sizes', width = 4,
					height = 5)
	self.size_list.grid(column = 4, row = 2, sticky = "news")
	self.size_list.Subscribe(SELECTION, self.size_selected)
	self.size_list.SetList(std_sizes)
	sb_vert['command'] = (self.size_list, 'yview')
	self.size_list['yscrollcommand'] = (sb_vert, 'set')

	top.columnconfigure(0, weight = 1000)
	top.columnconfigure(4, weight = 1)
	top.rowconfigure(2, weight = 1)

    def init_from_doc(self):
        object = self.document.CurrentObject()
        if object is not None and object.is_Text:
            self.update_from_object_cb(object)
        else:
            default = font.GetFont(config.preferences.default_font)
            self.font_family = default.family
            self.font_attr = default.font_attrs
            self.update_from_family()
            self.update_size(properties.default_text_style.font_size)
        
    def Update(self):
        self.update_from_object_cb(self.document.CurrentObject())

    def update_from_object_cb(self, obj):
	if obj is not None and obj.is_Text:
	    font = obj.Font()
            self.font_family = font.family
	    self.font_attr = font.font_attrs
            self.update_size(obj.FontSize())
	    self.update_from_family()

    def do_apply(self):
        name = self.current_font_ps()
        if not name:
            if __debug__:
                pdebug(None, 'FontPanel.do_apply: no ps name!')
            return
        kw = {'font': font.GetFont(name),
              'font_size': self.var_size.get(),
              # set if_type_present to one to make sure that font
              # properties are only set on objects that can have font
              # properties. This is not ideal, but it works and needed
              # only simple changes to base.py
              'if_type_present': 1}
        self.set_properties(_("Set Font `%s'") % name, 'font', kw)

    def update_from_family(self, set_view = 1):
	index = self.families.index(self.font_family)
	self.family_list.Select(index, set_view)
	fonts = self.family_to_fonts[self.font_family]
	attrs = []
	for name in fonts:
	    attrs.append(font.fontmap[name][1])

	attrs.sort()
	self.set_font_attrs(attrs)
	self.update_sample()

    def update_size(self, size):
        self.var_size.set(size)
        if size in std_sizes:
            self.size_list.Select(list(std_sizes).index(size), 1)
        else:
            self.size_list.SelectNone()

    def update_sample(self):
	xlfd = self.current_font_xlfd()
	if not xlfd:
	    xlfd = 'fixed'
	self.sample['font'] = xlfd

    def set_font_attrs(self, attrs):
	self.font_attrs = attrs
	self.font_attr_list.SetList(attrs)
	self.font_attr = get_from_list(self.font_attr, attrs)
	self.font_attr_list.Select(attrs.index(self.font_attr), 1)

    def current_font_xlfd(self):
	fonts = self.family_to_fonts[self.font_family]
	for name in fonts:
	    family, attrs, xlfd_start, encoding = font.fontmap[name]
	    if attrs == self.font_attr:
		return font.xlfd_template % (xlfd_start, 24, encoding)
	return ''

    def current_font_ps(self):
	fonts = self.family_to_fonts[self.font_family]
	for name in fonts:
	    family, attrs, xlfd_start, encoding = font.fontmap[name]
	    if attrs == self.font_attr:
		return name
	return ''

    def family_selected(self):
	sel = self.family_list.curselection()
	if sel:
	    index = string.atoi(sel[0])
	    self.font_family = self.families[index]
	    self.update_from_family(set_view = 0)

    def attr_selected(self):
	sel = self.font_attr_list.curselection()
	if sel:
	    index = string.atoi(sel[0])
	    self.font_attr = self.font_attrs[index]
	    self.update_sample()

    def size_selected(self):
	sel = self.size_list.curselection()
	if sel:
	    self.var_size.set(self.size_list.get(sel[0]))

    def apply_size(self, *args):
	if self.can_apply():
	    size = self.var_size.get()
	    self.document.CallObjectMethod(text.CommonText,
					   _("Set Font Size %.1f") % size,
					   'SetFontSize', size)

    def save_prefs(self):
	StylePropertyPanel.save_prefs(self)
	config.preferences.sample_text = self.sample_text.get()