def _create_inside_panel(self): self.dvc = dv.DataViewCtrl(self.mainpanel, style=wx.BORDER_THEME | dv.DV_VERT_RULES \ | dv.DV_MULTIPLE | dv.DV_ROW_LINES ) # dv_col = self.dvc.AppendTextColumn("Name", 0, width=120) dv_col.SetMinWidth(120) # dvcr = TidRenderer() dv_col = dv.DataViewColumn("Datatype", dvcr, 1, width=100) dv_col.SetMinWidth(100) self.dvc.AppendColumn(dv_col) # dvcr = DatatypeRenderer() dv_col = dv.DataViewColumn("Curvetype", dvcr, 2, width=100) dv_col.SetMinWidth(100) self.dvc.AppendColumn(dv_col) # dv_col = self.dvc.AppendTextColumn("Curve Name", 3, width=100) dv_col.SetMinWidth(100) # dv_col = self.dvc.AppendTextColumn("Start", 4, width=100) dv_col.SetMinWidth(100) # dv_col = self.dvc.AppendTextColumn("End", 5, width=100) dv_col.SetMinWidth(100) # dv_col = self.dvc.AppendTextColumn("Unit", 6, width=80, mode=dv.DATAVIEW_CELL_ACTIVATABLE) dv_col.SetMinWidth(80) # dv_col = self.dvc.AppendToggleColumn("Import", 7, width=70, mode=dv.DATAVIEW_CELL_ACTIVATABLE) dv_col.SetMinWidth(70) # dv_col = self.dvc.AppendProgressColumn("Progress", 8, width=100) dv_col.SetMinWidth(100) # for dv_col in self.dvc.Columns: dv_col.Renderer.Alignment = wx.ALIGN_CENTER dv_col.SetAlignment(wx.ALIGN_CENTER) # sizer = wx.BoxSizer(wx.VERTICAL) sizer.Add(self.dvc, 1, wx.EXPAND | wx.ALL, border=10) self._create_bottom_buttons_panel() sizer.Add(self.bottom_buttons_panel, 0, wx.EXPAND | wx.BOTTOM | wx.TOP) self.mainpanel.SetSizer(sizer) self.mainpanel.Layout()
def RefreshColumns(self): colsLabels = {x.Title for x in self.Columns} cs = {x.Title: x for x in self.Columns} ts = dict() tlabels = set() for card in self.model.cards: for k in card.Values: t = self.parent.templates[card.Template] if k in t.column: tlabels.add(k) ts[k] = card.Template for c in columns: tlabels.add(c) toaddlabels = tlabels - colsLabels - set(columns) tosupprlabels = colsLabels - tlabels for l in toaddlabels: typ, default = self.parent.templates[ts[l]].column[l] tr = template_columns_type[typ](mode=dv.DATAVIEW_CELL_ACTIVATABLE) col = dv.DataViewColumn( l, # title tr, # renderer len(self.cols) + len(self.model.templateColumns) + 1, # data model column width=80) self.AppendColumn(col) #col=self.AppendTextColumn(l,len(self.cols)+len(self.model.templateColumns)+1) self.model.templateColumns[l] = col #issue with the templtecaolums: removing column would be too hard=> return from herre return for l in tosupprlabels: self.DeleteColumn(cs[l]) del self.model.templateColumns[l]
def __init__(self, parent, log, data=None, model=None): self.log = log wx.Panel.__init__(self, parent, -1) # Create a dataview control self.dvc = dv.DataViewCtrl(self, style=wx.BORDER_THEME | dv.DV_ROW_LINES # nice alternating bg colors #| dv.DV_HORIZ_RULES | dv.DV_VERT_RULES | dv.DV_MULTIPLE ) # Create an instance of our model... if model is None: self.model = MyTreeListModel(data, log) else: self.model = model # Tel the DVC to use the model self.dvc.AssociateModel(self.model) # Define the columns that we want in the view. Notice the # parameter which tells the view which col in the data model to pull # values from for each view column. if 1: self.tr = tr = dv.DataViewTextRenderer() c0 = dv.DataViewColumn("Genre", # title tr, # renderer 0, # data model column width=80) self.dvc.AppendColumn(c0) else: self.dvc.AppendTextColumn("Genre", 0, width=80) c1 = self.dvc.AppendTextColumn("Artist", 1, width=170, mode=dv.DATAVIEW_CELL_EDITABLE) c2 = self.dvc.AppendTextColumn("Title", 2, width=260, mode=dv.DATAVIEW_CELL_EDITABLE) c3 = self.dvc.AppendDateColumn('Acquired', 4, width=100, mode=dv.DATAVIEW_CELL_ACTIVATABLE) c4 = self.dvc.AppendToggleColumn('Like', 5, width=40, mode=dv.DATAVIEW_CELL_ACTIVATABLE) # Notice how we pull the data from col 3, but this is the 6th col # added to the DVC. The order of the view columns is not dependent on # the order of the model columns at all. c5 = self.dvc.AppendTextColumn("id", 3, width=40, mode=dv.DATAVIEW_CELL_EDITABLE) c5.Alignment = wx.ALIGN_RIGHT # Set some additional attributes for all the columns for c in self.dvc.Columns: c.Sortable = True c.Reorderable = True self.Sizer = wx.BoxSizer(wx.VERTICAL) self.Sizer.Add(self.dvc, 1, wx.EXPAND) b1 = wx.Button(self, label="New View", name="newView") self.Bind(wx.EVT_BUTTON, self.OnNewView, b1) self.Sizer.Add(b1, 0, wx.ALL, 5)
def initialize(self, cb_wallet): self.GOOD_BMP = Bitmap(file_path("gui/good.bmp")) self.BAD_BMP = Bitmap(file_path("gui/bad.bmp")) self.m_choice_nwords.Set(WORDSLEN_LIST) self.m_choice_nwords.SetSelection(0) ctab = self.m_dataViewListCtrl1 dv1 = dataview.DataViewColumn("Name", dataview.DataViewTextRenderer(), 0) dv1.SetWidth(125) ctab.AppendColumn(dv1) dv2 = dataview.DataViewColumn("Account", dataview.DataViewTextRenderer(), 1) dv2.SetWidth(372) ctab.AppendColumn(dv2) dv3 = dataview.DataViewColumn("Balance", dataview.DataViewTextRenderer(), 2) dv3.SetWidth(86) ctab.AppendColumn(dv3) self.cb_wallet = cb_wallet
def __init__(self, parent, log, model=None, data=None): self.log = log wx.Panel.__init__(self, parent, -1) # Create a dataview control self.dvc = dv.DataViewCtrl( self, style=wx.BORDER_THEME | dv.DV_ROW_LINES #| dv.DV_HORIZ_RULES | dv.DV_VERT_RULES | dv.DV_MULTIPLE) # Create an instance of the model if model is None: self.model = TestModel(data, log) else: self.model = model self.dvc.AssociateModel(self.model) # Now we create some columns. col = self.dvc.AppendTextColumn("Id", 0, width=40) col.Alignment = wx.ALIGN_RIGHT col.MinWidth = 40 col = self.dvc.AppendTextColumn("Artist", 1, width=170, mode=dv.DATAVIEW_CELL_EDITABLE) col.Alignment = wx.ALIGN_LEFT # Use a custom renderer for the Title column. # NOTE: Using an editor with the custom renderer is only well # supported on the Windows version of the DVC, so we won't turn on # editing in that case, and will inform the user about it. if 'wxMSW' in wx.PlatformInfo: custMode = dv.DATAVIEW_CELL_EDITABLE else: custMode = dv.DATAVIEW_CELL_INERT wx.CallAfter(self.ShowMessage) renderer = MyCustomRenderer(self.log, mode=custMode) col = dv.DataViewColumn("Title", renderer, 2, width=260) col.Alignment = wx.ALIGN_LEFT self.dvc.AppendColumn(col) col = self.dvc.AppendTextColumn("Genre", 3, width=80, mode=dv.DATAVIEW_CELL_EDITABLE) col.Alignment = wx.ALIGN_LEFT self.Sizer = wx.BoxSizer(wx.VERTICAL) self.Sizer.Add(self.dvc, 1, wx.EXPAND)
def test_dataviewColumn(self): r = dv.DataViewIconTextRenderer() # create c = dv.DataViewColumn('title', r, 0) # test that properties exist c.Title c.Bitmap c.Width c.MinWidth c.Alignment c.Flags c.SortOrder self.myYield()
def doListCtrlTest(self, dlc): assert isinstance(dlc, dv.DataViewListCtrl) for label in "one two three four".split(): dlc.AppendTextColumn(label) col = dv.DataViewColumn('five', dv.DataViewBitmapRenderer(), 4) dlc.AppendColumn(col) bmp = wx.Bitmap(pngFile) for n in range(50): rowdata = ['%s-%02d' % (s, n) for s in "one two three four".split()] rowdata.append(bmp) dlc.AppendItem(rowdata) self.frame.SendSizeEvent() dlc.Refresh() self.myYield()
def init_dvc(self, results): data = dict() for r in results: v_result = ViewResult(r) for i in r.iterations: v_iteration = ViewIteration(i, r) v_result.iterations.append(v_iteration) data[r.name] = v_result data = data.values() # Create an instance of our model... self.model = MyTreeListModel(data) self.data = data # Tel the DVC to use the model self.dvc.AssociateModel(self.model) # Define the columns that we want in the view. Notice the # parameter which tells the view which col in the data model to pull # values from for each view column. self.tr = tr = dv.DataViewTextRenderer() tr.EnableEllipsize() tr.SetAlignment(0) c0 = dv.DataViewColumn( L('VIEW_OPTION_RESULTS'), # title tr, # renderer 0, # data model column width=200) self.dvc.AppendColumn(c0) c1 = self.dvc.AppendTextColumn(L('VIEW_ITERATION_F_R'), 1, width=200) c1.Alignment = wx.ALIGN_CENTRE self.dvc.AppendToggleColumn(L('VIEW_ITERATION_OPTION'), 2, width=20, mode=dv.DATAVIEW_CELL_ACTIVATABLE) # Set some additional attributes for all the columns for c in self.dvc.Columns: c.Sortable = True c.Reorderable = True for node in self.model.getParentItem(): self.dvc.Expand(node)
def __init__(self, parent, log, model=None, data=None): self.log = log wx.Panel.__init__(self, parent, -1) # Create a dataview control self.dvc = dv.DataViewCtrl(self, style=wx.BORDER_THEME | dv.DV_ROW_LINES #| dv.DV_HORIZ_RULES | dv.DV_VERT_RULES | dv.DV_MULTIPLE ) # Create an instance of the model if model is None: self.model = TestModel(data, log) else: self.model = model self.dvc.AssociateModel(self.model) # Now we create some columns. col = self.dvc.AppendTextColumn("Id", 0, width=40) col.Alignment = wx.ALIGN_RIGHT col.MinWidth = 40 col = self.dvc.AppendTextColumn("Artist", 1, width=170, mode=dv.DATAVIEW_CELL_EDITABLE) col.Alignment = wx.ALIGN_LEFT renderer = MyCustomRenderer(self.log, mode=dv.DATAVIEW_CELL_EDITABLE) col = dv.DataViewColumn("Title", renderer, 2, width=260) col.Alignment = wx.ALIGN_LEFT self.dvc.AppendColumn(col) col = self.dvc.AppendTextColumn("Genre", 3, width=80, mode=dv.DATAVIEW_CELL_EDITABLE) col.Alignment = wx.ALIGN_LEFT self.Sizer = wx.BoxSizer(wx.VERTICAL) self.Sizer.Add(self.dvc, 1, wx.EXPAND)
def __init__(self, parent, log, model=None, data=None): self.log = log wx.Panel.__init__(self, parent, -1) # Create a dataview control self.dvc = dv.DataViewCtrl(self, style=wx.BORDER_THEME | dv.DV_ROW_LINES #| dv.DV_HORIZ_RULES | dv.DV_VERT_RULES | dv.DV_MULTIPLE ) # Create an instance of the model if model is None: self.model = TestModel(data, log) else: self.model = model self.dvc.AssociateModel(self.model) # Now we create some columns. c0 = self.dvc.AppendTextColumn("Id", 0, width=40) c0.Alignment = wx.ALIGN_RIGHT c0.MinWidth = 40 # We'll use our custom renderer for these columns for title, col, width in [ ('Artist', 1, 170), ('Title', 2, 260), ('Genre', 3, 80)]: renderer = MyCustomRenderer(self.log, mode=dv.DATAVIEW_CELL_EDITABLE) column = dv.DataViewColumn(title, renderer, col, width=width) column.Alignment = wx.ALIGN_LEFT self.dvc.AppendColumn(column) # Layout self.Sizer = wx.BoxSizer(wx.VERTICAL) self.Sizer.Add(self.dvc, 1, wx.EXPAND)
def __init__(self, parent, log, files_name_text, select_list, input_file_name, model_excel_name, data=None, model=None): self.log = log wx.Panel.__init__(self, parent, -1) self.files_name_text = files_name_text self.input_file_name = input_file_name self.model_excel_name = model_excel_name # Create a dataview control self.dvc = dv.DataViewCtrl( self, style=wx.BORDER_THEME | dv.DV_ROW_LINES # nice alternating bg colors #| dv.DV_HORIZ_RULES | dv.DV_VERT_RULES | dv.DV_MULTIPLE) # Create an instance of our model... if model is None: self.model = MyTreeListModel(data, log) else: self.model = model # Tel the DVC to use the model self.dvc.AssociateModel(self.model) # Define the columns that we want in the view. Notice the # parameter which tells the view which col in the data model to pull # values from for each view column. if 0: self.tr = tr = dv.DataViewTextRenderer() c0 = dv.DataViewColumn( "Genre", # title tr, # renderer 0, # data model column width=80) self.dvc.AppendColumn(c0) else: self.dvc.AppendTextColumn("File name", 0, width=250) #c1 = self.dvc.AppendTextColumn("Artist", 1, width=170, mode=dv.DATAVIEW_CELL_EDITABLE) c2 = self.dvc.AppendTextColumn("Title", 2, width=80, mode=dv.DATAVIEW_CELL_EDITABLE) #c3 = self.dvc.AppendDateColumn('index', 4, width=100, mode=dv.DATAVIEW_CELL_ACTIVATABLE) c4 = self.dvc.AppendToggleColumn('select', 5, width=40, mode=dv.DATAVIEW_CELL_ACTIVATABLE) # Notice how we pull the data from col 3, but this is the 6th col # added to the DVC. The order of the view columns is not dependent on # the order of the model columns at all. c5 = self.dvc.AppendTextColumn("id", 3, width=40, mode=dv.DATAVIEW_CELL_EDITABLE) #c5.Alignment = wx.ALIGN_RIGHT # Set some additional attributes for all the columns for c in self.dvc.Columns: c.Sortable = True c.Reorderable = True self.Sizer = wx.BoxSizer(wx.VERTICAL) self.Sizer.Add(self.dvc, 1, wx.EXPAND) #b1 = wx.Button(self, label="Open File", name="openFile") #self.Bind(wx.EVT_BUTTON, self.OnOpen, b1) #b2 = wx.Button(self, label="Del File", name="delFile") #self.Bind(wx.EVT_BUTTON, self.onDel, b2) b3 = wx.Button(self, label="Save File", name="saveFile") self.Bind(wx.EVT_BUTTON, self.OnSave, b3) #b4 = wx.Button(self, label="New View", name="newView") #self.Bind(wx.EVT_BUTTON, self.OnNewView, b4) btnbox = wx.BoxSizer(wx.HORIZONTAL) #btnbox.Add(b1, 0, wx.LEFT|wx.RIGHT, 5) #btnbox.Add(b2, 0, wx.LEFT|wx.RIGHT, 5) btnbox.Add(b3, 0, wx.LEFT | wx.RIGHT, 5) #btnbox.Add(b4, 0, wx.LEFT|wx.RIGHT, 5) self.Sizer.Add(btnbox, 0, wx.TOP | wx.BOTTOM, 5)
def __init__(self, *args, **kargs): page = kargs.pop('page', None) parent = kargs.pop('parent', None) title = kargs.pop('title', 'HDF export') path = kargs.pop('path', os.path.join(os.getcwd(), 'data.hdf')) dataset = kargs.pop('dataset', None) metadata = kargs.pop('metadata', OrderedDict()) export_flag = kargs.pop('export_flag', {}) if dataset is None: if page is None: return dataset, metadata, export_flag = build_data( page, verbose=False, metadata=metadata, export_flag=export_flag) style = (wx.CAPTION | wx.CLOSE_BOX | wx.MINIMIZE_BOX | wx.RESIZE_BORDER) if parent is not None: style = style | wx.FRAME_FLOAT_ON_PARENT wx.Frame.__init__(self, *args, style=style, title=title, parent=parent, size=(400, 500)) self.SetSizer(wx.BoxSizer(wx.VERTICAL)) hsizer = wx.BoxSizer(wx.HORIZONTAL) self.GetSizer().Add(hsizer, 1, wx.EXPAND, 0) panel = wx.Panel(self) hsizer.Add(panel, 1, wx.EXPAND) panel.SetSizer(wx.BoxSizer(wx.VERTICAL)) sizer = panel.GetSizer() sizer_h = wx.BoxSizer(wx.HORIZONTAL) wildcard = "HDF(hdf)|*.hdf|Any|*.*" self.filepicker = wx.FilePickerCtrl(panel, style=wx.FLP_SAVE | wx.FLP_USE_TEXTCTRL, path=path, wildcard=wildcard) self.sp = wx.SplitterWindow(panel, wx.ID_ANY, style=wx.SP_NOBORDER | wx.SP_LIVE_UPDATE | wx.SP_3DSASH) self.dataviewCtrl = dv.DataViewCtrl(self.sp, style=(wx.BORDER_THEME | dv.DV_ROW_LINES | dv.DV_VERT_RULES)) self.model = HDFDataModel(export_flag=export_flag, dataset=dataset, metadata=metadata) self.dataviewCtrl.AssociateModel(self.model) self.tr = tr = dv.DataViewTextRenderer() c0 = dv.DataViewColumn( "name", # title tr, # renderer 0, # data model column width=200) self.dataviewCtrl.AppendColumn(c0) # self.dataviewCtrl.AppendTextColumn('name', 0, # width = 150, # mode=dv.DATAVIEW_CELL_ACTIVATABLE) c1 = self.dataviewCtrl.AppendToggleColumn( 'export', 1, width=70, mode=dv.DATAVIEW_CELL_ACTIVATABLE) c2 = self.dataviewCtrl.AppendTextColumn( 'value', 2, width=100, mode=dv.DATAVIEW_CELL_ACTIVATABLE) c3 = self.dataviewCtrl.AppendTextColumn( 'shape', 3, mode=dv.DATAVIEW_CELL_ACTIVATABLE) #c4 = self.dataviewCtrl.AppendTextColumn('metadata', 4, # mode=dv.DATAVIEW_CELL_ACTIVATABLE) for c in self.dataviewCtrl.Columns: c.Sortable = True c.Reorderable = True c1.Alignment = wx.ALIGN_CENTER #from ifigure.widgets.var_viewerg2 import _PropertyGrid self.grid = pg.PropertyGrid(self.sp) #self.btn_load = wx.Button(self, label = 'Load') self.choices = [ 'Options...', 'No Property', 'Minimum properties', 'All properties' ] self.cb = wx.ComboBox(panel, wx.ID_ANY, style=wx.TE_PROCESS_ENTER | wx.CB_READONLY, choices=self.choices) self.cb.SetValue(self.choices[0]) self.btn_export = wx.Button(panel, label='Export...') sizer.Add(self.filepicker, 0, wx.EXPAND | wx.ALL, 1) sizer.Add(self.sp, 1, wx.EXPAND | wx.ALL, 5) sizer.Add(sizer_h, 0, wx.EXPAND | wx.ALL, 5) #sizer_h.Add(self.btn_load, 0, wx.EXPAND|wx.ALL, 1) sizer_h.Add(self.cb, 0, wx.EXPAND | wx.ALL, 1) sizer_h.AddStretchSpacer(prop=1) sizer_h.Add(self.btn_export, 0, wx.EXPAND | wx.ALL, 1) self.Layout() self.Show() self.sp.SetMinimumPaneSize(30) self.sp.SplitHorizontally(self.dataviewCtrl, self.grid) self.sp.SetSashPosition(300) # self.Bind(dv.EVT_DATAVIEW_ITEM_VALUE_CHANGED, # self.onDataChanged, self.dataviewCtrl) self.Bind(dv.EVT_DATAVIEW_SELECTION_CHANGED, self.onSelChanged, self.dataviewCtrl) # self.Bind(dv.EVT_DATAVIEW_ITEM_COLLAPSING, # self.onCollapsing, self.dataviewCtrl) self.grid.Bind(pg.EVT_PG_CHANGED, self.onPGChanged, self.grid) self.Bind(wx.EVT_BUTTON, self.onExport, self.btn_export) self.Bind(wx.EVT_COMBOBOX, self.onCBHit, self.cb) self.Bind(wx.EVT_CLOSE, self.onWindowClose) self.page = page wx.GetApp().TopWindow.hdf_export_window = self
def __init__(self, parent, data=None, model=None): wx.Panel.__init__(self, parent, size=(600, 250)) self.anuncio = None self.parent = parent self.dvc = dv.DataViewCtrl(self, style=wx.BORDER_THEME | dv.DV_ROW_LINES | dv.DV_VERT_RULES | dv.DV_MULTIPLE) self.model = None if model is None: if data: self.model = MyTreeListModel(data) else: self.model = model # Tel the DVC to use the model if self.model: self.dvc.AssociateModel(self.model) self.tr = tr = dv.DataViewTextRenderer() c0 = dv.DataViewColumn( "Bloque", # title tr, # renderer 0, # data model column width=250) self.dvc.AppendColumn(c0) # else: # self.dvc.AppendTextColumn("Bloque", 0, width=80) c3 = self.dvc.AppendTextColumn('Inicio', 1, width=200, mode=dv.DATAVIEW_CELL_ACTIVATABLE) c4 = self.dvc.AppendTextColumn('Final', 2, width=200, mode=dv.DATAVIEW_CELL_ACTIVATABLE) c1 = self.dvc.AppendTextColumn("Anuncio", 3, width=300, mode=dv.DATAVIEW_CELL_ACTIVATABLE) c2 = self.dvc.AppendTextColumn("Marca", 4, width=150, mode=dv.DATAVIEW_CELL_ACTIVATABLE) c5 = self.dvc.AppendTextColumn("id", 5, width=40, mode=dv.DATAVIEW_CELL_ACTIVATABLE) # Notice how we pull the data from col 3, but this is the 6th col # added to the DVC. The order of the view columns is not dependent on # the order of the model columns at all. # c5.Alignment = wx.ALIGN_RIGHT # Set some additional attributes for all the columns for i, c in enumerate(self.dvc.Columns): c.Sortable = True c.Reorderable = True self.Sizer = wx.BoxSizer(wx.VERTICAL) self.Sizer.Add(self.dvc, 1, wx.EXPAND) self.Bind(dv.EVT_DATAVIEW_ITEM_ACTIVATED, self.OnClick) b1 = wx.Button(self, label="Vista Completa", name="vistacompleta") self.Bind(wx.EVT_BUTTON, self.OnNewView, b1) self.Sizer.Add(b1, 0, wx.ALL, 5)
def _post_init(self): # The native GTK widget used by DataViewCtrl would have an internal # "live" search feature which steals some keyboard shortcuts: Ctrl+n, # Ctrl+p, Ctrl+f, Ctrl+a, Ctrl+Shift+a # https://groups.google.com/d/msg/wxpython-users/1sUPp766uXU/0J22mUrkzoAJ # Ctrl+f can be recovered with by not overriding the Model's # GetColumnType method # See also bug #349 # See bug #260 for generic issues about DataViewCtrl self.treec = dv.DataViewCtrl(self, style=dv.DV_MULTIPLE | dv.DV_NO_HEADER) self.cmenu = ContextMenu(self) self.ctabmenu = TabContextMenu(self.filename) self.logspanel = logs.LogsPanel(self, self.filename) self.dbhistory = logs.DatabaseHistory(self, self.logspanel, self.logspanel.get_panel(), self.filename, self.treec.GetBackgroundColour()) self.properties = Properties(self.treec) self.base_properties = DBProperties(self.properties) self.accelerators = {} creating_tree_event.signal(filename=self.filename) # Initialize the icons only *after* the various plugins have added # their properties self.properties.post_init() # Initialize the tree only *after* instantiating the class (and # initilizing the icons), because actions like the creation of item # images rely on the filename to be in the dictionary for row in core_api.get_all_items(self.filename): self._init_item_data(row["I_id"], row["I_text"]) self.dvmodel = Model(self.data, self.filename) self.treec.AssociateModel(self.dvmodel) # According to DataViewModel's documentation (as of September 2014) # its reference count must be decreased explicitly to avoid memory # leaks; the wxPython demo, however, doesn't do it, and if done here, # the application crashes with a segfault when closing all databases # See also bug #104 #self.dvmodel.DecRef() dvrenderer = Renderer(self, self.treec) dvcolumn = dv.DataViewColumn("Item", dvrenderer, 0, align=wx.ALIGN_LEFT) self.treec.AppendColumn(dvcolumn) self._init_accelerators() self.Initialize(self.treec) # Initialize the logs panel *after* signalling creating_tree_event, # which is used to add plugin logs self.logspanel.initialize() nb_left = wx.GetApp().nb_left nb_left.add_page(self, os.path.basename(self.filename), select=True) # The logs panel must be shown only *after* adding the page to the # notebook, otherwise *for*some*reason* the databases opened # automatically by the sessions manager (those opened manually aren't # affected) will have the sash of the SplitterWindow not correctly # positioned (only if using SetSashGravity) if wx.GetApp().logs_configuration.is_shown(): self.show_logs() self.history_item_update_requests = [] self.history_tree_reset_request = False # Explicitly set focus on the tree, otherwise after opening a database # no window has focus, and this e.g. prevents F10 from showing the menu # if set on autohide, until a window is manually focused (note that # this would happen only when opening a database manually, it wouldn't # happen when a database is opened automatically by the session # manager) self.treec.SetFocus() self.treec.Bind(dv.EVT_DATAVIEW_ITEM_CONTEXT_MENU, self._popup_item_menu) core_api.bind_to_insert_item(self._handle_insert_item) core_api.bind_to_update_item_text(self._handle_update_item_text) core_api.bind_to_deleting_item(self._handle_deleting_item) core_api.bind_to_deleted_item_2(self._handle_deleted_item) core_api.bind_to_history_insert(self._handle_history_insert) core_api.bind_to_history_update_simple( self._handle_history_update_simple) core_api.bind_to_history_update_deep(self._handle_history_update_deep) core_api.bind_to_history_update_text(self._handle_history_update_text) core_api.bind_to_history_remove(self._handle_history_remove) core_api.bind_to_history(self._handle_history)