add-paper-sizes

This commit is contained in:
juan committed 2026-09-06 19:57:24 -03:00
1 parent d66e89ca19
commit 4eb656e946
2 files changed
+43 -25

No files matched your search

+30 -24
View File
@@ -133,6 +133,9 @@ fn plot_dialog_sheet_mm(d: &crate::ui::window::plot::PlotDialogState) -> (f64, f
"A1" => Some(PaperSize::A1), "A1" => Some(PaperSize::A1),
"A0" => Some(PaperSize::A0), "A0" => Some(PaperSize::A0),
"A4" => Some(PaperSize::A4), "A4" => Some(PaperSize::A4),
"Letter" => Some(PaperSize::Letter),
"Legal" => Some(PaperSize::Legal),
"Tabloid" => Some(PaperSize::Tabloid),
_ => None, _ => None,
}; };
if let Some(paper) = standard { if let Some(paper) = standard {
@@ -2576,7 +2579,7 @@ pub(super) fn on_open_file(&mut self) -> Task<Message> {
let pick = Task::perform( let pick = Task::perform(
async move { async move {
let mut dlg = crate::sys::file_dialog() let mut dlg = crate::sys::file_dialog()
.set_title(crate::t!("Save Drawing As").as_ref()) .set_title("Save Drawing As")
.set_file_name(default_name) .set_file_name(default_name)
.add_filter(filter_label, &[filter_ext]); .add_filter(filter_label, &[filter_ext]);
if let Some(dir) = seed_dir { if let Some(dir) = seed_dir {
@@ -2934,8 +2937,8 @@ pub(super) fn on_open_file(&mut self) -> Task<Message> {
plot_style.as_ref(), plot_style.as_ref(),
render_options, render_options,
) )
.map(|_| crate::tf!("Exported: {}", worker_path.display()).into_owned()) .map(|_| format!("Exported: {}", worker_path.display()))
.map_err(|e| crate::tf!("Export failed: {e}").into_owned()) .map_err(|e| format!("Export failed: {e}"))
}; };
self.run_plot_work(self.plot_dialog.background, false, work) self.run_plot_work(self.plot_dialog.background, false, work)
} }
@@ -2978,12 +2981,12 @@ pub(super) fn on_open_file(&mut self) -> Task<Message> {
plot_style.as_ref(), plot_style.as_ref(),
render_options, render_options,
) )
.map(|_| {crate::tf!( .map(|_| {format!(
"Plotted window to {}", "Plotted window to {}",
worker_path worker_path
.file_name().unwrap_or_default().to_string_lossy() .file_name().unwrap_or_default().to_string_lossy()
).into_owned() )
}).map_err(|e| crate::tf!("Plot failed: {e}").into_owned()) }).map_err(|e| format!("Plot failed: {e}"))
}; };
self.run_plot_work(self.plot_dialog.background, false, work) self.run_plot_work(self.plot_dialog.background, false, work)
} }
@@ -3071,7 +3074,7 @@ pub(super) fn on_open_file(&mut self) -> Task<Message> {
let page_setup = self.tabs[i] let page_setup = self.tabs[i]
.scene .scene
.plot_settings_for(&name) .plot_settings_for(&name)
.ok_or_else(|| crate::tf!("Layout '{name}' has no page setup.").into_owned())?; .ok_or_else(|| format!("Layout '{name}' has no page setup."))?;
{ {
let scene = &mut self.tabs[i].scene; let scene = &mut self.tabs[i].scene;
scene.current_layout = name.clone(); scene.current_layout = name.clone();
@@ -3092,10 +3095,10 @@ pub(super) fn on_open_file(&mut self) -> Task<Message> {
self.tabs[i].scene.restore_saved_camera(); self.tabs[i].scene.restore_saved_camera();
} }
if dialog.style_missing && dialog.apply_plot_styles { if dialog.style_missing && dialog.apply_plot_styles {
return Err(crate::tf!( return Err(format!(
"Layout '{name}' plot style table '{}' is not loaded.", "Layout '{name}' plot style table '{}' is not loaded.",
dialog.style_name dialog.style_name
).into_owned()); ));
} }
let plot_style = self.dialog_plot_style(&dialog); let plot_style = self.dialog_plot_style(&dialog);
let params = match dialog.area.as_str() { let params = match dialog.area.as_str() {
@@ -3135,7 +3138,7 @@ pub(super) fn on_open_file(&mut self) -> Task<Message> {
rotation_deg, rotation_deg,
scale, scale,
clip, clip,
) = params.ok_or_else(|| crate::tf!("Layout '{name}' plot area is empty.").into_owned())?; ) = params.ok_or_else(|| format!("Layout '{name}' plot area is empty."))?;
( (
std::sync::Arc::new(wires), std::sync::Arc::new(wires),
hatches, hatches,
@@ -3219,8 +3222,8 @@ pub(super) fn on_open_file(&mut self) -> Task<Message> {
&worker_path, &worker_path,
None, None,
) )
.map(|_| crate::tf!("Exported {} layouts to {}", pages.len(), worker_path.display()).into_owned()) .map(|_| format!("Exported {} layouts to {}", pages.len(), worker_path.display()))
.map_err(|error| crate::tf!("Export failed: {error}").into_owned()) .map_err(|error| format!("Export failed: {error}"))
}; };
self.run_print_all_work(dialog.background, work) self.run_print_all_work(dialog.background, work)
} }
@@ -3269,8 +3272,8 @@ pub(super) fn on_open_file(&mut self) -> Task<Message> {
.and_then(|_| { .and_then(|_| {
crate::io::print_to_printer::print_existing_pdf(&temp_path, &options) crate::io::print_to_printer::print_existing_pdf(&temp_path, &options)
}) })
.map(|printer| crate::tf!("Sent {} layouts to printer: {printer}", pages.len()).into_owned()) .map(|printer| format!("Sent {} layouts to printer: {printer}", pages.len()))
.map_err(|error| crate::tf!("Print failed: {error}").into_owned()) .map_err(|error| format!("Print failed: {error}"))
}; };
self.run_print_all_work(true, work) self.run_print_all_work(true, work)
} }
@@ -4285,7 +4288,7 @@ pub(super) fn on_open_file(&mut self) -> Task<Message> {
.as_deref() .as_deref()
.is_some_and(|name| name.eq_ignore_ascii_case(&style_name)); .is_some_and(|name| name.eq_ignore_ascii_case(&style_name));
let (mut paper, orient) = paper_label_from_dims(ps.paper_width, ps.paper_height); let (mut paper, orient) = paper_label_from_dims(ps.paper_width, ps.paper_height);
if !matches!(paper.as_str(), "A4" | "A3" | "A2" | "A1" | "A0") if !matches!(paper.as_str(), "A4" | "A3" | "A2" | "A1" | "A0" | "Letter" | "Legal" | "Tabloid")
&& !ps.paper_size.is_empty() && !ps.paper_size.is_empty()
{ {
paper = ps.paper_size.clone(); paper = ps.paper_size.clone();
@@ -4389,6 +4392,9 @@ pub(super) fn on_open_file(&mut self) -> Task<Message> {
"A2" => PaperSize::A2, "A2" => PaperSize::A2,
"A1" => PaperSize::A1, "A1" => PaperSize::A1,
"A0" => PaperSize::A0, "A0" => PaperSize::A0,
"Letter" => PaperSize::Letter,
"Legal" => PaperSize::Legal,
"Tabloid" => PaperSize::Tabloid,
_ => PaperSize::A4, _ => PaperSize::A4,
}; };
let orient = if d.orientation == "Portrait" { let orient = if d.orientation == "Portrait" {
@@ -4480,7 +4486,7 @@ pub(super) fn on_open_file(&mut self) -> Task<Message> {
plot_style.as_ref(), plot_style.as_ref(),
render_options, render_options,
).and_then(|_| crate::io::print_to_printer::open_in_viewer(&tmp)) ).and_then(|_| crate::io::print_to_printer::open_in_viewer(&tmp))
.map(|_| crate::t!("Opened plot preview.").into_owned()).map_err(|e| crate::tf!("Preview failed: {e}").into_owned()) .map(|_| "Opened plot preview.".to_string()).map_err(|e| format!("Preview failed: {e}"))
}; };
return self.run_plot_work(d.background, true, work); return self.run_plot_work(d.background, true, work);
} }
@@ -4497,8 +4503,8 @@ pub(super) fn on_open_file(&mut self) -> Task<Message> {
plot_style.as_ref(), plot_style.as_ref(),
render_options, render_options,
).and_then(|_| crate::io::print_to_printer::print_existing_pdf(&tmp, &opts)) ).and_then(|_| crate::io::print_to_printer::print_existing_pdf(&tmp, &opts))
.map(|printer| crate::tf!("Sent to printer: {printer}").into_owned()) .map(|printer| format!("Sent to printer: {printer}"))
.map_err(|e| crate::tf!("Print failed: {e}").into_owned()) .map_err(|e| format!("Print failed: {e}"))
}; };
return self.run_plot_work(true, false, work); return self.run_plot_work(true, false, work);
} }
@@ -4525,7 +4531,7 @@ pub(super) fn on_open_file(&mut self) -> Task<Message> {
plot_style.as_ref(), plot_style.as_ref(),
render_options, render_options,
).and_then(|_| crate::io::print_to_printer::open_in_viewer(&tmp)) ).and_then(|_| crate::io::print_to_printer::open_in_viewer(&tmp))
.map(|_| crate::t!("Opened plot preview.").into_owned()).map_err(|e| crate::tf!("Preview failed: {e}").into_owned()) .map(|_| "Opened plot preview.".to_string()).map_err(|e| format!("Preview failed: {e}"))
}; };
return self.run_plot_work(d.background, true, work); return self.run_plot_work(d.background, true, work);
} }
@@ -4543,8 +4549,8 @@ pub(super) fn on_open_file(&mut self) -> Task<Message> {
wires, hatches, wipeouts, page_w, page_h, ox, oy, rotation, scale, clip, wires, hatches, wipeouts, page_w, page_h, ox, oy, rotation, scale, clip,
plot_style, opts, plot_style, opts,
)) ))
.map(|printer| crate::tf!("Sent to printer: {printer}").into_owned()) .map(|printer| format!("Sent to printer: {printer}"))
.map_err(|error| crate::tf!("Print failed: {error}").into_owned()) .map_err(|error| format!("Print failed: {error}"))
}; };
self.run_plot_work(true, false, work) self.run_plot_work(true, false, work)
} }
@@ -4860,10 +4866,10 @@ pub(super) fn on_open_file(&mut self) -> Task<Message> {
Task::perform( Task::perform(
async move { async move {
let dialog = crate::sys::file_dialog() let dialog = crate::sys::file_dialog()
.set_title(crate::t!("Save Plot Style Table").as_ref()) .set_title("Save Plot Style Table")
.set_file_name(&default_name) .set_file_name(&default_name)
.add_filter(crate::t!("Plot Style Files").as_ref(), &["ctb", "CTB"]) .add_filter("Plot Style Files", &["ctb", "CTB"])
.add_filter(crate::t!("All Files").as_ref(), &["*"]); .add_filter("All Files", &["*"]);
#[cfg(not(target_arch = "wasm32"))] #[cfg(not(target_arch = "wasm32"))]
let dialog = match crate::io::plot_style::ensure_plot_styles_dir() { let dialog = match crate::io::plot_style::ensure_plot_styles_dir() {
Ok(dir) => dialog.set_directory(dir), Ok(dir) => dialog.set_directory(dir),
+13 -1
View File
@@ -7,15 +7,21 @@ pub enum PaperSize {
A2, A2,
A1, A1,
A0, A0,
Letter,
Legal,
Tabloid,
} }
impl PaperSize { impl PaperSize {
pub const ALL: [PaperSize; 5] = [ pub const ALL: [PaperSize; 8] = [
PaperSize::A4, PaperSize::A4,
PaperSize::A3, PaperSize::A3,
PaperSize::A2, PaperSize::A2,
PaperSize::A1, PaperSize::A1,
PaperSize::A0, PaperSize::A0,
PaperSize::Letter,
PaperSize::Legal,
PaperSize::Tabloid,
]; ];
pub fn label(self) -> &'static str { pub fn label(self) -> &'static str {
@@ -25,6 +31,9 @@ impl PaperSize {
PaperSize::A2 => "A2", PaperSize::A2 => "A2",
PaperSize::A1 => "A1", PaperSize::A1 => "A1",
PaperSize::A0 => "A0", PaperSize::A0 => "A0",
PaperSize::Letter => "Letter",
PaperSize::Legal => "Legal",
PaperSize::Tabloid => "Tabloid",
} }
} }
@@ -36,6 +45,9 @@ impl PaperSize {
PaperSize::A2 => (420.0, 594.0), PaperSize::A2 => (420.0, 594.0),
PaperSize::A1 => (594.0, 841.0), PaperSize::A1 => (594.0, 841.0),
PaperSize::A0 => (841.0, 1189.0), PaperSize::A0 => (841.0, 1189.0),
PaperSize::Letter => (215.9, 279.4),
PaperSize::Legal => (215.9, 355.6),
PaperSize::Tabloid => (279.4, 431.8),
} }
} }
} }