Skip to content

Commit

Permalink
Locator behaviour improvement (#30)
Browse files Browse the repository at this point in the history
* Update TOC visibility and results filtering rules

* Improve locator style and behaviour
  • Loading branch information
mepowerleo10 authored Feb 16, 2024
1 parent 162e5f6 commit 3f4cee4
Show file tree
Hide file tree
Showing 8 changed files with 72 additions and 29 deletions.
2 changes: 1 addition & 1 deletion docoloco/registry.py
Original file line number Diff line number Diff line change
Expand Up @@ -25,7 +25,7 @@ def search(self, term: str):
if ":" in term:
provider_id, term = term.split(":", 1)
provider = self.providers.get(provider_id)
results = provider.query(term)
results = provider.query(term.strip())
else:
results = Gio.ListStore(item_type=SearchResult)
for _, provider in self.providers.items():
Expand Down
17 changes: 10 additions & 7 deletions docoloco/ui/styles/style.css
Original file line number Diff line number Diff line change
@@ -1,15 +1,18 @@
.result-line {
padding: 4px;
border-radius: 4px;
border-color: red;
}

.search-box {
padding-left: 0;
background-color: #302E32FF;
background-color: @view_bg_color;
border-radius: 6px;
}

.locator-entry image.left {
margin-right: 8px;
}

.results-view {
border-radius: 4px;
}

.results-view row {
border-radius: 4px;
padding: 8px;
}
1 change: 1 addition & 0 deletions docoloco/ui/templates/locator.ui
Original file line number Diff line number Diff line change
Expand Up @@ -60,6 +60,7 @@
<property name="width-request">450</property>
<child>
<object class="GtkListView" id="results_view">
<property name="css-classes">results-view</property>
<property name="enable-rubberband">True</property>
<property name="hexpand">True</property>
<property name="hexpand-set">True</property>
Expand Down
6 changes: 6 additions & 0 deletions docoloco/ui/templates/main.ui
Original file line number Diff line number Diff line change
Expand Up @@ -21,6 +21,12 @@
</property>
<child type="start">
<object class="GtkBox">
<child>
<object class="GtkButton" id="toggle_side_pane_btn">
<property name="action-name">win.toggle_sidepane</property>
<property name="icon-name">panel-left-symbolic</property>
</object>
</child>
<child>
<object class="GtkButton">
<property name="action-name">win.go_back</property>
Expand Down
8 changes: 6 additions & 2 deletions docoloco/ui/templates/widgets.cmb
Original file line number Diff line number Diff line change
Expand Up @@ -43,8 +43,8 @@
(5,4,"AdwHeaderBar","header_bar",3,None,None,None,None,None),
(5,5,"GtkEntry","search_entry",4,None,None,None,None,None),
(5,6,"GtkBox",None,4,None,"start",None,None,None),
(5,7,"GtkButton",None,6,None,None,None,None,None),
(5,8,"GtkButton",None,6,None,None,None,1,None),
(5,7,"GtkButton",None,6,None,None,None,1,None),
(5,8,"GtkButton",None,6,None,None,None,2,None),
(5,9,"GtkMenuButton","primary_menu_btn",4,None,"end",None,1,None),
(5,10,"GtkButton",None,4,None,"end",None,2,None),
(5,11,"GtkButton",None,4,None,"end",None,3,None),
Expand All @@ -54,6 +54,7 @@
(5,15,"(section)",None,14,None,None,None,1,None),
(5,16,"(item)",None,15,None,None,None,1,None),
(5,17,"(item)",None,15,None,None,None,None,None),
(5,18,"GtkButton","toggle_side_pane_btn",6,None,None,None,None,None),
(6,1,"GtkPopover","popover",None,None,None,None,None,None),
(6,4,"AdwBin","Locator",None,None,None,None,None,None),
(6,5,"GtkBox","search_box",4,None,None,None,None,None),
Expand Down Expand Up @@ -141,6 +142,8 @@
(5,16,"(item)","label","About",None,None,None,None,None,None,None,None,None),
(5,17,"(item)","action","app.settings",None,None,None,None,None,None,None,None,None),
(5,17,"(item)","label","Settings",None,None,None,None,None,None,None,None,None),
(5,18,"GtkActionable","action-name","win.toggle_sidepane",None,None,None,None,None,None,None,None,None),
(5,18,"GtkButton","icon-name","panel-left-symbolic",None,None,None,None,None,None,None,None,None),
(6,1,"GtkPopover","has-arrow","False",None,None,None,None,None,None,None,None,None),
(6,1,"GtkWidget","height-request","300",None,None,None,None,None,None,None,None,None),
(6,1,"GtkWidget","margin-top","-18",None,None,None,None,None,None,None,None,None),
Expand Down Expand Up @@ -176,6 +179,7 @@
(6,26,"GtkListView","enable-rubberband","True",None,None,None,None,None,None,None,None,None),
(6,26,"GtkListView","show-separators","True",None,None,None,None,None,None,None,None,None),
(6,26,"GtkListView","single-click-activate","True",None,None,None,None,None,None,None,None,None),
(6,26,"GtkWidget","css-classes","results-view",None,None,None,None,None,None,None,None,None),
(6,26,"GtkWidget","hexpand","True",None,None,None,None,None,None,None,None,None),
(6,26,"GtkWidget","hexpand-set","True",None,None,None,None,None,None,None,None,None),
(6,26,"GtkWidget","vexpand","True",None,None,None,None,None,None,None,None,None),
Expand Down
27 changes: 16 additions & 11 deletions docoloco/widgets/doc_page.py
Original file line number Diff line number Diff line change
Expand Up @@ -39,7 +39,7 @@ class DocPage(Adw.Bin):
)
zoom_step = 0.1
content_page = None
symbols_frame = None
symbols_frame = Gtk.Frame()

def __init__(self, docset: DocSet = None, uri: str = None):
super().__init__(hexpand=True, vexpand=True)
Expand Down Expand Up @@ -88,6 +88,7 @@ def __init__(self, docset: DocSet = None, uri: str = None):

def _create_symbols_sections(self):
if not self.docset or len(self.docset.sections) == 0:
self.symbols_frame.set_visible(False)
return

sections_list_store = Gio.ListStore(item_type=Section)
Expand All @@ -109,13 +110,11 @@ def _create_symbols_sections(self):
scrolled_window.set_child(sections_tree)
scrolled_window.set_vexpand(True)

symbols_frame = Gtk.Frame()
symbols_frame.set_label("Symbols")
symbols_frame.set_child(scrolled_window)
add_symmetric_margins(symbols_frame, vertical=4, horizontal=4)
self.paned.set_start_child(symbols_frame)

self.symbols_frame = symbols_frame
self.symbols_frame.set_label("Symbols")
self.symbols_frame.set_child(scrolled_window)
self.symbols_frame.set_visible(True)
add_symmetric_margins(self.symbols_frame, vertical=4, horizontal=4)
self.paned.set_start_child(self.symbols_frame)

def _setup_sections(self, factory, obj: GObject.Object):
list_item = cast(Gtk.ListItem, obj)
Expand Down Expand Up @@ -227,6 +226,10 @@ def on_load_changed(self, web_view, event):
self.progress_bar.set_visible(False)

self.related_docs.remove_all()

if not self.docset:
return

for doc in self.docset.related_docs_of(web_view.get_uri()):
self.related_docs.append(doc)

Expand Down Expand Up @@ -340,6 +343,10 @@ def go_back(self, *args):
def can_go_forward(self) -> bool:
return self.web_view.can_go_forward() if self.web_view else False

@GObject.Property(type=bool, default=False)
def has_docset(self) -> bool:
return self.locator.docset is not None

def go_forward(self, *args):
return self.web_view.go_forward()

Expand Down Expand Up @@ -368,9 +375,7 @@ def docset(self) -> DocSet:
def docset(self, docset: DocSet):
self.locator.docset = docset
self.load_uri(docset.index_file_path.as_uri())

if not self.symbols_frame:
self._create_symbols_sections()
self._create_symbols_sections()

if isinstance(self.get_child(), NewPage):
self.set_child(self.content_page)
9 changes: 6 additions & 3 deletions docoloco/widgets/locator.py
Original file line number Diff line number Diff line change
Expand Up @@ -53,7 +53,7 @@ def __init__(self):
self.popover.set_parent(self.search_btn)

self.clear_docset_btn.connect(
"clicked", lambda *_: self.clear_filters(all=True)
"clicked", lambda *_: self.activate_action("win.clear_filters", GLib.Variant.new_boolean(True))
)

def setup_search_result(self, factory, obj: GObject.Object):
Expand All @@ -73,7 +73,6 @@ def setup_search_result(self, factory, obj: GObject.Object):
arrow = Gtk.Image()
arrow.set_from_icon_name("go-next-symbolic")
box.append(arrow)
box.add_css_class("result-line")
list_item.set_child(box)

def bind_search_result(self, factory, obj: GObject.Object):
Expand Down Expand Up @@ -147,6 +146,7 @@ def docset(self, docset: DocSet):
self.docset_btn.set_visible(False)
self.section_btn.set_visible(False)
self.clear_docset_btn.set_visible(False)
self.search_changed()

@property
def section(self) -> Section:
Expand All @@ -163,10 +163,13 @@ def section(self, section: Section):
def toggle_focus(self, entry_filter_text: str = None):
self.popover.set_visible(True)

if entry_filter_text:
if isinstance(entry_filter_text, str) and len(entry_filter_text) > 0:
self.entry.set_text(entry_filter_text)
self.entry.set_position(len(entry_filter_text))

self.search_changed()
self.entry.grab_focus()

def on_search_result_items_changed(self, *args):
model_has_items = self.search_result_model.get_n_items() > 0
self.results_scrolled_win.set_visible(model_has_items)
Expand Down
31 changes: 26 additions & 5 deletions docoloco/widgets/main_window.py
Original file line number Diff line number Diff line change
Expand Up @@ -23,6 +23,7 @@ class MainWindow(Adw.ApplicationWindow):
go_forward_action: Gio.SimpleAction

primary_menu_btn = cast(Gtk.MenuButton, Gtk.Template.Child("primary_menu_btn"))
toggle_side_pane_btn = cast(Gtk.Button, Gtk.Template.Child())

def __init__(self, app: Adw.Application):
super().__init__(application=app, title="DocoLoco")
Expand Down Expand Up @@ -77,8 +78,20 @@ def setup_actions(self):
"<primary>F",
None,
),
("focus_locator", self.focus_locator, "s", "<primary>P", f"({GLib.Variant.new_string('')})"),
("clear_filters", self.clear_filters, None, "<Alt>BackSpace", None),
(
"focus_locator",
self.focus_locator,
"s",
"<primary>P",
f"({GLib.Variant.new_string('')})",
),
(
"clear_filters",
self.clear_filters,
"b",
"<Alt>BackSpace",
f"({GLib.Variant.new_boolean(False)})",
),
("zoom_in", self.zoom_in, None, "<primary>equal", None),
("zoom_out", self.zoom_out, None, "<primary>minus", None),
("reset_zoom", self.reset_zoom, None, "<primary>plus", None),
Expand All @@ -87,6 +100,7 @@ def setup_actions(self):
("change_docset", self.change_docset, "(ssi)", None, None),
("change_section", self.change_section, "s", None, None),
("open_in_new_tab", self.open_in_new_tab, "(sss)", None, None),
("toggle_sidepane", self.toggle_sidepane, None, "<primary>H", None),
("filter_docset", self.filter_docset, "s", None, None),
("close_tab", self.close_tab, None, "<primary>W", None),
("go_back", self.go_back, None, "<Alt>Left", None),
Expand Down Expand Up @@ -161,12 +175,12 @@ def change_section(self, _, name_variant):
name = name_variant.get_string()
self.selected_doc_page.locator.change_section(name)

def focus_locator(self, _, initial_text_variant = None):
def focus_locator(self, _, initial_text_variant=None):
self.selected_doc_page.locator.toggle_focus(initial_text_variant.get_string())

def clear_filters(self, *_):
def clear_filters(self, _, all_variant):
if self.selected_doc_page.locator.popover.get_focus_child():
self.selected_doc_page.locator.clear_filters()
self.selected_doc_page.locator.clear_filters(all_variant.get_boolean())

def zoom_in(self, *args):
self.selected_doc_page.zoom_in()
Expand Down Expand Up @@ -228,6 +242,13 @@ def open_in_new_tab(self, action, parameters):
)
self.activate_action("win.open_page", GLib.Variant.new_string(url))

def toggle_sidepane(self, *_):
if not self.selected_doc_page.has_docset:
return

split_view = cast(Adw.OverlaySplitView, self.selected_doc_page.get_child())
split_view.set_collapsed(not split_view.get_collapsed())

def close_tab(self, action, *parameters):
self.tab_view.close_page(
self.tab_view.get_selected_page(),
Expand Down

0 comments on commit 3f4cee4

Please sign in to comment.