1) file list reset button
2) sliders for position
This commit is contained in:
Piyush मिश्रः 2022-01-14 14:39:43 +05:30
parent f1c90e3a6f
commit fd6619f2f7
3 changed files with 114 additions and 28 deletions

View File

@ -71,9 +71,9 @@ impl Default for ConfigFile {
Self { Self {
quote_font_ttf: String::new(), quote_font_ttf: String::new(),
tag_font_ttf: String::new(), tag_font_ttf: String::new(),
quote_font_ratio: 259.0, quote_font_ratio: 215.0,
tag_font_ratio: 96.0, tag_font_ratio: 150.0,
color_layer: [25, 29, 34, 190], color_layer: [20, 22, 25, 192],
} }
} }
} }

View File

@ -11,6 +11,7 @@ use fltk::{
menu, menu,
misc::Spinner, misc::Spinner,
prelude::*, prelude::*,
valuator::Slider,
}; };
use std::{ use std::{
@ -47,6 +48,8 @@ pub(crate) fn spawn_image_thread(
let mut layer_alpha = main_win.layer_alpha.clone(); let mut layer_alpha = main_win.layer_alpha.clone();
let mut quote_position = main_win.quote_position.clone(); let mut quote_position = main_win.quote_position.clone();
let mut tag_position = main_win.tag_position.clone(); let mut tag_position = main_win.tag_position.clone();
let mut quote_position_slider = main_win.quote_position_slider.clone();
let mut tag_position_slider = main_win.tag_position_slider.clone();
let mut page = main_win.page.clone(); let mut page = main_win.page.clone();
let mut status = main_win.status.clone(); let mut status = main_win.status.clone();
let images_path = Arc::clone(&main_win.images_path); let images_path = Arc::clone(&main_win.images_path);
@ -69,6 +72,8 @@ pub(crate) fn spawn_image_thread(
&mut layer_alpha, &mut layer_alpha,
&mut quote_position, &mut quote_position,
&mut tag_position, &mut tag_position,
&mut quote_position_slider,
&mut tag_position_slider,
&mut page, &mut page,
&app_sender, &app_sender,
&properties, &properties,
@ -93,6 +98,8 @@ pub(crate) fn spawn_image_thread(
&mut layer_alpha, &mut layer_alpha,
&mut quote_position, &mut quote_position,
&mut tag_position, &mut tag_position,
&mut quote_position_slider,
&mut tag_position_slider,
&mut page, &mut page,
&app_sender, &app_sender,
&properties, &properties,
@ -135,6 +142,8 @@ fn load_image(
layer_alpha: &mut Spinner, layer_alpha: &mut Spinner,
quote_position: &mut Spinner, quote_position: &mut Spinner,
tag_position: &mut Spinner, tag_position: &mut Spinner,
quote_position_slider: &mut Slider,
tag_position_slider: &mut Slider,
page: &mut Page, page: &mut Page,
app_sender: &app::Sender<crate::AppMessage>, app_sender: &app::Sender<crate::AppMessage>,
properties: &Arc<RwLock<ImageProperties>>, properties: &Arc<RwLock<ImageProperties>>,
@ -167,6 +176,10 @@ fn load_image(
quote_position.set_value(saved_prop.quote_position); quote_position.set_value(saved_prop.quote_position);
tag_position.set_range(0.0, prop.original_dimension.1); tag_position.set_range(0.0, prop.original_dimension.1);
tag_position.set_value(saved_prop.tag_position); tag_position.set_value(saved_prop.tag_position);
quote_position_slider.set_range(0.0, prop.original_dimension.1);
quote_position_slider.set_value(saved_prop.quote_position);
tag_position_slider.set_range(0.0, prop.original_dimension.1);
tag_position_slider.set_value(saved_prop.tag_position);
prop.quote = saved_prop.quote; prop.quote = saved_prop.quote;
prop.tag = saved_prop.tag; prop.tag = saved_prop.tag;
@ -197,6 +210,10 @@ fn load_image(
quote_position.set_value(prop.quote_position); quote_position.set_value(prop.quote_position);
tag_position.set_range(0.0, prop.original_dimension.1); tag_position.set_range(0.0, prop.original_dimension.1);
tag_position.set_value(prop.tag_position); tag_position.set_value(prop.tag_position);
quote_position_slider.set_range(0.0, prop.original_dimension.1);
quote_position_slider.set_value(prop.quote_position);
tag_position_slider.set_range(0.0, prop.original_dimension.1);
tag_position_slider.set_value(prop.tag_position);
let glob = &globals::CONFIG.read().unwrap(); let glob = &globals::CONFIG.read().unwrap();
layer_red.set_value(glob.color_layer[0] as f64); layer_red.set_value(glob.color_layer[0] as f64);

View File

@ -2,6 +2,7 @@ use crate::crop_window::CropWindow;
use crate::draw_thread::*; use crate::draw_thread::*;
use crate::utils::ImageProperties; use crate::utils::ImageProperties;
use crate::{config_window::ConfigWindow, globals}; use crate::{config_window::ConfigWindow, globals};
use fltk::valuator::{Slider, SliderType};
use fltk::{ use fltk::{
app, app,
button::Button, button::Button,
@ -36,9 +37,12 @@ pub(crate) struct MainWindow {
pub(crate) layer_alpha: Spinner, pub(crate) layer_alpha: Spinner,
pub(crate) quote_position: Spinner, pub(crate) quote_position: Spinner,
pub(crate) tag_position: Spinner, pub(crate) tag_position: Spinner,
pub(crate) quote_position_slider: Slider,
pub(crate) tag_position_slider: Slider,
pub(crate) reset_darklayer_btn: Button, pub(crate) reset_darklayer_btn: Button,
pub(crate) reset_quote_position_btn: Button, pub(crate) reset_quote_position_btn: Button,
pub(crate) reset_tag_position_btn: Button, pub(crate) reset_tag_position_btn: Button,
pub(crate) reset_file_choice: Button,
pub(crate) crop_btn: Button, pub(crate) crop_btn: Button,
pub(crate) status: Frame, pub(crate) status: Frame,
pub(crate) page: Page, pub(crate) page: Page,
@ -77,6 +81,8 @@ impl MainWindow {
let save_btn = Button::default().with_label("Save"); let save_btn = Button::default().with_label("Save");
toolbar_flex.set_size(&save_btn, 50); toolbar_flex.set_size(&save_btn, 50);
let file_choice = menu::Choice::default(); let file_choice = menu::Choice::default();
let reset_file_choice = Button::default().with_label("@returnarrow");
toolbar_flex.set_size(&reset_file_choice, 30);
toolbar_flex.end(); toolbar_flex.end();
main_flex.set_size(&toolbar_flex, 30); main_flex.set_size(&toolbar_flex, 30);
@ -140,6 +146,10 @@ impl MainWindow {
quote_position_flex.end(); quote_position_flex.end();
controls_flex.set_size(&quote_position_flex, 30); controls_flex.set_size(&quote_position_flex, 30);
let mut quote_position_slider = Slider::default().with_type(SliderType::HorizontalNice);
quote_position_slider.set_step(1.0, 1);
controls_flex.set_size(&quote_position_slider, 30);
let mut tag_position_flex = Flex::default().row(); let mut tag_position_flex = Flex::default().row();
Frame::default() Frame::default()
.with_label("Tag Position:") .with_label("Tag Position:")
@ -150,6 +160,10 @@ impl MainWindow {
tag_position_flex.end(); tag_position_flex.end();
controls_flex.set_size(&tag_position_flex, 30); controls_flex.set_size(&tag_position_flex, 30);
let mut tag_position_slider = Slider::default().with_type(SliderType::HorizontalNice);
tag_position_slider.set_step(1.0, 1);
controls_flex.set_size(&tag_position_slider, 30);
let mut actions_flex = Flex::default().row(); let mut actions_flex = Flex::default().row();
Frame::default(); Frame::default();
let crop_btn = Button::default().with_label("Crop"); let crop_btn = Button::default().with_label("Crop");
@ -203,9 +217,12 @@ impl MainWindow {
layer_alpha, layer_alpha,
quote_position, quote_position,
tag_position, tag_position,
quote_position_slider,
tag_position_slider,
reset_darklayer_btn, reset_darklayer_btn,
reset_quote_position_btn, reset_quote_position_btn,
reset_tag_position_btn, reset_tag_position_btn,
reset_file_choice,
crop_btn, crop_btn,
status, status,
images_path: Arc::new(RwLock::new(vec![])), images_path: Arc::new(RwLock::new(vec![])),
@ -228,20 +245,17 @@ impl MainWindow {
fn menu(&mut self) { fn menu(&mut self) {
let mut file_choice = self.file_choice.clone(); let mut file_choice = self.file_choice.clone();
let sender = self.sender.clone(); let sender = self.sender.clone();
let mut win = self.win.clone();
let imgs = Arc::clone(&self.images_path); let imgs = Arc::clone(&self.images_path);
self.menubar.add( self.menubar.add(
"&File/Open Folder...\t", "&File/Open Folder...\t",
Shortcut::Ctrl | 'o', Shortcut::Ctrl | 'o',
menu::MenuFlag::Normal, menu::MenuFlag::Normal,
move |_| { move |_| {
win.redraw();
let mut chooser = NativeFileChooser::new(fltk::dialog::FileDialogType::BrowseDir); let mut chooser = NativeFileChooser::new(fltk::dialog::FileDialogType::BrowseDir);
chooser.set_option(fltk::dialog::FileDialogOptions::NewFolder); chooser.set_option(fltk::dialog::FileDialogOptions::NewFolder);
chooser.show(); chooser.show();
let path = chooser.filename(); let path = chooser.filename();
if !path.exists() { if !path.exists() {
win.activate();
return; return;
} }
let expost_dir = path.join("export"); let expost_dir = path.join("export");
@ -251,28 +265,7 @@ impl MainWindow {
return; return;
} }
} }
let files = fs::read_dir(&path).unwrap(); load_dir(&path, Arc::clone(&imgs), &mut file_choice, &sender);
let mut text = String::new();
let mut imgs_b = imgs.write().unwrap();
*imgs_b = vec![];
for file in files {
let file = file.unwrap();
let path = file.path();
if path.extension() == Some(OsStr::new("jpg"))
|| path.extension() == Some(OsStr::new("png"))
{
text = format!("{}|{}", text, path.file_name().unwrap().to_str().unwrap());
imgs_b.push(path);
}
}
if text.len() == 0 {
win.activate();
return;
}
file_choice.clear();
file_choice.add_choice(&text[1..]);
file_choice.set_value(0);
sender.send(DrawMessage::Open).unwrap();
}, },
); );
@ -325,6 +318,17 @@ impl MainWindow {
} }
fn events(&mut self) { fn events(&mut self) {
let mut file_choice = self.file_choice.clone();
let sender = self.sender.clone();
let imgs = Arc::clone(&self.images_path);
self.reset_file_choice.set_callback(move |_| {
let path = match imgs.read().unwrap().first() {
Some(path) => path.parent().unwrap().to_path_buf(),
None => return,
};
load_dir(&path, Arc::clone(&imgs), &mut file_choice, &sender);
});
let mut layer_red = self.layer_red.clone(); let mut layer_red = self.layer_red.clone();
let mut layer_green = self.layer_green.clone(); let mut layer_green = self.layer_green.clone();
let mut layer_blue = self.layer_blue.clone(); let mut layer_blue = self.layer_blue.clone();
@ -347,6 +351,7 @@ impl MainWindow {
}); });
let mut quote_position = self.quote_position.clone(); let mut quote_position = self.quote_position.clone();
let mut quote_position_slider = self.quote_position_slider.clone();
let mut image = self.page.image.clone(); let mut image = self.page.image.clone();
let sender = self.sender.clone(); let sender = self.sender.clone();
let properties = Arc::clone(&self.properties); let properties = Arc::clone(&self.properties);
@ -357,6 +362,7 @@ impl MainWindow {
prop.quote_position = pos; prop.quote_position = pos;
prop.is_saved = false; prop.is_saved = false;
quote_position.set_value(pos); quote_position.set_value(pos);
quote_position_slider.set_value(pos);
sender.send(DrawMessage::Recalc).unwrap(); sender.send(DrawMessage::Recalc).unwrap();
sender.send(DrawMessage::Flush).unwrap(); sender.send(DrawMessage::Flush).unwrap();
@ -364,6 +370,7 @@ impl MainWindow {
}); });
let mut tag_position = self.tag_position.clone(); let mut tag_position = self.tag_position.clone();
let mut tag_position_slider = self.tag_position_slider.clone();
let mut image = self.page.image.clone(); let mut image = self.page.image.clone();
let sender = self.sender.clone(); let sender = self.sender.clone();
let properties = Arc::clone(&self.properties); let properties = Arc::clone(&self.properties);
@ -374,6 +381,7 @@ impl MainWindow {
prop.tag_position = pos; prop.tag_position = pos;
prop.is_saved = false; prop.is_saved = false;
tag_position.set_value(pos); tag_position.set_value(pos);
tag_position_slider.set_value(pos);
sender.send(DrawMessage::Recalc).unwrap(); sender.send(DrawMessage::Recalc).unwrap();
sender.send(DrawMessage::Flush).unwrap(); sender.send(DrawMessage::Flush).unwrap();
@ -493,9 +501,11 @@ impl MainWindow {
let mut image = self.page.image.clone(); let mut image = self.page.image.clone();
let properties = Arc::clone(&self.properties); let properties = Arc::clone(&self.properties);
let sender = self.sender.clone(); let sender = self.sender.clone();
let mut quote_position_slider = self.quote_position_slider.clone();
self.quote_position.set_callback(move |f| { self.quote_position.set_callback(move |f| {
let mut prop = properties.write().unwrap(); let mut prop = properties.write().unwrap();
prop.quote_position = f.value(); prop.quote_position = f.value();
quote_position_slider.set_value(f.value());
prop.is_saved = false; prop.is_saved = false;
sender.send(DrawMessage::Recalc).unwrap(); sender.send(DrawMessage::Recalc).unwrap();
sender.send(DrawMessage::Flush).unwrap(); sender.send(DrawMessage::Flush).unwrap();
@ -505,9 +515,39 @@ impl MainWindow {
let mut image = self.page.image.clone(); let mut image = self.page.image.clone();
let properties = Arc::clone(&self.properties); let properties = Arc::clone(&self.properties);
let sender = self.sender.clone(); let sender = self.sender.clone();
let mut quote_position = self.quote_position.clone();
self.quote_position_slider.set_callback(move |f| {
let mut prop = properties.write().unwrap();
prop.quote_position = f.value();
quote_position.set_value(f.value());
prop.is_saved = false;
sender.send(DrawMessage::Recalc).unwrap();
sender.send(DrawMessage::Flush).unwrap();
image.redraw();
});
let mut image = self.page.image.clone();
let properties = Arc::clone(&self.properties);
let sender = self.sender.clone();
let mut tag_position_slider = self.tag_position_slider.clone();
self.tag_position.set_callback(move |f| { self.tag_position.set_callback(move |f| {
let mut prop = properties.write().unwrap(); let mut prop = properties.write().unwrap();
prop.tag_position = f.value(); prop.tag_position = f.value();
tag_position_slider.set_value(f.value());
prop.is_saved = false;
sender.send(DrawMessage::Recalc).unwrap();
sender.send(DrawMessage::Flush).unwrap();
image.redraw();
});
let mut image = self.page.image.clone();
let properties = Arc::clone(&self.properties);
let sender = self.sender.clone();
let mut tag_position = self.tag_position.clone();
self.tag_position_slider.set_callback(move |f| {
let mut prop = properties.write().unwrap();
prop.tag_position = f.value();
tag_position.set_value(f.value());
prop.is_saved = false; prop.is_saved = false;
sender.send(DrawMessage::Recalc).unwrap(); sender.send(DrawMessage::Recalc).unwrap();
sender.send(DrawMessage::Flush).unwrap(); sender.send(DrawMessage::Flush).unwrap();
@ -563,3 +603,32 @@ impl MainWindow {
}); });
} }
} }
fn load_dir(
path: &PathBuf,
imgs: Arc<RwLock<Vec<PathBuf>>>,
file_choice: &mut menu::Choice,
sender: &mpsc::Sender<DrawMessage>,
) {
let files = fs::read_dir(path).unwrap();
let mut text = String::new();
let mut imgs_b = imgs.write().unwrap();
*imgs_b = vec![];
for file in files {
let file = file.unwrap();
let path = file.path();
if path.extension() == Some(OsStr::new("jpg"))
|| path.extension() == Some(OsStr::new("png"))
{
text = format!("{}|{}", text, path.file_name().unwrap().to_str().unwrap());
imgs_b.push(path);
}
}
if text.len() == 0 {
return;
}
file_choice.clear();
file_choice.add_choice(&text[1..]);
file_choice.set_value(0);
sender.send(DrawMessage::Open).unwrap();
}