mirror of
https://github.com/YGGverse/Yoda.git
synced 2026-04-01 09:05:27 +00:00
reorganize widget modules
This commit is contained in:
parent
b9b226cc54
commit
4903968309
47 changed files with 352 additions and 786 deletions
|
|
@ -1,26 +1,29 @@
|
|||
mod subject;
|
||||
mod tray;
|
||||
mod widget;
|
||||
|
||||
use std::sync::Arc;
|
||||
use gtk::HeaderBar;
|
||||
use subject::Subject;
|
||||
use tray::Tray;
|
||||
|
||||
pub struct Header {
|
||||
widget: widget::Header,
|
||||
widget: HeaderBar,
|
||||
}
|
||||
|
||||
impl Header {
|
||||
// Construct
|
||||
pub fn new() -> Arc<Header> {
|
||||
Arc::new(Self {
|
||||
widget: widget::Header::new(
|
||||
tray::Tray::new().widget().gtk(),
|
||||
subject::Subject::new().widget().gtk(),
|
||||
),
|
||||
})
|
||||
pub fn new() -> Header {
|
||||
let tray = Tray::new();
|
||||
let subject = Subject::new();
|
||||
|
||||
let widget = HeaderBar::builder().build();
|
||||
widget.pack_start(tray.widget());
|
||||
widget.set_title_widget(Some(subject.widget()));
|
||||
|
||||
Self { widget }
|
||||
}
|
||||
|
||||
// Getters
|
||||
pub fn widget(&self) -> &widget::Header {
|
||||
pub fn widget(&self) -> &HeaderBar {
|
||||
&self.widget
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -1,28 +1,30 @@
|
|||
mod widget;
|
||||
use gtk::prelude::WidgetExt;
|
||||
use gtk::{pango::EllipsizeMode, Label};
|
||||
|
||||
pub struct Description {
|
||||
widget: widget::Description,
|
||||
widget: Label,
|
||||
}
|
||||
|
||||
impl Description {
|
||||
// Construct
|
||||
pub fn new() -> Description {
|
||||
Self {
|
||||
widget: widget::Description::new(),
|
||||
}
|
||||
let widget = Label::builder()
|
||||
.css_classes(["subtitle"])
|
||||
.single_line_mode(true)
|
||||
.ellipsize(EllipsizeMode::End)
|
||||
.visible(false)
|
||||
.build();
|
||||
|
||||
Self { widget }
|
||||
}
|
||||
|
||||
// Actions
|
||||
pub fn set_text(&self, text: &str) {
|
||||
self.widget.gtk().set_text(text);
|
||||
}
|
||||
|
||||
pub fn update(&self) {
|
||||
self.widget.update();
|
||||
self.widget.set_visible(self.widget.text().is_empty());
|
||||
}
|
||||
|
||||
// Getters
|
||||
pub fn widget(&self) -> &widget::Description {
|
||||
pub fn widget(&self) -> &Label {
|
||||
&self.widget
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -1,29 +0,0 @@
|
|||
use gtk::prelude::WidgetExt;
|
||||
|
||||
pub struct Description {
|
||||
gtk: gtk::Label,
|
||||
}
|
||||
|
||||
impl Description {
|
||||
// Construct
|
||||
pub fn new() -> Description {
|
||||
let gtk = gtk::Label::builder()
|
||||
.css_classes(["subtitle"])
|
||||
.single_line_mode(true)
|
||||
.ellipsize(gtk::pango::EllipsizeMode::End)
|
||||
.visible(false)
|
||||
.build();
|
||||
|
||||
Self { gtk }
|
||||
}
|
||||
|
||||
// Actions
|
||||
pub fn update(&self) {
|
||||
self.gtk.set_visible(self.gtk.text().is_empty());
|
||||
}
|
||||
|
||||
// Getters
|
||||
pub fn gtk(&self) -> >k::Label {
|
||||
&self.gtk
|
||||
}
|
||||
}
|
||||
|
|
@ -1,24 +1,34 @@
|
|||
mod description;
|
||||
mod title;
|
||||
mod widget;
|
||||
|
||||
use description::Description;
|
||||
use gtk::prelude::BoxExt;
|
||||
use gtk::{Align, Box, Orientation};
|
||||
use title::Title;
|
||||
|
||||
pub struct Subject {
|
||||
widget: widget::Subject,
|
||||
widget: Box,
|
||||
}
|
||||
|
||||
impl Subject {
|
||||
// Construct
|
||||
pub fn new() -> Subject {
|
||||
Self {
|
||||
widget: widget::Subject::new(
|
||||
title::Title::new().widget().gtk(),
|
||||
description::Description::new().widget().gtk(),
|
||||
),
|
||||
}
|
||||
let title = Title::new();
|
||||
let description = Description::new();
|
||||
|
||||
let widget = Box::builder()
|
||||
.orientation(Orientation::Vertical)
|
||||
.valign(Align::Center)
|
||||
.build();
|
||||
|
||||
widget.append(title.widget());
|
||||
widget.append(description.widget());
|
||||
|
||||
Self { widget }
|
||||
}
|
||||
|
||||
// Getters
|
||||
pub fn widget(&self) -> &widget::Subject {
|
||||
pub fn widget(&self) -> &Box {
|
||||
&self.widget
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -1,24 +1,36 @@
|
|||
mod widget;
|
||||
use gtk::{pango::EllipsizeMode, Label};
|
||||
|
||||
const DEFAULT_TEXT: &str = "Yoda"; // @TODO
|
||||
|
||||
pub struct Title {
|
||||
widget: widget::Title,
|
||||
widget: Label,
|
||||
}
|
||||
|
||||
impl Title {
|
||||
// Construct
|
||||
pub fn new() -> Title {
|
||||
Self {
|
||||
widget: widget::Title::new(),
|
||||
}
|
||||
let widget = gtk::Label::builder()
|
||||
.css_classes(["title"])
|
||||
.single_line_mode(true)
|
||||
.ellipsize(EllipsizeMode::End)
|
||||
.label(DEFAULT_TEXT)
|
||||
.build();
|
||||
|
||||
Self { widget }
|
||||
}
|
||||
|
||||
// Actions
|
||||
pub fn update(&self, text: &str) {
|
||||
self.widget.update(text);
|
||||
if text.is_empty() {
|
||||
self.widget.set_text(DEFAULT_TEXT);
|
||||
} else {
|
||||
self.widget
|
||||
.set_text(&format!("{} - {}", text, DEFAULT_TEXT));
|
||||
}
|
||||
}
|
||||
|
||||
// Getters
|
||||
pub fn widget(&self) -> &widget::Title {
|
||||
pub fn widget(&self) -> &Label {
|
||||
&self.widget
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -1,33 +0,0 @@
|
|||
const DEFAULT_TEXT: &str = "Yoda";
|
||||
|
||||
pub struct Title {
|
||||
gtk: gtk::Label,
|
||||
}
|
||||
|
||||
impl Title {
|
||||
// Construct
|
||||
pub fn new() -> Title {
|
||||
let gtk = gtk::Label::builder()
|
||||
.css_classes(["title"])
|
||||
.single_line_mode(true)
|
||||
.ellipsize(gtk::pango::EllipsizeMode::End)
|
||||
.label(DEFAULT_TEXT)
|
||||
.build();
|
||||
|
||||
Self { gtk }
|
||||
}
|
||||
|
||||
// Actions
|
||||
pub fn update(&self, text: &str) {
|
||||
if text.is_empty() {
|
||||
self.gtk.set_text(DEFAULT_TEXT);
|
||||
} else {
|
||||
self.gtk.set_text(&format!("{} - {}", text, DEFAULT_TEXT));
|
||||
}
|
||||
}
|
||||
|
||||
// Getters
|
||||
pub fn gtk(&self) -> >k::Label {
|
||||
&self.gtk
|
||||
}
|
||||
}
|
||||
|
|
@ -1,23 +0,0 @@
|
|||
use gtk::prelude::BoxExt;
|
||||
|
||||
pub struct Subject {
|
||||
gtk: gtk::Box,
|
||||
}
|
||||
|
||||
impl Subject {
|
||||
pub fn new(title: >k::Label, description: >k::Label) -> Subject {
|
||||
let gtk = gtk::Box::builder()
|
||||
.orientation(gtk::Orientation::Vertical)
|
||||
.valign(gtk::Align::Center)
|
||||
.build();
|
||||
|
||||
gtk.append(title);
|
||||
gtk.append(description);
|
||||
|
||||
Self { gtk }
|
||||
}
|
||||
|
||||
pub fn gtk(&self) -> >k::Box {
|
||||
&self.gtk
|
||||
}
|
||||
}
|
||||
|
|
@ -1,19 +1,36 @@
|
|||
mod model;
|
||||
mod widget;
|
||||
use gtk::{gio, MenuButton};
|
||||
|
||||
pub struct Menu {
|
||||
widget: widget::Menu,
|
||||
widget: MenuButton,
|
||||
}
|
||||
|
||||
impl Menu {
|
||||
pub fn new() -> Menu {
|
||||
Self {
|
||||
widget: widget::Menu::new(model::Menu::new().model()),
|
||||
}
|
||||
// Init model
|
||||
let model_tab = gio::Menu::new();
|
||||
model_tab.append(Some("New"), Some("win.tab_append"));
|
||||
model_tab.append(Some("Pin"), Some("win.tab_pin"));
|
||||
|
||||
let model_tab_close = gio::Menu::new();
|
||||
model_tab_close.append(Some("Current"), Some("win.tab_close"));
|
||||
model_tab_close.append(Some("All"), Some("win.tab_close_all"));
|
||||
model_tab.append_submenu(Some("Close"), &model_tab_close);
|
||||
|
||||
let model = gio::Menu::new();
|
||||
model.append_submenu(Some("Tab"), &model_tab);
|
||||
model.append(Some("Debug"), Some("win.debug"));
|
||||
model.append(Some("Quit"), Some("win.quit"));
|
||||
|
||||
// Init widget
|
||||
let widget = MenuButton::builder().tooltip_text("Menu").build();
|
||||
widget.set_menu_model(Some(&model));
|
||||
|
||||
// Result
|
||||
Self { widget }
|
||||
}
|
||||
|
||||
// Getters
|
||||
pub fn widget(&self) -> &widget::Menu {
|
||||
pub fn widget(&self) -> &MenuButton {
|
||||
&self.widget
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -1,31 +0,0 @@
|
|||
use gtk::gio;
|
||||
|
||||
pub struct Menu {
|
||||
model: gio::Menu,
|
||||
}
|
||||
|
||||
impl Menu {
|
||||
// Construct
|
||||
pub fn new() -> Menu {
|
||||
let model_tab = gio::Menu::new();
|
||||
model_tab.append(Some("New"), Some("win.tab_append"));
|
||||
model_tab.append(Some("Pin"), Some("win.tab_pin"));
|
||||
|
||||
let model_tab_close = gio::Menu::new();
|
||||
model_tab_close.append(Some("Current"), Some("win.tab_close"));
|
||||
model_tab_close.append(Some("All"), Some("win.tab_close_all"));
|
||||
model_tab.append_submenu(Some("Close"), &model_tab_close);
|
||||
|
||||
let model = gio::Menu::new();
|
||||
model.append_submenu(Some("Tab"), &model_tab);
|
||||
model.append(Some("Debug"), Some("win.debug"));
|
||||
model.append(Some("Quit"), Some("win.quit"));
|
||||
|
||||
Self { model }
|
||||
}
|
||||
|
||||
// Getters
|
||||
pub fn model(&self) -> &gio::Menu {
|
||||
&self.model
|
||||
}
|
||||
}
|
||||
|
|
@ -1,21 +0,0 @@
|
|||
use gtk::gio;
|
||||
|
||||
pub struct Menu {
|
||||
gtk: gtk::MenuButton,
|
||||
}
|
||||
|
||||
impl Menu {
|
||||
// Construct
|
||||
pub fn new(model: &gio::Menu) -> Menu {
|
||||
let gtk = gtk::MenuButton::builder().tooltip_text("Menu").build();
|
||||
|
||||
gtk.set_menu_model(Some(model));
|
||||
|
||||
Self { gtk }
|
||||
}
|
||||
|
||||
// Getters
|
||||
pub fn gtk(&self) -> >k::MenuButton {
|
||||
&self.gtk
|
||||
}
|
||||
}
|
||||
|
|
@ -1,23 +1,33 @@
|
|||
mod menu;
|
||||
mod tab;
|
||||
mod widget;
|
||||
|
||||
use gtk::prelude::BoxExt;
|
||||
use gtk::{Box, Orientation};
|
||||
use menu::Menu;
|
||||
use tab::Tab;
|
||||
|
||||
pub struct Tray {
|
||||
widget: widget::Tray,
|
||||
widget: Box,
|
||||
}
|
||||
|
||||
impl Tray {
|
||||
pub fn new() -> Tray {
|
||||
Self {
|
||||
widget: widget::Tray::new(
|
||||
menu::Menu::new().widget().gtk(),
|
||||
tab::Tab::new().widget().gtk(),
|
||||
),
|
||||
}
|
||||
let menu = Menu::new();
|
||||
let tab = Tab::new();
|
||||
|
||||
let widget = Box::builder()
|
||||
.orientation(Orientation::Horizontal)
|
||||
.spacing(8)
|
||||
.build();
|
||||
|
||||
widget.append(menu.widget());
|
||||
widget.append(tab.widget());
|
||||
|
||||
Self { widget }
|
||||
}
|
||||
|
||||
// Getters
|
||||
pub fn widget(&self) -> &widget::Tray {
|
||||
pub fn widget(&self) -> &Box {
|
||||
&self.widget
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -1,19 +1,23 @@
|
|||
mod widget;
|
||||
use gtk::Button;
|
||||
|
||||
pub struct Tab {
|
||||
pub widget: widget::Tab,
|
||||
pub widget: Button,
|
||||
}
|
||||
|
||||
impl Tab {
|
||||
// Construct
|
||||
pub fn new() -> Tab {
|
||||
Self {
|
||||
widget: widget::Tab::new(),
|
||||
widget: Button::builder()
|
||||
.action_name("win.tab_append")
|
||||
.icon_name("tab-new-symbolic")
|
||||
.tooltip_text("New tab")
|
||||
.build(),
|
||||
}
|
||||
}
|
||||
|
||||
// Getters
|
||||
pub fn widget(&self) -> &widget::Tab {
|
||||
pub fn widget(&self) -> &Button {
|
||||
&self.widget
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -1,21 +0,0 @@
|
|||
pub struct Tab {
|
||||
gtk: gtk::Button,
|
||||
}
|
||||
|
||||
impl Tab {
|
||||
// Construct
|
||||
pub fn new() -> Tab {
|
||||
Self {
|
||||
gtk: gtk::Button::builder()
|
||||
.action_name("win.tab_append")
|
||||
.icon_name("tab-new-symbolic")
|
||||
.tooltip_text("New tab")
|
||||
.build(),
|
||||
}
|
||||
}
|
||||
|
||||
// Getters
|
||||
pub fn gtk(&self) -> >k::Button {
|
||||
&self.gtk
|
||||
}
|
||||
}
|
||||
|
|
@ -1,25 +0,0 @@
|
|||
use gtk::prelude::BoxExt;
|
||||
|
||||
pub struct Tray {
|
||||
gtk: gtk::Box,
|
||||
}
|
||||
|
||||
impl Tray {
|
||||
// Construct
|
||||
pub fn new(menu: >k::MenuButton, tab: >k::Button) -> Tray {
|
||||
let gtk = gtk::Box::builder()
|
||||
.orientation(gtk::Orientation::Horizontal)
|
||||
.spacing(8)
|
||||
.build();
|
||||
|
||||
gtk.append(menu);
|
||||
gtk.append(tab);
|
||||
|
||||
Self { gtk }
|
||||
}
|
||||
|
||||
// Getters
|
||||
pub fn gtk(&self) -> >k::Box {
|
||||
&self.gtk
|
||||
}
|
||||
}
|
||||
|
|
@ -1,18 +0,0 @@
|
|||
pub struct Header {
|
||||
gtk: gtk::HeaderBar,
|
||||
}
|
||||
|
||||
impl Header {
|
||||
pub fn new(tray: >k::Box, subject: >k::Box) -> Header {
|
||||
let gtk = gtk::HeaderBar::builder().build();
|
||||
|
||||
gtk.pack_start(tray);
|
||||
gtk.set_title_widget(Some(subject));
|
||||
|
||||
Self { gtk }
|
||||
}
|
||||
|
||||
pub fn gtk(&self) -> >k::HeaderBar {
|
||||
&self.gtk
|
||||
}
|
||||
}
|
||||
Loading…
Add table
Add a link
Reference in a new issue