Start triple pane UI and packages list

This commit is contained in:
heliguy
2024-07-04 19:12:26 -04:00
parent b5e50b0255
commit f595d3cec4
10 changed files with 201 additions and 70 deletions

View File

@@ -41,7 +41,7 @@ class Flatpak:
)
except GLib.GError as e:
print(e)
icon_path = None
self.icon_path = None
class Remote:
@@ -79,6 +79,7 @@ class HostInfo:
lines = output.strip().split("\n")
for i in lines:
this.flatpaks.append(Flatpak(i.split("\t")))
this.flatpaks = sorted(this.flatpaks, key=lambda flatpak: flatpak.info["name"].lower())
Gio.Task.new(None, None, callback).run_in_thread(thread)

View File

@@ -26,6 +26,7 @@ gi.require_version("Gtk", "4.0")
gi.require_version("Adw", "1")
from gi.repository import Gtk, Gio, Adw, GLib
from .host_info import HostInfo
from .window import WarehouseWindow
from .const import Config

View File

@@ -2,75 +2,92 @@ using Gtk 4.0;
using Adw 1;
template $WarehouseWindow: Adw.ApplicationWindow {
title: "Warehouse";
content:
Adw.OverlaySplitView {
sidebar:
Adw.ToolbarView main_toolbar_view {
[top]
Adw.HeaderBar header_bar {
[end]
MenuButton main_menu {
icon-name: "open-menu-symbolic";
tooltip-text: _("Main Menu");
menu-model: primary_menu;
}
}
title: "Warehouse";
Adw.Breakpoint main_breakpoint {
condition ("max-width: 865")
setters {
main_split.collapsed: true;
main_split.max-sidebar-width: 280;
}
;
content:
Adw.NavigationPage {
title: "Test";
Adw.ToolbarView {
[top]
Adw.HeaderBar {}
}
}
;
}
;
content:
Adw.OverlaySplitView main_split {
sidebar-width-fraction: 0.2;
max-sidebar-width: 999999999;
sidebar:
Adw.NavigationPage {
title: "Warehouse";
Adw.ToolbarView main_toolbar_view {
[top]
Adw.HeaderBar header_bar {
[start]
Button sidebar_button {
label: "SB";
}
[end]
MenuButton main_menu {
icon-name: "open-menu-symbolic";
tooltip-text: _("Main Menu");
menu-model: primary_menu;
}
}
content:
ScrolledWindow {
ListBox {
Adw.ActionRow {
title: "test";
}
}
}
;
}
}
;
}
;
}
menu primary_menu {
section {
item {
label: _("Manage Leftover Data…");
action: "app.manage-data-folders";
}
section {
item {
label: _("Manage Leftover Data…");
action: "app.manage-data-folders";
}
/*item {
label: _("_Preferences");
action: "app.preferences";
}*/
item {
label: _("Manage Remotes…");
action: "app.show-remotes-window";
}
}
section {
item {
label: _("Install From File…");
action: "app.install-from-file";
/*item {
label: _("_Preferences");
action: "app.preferences";
}*/
item {
label: _("Manage Remotes…");
action: "app.show-remotes-window";
}
}
section {
item {
label: _("Install From File…");
action: "app.install-from-file";
}
item {
label: _("Install From The Web…");
action: "app.open-search-install";
}
}
section {
item {
label: _("Refresh List");
action: "app.refresh-list";
}
item {
label: _("_Keyboard Shortcuts");
action: "win.show-help-overlay";
item {
label: _("Install From The Web…");
action: "app.open-search-install";
}
}
section {
item {
label: _("Refresh List");
action: "app.refresh-list";
}
item {
label: _("_Keyboard Shortcuts");
action: "win.show-help-overlay";
}
item {
label: _("_About Warehouse");
action: "app.about";
item {
label: _("_About Warehouse");
action: "app.about";
}
}
}
}

View File

@@ -23,12 +23,16 @@ import re
import time
from gi.repository import Adw, Gdk, Gio, GLib, Gtk
from .host_info import HostInfo
from .packages_page import PackagesPage
from .const import Config
@Gtk.Template(resource_path="/io/github/flattool/Warehouse/main_window/window.ui")
class WarehouseWindow(Adw.ApplicationWindow):
__gtype_name__ = "WarehouseWindow"
gtc = Gtk.Template.Child
main_breakpoint = gtc()
main_split = gtc()
sidebar_button = gtc()
def key_handler(self, controller, keyval, keycode, state):
if keyval == Gdk.KEY_w and state == Gdk.ModifierType.CONTROL_MASK:
@@ -61,11 +65,8 @@ class WarehouseWindow(Adw.ApplicationWindow):
# file_drop.connect("drop", self.drop_callback)
# self.scrolled_window.add_controller(file_drop)
self.main_split.set_content(PackagesPage(self))
self.sidebar_button.connect("clicked", lambda *_: self.main_split.set_show_sidebar(False))
if Config.DEVEL:
self.add_css_class("devel")
def guh(*args):
for i in HostInfo.flatpaks:
print(i.info["name"])
HostInfo.get_flatpaks()
self.add_css_class("devel")

View File

@@ -4,8 +4,10 @@ gnome = import('gnome')
blueprints = custom_target('blueprints',
input: files(
'widgets/app_row.blp',
'gtk/help-overlay.blp',
'main_window/window.blp',
'packages_page/packages_page.blp'
),
output: '.',
command: [find_program('blueprint-compiler'), 'batch-compile', '@OUTPUT@', '@CURRENT_SOURCE_DIR@', '@INPUT@'],
@@ -47,8 +49,10 @@ configure_file(
warehouse_sources = [
'__init__.py',
'main.py',
'main_window/window.py',
'host_info.py',
'widgets/app_row.py',
'main_window/window.py',
'packages_page/packages_page.py',
'../data/style.css',
]

View File

@@ -0,0 +1,43 @@
using Gtk 4.0;
using Adw 1;
template $PackagesPage : Adw.BreakpointBin {
width-request: 1;
height-request: 1;
Adw.Breakpoint packages_bpt {
condition ("max-width: 625")
}
Adw.NavigationSplitView {
sidebar-width-fraction: 0.4;
max-sidebar-width: 999999999;
sidebar:
Adw.NavigationPage {
title: "Packages";
Adw.ToolbarView {
[top]
Adw.HeaderBar {
[start]
Button sidebar_button {
label: "SB";
}
}
ScrolledWindow {
ListBox packages_list_box {
styles ["navigation-sidebar"]
}
}
}
}
;
content:
Adw.NavigationPage {
title: "Properties";
Adw.StatusPage {
title: "Properties Panel";
}
}
;
}
}

View File

@@ -0,0 +1,31 @@
from gi.repository import Adw, Gtk, GLib, Gio, Pango
from .host_info import HostInfo
from .app_row import AppRow
@Gtk.Template(resource_path="/io/github/flattool/Warehouse/packages_page/packages_page.ui")
class PackagesPage(Adw.BreakpointBin):
__gtype_name__ = 'PackagesPage'
gtc = Gtk.Template.Child
packages_list_box = gtc()
sidebar_button = gtc()
package_rows = []
def generate_list(self, *args):
for package in HostInfo.flatpaks:
self.packages_list_box.append(AppRow(package))
def row_select_handler(self, list_box, row):
print(row.get_title())
def sidebar_button_visibility_handler(self):
self.sidebar_button.set_visible(self.main_window.main_split.get_collapsed() or not self.main_window.main_split.get_show_sidebar())
def __init__(self, main_window, **kwargs):
super().__init__(**kwargs)
self.main_window = main_window
HostInfo.get_flatpaks(self.generate_list)
self.sidebar_button.connect("clicked", lambda *_: main_window.main_split.set_show_sidebar(True))
main_window.main_split.connect("notify::show-sidebar", lambda sidebar, *_: self.sidebar_button.set_visible(sidebar.get_collapsed() or not sidebar.get_show_sidebar()))
main_window.main_split.connect("notify::collapsed", lambda sidebar, *_: self.sidebar_button.set_visible)
# self.packages_list_box.connect("row-selected", self.row_select_handler)

View File

@@ -2,7 +2,9 @@
<gresources>
<gresource prefix="/io/github/flattool/Warehouse">
<file>../data/style.css</file>
<file preprocess="xml-stripblanks">widgets/app_row.ui</file>
<file preprocess="xml-stripblanks">main_window/window.ui</file>
<file preprocess="xml-stripblanks">packages_page/packages_page.ui</file>
<file preprocess="xml-stripblanks">gtk/help-overlay.ui</file>
<!-- <file preprocess="xml-stripblanks">../data/io.github.flattool.Warehouse.metainfo.xml.in</file> -->
</gresource>

15
src/widgets/app_row.blp Normal file
View File

@@ -0,0 +1,15 @@
using Gtk 4.0;
using Adw 1;
template $AppRow : Adw.ActionRow {
[prefix]
Image image {
icon-size: large;
icon-name: "application-x-executable-symbolic";
}
[suffix]
CheckButton check_button {
styles["selection-mode"]
visible: false;
}
}

16
src/widgets/app_row.py Normal file
View File

@@ -0,0 +1,16 @@
from gi.repository import Adw, Gtk, GLib, Gio, Pango
from .host_info import HostInfo
@Gtk.Template(resource_path="/io/github/flattool/Warehouse/widgets/app_row.ui")
class AppRow(Adw.ActionRow):
__gtype_name__ = 'AppRow'
gtc = Gtk.Template.Child
image = gtc()
def __init__(self, package, **kwargs):
super().__init__(**kwargs)
self.package = package
self.set_title(package.info["name"])
self.set_subtitle(package.info["id"])
if package.icon_path:
self.image.set_from_file(package.icon_path)