forked from 1b-agent/opencadstudio-upstream
Complete multileader creation and property behavior
This commit is contained in:
1 parent
ba91095bcf
commit
cce25be83a
13 files changed
+1306
-159
No files matched your search
@@ -2051,6 +2051,7 @@ pub(super) fn on_tab_close(&mut self, idx: usize) -> Task<Message> {
|
||||
| "text_style_handle"
|
||||
| "arrowhead_handle"
|
||||
| "line_type_handle"
|
||||
| "block_content_handle"
|
||||
) {
|
||||
// Resolve a picked name back to the handle the MLEADER
|
||||
// stores. The style/text-style rows keep their existing
|
||||
@@ -2096,6 +2097,11 @@ pub(super) fn on_tab_close(&mut self, idx: usize) -> Task<Message> {
|
||||
.map(|l| l.handle)
|
||||
}
|
||||
}
|
||||
"block_content_handle" => doc
|
||||
.block_records
|
||||
.iter()
|
||||
.find(|block| block.name == value)
|
||||
.map(|block| block.handle),
|
||||
_ => None,
|
||||
};
|
||||
for &handle in &handles {
|
||||
@@ -2119,10 +2125,52 @@ pub(super) fn on_tab_close(&mut self, idx: usize) -> Task<Message> {
|
||||
"text_style_handle" => {
|
||||
if let Some(h) = resolved {
|
||||
ml.text_style_handle = Some(h);
|
||||
ml.context.text_style_handle = Some(h);
|
||||
ml.property_override_flags.insert(
|
||||
acadrust::entities::MultiLeaderPropertyOverrideFlags::TEXT_STYLE,
|
||||
);
|
||||
}
|
||||
}
|
||||
"arrowhead_handle" => {
|
||||
ml.arrowhead_handle = resolved;
|
||||
for root in &mut ml.context.leader_roots {
|
||||
for line in &mut root.lines {
|
||||
line.arrowhead_handle = resolved;
|
||||
line.override_flags.insert(
|
||||
acadrust::entities::LeaderLinePropertyOverrideFlags::ARROWHEAD,
|
||||
);
|
||||
}
|
||||
}
|
||||
ml.property_override_flags.insert(
|
||||
acadrust::entities::MultiLeaderPropertyOverrideFlags::ARROWHEAD,
|
||||
);
|
||||
}
|
||||
"line_type_handle" => {
|
||||
ml.line_type_handle = resolved;
|
||||
for root in &mut ml.context.leader_roots {
|
||||
for line in &mut root.lines {
|
||||
line.line_type_handle = resolved;
|
||||
line.override_flags.insert(
|
||||
acadrust::entities::LeaderLinePropertyOverrideFlags::LINE_TYPE,
|
||||
);
|
||||
}
|
||||
}
|
||||
ml.property_override_flags.insert(
|
||||
acadrust::entities::MultiLeaderPropertyOverrideFlags::LEADER_LINE_TYPE,
|
||||
);
|
||||
}
|
||||
"block_content_handle" => {
|
||||
if let Some(block_handle) = resolved {
|
||||
ml.block_content_handle = Some(block_handle);
|
||||
ml.context.block_content_handle = Some(block_handle);
|
||||
ml.context.has_block_contents = true;
|
||||
ml.context.block_content_location =
|
||||
ml.context.content_base_point;
|
||||
ml.property_override_flags.insert(
|
||||
acadrust::entities::MultiLeaderPropertyOverrideFlags::BLOCK_CONTENT,
|
||||
);
|
||||
}
|
||||
}
|
||||
"arrowhead_handle" => ml.arrowhead_handle = resolved,
|
||||
"line_type_handle" => ml.line_type_handle = resolved,
|
||||
_ => {}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -4665,6 +4665,42 @@ impl OpenCADStudio {
|
||||
Task::none()
|
||||
}
|
||||
|
||||
Message::PropFieldLwChanged { field, value } => {
|
||||
let i = self.active_tab;
|
||||
let handles = self.property_target_handles(i);
|
||||
if handles.is_empty() {
|
||||
return Task::none();
|
||||
}
|
||||
self.push_undo_snapshot(i, "CHPROP");
|
||||
for &handle in &handles {
|
||||
if self.tabs[i].scene.is_layer_locked(handle) {
|
||||
continue;
|
||||
}
|
||||
if let Some(acadrust::EntityType::MultiLeader(leader)) =
|
||||
self.tabs[i].scene.document.get_entity_mut(handle)
|
||||
{
|
||||
if field == "line_weight" {
|
||||
leader.line_weight = value;
|
||||
leader.property_override_flags.insert(
|
||||
acadrust::entities::MultiLeaderPropertyOverrideFlags::LEADER_LINE_WEIGHT,
|
||||
);
|
||||
for root in &mut leader.context.leader_roots {
|
||||
for line in &mut root.lines {
|
||||
line.line_weight = value;
|
||||
line.override_flags.insert(
|
||||
acadrust::entities::LeaderLinePropertyOverrideFlags::LINE_WEIGHT,
|
||||
);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
self.invalidate_property_targets(i, &handles);
|
||||
self.tabs[i].dirty = true;
|
||||
self.refresh_properties();
|
||||
Task::none()
|
||||
}
|
||||
|
||||
Message::PropLinetypeChanged(lt) => {
|
||||
let i = self.active_tab;
|
||||
let handles = self.property_target_handles(i);
|
||||
@@ -5138,6 +5174,63 @@ impl OpenCADStudio {
|
||||
}
|
||||
return Task::none();
|
||||
}
|
||||
if matches!(
|
||||
field.as_str(),
|
||||
"line_color" | "text_color" | "block_content_color"
|
||||
| "background_fill_color"
|
||||
) {
|
||||
if !handles.is_empty() {
|
||||
self.push_undo_snapshot(i, "CHPROP");
|
||||
for &handle in &handles {
|
||||
if self.tabs[i].scene.is_layer_locked(handle) {
|
||||
continue;
|
||||
}
|
||||
if let Some(acadrust::EntityType::MultiLeader(leader)) =
|
||||
self.tabs[i].scene.document.get_entity_mut(handle)
|
||||
{
|
||||
match field.as_str() {
|
||||
"line_color" => {
|
||||
leader.line_color = color;
|
||||
leader.property_override_flags.insert(
|
||||
acadrust::entities::MultiLeaderPropertyOverrideFlags::LINE_COLOR,
|
||||
);
|
||||
for root in &mut leader.context.leader_roots {
|
||||
for line in &mut root.lines {
|
||||
line.line_color = color;
|
||||
line.override_flags.insert(
|
||||
acadrust::entities::LeaderLinePropertyOverrideFlags::LINE_COLOR,
|
||||
);
|
||||
}
|
||||
}
|
||||
}
|
||||
"text_color" => {
|
||||
leader.text_color = color;
|
||||
leader.context.text_color = color;
|
||||
leader.property_override_flags.insert(
|
||||
acadrust::entities::MultiLeaderPropertyOverrideFlags::TEXT_COLOR,
|
||||
);
|
||||
}
|
||||
"block_content_color" => {
|
||||
leader.block_content_color = color;
|
||||
leader.context.block_content_color = color;
|
||||
leader.property_override_flags.insert(
|
||||
acadrust::entities::MultiLeaderPropertyOverrideFlags::BLOCK_CONTENT_COLOR,
|
||||
);
|
||||
}
|
||||
"background_fill_color" => {
|
||||
leader.context.background_fill_color = color;
|
||||
}
|
||||
_ => {}
|
||||
}
|
||||
}
|
||||
}
|
||||
self.invalidate_property_targets(i, &handles);
|
||||
self.tabs[i].properties.open_color_field = None;
|
||||
self.tabs[i].dirty = true;
|
||||
self.refresh_properties();
|
||||
}
|
||||
return Task::none();
|
||||
}
|
||||
if matches!(
|
||||
field.as_str(),
|
||||
"tbl_cell_content_color" | "tbl_cell_background_color"
|
||||
|
||||
Reference in new issue
Block a user