feat(command-line): copy/clear history + selectable log (#232)
The command-line history dropdown was display-only, so users had to screenshot and OCR the log to report output. Make it copyable: - Render the whole backlog in one read-only text_editor so a single mouse drag selects across lines and Ctrl+C copies the span. - Add Copy (whole log to clipboard) and Clear buttons to the dropdown. - Gate the Ctrl+C/X/V accelerators on event Status::Ignored so a focused text widget's copy/cut/paste wins instead of firing COPYCLIP/CUTCLIP; the drawing's clipboard shortcuts still work when it has focus. Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
This commit is contained in:
parent
ada9952f06
commit
1e9de924be
6 changed files with 181 additions and 30 deletions
|
|
@ -1105,7 +1105,11 @@ impl OpenCADStudio {
|
|||
|| self.mtext_editor.as_ref().is_some_and(|e| e.show_preview)
|
||||
|| self.text_inline.is_some();
|
||||
let command_line_overlay =
|
||||
iced::widget::container(self.command_line.view(allow_autocomplete, dyn_capturing))
|
||||
iced::widget::container(self.command_line.view(
|
||||
allow_autocomplete,
|
||||
dyn_capturing,
|
||||
&self.history_content,
|
||||
))
|
||||
.width(Fill)
|
||||
.height(Fill)
|
||||
.align_x(iced::alignment::Horizontal::Center)
|
||||
|
|
@ -1583,9 +1587,21 @@ impl OpenCADStudio {
|
|||
"z" if !shift => Some(Message::Undo),
|
||||
"z" if shift => Some(Message::Redo),
|
||||
"y" => Some(Message::Redo),
|
||||
"c" => Some(Message::Command("COPYCLIP".to_string())),
|
||||
"x" => Some(Message::Command("CUTCLIP".to_string())),
|
||||
"v" => Some(Message::PasteShortcut),
|
||||
// Clipboard accelerators defer to a focused
|
||||
// text widget: when the command-line history
|
||||
// editor (or any text field) captures Ctrl+C/
|
||||
// X/V it copies/cuts/pastes its own text and
|
||||
// marks the event Captured, so we must NOT also
|
||||
// fire the drawing's COPYCLIP/CUTCLIP/paste.
|
||||
// Only when nothing captured (the drawing has
|
||||
// focus, status Ignored) do these run. (#232)
|
||||
"c" if status == Status::Ignored => {
|
||||
Some(Message::Command("COPYCLIP".to_string()))
|
||||
}
|
||||
"x" if status == Status::Ignored => {
|
||||
Some(Message::Command("CUTCLIP".to_string()))
|
||||
}
|
||||
"v" if status == Status::Ignored => Some(Message::PasteShortcut),
|
||||
_ => None,
|
||||
},
|
||||
// Printable glyphs are already handled by the
|
||||
|
|
|
|||
Loading…
Reference in a new issue