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()