mirror of
https://github.com/morgan9e/warehouse
synced 2026-04-14 00:04:08 +09:00
More work on snapshots page
This commit is contained in:
@@ -22,6 +22,7 @@ blueprints = custom_target('blueprints',
|
||||
'snapshot_page/snapshot_page.blp',
|
||||
'snapshot_page/snapshots_list_page.blp',
|
||||
'snapshot_page/snapshot_box.blp',
|
||||
'snapshot_page/new_snapshot_dialog.blp',
|
||||
'install_page/install_page.blp',
|
||||
'install_page/result_row.blp',
|
||||
'install_page/select_page.blp',
|
||||
@@ -88,6 +89,7 @@ warehouse_sources = [
|
||||
'snapshot_page/snapshot_page.py',
|
||||
'snapshot_page/snapshots_list_page.py',
|
||||
'snapshot_page/snapshot_box.py',
|
||||
'snapshot_page/new_snapshot_dialog.py',
|
||||
'install_page/install_page.py',
|
||||
'install_page/result_row.py',
|
||||
'install_page/select_page.py',
|
||||
|
||||
72
src/snapshot_page/new_snapshot_dialog.blp
Normal file
72
src/snapshot_page/new_snapshot_dialog.blp
Normal file
@@ -0,0 +1,72 @@
|
||||
using Gtk 4.0;
|
||||
using Adw 1;
|
||||
|
||||
template $NewSnapshotDialog : Adw.Dialog {
|
||||
follows-content-size: true;
|
||||
width-request: 400;
|
||||
Adw.NavigationView nav_view {
|
||||
Adw.NavigationPage app_list_page {
|
||||
title: _("Choose Applications");
|
||||
Adw.ToolbarView {
|
||||
[top]
|
||||
Adw.HeaderBar {
|
||||
show-start-title-buttons: false;
|
||||
show-end-title-buttons: false;
|
||||
[start]
|
||||
Button list_cancel_button {
|
||||
label: _("Cancel");
|
||||
}
|
||||
[start]
|
||||
ToggleButton search_button {
|
||||
icon-name: "loupe-large-symbolic";
|
||||
tooltip-text: _("Search Apps");
|
||||
}
|
||||
[end]
|
||||
Button next_button {
|
||||
// sensitive: false;
|
||||
label: _("Next");
|
||||
styles ["suggested-action"]
|
||||
}
|
||||
}
|
||||
[top]
|
||||
SearchBar search_bar {
|
||||
search-mode-enabled: bind search_button.active bidirectional;
|
||||
key-capture-widget: template;
|
||||
SearchEntry search_entry {
|
||||
hexpand: true;
|
||||
placeholder-text: _("Search Apps");
|
||||
}
|
||||
}
|
||||
ScrolledWindow {
|
||||
propagate-natural-height: true;
|
||||
propagate-natural-width: true;
|
||||
ListBox listbox {
|
||||
valign: start;
|
||||
margin-start: 12;
|
||||
margin-bottom: 12;
|
||||
margin-top: 12;
|
||||
margin-end: 12;
|
||||
selection-mode: none;
|
||||
styles ["boxed-list"]
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
Adw.NavigationPage details_page {
|
||||
title: _("New Snapshot");
|
||||
Adw.ToolbarView {
|
||||
[top]
|
||||
Adw.HeaderBar {
|
||||
show-start-title-buttons: false;
|
||||
show-end-title-buttons: false;
|
||||
[end]
|
||||
Button create_button {
|
||||
// sensitive: false;
|
||||
label: _("Snapshot");
|
||||
styles ["suggested-action"]
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
64
src/snapshot_page/new_snapshot_dialog.py
Normal file
64
src/snapshot_page/new_snapshot_dialog.py
Normal file
@@ -0,0 +1,64 @@
|
||||
from gi.repository import Adw, Gtk, GLib, Gio
|
||||
from .host_info import HostInfo
|
||||
from .error_toast import ErrorToast
|
||||
from .loading_status import LoadingStatus
|
||||
from .app_row import AppRow
|
||||
import subprocess, os
|
||||
|
||||
@Gtk.Template(resource_path="/io/github/flattool/Warehouse/snapshot_page/new_snapshot_dialog.ui")
|
||||
class NewSnapshotDialog(Adw.Dialog):
|
||||
__gtype_name__ = "NewSnapshotDialog"
|
||||
gtc = Gtk.Template.Child
|
||||
|
||||
nav_view = gtc()
|
||||
|
||||
app_list_page = gtc()
|
||||
list_cancel_button = gtc()
|
||||
next_button = gtc()
|
||||
listbox = gtc()
|
||||
|
||||
details_page = gtc()
|
||||
create_button = gtc()
|
||||
|
||||
def row_gesture_handler(self, row):
|
||||
row.check_button.set_active(not row.check_button.get_active())
|
||||
|
||||
def row_select_handler(self, row):
|
||||
if row.check_button.get_active():
|
||||
self.selected_rows.append(row)
|
||||
else:
|
||||
self.selected_rows.remove(row)
|
||||
|
||||
if (total := len(self.selected_rows)) > 0:
|
||||
self.app_list_page.set_title(_("{} Selected").format(total))
|
||||
else:
|
||||
self.app_list_page.set_title(_("Choose Applications"))
|
||||
|
||||
def generate_list(self, *args):
|
||||
for package in HostInfo.flatpaks:
|
||||
if package.is_runtime or not os.path.exists(package.data_path):
|
||||
continue
|
||||
row = AppRow(package, self.row_gesture_handler)
|
||||
row.check_button.set_visible(True)
|
||||
row.check_button.connect("toggled", lambda *_, row=row: self.row_select_handler(row))
|
||||
row.set_activatable(True)
|
||||
row.set_activatable_widget(row.check_button)
|
||||
GLib.idle_add(lambda *_, row=row: self.listbox.append(row))
|
||||
|
||||
def sort_func(self, row1, row2):
|
||||
return row1.get_title().lower() > row2.get_title().lower()
|
||||
|
||||
def __init__(self, **kwargs):
|
||||
super().__init__(**kwargs)
|
||||
|
||||
# Extra Object Creations
|
||||
self.rows = []
|
||||
self.selected_rows = []
|
||||
|
||||
# Connections
|
||||
self.list_cancel_button.connect("clicked", lambda *_: self.close())
|
||||
self.next_button.connect("clicked", lambda *_: self.nav_view.push(self.details_page))
|
||||
|
||||
# Apply
|
||||
Gio.Task.new(None, None, None).run_in_thread(self.generate_list)
|
||||
self.listbox.set_sort_func(self.sort_func)
|
||||
@@ -5,6 +5,7 @@ from .app_row import AppRow
|
||||
from .snapshots_list_page import SnapshotsListPage
|
||||
from .sidebar_button import SidebarButton
|
||||
from .loading_status import LoadingStatus
|
||||
from .new_snapshot_dialog import NewSnapshotDialog
|
||||
import os, subprocess
|
||||
|
||||
class LeftoverSnapshotRow(Adw.ActionRow):
|
||||
@@ -184,6 +185,7 @@ class SnapshotPage(Adw.BreakpointBin):
|
||||
self.leftover_listbox.connect("row-activated", self.leftover_select_handler)
|
||||
self.open_button.connect("clicked", self.open_snapshots_folder, self.toast_overlay)
|
||||
self.status_open_button.connect("clicked", self.open_snapshots_folder, self.no_snapshots_toast)
|
||||
self.new_button.connect("clicked", lambda *_: NewSnapshotDialog().present(HostInfo.main_window))
|
||||
|
||||
# Apply
|
||||
self.loading_view.set_content(LoadingStatus(_("Loading Snapshots"), _("This should only take a moment")))
|
||||
|
||||
@@ -20,6 +20,7 @@
|
||||
<file preprocess="xml-stripblanks">snapshot_page/snapshot_page.ui</file>
|
||||
<file preprocess="xml-stripblanks">snapshot_page/snapshots_list_page.ui</file>
|
||||
<file preprocess="xml-stripblanks">snapshot_page/snapshot_box.ui</file>
|
||||
<file preprocess="xml-stripblanks">snapshot_page/new_snapshot_dialog.ui</file>
|
||||
<file preprocess="xml-stripblanks">install_page/install_page.ui</file>
|
||||
<file preprocess="xml-stripblanks">install_page/result_row.ui</file>
|
||||
<file preprocess="xml-stripblanks">install_page/select_page.ui</file>
|
||||
|
||||
Reference in New Issue
Block a user