📄 splitter_window.py
字号:
sp = max_pos/2 if self.orientation == wx.SPLIT_VERTICAL: self.widget.SplitVertically(self.window_1.widget, self.window_2.widget, sp) else: self.widget.SplitHorizontally(self.window_1.widget, self.window_2.widget, sp) for w in self.window_1, self.window_2: if hasattr(w, 'sel_marker'): w.sel_marker.update() def get_style(self): retval = [0] * len(self.style_pos) if not self.style: # style is wxSP_NOBORDER #retval[5] = 1 retval[4] = 1 try: for i in range(len(self.style_pos)): if self.style & self.style_pos[i]: retval[i] = 1 except AttributeError: pass if retval[1] and retval[2]: # wx.SP_3D == wx.SP_3DSASH | wx.SP_3DBORDER retval[0] = 1 retval[1] = retval[2] = 0 elif retval[1] or retval[2]: retval[0] = 0 return retval def set_style(self, value): value = self.properties['style'].prepare_value(value) self.style = 0 for v in range(len(value)): if value[v]: self.style |= self.style_pos[v] if self.widget: self.widget.SetWindowStyleFlag(self.style) def get_sash_pos(self): return self.sash_pos def set_sash_pos(self, value): try: value = int(value) except ValueError: return self.sash_pos = value if self.widget: self.widget.SetSashPosition(value) def on_size(self, event): if not self.widget: return try: if self.orientation == wx.SPLIT_VERTICAL: max_pos = self.widget.GetClientSize()[0] else: max_pos = self.widget.GetClientSize()[1] self.properties['sash_pos'].set_range(-max_pos, max_pos) if not self.properties['sash_pos'].is_active(): self.widget.SetSashPosition(max_pos/2) self.sash_pos = self.widget.GetSashPosition() self.properties['sash_pos'].set_value(self.sash_pos) except (AttributeError, KeyError): pass ManagedBase.on_size(self, event) def on_sash_pos_changed(self, event): self.sash_pos = self.widget.GetSashPosition() self.properties['sash_pos'].set_value(self.sash_pos) event.Skip() def get_orientation(self): od = { wx.SPLIT_HORIZONTAL: 'wxSPLIT_HORIZONTAL', wx.SPLIT_VERTICAL: 'wxSPLIT_VERTICAL' } return od.get(self.orientation, 'wxSPLIT_VERTICAL') def set_orientation(self, value): od = { 'wxSPLIT_HORIZONTAL': wx.SPLIT_HORIZONTAL, 'wxSPLIT_VERTICAL': wx.SPLIT_VERTICAL } self.orientation = od.get(value, wx.SPLIT_VERTICAL) def get_win_1(self): if not isinstance(self.window_1, SizerSlot): return self.window_1.name return '' def get_win_2(self): if not isinstance(self.window_2, SizerSlot): return self.window_2.name return '' def get_no_custom_class(self): return self.no_custom_class def set_no_custom_class(self, value): self.no_custom_class = bool(int(value))# end of class EditSplitterWindowdef 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 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 windowdef initialize(): """\ initialization function for the module: returns a wxBitmapButton to be added to the main palette. """ common.widgets['EditSplitterWindow'] = builder common.widgets_from_xml['EditSplitterWindow'] = xml_builder return common.make_object_button('EditSplitterWindow', 'icons/splitter_window.xpm')
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -