Feature Overview¶
Motivation¶
Two tab levels exist in the Pulse Dashboard:
- Core module tabs live in
tcMain(the main form's outer tab control). Each one is an Executive / Financial / Customer Service / Sales & Marketing / Inventory / Purchasing / Production / MRP / Analytical Dashboard module. - Pulse reporting tabs live inside each core module's inner
MyTabControl. Each one is a single dashboard.
Pulse reporting tabs already had a fully-featured right-click context menu on their headers, served by FPulseTab_Popup and wired through MyTabPage.DefinePopContextMenu. The actions exposed there (move tab left/right, clone tab, delete tab, save & share tab, etc.) make sense at the tab level.
Before this change, right-clicking a core module tab header in tcMain would either show nothing or — depending on layout state — show the Pulse reporting tab popup. Either way it was wrong: the actions on offer applied to a single tab, not to a whole module.
Before / after¶
Right-click on a core module tab header → either nothing happens, or the Pulse-tab popup appears with mostly-irrelevant options (Move Tab Left, Delete Tab, etc.) that operate on a non-existent active tab.
Right-click on a core module tab header → a dedicated module-level popup appears with five items:
- Refresh Module
- Reset Module to Default Settings…
- Save and Share Module…
- Publish Module…
- Load Module from File…
The popup caption shows Module: <module name> so the user can confirm which module they're acting on.
Design constraints¶
The implementation follows three constraints set by the existing codebase:
- Mirror the existing Pulse tab popup pattern. The Pulse popup uses a
Shared(singleton) form whosePopupMenu1is reused for every tab. The core module popup follows the same singleton pattern. - Don't break the Pulse tab popup. All dispatch happens inside
MyTabPage.ShowContextMenu. The existing Pulse path is left intact — the new branch only fires whenPageType = ePageType.CORE_MODULE. - Reuse existing infrastructure. No new save/share or publish plumbing was added.
Save and Share Moduleproduces aCSaveAndShareFilewithSettingsType.CORE_MODULE, whichCPulseConnection.ProcessPublishQueuealready knows how to handle on the receiving side.
Surface of change¶
| Layer | Change |
|---|---|
| UI | New context menu on core module tab headers |
| Form | FCoreModule_Popup — empty stub replaced with full code-behind |
| Designer | FCoreModule_Popup.Designer.vb — two new bar buttons, repaired LinksPersistInfo |
| Tab routing | MyTabPage.ShowContextMenu — branches on PageType |
| Tab routing (bug) | MyTabControl.HandletabMouseClick — early-exit guard removed |