mirror of
https://github.com/YGGverse/Yoda.git
synced 2026-04-02 01:25:27 +00:00
init search on page feature once
This commit is contained in:
parent
4b357f8229
commit
f767c11789
23 changed files with 449 additions and 266 deletions
83
src/app/browser/window/tab/item/page/search.rs
Normal file
83
src/app/browser/window/tab/item/page/search.rs
Normal file
|
|
@ -0,0 +1,83 @@
|
|||
mod buffer;
|
||||
mod form;
|
||||
mod placeholder;
|
||||
|
||||
use buffer::Buffer;
|
||||
use form::Form;
|
||||
use placeholder::Placeholder;
|
||||
|
||||
use gtk::{
|
||||
prelude::{BoxExt, WidgetExt},
|
||||
Align, Box, Orientation, TextBuffer,
|
||||
};
|
||||
use std::{cell::RefCell, rc::Rc};
|
||||
|
||||
pub struct Search {
|
||||
buffer: Rc<RefCell<Option<Buffer>>>,
|
||||
pub form: Rc<Form>,
|
||||
pub placeholder: Rc<Placeholder>,
|
||||
pub g_box: Box,
|
||||
}
|
||||
|
||||
impl Search {
|
||||
// Constructors
|
||||
|
||||
/// Create new `Self`
|
||||
pub fn new() -> Self {
|
||||
// Init components
|
||||
let buffer = Rc::new(RefCell::new(None));
|
||||
let form = Rc::new(Form::new(&buffer));
|
||||
let placeholder = Rc::new(Placeholder::new());
|
||||
|
||||
// Init main container
|
||||
let g_box = Box::builder()
|
||||
.orientation(Orientation::Vertical)
|
||||
.valign(Align::Center)
|
||||
.vexpand(false)
|
||||
.visible(false)
|
||||
.build();
|
||||
|
||||
g_box.append(&form.g_box);
|
||||
g_box.append(&placeholder.label);
|
||||
|
||||
// Done
|
||||
Self {
|
||||
buffer,
|
||||
form,
|
||||
g_box,
|
||||
placeholder,
|
||||
}
|
||||
}
|
||||
|
||||
// Actions
|
||||
|
||||
pub fn show(&self) {
|
||||
if self.buffer.borrow().is_some() {
|
||||
self.form.show();
|
||||
self.placeholder.hide();
|
||||
} else {
|
||||
self.form.hide();
|
||||
self.placeholder.show();
|
||||
}
|
||||
self.g_box.set_visible(true)
|
||||
}
|
||||
|
||||
pub fn hide(&self) {
|
||||
self.g_box.set_visible(false)
|
||||
}
|
||||
|
||||
pub fn toggle(&self) {
|
||||
if self.g_box.is_visible() {
|
||||
self.hide()
|
||||
} else {
|
||||
self.show()
|
||||
}
|
||||
}
|
||||
|
||||
pub fn update(&self, text_buffer: Option<TextBuffer>) {
|
||||
self.buffer.replace(match text_buffer {
|
||||
Some(buffer) => Some(Buffer::new(buffer)),
|
||||
None => None,
|
||||
});
|
||||
}
|
||||
}
|
||||
Loading…
Add table
Add a link
Reference in a new issue