class EditFrame(TopLevelBase, EditStylesMixin, BitmapMixin): _PROPERTIES = [ "Widget", "title", "icon", "centered", "sizehints", "menubar", "toolbar", "statusbar", "style" ] PROPERTIES = TopLevelBase.PROPERTIES + _PROPERTIES _PROPERTY_HELP = {'icon': BitmapMixin.bitmap_tooltip_text} _PROPERTY_LABELS = { "sizehints": 'Set Size Hints', "menubar": 'Has MenuBar', "toolbar": 'Has ToolBar', "statusbar": 'Has StatusBar' } def __init__(self, name, parent, id, title, style=wx.DEFAULT_FRAME_STYLE, klass='wxFrame'): #XXX style is not used TopLevelBase.__init__(self, name, klass, parent, id, title=title) self.properties["base"].set('wxFrame') EditStylesMixin.__init__(self) # initialise instance properties self.icon = np.BitmapPropertyD("", default_value="") self.centered = np.CheckBoxProperty(False, default_value=False) self.sizehints = np.CheckBoxProperty(False, default_value=False) self.menubar = np.CheckBoxProperty(False, default_value=False) self.toolbar = np.CheckBoxProperty(False, default_value=False) if "statusbar" in self.PROPERTIES: self.statusbar = np.CheckBoxProperty(False, default_value=False) self._statusbar = None else: self.statusbar = None self._menubar = self._toolbar = None # these properties will hold the EditMenubar instances etc. def create_widget(self): if self.parent: parent = self.parent.widget else: #parent = common.palette parent = None self.widget = wx.Frame(parent, self.id, self.title, style=self.style) self._set_widget_icon() def finish_widget_creation(self): # add menu, status and tool bar TopLevelBase.finish_widget_creation(self) if not self.properties['size'].is_active(): self.widget.SetSize((400, 300)) if wx.Platform == '__WXMSW__': self.widget.CenterOnScreen() if self.menubar and self._menubar.widget: self.widget.SetMenuBar(self._menubar.widget) if self.statusbar and self._statusbar.widget: self.widget.SetStatusBar(self._statusbar.widget) if self.toolbar and self._toolbar.widget: self.widget.SetToolBar(self._toolbar.widget) def remove(self, *args): # remove menu, status and tool bar if self.menubar: self._menubar = self._menubar.remove(gtk_do_nothing=True) if self.statusbar: self._statusbar = self._statusbar.remove(do_nothing=True) if self.toolbar: self._toolbar = self._toolbar.remove(do_nothing=True) TopLevelBase.remove(self, *args) def _set_widget_icon(self): if self.icon: bitmap = self.get_preview_obj_bitmap(self.icon.strip()) else: xpm = os.path.join(config.icons_path, 'frame.xpm') bitmap = misc.get_xpm_bitmap(xpm) icon = compat.wx_EmptyIcon() icon.CopyFromBitmap(bitmap) self.widget.SetIcon(icon) def _set_menu_bar(self): if self.menubar: # create a MenuBar from menubar import EditMenuBar self._menubar = EditMenuBar(self.name + '_menubar', 'wxMenuBar', self) self._menubar.node = Node(self._menubar) common.app_tree.add(self._menubar.node, self.node) if self.widget: self._menubar.create() else: # remove if self._menubar is None: return self._menubar = self._menubar.remove() def _set_status_bar(self): if self.statusbar: # create a StatusBar from statusbar import EditStatusBar self._statusbar = EditStatusBar(self.name + '_statusbar', 'wxStatusBar', self) if self.widget: self._statusbar.create() else: # remove if self._statusbar is None: return self._statusbar = self._statusbar.remove() if self.widget: # this is needed at least on win32 wx.PostEvent( self.widget, wx.SizeEvent(self.widget.GetSize(), self.widget.GetId())) def _set_tool_bar(self): if self.toolbar: # create a ToolBar from toolbar import EditToolBar self._toolbar = EditToolBar(self.name + '_toolbar', 'wxToolBar', self) self._toolbar.node = Node(self._toolbar) common.app_tree.add(self._toolbar.node, self.node) if self.widget: self._toolbar.create() else: # remove if self._toolbar is None: return self._toolbar = self._toolbar.remove() def properties_changed(self, modified): if not modified or "icon" in modified and self.widget: self._set_widget_icon() if not modified or "menubar" in modified: self._set_menu_bar() if not modified or "statusbar" in modified: self._set_status_bar() if not modified or "toolbar" in modified: self._set_tool_bar() TopLevelBase.properties_changed(self, modified) EditStylesMixin.properties_changed(self, modified)