Merge pull request #117 from UberWriter/ui

Ui
ft.font-size
somas95 2019-03-09 20:38:21 +01:00 committed by GitHub
commit d12f8b6ef7
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
9 changed files with 144 additions and 36 deletions

View File

@ -0,0 +1,4 @@
@define-color dark_bg #353535;
@define-color light_bg #F6F5F4;
@import url("style.css");

View File

@ -0,0 +1,4 @@
@define-color dark_bg #31373D;
@define-color light_bg #EDEDED;
@import url("style.css");

View File

@ -474,7 +474,7 @@ code {
padding: 0.2em 0.4em; padding: 0.2em 0.4em;
margin: 0; margin: 0;
font-size: 85%; font-size: 85%;
background-color: rgba(27,31,35,0.05); background-color: #fafbfc9d;
color: #1b1f23; color: #1b1f23;
border-radius: 3px; border-radius: 3px;
} }
@ -508,7 +508,7 @@ pre {
overflow: auto; overflow: auto;
font-size: 85%; font-size: 85%;
line-height: 1.45; line-height: 1.45;
background-color: #f6f8fa; background-color: #f6f8faf1;
border-radius: 3px; border-radius: 3px;
} }

View File

@ -4,9 +4,6 @@
inclusion in templates inclusion in templates
*/ */
@define-color dark_bg #31373D;
@define-color light_bg #EDEDED;
@binding-set window-bindings { @binding-set window-bindings {
bind "<ctl>w" { "close-window" () }; bind "<ctl>w" { "close-window" () };
bind "<ctl><shift>b" { "toggle-bibtex" () }; bind "<ctl><shift>b" { "toggle-bibtex" () };

View File

@ -40,9 +40,10 @@
<object class="GtkLabel" id="Dark_mode_label"> <object class="GtkLabel" id="Dark_mode_label">
<property name="visible">True</property> <property name="visible">True</property>
<property name="can_focus">False</property> <property name="can_focus">False</property>
<property name="halign">start</property> <property name="halign">end</property>
<property name="valign">start</property> <property name="valign">start</property>
<property name="label" translatable="yes">Use dark mode</property> <property name="label" translatable="yes">Use dark mode</property>
<property name="justify">right</property>
</object> </object>
<packing> <packing>
<property name="left_attach">0</property> <property name="left_attach">0</property>
@ -53,13 +54,28 @@
<object class="GtkLabel" id="Spellcheck_label"> <object class="GtkLabel" id="Spellcheck_label">
<property name="visible">True</property> <property name="visible">True</property>
<property name="can_focus">False</property> <property name="can_focus">False</property>
<property name="halign">end</property>
<property name="label" translatable="yes">Autospellcheck</property> <property name="label" translatable="yes">Autospellcheck</property>
<property name="justify">right</property>
</object> </object>
<packing> <packing>
<property name="left_attach">0</property> <property name="left_attach">0</property>
<property name="top_attach">1</property> <property name="top_attach">1</property>
</packing> </packing>
</child> </child>
<child>
<object class="GtkLabel" id="Gradient_label">
<property name="visible">True</property>
<property name="can_focus">False</property>
<property name="halign">end</property>
<property name="label" translatable="yes">Draw scroll gradient</property>
<property name="justify">right</property>
</object>
<packing>
<property name="left_attach">0</property>
<property name="top_attach">2</property>
</packing>
</child>
<child> <child>
<object class="GtkSwitch" id="Dark_mode_switch"> <object class="GtkSwitch" id="Dark_mode_switch">
<property name="visible">True</property> <property name="visible">True</property>
@ -83,6 +99,18 @@
<property name="top_attach">1</property> <property name="top_attach">1</property>
</packing> </packing>
</child> </child>
<child>
<object class="GtkSwitch" id="Gradient_switch">
<property name="visible">True</property>
<property name="can_focus">True</property>
<property name="valign">start</property>
<property name="action_name">app.draw_gradient</property>
</object>
<packing>
<property name="left_attach">1</property>
<property name="top_attach">2</property>
</packing>
</child>
</object> </object>
<packing> <packing>
<property name="tab_expand">True</property> <property name="tab_expand">True</property>

View File

@ -153,7 +153,7 @@ class UberwriterWindow(Gtk.ApplicationWindow):
# Let them disable it # Let them disable it
if self.settings.get_value("gradient-overlay"): if self.settings.get_value("gradient-overlay"):
self.scrolled_window.connect_after("draw", self.draw_gradient) self.overlay = self.scrolled_window.connect_after("draw", self.draw_gradient)
self.smooth_scroll_starttime = 0 self.smooth_scroll_starttime = 0
self.smooth_scroll_endtime = 0 self.smooth_scroll_endtime = 0
@ -177,13 +177,13 @@ class UberwriterWindow(Gtk.ApplicationWindow):
# Init file name with None # Init file name with None
self.set_filename() self.set_filename()
self.style_provider = Gtk.CssProvider() # self.style_provider = Gtk.CssProvider()
self.style_provider.load_from_path(helpers.get_media_path('style.css')) # self.style_provider.load_from_path(helpers.get_media_path('arc_style.css'))
Gtk.StyleContext.add_provider_for_screen( # Gtk.StyleContext.add_provider_for_screen(
Gdk.Screen.get_default(), self.style_provider, # Gdk.Screen.get_default(), self.style_provider,
Gtk.STYLE_PROVIDER_PRIORITY_APPLICATION # Gtk.STYLE_PROVIDER_PRIORITY_APPLICATION
) # )
# Markup and Shortcuts for the TextBuffer # Markup and Shortcuts for the TextBuffer
self.markup_buffer = MarkupBuffer( self.markup_buffer = MarkupBuffer(
@ -715,8 +715,7 @@ class UberwriterWindow(Gtk.ApplicationWindow):
dialog.add_button(_("Close without Saving"), Gtk.ResponseType.NO) dialog.add_button(_("Close without Saving"), Gtk.ResponseType.NO)
dialog.add_button(_("Cancel"), Gtk.ResponseType.CANCEL) dialog.add_button(_("Cancel"), Gtk.ResponseType.CANCEL)
dialog.add_button(_("Save now"), Gtk.ResponseType.YES) dialog.add_button(_("Save now"), Gtk.ResponseType.YES)
dialog.set_title(_('Unsaved changes')) # dialog.set_default_size(200, 60)
dialog.set_default_size(200, 150)
dialog.set_default_response(Gtk.ResponseType.YES) dialog.set_default_response(Gtk.ResponseType.YES)
response = dialog.run() response = dialog.run()

View File

@ -20,6 +20,7 @@ from collections import namedtuple
from gettext import gettext as _ from gettext import gettext as _
from gi.repository import Gtk from gi.repository import Gtk
from uberwriter_lib.helpers import get_builder from uberwriter_lib.helpers import get_builder
from uberwriter_lib.helpers import get_descendant
from uberwriter_lib.AppWindow import Application as app from uberwriter_lib.AppWindow import Application as app
@ -45,11 +46,8 @@ class MainHeaderbar: #pylint: disable=too-few-public-methods
self.hb_container.show() self.hb_container.show()
self.btns = buttons(app) self.btns = buttons(app)
self.rec = self.btns.recent
pack_buttons(self.hb, self.btns) pack_buttons(self.hb, self.btns)
# btns.recent.set_popup(self.generate_recent_files_menu())
self.hb.show_all() self.hb.show_all()
@ -107,26 +105,39 @@ def buttons(app):
[NamedTupple] -- tupple of Gtk.Buttons [NamedTupple] -- tupple of Gtk.Buttons
""" """
builder_window_menu = get_builder('Menu') Button = namedtuple("Button", "new open_recent save search menu")
model = builder_window_menu.get_object("Menu")
recents_builder = get_builder('Recents')
recents = recents_builder.get_object("recent_md_popover")
recents_wd = recents_builder.get_object("recent_md_widget")
recents_wd.connect('item-activated', app.on_open_recent)
Button = namedtuple("Button", "new open recent save search menu")
btn = Button(Gtk.Button().new_with_label(_("New")), btn = Button(Gtk.Button().new_with_label(_("New")),
Gtk.Button().new_with_label(_("Open")), Gtk.Box().new(0, 0),
Gtk.MenuButton().new(),
Gtk.Button().new_with_label(_("Save")), Gtk.Button().new_with_label(_("Save")),
Gtk.Button().new_from_icon_name("system-search-symbolic", Gtk.Button().new_from_icon_name("system-search-symbolic",
Gtk.IconSize.BUTTON), Gtk.IconSize.BUTTON),
Gtk.MenuButton().new()) Gtk.MenuButton().new())
btn.recent.set_image(Gtk.Image.new_from_icon_name("go-down-symbolic", builder_window_menu = get_builder('Menu')
Gtk.IconSize.BUTTON)) model = builder_window_menu.get_object("Menu")
btn.recent.set_tooltip_text(_("Open Recent"))
btn.recent.set_popover(recents) 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.search.set_tooltip_text(_("Search and replace"))
btn.menu.set_tooltip_text(_("Menu")) btn.menu.set_tooltip_text(_("Menu"))
btn.menu.set_image(Gtk.Image.new_from_icon_name("open-menu-symbolic", btn.menu.set_image(Gtk.Image.new_from_icon_name("open-menu-symbolic",
@ -134,7 +145,6 @@ def buttons(app):
btn.menu.set_use_popover(True) btn.menu.set_use_popover(True)
btn.menu.set_menu_model(model) btn.menu.set_menu_model(model)
btn.new.set_action_name("app.new") btn.new.set_action_name("app.new")
btn.open.set_action_name("app.open")
btn.save.set_action_name("app.save") btn.save.set_action_name("app.save")
btn.search.set_action_name("app.search") btn.search.set_action_name("app.search")
@ -152,8 +162,7 @@ def pack_buttons(headerbar, btn, btn_exit=None):
""" """
headerbar.pack_start(btn.new) headerbar.pack_start(btn.new)
headerbar.pack_start(btn.open) headerbar.pack_start(btn.open_recent)
headerbar.pack_start(btn.recent)
if btn_exit: if btn_exit:
headerbar.pack_end(btn_exit) headerbar.pack_end(btn_exit)
headerbar.pack_end(btn.menu) headerbar.pack_end(btn.menu)

View File

@ -16,11 +16,12 @@ from gettext import gettext as _
import gi import gi
gi.require_version('Gtk', '3.0') # pylint: disable=wrong-import-position gi.require_version('Gtk', '3.0') # pylint: disable=wrong-import-position
from gi.repository import GLib, Gio, Gtk, GdkPixbuf from gi.repository import GLib, Gio, Gtk, Gdk, GdkPixbuf
from uberwriter import UberwriterWindow from uberwriter import UberwriterWindow
from uberwriter.Settings import Settings from uberwriter.Settings import Settings
from uberwriter_lib import set_up_logging from uberwriter_lib import set_up_logging
from uberwriter_lib import helpers
from uberwriter_lib.PreferencesDialog import PreferencesDialog from uberwriter_lib.PreferencesDialog import PreferencesDialog
from . helpers import get_builder, get_media_path from . helpers import get_builder, get_media_path
@ -36,9 +37,27 @@ class Application(Gtk.Application):
def init(self): def init(self):
"""Init main application""" """Init main application"""
# set theme variant (dark/light)
dark = self.settings.get_value("dark-mode") dark = self.settings.get_value("dark-mode")
Gtk.Settings.get_default().set_property("gtk-application-prefer-dark-theme", dark) Gtk.Settings.get_default().set_property("gtk-application-prefer-dark-theme", dark)
# set css for current theme
self.style_provider = Gtk.CssProvider()
themes = {
"Arc": "arc_style.css",
"Arc-Dark": "arc_style.css",
"Arc-Darker": "arc_style.css",
}
theme = Gtk.Settings.get_default().get_property("gtk-theme-name")
self.style_provider.load_from_path(helpers.get_media_path(themes.get(theme,"adwaita_style.css")))
Gtk.StyleContext.add_provider_for_screen(
Gdk.Screen.get_default(), self.style_provider,
Gtk.STYLE_PROVIDER_PRIORITY_APPLICATION
)
def do_startup(self, *args, **kwargs): def do_startup(self, *args, **kwargs):
@ -98,6 +117,13 @@ class Application(Gtk.Application):
action.connect("change-state", self.on_spellcheck) action.connect("change-state", self.on_spellcheck)
self.add_action(action) self.add_action(action)
set_gradient_overlay = self.settings.get_value("gradient-overlay")
action = Gio.SimpleAction.new_stateful("draw_gradient",
None,
GLib.Variant.new_boolean(set_gradient_overlay))
action.connect("change-state", self.on_draw_gradient)
self.add_action(action)
# Menu Actions # Menu Actions
action = Gio.SimpleAction.new("new", None) action = Gio.SimpleAction.new("new", None)
@ -235,6 +261,16 @@ class Application(Gtk.Application):
action.set_state(value) action.set_state(value)
self.window.toggle_spellcheck(value) self.window.toggle_spellcheck(value)
def on_draw_gradient(self, action, value):
action.set_state(value)
self.settings.set_value("gradient-overlay",
GLib.Variant("b", value))
if value:
self.window.overlay = self.window.scrolled_window.connect_after(
"draw", self.window.draw_gradient)
else:
self.window.scrolled_window.disconnect(self.window.overlay)
def on_new(self, _action, _value): def on_new(self, _action, _value):
self.window.new_document() self.window.new_document()

View File

@ -21,6 +21,8 @@ import logging
import os import os
import shutil import shutil
from gi.repository import Gtk
from . uberwriterconfig import get_data_file from . uberwriterconfig import get_data_file
from . Builder import Builder from . Builder import Builder
@ -152,3 +154,32 @@ def exist_executable(command):
""" """
return shutil.which(command) is not None return shutil.which(command) is not None
def get_descendant(widget, child_name, level, doPrint=False):
if widget is not None:
if doPrint: print("-"*level + str(Gtk.Buildable.get_name(widget)) +
" :: " + widget.get_name())
else:
if doPrint: print("-"*level + "None")
return None
#/*** If it is what we are looking for ***/
if Gtk.Buildable.get_name(widget) == child_name: # not widget.get_name() !
return widget
#/*** If this widget has one child only search its child ***/
if (hasattr(widget, 'get_child') and
callable(getattr(widget, 'get_child')) and
child_name != ""):
child = widget.get_child()
if child is not None:
return get_descendant(child, child_name, level+1,doPrint)
# /*** Ity might have many children, so search them ***/
elif (hasattr(widget, 'get_children') and
callable(getattr(widget, 'get_children')) and
child_name != ""):
children = widget.get_children()
# /*** For each child ***/
found = None
for child in children:
if child is not None:
found = get_descendant(child, child_name, level+1, doPrint) # //search the child
if found: return found