def __init__(self, project=None): " 'project' may be a Project object or a filename. " object.__init__(self) # init signals HasSignals.__init__(self) self.sig_register('write-config') self.sig_register('notify::project') self.sig_register('update-recent-files') # init path handler self.path = PathHandler() internal_path = Sloppy.__path__[0] self.path.set('base_dir', internal_path) self.path.set('example_dir', os.path.join(os.path.sep, 'usr', 'share', 'sloppyplot', 'Examples')) self.path.bset('data_dir', 'example_dir', 'Data') self.path.set('logfile', os.path.join(os.path.sep, 'var', 'tmp', 'sloppyplot.log')) self.path.set('current_dir', os.path.curdir) # determine config path if os.environ.has_key('XDG_CONFIG_HOME'): xdg_path = os.path.expandvars('${XDG_CONFIG_HOME}') cfg_path = os.path.join(xdg_path, 'SloppyPlot') else: home_path = os.path.expanduser('~') cfg_path = os.path.join(home_path, '.config', 'SloppyPlot') self.path.set('config_dir', cfg_path) self.path.bset('config', 'config_dir', 'config.xml') print "CONFIG DIR ", self.path.get('config_dir') # init config file self.eConfig = config.read_configfile(self, self.path.get('config')) # set up plugins # initialization is done at then end (TODO: why?) self.plugins = dict() # init recent files self.recent_files = list() self.read_recentfiles() self.sig_connect("write-config", (lambda sender: self.write_recentfiles())) # init() is a good place for initialization of derived class self.init() # Set up the Project... self._project = None if isinstance(project, basestring): try: self.load_project(project) except IOError, msg: logger.error("Failed to load project '%s'\nReason was:\n%s\nSetting up an empty project instead." % (project, msg)) self.set_project(Project())
def __init__(self, figure, axes=None): self.figure = figure self.canvas = figure.canvas self.axes = axes self._mpl_events = {} HasSignals.__init__(self) self.sig_register("aborted") self.sig_register("finished")
def __init__(self, **kwargs): HasProps.__init__(self, **kwargs) self.change_counter = 0 self.__is_valid = True self._table_import = None HasSignals.__init__(self) self.sig_register('closed') self.sig_register('notify')
def __init__(self,*args,**kwargs): HasProps.__init__(self, **kwargs) HasSignals.__init__(self) self.sig_register("close") self.sig_register("notify::plots") self.sig_register("notify::datasets") self.sig_register("notify::backends") self.journal = Journal() self._archive = None self.app = None
def __init__(self, dataset=None, model=None): gtk.TreeView.__init__(self) self.set_headers_visible(True) self.set_headers_clickable(True) ##self.set_property("rules-hint", True) self.get_selection().set_mode(gtk.SELECTION_MULTIPLE) self.set_fixed_height_mode(True) # PYGTK 2.6 if dataset is not None: self.set_dataset(dataset) else: self.set_model(model) HasSignals.__init__(self)
def __init__(self, array=None): HasSignals.__init__(self) tree.Node.__init__(self) # TBR self.key = "" # TODO: should be moved to parent object! self.change_counter = 0 self.__is_valid = True self._import = None self.sig_register('closed') self.sig_register('update') self.sig_register('update-fields') self._array = None if array is None: array = self.get_default_array() self.set_array(array)
def __init__(self): object.__init__(self) globals.app = self # init signals HasSignals.__init__(self) self.sig_register('write-config') self.sig_register('notify::project') self.sig_register('update-recent-files') # init path handler self.path = PathHandler() # init config file self.eConfig = config.read_configfile(self, self.path.config) # init recent files self.recent_files = [] self.read_recentfiles() self.sig_connect("write-config", lambda sender: self.write_recentfiles()) # read in existing templates self.read_templates() self.sig_connect("write-config", lambda sender: self.write_templates()) # init() is a good place for initialization of derived class self.plugins = {} self.load_plugins() self.init() # After everything is initialized, we can set up the project. self._project = None self.set_project(None) # welcome message self.status_msg("%s %s" % (version.NAME, version.VERSION))
def __init__(self,project=None,plot=None,extrakw=None,**kw): """ Initalization consists of: - save keyword arguments as self.options - merge in any extra keywords assigned via BackendRegistry.register - assign `self.project` and `self.plot` - call self.connect() Do not overwrite this method, use self.init() for custom initialization! """ object.__init__(self) HasSignals.__init__(self) self.sig_register("closed") self.sig_register("notify::layer") self.cblist = [] # set options and merge keywords from BackendRegistry.register self.options = dict(kw) if extrakw: self.options.update(extrakw) # call functions for custom initialization self.init() # custom initialization self.connect() self.project = None self.plot = None self._layer = None self.set(project,plot)
def __init__(self, data=None, ncols=0, nrows=0, typecodes=None): """ You can either pass a tuple/array as 'data' argument and the Table will contain this data. Any other keyword will simply be ignored! OR, you can specify some of the other keywords: - A single typecode, e.g. 'f', will create a Table with `ncols` columns of type 'f'. If `ncols` is unspecified, a Table with a single column will be created. - A string of typecodes, e.g. 'fdf' specifies the typecode for each column. If `ncols` is provided, the length of the string must match the number of requested columns or a ValueError is raised. - A list of typecodes, e.g. ['f', 'd'] is equivalent to 'fd'. Note however that ['f'] is not the same as 'f' since the list form will always require the length of the list to be the same as the `ncols` given. """ HasSignals.__init__(self) self.sig_register('update-columns') self._columns = [] if data is not None: data = AsArray(_rank=2)(data) self._columns = [Column(data=c) for c in data] else: if ncols > 0: if isinstance(typecodes, basestring) and len(typecodes) > 1: typecodes = list(typecodes) if isinstance(typecodes, (list,tuple)): if len(typecodes) != ncols: raise ValueError("When specifying the number of columns, you may either specify a single typecode or a list with that many entries.") elif typecodes is None: tc = 'f' typecodes = list() for i in range(ncols): typecodes.append(tc) else: tc = typecodes typecodes = list() for i in range(ncols): typecodes.append(tc) self._nrows = nrows typecodes = typecodes or [] for tc in typecodes: self._columns.append( self.new_column(tc) ) self.update_cols() self.update_rows()
def __init__(self, *args, **kwargs): HasProperties.__init__(self, *args, **kwargs) Node.__init__(self) HasSignals.__init__(self) self.sig_register("closed") self.sig_register("changed")
def __init__(self, **kwargs): HasProperties.__init__(self, **kwargs) HasSignals.__init__(self) self.sig_register('notify') self.sig_register('notify::labels')
def __init__(self): HasSignals.__init__(self) gtk.Window.__init__(self, gtk.WINDOW_TOPLEVEL) self.set_icon(self.render_icon('sloppy-Plot', gtk.ICON_SIZE_BUTTON)) self.connect("delete-event", (lambda sender, event: globals.app.quit())) self.is_fullscreen = False self._windows = list() # keeps track of all subwindows self._windowlist_merge_id = None self._recentfiles_merge_id = None # # Create GUI # # The action for the uimanager are created first. However, # since some actions are not yet defined (e.g. those defined # by 'set_up_visibility_toggle', this will be done after the # rest of the GUI initialization. # -- UIManager -- self.uimanager = uim = gtk.UIManager() uihelper.add_actions(uim, "Application", self.actions_application, globals.app) uihelper.add_actions(uim, "AppWin", self.actions_appwin, self) uihelper.add_actions(uim, "Matplotlib", self.actions_matplotlib, globals.app) uihelper.add_actions(uim, "Gnuplot", self.actions_gnuplot, globals.app) uihelper.add_actions(uim, "Debug", self.actions_debug, globals.app) uihelper.add_actions(uim, "UndoRedo", self.actions_undoredo, globals.app) uihelper.add_actions(uim, "RecentFiles", self.actions_recentfiles, globals.app) # -- Sidepane -- self.sidepane = toolbox.ToolBox('Sidepane') self.set_up_visibility_toggle(self.sidepane, 'ToggleSidepane', 'Show Sidepane', 'F9') self.sidepane.show() # -- Logwindow -- # logwindow is hidden by default. See _construct_uimanager if # you want to change this default self.logwindow = logwindow = logwin.LogWindow() logwindow.set_transient_for(self) logwindow.set_destroy_with_parent(True) self.set_up_visibility_toggle(self.logwindow, 'ToggleLogwindow', 'Show Logwindow') logwindow.hide() # create ui and accelerators # TODO: set_up_visibility_toggle should maybe also add the ui string # This way, all actions are already defined and we can put this # add_ui_from string above. self.uimanager.add_ui_from_string(globals.app.get_uistring('appwindow')) self.add_accel_group(self.uimanager.get_accel_group()) # -- Menubar -- self.menubar = menubar = self.uimanager.get_widget('/MainMenu') menubar.show() # -- Toolbar -- self.toolbar = toolbar = self.uimanager.get_widget('/MainToolbar') toolbar.set_style(gtk.TOOLBAR_ICONS) toolbar.show() self.init_user_actions() # -- Statusbar and Progressbar -- self.statusbar = statusbar = gtk.Statusbar() statusbar.set_has_resize_grip(True) statusbar.show() self.progressbar = progressbar = gtk.ProgressBar() progressbar.hide() # -- Notification Area -- notification_area = gtk.HBox() notification_area.pack_start(self.btn_cancel,False,True) notification_area.pack_start(self.statusbar,True,True) notification_area.pack_start(self.progressbar,False,True) notification_area.show() # -- Plotbook -- self.plotbook = gtk.Notebook() self.plotbook.show() def callback(notebook, page, page_num): # Activate the current page either if it is the first page # or if it is a newly selected one. The old page gets # of course deactivated. print "SWITCH" current_page = notebook.get_nth_page(notebook.get_current_page()) new_page = notebook.get_nth_page(page_num) if notebook.get_n_pages() == 1 or current_page is not new_page: print "A CHANGE" current_page.deactivate() new_page.activate() notebook.set_tab_label_text(new_page, new_page.get_title()) if isinstance(new_page, mpl.MatplotlibWidget): print "NEW BACKEND IS ", new_page.backend globals.app.project.active_backend = new_page.backend self.plotbook.connect('switch-page', callback) plot_area = gtk.VBox() plot_area.pack_start(self.plotbook, True, True) ##plot_area.pack_start(self.progressbar, False, False) ##plot_area.pack_end(self.statusbar,False, True) plot_area.show() self.hpaned = hpaned = gtk.HPaned() hpaned.pack1(plot_area, True, True) hpaned.pack2(self.sidepane, False, True) hpaned.show() vbox = gtk.VBox() vbox.pack_start(self.menubar, expand=False) vbox.pack_start(self.toolbar, expand=False) vbox.pack_start(hpaned, True, True) vbox.pack_start(notification_area, False, False) ##vbox.pack_end(self.statusbar, False, True) vbox.show() self.add(vbox) #--- globals.app.sig_connect("update-recent-files", lambda sender: self._refresh_recentfiles()) # # Restore window size and position. The size is taken # either from config file or set to default. # self.set_gravity(gtk.gdk.GRAVITY_NORTH_WEST) self.move(0,0) eWindow = globals.app.eConfig.find('AppWindow') if eWindow is not None: width = int(eWindow.attrib.get('width', 480)) height = int(eWindow.attrib.get('height',320)) position = eWindow.attrib.get('sidepane', width-120) self.hpaned.set_position(int(position)) else: width, height = 640,480 self.set_size_request(480,320) self.resize(width, height) # register for config file globals.app.sig_connect("write-config", self.write_config) self.show()