Skip to content

Windows: redraw, focus, MSI file count, Hill formula (#255 #256 #254 #247 #257) - #281

Merged
ohlincha merged 6 commits into
mainfrom
wip/windows-redraw
Oct 11, 2026
Merged

ohlincha merged 6 commits into
mainfrom
wip/windows-redraw

Conversation

@ohlincha

Copy link
Copy Markdown
Collaborator

Fixes from NerdEgg testing; opened to run the full CI matrix (incl. the MSI) before merging. Linux GUI tests run separately on radium.

🤖 Generated with Claude Code

andy and others added 6 commits October 11, 2026 08:37
…#255)

- A property panel is created hidden; a shown child of the frame sat at
  its (0,0), over the viewer, until wxAUI placed it.
- updatePanes() moves a pane's window off the frame before Update(),
  which shows it before it lays the frame out.
- On MSW the frame's children are held (BuilderRedrawHold) while a
  calculation opens and while a property panel is opened, folded or
  switched, so the right-hand column is drawn once, complete.
- A Builder started for a tool request (-pipe, no -context) is shown when
  the ecce_invoke with its calculation has been handled, not first with the
  empty default.  It is registered as a top shell only then: the dispatcher
  shows every top shell before it calls invokeMCB().  A 5 s timer shows it
  should the message not come.
- MoPanel fills its table and graph when it is first shown (initialize()
  now overrides PropertyPanel's); Create only clears the grids as before.
- tests/windows: framelog.ps1 samples in C# (10-20 a second; PowerShell
  took up to 0.5 s a sample), reads titles without waiting for a busy
  window, and -Dump saves every state seen as a PNG.  redraw_win.py drives
  the Organizer selection, the Viewer opened from the Organizer and its
  property switches, and the Organizer's prompts through the test hooks;
  movewin.ps1 moves a window out of the photographed area.

NerdEgg (Windows 10), Viewer opened from the Organizer on an ECCE-QM water
run: before, 21 screen states, the empty Builder first and three panels
drawn at the top-left over the molecule; after, the window fades in with
its final layout and the molecule follows (6 states).  Switching to
Mulliken Charges and MOs no longer draws the new panel at the corner.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
…256)

startDisabler() disabled every top-level window, the Organizer included.
On MSW disabling the active window hands the activation to the window
behind it, so Reset to Rerun, New Calculation and every other prompt shown
under the disabler came up behind another program until Windows gave the
focus back.  The disabler now skips the Organizer (wxWindowDisabler(this));
a modal dialog still disables it while it runs, and other ECCE windows are
disabled as before.  This covers every startDisabler() site at once (Delete,
Rename, the Run Mgmt resets, Mark, Import, New), so the pause around the
New Calculation name prompt (9a5ebca) is removed.

Test command "rmtask URL LABEL" runs a Run Mgmt item as the menu does and
answers its prompt Cancel after 1.5 s (tests/windows/redraw_win.py).  On
NerdEgg the Organizer stayed the foreground window through Reset to Rerun
and New Calculation; the dialog reads "...rerun from the start." and
"Continue?" on separate lines.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Selecting a calculation replaced the summary pane control by control and
rebuilt the File, Go, Run Mgmt and Tools menus with nothing held back; on
MSW each step was painted (an empty pane, half of the fields, a tool button
as a grey square, a menu bar down to "File Edit").

- onSelectionChange() runs under a wxWindowUpdateLocker on the frame and
  one on the menu bar, which is not one of the frame's children and is
  redrawn by wxMSW for every menu item added or removed.
- The Run Mgmt and Tools menus are enabled or disabled only when that
  changes.
- The rows of the old and new selection that stayed erased for ~0.3 s came
  from startDisabler() disabling the Organizer itself (the tree lost its
  focus while the summary loaded); fixed with #256.
- Test command "click URL" selects a row as a click does.

NerdEgg, four selections (tests/windows/redraw_win.py): before, the
summary pane went blank and was rebuilt in view; after, the new row is
highlighted and the complete summary follows, menu bar unchanged.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
…#247)

Calculations saved before 9a5ebca stored the formula with H first
(H8C3O3) while the Calculation Editor computes it (C3H8O3).  The
Organizer's summary and its table view now show the stored formula in
Hill order (C, H, then alphabetical; alphabetical without carbon),
TFormula::hillOrder(); a value that is not a formula is shown as stored.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Measured on a Windows 10 PC with Defender on, the beta.1 MSI (12 143 files,
12 193 components) installed in 66 s, 48 s of it copying files (~4 ms a
file) and 6 s registering components, and uninstalled in 104 s.  A plain
unzip of the same files took 28 s: the file count sets the time.

- bundle-tools.ps1 keeps only perl's core library (perl-core-only.pl,
  by Module::CoreList; Strawberry keeps newer dual-life core modules such
  as Socket in vendor\lib, so those stay) and drops .packlist files:
  12 150 -> 7 312 files in the tree, a plain copy 24-26 s -> 13 s.
- make-msi.ps1 makes one component per directory (642 instead of 12 193);
  the major upgrade is scheduled afterInstallValidate, so the old product
  is removed first and a directory's file list may change.

Checked on the pruned tree: perl -c of every script in scripts\, the local
job tests (launch_local.py complete and cancel) and an ECCE-QM water run
through the Organizer and Launcher.  The MSI itself was not built here (no
WiX on the test PC); the CI MSI job builds and tests it.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
@ohlincha
ohlincha merged commit d6d769a into main Oct 11, 2026
10 of 11 checks passed
ohlincha pushed a commit that referenced this pull request Oct 11, 2026
make-msi.ps1 used the prerelease number alone as the 4th version field,
so 9.0.0-beta.1 became 9.0.0.1 and showed in Apps & Features as older
than the 9.0.0-alpha.10 it replaced (9.0.0.10), seen on NerdEgg with the
CI MSI of PR #281. beta.N is now 100+N and rc.N 200+N; alphas and the
release (1000) keep their numbers. Upgrades are unaffected: Windows
Installer ignores the 4th field.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_014SPrko1Jrd4xN5RX5R5BUB
ohlincha pushed a commit that referenced this pull request Oct 11, 2026
On a fresh profile the Launcher fills Run Directory with ~/ecce-runs for
this computer, but only in the text box: the machine preferences that
Launch reads kept an empty run directory, so every first launch ended
with "Unable to 'cd' to run directory" (launch_rundir empty), for
ECCE-QM, MOPAC and ORCA alike, until the user edited the field. The
default is now also set in the preferences.

Found in the NerdEgg pass of the PR #281 MSI (fresh USERPROFILE); the
patched launcher.exe ran ECCE-QM water to Complete with no edit.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_014SPrko1Jrd4xN5RX5R5BUB
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant