Menu Items¶
The popup contains five items in a fixed order. The first item (Refresh Module) is always enabled. The remaining four are disabled when Instance.LockUserSettings is True. The Publish Module… item additionally requires Instance.PublisherMode = True.
A separator (BeginGroup = True) divides Refresh Module from the rest, since the four items below are state-mutating.
Refresh Module¶
Re-runs the data fetch on every Pulse tab in the module that has RefreshWithModule = True. FCoreModule_Popup.vb — btnRefresh_ItemClick
For Each curTabPage As MyTabPage In curCoreModule.m_TabControl.TabPages
If curTabPage.RefreshWithModule Then
curTabPage.PulseContainer.RefreshAllBoxes()
End If
Next
This mirrors the per-module loop in Main.vb (around line 1484) used by the global btnRefresh.ItemClick.
Cursor handling
The handler wraps the loop in a Cursors.WaitCursor / Try…Finally so the cursor is always restored, even if a refresh throws.
Reset Module to Default Settings…¶
Restores the module's tabs to the default set held in `Instance.DefaultSaveAndShare`. The reset is destructive:
- Tabs not in the default set are **removed**.
- Tabs in the default set that don't exist locally are **added**.
- Existing tabs that match by name have their contents **reset** to defaults.
- Tab order is **rewritten** to match the order in `DefaultSaveAndShare`.
The handler asks for confirmation, and — if both Leahy Consulting defaults and company-specific defaults exist for the module — lets the user pick which set to use.
See [Reset Module Algorithm](../../reference/reset-algorithm/) for the full step-by-step walkthrough.
Save and Share Module…¶
Serializes the module's `CCoreModuleData` and opens the standard Save-and-Share dialog so the user can save it to disk or share it via the existing share mechanism. FCoreModule_Popup.vb — btnSaveAndShare_ItemClick
curCoreModule.Settings.RaiseOnDataSave()
Dim newSS As New SaveAndShare.CSaveAndShareFile
newSS.FileName = curCoreModule.ModuleInfo.ModuleCaption
newSS.SerialData = curCoreModule.Settings.m_SerialData
newSS.SettingsType = SaveAndShare.SettingsType.CORE_MODULE
newSS.ShowSaveAsForm(Activator.FindForm)
`RaiseOnDataSave()` runs first so `CCoreModuleData.m_BoxModuleTabs` reflects the current in-memory tab state before serialization. This is the same pattern used by the existing Save-and-Share-Tab handler in `FPulseTab_Popup`.
Publish Module…¶
Pushes the module to other users via `CPublishInfo_CSD_1` and the existing publish queue. FCoreModule_Popup.vb — btnPublish_ItemClick
curCoreModule.Settings.RaiseOnDataSave()
Dim newPF As New SaveAndShare.CPublishInfo_CSD_1(
curCoreModule.Settings.m_SerialData,
SaveAndShare.SettingsType.CORE_MODULE
)
newPF.PublishPolicy.PublishPolicyCode = SaveAndShare.PolicyCode.Everyone
newPF.PublishMap.Add("Module", curCoreModule.ModuleInfo.ModuleID)
newPF.ShowPublishForm(Instance.MainForm)
The `PublishMap("Module")` entry is the key the receiver uses to locate the right virtual file (`\<ModuleID>.core`). See [Publish/Receive Loop](../publish-receive-loop/) for the full round-trip.
Already enabled
The receiving side requires no new code. CPulseConnection.ProcessPublishQueue (line 909) already handles SettingsType.CORE_MODULE. See the linked page for details.
Load Module from File…¶
Loads a previously-saved `.pmod` file and replaces the current module's settings with it. The module's tab control is rebuilt by the existing `CCoreModule.Settings_DataLoadEnd` handler when `DataLoad` is raised. FCoreModule_Popup.vb — btnLoadFromFile_ItemClick (key steps)
Dim ssFile As SaveAndShareFile = FileIO.Functions.DeserializeFromBuffer(
buffer, FileIO.SerializationFlags.UseCompression)
Dim newCoreData As CCoreModuleData = FileIO.Functions.DeserializeFromBuffer(
ssFile.SaveAndShareData.ToArray, FileIO.SerializationFlags.UseCompression)
newCoreData = newCoreData.UpgradeSerialData
Activator.m_CoreModule.CoreModuleData = newCoreData
Activator.m_CoreModule.Settings.RaiseOnDataLoad()
Activator.m_CoreModule.m_TabControl.PerformLayout()
The handler:
1. Prompts for a file via `OpenFileDialog` (filter: `Pulse Module (*.pmod)`).
2. Reads the bytes and deserializes them as a `SaveAndShareFile`.
3. Confirms with the user that loading will replace all tabs in the current module.
4. Deserializes the inner `CCoreModuleData` and runs `UpgradeSerialData` to migrate any older schema.
5. Assigns it to `m_CoreModule.CoreModuleData` and raises `DataLoad`.
The existing `CCoreModule.Settings_DataLoadEnd` handler then disposes the inner `MyTabPage` instances and rebuilds them from `CoreModuleData.m_BoxModuleTabs`.
Destructive
The confirmation dialog is intentional — the load wipes out everything in the target module's m_TabControl.