forked from 1b-agent/opencadstudio-upstream
feat(props): editable block Name row + collapsible XYZ groups
- Block reference Name (Misc) is editable: the dropdown re-points the insert to another definition; typing a new name renames the definition everywhere (record re-key, Block marker, every INSERT reference). Anonymous (*) and xref blocks stay read-only, with the same guards added to Scene::rename_block. - Custom single-control dropdown (text field + caret) built on the shared floating_below overlay so the list always opens downward, unlike iced's space-based menu placement. - Consecutive "<Base> X/Y/Z" rows (Position, Scale, Start, Center, ...) collapse into one expandable summary row across all entities; the expand state persists across rebuilds and selection changes. - The BEDIT block tab no longer offers the layout Rename/Delete context menu. Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
This commit is contained in:
1 parent
47f3409588
commit
b5dbef5776
10 files changed
+583
-51
No files matched your search
+17
-2
@@ -229,15 +229,30 @@ impl Scene {
|
||||
|
||||
/// Rename a block definition: re-key its record, update the Block marker's
|
||||
/// name, and repoint every INSERT that referenced the old name so all
|
||||
/// instances keep resolving. Returns false if `old` is missing, `new` is
|
||||
/// already taken, or the names are equal (case-insensitive). (#261)
|
||||
/// instances keep resolving. Returns false if `old` is missing or
|
||||
/// anonymous/xref, `new` is invalid or already taken, or the names are
|
||||
/// equal (case-insensitive). (#261)
|
||||
pub fn rename_block(&mut self, old: &str, new: &str) -> bool {
|
||||
if !crate::scene::valid_block_name(new) {
|
||||
return false;
|
||||
}
|
||||
if old.eq_ignore_ascii_case(new) {
|
||||
return false;
|
||||
}
|
||||
if self.document.block_records.get(new).is_some() {
|
||||
return false;
|
||||
}
|
||||
// Anonymous (*) names are program-owned and re-numbered on save; an
|
||||
// xref('|') symbol name is bound to the referenced file.
|
||||
if self
|
||||
.document
|
||||
.block_records
|
||||
.get(old)
|
||||
.map(|br| br.is_anonymous() || br.flags.is_xref || br.name.contains('|'))
|
||||
.unwrap_or(true)
|
||||
{
|
||||
return false;
|
||||
}
|
||||
let Some(mut br) = self.document.block_records.remove(old) else {
|
||||
return false;
|
||||
};
|
||||
|
||||
Reference in new issue
Block a user