forked from 1b-agent/opencadstudio-upstream
feat(styles): overhaul style managers
Unify editor layouts, live previews, comparisons, read-only behavior, and localized controls across all named style managers. Refs #629
This commit is contained in:
1 parent
d06a1022f2
commit
25515fa33c
27 files changed
+5506
-1662
No files matched your search
+208
-8
@@ -5408,11 +5408,25 @@ impl OpenCADStudio {
|
||||
self.load_textstyle_bufs(i);
|
||||
Task::none()
|
||||
}
|
||||
Message::TextStyleDialogTab(tab) => {
|
||||
self.textstyle_tab = tab;
|
||||
Task::none()
|
||||
}
|
||||
Message::TextStyleDialogCompare(name) => {
|
||||
self.textstyle_compare = name;
|
||||
Task::none()
|
||||
}
|
||||
Message::TextStyleDialogSetCurrent => {
|
||||
// Staged: persists on Apply.
|
||||
let i = self.active_tab;
|
||||
let name = self.textstyle_selected.clone();
|
||||
if self.tabs[i].scene.document.text_styles.get(&name).is_some() {
|
||||
if self.tabs[i]
|
||||
.scene
|
||||
.document
|
||||
.text_styles
|
||||
.get(&name)
|
||||
.is_some_and(|style| !style.xref_dependent)
|
||||
{
|
||||
self.tabs[i].scene.document.header.current_text_style_name = name.clone();
|
||||
self.sync_ribbon_styles();
|
||||
self.command_line
|
||||
@@ -5468,9 +5482,13 @@ impl OpenCADStudio {
|
||||
let i = self.active_tab;
|
||||
let name = self.textstyle_selected.clone();
|
||||
if let Some(s) = self.tabs[i].scene.document.text_styles.get_mut(&name) {
|
||||
if s.xref_dependent {
|
||||
return Task::none();
|
||||
}
|
||||
match field {
|
||||
"backward" => s.flags.backward = !s.flags.backward,
|
||||
"upside_down" => s.flags.upside_down = !s.flags.upside_down,
|
||||
"vertical" => s.is_vertical = !s.is_vertical,
|
||||
"annotative" => s.annotative = !s.annotative,
|
||||
_ => {}
|
||||
}
|
||||
@@ -5481,8 +5499,17 @@ impl OpenCADStudio {
|
||||
Message::TextStyleFontPick(font_file) => {
|
||||
// Staged: update the buffer + live style; persist on Apply.
|
||||
let i = self.active_tab;
|
||||
self.textstyle_font = font_file.clone();
|
||||
let name = self.textstyle_selected.clone();
|
||||
if self.tabs[i]
|
||||
.scene
|
||||
.document
|
||||
.text_styles
|
||||
.get(&name)
|
||||
.is_some_and(|style| style.xref_dependent)
|
||||
{
|
||||
return Task::none();
|
||||
}
|
||||
self.textstyle_font = font_file.clone();
|
||||
if let Some(s) = self.tabs[i].scene.document.text_styles.get_mut(&name) {
|
||||
s.font_file = font_file;
|
||||
}
|
||||
@@ -5516,12 +5543,23 @@ impl OpenCADStudio {
|
||||
Task::none()
|
||||
}
|
||||
Message::TableStyleDialogSelect(name) => {
|
||||
for row in 0..3 {
|
||||
let _ = self.on_table_style_cell_apply(row);
|
||||
}
|
||||
self.stage_tablestyle_bufs();
|
||||
self.tablestyle_selected = name;
|
||||
let i = self.active_tab;
|
||||
self.load_tablestyle_bufs(i);
|
||||
Task::none()
|
||||
}
|
||||
Message::TableStyleDialogTab(tab) => {
|
||||
self.tablestyle_tab = tab;
|
||||
Task::none()
|
||||
}
|
||||
Message::TableStyleDialogCompare(name) => {
|
||||
self.tablestyle_compare = name;
|
||||
Task::none()
|
||||
}
|
||||
|
||||
Message::TableStyleEdit { field, value } => {
|
||||
match field {
|
||||
@@ -5534,6 +5572,9 @@ impl OpenCADStudio {
|
||||
}
|
||||
|
||||
Message::TableStyleApply => {
|
||||
for row in 0..3 {
|
||||
let _ = self.on_table_style_cell_apply(row);
|
||||
}
|
||||
self.stage_tablestyle_bufs();
|
||||
self.style_stage_commit();
|
||||
Task::none()
|
||||
@@ -5728,7 +5769,18 @@ impl OpenCADStudio {
|
||||
Task::none()
|
||||
}
|
||||
Message::MlStyleDialogSelect(name) => {
|
||||
self.stage_mlstyle_bufs();
|
||||
self.mlstyle_selected = name;
|
||||
let i = self.active_tab;
|
||||
self.load_mlstyle_bufs(i);
|
||||
Task::none()
|
||||
}
|
||||
Message::MlStyleDialogTab(tab) => {
|
||||
self.mlstyle_tab = tab;
|
||||
Task::none()
|
||||
}
|
||||
Message::MlStyleDialogCompare(name) => {
|
||||
self.mlstyle_compare = name;
|
||||
Task::none()
|
||||
}
|
||||
Message::MlStyleDialogSetCurrent => {
|
||||
@@ -5749,13 +5801,8 @@ impl OpenCADStudio {
|
||||
}
|
||||
Task::none()
|
||||
}
|
||||
// Placeholder so the Multiline manager has the same Set Current +
|
||||
// Apply pair as every other style manager. The editor is currently
|
||||
// read-only, so there is nothing to apply yet — wire this up when
|
||||
// editable MLineStyle properties land.
|
||||
Message::MlStyleApply => {
|
||||
// Multiline styles have no editable properties yet; Apply still
|
||||
// commits any staged structural / current-style changes.
|
||||
self.stage_mlstyle_bufs();
|
||||
self.style_stage_commit();
|
||||
Task::none()
|
||||
}
|
||||
@@ -5771,6 +5818,66 @@ impl OpenCADStudio {
|
||||
self.style_delete(crate::app::StyleKind::MLine);
|
||||
Task::none()
|
||||
}
|
||||
Message::MlStyleEdit { field, value } => {
|
||||
match field {
|
||||
"description" => self.mln_description = value,
|
||||
"start_angle" => self.mln_start_angle = value,
|
||||
"end_angle" => self.mln_end_angle = value,
|
||||
"fill_color" => self.mln_fill_color = value,
|
||||
_ => {}
|
||||
}
|
||||
self.stage_mlstyle_bufs();
|
||||
Task::none()
|
||||
}
|
||||
Message::MlStyleToggle(field) => {
|
||||
let i = self.active_tab;
|
||||
if let Some(style) = self.mlstyle_mut(i) {
|
||||
match field {
|
||||
"fill" => style.flags.fill_on = !style.flags.fill_on,
|
||||
"joints" => style.flags.display_joints = !style.flags.display_joints,
|
||||
"start_square" => style.flags.start_square_cap = !style.flags.start_square_cap,
|
||||
"start_inner" => style.flags.start_inner_arcs_cap = !style.flags.start_inner_arcs_cap,
|
||||
"start_round" => style.flags.start_round_cap = !style.flags.start_round_cap,
|
||||
"end_square" => style.flags.end_square_cap = !style.flags.end_square_cap,
|
||||
"end_inner" => style.flags.end_inner_arcs_cap = !style.flags.end_inner_arcs_cap,
|
||||
"end_round" => style.flags.end_round_cap = !style.flags.end_round_cap,
|
||||
_ => {}
|
||||
}
|
||||
}
|
||||
Task::none()
|
||||
}
|
||||
Message::MlStyleElementEdit { index, field, value } => {
|
||||
if let Some(element) = self.mln_elements.get_mut(index) {
|
||||
match field {
|
||||
"offset" => element[0] = value,
|
||||
"color" => element[1] = value,
|
||||
"linetype" => element[2] = value,
|
||||
_ => {}
|
||||
}
|
||||
}
|
||||
self.stage_mlstyle_bufs();
|
||||
Task::none()
|
||||
}
|
||||
Message::MlStyleElementAdd => {
|
||||
let i = self.active_tab;
|
||||
if let Some(style) = self.mlstyle_mut(i) {
|
||||
style
|
||||
.elements
|
||||
.push(acadrust::objects::MLineStyleElement::default());
|
||||
}
|
||||
self.load_mlstyle_bufs(i);
|
||||
Task::none()
|
||||
}
|
||||
Message::MlStyleElementDelete(index) => {
|
||||
let i = self.active_tab;
|
||||
if let Some(style) = self.mlstyle_mut(i) {
|
||||
if style.elements.len() > 1 && index < style.elements.len() {
|
||||
style.elements.remove(index);
|
||||
}
|
||||
}
|
||||
self.load_mlstyle_bufs(i);
|
||||
Task::none()
|
||||
}
|
||||
|
||||
// ── MLeaderStyle Dialog ───────────────────────────────────────────
|
||||
Message::MLeaderStyleDialogOpen => self.on_mleader_style_dialog_open(),
|
||||
@@ -5785,6 +5892,14 @@ impl OpenCADStudio {
|
||||
self.load_mleaderstyle_bufs(i);
|
||||
Task::none()
|
||||
}
|
||||
Message::MLeaderStyleDialogTab(tab) => {
|
||||
self.mleaderstyle_tab = tab;
|
||||
Task::none()
|
||||
}
|
||||
Message::MLeaderStyleDialogCompare(name) => {
|
||||
self.mleaderstyle_compare = name;
|
||||
Task::none()
|
||||
}
|
||||
Message::MLeaderStyleDialogSetCurrent => self.on_mleader_style_dialog_set_current(),
|
||||
Message::MLeaderStyleDialogNew => {
|
||||
self.style_new(crate::app::StyleKind::MLeader);
|
||||
@@ -5864,6 +5979,10 @@ impl OpenCADStudio {
|
||||
self.dimstyle_tab = tab;
|
||||
Task::none()
|
||||
}
|
||||
Message::DimStyleDialogCompare(name) => {
|
||||
self.dimstyle_compare = name;
|
||||
Task::none()
|
||||
}
|
||||
Message::DimStyleDialogNew => {
|
||||
self.style_new(crate::app::StyleKind::Dim);
|
||||
Task::none()
|
||||
@@ -5875,6 +5994,19 @@ impl OpenCADStudio {
|
||||
Message::DimStyleDialogSetCurrent => {
|
||||
// Staged: persists on Apply.
|
||||
let i = self.active_tab;
|
||||
let read_only = self.tabs[i]
|
||||
.scene
|
||||
.document
|
||||
.dim_styles
|
||||
.get(&self.dimstyle_selected)
|
||||
.is_some_and(|style| {
|
||||
style.xref_reference
|
||||
|| style.xref_dependent
|
||||
|| !style.xref_handle.is_null()
|
||||
});
|
||||
if read_only {
|
||||
return Task::none();
|
||||
}
|
||||
self.tabs[i].scene.document.header.current_dimstyle_name =
|
||||
self.dimstyle_selected.clone();
|
||||
self.sync_ribbon_styles();
|
||||
@@ -5894,7 +6026,75 @@ impl OpenCADStudio {
|
||||
Task::none()
|
||||
}
|
||||
Message::DsToggle(field) => {
|
||||
let separate_arrows = field == crate::app::DsField::Dimsah;
|
||||
self.apply_ds_toggle(field);
|
||||
if separate_arrows && self.ds_dimsah {
|
||||
let i = self.active_tab;
|
||||
if let Some(style) = self.tabs[i]
|
||||
.scene
|
||||
.document
|
||||
.dim_styles
|
||||
.get_mut(&self.dimstyle_selected)
|
||||
{
|
||||
if style.dimblk1.is_null() {
|
||||
style.dimblk1 = style.dimblk;
|
||||
}
|
||||
if style.dimblk2.is_null() {
|
||||
style.dimblk2 = style.dimblk1;
|
||||
}
|
||||
}
|
||||
}
|
||||
Task::none()
|
||||
}
|
||||
Message::DsToleranceMode(mode) => {
|
||||
self.ds_dimlim = mode == "limits";
|
||||
self.ds_dimtol = matches!(mode.as_str(), "symmetrical" | "deviation");
|
||||
if mode == "symmetrical" {
|
||||
self.ds_dimtm = self.ds_dimtp.clone();
|
||||
}
|
||||
let gap = self.ds_dimgap.trim().parse::<f64>().unwrap_or(0.625).abs();
|
||||
self.ds_dimgap = if mode == "basic" {
|
||||
format!("-{}", gap.max(f64::EPSILON))
|
||||
} else {
|
||||
format!("{}", gap)
|
||||
};
|
||||
Task::none()
|
||||
}
|
||||
Message::DsZeroBase(field, base) => {
|
||||
let current = match &field {
|
||||
crate::app::DsField::Dimzin => &self.ds_dimzin,
|
||||
crate::app::DsField::Dimaltz => &self.ds_dimaltz,
|
||||
crate::app::DsField::Dimalttz => &self.ds_dimalttz,
|
||||
crate::app::DsField::Dimtzin => &self.ds_dimtzin,
|
||||
_ => return Task::none(),
|
||||
}
|
||||
.trim()
|
||||
.parse::<i16>()
|
||||
.unwrap_or(0);
|
||||
self.apply_ds_edit(field, ((current & !3) | (base & 3)).to_string());
|
||||
Task::none()
|
||||
}
|
||||
Message::DsZeroFlag(field, bit) => {
|
||||
let current = match &field {
|
||||
crate::app::DsField::Dimzin => &self.ds_dimzin,
|
||||
crate::app::DsField::Dimaltz => &self.ds_dimaltz,
|
||||
crate::app::DsField::Dimalttz => &self.ds_dimalttz,
|
||||
crate::app::DsField::Dimtzin => &self.ds_dimtzin,
|
||||
_ => return Task::none(),
|
||||
}
|
||||
.trim()
|
||||
.parse::<i16>()
|
||||
.unwrap_or(0);
|
||||
self.apply_ds_edit(field, (current ^ bit).to_string());
|
||||
Task::none()
|
||||
}
|
||||
Message::DsCenterMarkMode(mode) => {
|
||||
let size = self.ds_dimcen.trim().parse::<f64>().unwrap_or(0.09).abs();
|
||||
self.ds_dimcen = match mode.as_str() {
|
||||
"mark" => size.max(f64::EPSILON).to_string(),
|
||||
"lines" => format!("-{}", size.max(f64::EPSILON)),
|
||||
_ => "0".to_string(),
|
||||
};
|
||||
Task::none()
|
||||
}
|
||||
Message::DsColorMore(field) => {
|
||||
|
||||
+140
-9
@@ -22,6 +22,91 @@ use iced::{mouse, Point, Task};
|
||||
|
||||
|
||||
impl OpenCADStudio {
|
||||
pub(in crate::app) fn mlstyle_mut(
|
||||
&mut self,
|
||||
tab: usize,
|
||||
) -> Option<&mut acadrust::objects::MLineStyle> {
|
||||
use acadrust::objects::ObjectType;
|
||||
let name = self.mlstyle_selected.clone();
|
||||
self.tabs[tab]
|
||||
.scene
|
||||
.document
|
||||
.objects
|
||||
.values_mut()
|
||||
.find_map(|object| match object {
|
||||
ObjectType::MLineStyle(style) if style.name == name => Some(style),
|
||||
_ => None,
|
||||
})
|
||||
}
|
||||
|
||||
pub(in crate::app) fn load_mlstyle_bufs(&mut self, tab: usize) {
|
||||
use acadrust::objects::ObjectType;
|
||||
let name = self.mlstyle_selected.clone();
|
||||
let Some((description, start_angle, end_angle, fill_color, elements)) = self.tabs[tab]
|
||||
.scene
|
||||
.document
|
||||
.objects
|
||||
.values()
|
||||
.find_map(|object| match object {
|
||||
ObjectType::MLineStyle(style) if style.name == name => Some((
|
||||
style.description.clone(),
|
||||
style.start_angle.to_degrees(),
|
||||
style.end_angle.to_degrees(),
|
||||
style.fill_color.index().unwrap_or(256),
|
||||
style
|
||||
.elements
|
||||
.iter()
|
||||
.map(|element| {
|
||||
[
|
||||
format!("{}", element.offset),
|
||||
element.color.index().unwrap_or(256).to_string(),
|
||||
element.linetype.clone(),
|
||||
]
|
||||
})
|
||||
.collect::<Vec<_>>(),
|
||||
)),
|
||||
_ => None,
|
||||
})
|
||||
else {
|
||||
return;
|
||||
};
|
||||
self.mln_description = description;
|
||||
self.mln_start_angle = format!("{start_angle:.4}");
|
||||
self.mln_end_angle = format!("{end_angle:.4}");
|
||||
self.mln_fill_color = fill_color.to_string();
|
||||
self.mln_elements = elements;
|
||||
}
|
||||
|
||||
pub(in crate::app) fn stage_mlstyle_bufs(&mut self) {
|
||||
let tab = self.active_tab;
|
||||
let description = self.mln_description.clone();
|
||||
let start_angle = self.mln_start_angle.trim().parse::<f64>().ok();
|
||||
let end_angle = self.mln_end_angle.trim().parse::<f64>().ok();
|
||||
let fill_color = self.mln_fill_color.trim().parse::<i16>().ok();
|
||||
let elements = self.mln_elements.clone();
|
||||
if let Some(style) = self.mlstyle_mut(tab) {
|
||||
style.description = description;
|
||||
if let Some(value) = start_angle {
|
||||
style.start_angle = value.to_radians();
|
||||
}
|
||||
if let Some(value) = end_angle {
|
||||
style.end_angle = value.to_radians();
|
||||
}
|
||||
if let Some(value) = fill_color {
|
||||
style.fill_color = acadrust::types::Color::from_index(value);
|
||||
}
|
||||
for (element, values) in style.elements.iter_mut().zip(elements) {
|
||||
if let Ok(value) = values[0].trim().parse::<f64>() {
|
||||
element.offset = value;
|
||||
}
|
||||
if let Ok(value) = values[1].trim().parse::<i16>() {
|
||||
element.color = acadrust::types::Color::from_index(value);
|
||||
}
|
||||
element.linetype = values[2].clone();
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
pub(in crate::app) fn tablestyle_mut(&mut self, tab: usize) -> Option<&mut acadrust::objects::TableStyle> {
|
||||
use acadrust::objects::ObjectType;
|
||||
let name = self.tablestyle_selected.clone();
|
||||
@@ -163,8 +248,8 @@ impl OpenCADStudio {
|
||||
self.mls_text_height = format!("{:.4}", s.text_height);
|
||||
self.mls_scale_factor = format!("{:.4}", s.scale_factor);
|
||||
self.mls_break_gap = format!("{:.4}", s.break_gap_size);
|
||||
self.mls_first_seg_angle = format!("{:.4}", s.first_segment_angle);
|
||||
self.mls_second_seg_angle = format!("{:.4}", s.second_segment_angle);
|
||||
self.mls_first_seg_angle = format!("{:.4}", s.first_segment_angle.to_degrees());
|
||||
self.mls_second_seg_angle = format!("{:.4}", s.second_segment_angle.to_degrees());
|
||||
self.mls_max_points = s.max_leader_points.to_string();
|
||||
self.mls_default_text = s.default_text.clone();
|
||||
self.mls_line_color = s
|
||||
@@ -184,7 +269,7 @@ impl OpenCADStudio {
|
||||
.index()
|
||||
.map(|c| c.to_string())
|
||||
.unwrap_or_default();
|
||||
self.mls_block_rotation = format!("{:.4}", s.block_content_rotation);
|
||||
self.mls_block_rotation = format!("{:.4}", s.block_content_rotation.to_degrees());
|
||||
self.mls_block_scale_x = format!("{:.4}", s.block_content_scale_x);
|
||||
self.mls_block_scale_y = format!("{:.4}", s.block_content_scale_y);
|
||||
self.mls_block_scale_z = format!("{:.4}", s.block_content_scale_z);
|
||||
@@ -273,6 +358,20 @@ impl OpenCADStudio {
|
||||
|
||||
pub(in crate::app) fn apply_dimstyle_bufs(&mut self, tab: usize) {
|
||||
let doc = &mut self.tabs[tab].scene.document;
|
||||
let read_only = doc
|
||||
.dim_styles
|
||||
.get(&self.dimstyle_selected)
|
||||
.is_some_and(|style| {
|
||||
style.xref_reference || style.xref_dependent || !style.xref_handle.is_null()
|
||||
});
|
||||
if read_only {
|
||||
return;
|
||||
}
|
||||
let text_style_handle = doc
|
||||
.text_styles
|
||||
.get(&self.ds_dimtxsty)
|
||||
.map(|style| style.handle)
|
||||
.unwrap_or(acadrust::types::Handle::NULL);
|
||||
let Some(ds) = doc.dim_styles.get_mut(&self.dimstyle_selected) else {
|
||||
return;
|
||||
};
|
||||
@@ -323,6 +422,7 @@ impl OpenCADStudio {
|
||||
ds.dimlim = self.ds_dimlim;
|
||||
ds.dimpost = self.ds_dimpost.clone();
|
||||
ds.dimtxsty = self.ds_dimtxsty.clone();
|
||||
ds.dimtxsty_handle = text_style_handle;
|
||||
ds.annotative = self.ds_annotative;
|
||||
set_i16!(dimclrd, self.ds_dimclrd);
|
||||
set_i16!(dimlwd, self.ds_dimlwd);
|
||||
@@ -392,7 +492,15 @@ impl OpenCADStudio {
|
||||
Dimlunit => self.ds_dimlunit = val,
|
||||
Dimdec => self.ds_dimdec = val,
|
||||
Dimpost => self.ds_dimpost = val,
|
||||
Dimtp => self.ds_dimtp = val,
|
||||
Dimtp => {
|
||||
let symmetrical = self.ds_dimtol
|
||||
&& !self.ds_dimlim
|
||||
&& self.ds_dimtp.trim() == self.ds_dimtm.trim();
|
||||
self.ds_dimtp = val.clone();
|
||||
if symmetrical {
|
||||
self.ds_dimtm = val;
|
||||
}
|
||||
}
|
||||
Dimtm => self.ds_dimtm = val,
|
||||
Dimtdec => self.ds_dimtdec = val,
|
||||
Dimtfac => self.ds_dimtfac = val,
|
||||
@@ -518,6 +626,9 @@ pub(super) fn on_text_style_dialog_open(&mut self) -> Task<Message> {
|
||||
let bigfont = self.textstyle_bigfont.clone();
|
||||
let ttf = self.textstyle_ttf.clone();
|
||||
if let Some(s) = self.tabs[i].scene.document.text_styles.get_mut(&name) {
|
||||
if s.xref_dependent {
|
||||
return;
|
||||
}
|
||||
s.font_file = font;
|
||||
s.big_font_file = bigfont;
|
||||
s.true_type_font = ttf;
|
||||
@@ -629,6 +740,7 @@ pub(super) fn on_text_style_dialog_open(&mut self) -> Task<Message> {
|
||||
.unwrap_or_else(|| "Standard".to_string())
|
||||
};
|
||||
self.active_modal = Some(crate::app::ModalKind::MlStyle);
|
||||
self.load_mlstyle_bufs(i);
|
||||
self.style_stage_begin();
|
||||
Task::none()
|
||||
}
|
||||
@@ -818,7 +930,10 @@ pub(super) fn on_text_style_dialog_open(&mut self) -> Task<Message> {
|
||||
pub(super) fn on_mleader_style_set_handle(&mut self, field: &'static str, value: String) -> Task<Message> {
|
||||
let i = self.active_tab;
|
||||
let doc = &self.tabs[i].scene.document;
|
||||
let handle: Option<acadrust::types::Handle> = if value == "None" {
|
||||
let handle: Option<acadrust::types::Handle> = if value == "None"
|
||||
|| value == "ByBlock"
|
||||
|| value == "Closed filled"
|
||||
{
|
||||
None
|
||||
} else {
|
||||
match field {
|
||||
@@ -897,10 +1012,10 @@ pub(super) fn on_text_style_dialog_open(&mut self) -> Task<Message> {
|
||||
s.break_gap_size = v;
|
||||
}
|
||||
if let Some(v) = fsa {
|
||||
s.first_segment_angle = v;
|
||||
s.first_segment_angle = v.to_radians();
|
||||
}
|
||||
if let Some(v) = ssa {
|
||||
s.second_segment_angle = v;
|
||||
s.second_segment_angle = v.to_radians();
|
||||
}
|
||||
if let Some(v) = mp {
|
||||
s.max_leader_points = v;
|
||||
@@ -920,7 +1035,7 @@ pub(super) fn on_text_style_dialog_open(&mut self) -> Task<Message> {
|
||||
s.block_content_color = acadrust::types::Color::from_index(v);
|
||||
}
|
||||
if let Some(v) = brot {
|
||||
s.block_content_rotation = v;
|
||||
s.block_content_rotation = v.to_radians();
|
||||
}
|
||||
if let Some(v) = bsx {
|
||||
s.block_content_scale_x = v;
|
||||
@@ -962,6 +1077,14 @@ pub(super) fn on_text_style_dialog_open(&mut self) -> Task<Message> {
|
||||
.unwrap_or_else(|| "Standard".to_string())
|
||||
};
|
||||
self.dimstyle_selected = selected.clone();
|
||||
self.dimstyle_compare = self.tabs[i]
|
||||
.scene
|
||||
.document
|
||||
.dim_styles
|
||||
.iter()
|
||||
.map(|style| style.name.clone())
|
||||
.find(|name| !name.eq_ignore_ascii_case(&selected))
|
||||
.unwrap_or_default();
|
||||
self.load_dimstyle_bufs(i);
|
||||
self.active_modal = Some(crate::app::ModalKind::DimStyle);
|
||||
self.style_stage_begin();
|
||||
@@ -1018,6 +1141,11 @@ pub(super) fn on_text_style_dialog_open(&mut self) -> Task<Message> {
|
||||
"dimltex_handle" | "dimltex1_handle" | "dimltex2_handle"
|
||||
);
|
||||
let doc = &self.tabs[i].scene.document;
|
||||
if doc.dim_styles.get(&name).is_some_and(|style| {
|
||||
style.xref_reference || style.xref_dependent || !style.xref_handle.is_null()
|
||||
}) {
|
||||
return Task::none();
|
||||
}
|
||||
let handle = if value == "Default" || value == "ByBlock" {
|
||||
acadrust::types::Handle::NULL
|
||||
} else if is_lt {
|
||||
@@ -1037,7 +1165,10 @@ pub(super) fn on_text_style_dialog_open(&mut self) -> Task<Message> {
|
||||
if let Some(ds) = self.tabs[i].scene.document.dim_styles.get_mut(&name) {
|
||||
match field {
|
||||
"dimblk" => ds.dimblk = handle,
|
||||
"dimblk1" => ds.dimblk1 = handle,
|
||||
"dimblk1" => {
|
||||
ds.dimblk1 = handle;
|
||||
ds.dimblk2 = handle;
|
||||
}
|
||||
"dimblk2" => ds.dimblk2 = handle,
|
||||
"dimldrblk" => ds.dimldrblk = handle,
|
||||
"dimltex_handle" => ds.dimltex_handle = handle,
|
||||
|
||||
Reference in new issue
Block a user