mirror of
https://github.com/YGGverse/Yoda.git
synced 2025-02-05 16:04:15 +00:00
draft limit notification badge
This commit is contained in:
parent
edef963287
commit
88aeab91be
@ -280,7 +280,7 @@ impl Page {
|
|||||||
let description = gformat!("{placeholder}");
|
let description = gformat!("{placeholder}");
|
||||||
|
|
||||||
// Show input request
|
// Show input request
|
||||||
input.show(Some(&description));
|
input.show(Some(&description), Some(&1024));
|
||||||
|
|
||||||
// Update meta
|
// Update meta
|
||||||
meta.borrow_mut().status = Some(status);
|
meta.borrow_mut().status = Some(status);
|
||||||
|
@ -26,8 +26,8 @@ impl Input {
|
|||||||
}
|
}
|
||||||
|
|
||||||
// Actions
|
// Actions
|
||||||
pub fn show(&self, title: Option<&str>) {
|
pub fn show(&self, title: Option<&str>, limit: Option<&i32>) {
|
||||||
self.content.set(title);
|
self.content.update(title, limit);
|
||||||
self.widget.show(true);
|
self.widget.show(true);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -1,10 +1,10 @@
|
|||||||
|
mod control;
|
||||||
mod response;
|
mod response;
|
||||||
mod send;
|
|
||||||
mod title;
|
mod title;
|
||||||
mod widget;
|
mod widget;
|
||||||
|
|
||||||
|
use control::Control;
|
||||||
use response::Response;
|
use response::Response;
|
||||||
use send::Send;
|
|
||||||
use title::Title;
|
use title::Title;
|
||||||
use widget::Widget;
|
use widget::Widget;
|
||||||
|
|
||||||
@ -12,8 +12,9 @@ use gtk::Box;
|
|||||||
use std::sync::Arc;
|
use std::sync::Arc;
|
||||||
|
|
||||||
pub struct Content {
|
pub struct Content {
|
||||||
title: Arc<Title>,
|
control: Arc<Control>,
|
||||||
response: Arc<Response>,
|
response: Arc<Response>,
|
||||||
|
title: Arc<Title>,
|
||||||
widget: Arc<Widget>,
|
widget: Arc<Widget>,
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -21,29 +22,26 @@ impl Content {
|
|||||||
// Construct
|
// Construct
|
||||||
pub fn new_arc() -> Arc<Self> {
|
pub fn new_arc() -> Arc<Self> {
|
||||||
// Init components
|
// Init components
|
||||||
let title = Title::new_arc();
|
let control = Control::new_arc();
|
||||||
let response = Response::new_arc();
|
let response = Response::new_arc();
|
||||||
let send = Send::new_arc();
|
let title = Title::new_arc();
|
||||||
|
|
||||||
// Init widget
|
// Init widget
|
||||||
let widget = Widget::new_arc(title.gobject(), response.gobject(), send.gobject());
|
let widget = Widget::new_arc(title.gobject(), response.gobject(), control.gobject());
|
||||||
|
|
||||||
// Init events
|
|
||||||
/* @TODO
|
|
||||||
response.gobject().connect_activate(|_| {});
|
|
||||||
send.gobject().connect_clicked(|_| {}); */
|
|
||||||
|
|
||||||
// Return activated struct
|
// Return activated struct
|
||||||
Arc::new(Self {
|
Arc::new(Self {
|
||||||
title,
|
control,
|
||||||
response,
|
response,
|
||||||
|
title,
|
||||||
widget,
|
widget,
|
||||||
})
|
})
|
||||||
}
|
}
|
||||||
|
|
||||||
// Actions
|
// Actions
|
||||||
pub fn set(&self, title: Option<&str>) {
|
pub fn update(&self, title: Option<&str>, count_limit: Option<&i32>) {
|
||||||
self.title.set(title);
|
self.control.update(&0, count_limit); // @TODO
|
||||||
|
self.title.update(title);
|
||||||
self.response.grab_focus();
|
self.response.grab_focus();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -0,0 +1,46 @@
|
|||||||
|
mod limit;
|
||||||
|
mod send;
|
||||||
|
mod widget;
|
||||||
|
|
||||||
|
use limit::Limit;
|
||||||
|
use send::Send;
|
||||||
|
use widget::Widget;
|
||||||
|
|
||||||
|
use gtk::Box;
|
||||||
|
use std::sync::Arc;
|
||||||
|
|
||||||
|
pub struct Control {
|
||||||
|
limit: Arc<Limit>,
|
||||||
|
send: Arc<Send>,
|
||||||
|
widget: Arc<Widget>,
|
||||||
|
}
|
||||||
|
|
||||||
|
impl Control {
|
||||||
|
// Construct
|
||||||
|
pub fn new_arc() -> Arc<Self> {
|
||||||
|
// Init components
|
||||||
|
let limit = Limit::new_arc();
|
||||||
|
let send = Send::new_arc();
|
||||||
|
|
||||||
|
// Init widget
|
||||||
|
let widget = Widget::new_arc(limit.gobject(), send.gobject());
|
||||||
|
|
||||||
|
// Return activated struct
|
||||||
|
Arc::new(Self {
|
||||||
|
limit,
|
||||||
|
send,
|
||||||
|
widget,
|
||||||
|
})
|
||||||
|
}
|
||||||
|
|
||||||
|
// Actions
|
||||||
|
pub fn update(&self, count: &i32, count_limit: Option<&i32>) {
|
||||||
|
self.limit.update(count, count_limit);
|
||||||
|
// @TODO self.send.update(limit);
|
||||||
|
}
|
||||||
|
|
||||||
|
// Getters
|
||||||
|
pub fn gobject(&self) -> &Box {
|
||||||
|
&self.widget.gobject()
|
||||||
|
}
|
||||||
|
}
|
@ -0,0 +1,31 @@
|
|||||||
|
mod widget;
|
||||||
|
|
||||||
|
use widget::Widget;
|
||||||
|
|
||||||
|
use gtk::Label;
|
||||||
|
use std::sync::Arc;
|
||||||
|
|
||||||
|
pub struct Limit {
|
||||||
|
widget: Arc<Widget>,
|
||||||
|
}
|
||||||
|
|
||||||
|
impl Limit {
|
||||||
|
// Construct
|
||||||
|
pub fn new_arc() -> Arc<Self> {
|
||||||
|
// Init widget
|
||||||
|
let widget = Widget::new_arc();
|
||||||
|
|
||||||
|
// Result
|
||||||
|
Arc::new(Self { widget })
|
||||||
|
}
|
||||||
|
|
||||||
|
// Actions
|
||||||
|
pub fn update(&self, count: &i32, limit: Option<&i32>) {
|
||||||
|
self.widget.update(count, limit);
|
||||||
|
}
|
||||||
|
|
||||||
|
// Getters
|
||||||
|
pub fn gobject(&self) -> &Label {
|
||||||
|
&self.widget.gobject()
|
||||||
|
}
|
||||||
|
}
|
@ -0,0 +1,39 @@
|
|||||||
|
use gtk::{prelude::WidgetExt, Label};
|
||||||
|
use std::sync::Arc;
|
||||||
|
|
||||||
|
pub struct Widget {
|
||||||
|
gobject: Label,
|
||||||
|
}
|
||||||
|
|
||||||
|
impl Widget {
|
||||||
|
// Construct
|
||||||
|
pub fn new_arc() -> Arc<Self> {
|
||||||
|
let gobject = Label::builder().use_markup(true).build();
|
||||||
|
|
||||||
|
Arc::new(Self { gobject })
|
||||||
|
}
|
||||||
|
|
||||||
|
// Actions
|
||||||
|
pub fn update(&self, count: &i32, count_limit: Option<&i32>) {
|
||||||
|
match count_limit {
|
||||||
|
Some(limit) => {
|
||||||
|
// Update color on limit reached
|
||||||
|
self.gobject
|
||||||
|
.set_css_classes(&[if count < limit { "success" } else { "error" }]); // @TODO add warning step?
|
||||||
|
|
||||||
|
// Update text
|
||||||
|
self.gobject
|
||||||
|
.set_markup(&format!("{count} <sup>/ {limit}</sup>"));
|
||||||
|
|
||||||
|
// Toggle visibility if limit provided
|
||||||
|
self.gobject.set_visible(true);
|
||||||
|
}
|
||||||
|
None => self.gobject.set_visible(false),
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// Getters
|
||||||
|
pub fn gobject(&self) -> &Label {
|
||||||
|
&self.gobject
|
||||||
|
}
|
||||||
|
}
|
@ -1,4 +1,4 @@
|
|||||||
use gtk::{Align, Button};
|
use gtk::Button;
|
||||||
use std::sync::Arc;
|
use std::sync::Arc;
|
||||||
|
|
||||||
pub struct Widget {
|
pub struct Widget {
|
||||||
@ -10,7 +10,6 @@ impl Widget {
|
|||||||
pub fn new_arc() -> Arc<Self> {
|
pub fn new_arc() -> Arc<Self> {
|
||||||
let gobject = Button::builder()
|
let gobject = Button::builder()
|
||||||
//.css_classes(["accent"])
|
//.css_classes(["accent"])
|
||||||
.halign(Align::End)
|
|
||||||
.label("Send")
|
.label("Send")
|
||||||
.build();
|
.build();
|
||||||
|
|
@ -0,0 +1,29 @@
|
|||||||
|
use gtk::{prelude::BoxExt, Align, Box, Button, Label, Orientation};
|
||||||
|
use std::sync::Arc;
|
||||||
|
|
||||||
|
const SPACING: i32 = 8;
|
||||||
|
|
||||||
|
pub struct Widget {
|
||||||
|
gobject: Box,
|
||||||
|
}
|
||||||
|
|
||||||
|
impl Widget {
|
||||||
|
// Construct
|
||||||
|
pub fn new_arc(limit: &Label, send: &Button) -> Arc<Self> {
|
||||||
|
let gobject = Box::builder()
|
||||||
|
.halign(Align::End)
|
||||||
|
.orientation(Orientation::Horizontal)
|
||||||
|
.spacing(SPACING)
|
||||||
|
.build();
|
||||||
|
|
||||||
|
gobject.append(limit);
|
||||||
|
gobject.append(send);
|
||||||
|
|
||||||
|
Arc::new(Self { gobject })
|
||||||
|
}
|
||||||
|
|
||||||
|
// Getters
|
||||||
|
pub fn gobject(&self) -> &Box {
|
||||||
|
&self.gobject
|
||||||
|
}
|
||||||
|
}
|
@ -20,8 +20,8 @@ impl Title {
|
|||||||
}
|
}
|
||||||
|
|
||||||
// Actions
|
// Actions
|
||||||
pub fn set(&self, text: Option<&str>) {
|
pub fn update(&self, text: Option<&str>) {
|
||||||
self.widget.set(text);
|
self.widget.update(text);
|
||||||
}
|
}
|
||||||
|
|
||||||
// Getters
|
// Getters
|
||||||
|
@ -20,7 +20,7 @@ impl Widget {
|
|||||||
}
|
}
|
||||||
|
|
||||||
// Actions
|
// Actions
|
||||||
pub fn set(&self, text: Option<&str>) {
|
pub fn update(&self, text: Option<&str>) {
|
||||||
match text {
|
match text {
|
||||||
Some(value) => {
|
Some(value) => {
|
||||||
self.gobject.set_label(value);
|
self.gobject.set_label(value);
|
||||||
|
@ -1,4 +1,4 @@
|
|||||||
use gtk::{prelude::BoxExt, Box, Button, Label, Orientation, TextView};
|
use gtk::{prelude::BoxExt, Box, Label, Orientation, TextView};
|
||||||
use std::sync::Arc;
|
use std::sync::Arc;
|
||||||
|
|
||||||
const MARGIN: i32 = 6;
|
const MARGIN: i32 = 6;
|
||||||
@ -10,7 +10,7 @@ pub struct Widget {
|
|||||||
|
|
||||||
impl Widget {
|
impl Widget {
|
||||||
// Construct
|
// Construct
|
||||||
pub fn new_arc(title: &Label, response: &TextView, send: &Button) -> Arc<Self> {
|
pub fn new_arc(title: &Label, response: &TextView, control: &Box) -> Arc<Self> {
|
||||||
let gobject = Box::builder()
|
let gobject = Box::builder()
|
||||||
.margin_bottom(MARGIN)
|
.margin_bottom(MARGIN)
|
||||||
.margin_end(MARGIN)
|
.margin_end(MARGIN)
|
||||||
@ -22,7 +22,7 @@ impl Widget {
|
|||||||
|
|
||||||
gobject.append(title);
|
gobject.append(title);
|
||||||
gobject.append(response);
|
gobject.append(response);
|
||||||
gobject.append(send);
|
gobject.append(control);
|
||||||
|
|
||||||
Arc::new(Self { gobject })
|
Arc::new(Self { gobject })
|
||||||
}
|
}
|
||||||
|
Loading…
x
Reference in New Issue
Block a user