def load_project_data(self, fullfilename): OM = ObjectManager() UIM = UIManager() self.OM_file = fullfilename ret = OM.load(self.OM_file) if not ret: msg = 'GRIPy project cannot be opened.' wx.MessageBox(msg, 'Error', wx.OK | wx.ICON_ERROR) return mwc = UIM.list('main_window_controller')[0] tree_ctrl = UIM.list('tree_controller', mwc.uid)[0] if tree_ctrl: tree_ctrl.set_project_name(self.OM_file)
def activatePlugin(self): if self.is_activated: return if self.plugin_object._parent_menu: menu_name = self.plugin_object._parent_menu else: menu_name = GripyPlugin._DEFAULT_PARENT_MENU found = None _UIM = UIManager() menus = _UIM.list('menu_controller') for menu in menus: testing_name = menu.label if testing_name.startswith('&'): testing_name = testing_name[1:] if testing_name == menu_name: found = menu if found: msg = 'Plugin {} will try insert itself to Menu {}'.format( self.name, found.label) log.debug(msg) menu_item = _UIM.create('menu_item_controller', found.uid, label=self.name, help=self.description, callback=self.plugin_object.event_run) if menu_item: self._menu_item_uid = menu_item.uid log.debug('Plugin {} was inserted to Menu {}'.format( self.name, found.label)) self.plugin_object.activate() log.debug('Activated plugin: {}'.format(self.name))
def create_depth_canvas(self): self._in_canvas = -1 self._drag_mode = SASH_DRAG_NONE self.canvas_color = 'blue' self.canvas_alt_color = 'red' self.canvas_width = 3 # display_coords = self._get_depth_canvas_display_coords() # UIM = UIManager() tcc = UIM.list('track_canvas_controller', self._controller_uid)[0] # self.d1_canvas = wx.Panel(tcc.view, name='D1') self.d1_canvas.SetSize((display_coords['width'], self.canvas_width)) self.d1_canvas.SetBackgroundColour(self.canvas_color) self.d1_canvas.SetPosition( (display_coords['xmin'], display_coords['ymin'])) # self.d2_canvas = wx.Panel(tcc.view, name='D2') self.d2_canvas.SetSize((display_coords['width'], self.canvas_width)) self.d2_canvas.SetBackgroundColour(self.canvas_color) self.d2_canvas.SetPosition( (display_coords['xmin'], display_coords['ymax'] - self.canvas_width)) # self.d1_canvas.Bind(wx.EVT_MOUSE_EVENTS, self.on_canvas_mouse) self.d2_canvas.Bind(wx.EVT_MOUSE_EVENTS, self.on_canvas_mouse)
def set_multicursor(self, new_value, old_value): UIM = UIManager() tracks = UIM.list('track_controller', self._controller_uid) if not tracks: return for track in tracks: track.view.track.update_multicursor(new_value)
def reposition_depth_canvas(self): UIM = UIManager() controller = UIM.get(self._controller_uid) if not controller.overview: return tcc = UIM.list('track_canvas_controller', self._controller_uid)[0] tcc.reposition_depth_canvas()
def set_ylim(self, ymin, ymax): tcc = self._get_canvas_controller() tcc.ylim = (ymax, ymin) UIM = UIManager() for toc in UIM.list('track_object_controller', self._controller_uid): toc.redraw()
def _on_track_move(self, event): axes = event.inaxes if axes is None: return OM = ObjectManager() UIM = UIManager() parent_controller_uid = UIM._getparentuid(self._controller_uid) parent_controller = UIM.get(parent_controller_uid) info = parent_controller.index_type + ': {:0.2f}'.format(event.ydata) for toc in UIM.list('track_object_controller', self._controller_uid): data = toc.get_data_info(event) if data is None: continue if isinstance(data, float): str_x = '{:0.2f}'.format(data) else: str_x = str(data) obj = OM.get(toc.data_obj_uid) info += ', {}: {}'.format(obj.name, str_x) # print ('on_track_move:', event.xdata, event.ydata) parent_controller.show_status_message(info)
def set_own_name(self): UIM = UIManager() controller = UIM.get(self._controller_uid) idx = 0 lpcs = UIM.list('crossplot_controller') for lpc in lpcs: idx += 1 controller.title = self._get_tid_friendly_name() + ' [' + str(idx) + ']'
def _get_label_controller(self): """ """ UIM = UIManager() controller = UIM.get(self._controller_uid) if controller.overview: return None return UIM.list('track_label_controller', self._controller_uid)[0]
def _menu_selection(self, event): UIM = UIManager() tcc = UIM.list('track_canvas_controller', self._controller_uid)[0] if event.GetId() == ShowGridId: tcc.plotgrid = True elif event.GetId() == HideGridId: tcc.plotgrid = False elif event.GetId() == ScaleLinGridId: tcc.xscale = 'linear' elif event.GetId() == ScaleLogGridId: tcc.xscale = 'log' elif event.GetId() == DepthLinesAllId: tcc.depth_lines = 0 elif event.GetId() == DepthLinesLeftId: tcc.depth_lines = 1 elif event.GetId() == DepthLinesRightId: tcc.depth_lines = 2 elif event.GetId() == DepthLinesCenterId: tcc.depth_lines = 3 elif event.GetId() == DepthLinesLeftRightId: tcc.depth_lines = 4 elif event.GetId() == DepthLinesNoneId: tcc.depth_lines = 5 elif event.GetId() == LogDecades1Id: tcc.decades = 1 elif event.GetId() == LogDecades10Id: tcc.decades = 2 elif event.GetId() == LogDecades100Id: tcc.decades = 3 elif event.GetId() == LogDecades1000Id: tcc.decades = 4 elif event.GetId() == LogDecades10000Id: tcc.decades = 5 elif event.GetId() == LogDecades100000Id: tcc.decades = 6 elif event.GetId() == LogDecades1000000Id: tcc.decades = 7 elif event.GetId() == LinScaleLines0Id: tcc.scale_lines = 0 elif event.GetId() == LinScaleLines1Id: tcc.scale_lines = 1 elif event.GetId() == LinScaleLines2Id: tcc.scale_lines = 2 elif event.GetId() == LinScaleLines3Id: tcc.scale_lines = 3 elif event.GetId() == LinScaleLines4Id: tcc.scale_lines = 4 elif event.GetId() == LinScaleLines5Id: tcc.scale_lines = 5 elif event.GetId() == LinScaleLines6Id: tcc.scale_lines = 6 elif event.GetId() == LinScaleLines7Id: tcc.scale_lines = 7 elif event.GetId() == ShowMinorgridId: tcc.minorgrid = True elif event.GetId() == HideMinorgridId: tcc.minorgrid = False
def get_representation(self): # Returns the real OM.object representation UIM = UIManager() children = UIM.list(None, self.uid) if len(children) == 0: return None for child in children: if isinstance(child, RepresentationController): return child
def _on_change_shown_ylim(self, new_value, old_value): ymin, ymax = new_value if ymin < 0 or ymax < 0: raise Exception() UIM = UIManager() for track in UIM.list('track_controller', self.uid): if not track.overview: track.set_ylim(ymin, ymax) else: track.reposition_depth_canvas() self.view._reload_z_axis_textctrls()
def on_canvas_mouse(self, event): if event.GetEventType() in [wx.wxEVT_MOTION, wx.wxEVT_LEFT_DOWN, wx.wxEVT_LEFT_UP, wx.wxEVT_MOTION | wx.wxEVT_LEFT_DOWN]: UIM = UIManager() tcc = UIM.list('track_canvas_controller', self._controller_uid)[0] new_event = wx.MouseEvent(event.GetEventType()) pos = tcc.view.ScreenToClient(wx.GetMousePosition()) new_event.SetPosition(pos) new_event.Skip() tcc.view.GetEventHandler().ProcessEvent(new_event)
def __len__(self): """ Returns the number of :class:`~GRIPy-3.ui.mvc_classes.TrackController` owned by this object. Returns ------- lenght : int """ UIM = UIManager() return len(UIM.list('track_controller', self.uid))
def get_track_on_position(self, pos, relative_position=True): if pos == -1: return self.get_overview_track() b_splitter = self._tracks_panel.bottom_splitter if relative_position: pos = b_splitter.get_windows_indexes_shown()[pos] bottom_window = b_splitter.GetWindow(pos) UIM = UIManager() for tcc in UIM.list('track_canvas_controller'): if tcc.view == bottom_window: track_ctrl_uid = UIM._getparentuid(tcc.uid) return UIM.get(track_ctrl_uid) raise Exception('Informed position [{}] is invalid.'.format(pos))
def _on_change_index_type(self, new_value, old_value): print('\n_on_change_index_type:', new_value, old_value) UIM = UIManager() try: self._reload_ylims_from_index_type() # TODO: Find a more Pythonic way to write aboxe for track_ctrl in UIM.list('track_controller', self.uid): if track_ctrl.overview: continue """ # print ('overview') try: if self.ot_toc: UIM.remove(self.ot_toc.uid) except Exception as e: print ('UIM.remove(self.ot_toc.uid):', e) # print (self.zaxis_uid) # self.ot_toc = self._overview_track.append_object(self.zaxis_uid) #ot_toc = self._overview_track.append_object(self.zaxis_uid) #ot_toc_repr_ctrl = self.ot_toc.get_representation() # TODO: Update Adaptative #ot_toc_repr_ctrl.step = 200 """ else: for toc_ctrl in UIM.list('track_object_controller', track_ctrl.uid): #dm = toc_ctrl.get_data_mask() toc_ctrl.set_dimension(datatype=new_value) toc_ctrl.redraw() except Exception as e: print('ERROR _on_change_index_type:', e) raise
def _set_pos(self, new_value, old_value): UIM = UIManager() controller = UIM.get(self._controller_uid) main_window_uid = UIM._getparentuid(controller.uid) main_window = UIM.get(main_window_uid) # Check event if new_value < 0 or new_value > main_window.view.get_notebook_page_count() - 1: # Undo wrong event controller.set_value_from_event('pos', old_value) return # Broadcasting position change to other pages for mw_child in UIM.list(tidfilter='workpage_controller', parentuidfilter=main_window_uid): pos = main_window.view.get_notebook_page_index(mw_child.view) mw_child.set_value_from_event('pos', pos)
def _get_sequence_number(self): """ Retorna o numero de ordem considerando a existencia de multiplos objetos do mesmo tipo. """ UIM = UIManager() controller = UIM.get(self._controller_uid) idx = 0 wpcs = UIM.list(self._controller_uid[0]) for wpc in wpcs: if wpc == controller: break if wpc.obj_uid == controller.obj_uid: idx += 1 idx += 1 return idx
def PostInit(self): UIM = UIManager() if self.pos == -1: track_ctrl_uid = UIM._getparentuid(self.uid) self.pos = len(UIM.list(self.tid, track_ctrl_uid))
def load(): # load_UI_file = True load_UI_file = False gripy_app = wx.GetApp() # gripy_app = app.gripy_app.GripyApp.Get() if not gripy_app: raise Exception('ERRO grave.') UIM = UIManager() if load_UI_file: """ Load basic app from file. """ load_application_UI_data(gripy_app._gripy_app_state.get('app_UI_file')) load_user_UI_data(gripy_app._gripy_app_state.get('user_UI_file')) mwc = UIM.list('main_window_controller')[0] else: """ Construct the application itself. """ mwc = UIM.create( 'main_window_controller', title=gripy_app._gripy_app_state.get('app_display_name'), pos=(2000, 800), maximized=True) # """ # Menubar menubar_ctrl = UIM.create('menubar_controller', mwc.uid) # First level Menus mc_project = UIM.create('menu_controller', menubar_ctrl.uid, label=u"&Project") mc_edit = UIM.create('menu_controller', menubar_ctrl.uid, label=u"&Edit") mc_well = UIM.create('menu_controller', menubar_ctrl.uid, label=u"&Well") mc_precond = UIM.create('menu_controller', menubar_ctrl.uid, label=u"&Preconditioning") mc_model = UIM.create('menu_controller', menubar_ctrl.uid, label=u"&Modeling") mc_interp = UIM.create('menu_controller', menubar_ctrl.uid, label=u"&Interpretation") # mc_infer = UIM.create('menu_controller', menubar_ctrl.uid, label=u"&Inference") # mc_specdecom = UIM.create('menu_controller', menubar_ctrl.uid, label=u"&SpecDecom") mc_tools = UIM.create('menu_controller', menubar_ctrl.uid, label=u"&Tools") mc_plugins = UIM.create('menu_controller', menubar_ctrl.uid, label=u"&Plugins") # Project Menu UIM.create('menu_item_controller', mc_project.uid, label=u'&New project', help=u'Create a new empty GriPy Project.', id=wx.ID_NEW, callback='app.menu_functions.on_new') UIM.create('menu_item_controller', mc_project.uid, kind=wx.ITEM_SEPARATOR) UIM.create('menu_item_controller', mc_project.uid, label=u'&Open', help=u'Open GriPy Project (*.pgg)', id=wx.ID_OPEN, callback='app.menu_functions.on_open') UIM.create('menu_item_controller', mc_project.uid, label=u'&Save', help=u'Save GriPy Project', id=wx.ID_SAVE, callback='app.menu_functions.on_save') UIM.create('menu_item_controller', mc_project.uid, label=u'&Save as', help=u'Save GriPy Project with a new name', id=wx.ID_SAVEAS, callback='app.menu_functions.on_save_as') UIM.create('menu_item_controller', mc_project.uid, kind=wx.ITEM_SEPARATOR) mc_import = UIM.create('menu_controller', mc_project.uid, label=u"&Import", help=u"Import file") UIM.create('menu_item_controller', mc_import.uid, label=u"SEG-Y Well Gather", help=u'Import a SEG-Y Seismic file as Well Gather', callback='app.menu_functions.on_import_segy_well_gather') UIM.create( 'menu_item_controller', mc_import.uid, label=u"SEG-Y Seismic", help=u'Import a SEG-Y Seismic file to current GriPy Project', callback='app.menu_functions.on_import_segy_seis') UIM.create( 'menu_item_controller', mc_import.uid, label=u"SEG-Y Velocity", help=u'Import a SEG-Y Velocity file to current GriPy Project', callback='app.menu_functions.on_import_segy_vel') mc_export = UIM.create('menu_controller', mc_project.uid, label=u"Export", help=u"Export file") UIM.create( 'menu_item_controller', mc_export.uid, label=u"LAS File", help=u'Export a LAS file from a well in current GriPy Project', callback='app.menu_functions.on_export_las') UIM.create('menu_item_controller', mc_project.uid, kind=wx.ITEM_SEPARATOR) UIM.create('menu_item_controller', mc_project.uid, label=u'Exit', help=u'Exits GRIPy application.', id=wx.ID_EXIT, callback='app.menu_functions.on_exit') # Edit Menu """ mc_partition = UIM.create('menu_controller', mc_edit.uid, label=u"&Partition", help=u"Create / Edit Partition" ) """ mc_rocktable = UIM.create('menu_controller', mc_edit.uid, label=u"&Rock Table", help=u"Create / Edit RockTable") UIM.create('menu_item_controller', mc_rocktable.uid, label=u"New Rock Table", help=u'New Rock Table', callback='app.menu_functions.on_new_rocktable') UIM.create('menu_item_controller', mc_rocktable.uid, label=u"Edit Rock Table", help=u'Edit Rock Table', callback='app.menu_functions.on_edit_rocktable') UIM.create('menu_item_controller', mc_edit.uid, label=u'&Well Plot', help=u'Well Plot', callback='app.menu_functions.on_new_wellplot') UIM.create('menu_item_controller', mc_edit.uid, label=u'&Crossplot', help=u'Crossplot', callback='app.menu_functions.on_new_crossplot') # UIM.create('menu_item_controller', mc_edit.uid, # label=u'&Rock', # help=u'Initialize rock model', # callback='app.menu_functions.on_rock' # ) # UIM.create('menu_item_controller', mc_edit.uid, # label=u'&Fluid', # help=u'Initialize fluid model', # callback='app.menu_functions.on_fluid' # ) # Well Menu UIM.create('menu_item_controller', mc_well.uid, label=u"New well", help=u"Create well", callback='app.menu_functions.on_create_well') # Import Well mc_import_well = UIM.create('menu_controller', mc_well.uid, label=u"&Import Well") UIM.create('menu_item_controller', mc_import_well.uid, label=u"LAS File", help=u'Import a LAS file to current GriPy Project', callback='app.menu_functions.on_import_las') UIM.create('menu_item_controller', mc_import_well.uid, label=u"LIS File", help=u'Import a LIS file to current GriPy Project', callback='app.menu_functions.on_import_lis') UIM.create('menu_item_controller', mc_import_well.uid, label=u"DLIS File", help=u'Import a DLIS file to current GriPy Project', callback='app.menu_functions.on_import_dlis') UIM.create('menu_item_controller', mc_import_well.uid, label=u"ODT File", help=u'Import a ODT file to current GriPy Project', callback='app.menu_functions.on_import_odt') # UIM.create('menu_item_controller', mc_well.uid, kind=wx.ITEM_SEPARATOR) UIM.create('menu_item_controller', mc_well.uid, label=u"Create Synthetic Log", callback='app.menu_functions.on_create_synthetic') """ ### Trabalho Roseane UIM.create('menu_item_controller', mc_well.uid, kind=wx.ITEM_SEPARATOR ) UIM.create('menu_item_controller', mc_well.uid, label=u'PoroPerm Cross-Plot', callback='app.menu_functions.create_poro_perm_xplot' ) UIM.create('menu_item_controller', mc_well.uid, label=u'Winland Cross-Plot', callback='app.menu_functions.create_winland_xplot' ) UIM.create('menu_item_controller', mc_well.uid, label=u'Stratigraphic Modified lorenz Plot (SMLP)', callback='app.menu_functions.create_SMLP_xplot' ) UIM.create('menu_item_controller', mc_well.uid, label=u'Modified lorenz Plot (MLP)', callback='app.menu_functions.create_MLP_xplot' ) UIM.create('menu_item_controller', mc_well.uid, label=u'Depth vs Acumulated KH', callback='app.menu_functions.create_Depth_vs_kHAcum_xplot' ) ### FIM - Trabalho Roseane """ """ # Inference Menu UIM.create('menu_item_controller', mc_infer.uid, label=u"Avo PP", callback='app.menu_functions.teste6' ) UIM.create('menu_item_controller', mc_infer.uid, label=u"Avo PP-PS", callback='app.menu_functions.teste7' ) """ # Interpretation Menu mc_specdecom = UIM.create( 'menu_controller', mc_interp.uid, label=u"Spectral Decomposition", help=u"Spectral Decomposition", ) UIM.create('menu_item_controller', mc_specdecom.uid, label=u"Continuous Wavelet Transform", callback='app.menu_functions.on_cwt') mc_attributes = UIM.create( 'menu_controller', mc_interp.uid, label=u"Attributes", help=u"Attributes", ) UIM.create('menu_item_controller', mc_attributes.uid, label=u"Phase Rotation", callback='app.menu_functions.on_phase_rotation') UIM.create('menu_item_controller', mc_attributes.uid, label=u"Hilbert Attributes", callback='app.menu_functions.on_hilbert_attributes') # Modeling Menu UIM.create('menu_item_controller', mc_model.uid, label=u"Create 2/3 layers model", callback='app.menu_functions.on_create_model') UIM.create('menu_item_controller', mc_model.uid, kind=wx.ITEM_SEPARATOR) UIM.create('menu_item_controller', mc_model.uid, label=u"Aki-Richards PP", callback='app.menu_functions.on_akirichards_pp') UIM.create('menu_item_controller', mc_model.uid, label=u"Reflectivity Method", callback='app.menu_functions.ReflectivityModel') # UIM.create('menu_item_controller', mc_model.uid, # kind=wx.ITEM_SEPARATOR # ) # UIM.create('menu_item_controller', mc_model.uid, # label=u"Poisson ratio", # callback='app.menu_functions.on_poisson_ratio' # ) # Tools Menu UIM.create('menu_item_controller', mc_tools.uid, label="Coding Console", help=u"Gripy Coding Console", callback='app.menu_functions.on_coding_console') # """ # Debug Menu UIM.create('menu_item_controller', mc_debug.uid, label=u"Load Wilson Synthetics", callback='app.menu_functions.on_load_wilson' ) UIM.create('menu_item_controller', mc_debug.uid, label=u"Load Stack North Viking Data", callback='app.menu_functions.teste10' ) UIM.create('menu_item_controller', mc_debug.uid, label=u"Teste 11", callback='app.menu_functions.teste11' ) UIM.create('menu_item_controller', mc_debug.uid, label=u'Calc Well Time from Depth curve', callback='app.menu_functions.calc_well_time_from_depth' ) UIM.create('menu_item_controller', mc_debug.uid, kind=wx.ITEM_SEPARATOR ) UIM.create('menu_item_controller', mc_debug.uid, label="Load Teste 2019", callback='app.menu_functions.on_load_teste_2019' ) """ # Fim Main Menu Bar # Object Manager TreeController UIM.create('tree_controller', mwc.uid) # Main ToolBar tbc = UIM.create('toolbar_controller', mwc.uid) UIM.create('toolbartool_controller', tbc.uid, label=u"New project", bitmap='new_file-30.png', help='New project', long_help='Start a new Gripy project, closes existing', callback='app.menu_functions.on_new') UIM.create('toolbartool_controller', tbc.uid, label=u"Abrir projeto", bitmap='open_folder-30.png', help='Abrir projeto', long_help='Abrir projeto GriPy', callback='app.menu_functions.on_open') UIM.create('toolbartool_controller', tbc.uid, label=u"Salvar projeto", bitmap='save_close-30.png', help='Salvar projeto', long_help='Salvar projeto GriPy', callback='app.menu_functions.on_save') UIM.create('toolbartool_controller', tbc.uid, label=u"Well Plot", bitmap='oil_rig-30.png', help='Well Plot', long_help='Well Plot', callback='app.menu_functions.on_new_wellplot') UIM.create('toolbartool_controller', tbc.uid, label=u"Crossplot", bitmap='scatter_plot-30.png', help='Crossplot', long_help='Crossplot', callback='app.menu_functions.on_new_crossplot') # StatusBar UIM.create('statusbar_controller', mwc.uid, label='Bem vindo ao ' + \ app.gripy_app.GripyApp.Get()._gripy_app_state.get('app_display_name') )
def get_main_window_controller(): UIM = UIManager() mwc = UIM.list('main_window_controller')[0] return mwc
def _on_choice_style(self, event): lib_name = event.GetString() UIM = UIManager() cc = UIM.list('canvas_plotter_controller', self._controller_uid)[0] cc.load_style(lib_name)
def _create_selected_obj_menus(self, menu): self._ids_functions = {} selected_obj_menus = OrderedDict() UIM = UIManager() tcc = self._get_canvas_controller() tocs = UIM.list('track_object_controller', self._controller_uid) for toc in tocs: print(toc.uid) repr_ctrl = toc.get_representation() print(repr_ctrl) if repr_ctrl and \ repr_ctrl.tid == 'density_representation_controller': obj_submenu = wx.Menu() id_ = wx.NewId() obj_submenu.Append(id_, 'Show navigator') tcc.Bind(wx.EVT_MENU, self._object_menu_selection, id=id_) self._ids_functions[id_] = (self._data_navigator_helper, (toc.uid), {}) selected_obj_menus[toc.get_data_object()] = obj_submenu elif toc.selected: obj = toc.get_data_object() if obj: obj_submenu = wx.Menu() # funcs = FunctionManager.functions_available_for_class( obj.__class__) for func in funcs: id_ = wx.NewId() obj_submenu.Append(id_, func['friendly_name']) tcc.Bind(wx.EVT_MENU, self._object_menu_selection, id=id_) self._ids_functions[id_] = (func['function'], (obj), { 'toc': toc }) # obj_submenu.AppendSeparator() id_ = wx.NewId() obj_submenu.Append(id_, 'Remove from track') tcc.Bind(wx.EVT_MENU, self._object_menu_selection, id=id_) self._ids_functions[id_] = (self._remove_object_helper, (toc.uid), {}) # obj_submenu.AppendSeparator() id_ = wx.NewId() obj_submenu.Append(id_, 'Properties') tcc.Bind(wx.EVT_MENU, self._object_menu_selection, id=id_) self._ids_functions[id_] = (self._properties_object_helper, (toc.uid), {}) # obj_submenu.AppendSeparator() id_ = wx.NewId() obj_submenu.Append(id_, 'Delete object') tcc.Bind(wx.EVT_MENU, self._object_menu_selection, id=id_) self._ids_functions[id_] = (self._delete_object_helper, (obj.uid), {}) # selected_obj_menus[obj] = obj_submenu if selected_obj_menus: for obj, obj_submenu in selected_obj_menus.items(): menu.AppendSubMenu(obj_submenu, obj.get_friendly_name()) menu.AppendSeparator()
def get_canvas_plotter_controller(self): UIM = UIManager() return UIM.list('canvas_plotter_controller', self._controller_uid)[0]
def on_change_obj_uid(self, new_value, old_value): UIM = UIManager() pgc = UIM.list('property_grid_controller', parent_uid=self.uid)[0] pgc.obj_uid = new_value
def _get_canvas_controller(self): """ """ UIM = UIManager() return UIM.list('track_canvas_controller', self._controller_uid)[0]