Com选择优化为下拉框, 修改界面主题

This commit is contained in:
JIe Jie 2024-07-10 17:59:49 +08:00
parent db54dc28c0
commit 61b2edca36
5 changed files with 62 additions and 24 deletions

10
Cargo.lock generated
View File

@ -286,6 +286,15 @@ dependencies = [
"cmake",
]
[[package]]
name = "fltk-theme"
version = "0.7.2"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "3539d27a815514b56af2afa6b8e7c6d6b9274a103239487d5a60daa6340a4868"
dependencies = [
"fltk",
]
[[package]]
name = "fluid-parser"
version = "0.1.15"
@ -1127,6 +1136,7 @@ dependencies = [
"chrono",
"fl2rust",
"fltk",
"fltk-theme",
"lazy_static",
"libsqlite3-sys",
"log",

View File

@ -8,6 +8,7 @@ edition = "2021"
[dependencies]
anyhow = "^1.0.86"
fltk = { version = "^1.4", features = ["fltk-bundled"] }
fltk-theme = "0.7.2"
calamine = "0.25.0"
serialport = "4.4.0"
rusqlite = "0.25.4"
@ -21,3 +22,8 @@ serde_json="1.0.120"
[build-dependencies]
fl2rust = "0.5.19"
[package.metadata.windows]
# For windows subsystem
link-args = ["/SUBSYSTEM:windows", "/ENTRY:mainCRTStartup"]
subsystem = "windows"

View File

@ -1,12 +1,13 @@
use fltk::{*};
use crate::services::ui_service::UiService;
use fltk_theme::{WidgetTheme, ThemeType};
mod services;
mod models;
mod ui;
fn main() {
let app = app::App::default();
let widget_theme = WidgetTheme::new(ThemeType::Metro);
widget_theme.apply();
let mut ui_service = UiService::new();
ui_service.init_components();
app.run().unwrap();

View File

@ -2,8 +2,7 @@ use std::cell::RefCell;
use std::process;
use std::rc::Rc;
use std::sync::{Arc, Mutex};
use fltk::prelude::{DisplayExt, InputExt, WidgetExt};
use fltk::prelude::{DisplayExt, InputExt, MenuExt, WidgetExt};
use fltk::text::TextBuffer;
use crate::services::log_service::LOGGER;
@ -26,6 +25,10 @@ impl UiService {
let work_service_clone = Rc::clone(&work_service_rc);
let current_com;
let should_current_line;
let comports = WorkService::get_port_names();
for com in comports {
ui.borrow_mut().com_choice.add_choice(&com);
}
{
let work_service = work_service_clone.borrow_mut();
@ -36,7 +39,8 @@ impl UiService {
if work_service_rc.borrow().config_model.excel_path != "" {
ui.borrow_mut().excel_file_textbox.set_value(&work_service_rc.borrow().config_model.excel_path);
ui.borrow_mut().current_line_textbox.set_value(&work_service_rc.borrow().config_model.current_line.to_string());
ui.borrow_mut().com_textbox.set_value(&*current_com.clone());
let index = ui.borrow().com_choice.find_index(&current_com);
ui.borrow_mut().com_choice.set_value(index);
work_service_rc.borrow_mut().excel_service.as_mut().unwrap().set_current_line(should_current_line).unwrap();
}
@ -54,13 +58,26 @@ impl UiService {
self.init_start_btn();
self.init_set_line_btn();
self.init_log();
self.init_exit_callback()
self.init_refresh_com_button();
self.init_exit_callback();
}
fn init_exit_callback(&mut self){
fn init_refresh_com_button(&mut self) {
let ui_rc = Rc::clone(&self.ui);
let ui_rc_clone = Rc::clone(&ui_rc);
ui_rc.borrow_mut().refresh_com_btn.set_callback(move |_| {
let comports = WorkService::get_port_names();
let mut ui = ui_rc_clone.borrow_mut();
ui.com_choice.clear();
for com in comports {
ui.com_choice.add_choice(&com);
}
});
}
fn init_exit_callback(&mut self) {
let ui_rc = Rc::clone(&self.ui);
let work_service_rc = Rc::clone(&self.work_service);
ui_rc.borrow_mut().main_window.set_callback(move |_|{
ui_rc.borrow_mut().main_window.set_callback(move |_| {
let work_service = work_service_rc.borrow_mut();
work_service.save_config();
process::exit(0);
@ -79,7 +96,7 @@ impl UiService {
if let Ok(line) = set_dialog.line_textbox.value().parse::<usize>() {
match work_service_rc_clone.borrow_mut().set_current_line(line) {
Ok(_) => {
ui_clone.borrow_mut().current_line_textbox.set_value(&line.to_string())
ui_clone.borrow_mut().current_line_textbox.set_value(&line.to_string());
}
Err(msg) => fltk::dialog::message_default(&msg)
}
@ -107,7 +124,7 @@ impl UiService {
}
Some(_) => {}
}
let selected_com = ui.com_textbox.value();
let selected_com = ui.com_choice.choice().unwrap();
if let Err(msg) = work_service.init_serial_service(selected_com) {
fltk::dialog::message_default(&msg);
return;
@ -121,7 +138,8 @@ impl UiService {
}
Err(msg) => {
work_service.roll_back();
fltk::dialog::message_default(&msg) }
fltk::dialog::message_default(&msg)
}
}
}
});
@ -129,10 +147,6 @@ impl UiService {
fn init_log(&mut self) {
let ui_rc = Rc::clone(&self.ui);
if self.work_service.borrow_mut().config_model.last_com != ""{
ui_rc.borrow_mut().com_textbox.set_value(&self.work_service.borrow_mut().config_model.last_com);
}
let text_buffer = TextBuffer::default();
ui_rc.borrow_mut().log_content.set_buffer(text_buffer.clone());
let text_buffer_arc = Arc::new(Mutex::new(text_buffer));
@ -153,6 +167,7 @@ impl UiService {
dialog.show();
let binding = dialog.filename();
let path = binding.to_str().unwrap();
if path == "" {return;}
work_service.init_excel_service(path.to_string()).unwrap();
let current_line = &work_service.get_current_line().to_string();
work_service.config_model.excel_path = path.to_string();

View File

@ -2,8 +2,10 @@
version 1.0400
header_name {.h}
code_name {.cxx}
class UserInterface {} {
Function {make_window()} {} {
class UserInterface {open
} {
Function {make_window()} {open
} {
Fl_Window main_window {
label WriteTool_RS open
xywh {721 399 693 467} type Double visible
@ -30,24 +32,28 @@ class UserInterface {} {
}
Fl_Button start_btn {
label Start
xywh {445 155 240 35} shortcut 0xff0d color 51 labeltype ENGRAVED_LABEL labelsize 18
xywh {532 156 138 35} shortcut 0xff0d color 51 labeltype ENGRAVED_LABEL labelsize 18
}
Fl_Text_Display log_content {
Fl_Text_Display log_content {selected
xywh {10 210 670 250}
}
Fl_Input com_textbox {
label {COM:}
xywh {135 155 285 35}
Fl_Choice com_choice {
label {Com:} open
xywh {135 156 235 35} down_box BORDER_BOX
} {}
Fl_Button refresh_com_btn {
label Refresh
xywh {390 156 120 35}
}
}
}
}
class UserInterface1 {open selected
class UserInterface1 {open
} {
Function {make_set_line_window()} {} {
Fl_Window {} {open
xywh {828 554 228 43} type Double visible
xywh {1171 275 228 43} type Double visible
} {
Fl_Input line_textbox {
label {Line:}