Exemple #1
0
 def __init__(self, platform, action_handler_callback):
     """
     MainWindow contructor
     Setup the menu, toolbar, flowgraph editor notebook, block selection window...
     """
     self._platform = platform
     gen_opts = platform.get_block('options').get_param('generate_options')
     generate_mode_default = gen_opts.get_value()
     generate_modes = [(o.get_key(), o.get_name(),
                        o.get_key() == generate_mode_default)
                       for o in gen_opts.get_options()]
     # load preferences
     Preferences.load(platform)
     #setup window
     gtk.Window.__init__(self, gtk.WINDOW_TOPLEVEL)
     vbox = gtk.VBox()
     self.hpaned = gtk.HPaned()
     self.add(vbox)
     #create the menu bar and toolbar
     self.add_accel_group(Actions.get_accel_group())
     self.menu_bar = Bars.MenuBar(generate_modes, action_handler_callback)
     vbox.pack_start(self.menu_bar, False)
     self.tool_bar = Bars.Toolbar(generate_modes, action_handler_callback)
     vbox.pack_start(self.tool_bar, False)
     vbox.pack_start(self.hpaned)
     #create the notebook
     self.notebook = gtk.Notebook()
     self.page_to_be_closed = None
     self.current_page = None
     self.notebook.set_show_border(False)
     self.notebook.set_scrollable(True)  #scroll arrows for page tabs
     self.notebook.connect('switch-page', self._handle_page_change)
     #setup containers
     self.flow_graph_vpaned = gtk.VPaned()
     #flow_graph_box.pack_start(self.scrolled_window)
     self.flow_graph_vpaned.pack1(self.notebook)
     self.hpaned.pack1(self.flow_graph_vpaned)
     self.btwin = BlockTreeWindow(platform, self.get_flow_graph)
     self.hpaned.pack2(self.btwin, False)  #dont allow resize
     #create the reports window
     self.text_display = TextDisplay()
     #house the reports in a scrolled window
     self.reports_scrolled_window = gtk.ScrolledWindow()
     self.reports_scrolled_window.set_policy(gtk.POLICY_AUTOMATIC,
                                             gtk.POLICY_AUTOMATIC)
     self.reports_scrolled_window.add(self.text_display)
     self.reports_scrolled_window.set_size_request(
         -1, DEFAULT_REPORTS_WINDOW_WIDTH)
     self.flow_graph_vpaned.pack2(self.reports_scrolled_window,
                                  False)  #dont allow resize
     #load preferences and show the main window
     self.resize(*Preferences.main_window_size())
     self.flow_graph_vpaned.set_position(
         Preferences.reports_window_position())
     self.hpaned.set_position(Preferences.blocks_window_position())
     self.show_all()
     self.reports_scrolled_window.hide()
     self.btwin.hide()
Exemple #2
0
 def __init__(self, platform, action_handler_callback):
     """
     MainWindow contructor
     Setup the menu, toolbar, flowgraph editor notebook, block selection window...
     """
     self._platform = platform
     gen_opts = platform.get_block('options').get_param('generate_options')
     generate_mode_default = gen_opts.get_value()
     generate_modes = [
         (o.get_key(), o.get_name(), o.get_key() == generate_mode_default)
         for o in gen_opts.get_options()]
     # load preferences
     Preferences.load(platform)
     #setup window
     gtk.Window.__init__(self, gtk.WINDOW_TOPLEVEL)
     vbox = gtk.VBox()
     self.hpaned = gtk.HPaned()
     self.add(vbox)
     #create the menu bar and toolbar
     self.add_accel_group(Actions.get_accel_group())
     self.menu_bar = Bars.MenuBar(generate_modes, action_handler_callback)
     vbox.pack_start(self.menu_bar, False)
     self.tool_bar = Bars.Toolbar(generate_modes, action_handler_callback )
     vbox.pack_start(self.tool_bar, False)
     vbox.pack_start(self.hpaned)
     #create the notebook
     self.notebook = gtk.Notebook()
     self.page_to_be_closed = None
     self.current_page = None
     self.notebook.set_show_border(False)
     self.notebook.set_scrollable(True) #scroll arrows for page tabs
     self.notebook.connect('switch-page', self._handle_page_change)
     #setup containers
     self.flow_graph_vpaned = gtk.VPaned()
     #flow_graph_box.pack_start(self.scrolled_window)
     self.flow_graph_vpaned.pack1(self.notebook)
     self.hpaned.pack1(self.flow_graph_vpaned)
     self.btwin = BlockTreeWindow(platform, self.get_flow_graph);
     self.hpaned.pack2(self.btwin, False) #dont allow resize
     #create the reports window
     self.text_display = TextDisplay()
     #house the reports in a scrolled window
     self.reports_scrolled_window = gtk.ScrolledWindow()
     self.reports_scrolled_window.set_policy(gtk.POLICY_AUTOMATIC, gtk.POLICY_AUTOMATIC)
     self.reports_scrolled_window.add(self.text_display)
     self.reports_scrolled_window.set_size_request(-1, DEFAULT_REPORTS_WINDOW_WIDTH)
     self.flow_graph_vpaned.pack2(self.reports_scrolled_window, False) #dont allow resize
     #load preferences and show the main window
     self.resize(*Preferences.main_window_size())
     self.flow_graph_vpaned.set_position(Preferences.reports_window_position())
     self.hpaned.set_position(Preferences.blocks_window_position())
     self.show_all()
     self.reports_scrolled_window.hide()
     self.btwin.hide()
Exemple #3
0
    def __init__(self, platform):
        """
		MainWindow contructor
		Setup the menu, toolbar, flowgraph editor notebook, block selection window...
		"""
        self._platform = platform
        #setup window
        gtk.Window.__init__(self, gtk.WINDOW_TOPLEVEL)
        vbox = gtk.VBox()
        self.hpaned = gtk.HPaned()
        self.add(vbox)
        #create the menu bar and toolbar
        self.add_accel_group(Actions.get_accel_group())
        vbox.pack_start(Bars.MenuBar(), False)
        vbox.pack_start(Bars.Toolbar(), False)
        vbox.pack_start(self.hpaned)
        #create the notebook
        self.notebook = gtk.Notebook()
        self.page_to_be_closed = None
        self.current_page = None
        self.notebook.set_show_border(False)
        self.notebook.set_scrollable(True)  #scroll arrows for page tabs
        self.notebook.connect('switch-page', self._handle_page_change)
        #setup containers
        self.flow_graph_vpaned = gtk.VPaned()
        #flow_graph_box.pack_start(self.scrolled_window)
        self.flow_graph_vpaned.pack1(self.notebook)
        self.hpaned.pack1(self.flow_graph_vpaned)
        self.hpaned.pack2(BlockTreeWindow(platform, self.get_flow_graph),
                          False)  #dont allow resize
        #create the reports window
        self.text_display = TextDisplay()
        #house the reports in a scrolled window
        self.reports_scrolled_window = gtk.ScrolledWindow()
        self.reports_scrolled_window.set_policy(gtk.POLICY_AUTOMATIC,
                                                gtk.POLICY_AUTOMATIC)
        self.reports_scrolled_window.add_with_viewport(self.text_display)
        self.reports_scrolled_window.set_size_request(
            -1, DEFAULT_REPORTS_WINDOW_WIDTH)
        self.flow_graph_vpaned.pack2(self.reports_scrolled_window,
                                     False)  #dont allow resize
        #load preferences and show the main window
        Preferences.load(platform)
        self.resize(*Preferences.main_window_size())
        self.flow_graph_vpaned.set_position(
            Preferences.reports_window_position())
        self.hpaned.set_position(Preferences.blocks_window_position())
        self.show_all()
Exemple #4
0
class MainWindow(gtk.Window):
    """The topmost window with menus, the tool bar, and other major windows."""

    def __init__(self, platform):
        """
        MainWindow contructor
        Setup the menu, toolbar, flowgraph editor notebook, block selection window...
        """
        self._platform = platform
        # setup window
        gtk.Window.__init__(self, gtk.WINDOW_TOPLEVEL)
        vbox = gtk.VBox()
        self.hpaned = gtk.HPaned()
        self.add(vbox)
        # create the menu bar and toolbar
        self.add_accel_group(Actions.get_accel_group())
        vbox.pack_start(Bars.MenuBar(), False)
        vbox.pack_start(Bars.Toolbar(), False)
        vbox.pack_start(self.hpaned)
        # create the notebook
        self.notebook = gtk.Notebook()
        self.page_to_be_closed = None
        self.current_page = None
        self.notebook.set_show_border(False)
        self.notebook.set_scrollable(True)  # scroll arrows for page tabs
        self.notebook.connect("switch-page", self._handle_page_change)
        # setup containers
        self.flow_graph_vpaned = gtk.VPaned()
        # flow_graph_box.pack_start(self.scrolled_window)
        self.flow_graph_vpaned.pack1(self.notebook)
        self.hpaned.pack1(self.flow_graph_vpaned)
        self.btwin = BlockTreeWindow(platform, self.get_flow_graph)
        self.hpaned.pack2(self.btwin, False)  # dont allow resize
        # create the reports window
        self.text_display = TextDisplay()
        # house the reports in a scrolled window
        self.reports_scrolled_window = gtk.ScrolledWindow()
        self.reports_scrolled_window.set_policy(gtk.POLICY_AUTOMATIC, gtk.POLICY_AUTOMATIC)
        self.reports_scrolled_window.add(self.text_display)
        self.reports_scrolled_window.set_size_request(-1, DEFAULT_REPORTS_WINDOW_WIDTH)
        self.flow_graph_vpaned.pack2(self.reports_scrolled_window, False)  # dont allow resize
        # load preferences and show the main window
        Preferences.load(platform)
        self.resize(*Preferences.main_window_size())
        self.flow_graph_vpaned.set_position(Preferences.reports_window_position())
        self.hpaned.set_position(Preferences.blocks_window_position())
        self.show_all()
        self.reports_scrolled_window.hide()
        self.btwin.hide()

    ############################################################
    # Event Handlers
    ############################################################

    def _quit(self, window, event):
        """
        Handle the delete event from the main window.
        Generated by pressing X to close, alt+f4, or right click+close.
        This method in turns calls the state handler to quit.

        Returns:
            true
        """
        Actions.APPLICATION_QUIT()
        return True

    def _handle_page_change(self, notebook, page, page_num):
        """
        Handle a page change. When the user clicks on a new tab,
        reload the flow graph to update the vars window and
        call handle states (select nothing) to update the buttons.

        Args:
            notebook: the notebook
            page: new page
            page_num: new page number
        """
        self.current_page = self.notebook.get_nth_page(page_num)
        Messages.send_page_switch(self.current_page.get_file_path())
        Actions.PAGE_CHANGE()

    ############################################################
    # Report Window
    ############################################################

    def add_report_line(self, line):
        """
        Place line at the end of the text buffer, then scroll its window all the way down.

        Args:
            line: the new text
        """
        self.text_display.insert(line)

    ############################################################
    # Pages: create and close
    ############################################################

    def new_page(self, file_path="", show=False):
        """
        Create a new notebook page.
        Set the tab to be selected.

        Args:
            file_path: optional file to load into the flow graph
            show: true if the page should be shown after loading
        """
        # if the file is already open, show the open page and return
        if file_path and file_path in self._get_files():  # already open
            page = self.notebook.get_nth_page(self._get_files().index(file_path))
            self._set_page(page)
            return
        try:  # try to load from file
            if file_path:
                Messages.send_start_load(file_path)
            flow_graph = self._platform.get_new_flow_graph()
            flow_graph.grc_file_path = file_path
            # print flow_graph
            page = NotebookPage(self, flow_graph=flow_graph, file_path=file_path)
            if file_path:
                Messages.send_end_load()
        except Exception, e:  # return on failure
            Messages.send_fail_load(e)
            if isinstance(e, KeyError) and str(e) == "'options'":
                # This error is unrecoverable, so crash gracefully
                exit(-1)
            return
        # add this page to the notebook
        self.notebook.append_page(page, page.get_tab())
        try:
            self.notebook.set_tab_reorderable(page, True)
        except:
            pass  # gtk too old
        self.notebook.set_tab_label_packing(page, False, False, gtk.PACK_START)
        # only show if blank or manual
        if not file_path or show:
            self._set_page(page)
Exemple #5
0
class MainWindow(gtk.Window):
    """The topmost window with menus, the tool bar, and other major windows."""
    def __init__(self, platform, action_handler_callback):
        """
        MainWindow contructor
        Setup the menu, toolbar, flowgraph editor notebook, block selection window...
        """
        self._platform = platform
        gen_opts = platform.get_block('options').get_param('generate_options')
        generate_mode_default = gen_opts.get_value()
        generate_modes = [(o.get_key(), o.get_name(),
                           o.get_key() == generate_mode_default)
                          for o in gen_opts.get_options()]
        # load preferences
        Preferences.load(platform)
        #setup window
        gtk.Window.__init__(self, gtk.WINDOW_TOPLEVEL)
        vbox = gtk.VBox()
        self.hpaned = gtk.HPaned()
        self.add(vbox)
        #create the menu bar and toolbar
        self.add_accel_group(Actions.get_accel_group())
        self.menu_bar = Bars.MenuBar(generate_modes, action_handler_callback)
        vbox.pack_start(self.menu_bar, False)
        self.tool_bar = Bars.Toolbar(generate_modes, action_handler_callback)
        vbox.pack_start(self.tool_bar, False)
        vbox.pack_start(self.hpaned)
        #create the notebook
        self.notebook = gtk.Notebook()
        self.page_to_be_closed = None
        self.current_page = None
        self.notebook.set_show_border(False)
        self.notebook.set_scrollable(True)  #scroll arrows for page tabs
        self.notebook.connect('switch-page', self._handle_page_change)
        #setup containers
        self.flow_graph_vpaned = gtk.VPaned()
        #flow_graph_box.pack_start(self.scrolled_window)
        self.flow_graph_vpaned.pack1(self.notebook)
        self.hpaned.pack1(self.flow_graph_vpaned)
        self.btwin = BlockTreeWindow(platform, self.get_flow_graph)
        self.hpaned.pack2(self.btwin, False)  #dont allow resize
        #create the reports window
        self.text_display = TextDisplay()
        #house the reports in a scrolled window
        self.reports_scrolled_window = gtk.ScrolledWindow()
        self.reports_scrolled_window.set_policy(gtk.POLICY_AUTOMATIC,
                                                gtk.POLICY_AUTOMATIC)
        self.reports_scrolled_window.add(self.text_display)
        self.reports_scrolled_window.set_size_request(
            -1, DEFAULT_REPORTS_WINDOW_WIDTH)
        self.flow_graph_vpaned.pack2(self.reports_scrolled_window,
                                     False)  #dont allow resize
        #load preferences and show the main window
        self.resize(*Preferences.main_window_size())
        self.flow_graph_vpaned.set_position(
            Preferences.reports_window_position())
        self.hpaned.set_position(Preferences.blocks_window_position())
        self.show_all()
        self.reports_scrolled_window.hide()
        self.btwin.hide()

    ############################################################
    # Event Handlers
    ############################################################

    def _quit(self, window, event):
        """
        Handle the delete event from the main window.
        Generated by pressing X to close, alt+f4, or right click+close.
        This method in turns calls the state handler to quit.

        Returns:
            true
        """
        Actions.APPLICATION_QUIT()
        return True

    def _handle_page_change(self, notebook, page, page_num):
        """
        Handle a page change. When the user clicks on a new tab,
        reload the flow graph to update the vars window and
        call handle states (select nothing) to update the buttons.

        Args:
            notebook: the notebook
            page: new page
            page_num: new page number
        """
        self.current_page = self.notebook.get_nth_page(page_num)
        Messages.send_page_switch(self.current_page.get_file_path())
        Actions.PAGE_CHANGE()

    ############################################################
    # Report Window
    ############################################################

    def add_report_line(self, line):
        """
        Place line at the end of the text buffer, then scroll its window all the way down.

        Args:
            line: the new text
        """
        self.text_display.insert(line)

    ############################################################
    # Pages: create and close
    ############################################################

    def new_page(self, file_path='', show=False):
        """
        Create a new notebook page.
        Set the tab to be selected.

        Args:
            file_path: optional file to load into the flow graph
            show: true if the page should be shown after loading
        """
        #if the file is already open, show the open page and return
        if file_path and file_path in self._get_files():  #already open
            page = self.notebook.get_nth_page(
                self._get_files().index(file_path))
            self._set_page(page)
            return
        try:  #try to load from file
            if file_path: Messages.send_start_load(file_path)
            flow_graph = self._platform.get_new_flow_graph()
            flow_graph.grc_file_path = file_path
            #print flow_graph
            page = NotebookPage(
                self,
                flow_graph=flow_graph,
                file_path=file_path,
            )
            if file_path: Messages.send_end_load()
        except Exception, e:  #return on failure
            Messages.send_fail_load(e)
            if isinstance(e, KeyError) and str(e) == "'options'":
                # This error is unrecoverable, so crash gracefully
                exit(-1)
            return
        #add this page to the notebook
        self.notebook.append_page(page, page.get_tab())
        try:
            self.notebook.set_tab_reorderable(page, True)
        except:
            pass  #gtk too old
        self.notebook.set_tab_label_packing(page, False, False, gtk.PACK_START)
        #only show if blank or manual
        if not file_path or show: self._set_page(page)