Пример #1
0
 def __init__(self, gfile=None, encoding="UTF-8"):
     self._settings = Settings.new()
     self.gfile = gfile
     self.encoding = encoding
     self.path = ""
     self.title = ""
     self.name = ""
Пример #2
0
 def __init__(self, *args, **kwargs):
     super().__init__(*args,
                      application_id="org.gnome.gitlab.somas.Apostrophe",
                      flags=Gio.ApplicationFlags.HANDLES_COMMAND_LINE,
                      **kwargs)
     self.window = None
     self.settings = Settings.new()
Пример #3
0
    def __init__(self, text_view):
        self.settings = Settings.new()

        self.text_view = text_view
        self.text_view.connect("button-press-event",
                               self.on_button_press_event)
        self.text_buffer = text_view.get_buffer()
        self.cursor_mark = self.text_buffer.create_mark(
            "click",
            self.text_buffer.get_iter_at_mark(self.text_buffer.get_insert()))

        self.latex_converter = latex_to_PNG.LatexToPNG()
        self.characters_per_line = self.settings.get_int("characters-per-line")

        self.popover = Gtk.Popover.new(self.text_view)
        self.popover.get_style_context().add_class("quick-preview-popup")
        self.popover.set_modal(True)

        self.preview_fns = {
            markup_regex.MATH: self.get_view_for_math,
            markup_regex.IMAGE: self.get_view_for_image,
            markup_regex.LINK: self.get_view_for_link,
            markup_regex.LINK_ALT: self.get_view_for_link,
            markup_regex.FOOTNOTE_ID: self.get_view_for_footnote,
            re.compile(r"(?P<text>\w+)"): self.get_view_for_lexikon
        }
Пример #4
0
def pandoc_convert(text, to="html5", args=[], outputfile=None):
    fr = Settings.new().get_value('input-format').get_string() or "markdown"
    args.extend(["--quiet"])
    return pypandoc.convert_text(text,
                                 to,
                                 fr,
                                 extra_args=args,
                                 outputfile=outputfile)
    def __init__(self, app):

        self.settings = Settings.new()

        self.builder = Gtk.Builder()
        self.builder.add_from_resource(
            "/org/gnome/gitlab/somas/Apostrophe/ui/Headerbar.ui")
        self.builder.add_from_resource(
            "/org/gnome/gitlab/somas/Apostrophe/ui/ExportPopover.ui")

        self.hb = self.builder.get_object("Headerbar")
        self.hb_revealer = self.builder.get_object("titlebar_revealer")

        self.preview_toggle_revealer = self.builder.get_object(
            "preview_switch_revealer")
        self.preview_switcher_icon = self.builder.get_object(
            "preview_switch_toggle_icon")

        self.__populate_layout_switcher_menu()
        self.update_preview_layout_icon()

        self.sync_scroll_switch = self.builder.get_object("sync_scroll_switch")
        self.sync_scroll_switch.set_active(
            self.settings.get_value("sync-scroll"))
        self.sync_scroll_switch.connect("state-set", self.__on_sync_scroll)

        self.menu_button = self.builder.get_object("menu_button")
        self.recents_button = self.builder.get_object("recents_button")
        self.export_button = self.builder.get_object("export_button")
        export_popover = self.builder.get_object("export_menu")
        self.preview_switch_button = self.builder.get_object(
            "preview_switch_button")

        self.export_button.set_popover(export_popover)

        add_menus(self, app)

        settings = Gtk.Settings.get_default()
        # TODO: use walrust operator whenever Python3.8 lands on SDK
        # if global_dark:= settings.props.gtk_theme_name.endswith("-dark"):
        global_dark = settings.props.gtk_theme_name.endswith("-dark")
        if global_dark:
            self.light_button.set_sensitive(False)
            self.light_button.set_tooltip_text(
                _("Light mode isn’t available while using a dark global theme")
            )

        self.dark_button.set_active(
            self.settings.get_boolean("dark-mode") or global_dark)

        self.light_button.connect("toggled", self.__on_dark_mode)

        self.select_preview_layout_row()
Пример #6
0
    def __init__(self, text_view, *targets):
        super().__init__()

        self.settings = Settings.new()

        self.target_list = Gtk.TargetList.new([])
        if TARGET_URI in targets:
            self.target_list.add_uri_targets(TARGET_URI)
        if TARGET_TEXT in targets:
            self.target_list.add_text_targets(TARGET_TEXT)

        text_view.drag_dest_set_target_list(self.target_list)
        text_view.connect_after('drag-data-received', self.on_drag_data_received)
Пример #7
0
    def __init__(self, main_window, content, editor, text_view):
        self.main_window = main_window
        self.main_window.connect("delete-event", self.on_window_closed)
        self.content = content
        self.editor = editor
        self.text_view = text_view

        self.settings = Settings.new()
        self.popover = None
        self.window = None
        self.headerbar = None

        self.mode = self.settings.get_enum("preview-mode")
        self.update_mode()
Пример #8
0
    def __init__(self, application_id, *args, **kwargs):
        super().__init__(*args,
                         application_id=application_id,
                         flags=Gio.ApplicationFlags.HANDLES_OPEN,
                         **kwargs)

        self.add_main_option("verbose", b"v", GLib.OptionFlags.NONE,
                             GLib.OptionArg.NONE, "Verbose output", None)

        Handy.init()

        self.window = None
        self.settings = Settings.new()
        self.inhibitor = None
        self._application_id = application_id
Пример #9
0
class Theme:
    """
    The Theme enum lists all supported themes using their "gtk-theme-name" value.

    The light variant is listed first, followed by the dark variant, if any.
    """

    previous = None
    settings = Settings.new()

    def __init__(self, name, web_css_path, is_dark, inverse_name):
        self.name = name
        self.web_css_path = web_css_path
        self.is_dark = is_dark
        self.inverse_name = inverse_name

    @classmethod
    def get_for_name(cls, name, default=None):
        current_theme = default or defaultThemes[0]
        for theme in defaultThemes:
            if name == theme.name:
                current_theme = theme
        return current_theme

    @classmethod
    def get_current_changed(cls):
        theme_name = Gtk.Settings.get_default().get_property('gtk-theme-name')
        dark_mode = cls.settings.get_boolean('dark-mode')
        current_theme = cls.get_for_name(theme_name)
        if dark_mode != current_theme.is_dark and current_theme.inverse_name:
            current_theme = cls.get_for_name(current_theme.inverse_name,
                                             current_theme.name)
        changed = current_theme != cls.previous
        cls.previous = current_theme
        return current_theme, changed

    @classmethod
    def get_current(cls):
        current_theme, _ = cls.get_current_changed()
        return current_theme

    def __eq__(self, other):
        return isinstance(other, self.__class__) and \
               self.name == other.name and \
               self.web_css_path == other.web_css_path and \
               self.is_dark == other.is_dark and \
               self.inverse_name == other.inverse_name
Пример #10
0
    def __init__(self, window, content, editor, text_view):
        self.text_view = text_view

        self.web_view = None
        self.web_view_pending_html = None

        self.preview_converter = PreviewConverter()
        self.preview_renderer = PreviewRenderer(
            window, content, editor, text_view)

        window.connect("style-updated", self.reload)

        self.text_changed_handler_id = None

        self.settings = Settings.new()
        self.web_scroll_handler_id = None
        self.text_scroll_handler_id = None

        self.loading = False
        self.shown = False
Пример #11
0
    def __init__(self, stats_button, text_view):
        super().__init__()

        self.stats_button = stats_button
        self.stats_button.connect("clicked", self.on_stats_button_clicked)
        self.stats_button.connect("destroy", self.on_destroy)

        self.text_view = text_view
        self.text_view.get_buffer().connect("changed", self.on_text_changed)

        self.popover = None

        self.characters = 0
        self.words = 0
        self.sentences = 0
        self.paragraphs = 0
        self.read_time = (0, 0, 0)

        self.settings = Settings.new()

        self.stats_counter = StatsCounter(self.update_stats)

        self.update_default_stat()
Пример #12
0
    def __init__(self, app):
        """Set up the main window"""

        super().__init__(application=Gio.Application.get_default(), title="Apostrophe")

        self.get_style_context().add_class('apostrophe-window')

        # Set UI
        builder = Gtk.Builder()
        builder.add_from_resource(
            "/org/gnome/gitlab/somas/Apostrophe/ui/Window.ui")
        root = builder.get_object("AppOverlay")
        self.connect("delete-event", self.on_delete_called)
        self.add(root)

        self.set_default_size(1000, 600)

        # Preferences
        self.settings = Settings.new()

        # Headerbars
        self.last_height = 0
        self.headerbar = headerbars.MainHeaderbar(app)
        self.headerbar.hb_revealer.connect(
            "size_allocate", self.header_size_allocate)
        self.set_titlebar(self.headerbar.hb_revealer)

        # remove .titlebar class from hb_revealer 
        # to don't mess things up on Elementary OS 
        self.headerbar.hb_revealer.get_style_context().remove_class("titlebar")

        self.fs_headerbar = headerbars.FullscreenHeaderbar(builder, app)

        # Bind properties between normal and fs headerbar
        self.headerbar.light_button.bind_property(
            "active", self.fs_headerbar.light_button, "active",
            GObject.BindingFlags.BIDIRECTIONAL
            | GObject.BindingFlags.SYNC_CREATE)

        self.headerbar.dark_button.bind_property(
            "active", self.fs_headerbar.dark_button, "active",
            GObject.BindingFlags.BIDIRECTIONAL
            | GObject.BindingFlags.SYNC_CREATE)

        # The dummy headerbar is a cosmetic hack to be able to
        # crossfade the hb on top of the window
        self.dm_headerbar = headerbars.DummyHeaderbar(app)
        root.add_overlay(self.dm_headerbar.hb_revealer)
        root.reorder_overlay(self.dm_headerbar.hb_revealer, 0)
        root.set_overlay_pass_through(self.dm_headerbar.hb_revealer, True)

        self.title_end = "  –  Apostrophe"
        self.set_headerbar_title("New File" + self.title_end)

        self.accel_group = Gtk.AccelGroup()
        self.add_accel_group(self.accel_group)

        self.scrolled_window = builder.get_object('editor_scrolledwindow')

        # Setup text editor
        self.text_view = TextView(self.settings.get_int("characters-per-line"))
        self.text_view.set_top_margin(80)
        self.text_view.connect('focus-out-event', self.focus_out)
        self.text_view.get_buffer().connect('changed', self.on_text_changed)
        self.text_view.show()
        self.scrolled_window.add(self.text_view)
        self.text_view.grab_focus()

        # Setup stats counter
        self.stats_revealer = builder.get_object('editor_stats_revealer')
        self.stats_button = builder.get_object('editor_stats_button')
        self.stats_handler = StatsHandler(self.stats_button, self.text_view)

        # Setup preview
        content = builder.get_object('content')
        editor = builder.get_object('editor')
        self.preview_handler = PreviewHandler(self, content, editor, self.text_view)

        # Setup header/stats bar
        self.headerbar_visible = True
        self.bottombar_visible = True
        self.buffer_modified_for_status_bar = False

        # Init file name with None
        self.set_filename()

        # Setting up spellcheck
        self.auto_correct = None
        self.toggle_spellcheck(self.settings.get_value("spellcheck"))
        self.did_change = False

        ###
        #   Sidebar initialization test
        ###
        self.paned_window = builder.get_object("main_paned")
        self.sidebar_box = builder.get_object("sidebar_box")
        self.sidebar = Sidebar(self)
        self.sidebar_box.hide()

        ###
        #   Search and replace initialization
        #   Same interface as Sidebar ;)
        ###
        self.searchreplace = SearchAndReplace(self, self.text_view, builder)

        # EventBoxes

        self.headerbar_eventbox = builder.get_object("HeaderbarEventbox")
        self.headerbar_eventbox.connect('enter_notify_event',
                                        self.reveal_headerbar_bottombar)

        self.stats_revealer.connect('enter_notify_event', self.reveal_bottombar)
Пример #13
0
 def __init__(self, *args, **kwargs):
     super().__init__(*args, application_id="de.wolfvollprecht.UberWriter",
                      flags=Gio.ApplicationFlags.HANDLES_COMMAND_LINE,
                      **kwargs)
     self.window = None
     self.settings = Settings.new()