forked from 1b-agent/opencadstudio-upstream
WIP count: automation, locales
This commit is contained in:
1 parent
e29b408bda
commit
f76b6cb3bb
25 files changed
+445
-3
No files matched your search
@@ -73,6 +73,7 @@ pub(super) const NAMES: &[&str] = &[
|
||||
"pdf_layer_toggle",
|
||||
"pc_manager_toggle",
|
||||
"pc_manager",
|
||||
"count_palette",
|
||||
"blocks_palette",
|
||||
"pdf_page_select",
|
||||
"pc_colormap",
|
||||
@@ -813,6 +814,74 @@ impl OpenCADStudio {
|
||||
}
|
||||
// Point Cloud Manager tree: "search=<text>", "collapse", "expand",
|
||||
// "toggle_node=<key>" or "select=<key>".
|
||||
// Count palette and count mode: "search=<text>", "sort=name|count",
|
||||
// "open=NAME", "child=NAME:<n>" (an expanded row), "menu=<review|field|
|
||||
// layer|scale|mirror>:NAME", "create_table", "check=NAME:1",
|
||||
// "all=1", "table_cancel", "table_insert", "back", "match=<0|1|2>:1",
|
||||
// "details", "errors", "error=<n>", "area", "prev", "next", "select",
|
||||
// "field", "close".
|
||||
"count_palette" => {
|
||||
use crate::ui::window::count_palette::{CountMsg as M, RowAction};
|
||||
let value = string(req, "value")?;
|
||||
let (key, arg) = value.split_once('=').unwrap_or((value, ""));
|
||||
let flag = |s: &str| s == "1" || s.eq_ignore_ascii_case("true");
|
||||
let bad = || failure("invalid_value", "Unknown count palette edit");
|
||||
Message::Count(match key {
|
||||
"search" => M::Search(arg.into()),
|
||||
"sort" => M::Sort(arg == "count"),
|
||||
"open" => M::Open(arg.into(), codec::count::CountKey::default()),
|
||||
"child" => {
|
||||
let (name, n) = arg.rsplit_once(':').ok_or_else(bad)?;
|
||||
let n: usize = n.parse().map_err(|_| bad())?;
|
||||
let [l, s, m] = self.count_palette.expansion(name).ok_or_else(bad)?;
|
||||
let i = self.active_tab;
|
||||
let area = self.tabs[i].count.as_ref().and_then(|c| c.area.clone());
|
||||
let instances = codec::count::block_instances(&self.tabs[i].scene.document, area.as_deref());
|
||||
let (k, _) = codec::count::expanded_counts(&instances, name, l, s, m).into_iter().nth(n).ok_or_else(bad)?;
|
||||
M::Open(name.into(), k)
|
||||
}
|
||||
"menu" => {
|
||||
let (action, name) = arg.split_once(':').ok_or_else(bad)?;
|
||||
let action = match action {
|
||||
"review" => RowAction::Review,
|
||||
"field" => RowAction::Field,
|
||||
"layer" => RowAction::Expand(0),
|
||||
"scale" => RowAction::Expand(1),
|
||||
"mirror" => RowAction::Expand(2),
|
||||
_ => return Err(bad()),
|
||||
};
|
||||
M::Menu(name.into(), codec::count::CountKey::default(), action)
|
||||
}
|
||||
"create_table" => M::CreateTable,
|
||||
"check" => {
|
||||
let (name, on) = arg.rsplit_once(':').unwrap_or((arg, "1"));
|
||||
M::TableCheck(name.into(), flag(on))
|
||||
}
|
||||
"all" => M::TableAll(flag(arg)),
|
||||
"table_cancel" => M::TableCancel,
|
||||
"table_insert" => M::TableInsert,
|
||||
"back" => M::Back,
|
||||
"match" => {
|
||||
let (k, on) = arg.split_once(':').unwrap_or((arg, "1"));
|
||||
M::Match(k.parse::<usize>().ok().filter(|k| *k < 3).ok_or_else(bad)?, flag(on))
|
||||
}
|
||||
"details" => M::ToggleDetails,
|
||||
"errors" => M::ToggleErrors,
|
||||
"error" => {
|
||||
let i = self.active_tab;
|
||||
let n: usize = arg.parse().map_err(|_| bad())?;
|
||||
let mode = self.tabs[i].count.as_ref().ok_or_else(bad)?;
|
||||
M::ShowError(*mode.result(&self.tabs[i].scene.document).errors.get(n).ok_or_else(bad)?)
|
||||
}
|
||||
"area" => M::Area,
|
||||
"prev" => M::Prev,
|
||||
"next" => M::Next,
|
||||
"select" => M::Select,
|
||||
"field" => M::Field,
|
||||
"close" => M::Close,
|
||||
_ => return Err(bad()),
|
||||
})
|
||||
}
|
||||
"pc_manager" => {
|
||||
use crate::ui::window::pc_manager::PcManagerMsg as M;
|
||||
let value = string(req, "value")?;
|
||||
|
||||
@@ -5521,6 +5521,22 @@ pub(super) fn message_attribute(source: &str) -> Option<(&'static str, &'static
|
||||
"US Survey Feet" => Some(("common", "us-survey-feet")),
|
||||
"to layout" => Some(("common", "to-layout")),
|
||||
"{count} objects selected" => Some(("common", "count-objects-selected")),
|
||||
"Count palette" => Some(("count-feature", "palette")),
|
||||
"Count menu" => Some(("count-feature", "menu")),
|
||||
"Count Selection" => Some(("count-feature", "selection")),
|
||||
"Review Count Details" => Some(("count-feature", "review")),
|
||||
"Insert Count Field" => Some(("count-feature", "insert-field")),
|
||||
"EXPAND BY" => Some(("count-feature", "expand-by")),
|
||||
"Mirror State" => Some(("count-feature", "mirror-state")),
|
||||
"Count in a specified area" => Some(("count-feature", "area")),
|
||||
"Create Table" => Some(("count-feature", "create-table")),
|
||||
"Back to List" => Some(("count-feature", "back")),
|
||||
"Match Scale" => Some(("count-feature", "match-scale")),
|
||||
"Match Mirror State" => Some(("count-feature", "match-mirror")),
|
||||
"Count Error Report: {}" => Some(("count-feature", "error-report")),
|
||||
"Count: {}" => Some(("count-feature", "toolbar-count")),
|
||||
"Overlapping object" => Some(("count-feature", "overlap")),
|
||||
"Show Count Instances" => Some(("count-feature", "show-instances")),
|
||||
_ => None,
|
||||
}
|
||||
}
|
||||
@@ -4,7 +4,7 @@ pub const ICON: IconKind = IconKind::Svg(include_bytes!("../../../assets/icons/d
|
||||
pub fn tool() -> ToolDef {
|
||||
ToolDef {
|
||||
id: "COUNTLIST",
|
||||
label: "Count",
|
||||
label: "Count palette",
|
||||
icon: ICON,
|
||||
event: ModuleEvent::Command("_COUNTLISTTOGGLE".to_string()),
|
||||
}
|
||||
|
||||
@@ -334,7 +334,7 @@ fn list_view<'a>(palette: &'a CountPalette, instances: &[BlockInstance]) -> Elem
|
||||
let header = row![
|
||||
header_button(crate::t!("Name").into_owned(), !palette.by_count, palette.descending, CountMsg::Sort(false)),
|
||||
Space::new().width(Fill),
|
||||
header_button(crate::t!("Count column").into_owned(), palette.by_count, palette.descending, CountMsg::Sort(true)),
|
||||
header_button(crate::t!("Count").into_owned(), palette.by_count, palette.descending, CountMsg::Sort(true)),
|
||||
]
|
||||
.align_y(iced::Center);
|
||||
let mut list = column![].spacing(1);
|
||||
@@ -478,7 +478,7 @@ pub fn view<'a>(
|
||||
width: f32,
|
||||
auto_collapse: bool,
|
||||
) -> Element<'a, Message> {
|
||||
let title_bar = crate::ui::dock::title_bar(PanelId::Count, crate::t!("Count").into_owned(), auto_collapse);
|
||||
let title_bar = crate::ui::dock::title_bar(PanelId::Count, crate::t!("Count palette").into_owned(), auto_collapse);
|
||||
// ponytail: the list is recounted on every view; cache by geometry epoch
|
||||
// if very large drawings make the palette slow.
|
||||
let body = match mode {
|
||||
|
||||
Reference in new issue
Block a user