예제 #1
0
 def __init__(self, workspace, recently_opened_notebooks):
     self.sidebar = ServiceLocator.get_main_window().sidebar
     self.hbchooser = ServiceLocator.get_main_window(
     ).headerbar.hb_right.notebook_chooser
     self.kernelspecs = ServiceLocator.get_kernelspecs()
     self.workspace = workspace
     self.recently_opened_notebooks = recently_opened_notebooks
     self.recently_opened_notebooks.register_observer(self)
예제 #2
0
    def __init__(self, workspace, recently_opened_notebooks):
        self.sidebar = ServiceLocator.get_main_window().sidebar
        self.hbchooser = ServiceLocator.get_main_window(
        ).headerbar.hb_right.notebook_chooser
        self.workspace = workspace
        self.recently_opened_notebooks = recently_opened_notebooks

        for widget in [self.sidebar, self.hbchooser]:
            widget.recent_notebooks_list_view.set_sort_func(self.sort_func)
            widget.recent_notebooks_list_view.connect(
                'row-activated', self.on_recent_notebooks_list_click)

        self.recently_opened_notebooks.populate_from_disk()
    def __init__(self, workspace, sb_view, hb_view):
        self.sb_view = sb_view
        self.hb_view = hb_view
        self.sidebar = ServiceLocator.get_main_window().sidebar
        self.hbchooser = ServiceLocator.get_main_window().headerbar.hb_right.notebook_chooser
        self.main_window = ServiceLocator.get_main_window()
        self.workspace = workspace
        self.open_notebook_should_scroll = False
        self.open_notebook_hb_should_scroll = False

        self.sidebar.connect('size-allocate', self.on_open_notebook_view_size_allocate)
        self.hbchooser.connect('size-allocate', self.on_open_notebook_hb_view_size_allocate)
        self.sb_view.connect('row-selected', self.on_open_notebooks_list_selected)
        self.hb_view.connect('row-selected', self.on_open_notebooks_list_selected)
예제 #4
0
    def __init__(self, workspace):
        self.workspace = workspace
        self.headerbar = ServiceLocator.get_main_window().headerbar
        self.kernelspecs = ServiceLocator.get_kernelspecs()

        self.window_mode = None
        self.activate_welcome_page_mode()
        self.setup_kernel_changer()

        if self.workspace.show_sidebar:
            self.on_show_sidebar()
        else:
            self.on_hide_sidebar()

        self.workspace.register_observer(self)
예제 #5
0
 def __init__(self, notebook):
     Observable.__init__(self)
     self.kernel = None
     self.notebook = notebook
     self.continue_fetching = True
     self.result_factory = ServiceLocator.get_result_factory()
     self.fetch_func_id = GObject.timeout_add(50, self.fetch_results)
예제 #6
0
    def close_all_notebooks_after_modified_check(self):
        notebooks = self.workspace.get_unsaved_notebooks()
        active_notebook = self.workspace.get_active_notebook()

        if len(notebooks) == 0 or active_notebook == None or ServiceLocator.get_dialog('close_confirmation').run(notebooks)['all_save_to_close']: 
            for notebook in list(self.workspace.open_notebooks.values()):
                self.close_notebook(notebook)
예제 #7
0
    def __init__(self, pathname):
        Observable.__init__(self)

        self.pathname = pathname
        self.kernelname = None
        self.cells = []
        self.active_cell = None
        self.busy_cells = set()
        self.modified_cells = set()
        self.kernel_state = None
        self.result_factory = ServiceLocator.get_result_factory()

        self.save_state = 'saved'
        try: self.last_saved = datetime.datetime.fromtimestamp(os.path.getmtime(pathname))
        except FileNotFoundError:
            self.last_saved = datetime.datetime.fromtimestamp(0)
        
        # set source language for syntax highlighting
        self.source_language_manager = GtkSource.LanguageManager()
        self.source_language_manager.set_search_path((os.path.dirname(__file__) + '/../resources/gtksourceview/language-specs',))
        self.source_language_code = self.source_language_manager.get_language('sage')
        self.source_language_markdown = self.source_language_manager.get_language('markdown')
        
        self.source_style_scheme_manager = GtkSource.StyleSchemeManager()
        self.source_style_scheme_manager.set_search_path((os.path.dirname(__file__) + '/../resources/gtksourceview/styles',))
        self.source_style_scheme = self.source_style_scheme_manager.get_scheme('sage')

        self.cursor_position = {'cell': None, 'cell_position': None, 'cell_size': None, 'position': None}

        self.list_item = list_item_model.NotebookListItem(self)
        self.view = notebook_viewgtk.NotebookView()
        self.presenter = notebook_presenter.NotebookPresenter(self, self.view)
        self.controller = notebook_controller.NotebookController(self, self.view)
        self.evaluator = notebook_evaluator.NotebookEvaluator(self)
        self.headerbar_controls = headerbar_controls.HeaderbarControls(self)
예제 #8
0
 def load_from_disk(self):
     nb = nbformat.read(self.pathname, nbformat.current_nbformat)
     if self.get_cell_count() == 0:
         kernelname = nb.metadata['kernelspec']['name']
         if not ServiceLocator.get_kernelspecs().is_installed(kernelname):
             raise KernelMissing(kernelname)
         self.set_kernelname(kernelname)
         self.set_kernel_state('kernel_to_start')
         is_first_cell = True
         for cell in nb.cells:
             if cell.cell_type == 'markdown':
                 new_cell = self.create_markdowncell('last', cell.source)
                 try: in_edit_mode = cell.metadata['in_edit_mode']
                 except KeyError: in_edit_mode = False
                 if len(cell.source) > 0 and in_edit_mode == False:
                     new_cell.evaluate_now()
             elif cell.cell_type == 'code':
                 new_cell = self.create_cell('last', cell.source)
                 if is_first_cell == True:
                     is_first_cell = False
                     self.set_active_cell(new_cell)
                 for output in cell.outputs:
                     if output['output_type'] == 'error':
                         result = self.result_factory.get_error_from_nbformat_dict(output)
                         new_cell.set_result(result)
                     elif output['output_type'] == 'execute_result' or output['output_type'] == 'display_data':
                         try: data = output['data']
                         except KeyError: pass
                         else:
                             result = self.result_factory.get_result_from_blob(data)
                             new_cell.set_result(result)
                     elif output['output_type'] == 'stream':
                         new_cell.add_to_stream(output['name'], output['text'])
     self.set_save_state('saved')
예제 #9
0
 def on_open_action(self, action=None, pathname=None):
     if pathname == None:
         pathname = ServiceLocator.get_dialog('open_notebook').run()
     if pathname != None:
         notebook = self.workspace.get_notebook_by_pathname(pathname)
         if notebook == None:
             if pathname.split('.')[-1] == 'ipynb':
                 notebook = model_notebook.Notebook(pathname)
                 try:
                     notebook.load_from_disk()
                 except FileNotFoundError:
                     notebook = None
                 except model_notebook.KernelMissing as e:
                     ServiceLocator.get_dialog('kernel_missing').run(str(e))
                 else:
                     self.workspace.add_notebook(notebook)
                     self.workspace.set_active_notebook(notebook)
         else:
             self.workspace.set_active_notebook(notebook)
예제 #10
0
파일: __main__.py 프로젝트: tonghuaWN/Porto
    def save_quit(self, accel_group=None, window=None, key=None, mask=None):
        ''' signal handler, ask user to save unsaved notebooks or discard changes '''
        
        notebooks = self.workspace.get_unsaved_notebooks()
        active_notebook = self.workspace.get_active_notebook()

        if len(notebooks) == 0 or active_notebook == None or ServiceLocator.get_dialog('close_confirmation').run(notebooks)['all_save_to_close']: 
            self.save_window_state()
            self.workspace.shutdown_all_kernels()
            self.quit()
예제 #11
0
    def __init__(self, notebook):
        self.notebook = notebook
        self.notebook.register_observer(self)

        self.result_factory = ServiceLocator.get_result_factory()

        self.backend_code = backend_code.BackendCode(notebook)
        self.backend_code.register_observer(self)

        self.markdown_compute_queue = backend_markdown.ComputeQueue()
        self.markdown_compute_queue.register_observer(self)
    def __init__(self, workspace, open_notebooks_list, sb_view, hb_view):
        self.workspace = workspace
        self.open_notebooks_list = open_notebooks_list
        self.main_window = ServiceLocator.get_main_window()

        self.sidebar = ServiceLocator.get_main_window().sidebar
        self.sb_view = sb_view
        self.sb_view.set_can_focus(False)
        self.sb_view.set_sort_func(self.sort_func)
        self.sidebar.open_notebooks_list_view_wrapper.add(self.sb_view)

        self.hbchooser = ServiceLocator.get_main_window().headerbar.hb_right.notebook_chooser
        self.hb_view = hb_view
        self.hb_view.set_can_focus(False)
        self.hb_view.set_sort_func(self.sort_func)
        self.hbchooser.open_notebooks_list_view_wrapper.add(self.hb_view)

        self.hbchooser.open_notebooks_list_view_wrapper.hide()
        self.workspace.register_observer(self)
        self.open_notebooks_list.register_observer(self)
예제 #13
0
파일: __main__.py 프로젝트: tonghuaWN/Porto
    def do_activate(self):
        ''' Everything starts here. '''
        
        # load settings
        self.settings = ServiceLocator.get_settings()

        # init view
        self.main_window = view.MainWindow(self)
        ServiceLocator.init_main_window(self.main_window)
        self.main_window.set_default_size(self.settings.get_value('window_state', 'width'), 
                                          self.settings.get_value('window_state', 'height'))
        if self.settings.get_value('window_state', 'is_maximized'): self.main_window.maximize()
        else: self.main_window.unmaximize()
        if self.settings.get_value('window_state', 'is_fullscreen'): self.main_window.fullscreen()
        else: self.main_window.unfullscreen()
        self.main_window.show_all()

        self.workspace = Workspace()
        kernelspecs = ServiceLocator.get_kernelspecs()
        ServiceLocator.init_dialogs(self.main_window, self.workspace, kernelspecs)

        # controllers
        self.main_window.quit_action.connect('activate', self.on_quit_action)

        # watch changes in view
        self.observe_main_window()
예제 #14
0
    def __init__(self, workspace):
        self.workspace = workspace
        self.main_window = ServiceLocator.get_main_window()
        self.settings = ServiceLocator.get_settings()

        self.main_window.toggle_sidebar_action.connect('activate', self.toggle_sidebar)
        self.main_window.preferences_action.connect('activate', self.show_preferences_dialog)
        self.main_window.show_about_dialog_action.connect('activate', self.show_about_dialog)
        self.main_window.show_shortcuts_window_action.connect('activate', self.show_shortcuts_window)
        self.main_window.sidebar.connect('size-allocate', self.on_sidebar_size_allocate)

        self.main_window.restart_kernel_action.connect('activate', self.on_restart_kernel_action)
        self.main_window.change_kernel_action.connect('activate', self.on_change_kernel_action)
        self.main_window.save_all_action.connect('activate', self.on_save_all_action)
        self.main_window.save_as_action.connect('activate', self.on_save_as_action)
        self.main_window.delete_action.connect('activate', self.on_delete_action)
        self.main_window.close_action.connect('activate', self.on_close_action)
        self.main_window.close_all_action.connect('activate', self.on_close_all_action)
        self.main_window.open_action.connect('activate', self.on_open_action)
        self.main_window.create_action.connect('activate', self.on_create_action)

        self.settings.register_observer(self)
예제 #15
0
    def on_create_action(self, action=None, parameter=None):
        parameters = ServiceLocator.get_dialog('create_notebook').run()
        if parameters != None:
            pathname, kernelname = parameters
            self.workspace.recently_opened_notebooks.remove_notebook_by_pathname(pathname)
            self.workspace.remove_notebook_by_pathname(pathname)

            notebook = model_notebook.Notebook(pathname)
            notebook.set_kernelname(kernelname)
            notebook.create_cell(0, '', activate=True)
            notebook.save_to_disk()
            self.workspace.add_notebook(notebook)
            self.workspace.set_active_notebook(notebook)
예제 #16
0
    def __init__(self, workspace):
        Observable.__init__(self)
        self.workspace = workspace
        self.main_window = ServiceLocator.get_main_window()

        self.window_mode = None
        self.activate_welcome_page_mode()

        self.main_window.paned.set_position(self.workspace.sidebar_position)
        if self.workspace.show_sidebar:
            self.on_show_sidebar()
        else:
            self.on_hide_sidebar()

        self.workspace.register_observer(self)
예제 #17
0
    def __init__(self, notebook):
        Observable.__init__(self)
        self.notebook = notebook
        self.kernelspecs = ServiceLocator.get_kernelspecs()

        self.sb_view = nbli_view.OpenNotebookListViewItem(
            notebook, notebook.get_last_saved())
        self.hb_view = nbli_view.OpenNotebookListViewItem(
            notebook, notebook.get_last_saved())
        self.presenter = nbli_presenter.NotebookListItemPresenter(
            notebook, self, self.sb_view, self.hb_view)
        self.controller = nbli_controller.NotebookListItemController(
            notebook, self, self.sb_view, self.hb_view)

        self.set_kernel(notebook.get_kernelname())
예제 #18
0
    def __init__(self):
        Observable.__init__(self)

        self.recently_opened_notebooks = ro_notebooks_list.RecentlyOpenedNotebooksList(self)
        self.open_notebooks_list = open_notebooks_list.OpenNotebooksList(self)
        self.open_notebooks = dict()
        self.active_notebook = None

        self.settings = ServiceLocator.get_settings()
        self.show_sidebar = self.settings.get_value('window_state', 'sidebar_visible')
        self.sidebar_position = self.settings.get_value('window_state', 'paned_position')
        self.presenter = workspace_presenter.WorkspacePresenter(self)
        self.controller = workspace_controller.WorkspaceController(self)
        self.headerbar = headerbar_model.Headerbar(self)
        self.shortcuts = shortcuts.Shortcuts(self)

        self.set_pretty_print(self.settings.get_value('preferences', 'pretty_print'))
예제 #19
0
    def __init__(self, workspace):
        self.main_window = ServiceLocator.get_main_window()
        self.workspace = workspace

        self.setup_shortcuts()
예제 #20
0
 def delete_notebook(self, notebook):
     if ServiceLocator.get_dialog('delete_notebook').run(notebook):
         self.close_notebook(notebook, add_to_recently_opened=False)
         notebook.remove_from_disk()
예제 #21
0
 def show_about_dialog(self, action, parameter=''):
     ServiceLocator.get_dialog('about').run()
예제 #22
0
 def show_preferences_dialog(self, action=None, parameter=''):
     ServiceLocator.get_dialog('preferences').run()
예제 #23
0
 def show_shortcuts_window(self, action, parameter=''):
     ServiceLocator.get_dialog('keyboard_shortcuts').run()
예제 #24
0
 def close_notebook_after_modified_check(self, notebook):
     if notebook.get_save_state() != 'modified' or ServiceLocator.get_dialog('close_confirmation').run([notebook])['all_save_to_close']:
         self.close_notebook(notebook)
예제 #25
0
 def on_save_as_action(self, action=None, parameter=None):
     notebook = self.workspace.get_active_notebook()
     if notebook != None:
         ServiceLocator.get_dialog('save_as').run(notebook)