def xml_toplevel_builder(attrs, parent, sizer, sizeritem, pos=None): from xml_parse import XmlParsingError try: label = attrs['name'] except KeyError: raise XmlParsingError, _("'name' attribute missing") panel = EditTopLevelPanel(label, parent, wx.NewId(), common.property_panel, show=False, style=0) node = Tree.Node(panel) panel.node = node common.app_tree.add(node) return panel
def builder(parent, sizer, pos, number=[1]): """\ factory function for EditListCtrl objects. """ name = 'list_ctrl_%d' % number[0] while common.app_tree.has_name(name): number[0] += 1 name = 'list_ctrl_%d' % number[0] list_ctrl = EditListCtrl(name, parent, wx.NewId(), sizer, pos, common.property_panel) node = Tree.Node(list_ctrl) list_ctrl.node = node list_ctrl.set_option(1) list_ctrl.set_flag("wxEXPAND") list_ctrl.show_widget(True) common.app_tree.insert(node, sizer.node, pos - 1) sizer.set_item(list_ctrl.pos, 1, wx.EXPAND)
def _add_tab(self, window, pos): if window is None: window = SizerSlot(self, self.virtual_sizer, pos) self.tabs[pos - 1][1] = window else: window._dont_destroy = True node = Tree.Node(window) window.node = node common.app_tree.add(node, self.node) if self.widget: window.show_widget(True) self.virtual_sizer.set_item(pos) try: misc.wxCallAfter(window.sel_marker.update) except AttributeError, e: #print e pass
def xml_builder(attrs, parent, sizer, sizeritem, pos=None): """\ factory to build EditSpacer objects from an xml file """ from xml_parse import XmlParsingError if not sizer or not sizeritem: raise XmlParsingError, _("sizer or sizeritem object cannot be None") spacer = EditSpacer('spacer', parent, wx.NewId(), 1, 1, sizer, pos, common.property_panel, True) sizer.set_item(spacer.pos, option=sizeritem.option, flag=sizeritem.flag, border=sizeritem.border) node = Tree.Node(spacer) spacer.node = node if pos is None: common.app_tree.add(node, sizer.node) else: common.app_tree.insert(node, sizer.node, pos - 1) return spacer
def xml_builder(attrs, parent, sizer, sizeritem, pos=None): """\ factory to build EditBitmapButton objects from an xml file """ from xml_parse import XmlParsingError try: label = attrs['name'] except KeyError: raise XmlParsingError, _("'name' attribute missing") if sizer is None or sizeritem is None: raise XmlParsingError, _("sizer or sizeritem object cannot be None") button = EditBitmapButton(label, parent, wx.NewId(), '', sizer, pos, common.property_panel, show=False) sizer.set_item(button.pos, option=sizeritem.option, flag=sizeritem.flag, border=sizeritem.border) #, size=button.GetBestSize()) node = Tree.Node(button) button.node = node if pos is None: common.app_tree.add(node, sizer.node) else: common.app_tree.insert(node, sizer.node, pos-1) return button
def builder(parent, sizer, pos, number=[1]): """\ factory function for EditGrid objects. """ label = 'grid_%d' % number[0] while common.app_tree.has_name(label): number[0] += 1 label = 'grid_%d' % number[0] grid = EditGrid(label, parent, wx.NewId(), sizer, pos, common.property_panel) # A grid should be wx.EXPANDed and 'option' should be 1, # or you can't see it. grid.set_option(1) grid.set_flag("wxEXPAND") node = Tree.Node(grid) grid.node = node grid.show_widget(True) common.app_tree.insert(node, sizer.node, pos-1)
def xml_builder(attrs, parent, sizer, sizeritem, pos=None): """\ factory to build EditStaticLine objects from an xml file """ from xml_parse import XmlParsingError try: name = attrs['name'] except KeyError: raise XmlParsingError, _("'name' attribute missing") if sizer is None or sizeritem is None: raise XmlParsingError, _("sizer or sizeritem object cannot be None") static_line = EditStaticLine(name, parent, wx.NewId(), 0, sizer, pos, common.property_panel) sizer.set_item(static_line.pos, option=sizeritem.option, flag=sizeritem.flag, border=sizeritem.border) node = Tree.Node(static_line) static_line.node = node if pos is None: common.app_tree.add(node, sizer.node) else: common.app_tree.insert(node, sizer.node, pos-1) return static_line
def xml_builder(attrs, parent, sizer, sizeritem, pos=None): """\ factory to build EditDialog objects from an xml file """ from xml_parse import XmlParsingError try: label = attrs['name'] except KeyError: raise XmlParsingError, _("'name' attribute missing") dialog = EditDialog(label, parent, wx.NewId(), "", common.property_panel, show=False) node = Tree.Node(dialog) dialog.node = node common.app_tree.add(node) return dialog
def __init__(self, parent, property_window): EditBase.__init__(self, parent.name + '_statusbar', 'wxStatusBar', parent, id, property_window, custom_class=False, show=False) # style property self.style_pos = (wx.ST_SIZEGRIP, ) style_labels = ('#section#' + _('Style'), 'wxST_SIZEGRIP') self.access_functions['style'] = (self.get_style, self.set_style) self.properties['style'] = CheckListProperty(self, 'style', None, style_labels) self.node = Tree.Node(self) common.app_tree.add(self.node, parent.node) self.fields = [[self.name, "-1"]] # list of 2-lists label, size # for the statusbar fields self.access_functions['fields'] = (self.get_fields, self.set_fields) prop = self.properties['fields'] = GridProperty( self, 'fields', None, [("Text", GridProperty.STRING), ("Size", GridProperty.INT)]) # replace the default 'write' method of 'prop' with a custom one def write_prop(outfile, tabs): from xml.sax.saxutils import escape, quoteattr fwrite = outfile.write fwrite(' ' * tabs + '<fields>\n') tabs += 1 import widget_properties for label, width in self.fields: fwrite(' ' * tabs + '<field width=%s>%s</field>\n' % (quoteattr(width), escape(widget_properties._encode(label)))) tabs -= 1 fwrite(' ' * tabs + '</fields>\n') prop.write = write_prop
def builder(parent, sizer, pos, number=[1]): """\ factory function for EditComboBox objects. """ name = 'combo_box_%d' % number[0] while common.app_tree.has_name(name): number[0] += 1 name = 'combo_box_%d' % number[0] choice = EditComboBox( name, parent, wx.NewId(), #[misc._encode('choice 1')], [], sizer, pos, common.property_panel) node = Tree.Node(choice) # sizer.set_item(pos, size=choice.GetBestSize()) choice.node = node choice.show_widget(True) common.app_tree.insert(node, sizer.node, pos - 1)
def builder(parent, sizer, pos, number=[1]): """\ factory function for EditStaticLine objects. """ class Dialog(wx.Dialog): def __init__(self): wx.Dialog.__init__(self, None, -1, 'Select orientation') self.orientations = [ wx.LI_HORIZONTAL, wx.LI_VERTICAL ] self.orientation = wx.LI_HORIZONTAL prop = RadioProperty(self, 'orientation', self, ['wxLI_HORIZONTAL', 'wxLI_VERTICAL'], label=_("orientation")) szr = wx.BoxSizer(wx.VERTICAL) szr.Add(prop.panel, 0, wx.ALL|wx.EXPAND, 10) btn = wx.Button(self, wx.ID_OK, _('OK')) btn.SetDefault() szr.Add(btn, 0, wx.BOTTOM|wx.ALIGN_CENTER, 10) self.SetAutoLayout(True) self.SetSizer(szr) szr.Fit(self) self.CenterOnScreen() def __getitem__(self, value): def set_orientation(o): self.orientation = self.orientations[o] return (lambda: self.orientation, set_orientation) # end of inner class dialog = Dialog() dialog.ShowModal() label = 'static_line_%d' % number[0] while common.app_tree.has_name(label): number[0] += 1 label = 'static_line_%d' % number[0] static_line = EditStaticLine(label, parent, wx.NewId(), dialog.orientation, sizer, pos, common.property_panel) node = Tree.Node(static_line) static_line.node = node static_line.set_flag("wxEXPAND") static_line.show_widget(True) common.app_tree.insert(node, sizer.node, pos-1)
def builder(parent, sizer, pos): """\ factory function for EditSpacer objects. """ class Dialog(wx.Dialog): def __init__(self): wx.Dialog.__init__(self, misc.get_toplevel_parent(parent), -1, _("Enter size")) self.width = SpinProperty(self, 'width', self, label=_("width")) self.height = SpinProperty(self, 'height', self, label=_("height")) self.width.set_value(20) self.height.set_value(20) szr = wx.BoxSizer(wx.VERTICAL) szr.Add(self.width.panel, 0, wx.EXPAND) szr.Add(self.height.panel, 0, wx.EXPAND) sz = wx.BoxSizer(wx.HORIZONTAL) sz.Add(wx.Button(self, wx.ID_OK, _('OK'))) szr.Add(sz, 0, wx.ALL | wx.ALIGN_CENTER, 4) self.SetAutoLayout(True) self.SetSizer(szr) szr.Fit(self) self.CenterOnScreen() def __getitem__(self, name): return (lambda: 0, lambda v: None) # end of inner class dialog = Dialog() dialog.ShowModal() name = 'spacer' spacer = EditSpacer(name, parent, wx.NewId(), dialog.width.get_value(), dialog.height.get_value(), sizer, pos, common.property_panel) node = Tree.Node(spacer) spacer.node = node spacer.show_widget(True) common.app_tree.insert(node, sizer.node, pos - 1)
def add_widget_node(widget, sizer, pos, from_xml=False, option=0, flag=0, border=0): node = Tree.Node(widget) widget.node = node if not border and config.preferences.default_border: flag |= wx.ALL border = config.preferences.default_border_size if option: widget.set_option(option) if flag: widget.set_int_flag(flag) if border: widget.set_border(border) if not from_xml: widget.show_widget(True) sizer.set_item(widget.pos, option, flag, border) if pos is None: common.app_tree.add(node, sizer.node) else: common.app_tree.insert(node, sizer.node, pos - 1)
def xml_builder(attrs, parent, sizer, sizeritem, pos=None): """\ factory to build EditDatePickerCtrl objects from an xml file """ from xml_parse import XmlParsingError try: label = attrs['name'] except KeyError: raise XmlParsingError, _("'name' attribute missing") if sizer is None or sizeritem is None: raise XmlParsingError, _("sizer or sizeritem object cannot be None") datepicker_ctrl = EditDatePickerCtrl(label, parent, wx.NewId(), sizer, pos, common.property_panel, show=False) node = Tree.Node(datepicker_ctrl) datepicker_ctrl.node = node if pos is None: common.app_tree.add(node, sizer.node) else: common.app_tree.insert(node, sizer.node, pos - 1) return datepicker_ctrl
def xml_builder(attrs, parent, sizer, sizeritem, pos=None): """\ factory to build EditListBox objects from an xml file """ from xml_parse import XmlParsingError try: name = attrs['name'] except KeyError: raise XmlParsingError, _("'name' attribute missing") if sizer is None or sizeritem is None: raise XmlParsingError, _("sizer or sizeritem object cannot be None") list_box = EditListBox(name, parent, wx.NewId(), [], sizer, pos, common.property_panel) sizer.set_item(list_box.pos, option=sizeritem.option, flag=sizeritem.flag, border=sizeritem.border) ## size=list_box.GetBestSize()) node = Tree.Node(list_box) list_box.node = node if pos is None: common.app_tree.add(node, sizer.node) else: common.app_tree.insert(node, sizer.node, pos - 1) return list_box
def xml_builder(attrs, parent, sizer, sizeritem, pos=None): """\ factory to build EditSplitterWindow objects from an xml file """ from xml_parse import XmlParsingError try: name = attrs['name'] except KeyError: raise XmlParsingError, _("'name' attribute missing") if not sizer or not sizeritem: raise XmlParsingError, _("sizer or sizeritem object cannot be None") window = EditSplitterWindow(name, parent, wx.NewId(), None, None, None, wx.SPLIT_VERTICAL, sizer, pos, common.property_panel, True) sizer.set_item(window.pos, option=sizeritem.option, flag=sizeritem.flag, border=sizeritem.border) node = Tree.Node(window) window.node = node window.virtual_sizer.node = node if pos is None: common.app_tree.add(node, sizer.node) else: common.app_tree.insert(node, sizer.node, pos - 1) return window
def builder(parent, sizer, pos, number=[0]): """\ factory function for EditFrame objects. """ class Dialog(wx.Dialog): def __init__(self): wx.Dialog.__init__(self, None, -1, _('Select frame class')) if common.app_tree.app.get_language().lower() == 'xrc': self.klass = 'wxFrame' else: if not number[0]: self.klass = 'MyFrame' else: self.klass = 'MyFrame%s' % number[0] number[0] += 1 self.base = 0 base_prop = RadioProperty(self, 'base class', self, ['wxFrame', 'wxMDIChildFrame'], label=_("base class")) klass_prop = TextProperty(self, 'class', self, label=_("class")) szr = wx.BoxSizer(wx.VERTICAL) szr.Add(base_prop.panel, 0, wx.ALL | wx.EXPAND, 5) szr.Add(klass_prop.panel, 0, wx.EXPAND) btnbox = wx.BoxSizer(wx.HORIZONTAL) btnOK = wx.Button(self, wx.ID_OK, _('OK')) btnCANCEL = wx.Button(self, wx.ID_CANCEL, _('Cancel')) btnbox.Add(btnOK, 0, wx.ALL, 3) btnbox.Add(btnCANCEL, 0, wx.ALL, 3) btnOK.SetFocus() szr.Add(btnbox, 0, wx.ALL | wx.ALIGN_CENTER, 3) self.SetAutoLayout(True) self.SetSizer(szr) szr.Fit(self) self.CenterOnScreen() def undo(self): if number[0] > 0: number[0] -= 1 def __getitem__(self, value): if value == 'class': def set_klass(c): self.klass = c return (lambda: self.klass, set_klass) else: def set_base(b): self.base = b return (lambda: self.base, set_base) # end of inner class dialog = Dialog() # Check if the user hit Cancel, if so then bail out if dialog.ShowModal() == wx.ID_CANCEL: # restore state dialog.undo() # clean up resources dialog.Destroy() return label = 'frame_%d' % (number[0] or 1) while common.app_tree.has_name(label): number[0] += 1 label = 'frame_%d' % number[0] if dialog.base == 0: base_class = EditFrame else: base_class = EditMDIChildFrame frame = base_class(label, parent, wx.NewId(), label, common.property_panel, klass=dialog.klass) node = Tree.Node(frame) frame.node = node common.app_tree.add(node) frame.show_widget(True) # add a default vertical sizer to the frame import edit_sizers edit_sizers._builder(frame, None, 0) # now select the frame's node in the tree common.app_tree.select_item(node) dialog.Destroy() if wx.Platform == '__WXMSW__': #frame.widget.CenterOnScreen() frame.widget.Raise()
def builder(parent, sizer, pos, number=[1]): """\ factory function for EditSplitterWindow objects. """ class Dialog(wx.Dialog): def __init__(self): wx.Dialog.__init__(self, None, -1, 'Select orientation') self.orientations = [wx.SPLIT_VERTICAL, wx.SPLIT_HORIZONTAL] self.orientation = wx.SPLIT_VERTICAL prop = RadioProperty(self, 'orientation', self, ['wxSPLIT_VERTICAL', 'wxSPLIT_HORIZONTAL'], label=_("orientation")) szr = wx.BoxSizer(wx.VERTICAL) szr.Add(prop.panel, 0, wx.ALL | wx.EXPAND, 10) btn = wx.Button(self, wx.ID_OK, _('OK')) btn.SetDefault() szr.Add(btn, 0, wx.BOTTOM | wx.ALIGN_CENTER, 10) self.SetAutoLayout(True) self.SetSizer(szr) szr.Fit(self) self.CenterOnScreen() def __getitem__(self, value): def set_orientation(o): self.orientation = self.orientations[o] return (lambda: self.orientation, set_orientation) # end of inner class dialog = Dialog() dialog.ShowModal() name = 'window_%d' % number[0] while common.app_tree.has_name(name): number[0] += 1 name = 'window_%d' % number[0] window = EditSplitterWindow(name, parent, wx.NewId(), None, None, None, dialog.orientation, sizer, pos, common.property_panel, show=False) try: from panel import EditPanel have_panels = True except ImportError: have_panels = False if have_panels: pane1 = EditPanel(name + '_pane_1', window, wx.NewId(), window.virtual_sizer, 1, common.property_panel) pane2 = EditPanel(name + '_pane_2', window, wx.NewId(), window.virtual_sizer, 2, common.property_panel) window.window_1 = pane1 window.window_2 = pane2 node = Tree.Node(window) window.node = node window.virtual_sizer.node = node window.set_option(1) window.set_flag("wxEXPAND") window.show_widget(True) common.app_tree.insert(node, sizer.node, pos - 1) if have_panels: node2 = Tree.Node(window.window_1) window.window_1.node = node2 common.app_tree.add(node2, window.node) node3 = Tree.Node(window.window_2) window.window_2.node = node3 common.app_tree.add(node3, window.node) sizer.set_item(window.pos, 1, wx.EXPAND)
def builder(parent, sizer, pos, number=[1]): """\ factory function for EditNotebook objects. """ class Dialog(wx.Dialog): def __init__(self): wx.Dialog.__init__(self, None, -1, _('Select tab placement')) self.styles = [0, wx.NB_BOTTOM, wx.NB_LEFT, wx.NB_RIGHT] self.style = 0 prop = RadioProperty( self, 'tab_placement', self, [_('Top'), _('Bottom'), _('Left'), _('Right')], columns=2, label=_('tab_placement')) szr = wx.BoxSizer(wx.VERTICAL) szr.Add(prop.panel, 0, wx.ALL | wx.EXPAND, 10) btn = wx.Button(self, wx.ID_OK, _('OK')) btn.SetDefault() szr.Add(btn, 0, wx.BOTTOM | wx.ALIGN_CENTER, 10) self.SetAutoLayout(True) self.SetSizer(szr) szr.Fit(self) self.CenterOnScreen() def __getitem__(self, value): def set_style(s): self.style = self.styles[s] return (lambda: self.style, set_style) # end of inner class dialog = Dialog() dialog.ShowModal() name = 'notebook_%d' % number[0] while common.app_tree.has_name(name): number[0] += 1 name = 'notebook_%d' % number[0] window = EditNotebook(name, parent, wx.NewId(), dialog.style, sizer, pos, common.property_panel, show=False) if _has_panel: pane1 = EditPanel(name + '_pane_1', window, wx.NewId(), window.virtual_sizer, 1, common.property_panel) node = Tree.Node(window) window.node = node window.virtual_sizer.node = node window.set_option(1) window.set_flag("wxEXPAND") window.show_widget(True) common.app_tree.insert(node, sizer.node, pos - 1) if _has_panel: window._add_tab(pane1, 1) sizer.set_item(window.pos, 1, wx.EXPAND)
def builder(parent, sizer, pos, number=[1]): """\ factory function for EditStaticLine objects. """ class Dialog(wx.Dialog): def __init__(self): wx.Dialog.__init__(self, None, -1, _('Select style')) self.orientations = [wx.SL_HORIZONTAL, wx.SL_VERTICAL] self.orientation = wx.SL_HORIZONTAL prop = RadioProperty(self, 'orientation', self, ['wxSL_HORIZONTAL', 'wxSL_VERTICAL'], label=_("orientation")) szr = wx.BoxSizer(wx.VERTICAL) szr.Add(prop.panel, 0, wx.ALL | wx.EXPAND, 10) style_labels = ('#section#', 'wxSL_AUTOTICKS', 'wxSL_LABELS', 'wxSL_LEFT', 'wxSL_RIGHT', 'wxSL_TOP') self.style_pos = (wx.SL_AUTOTICKS, wx.SL_LABELS, wx.SL_LEFT, wx.SL_RIGHT, wx.SL_TOP) self.style = 0 self.style_prop = CheckListProperty(self, 'style', self, style_labels) szr.Add(self.style_prop.panel, 0, wx.ALL | wx.EXPAND, 10) btn = wx.Button(self, wx.ID_OK, _('OK')) btn.SetDefault() szr.Add(btn, 0, wx.BOTTOM | wx.ALIGN_CENTER, 10) self.SetAutoLayout(True) self.SetSizer(szr) szr.Fit(self) self.CenterOnScreen() def __getitem__(self, value): if value == 'orientation': def set_orientation(o): self.orientation = self.orientations[o] return (lambda: self.orientation, set_orientation) else: return (self.get_style, self.set_style) def get_style(self): retval = [0] * len(self.style_pos) try: style = self.style for i in range(len(self.style_pos)): if style & self.style_pos[i]: retval[i] = 1 except AttributeError: pass return retval def set_style(self, value): value = self.style_prop.prepare_value(value) style = 0 for v in range(len(value)): if value[v]: style |= self.style_pos[v] self.style = style # end of inner class dialog = Dialog() dialog.ShowModal() label = 'slider_%d' % number[0] while common.app_tree.has_name(label): number[0] += 1 label = 'slider_%d' % number[0] slider = EditSlider(label, parent, wx.NewId(), dialog.orientation | dialog.style, sizer, pos, common.property_panel) node = Tree.Node(slider) slider.node = node slider.show_widget(True) common.app_tree.insert(node, sizer.node, pos - 1)
def builder(parent, sizer, pos, number=[0]): """\ factory function for EditDialog objects. """ try: import panel has_panel = True except ImportError: has_panel = False class Dialog(wx.Dialog): def __init__(self): if has_panel: title = 'Select widget type' else: title = 'Select dialog class' wx.Dialog.__init__(self, None, -1, title) if common.app_tree.app.get_language().lower() == 'xrc': self.klass = 'wxDialog' else: if not number[0]: self.klass = 'MyDialog' else: self.klass = 'MyDialog%s' % number[0] number[0] += 1 self.klass_prop = TextProperty(self, 'class', None) #self) self.widget = 0 szr = wx.BoxSizer(wx.VERTICAL) if has_panel: widget_prop = RadioProperty(self, 'widget', self, ['wxDialog', 'wxPanel']) szr.Add(widget_prop.panel, 0, wx.ALL | wx.EXPAND, 5) self.klass_prop.display(self) szr.Add(self.klass_prop.panel, 0, wx.ALL | wx.EXPAND, 5) btnbox = wx.BoxSizer(wx.HORIZONTAL) btnOK = wx.Button(self, wx.ID_OK, _('OK')) btnCANCEL = wx.Button(self, wx.ID_CANCEL, _('Cancel')) btnbox.Add(btnOK, 0, wx.ALL, 3) btnbox.Add(btnCANCEL, 0, wx.ALL, 3) btnOK.SetFocus() szr.Add(btnbox, 0, wx.ALL | wx.ALIGN_CENTER, 3) self.SetAutoLayout(True) self.SetSizer(szr) szr.Fit(self) if self.GetSize()[0] < 150: self.SetSize((150, -1)) self.klass_modified = False self.CenterOnScreen() def undo(self): if number[0] > 0: number[0] -= 1 def set_klass(self, c): self.klass = c self.klass_modified = True def set_widget(self, c): self.widget = int(c) if not self.klass_modified: try: number = str(int(self.klass[-1])) except ValueError: number = '' if common.app_tree.app.get_language().lower() == 'xrc': if self.widget == 0: self.klass = 'wxDialog' else: self.klass = 'wxPanel' else: if self.widget == 0: self.klass = 'MyDialog' + number else: self.klass = 'MyPanel' + number self.klass_prop.set_value(self.klass) def __getitem__(self, value): if value == 'class': return (lambda: self.klass, self.set_klass) else: return (lambda: self.widget, self.set_widget) # end of inner class class_dialog = Dialog() # Check if the user hit Cancel, if so then bail out if class_dialog.ShowModal() == wx.ID_CANCEL: # restore state class_dialog.undo() # clean up resources class_dialog.Destroy() return if class_dialog.widget == 0: name = 'dialog' else: name = 'panel' label = '%s_%d' % (name, (number[0] or 1)) while common.app_tree.has_name(label): number[0] += 1 label = '%s_%d' % (name, number[0]) if class_dialog.widget == 0: is_panel = False dialog = EditDialog(label, parent, wx.NewId(), label, common.property_panel, klass=class_dialog.klass) else: is_panel = True import panel dialog = panel.EditTopLevelPanel(label, parent, wx.NewId(), common.property_panel, klass=class_dialog.klass) node = Tree.Node(dialog) dialog.node = node dialog.show_widget(True) common.app_tree.add(node) class_dialog.Destroy() if wx.Platform == '__WXMSW__': if not is_panel: w = dialog.widget else: w = dialog.widget.GetParent() w.CenterOnScreen() w.Raise()