forked from 1b-agent/opencadstudio-upstream
Merge pull request #1613 from ramox81/codex/sheet-set-manager
Sheet Set Manager, NEWSHEETSET / OPENSHEETSET and sheet set fields, with review fixes. # Conflicts: # Cargo.lock # src/app/control/actions.rs # src/app/mod.rs # src/app/settings.rs # src/app/update/dialog.rs # src/app/update/file.rs # src/app/update/mod.rs # src/app/view/mod.rs # src/ui/dock.rs # src/ui/ribbon/mod.rs # src/ui/window/field_dialog.rs # src/ui/window/mod.rs
This commit is contained in:
commit
fbe55bab37
52 files changed
+9088
-69
No files matched your search
@@ -5,7 +5,7 @@ use crate::app::{Message, OpenCADStudio};
|
||||
use crate::command::CadCommand;
|
||||
use crate::modules::annotate::field_cmd::{FieldObjectPickCommand, FieldPlaceCommand, FieldTablePickCommand};
|
||||
use crate::ui::window::field_dialog::{
|
||||
fields_of, object_properties, FieldDialogMsg, FieldDialogState, FieldTarget, DATE_FORMATS,
|
||||
fields_of, nav_props, object_properties, FieldDialogMsg, FieldDialogState, FieldTarget, DATE_FORMATS,
|
||||
NAMED_TYPES,
|
||||
};
|
||||
use iced::Task;
|
||||
@@ -103,6 +103,15 @@ impl OpenCADStudio {
|
||||
.iter()
|
||||
.map(|f| self.field_value(&format!("\\AcVar Date \\f \"{f}\""), &[]))
|
||||
.collect();
|
||||
if let Some(db) = self.sheet_set.db() {
|
||||
let custom = codec::sheet_set::custom_properties(db.sheet_set());
|
||||
let names = |flag: i32| custom.iter().filter(|(_, _, f)| f & flag != 0).map(|(n, _, _)| n.clone()).collect();
|
||||
state.ss_sheet_custom = names(codec::sheet_set::CUSTOM_SHEET_PROP);
|
||||
state.ss_set_custom = names(codec::sheet_set::CUSTOM_SHEET_SET_PROP);
|
||||
state.ss_set_name = db.name().to_string();
|
||||
}
|
||||
state.ss_sets = self.sheet_set.sets.clone();
|
||||
state.ss_set = self.sheet_set.current.unwrap_or(0);
|
||||
self.field_dialog = Some(state);
|
||||
self.fill_named_objects();
|
||||
self.refresh_field_preview();
|
||||
@@ -180,8 +189,73 @@ impl OpenCADStudio {
|
||||
}
|
||||
FieldDialogMsg::Name(n) => {
|
||||
state.name = n;
|
||||
state.text_case = 0;
|
||||
// Sheet set fields start in Title case.
|
||||
state.text_case = if crate::ui::window::field_dialog::SHEET_SET_FIELDS.contains(&n) { 4 } else { 0 };
|
||||
state.ss_custom.clear();
|
||||
state.ss_node.clear();
|
||||
state.ss_prop.clear();
|
||||
// SheetSet starts on the set and its first property; SheetView on nothing.
|
||||
if n == "SheetSet" {
|
||||
if let Some(db) = state.ss_sets.get(state.ss_set) {
|
||||
state.ss_node = db.sheet_set().id().to_string();
|
||||
state.ss_prop = nav_props(db, &state.ss_node).first().map(|p| p.0.clone()).unwrap_or_default();
|
||||
}
|
||||
}
|
||||
}
|
||||
FieldDialogMsg::SsCustom(name) => state.ss_custom = name,
|
||||
FieldDialogMsg::SsSet(k) => {
|
||||
state.ss_set = k;
|
||||
state.ss_node.clear();
|
||||
state.ss_prop.clear();
|
||||
}
|
||||
FieldDialogMsg::SsNode(id) => {
|
||||
state.ss_prop = state
|
||||
.ss_sets
|
||||
.get(state.ss_set)
|
||||
.and_then(|db| nav_props(db, &id).first().map(|p| p.0.clone()))
|
||||
.unwrap_or_default();
|
||||
state.ss_node = id;
|
||||
}
|
||||
FieldDialogMsg::SsProp(p) => state.ss_prop = p,
|
||||
FieldDialogMsg::SsHref(v) => state.ss_href = v,
|
||||
FieldDialogMsg::SsBrowse => {
|
||||
return Task::perform(
|
||||
async {
|
||||
crate::sys::file_dialog()
|
||||
.set_title(crate::t!("Open Sheet Set").as_ref())
|
||||
.add_filter(crate::t!("Sheet Set (*.dst)").as_ref(), &["dst", "DST"])
|
||||
.pick_file()
|
||||
.await
|
||||
.map(|h| crate::sys::handle_path(&h))
|
||||
},
|
||||
|p| Message::FieldDialog(FieldDialogMsg::SsPicked(p)),
|
||||
);
|
||||
}
|
||||
FieldDialogMsg::SsPicked(None) => {}
|
||||
FieldDialogMsg::SsPicked(Some(path)) => match crate::app::commands::sheet_set::read_set(&path.to_string_lossy()) {
|
||||
Ok(db) => {
|
||||
let key = codec::sheet_set::path_key(&path.to_string_lossy());
|
||||
let open = state
|
||||
.ss_sets
|
||||
.iter()
|
||||
.position(|d| d.path.as_deref().is_some_and(|p| codec::sheet_set::path_key(p) == key));
|
||||
state.ss_set = match open {
|
||||
Some(k) => k,
|
||||
None => {
|
||||
state.ss_sets.push(db);
|
||||
state.ss_sets.len() - 1
|
||||
}
|
||||
};
|
||||
state.ss_node.clear();
|
||||
state.ss_prop.clear();
|
||||
}
|
||||
Err(e) => self.command_line.push_error(&format!("{}: {e}", path.display())),
|
||||
},
|
||||
FieldDialogMsg::SsPlaceholder(k) => {
|
||||
state.ss_placeholder = k;
|
||||
state.ss_custom.clear();
|
||||
}
|
||||
FieldDialogMsg::SsScaleFormat(k) => state.ss_scale_format = k,
|
||||
FieldDialogMsg::DateFormat(f) => state.date_format = f,
|
||||
FieldDialogMsg::DateExample(k) => {
|
||||
if let Some(f) = DATE_FORMATS.get(k) {
|
||||
|
||||
Reference in new issue
Block a user