diff --git a/locales/en-US/opencadstudio.ftl b/locales/en-US/opencadstudio.ftl index 03332480c..f4c81c0a9 100644 --- a/locales/en-US/opencadstudio.ftl +++ b/locales/en-US/opencadstudio.ftl @@ -2447,6 +2447,8 @@ properties = .associative = Associative .at-least = At least .attachment-type = Attachment type + .attachment = Attachment + .arrowhead-size = Arrowhead Size .attenuation = Attenuation .attribute-definition = Attribute Definition .attributedefinition = AttributeDefinition diff --git a/locales/tr-TR/opencadstudio.ftl b/locales/tr-TR/opencadstudio.ftl index 32ac287e0..51d0db147 100644 --- a/locales/tr-TR/opencadstudio.ftl +++ b/locales/tr-TR/opencadstudio.ftl @@ -2387,6 +2387,8 @@ properties = .associative = İlişkisel .at-least = En az .attachment-type = Bağlantı türü + .attachment = Bağlantı + .arrowhead-size = Ok Ucu Boyutu .attenuation = Zayıflama .attribute-definition = Öznitelik Tanımı .attributedefinition = Öznitelik Tanımı diff --git a/src/entities/multileader.rs b/src/entities/multileader.rs index 448cc67e0..4e80f01b8 100644 --- a/src/entities/multileader.rs +++ b/src/entities/multileader.rs @@ -905,9 +905,7 @@ fn properties(ml: &MultiLeader) -> Vec { // ── Leaders ────────────────────────────────────────────────────────── // Landing rows are folded in here: the standalone "Leader Structure" group // is a style-dialog tab, not a palette group. - let leaders = PropSection { - title: t!("Leaders").into_owned(), - props: vec![ + let mut leader_props = vec![ choice( t!("Leader type").as_ref(), "path_type", @@ -931,20 +929,27 @@ fn properties(ml: &MultiLeader) -> Vec { }, // Arrowhead block name resolved by the panel builder (default "Closed filled"). ro(t!("Arrowhead").as_ref(), "arrowhead_handle", "Closed filled"), - edit(t!("Arrowhead size").as_ref(), "arrowhead_size", ml.arrowhead_size), + edit(t!("Arrowhead Size").as_ref(), "arrowhead_size", ml.arrowhead_size), bool_toggle(t!("Horizontal Landing").as_ref(), "enable_dogleg", ml.enable_dogleg), num_row( t!("Landing distance").as_ref(), "landing_distance", - ml.dogleg_length, + if ml.enable_dogleg { ml.dogleg_length } else { 0.0 }, ml.enable_dogleg, ), - bool_toggle( - t!("Extend leader to text").as_ref(), + ]; + // The extension is an MText-only landing option. It is absent for block + // content and whenever the horizontal landing itself is disabled. + if ml.content_type == LeaderContentType::MText && ml.enable_dogleg { + leader_props.push(bool_toggle( + t!("Leader extension").as_ref(), "extend_leader_to_text", ml.extend_leader_to_text, - ), - ], + )); + } + let leaders = PropSection { + title: t!("Leaders").into_owned(), + props: leader_props, }; // ── Text (shown only for MText content) ────────────────────────────── @@ -958,11 +963,6 @@ fn properties(ml: &MultiLeader) -> Vec { }, // Text-style name resolved from text_style_handle by the panel builder. ro(t!("Text style").as_ref(), "text_style_handle", "Standard"), - Property { - label: t!("Text color").into_owned(), - field: "text_color", - value: PropValue::ColorChoice(ml.text_color), - }, choice( t!("Justify").as_ref(), "text_alignment", @@ -995,40 +995,6 @@ fn properties(ml: &MultiLeader) -> Vec { "background_fill_enabled", ctx.background_fill_enabled, ), - if ctx.background_fill_enabled { - bool_toggle( - t!("Use drawing background color").as_ref(), - "background_mask_fill_on", - ctx.background_mask_fill_on, - ) - } else { - ro( - t!("Use drawing background color").as_ref(), - "background_mask_fill_on", - if ctx.background_mask_fill_on { "Yes" } else { "No" }, - ) - }, - Property { - label: t!("Background mask color").into_owned(), - field: "background_fill_color", - value: if ctx.background_fill_enabled && !ctx.background_mask_fill_on { - PropValue::ColorChoice(ctx.background_fill_color) - } else { - PropValue::ReadOnly(format!("{:?}", ctx.background_fill_color)) - }, - }, - num_row( - t!("Border offset factor").as_ref(), - "background_scale_factor", - ctx.background_scale_factor, - ctx.background_fill_enabled, - ), - num_row( - t!("Background transparency").as_ref(), - "background_transparency", - ctx.background_transparency as f64, - ctx.background_fill_enabled, - ), choice( t!("Attachment type").as_ref(), "text_attachment_direction", @@ -1087,7 +1053,7 @@ fn properties(ml: &MultiLeader) -> Vec { hexh(ml.block_content_handle), ), choice( - t!("Block connection").as_ref(), + t!("Attachment").as_ref(), "block_connection_type", match ml.block_connection_type { BlockContentConnectionType::BasePoint => "Insertion point", @@ -1095,17 +1061,7 @@ fn properties(ml: &MultiLeader) -> Vec { }, &["Extents", "Insertion point"], ), - Property { - label: t!("Block color").into_owned(), - field: "block_content_color", - value: PropValue::ColorChoice(ml.block_content_color), - }, - edit(t!("Block scale").as_ref(), "block_scale", ml.block_scale.x), - edit( - t!("Block rotation").as_ref(), - "block_rotation", - ml.block_rotation.to_degrees(), - ), + edit(t!("Scale").as_ref(), "block_scale", ml.block_scale.x), ], }; @@ -1409,6 +1365,11 @@ fn apply_geom_prop(ml: &mut MultiLeader, field: &str, value: &str) { "Vertical" => TextAttachmentDirectionType::Vertical, _ => TextAttachmentDirectionType::Horizontal, }; + if ml.text_attachment_direction == TextAttachmentDirectionType::Vertical { + ml.enable_dogleg = false; + ml.property_override_flags + .insert(MultiLeaderPropertyOverrideFlags::ENABLE_DOGLEG); + } for root in &mut ml.context.leader_roots { root.text_attachment_direction = ml.text_attachment_direction; } diff --git a/src/locale_catalog.rs b/src/locale_catalog.rs index 92147a70e..f86fcc48e 100644 --- a/src/locale_catalog.rs +++ b/src/locale_catalog.rs @@ -325,6 +325,7 @@ pub(super) fn message_attribute(source: &str) -> Option<(&'static str, &'static "Arrow size (DIMASZ)" => Some(("styles", "arrow-size-dimasz")), "Arrowhead" => Some(("common", "arrowhead")), "Arrowhead (DIMBLK)" => Some(("styles", "arrowhead-dimblk")), + "Arrowhead Size" => Some(("properties", "arrowhead-size")), "Arrowhead block:" => Some(("styles", "arrowhead-block")), "Arrowhead size" => Some(("common", "arrowhead-size")), "Arrowhead size:" => Some(("styles", "arrowhead-size")), @@ -332,6 +333,7 @@ pub(super) fn message_attribute(source: &str) -> Option<(&'static str, &'static "Arrows out first" => Some(("styles", "arrows-out-first")), "As displayed" => Some(("common", "as-displayed")), "Associative" => Some(("properties", "associative")), + "Attachment" => Some(("properties", "attachment")), "At first ext" => Some(("styles", "at-first-ext")), "At least" => Some(("properties", "at-least")), "At second ext" => Some(("styles", "at-second-ext")),