Add main page
All checks were successful
PikaOS Package Build & Release (amd64-v3) / build (push) Successful in 2m35s

This commit is contained in:
Ward from fusion-voyager-3 2024-11-04 00:43:57 +03:00
parent fce2150b6f
commit 97e2ed1dc6
10 changed files with 247 additions and 109 deletions

View File

@ -1 +1 @@
21 22

2
Cargo.lock generated
View File

@ -1793,7 +1793,7 @@ checksum = "e3148f5046208a5d56bcfc03053e3ca6334e51da8dfb19b6cdc8b306fae3283e"
[[package]] [[package]]
name = "pikman-update-manager" name = "pikman-update-manager"
version = "1.1.0" version = "1.1.1"
dependencies = [ dependencies = [
"async-channel", "async-channel",
"async-trait", "async-trait",

View File

@ -1,6 +1,6 @@
[package] [package]
name = "pikman-update-manager" name = "pikman-update-manager"
version = "1.1.0" version = "1.1.1"
edition = "2021" edition = "2021"
# See more keys and their definitions at https://doc.rust-lang.org/cargo/reference/manifest.html # See more keys and their definitions at https://doc.rust-lang.org/cargo/reference/manifest.html

7
debian/changelog vendored
View File

@ -1,3 +1,10 @@
pikman-update-manager (1.1.1-100pika1) pika; urgency=medium
* add main page
-- Pika <root@pika.com> Wed, 11 Jan 2023 11:41:38 +0000
pikman-update-manager (1.1.0-100pika2) pika; urgency=medium pikman-update-manager (1.1.0-100pika2) pika; urgency=medium
* initial release * initial release

View File

@ -169,5 +169,11 @@
"retry_interval_spinrow_title": "Automatic Check Interval", "retry_interval_spinrow_title": "Automatic Check Interval",
"retry_interval_spinrow_subtitle": "In Hours", "retry_interval_spinrow_subtitle": "In Hours",
"progress_bar_circle_center_text": "Percent %", "progress_bar_circle_center_text": "Percent %",
"main_update_page_title": "Main Updates Page" "main_update_page_title": "Main Updates Page",
"update_button_main_label": "Commit APT & Flatpak Upgrades",
"update_badge_box_total_label": "Total Updates",
"update_badge_box_apt_label": "APT Updates",
"update_badge_box_flatpak_label": "Flatpak Updates",
"main_page_header_label_yes_label": "Updates Available!",
"main_page_header_label_no_label": "Up-to-date!"
} }

View File

@ -2,7 +2,7 @@
set -e set -e
VERSION="1.1.0" VERSION="1.1.1"
source ./pika-build-config.sh source ./pika-build-config.sh

View File

@ -17,7 +17,7 @@ use std::rc::Rc;
use std::thread; use std::thread;
use tokio::runtime::Runtime; use tokio::runtime::Runtime;
use crate::build_ui::get_current_font; use crate::build_ui::{create_color_badge, get_current_font};
struct AptChangesInfo { struct AptChangesInfo {
package_count_upgrade: u64, package_count_upgrade: u64,
@ -689,95 +689,3 @@ fn apt_full_upgrade_from_socket(
} }
}); });
} }
fn create_color_badge(
label0_text: &str,
label1_text: &str,
css_style: &str,
theme_changed_action: &SimpleAction,
group_size: &SizeGroup,
group_size0: &SizeGroup,
group_size1: &SizeGroup,
) -> ListBox {
let badge_box = Box::builder().build();
let label0 = Label::builder()
.label(label0_text)
.margin_start(5)
.margin_end(5)
.margin_bottom(1)
.margin_top(1)
.valign(Align::Center)
.halign(Align::Center)
.hexpand(true)
.vexpand(true)
.build();
group_size0.add_widget(&label0);
let label_separator = Separator::builder().build();
let label1 = Label::builder()
.label(label1_text)
.margin_start(3)
.margin_end(0)
.margin_bottom(1)
.margin_top(1)
.valign(Align::Center)
.halign(Align::Center)
.hexpand(true)
.vexpand(true)
.build();
group_size1.add_widget(&label1);
label1.add_css_class(css_style);
#[allow(deprecated)]
let color = label1
.style_context()
.lookup_color("accent_bg_color")
.unwrap();
if (color.red() * 0.299 + color.green() * 0.587 + color.blue() * 0.114) > 170.0 {
label1.remove_css_class("white-color-text");
label1.add_css_class("black-color-text");
} else {
label1.remove_css_class("black-color-text");
label1.add_css_class("white-color-text");
}
theme_changed_action.connect_activate(clone!(
#[strong]
label1,
move |_, _| {
#[allow(deprecated)]
let color = label1
.style_context()
.lookup_color("accent_bg_color")
.unwrap();
if (color.red() * 0.299 + color.green() * 0.587 + color.blue() * 0.114) > 170.0 {
label1.remove_css_class("white-color-text");
label1.add_css_class("black-color-text");
} else {
label1.remove_css_class("black-color-text");
label1.add_css_class("white-color-text");
}
}
));
badge_box.append(&label0);
badge_box.append(&label_separator);
badge_box.append(&label1);
let boxedlist = ListBox::builder()
.selection_mode(SelectionMode::None)
.halign(Align::Center)
.margin_start(10)
.margin_end(10)
.margin_bottom(10)
.margin_top(10)
.build();
boxedlist.add_css_class("boxed-list");
boxedlist.append(&badge_box);
group_size.add_widget(&boxedlist);
boxedlist
}

View File

@ -584,6 +584,7 @@ pub fn build_ui(app: &Application) {
&apt_update_button, &apt_update_button,
&initiated_by_main, &initiated_by_main,
&theme_changed_action, &theme_changed_action,
&update_sys_tray,
), ),
Some("main_update_page"), Some("main_update_page"),
&t!("main_update_page_title"), &t!("main_update_page_title"),
@ -849,3 +850,95 @@ fn add_content_button(
)); ));
toggle_button toggle_button
} }
pub fn create_color_badge(
label0_text: &str,
label1_text: &str,
css_style: &str,
theme_changed_action: &gio::SimpleAction,
group_size: &gtk::SizeGroup,
group_size0: &gtk::SizeGroup,
group_size1: &gtk::SizeGroup,
) -> gtk::ListBox {
let badge_box = gtk::Box::builder().build();
let label0 = gtk::Label::builder()
.label(label0_text)
.margin_start(5)
.margin_end(5)
.margin_bottom(1)
.margin_top(1)
.valign(gtk::Align::Center)
.halign(gtk::Align::Center)
.hexpand(true)
.vexpand(true)
.build();
group_size0.add_widget(&label0);
let label_separator = gtk::Separator::builder().build();
let label1 = gtk::Label::builder()
.label(label1_text)
.margin_start(3)
.margin_end(0)
.margin_bottom(1)
.margin_top(1)
.valign(gtk::Align::Center)
.halign(gtk::Align::Center)
.hexpand(true)
.vexpand(true)
.build();
group_size1.add_widget(&label1);
label1.add_css_class(css_style);
#[allow(deprecated)]
let color = label1
.style_context()
.lookup_color("accent_bg_color")
.unwrap();
if (color.red() * 0.299 + color.green() * 0.587 + color.blue() * 0.114) > 170.0 {
label1.remove_css_class("white-color-text");
label1.add_css_class("black-color-text");
} else {
label1.remove_css_class("black-color-text");
label1.add_css_class("white-color-text");
}
theme_changed_action.connect_activate(clone!(
#[strong]
label1,
move |_, _| {
#[allow(deprecated)]
let color = label1
.style_context()
.lookup_color("accent_bg_color")
.unwrap();
if (color.red() * 0.299 + color.green() * 0.587 + color.blue() * 0.114) > 170.0 {
label1.remove_css_class("white-color-text");
label1.add_css_class("black-color-text");
} else {
label1.remove_css_class("black-color-text");
label1.add_css_class("white-color-text");
}
}
));
badge_box.append(&label0);
badge_box.append(&label_separator);
badge_box.append(&label1);
let boxedlist = gtk::ListBox::builder()
.selection_mode(gtk::SelectionMode::None)
.halign(gtk::Align::Center)
.margin_start(10)
.margin_end(10)
.margin_bottom(10)
.margin_top(10)
.build();
boxedlist.add_css_class("boxed-list");
boxedlist.append(&badge_box);
group_size.add_widget(&boxedlist);
boxedlist
}

View File

@ -1,14 +1,16 @@
use adw::gio::SimpleAction;
use adw::prelude::*; use adw::prelude::*;
use gtk::glib::*; use gtk::glib::*;
use gtk::*; use gtk::*;
use std::cell::RefCell; use std::cell::RefCell;
use std::rc::Rc; use std::rc::Rc;
use crate::build_ui::create_color_badge;
pub fn main_update_page( pub fn main_update_page(
apt_update_button: &Rc<RefCell<Button>>, apt_update_button: &Rc<RefCell<Button>>,
initiated_by_main: &Rc<RefCell<bool>>, initiated_by_main: &Rc<RefCell<bool>>,
theme_changed_action: &gio::SimpleAction, theme_changed_action: &gio::SimpleAction,
update_sys_tray: &gio::SimpleAction,
) -> gtk::Box { ) -> gtk::Box {
let main_box = Box::builder() let main_box = Box::builder()
.hexpand(true) .hexpand(true)
@ -16,23 +18,137 @@ pub fn main_update_page(
.orientation(Orientation::Vertical) .orientation(Orientation::Vertical)
.build(); .build();
let bottom_icon = gtk::Image::builder() let header_box = Box::builder()
.pixel_size(128)
.halign(Align::Center)
.hexpand(true) .hexpand(true)
.icon_name("tux-symbolic") .vexpand(true)
.margin_start(10) .halign(Align::Center)
.margin_end(10) .orientation(Orientation::Horizontal)
.margin_bottom(20) .build();
.margin_top(20)
let header_label = gtk::Label::builder()
.label(t!("main_page_header_label_no_label"))
.build();
header_label.add_css_class("size-35-bold-text");
let updater_icon = gtk::Image::builder()
.pixel_size(128)
.icon_name("update-none")
.margin_start(5)
.margin_end(5)
.margin_bottom(5)
.margin_top(5)
.build(); .build();
let update_badge_box = gtk::Box::builder() let update_badge_box = gtk::Box::builder()
.hexpand(true) .hexpand(true)
.vexpand(true) .vexpand(true)
.halign(Align::Center)
.valign(Align::Center)
.orientation(Orientation::Vertical) .orientation(Orientation::Vertical)
.build(); .build();
let update_badge_box_size_group = SizeGroup::new(SizeGroupMode::Both);
let update_badge_box_size_group0 = SizeGroup::new(SizeGroupMode::Both);
let update_badge_box_size_group1 = SizeGroup::new(SizeGroupMode::Both);
update_badge_box.append(&create_color_badge(
&t!("update_badge_box_total_label"),
&t!("pikman_indicator_flatpak_item_label_calculating"),
"background-accent-bg",
&theme_changed_action,
&update_badge_box_size_group,
&update_badge_box_size_group0,
&update_badge_box_size_group1,
));
//
update_badge_box.append(&create_color_badge(
&t!("update_badge_box_apt_label"),
&t!("pikman_indicator_flatpak_item_label_calculating"),
"background-accent-bg",
&theme_changed_action,
&update_badge_box_size_group,
&update_badge_box_size_group0,
&update_badge_box_size_group1,
));
//
update_badge_box.append(&create_color_badge(
&t!("update_badge_box_flatpak_label"),
&t!("pikman_indicator_flatpak_item_label_calculating"),
"background-accent-bg",
&theme_changed_action,
&update_badge_box_size_group,
&update_badge_box_size_group0,
&update_badge_box_size_group1,
));
update_sys_tray.connect_activate(clone!(
#[strong]
update_badge_box,
#[strong]
updater_icon,
#[strong]
header_label,
#[strong]
theme_changed_action,
move |_, param| {
let array: &[i32] = param.unwrap().fixed_array().unwrap();
let vec = array.to_vec();
let apt_update_count = vec[0];
let flatpak_update_count = vec[1];
let total_count = apt_update_count + flatpak_update_count;
if total_count > 1 {
updater_icon.set_icon_name(Some("update-high".into()));
header_label.set_label(&t!("main_page_header_label_yes_label"));
} else {
updater_icon.set_icon_name(Some("update-none".into()));
header_label.set_label(&t!("main_page_header_label_no_label"));
}
//
while let Some(widget) = update_badge_box.last_child() {
update_badge_box.remove(&widget);
}
//
update_badge_box.append(&create_color_badge(
&t!("update_badge_box_total_label"),
&match total_count {
-2 => t!("pikman_indicator_flatpak_item_label_calculating").into(),
_ => total_count.to_string(),
},
"background-accent-bg",
&theme_changed_action,
&update_badge_box_size_group,
&update_badge_box_size_group0,
&update_badge_box_size_group1,
));
//
update_badge_box.append(&create_color_badge(
&t!("update_badge_box_apt_label"),
&match apt_update_count {
-1 => t!("pikman_indicator_flatpak_item_label_calculating").into(),
_ => apt_update_count.to_string(),
},
"background-accent-bg",
&theme_changed_action,
&update_badge_box_size_group,
&update_badge_box_size_group0,
&update_badge_box_size_group1,
));
//
update_badge_box.append(&create_color_badge(
&t!("update_badge_box_flatpak_label"),
&match flatpak_update_count {
-1 => t!("pikman_indicator_flatpak_item_label_calculating").into(),
_ => flatpak_update_count.to_string(),
},
"background-accent-bg",
&theme_changed_action,
&update_badge_box_size_group,
&update_badge_box_size_group0,
&update_badge_box_size_group1,
));
}
));
let bottom_bar = Box::builder().valign(Align::End).build(); let bottom_bar = Box::builder().valign(Align::End).build();
let update_button = Button::builder() let update_button = Button::builder()
@ -42,7 +158,7 @@ pub fn main_update_page(
.margin_start(10) .margin_start(10)
.margin_end(30) .margin_end(30)
.margin_bottom(15) .margin_bottom(15)
.label(t!("update_button_label")) .label(t!("update_button_main_label"))
.build(); .build();
update_button.add_css_class("destructive-action"); update_button.add_css_class("destructive-action");
@ -59,8 +175,11 @@ pub fn main_update_page(
bottom_bar.append(&update_button); bottom_bar.append(&update_button);
header_box.append(&updater_icon);
header_box.append(&header_label);
main_box.append(&header_box);
main_box.append(&update_badge_box); main_box.append(&update_badge_box);
main_box.append(&bottom_icon);
main_box.append(&bottom_bar); main_box.append(&bottom_bar);
main_box main_box

View File

@ -96,6 +96,11 @@
font-size: 20px; font-size: 20px;
} }
.size-35-bold-text {
font-weight: 800;
font-size: 35px;
}
.disable-outline { .disable-outline {
outline: none; outline: none;
} }