mirror of
https://github.com/morgan9e/warehouse
synced 2026-04-15 00:34:42 +09:00
Start triple pane UI and packages list
This commit is contained in:
@@ -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)
|
||||
|
||||
|
||||
@@ -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
|
||||
|
||||
|
||||
@@ -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";
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -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")
|
||||
@@ -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',
|
||||
]
|
||||
|
||||
|
||||
43
src/packages_page/packages_page.blp
Normal file
43
src/packages_page/packages_page.blp
Normal 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";
|
||||
}
|
||||
}
|
||||
;
|
||||
}
|
||||
}
|
||||
31
src/packages_page/packages_page.py
Normal file
31
src/packages_page/packages_page.py
Normal 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)
|
||||
@@ -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
15
src/widgets/app_row.blp
Normal 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
16
src/widgets/app_row.py
Normal 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)
|
||||
Reference in New Issue
Block a user