コード例 #1
0
    def __init__(self, app):
        Gtk.Window.__init__(self, title="Source.View Example", application=app)
        self.set_border_width(10)
        self.set_default_size(450, 450)

        bb = Gtk.ButtonBox()
        bb.set_orientation(Gtk.Orientation.HORIZONTAL)
        bb.set_spacing(2)

        swb = GtkSource.StyleSchemeChooserButton.new()

        bb.add(swb)
        bb.set_child_secondary(swb, True)
        box = Gtk.Box()
        box.set_orientation(Gtk.Orientation.VERTICAL)
        box.set_spacing(5)
        box.pack_start(bb, False, False, 0)

        scrolled_window = Gtk.ScrolledWindow()
        scrolled_window.set_policy(Gtk.PolicyType.AUTOMATIC,
                                   Gtk.PolicyType.AUTOMATIC)
        box.pack_start(scrolled_window, True, True, 0)

        sourceview = GtkSource.View.new()
        buf = sourceview.get_buffer()
        lm = GtkSource.LanguageManager()
        buf.set_language(lm.get_language("python3"))
        scrolled_window.add(sourceview)
        sourcefile = GtkSource.File()
        sourcefile.set_location(Gio.File.new_for_path(python_file))
        loader = GtkSource.FileLoader.new(buf, sourcefile)
        loader.load_async(0, None, None, None, None, None)
        wrap_mode = Gtk.WrapMode(2)
        sourceview.set_wrap_mode(wrap_mode)
        self.add(box)
コード例 #2
0
ファイル: 04_Schemes.py プロジェクト: Acry/PyGObject-GTK
    def __init__(self, app):
        Gtk.Window.__init__(self, title="Source.View Example", application=app)
        self.set_border_width(10)
        self.set_default_size(450, 450)
        scrolled_window = Gtk.ScrolledWindow()
        scrolled_window.set_policy(Gtk.PolicyType.AUTOMATIC,
                                   Gtk.PolicyType.AUTOMATIC)
        sourceview = GtkSource.View.new()
        buf = sourceview.get_buffer()
        scrolled_window.add(sourceview)
        sourcefile = GtkSource.File()
        sourcefile.set_location(Gio.File.new_for_path(python_file))
        lang_manager = GtkSource.LanguageManager()
        buf.set_language(lang_manager.get_language("python3"))

        print("Using Scheme:", buf.get_style_scheme().get_id())
        prev_scheme = buf.get_style_scheme().get_id()

        ssm = GtkSource.StyleSchemeManager.new()
        # print(ssm.get_search_path())
        for path in ssm.get_search_path():
            print(path)
        print(ssm.get_scheme_ids())
        scheme = ssm.get_scheme(ssm.get_scheme_ids()[5])
        if not scheme:
            scheme = ssm.get_scheme(prev_scheme)
        buf.set_style_scheme(scheme)
        print("Now using Scheme:", buf.get_style_scheme().get_id())

        loader = GtkSource.FileLoader.new(buf, sourcefile)
        loader.load_async(0, None, None, None, None, None)
        wrap_mode = Gtk.WrapMode(2)
        # https://lazka.github.io/pgi-docs/#Gtk-3.0/enums.html#Gtk.WrapMode
        sourceview.set_wrap_mode(wrap_mode)
        self.add(scrolled_window)
コード例 #3
0
ファイル: file.py プロジェクト: saifulbkhan/draft
def read_file_contents(filename,
                       parent_names,
                       buffer,
                       load_file_cb,
                       in_trash=False):
    parent_dir = sep.join(parent_names)
    fpath = join(BASE_TEXT_DIR, parent_dir, filename)
    if in_trash:
        fpath = join(TRASH_DIR, filename)

    def load_finish_cb(loader, res, user_data):
        gsf = user_data
        try:
            success = loader.load_finish(res)
        except Exception as e:
            # TODO: Warn file read error so overwriting path with blank file...
            write_to_file(gsf.get_location(), "")
        finally:
            load_file_cb(gsf, buffer)

    f = Gio.File.new_for_path(fpath)
    gsf = GtkSource.File(location=f)
    loader = GtkSource.FileLoader.new(buffer, gsf)
    loader.load_async(GLib.PRIORITY_HIGH, None, None, None, load_finish_cb,
                      gsf)
コード例 #4
0
ファイル: meldbuffer.py プロジェクト: rowhit/meld
    def gfile(self, value):
        self.disconnect_monitor()
        self._gfile = value
        self._sourcefile = GtkSource.File()
        self._sourcefile.set_location(value)
        self._sourcefile.bind_property('encoding', self, 'encoding',
                                       GObject.BindingFlags.DEFAULT)

        self.update_mtime()
        self.connect_monitor()
コード例 #5
0
ファイル: meldbuffer.py プロジェクト: yoooov/meld
    def gfile(self, value):
        self._disconnect_monitor()
        self._gfile = value
        self._sourcefile = GtkSource.File()
        self._sourcefile.set_location(value)

        # This is aiming to maintain existing behaviour for filename. The
        # behaviour is however wrong and should be fixed.
        self.filename = value.get_path().decode('utf8') if value else None
        self.update_mtime()
        self._connect_monitor()
コード例 #6
0
ファイル: meldbuffer.py プロジェクト: sala223/meld
    def gfile(self, value):
        self.disconnect_monitor()
        self._gfile = value
        self._sourcefile = GtkSource.File()
        self._sourcefile.set_location(value)

        # This is aiming to maintain existing behaviour for filename. The
        # behaviour is however wrong and should be fixed.
        # FIXME: maintaining previous comment above; this is now wrong in different awful ways
        self.filename = value.get_path() if value else None
        self.update_mtime()
        self.connect_monitor()
コード例 #7
0
ファイル: 05_Style_Widget.py プロジェクト: Acry/PyGObject-GTK
    def __init__(self, app):
        Gtk.Window.__init__(self, title="Source.View Example", application=app)
        self.set_border_width(10)
        self.set_default_size(450, 450)
        self.old_style = None
        self.cur_style = None

        bb = Gtk.ButtonBox()
        bb.set_orientation(Gtk.Orientation.HORIZONTAL)
        bb.set_spacing(2)

        cb = Gtk.Button.new()
        ssw = GtkSource.StyleSchemeChooserWidget.new()
        dw = Gtk.Dialog.new()
        dw.add_button("_Set", Gtk.ResponseType.OK)
        dw.add_button("_Leave", Gtk.ResponseType.CANCEL)
        dw.set_transient_for(self)
        dw.set_title("Style Chooser")
        ca = dw.get_content_area()
        ca.pack_start(ssw, True, True, 0)
        cb.connect("clicked", self.cb_active, dw, ssw)

        bb.add(cb)
        bb.set_child_secondary(cb, True)
        box = Gtk.Box()
        box.set_orientation(Gtk.Orientation.VERTICAL)
        box.set_spacing(5)
        box.pack_start(bb, False, False, 0)

        scrolled_window = Gtk.ScrolledWindow()
        scrolled_window.set_policy(Gtk.PolicyType.AUTOMATIC,
                                   Gtk.PolicyType.AUTOMATIC)
        box.pack_start(scrolled_window, True, True, 0)

        sourceview = GtkSource.View.new()
        buf = sourceview.get_buffer()
        ssw.connect("button-release-event", self.style_cb, buf, cb)
        dw.connect("response", self.dia_resp, buf, cb)
        dw.connect("delete-event", self.dia_close)
        self.old_style = buf.get_style_scheme()
        cb.set_label(self.old_style.get_id())
        lm = GtkSource.LanguageManager()
        buf.set_language(lm.get_language("python3"))
        scrolled_window.add(sourceview)
        sourcefile = GtkSource.File()
        sourcefile.set_location(Gio.File.new_for_path(python_file))
        loader = GtkSource.FileLoader.new(buf, sourcefile)
        loader.load_async(0, None, None, None, None, None)
        wrap_mode = Gtk.WrapMode(2)
        sourceview.set_wrap_mode(wrap_mode)
        self.add(box)
コード例 #8
0
    def gfile(self, value):
        self.disconnect_monitor()
        self._gfile = value
        self._sourcefile = GtkSource.File()
        self._sourcefile.set_location(value)
        self._sourcefile.bind_property('encoding', self, 'encoding',
                                       GObject.BindingFlags.DEFAULT)

        # TODO: Figure out how we use filename, and decide on how this
        # should actually work. This was previously wrong, but since
        # then we've moved to Python 3 with a different filename
        # encoding model, and also changed stuff to use Gio.File.
        self.filename = value.get_path() if value else None
        self.update_mtime()
        self.connect_monitor()
コード例 #9
0
ファイル: editor.py プロジェクト: bbethge/eddy
    def __init__(self, file=None, **props):
        super().__init__(**dict(
            default_width=640, default_height=480, icon_name='eddy', **props))
        self.__file = file
        self.__saved = True
        self.__close_after_save = False

        grid = Gtk.Grid(orientation=Gtk.Orientation.VERTICAL)
        self.add(grid)

        self.__menu_stack = MenuStack(self)
        grid.attach(self.__menu_stack, 0, self.__ROW_MENU, 1, 1)

        scroller = Gtk.ScrolledWindow(shadow_type=Gtk.ShadowType.IN,
                                      expand=True)

        self.__source_view = GtkSource.View(expand=True, monospace=True)
        scroller.add(self.__source_view)
        scroller.show_all()
        self.buffer.connect('mark-set', self.__on_mark_set)
        self.__on_cursor_position_changed(self.buffer.get_start_iter())

        if file is None:
            grid.attach(scroller, 0, self.__ROW_TEXT_VIEW, 1, 1)
            self.buffer.connect('changed', self.__on_buffer_changed)
        else:
            hgrid = Gtk.Grid(orientation=Gtk.Orientation.HORIZONTAL)
            label = Gtk.Label(_('Loading…'))
            hgrid.add(label)
            cancel_button = Gtk.Button.new_from_stock(Gtk.STOCK_CANCEL)
            hgrid.add(cancel_button)
            grid.attach(hgrid, 0, self.__ROW_TEXT_VIEW, 1, 1)
            hgrid.show_all()

            cancellable = Gio.Cancellable()
            source_file = GtkSource.File(location=file)
            loader = GtkSource.FileLoader(buffer=self.buffer, file=source_file)
            # TODO: Show progress
            loader.load_async(
                GLib.PRIORITY_DEFAULT, cancellable, None, None,
                lambda loader, result: self.__finish_loading(
                    loader, result, grid, hgrid, scroller))
            cancel_button.connect('clicked', lambda b: cancellable.cancel())

        grid.show_all()
コード例 #10
0
ファイル: editor.py プロジェクト: bbethge/eddy
 def on_save(self):
     if self.__file is None:
         chooser = Gtk.FileChooserNative.new(_('Save As…'), self,
                                             Gtk.FileChooserAction.SAVE,
                                             None, None)
         response = chooser.run()
         if response != Gtk.ResponseType.ACCEPT:
             return
         filename = chooser.get_filename()
         self.__file = Gio.File.new_for_path(filename)
     assert self.__file is not None
     assert self.__file.get_path() is not None
     source_file = GtkSource.File(location=self.__file)
     cancellable = Gio.Cancellable()
     cancel_handler = self.__menu_stack.status_area.connect(
         'save-cancel-clicked', lambda b: cancellable.cancel())
     self.__menu_stack.status_area.show_save_status()
     saver = GtkSource.FileSaver(buffer=self.buffer, file=source_file)
     # TODO: Show progress
     saver.save_async(GLib.PRIORITY_DEFAULT, cancellable, None, None,
                      self.__finish_saving, cancel_handler)
コード例 #11
0
    def on_app_activate(self, app):
        self.builder = Gtk.Builder()
        GObject.type_register(GtkSource.View)
        self.builder.add_from_file("22_editor_gtksv.glade")
        self.builder.connect_signals(Handler())

        # setup SourceView
        self.view = self.builder.get_object("sv")
        self.buffer = self.view.get_buffer()
        self.sourcefile = GtkSource.File()
        self.lang_manager = GtkSource.LanguageManager()

        # setup settings for SourceView
        self.settings = GtkSource.SearchSettings()
        self.builder.get_object("search_entry").bind_property(
            "text", self.settings, "search-text")
        self.settings.set_search_text("initial highlight")
        self.settings.set_wrap_around(True)
        self.search_context = GtkSource.SearchContext.new(
            self.buffer, self.settings)

        window = self.builder.get_object("app_window")
        window.set_application(app)
        window.show_all()
コード例 #12
0
    def __init__(self, file):
        Gtk.Box.__init__(self)
        self.set_orientation(Gtk.Orientation.VERTICAL)
        self.get_style_context().add_class("background")

        logger.debug("Make Tab")

        self.scroll = Gtk.ScrolledWindow()

        lm = GtkSource.LanguageManager.new()
        language = lm.guess_language(file, None)

        buffer = GtkSource.Buffer()

        if language:
            buffer.set_highlight_syntax(True)
            buffer.set_language(language)
            buffer.set_style_scheme(
                GtkSource.StyleSchemeManager.get_default().get_scheme(
                    'cobalt'))
        else:
            logger.warning('No language found for file "%s"' % file)
            buffer.set_highlight_syntax(False)
        buffer.connect("changed", self.changed, self)

        source_file = GtkSource.File()
        source_file.set_location(Gio.File.new_for_path(file))
        source_file_loader = GtkSource.FileLoader.new(buffer, source_file)
        source_file_loader.load_async(GLib.PRIORITY_DEFAULT, None, None, None,
                                      self.done_load, self)

        self.sourceview = GtkSource.View.new_with_buffer(buffer)
        self.sourceview.set_auto_indent(True)
        self.sourceview.set_indent_on_tab(True)
        self.sourceview.set_show_line_numbers(True)
        self.sourceview.set_highlight_current_line(True)
        self.sourceview.set_smart_home_end(True)
        self.sourceview.set_auto_indent(True)
        self.sourceview.set_show_right_margin(True)

        self.scroll.add(self.sourceview)
        self.pack_start(self.scroll, True, True, 0)

        self.actions = Gtk.ActionBar()

        box_unredo = Gtk.Box()
        box_unredo.get_style_context().add_class('linked')

        btn_undo = Gtk.Button('Undo')
        btn_undo.set_tooltip_text('Undo the last edit')
        btn_undo.connect('clicked', self.undo, self)

        btn_redo = Gtk.Button.new_from_icon_name('edit-redo-symbolic',
                                                 Gtk.IconSize.SMALL_TOOLBAR)
        btn_redo.set_tooltip_text('Redo the undone edit')
        btn_redo.connect("clicked", self.redo, self)

        box_unredo.add(btn_undo)
        box_unredo.add(btn_redo)

        self.actions.pack_start(box_unredo)

        btn_info = Gtk.Button.new_from_icon_name(
            'document-properties-symbolic', Gtk.IconSize.SMALL_TOOLBAR)
        btn_info.set_tooltip_text('File Information')
        btn_info.connect("clicked", self.info, self)

        self.actions.pack_end(btn_info)

        self.pack_end(self.actions, False, False, 0)

        self.bit_file = source_file
        self.bit_buffer = buffer
        self.show_all()