forked from 1b-agent/opencadstudio-upstream
feat(tablestyle): editable General section (margins, flow-suppress toggles)
The Table Style editor's General fields are now editable: H/V cell margins (buffers + Apply) and title/header row-suppressed toggles, loaded from the selected style on select. Per-cell (Data/Header/Title) text/fill/border editing remains a follow-up. Co-Authored-By: Claude Opus 4.8 <[email protected]>
This commit is contained in:
1 parent
a21caf821b
commit
0dd86eb658
4 files changed
+111
-5
No files matched your search
@@ -296,6 +296,9 @@ pub(super) struct OpenCADStudio {
|
||||
|
||||
// ── TableStyle Dialog ─────────────────────────────────────────────────
|
||||
tablestyle_selected: String,
|
||||
/// Edit buffers for the table style's general margins.
|
||||
ts_hmargin: String,
|
||||
ts_vmargin: String,
|
||||
|
||||
// ── TextStyle Font Browser ────────────────────────────────────────────
|
||||
textstyle_selected: String,
|
||||
@@ -987,6 +990,13 @@ pub enum Message {
|
||||
TableStyleDialogDelete,
|
||||
/// Toggle the Annotative flag on the selected table style.
|
||||
TableStyleToggleAnnotative,
|
||||
/// Toggle a boolean flag (title_suppressed / header_suppressed / flow) on
|
||||
/// the selected table style.
|
||||
TableStyleToggle(&'static str),
|
||||
/// Update a general edit buffer (hmargin / vmargin).
|
||||
TableStyleEdit { field: &'static str, value: String },
|
||||
/// Write the general edit buffers back into the selected table style.
|
||||
TableStyleApply,
|
||||
// ── MLineStyle Dialog ─────────────────────────────────────────────────
|
||||
MlStyleDialogOpen,
|
||||
#[allow(dead_code)]
|
||||
@@ -1158,6 +1168,8 @@ impl OpenCADStudio {
|
||||
textstyle_ttf: String::new(),
|
||||
// TableStyle dialog
|
||||
tablestyle_selected: "Standard".to_string(),
|
||||
ts_hmargin: "1.5".to_string(),
|
||||
ts_vmargin: "1.5".to_string(),
|
||||
// MLineStyle dialog
|
||||
mlstyle_selected: "Standard".to_string(),
|
||||
// DimStyle dialog
|
||||
|
||||
@@ -5740,7 +5740,69 @@ impl OpenCADStudio {
|
||||
}
|
||||
}
|
||||
Message::TableStyleDialogSelect(name) => {
|
||||
use acadrust::objects::ObjectType;
|
||||
self.tablestyle_selected = name;
|
||||
let i = self.active_tab;
|
||||
for obj in self.tabs[i].scene.document.objects.values() {
|
||||
if let ObjectType::TableStyle(s) = obj {
|
||||
if s.name == self.tablestyle_selected {
|
||||
self.ts_hmargin = format!("{:.4}", s.horizontal_margin);
|
||||
self.ts_vmargin = format!("{:.4}", s.vertical_margin);
|
||||
}
|
||||
}
|
||||
}
|
||||
Task::none()
|
||||
}
|
||||
|
||||
Message::TableStyleEdit { field, value } => {
|
||||
match field {
|
||||
"hmargin" => self.ts_hmargin = value,
|
||||
"vmargin" => self.ts_vmargin = value,
|
||||
_ => {}
|
||||
}
|
||||
Task::none()
|
||||
}
|
||||
|
||||
Message::TableStyleApply => {
|
||||
use acadrust::objects::ObjectType;
|
||||
let i = self.active_tab;
|
||||
let name = self.tablestyle_selected.clone();
|
||||
let h: Option<f64> = self.ts_hmargin.trim().parse().ok();
|
||||
let v: Option<f64> = self.ts_vmargin.trim().parse().ok();
|
||||
self.push_undo_snapshot(i, "TABLESTYLE EDIT");
|
||||
for obj in self.tabs[i].scene.document.objects.values_mut() {
|
||||
if let ObjectType::TableStyle(s) = obj {
|
||||
if s.name == name {
|
||||
if let Some(h) = h {
|
||||
s.horizontal_margin = h;
|
||||
}
|
||||
if let Some(v) = v {
|
||||
s.vertical_margin = v;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
self.tabs[i].dirty = true;
|
||||
Task::none()
|
||||
}
|
||||
|
||||
Message::TableStyleToggle(field) => {
|
||||
use acadrust::objects::ObjectType;
|
||||
let i = self.active_tab;
|
||||
let name = self.tablestyle_selected.clone();
|
||||
self.push_undo_snapshot(i, "TABLESTYLE EDIT");
|
||||
for obj in self.tabs[i].scene.document.objects.values_mut() {
|
||||
if let ObjectType::TableStyle(s) = obj {
|
||||
if s.name == name {
|
||||
match field {
|
||||
"title_sup" => s.title_suppressed = !s.title_suppressed,
|
||||
"header_sup" => s.header_suppressed = !s.header_suppressed,
|
||||
_ => {}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
self.tabs[i].dirty = true;
|
||||
Task::none()
|
||||
}
|
||||
|
||||
|
||||
@@ -117,6 +117,8 @@ impl OpenCADStudio {
|
||||
styles,
|
||||
&self.tablestyle_selected,
|
||||
selected_style,
|
||||
&self.ts_hmargin,
|
||||
&self.ts_vmargin,
|
||||
);
|
||||
}
|
||||
if Some(window_id) == self.mlstyle_window {
|
||||
|
||||
Reference in new issue
Block a user