feat: add Report/About/Changelog buttons to Support ribbon group

- REPORT opens GitHub new-issue page
- ABOUT opens a dialog window with version, OS and arch info + Copy Info button
- CHANGELOG opens GitHub releases page
- Fix Windows build: add windows-sys as target-specific dependency for PRINT command

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
This commit is contained in:
Hakan Seven 2026-04-22 22:22:33 +03:00
commit 070ad1f9c5
15 changed files with 222 additions and 0 deletions

View file

@ -2042,6 +2042,20 @@ impl H7CAD {
self.command_line.push_info("Opening Patreon page...");
}
"REPORT" => {
let _ = open::that("https://github.com/HakanSeven12/H7CAD/issues/new");
self.command_line.push_info("Opening GitHub issue page...");
}
"ABOUT" => {
return Task::done(Message::AboutOpen);
}
"CHANGELOG" => {
let _ = open::that("https://github.com/HakanSeven12/H7CAD/releases");
self.command_line.push_info("Opening release notes...");
}
// ── Keyboard Shortcuts panel ──────────────────────────────────
cmd if cmd == "SHORTCUTS" || cmd.starts_with("SHORTCUTS ") => {
let raw_rest = cmd.trim_start_matches("SHORTCUTS").trim();

View file

@ -68,6 +68,7 @@ pub(super) struct H7CAD {
plotstyle_window: Option<window::Id>,
dimstyle_window: Option<window::Id>,
shortcuts_window: Option<window::Id>,
about_window: Option<window::Id>,
/// In-memory clipboard: cloned entities waiting to be pasted.
clipboard: Vec<acadrust::EntityType>,
/// Centroid of the clipboard entities (XZ plane, Y-up).
@ -372,6 +373,9 @@ pub enum Message {
ShortcutsPanelOpen,
#[allow(dead_code)]
ShortcutsPanelClose,
// ── About window ────────────────────────────────────────────────────
AboutOpen,
AboutCopyInfo,
/// Close the viewport right-click context menu without performing any action.
ViewportContextMenuClose,
/// A window was closed by the OS (e.g. the user clicked the title-bar ✕).
@ -552,6 +556,7 @@ impl H7CAD {
plotstyle_window: None,
dimstyle_window: None,
shortcuts_window: None,
about_window: None,
clipboard: Vec::new(),
clipboard_centroid: glam::Vec3::ZERO,
layout_context_menu: None,
@ -644,6 +649,7 @@ pub fn run() -> iced::Result {
if Some(window_id) == state.plotstyle_window { return "Plot Style Table Editor".into(); }
if Some(window_id) == state.dimstyle_window { return "Dimension Style Manager".into(); }
if Some(window_id) == state.shortcuts_window { return "Keyboard Shortcuts".into(); }
if Some(window_id) == state.about_window { return "About H7CAD".into(); }
if let Some(tab) = state.tabs.get(state.active_tab) {
let dot = if tab.dirty { "● " } else { "" };
let name = tab.tab_display_name();

View file

@ -704,6 +704,7 @@ impl H7CAD {
if self.plotstyle_window == Some(id) { self.plotstyle_window = None; }
if self.dimstyle_window == Some(id) { self.dimstyle_window = None; }
if self.shortcuts_window == Some(id) { self.shortcuts_window = None; }
if self.about_window == Some(id) { self.about_window = None; }
Task::none()
}
@ -2502,6 +2503,30 @@ impl H7CAD {
}
}
// ── About window ──────────────────────────────────────────────
Message::AboutOpen => {
if let Some(id) = self.about_window {
return window::gain_focus(id);
}
let (id, task) = window::open(window::Settings {
size: iced::Size::new(340.0, 240.0),
resizable: false,
..Default::default()
});
self.about_window = Some(id);
task.map(|_| Message::Noop)
}
Message::AboutCopyInfo => {
let info = format!(
"H7CAD v{}\nOS: {}\nArch: {}",
env!("CARGO_PKG_VERSION"),
std::env::consts::OS,
std::env::consts::ARCH,
);
iced::clipboard::write(info)
}
Message::ViewportContextMenuClose => {
let i = self.active_tab;
self.tabs[i].scene.selection.borrow_mut().context_menu = None;

View file

@ -96,6 +96,9 @@ impl H7CAD {
if Some(window_id) == self.shortcuts_window {
return crate::ui::shortcuts::view_window(&self.shortcut_overrides);
}
if Some(window_id) == self.about_window {
return crate::ui::about::view_window();
}
let i = self.active_tab;
let tab = &self.tabs[i];