Commit 4964f481 authored by Roman Alifanov's avatar Roman Alifanov

rewrite to NavigstionView

parent 3aea104e
...@@ -50,7 +50,9 @@ func (su *SystemUpdater) onActivate() { ...@@ -50,7 +50,9 @@ func (su *SystemUpdater) onActivate() {
upds := apm.NewUpdatesSources(conn, obj) upds := apm.NewUpdatesSources(conn, obj)
window := GetSystemUpdaterWindow(su.AppGTK) window := GetSystemUpdaterWindow()
window.SetApplication(su.AppGTK)
for _, us := range upds { for _, us := range upds {
window.FillWithChanges(su, us) window.FillWithChanges(su, us)
...@@ -63,28 +65,26 @@ func (su *SystemUpdater) onActivate() { ...@@ -63,28 +65,26 @@ func (su *SystemUpdater) onActivate() {
var SystemUpdaterWindowUIXML string var SystemUpdaterWindowUIXML string
type SystemUpdaterWindow struct { type SystemUpdaterWindow struct {
win *adw.ApplicationWindow *adw.ApplicationWindow
navView *adw.NavigationView navView *adw.NavigationView
listbox *gtk.ListBox listbox *gtk.ListBox
} }
var mainWin *SystemUpdaterWindow var mainWin *SystemUpdaterWindow
func GetSystemUpdaterWindow(app *gtk.Application) *SystemUpdaterWindow { func GetSystemUpdaterWindow() *SystemUpdaterWindow {
if mainWin == nil { if mainWin == nil {
builder := bldr.New(SystemUpdaterWindowUIXML) builder := bldr.New(SystemUpdaterWindowUIXML)
win := bldr.GetObject[*adw.ApplicationWindow](builder, "main_window") win := bldr.GetObject[*adw.ApplicationWindow](builder, "main_window")
win.SetApplication(app)
navView := bldr.GetObject[*adw.NavigationView](builder, "navigationv") navView := bldr.GetObject[*adw.NavigationView](builder, "navigationv")
listbox := bldr.GetObject[*gtk.ListBox](builder, "updates_listbox") listbox := bldr.GetObject[*gtk.ListBox](builder, "updates_listbox")
mainWin = &SystemUpdaterWindow{ mainWin = &SystemUpdaterWindow{
win: win, win,
navView: navView, navView,
listbox: listbox, listbox,
} }
} }
return mainWin return mainWin
...@@ -94,10 +94,6 @@ func (sw *SystemUpdaterWindow) FillWithChanges(su *SystemUpdater, us apm.Updater ...@@ -94,10 +94,6 @@ func (sw *SystemUpdaterWindow) FillWithChanges(su *SystemUpdater, us apm.Updater
sw.listbox.Append(NewUpdateRow("System packages", us.GetPackageChanges())) sw.listbox.Append(NewUpdateRow("System packages", us.GetPackageChanges()))
} }
func (sw *SystemUpdaterWindow) Present() {
sw.win.Present()
}
func SystemUpdaterApplication(su *SystemUpdater) { func SystemUpdaterApplication(su *SystemUpdater) {
su.App.ConnectActivate(func() { su.App.ConnectActivate(func() {
su.onActivate() su.onActivate()
......
...@@ -2,8 +2,12 @@ package main ...@@ -2,8 +2,12 @@ package main
import ( import (
"SystemUpdater/lib/apm" "SystemUpdater/lib/apm"
bldr "SystemUpdater/lib/gtks/builder"
_ "embed"
"github.com/diamondburned/gotk4-adwaita/pkg/adw" "github.com/diamondburned/gotk4-adwaita/pkg/adw"
"github.com/diamondburned/gotk4/pkg/gtk/v4"
) )
func NewPackageRow(item string, ver string) *adw.ActionRow { func NewPackageRow(item string, ver string) *adw.ActionRow {
...@@ -13,9 +17,37 @@ func NewPackageRow(item string, ver string) *adw.ActionRow { ...@@ -13,9 +17,37 @@ func NewPackageRow(item string, ver string) *adw.ActionRow {
return row return row
} }
func NewUpdateRow(name string, info apm.PackageChanges) *adw.ExpanderRow { //go:embed listpage.ui
exrow := adw.NewExpanderRow() var SystemUpdaterListPageUIXML string
exrow.SetTitle(name)
type SystemUpdaterListPage struct {
nav *adw.NavigationPage
listbox *gtk.ListBox
applyButton *adw.ButtonRow
}
func NewListPage() *SystemUpdaterListPage {
builder := bldr.New(SystemUpdaterListPageUIXML)
page := bldr.GetObject[*adw.NavigationPage](builder, "listpage")
listbox := bldr.GetObject[*gtk.ListBox](builder, "updates_listbox")
applyButton := bldr.GetObject[*adw.ButtonRow](builder, "apply_button")
return &SystemUpdaterListPage{page, listbox, applyButton}
}
func NewUpdateRow(name string, info apm.PackageChanges) *adw.ActionRow {
win := GetSystemUpdaterWindow()
urow := adw.NewActionRow()
urow.SetTitle(name)
urow.SetActivatable(true)
upage := NewListPage()
urow.ConnectActivated(func() {
win.navView.Push(upage.nav)
})
for title, pkgs := range map[string][]string{ for title, pkgs := range map[string][]string{
"Upgraded Packages": info.UpgradedPackages, "Upgraded Packages": info.UpgradedPackages,
...@@ -26,16 +58,23 @@ func NewUpdateRow(name string, info apm.PackageChanges) *adw.ExpanderRow { ...@@ -26,16 +58,23 @@ func NewUpdateRow(name string, info apm.PackageChanges) *adw.ExpanderRow {
continue continue
} }
row := adw.NewExpanderRow() row := adw.NewActionRow()
row.SetTitle(title) row.SetTitle(title)
row.SetActivatable(true)
page := NewListPage()
row.ConnectActivated(func() {
win.navView.Push(page.nav)
})
for _, p := range pkgs { for _, p := range pkgs {
ar := adw.NewActionRow() ar := adw.NewActionRow()
ar.SetTitle(p) ar.SetTitle(p)
row.AddRow(ar) page.listbox.Append(ar)
} }
exrow.AddRow(row) upage.listbox.Append(row)
} }
return exrow return urow
} }
...@@ -3,12 +3,14 @@ ...@@ -3,12 +3,14 @@
<cambalache-project version="0.94.0" target_tk="gtk-4.0"> <cambalache-project version="0.94.0" target_tk="gtk-4.0">
<ui> <ui>
(1,None,"window.ui","window.ui",None,None,None,None,"ximper-system-updater",None,None), (1,None,"window.ui","window.ui",None,None,None,None,"ximper-system-updater",None,None),
(2,None,None,"listpage.ui",None,None,None,None,"ximper-system-updater",None,None) (2,None,None,"listpage.ui",None,None,None,None,"ximper-system-updater",None,None),
(5,None,"process-page.ui","process-page.ui",None,None,None,None,None,None,None)
</ui> </ui>
<ui_library> <ui_library>
(1,"gio","2.0",None), (1,"gio","2.0",None),
(1,"gtk","4.0",None), (1,"gtk","4.0",None),
(1,"libadwaita","1.6",None) (1,"libadwaita","1.6",None),
(5,"gtk","4.0",None)
</ui_library> </ui_library>
<object> <object>
(1,1,"AdwApplicationWindow","main_window",None,None,None,None,0,None,None), (1,1,"AdwApplicationWindow","main_window",None,None,None,None,0,None,None),
...@@ -58,7 +60,24 @@ ...@@ -58,7 +60,24 @@
(2,18,"GtkListBox",None,17,None,None,None,0,None,None), (2,18,"GtkListBox",None,17,None,None,None,0,None,None),
(2,19,"AdwButtonRow","apply_button",18,None,None,None,0,None,None), (2,19,"AdwButtonRow","apply_button",18,None,None,None,0,None,None),
(2,23,"AdwHeaderBar","header_bar",2,None,"top",None,1,None,None), (2,23,"AdwHeaderBar","header_bar",2,None,"top",None,1,None,None),
(2,24,"GtkButton",None,23,None,"end",None,0,None,None) (2,24,"GtkButton",None,23,None,"end",None,0,None,None),
(5,1,"AdwToolbarView","main_view",18,None,None,None,0,None,None),
(5,2,"AdwHeaderBar",None,1,None,"top",None,0,None,None),
(5,3,"AdwWindowTitle","window_title",2,None,None,None,0,None,None),
(5,4,"GtkScrolledWindow",None,1,None,None,None,1,None,None),
(5,5,"GtkStack","process_stack",4,None,None,None,0,None,None),
(5,6,"GtkStackPage",None,5,None,None,None,0,None,None),
(5,7,"AdwStatusPage","status_page",6,None,None,None,0,None,None),
(5,8,"AdwClamp",None,7,None,None,None,0,None,None),
(5,9,"GtkBox",None,8,None,None,None,0,None,None),
(5,10,"GtkListBox",None,9,None,None,None,0,None,None),
(5,11,"AdwExpanderRow",None,10,None,None,None,0,None,None),
(5,12,"GtkScrolledWindow",None,11,None,None,None,0,None,None),
(5,13,"GtkTextView","log_view",12,None,None,None,0,None,None),
(5,15,"GtkStackPage",None,5,None,None,None,1,None,None),
(5,16,"AdwStatusPage",None,15,None,None,None,0,None,None),
(5,17,"GtkButton","restart_button",16,None,None,None,0,None,None),
(5,18,"AdwNavigationPage","process_page",None,None,None,None,0,None,None)
</object> </object>
<object_property> <object_property>
(1,1,"GtkWidget","height-request","294",0,None,None,None,None,None,None,None,None), (1,1,"GtkWidget","height-request","294",0,None,None,None,None,None,None,None,None),
...@@ -134,7 +153,34 @@ ...@@ -134,7 +153,34 @@
(2,17,"GtkWidget","margin-start","12",0,None,None,None,None,None,None,None,None), (2,17,"GtkWidget","margin-start","12",0,None,None,None,None,None,None,None,None),
(2,19,"AdwPreferencesRow","title","Update",1,None,None,None,None,None,None,None,None), (2,19,"AdwPreferencesRow","title","Update",1,None,None,None,None,None,None,None,None),
(2,24,"GtkActionable","action-name","app.about",0,None,None,None,None,None,None,None,None), (2,24,"GtkActionable","action-name","app.about",0,None,None,None,None,None,None,None,None),
(2,24,"GtkButton","icon-name","help-about-symbolic",0,None,None,None,None,None,None,None,None) (2,24,"GtkButton","icon-name","help-about-symbolic",0,None,None,None,None,None,None,None,None),
(5,1,"AdwToolbarView","content",None,0,None,None,None,4,None,None,None,None),
(5,2,"AdwHeaderBar","title-widget",None,0,None,None,None,3,None,None,None,None),
(5,3,"AdwWindowTitle","title","Updating",1,None,None,None,None,None,None,None,None),
(5,4,"GtkScrolledWindow","hscrollbar-policy","never",0,None,None,None,None,None,None,None,None),
(5,4,"GtkScrolledWindow","propagate-natural-height","true",0,None,None,None,None,None,None,None,None),
(5,6,"GtkStackPage","child",None,0,None,None,None,7,None,None,None,None),
(5,6,"GtkStackPage","name","default",0,None,None,None,None,None,None,None,None),
(5,7,"AdwStatusPage","title","The update process is underway...",1,None,None,None,None,None,None,None,None),
(5,8,"AdwClamp","maximum-size","500",0,None,None,None,None,None,None,None,None),
(5,9,"GtkBox","spacing","12",0,None,None,None,None,None,None,None,None),
(5,9,"GtkOrientable","orientation","vertical",0,None,None,None,None,None,None,None,None),
(5,10,"GtkListBox","selection-mode","none",0,None,None,None,None,None,None,None,None),
(5,11,"AdwPreferencesRow","title","Show more information",1,None,None,None,None,None,None,None,None),
(5,12,"GtkScrolledWindow","hscrollbar-policy","never",0,None,None,None,None,None,None,None,None),
(5,12,"GtkScrolledWindow","propagate-natural-height","true",0,None,None,None,None,None,None,None,None),
(5,12,"GtkWidget","height-request","300",0,None,None,None,None,None,None,None,None),
(5,13,"GtkTextView","cursor-visible","false",0,None,None,None,None,None,None,None,None),
(5,13,"GtkTextView","editable","false",0,None,None,None,None,None,None,None,None),
(5,13,"GtkTextView","wrap-mode","word-char",0,None,None,None,None,None,None,None,None),
(5,15,"GtkStackPage","child",None,0,None,None,None,16,None,None,None,None),
(5,15,"GtkStackPage","name","finish",0,None,None,None,None,None,None,None,None),
(5,16,"AdwStatusPage","description","Click on button below to restart device",1,None,None,None,None,None,None,None,None),
(5,16,"AdwStatusPage","icon-name","face-smile-big-symbolic",0,None,None,None,None,None,None,None,None),
(5,16,"AdwStatusPage","title","Updating complete!",1,None,None,None,None,None,None,None,None),
(5,17,"GtkButton","label","Reboot",1,None,None,None,None,None,None,None,None),
(5,17,"GtkWidget","halign","center",0,None,None,None,None,None,None,None,None),
(5,17,"GtkWidget","hexpand","false",0,None,None,None,None,None,None,None,None)
</object_property> </object_property>
<object_data> <object_data>
(1,12,"GtkStringList",1,1,None,None,None,None,None,None), (1,12,"GtkStringList",1,1,None,None,None,None,None,None),
...@@ -162,7 +208,12 @@ ...@@ -162,7 +208,12 @@
(2,19,"GtkWidget",2,2,None,1,None,None,None,None), (2,19,"GtkWidget",2,2,None,1,None,None,None,None),
(2,19,"GtkWidget",1,1,None,None,None,None,None,None), (2,19,"GtkWidget",1,1,None,None,None,None,None,None),
(2,18,"GtkWidget",2,2,None,1,None,None,None,None), (2,18,"GtkWidget",2,2,None,1,None,None,None,None),
(2,18,"GtkWidget",1,1,None,None,None,None,None,None) (2,18,"GtkWidget",1,1,None,None,None,None,None,None),
(5,10,"GtkWidget",1,1,None,None,None,None,None,None),
(5,10,"GtkWidget",2,2,None,1,None,None,None,None),
(5,17,"GtkWidget",1,1,None,None,None,None,None,None),
(5,17,"GtkWidget",2,2,None,1,None,None,None,None),
(5,17,"GtkWidget",2,3,None,1,None,None,None,None)
</object_data> </object_data>
<object_data_arg> <object_data_arg>
(1,9,"GtkWidget",2,2,"name","linked"), (1,9,"GtkWidget",2,2,"name","linked"),
...@@ -172,6 +223,9 @@ ...@@ -172,6 +223,9 @@
(2,9,"GtkWidget",2,2,"name","linked"), (2,9,"GtkWidget",2,2,"name","linked"),
(2,15,"GtkWidget",2,2,"name","boxed-list-separate"), (2,15,"GtkWidget",2,2,"name","boxed-list-separate"),
(2,19,"GtkWidget",2,2,"name","suggested-action"), (2,19,"GtkWidget",2,2,"name","suggested-action"),
(2,18,"GtkWidget",2,2,"name","boxed-list") (2,18,"GtkWidget",2,2,"name","boxed-list"),
(5,10,"GtkWidget",2,2,"name","boxed-list"),
(5,17,"GtkWidget",2,2,"name","pill"),
(5,17,"GtkWidget",2,3,"name","suggested-action")
</object_data_arg> </object_data_arg>
</cambalache-project> </cambalache-project>
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment