Пример #1
0
def buttons(app):
    """constructor for the headerbar buttons

    Returns:
        [NamedTupple] -- tupple of Gtk.Buttons
    """

    Button = namedtuple("Button", "new open_recent save search menu")
    btn = Button(
        Gtk.Button().new_with_label(_("New")),
        Gtk.Box().new(0, 0),
        Gtk.Button().new_with_label(_("Save")),
        Gtk.Button().new_from_icon_name("system-search-symbolic",
                                        Gtk.IconSize.BUTTON),
        Gtk.MenuButton().new())

    builder_window_menu = get_builder('Menu')
    model = builder_window_menu.get_object("Menu")

    open_button = Gtk.Button().new_with_label(_("Open"))
    open_button.set_action_name("app.open")

    recents_builder = get_builder('Recents')
    recents = recents_builder.get_object("recent_md_popover")

    recents_treeview = get_descendant(recents, "recent_view", level=0)
    recents_treeview.set_activate_on_single_click(True)

    recents_wd = recents_builder.get_object("recent_md_widget")
    recents_wd.connect('item-activated', app.on_open_recent)

    recents_button = Gtk.MenuButton().new()
    recents_button.set_image(
        Gtk.Image.new_from_icon_name("pan-down-symbolic", Gtk.IconSize.BUTTON))
    recents_button.set_tooltip_text(_("Open Recent"))
    recents_button.set_popover(recents)

    btn.open_recent.get_style_context().add_class("linked")
    btn.open_recent.pack_start(open_button, False, False, 0)
    btn.open_recent.pack_end(recents_button, False, False, 0)

    btn.search.set_tooltip_text(_("Search and replace"))
    btn.menu.set_tooltip_text(_("Menu"))
    btn.menu.set_image(
        Gtk.Image.new_from_icon_name("open-menu-symbolic",
                                     Gtk.IconSize.BUTTON))
    btn.menu.set_use_popover(True)
    btn.menu.set_menu_model(model)
    btn.new.set_action_name("app.new")
    btn.save.set_action_name("app.save")
    btn.search.set_action_name("app.search")

    return btn
Пример #2
0
    def __init__(self, window, content, editor, text_view):
        self.text_view = text_view

        self.web_view = None
        self.web_view_pending_html = None

        builder = get_builder("Preview")
        preview = builder.get_object("preview")
        mode_button = builder.get_object("preview_mode_button")
        self.mode_revealer = builder.get_object("preview_mode_revealer")

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

        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
Пример #3
0
    def __init__(self, window, content, editor, text_view):
        self.text_view = text_view

        self.web_view = None
        self.web_view_pending_html = None

        builder = get_builder("Preview")
        preview = builder.get_object("preview")
        mode_button = builder.get_object("preview_mode_button")
        self.mode_revealer = builder.get_object("preview_mode_revealer")

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

        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
Пример #4
0
 def __new__(cls):
     """Special static method that's automatically called by Python when 
     constructing a new instance of this class.
     
     Returns a fully instantiated PreferencesDialog object.
     """
     builder = get_builder('Preferences')
     new_object = builder.get_object("PreferencesWindow")
     return new_object
Пример #5
0
    def on_about(self, _action, _param):
        builder = get_builder('About')
        about_dialog = builder.get_object("AboutDialog")
        about_dialog.set_transient_for(self.window)

        logo_file = get_media_path("de.wolfvollprecht.UberWriter.svg")
        logo = GdkPixbuf.Pixbuf.new_from_file(logo_file)

        about_dialog.set_logo(logo)
        about_dialog.present()
Пример #6
0
    def on_about(self, _action, _param):
        builder = get_builder('About')
        about_dialog = builder.get_object("AboutDialog")
        about_dialog.set_transient_for(self.window)

        logo_file = get_media_path("de.wolfvollprecht.UberWriter.svg")
        logo = GdkPixbuf.Pixbuf.new_from_file(logo_file)

        about_dialog.set_logo(logo)
        about_dialog.present()
Пример #7
0
    def __init__(self, settings):
        self.settings = settings
        self.builder = get_builder("Preferences")

        self.dark_mode_auto_switch = self.builder.get_object(
            "dark_mode_auto_switch")
        self.dark_mode_auto_switch.set_active(
            self.settings.get_value("dark-mode-auto"))
        self.dark_mode_auto_switch.connect("state-set", self.on_dark_mode_auto)

        self.dark_mode_switch = self.builder.get_object("dark_mode_switch")
        self.dark_mode_switch.set_active(self.settings.get_value("dark-mode"))
        self.dark_mode_switch.connect("state-set", self.on_dark_mode)

        self.spellcheck_switch = self.builder.get_object("spellcheck_switch")
        self.spellcheck_switch.set_active(
            self.settings.get_value("spellcheck"))
        self.spellcheck_switch.connect("state-set", self.on_spellcheck)

        self.gradient_overlay_switch = self.builder.get_object(
            "gradient_overlay_switch")
        self.gradient_overlay_switch.set_active(
            self.settings.get_value("gradient-overlay"))
        self.gradient_overlay_switch.connect("state-set",
                                             self.on_gradient_overlay)

        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)

        input_format_store = Gtk.ListStore(int, str)
        input_format = self.settings.get_string("input-format")
        input_format_active = 0
        for i, fmt in enumerate(self.formats):
            input_format_store.append([i, fmt["name"]])
            if fmt["format"] == input_format:
                input_format_active = i
        self.input_format_combobox = self.builder.get_object(
            "input_format_combobox")
        self.input_format_combobox.set_model(input_format_store)
        input_format_renderer = Gtk.CellRendererText()
        self.input_format_combobox.pack_start(input_format_renderer, True)
        self.input_format_combobox.add_attribute(input_format_renderer, "text",
                                                 1)
        self.input_format_combobox.set_active(input_format_active)
        self.input_format_combobox.connect("changed", self.on_input_format)

        self.input_format_help_button = self.builder.get_object(
            "input_format_help_button")
        self.input_format_help_button.connect('clicked',
                                              self.on_input_format_help)
Пример #8
0
    def __init__(self, filename):
        """Set up the about dialog"""
        self.builder = get_builder('Export')
        self.dialog = self.builder.get_object("Export")
        self.stack = self.builder.get_object("export_stack")
        self.stack_switcher = self.builder.get_object("format_switcher")

        stack_pdf_disabled = self.builder.get_object("pdf_disabled")
        filename = filename or _("Untitled document.md")

        self.filechoosers = {
            export_format: self.stack.get_child_by_name(export_format)
            for export_format in ["pdf", "html", "advanced"]
        }
        for export_format, filechooser in self.filechoosers.items():
            filechooser.set_do_overwrite_confirmation(True)
            filechooser.set_current_folder(os.path.dirname(filename))
            if export_format == "advanced":
                self.adv_export_name = self.builder.get_object(
                    "advanced_export_name")
                self.adv_export_name.set_text(os.path.basename(filename)[:-3])
            else:
                filechooser.set_current_name(
                    os.path.basename(filename)[:-2] + export_format)

        # Disable pdf if Texlive not installed
        texlive_installed = helpers.exist_executable("pdftex")

        if not texlive_installed:
            self.filechoosers["pdf"].set_visible(False)
            stack_pdf_disabled.set_visible(True)
            stack_pdf_disabled.set_text(disabled_text())
            stack_pdf_disabled.set_justify(Gtk.Justification.CENTER)
            self.stack.connect('notify', self.allow_export,
                               'visible_child_name')

        self.builder.get_object("highlight_style").set_active(0)

        self.builder.get_object("css_filechooser").set_uri(
            helpers.path_to_file(Theme.get_current().web_css_path))

        format_store = Gtk.ListStore(int, str)
        for i, fmt in enumerate(self.formats):
            format_store.append([i, fmt["name"]])
        self.format_field = self.builder.get_object('choose_format')
        self.format_field.set_model(format_store)

        format_renderer = Gtk.CellRendererText()
        self.format_field.pack_start(format_renderer, True)
        self.format_field.add_attribute(format_renderer, "text", 1)
        self.format_field.set_active(0)
Пример #9
0
    def __init__(self, filename):
        """Set up the about dialog"""
        self.builder = get_builder('Export')
        self.dialog = self.builder.get_object("Export")
        self.stack = self.builder.get_object("export_stack")
        self.stack_switcher = self.builder.get_object("format_switcher")

        stack_pdf_disabled = self.builder.get_object("pdf_disabled")
        filename = filename or _("Untitled document.md")

        self.filechoosers = {export_format: self.stack.get_child_by_name(export_format)
                             for export_format in ["pdf", "html", "advanced"]}
        for export_format, filechooser in self.filechoosers.items():
            filechooser.set_do_overwrite_confirmation(True)
            filechooser.set_current_folder(os.path.dirname(filename))
            if export_format == "advanced":
                self.adv_export_name = self.builder.get_object("advanced_export_name")
                self.adv_export_name.set_text(os.path.basename(filename)[:-3])
            else:
                filechooser.set_current_name(os.path.basename(filename)[:-2] + export_format)

        # Disable pdf if Texlive not installed
        texlive_installed = helpers.exist_executable("pdftex")

        if not texlive_installed:
            self.filechoosers["pdf"].set_visible(False)
            stack_pdf_disabled.set_visible(True)
            stack_pdf_disabled.set_text(disabled_text())
            stack_pdf_disabled.set_justify(Gtk.Justification.CENTER)
            self.stack.connect('notify', self.allow_export, 'visible_child_name')

        self.builder.get_object("highlight_style").set_active(0)

        self.builder.get_object("css_filechooser").set_uri(
            helpers.path_to_file(Theme.get_current().web_css_path))

        format_store = Gtk.ListStore(int, str)
        for i, fmt in enumerate(self.formats):
            format_store.append([i, fmt["name"]])
        self.format_field = self.builder.get_object('choose_format')
        self.format_field.set_model(format_store)

        format_renderer = Gtk.CellRendererText()
        self.format_field.pack_start(format_renderer, True)
        self.format_field.add_attribute(format_renderer, "text", 1)
        self.format_field.set_active(0)
Пример #10
0
    def __init__(self, settings):
        self.settings = settings
        self.builder = get_builder("Preferences")

        self.dark_mode_auto_switch = self.builder.get_object("dark_mode_auto_switch")
        self.dark_mode_auto_switch.set_active(self.settings.get_value("dark-mode-auto"))
        self.dark_mode_auto_switch.connect("state-set", self.on_dark_mode_auto)

        self.dark_mode_switch = self.builder.get_object("dark_mode_switch")
        self.dark_mode_switch.set_active(self.settings.get_value("dark-mode"))
        self.dark_mode_switch.connect("state-set", self.on_dark_mode)

        self.spellcheck_switch = self.builder.get_object("spellcheck_switch")
        self.spellcheck_switch.set_active(self.settings.get_value("spellcheck"))
        self.spellcheck_switch.connect("state-set", self.on_spellcheck)

        self.gradient_overlay_switch = self.builder.get_object("gradient_overlay_switch")
        self.gradient_overlay_switch.set_active(self.settings.get_value("gradient-overlay"))
        self.gradient_overlay_switch.connect("state-set", self.on_gradient_overlay)

        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)

        input_format_store = Gtk.ListStore(int, str)
        input_format = self.settings.get_string("input-format")
        input_format_active = 0
        for i, fmt in enumerate(self.formats):
            input_format_store.append([i, fmt["name"]])
            if fmt["format"] == input_format:
                input_format_active = i
        self.input_format_combobox = self.builder.get_object("input_format_combobox")
        self.input_format_combobox.set_model(input_format_store)
        input_format_renderer = Gtk.CellRendererText()
        self.input_format_combobox.pack_start(input_format_renderer, True)
        self.input_format_combobox.add_attribute(input_format_renderer, "text", 1)
        self.input_format_combobox.set_active(input_format_active)
        self.input_format_combobox.connect("changed", self.on_input_format)

        self.input_format_help_button = self.builder.get_object("input_format_help_button")
        self.input_format_help_button.connect('clicked', self.on_input_format_help)
Пример #11
0
    def __init__(self, app):
        """Set up the main window"""

        Gtk.ApplicationWindow.__init__(self,
                                       application=Gio.Application.get_default(),
                                       title="Uberwriter")

        self.builder = get_builder('UberwriterWindow')
        self.add(self.builder.get_object("FullscreenOverlay"))

        self.set_default_size(850, 500)

        # preferences
        self.settings = Settings.new()

        self.set_name('UberwriterWindow')

        # Headerbars
        self.headerbar = headerbars.MainHeaderbar(app)
        self.set_titlebar(self.headerbar.hb_container)
        self.fs_headerbar = headerbars.FsHeaderbar(self.builder, app)

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

        self.focusmode = False

        self.word_count = self.builder.get_object('word_count')
        self.char_count = self.builder.get_object('char_count')

        # Setup status bar hide after 3 seconds

        self.status_bar = self.builder.get_object('status_bar_box')
        self.statusbar_revealer = self.builder.get_object('status_bar_revealer')
        self.status_bar.get_style_context().add_class('status_bar_box')
        self.status_bar_visible = True
        self.was_motion = True
        self.buffer_modified_for_status_bar = False

        if self.settings.get_value("poll-motion"):
            self.connect("motion-notify-event", self.on_motion_notify)
            GObject.timeout_add(3000, self.poll_for_motion)

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

        # Setup text editor
        self.text_editor = TextEditor()
        self.text_editor.set_name('UberwriterEditor')
        self.get_style_context().add_class('uberwriter_window')

        base_leftmargin = 100
        self.text_editor.set_left_margin(base_leftmargin)
        self.text_editor.set_left_margin(40)
        self.text_editor.set_top_margin(80)
        self.text_editor.props.width_request = 600
        self.text_editor.props.halign = Gtk.Align.CENTER
        self.text_editor.set_vadjustment(self.builder.get_object('vadjustment1'))
        self.text_editor.set_wrap_mode(Gtk.WrapMode.WORD_CHAR)
        self.text_editor.connect('focus-out-event', self.focus_out)
        self.text_editor.get_style_context().connect('changed', self.style_changed)

        self.text_editor.set_top_margin(80)
        self.text_editor.set_bottom_margin(16)

        self.text_editor.set_pixels_above_lines(4)
        self.text_editor.set_pixels_below_lines(4)
        self.text_editor.set_pixels_inside_wrap(8)

        tab_array = Pango.TabArray.new(1, True)
        tab_array.set_tab(0, Pango.TabAlign.LEFT, 20)
        self.text_editor.set_tabs(tab_array)

        self.text_editor.show()
        self.text_editor.grab_focus()

        # Setup preview webview
        self.preview_webview = None

        self.editor_alignment = self.builder.get_object('editor_alignment')
        self.scrolled_window = self.builder.get_object('editor_scrolledwindow')
        self.scrolled_window.props.width_request = 600
        self.scrolled_window.add(self.text_editor)
        self.alignment_padding = 40
        self.editor_viewport = self.builder.get_object('editor_viewport')

        # some people seems to have performance problems with the overlay.
        # Let them disable it

        if self.settings.get_value("gradient-overlay"):
            self.overlay = self.scrolled_window.connect_after("draw", self.draw_gradient)

        self.smooth_scroll_starttime = 0
        self.smooth_scroll_endtime = 0
        self.smooth_scroll_acttarget = 0
        self.smooth_scroll_data = {
            'target_pos': -1,
            'source_pos': -1,
            'duration': 0
        }
        self.smooth_scroll_tickid = -1

        self.text_buffer = self.text_editor.get_buffer()
        self.text_buffer.set_text('')

        # Init Window height for top/bottom padding
        self.window_height = self.get_size()[1]

        self.text_change_event = self.text_buffer.connect(
            'changed', self.text_changed)

        # Init file name with None
        self.set_filename()

        # Markup and Shortcuts for the TextBuffer
        self.markup_buffer = MarkupBuffer(
            self, self.text_buffer, base_leftmargin)
        self.markup_buffer.markup_buffer()

        # Set current theme
        self.apply_current_theme()

        # Scrolling -> Dark or not?
        self.textchange = False
        self.scroll_count = 0
        self.timestamp_last_mouse_motion = 0
        self.text_buffer.connect_after('mark-set', self.mark_set)

        # Drag and drop

        # self.TextEditor.drag_dest_unset()
        # self.TextEditor.drag_dest_set(Gtk.DestDefaults.ALL, [], Gdk.DragAction.COPY)
        self.target_list = Gtk.TargetList.new([])
        self.target_list.add_uri_targets(1)
        self.target_list.add_text_targets(2)

        self.text_editor.drag_dest_set_target_list(self.target_list)
        self.text_editor.connect_after(
            'drag-data-received', self.on_drag_data_received)

        def on_drop(_widget, *_args):
            print("drop")
        self.text_editor.connect('drag-drop', on_drop)

        self.text_buffer.connect('paste-done', self.paste_done)
        # self.connect('key-press-event', self.alt_mod)

        # Events for Typewriter mode

        # Setting up inline preview
        self.inline_preview = InlinePreview(
            self.text_editor, self.text_buffer)

        # Vertical scrolling
        self.vadjustment = self.scrolled_window.get_vadjustment()
        self.vadjustment.connect('value-changed', self.scrolled)

        # 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 = self.builder.get_object("main_pained")
        self.sidebar_box = self.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)

        # Window resize
        self.window_resize(self)
        self.connect("configure-event", self.window_resize)
        self.connect("delete-event", self.on_delete_called)
Пример #12
0
 def on_shortcuts(self, _action, _param):
     builder = get_builder('Shortcuts')
     builder.get_object("shortcuts").set_transient_for(self.window)
     builder.get_object("shortcuts").show()
Пример #13
0
    def __init__(self, app):
        """Set up the main window"""

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

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

        # Set UI
        builder = get_builder('Window')
        root = builder.get_object("FullscreenOverlay")
        self.connect("delete-event", self.on_delete_called)
        self.add(root)

        self.set_default_size(1000, 600)

        # Preferences
        self.settings = Settings.new()

        # Headerbars
        self.headerbar = headerbars.MainHeaderbar(app)
        self.set_titlebar(self.headerbar.hb_container)
        self.fs_headerbar = headerbars.FullscreenHeaderbar(builder, app)

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

        self.timestamp_last_mouse_motion = 0
        if self.settings.get_value("poll-motion"):
            self.connect("motion-notify-event", self.on_motion_notify)
            GObject.timeout_add(3000, self.poll_for_motion)

        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.connect('focus-out-event', self.focus_out)
        self.text_view.get_buffer().connect('changed', self.on_text_changed)
        self.text_view.show()
        self.text_view.grab_focus()
        self.scrolled_window.add(self.text_view)

        # 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 hide after 3 seconds
        self.top_bottom_bars_visible = True
        self.was_motion = True
        self.buffer_modified_for_status_bar = False

        # some people seems to have performance problems with the overlay.
        # Let them disable it
        self.overlay_id = None
        self.toggle_gradient_overlay(self.settings.get_value("gradient-overlay"))

        # 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)
Пример #14
0
 def on_shortcuts(self, _action, _param):
     builder = get_builder('Shortcuts')
     builder.get_object("shortcuts").set_transient_for(self.window)
     builder.get_object("shortcuts").show()
Пример #15
0
    def __init__(self, app):
        """Set up the main window"""

        Gtk.ApplicationWindow.__init__(
            self,
            application=Gio.Application.get_default(),
            title="Uberwriter")

        # Set UI
        self.builder = get_builder('Window')
        root = self.builder.get_object("FullscreenOverlay")
        root.connect('style-updated', self.apply_current_theme)
        self.add(root)

        self.set_default_size(900, 500)

        # Preferences
        self.settings = Settings.new()

        # Headerbars
        self.headerbar = headerbars.MainHeaderbar(app)
        self.set_titlebar(self.headerbar.hb_container)
        self.fs_headerbar = headerbars.FullscreenHeaderbar(self.builder, app)

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

        self.timestamp_last_mouse_motion = 0
        if self.settings.get_value("poll-motion"):
            self.connect("motion-notify-event", self.on_motion_notify)
            GObject.timeout_add(3000, self.poll_for_motion)

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

        # Setup text editor
        self.text_view = TextView()
        self.text_view.props.halign = Gtk.Align.CENTER
        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.text_view.grab_focus()

        # Setup preview webview
        self.preview_webview = None

        self.scrolled_window = self.builder.get_object('editor_scrolledwindow')
        self.scrolled_window.get_style_context().add_class(
            'uberwriter-scrolled-window')
        self.scrolled_window.add(self.text_view)
        self.editor_viewport = self.builder.get_object('editor_viewport')

        # Stats counter
        self.stats_counter_revealer = self.builder.get_object(
            'stats_counter_revealer')
        self.stats_button = self.builder.get_object('stats_counter')
        self.stats_button.get_style_context().add_class('stats-counter')
        self.stats_handler = StatsHandler(self.stats_button, self.text_view)

        # Setup header/stats bar hide after 3 seconds
        self.top_bottom_bars_visible = True
        self.was_motion = True
        self.buffer_modified_for_status_bar = False

        # some people seems to have performance problems with the overlay.
        # Let them disable it
        self.overlay_id = None
        self.toggle_gradient_overlay(
            self.settings.get_value("gradient-overlay"))

        # 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 = self.builder.get_object("main_pained")
        self.sidebar_box = self.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)

        # Window resize
        self.window_resize(self)
        self.connect("configure-event", self.window_resize)
        self.connect("delete-event", self.on_delete_called)

        # Set current theme
        self.apply_current_theme()
        self.get_style_context().add_class('uberwriter-window')