mirror of
				https://github.com/davidgiven/fluxengine.git
				synced 2025-10-24 11:11:02 -07:00 
			
		
		
		
	Add a Disk menu.
This commit is contained in:
		| @@ -35,7 +35,7 @@ | |||||||
|  |  | ||||||
| using hex::operator""_lang; | using hex::operator""_lang; | ||||||
|  |  | ||||||
| static std::shared_ptr<const Disk> disk; | static std::shared_ptr<const Disk> disk = std::make_shared<Disk>(); | ||||||
| static std::shared_ptr<Image> wtImage; | static std::shared_ptr<Image> wtImage; | ||||||
|  |  | ||||||
| static std::deque<std::function<void()>> pendingTasks; | static std::deque<std::function<void()>> pendingTasks; | ||||||
|   | |||||||
| @@ -5,6 +5,7 @@ | |||||||
| #include <hex/api/content_registry/provider.hpp> | #include <hex/api/content_registry/provider.hpp> | ||||||
| #include <hex/api/workspace_manager.hpp> | #include <hex/api/workspace_manager.hpp> | ||||||
| #include <hex/helpers/default_paths.hpp> | #include <hex/helpers/default_paths.hpp> | ||||||
|  | #include <hex/helpers/fs.hpp> | ||||||
| #include <fonts/vscode_icons.hpp> | #include <fonts/vscode_icons.hpp> | ||||||
| #include <fonts/tabler_icons.hpp> | #include <fonts/tabler_icons.hpp> | ||||||
| #include <romfs/romfs.hpp> | #include <romfs/romfs.hpp> | ||||||
| @@ -66,10 +67,106 @@ IMHEX_PLUGIN_SETUP("FluxEngine", "David Given", "FluxEngine integration") | |||||||
|             hex::WorkspaceManager::switchWorkspace(currentWorkspaceName); |             hex::WorkspaceManager::switchWorkspace(currentWorkspaceName); | ||||||
|         }); |         }); | ||||||
|  |  | ||||||
|  |     hex::ContentRegistry::UserInterface::registerMainMenuItem( | ||||||
|  |         "fluxengine.menu.name", 4999); | ||||||
|  |  | ||||||
|  |     auto isReady = [] | ||||||
|  |     { | ||||||
|  |         return !Datastore::isBusy(); | ||||||
|  |     }; | ||||||
|  |  | ||||||
|  |     auto isReadyAndHasImage = [] | ||||||
|  |     { | ||||||
|  |         return !Datastore::isBusy() && Datastore::getDisk()->image; | ||||||
|  |     }; | ||||||
|  |  | ||||||
|     hex::ContentRegistry::UserInterface::addMenuItem( |     hex::ContentRegistry::UserInterface::addMenuItem( | ||||||
|         {"hex.builtin.menu.extras", "fluxengine.menu.tools.exerciser"}, |         {"fluxengine.menu.name", "fluxengine.view.controlpanel.readDevice"}, | ||||||
|  |         ICON_TA_DEVICE_FLOPPY, | ||||||
|  |         1000, | ||||||
|  |         hex::Shortcut::None, | ||||||
|  |         [] | ||||||
|  |         { | ||||||
|  |             Datastore::beginRead(false); | ||||||
|  |         }, | ||||||
|  |         isReady); | ||||||
|  |  | ||||||
|  |     hex::ContentRegistry::UserInterface::addMenuItem( | ||||||
|  |         {"fluxengine.menu.name", "fluxengine.view.controlpanel.rereadBad"}, | ||||||
|  |         ICON_TA_REPEAT, | ||||||
|  |         1100, | ||||||
|  |         hex::Shortcut::None, | ||||||
|  |         [] | ||||||
|  |         { | ||||||
|  |             Datastore::beginRead(true); | ||||||
|  |         }, | ||||||
|  |         isReadyAndHasImage); | ||||||
|  |  | ||||||
|  |     hex::ContentRegistry::UserInterface::addMenuItem( | ||||||
|  |         {"fluxengine.menu.name", "fluxengine.view.controlpanel.readImage"}, | ||||||
|  |         ICON_VS_FOLDER_OPENED, | ||||||
|  |         1200, | ||||||
|  |         hex::Shortcut::None, | ||||||
|  |         [] | ||||||
|  |         { | ||||||
|  |             hex::fs::openFileBrowser( | ||||||
|  |                 hex::fs::DialogMode::Open, {}, Datastore::readImage); | ||||||
|  |         }, | ||||||
|  |         isReady); | ||||||
|  |  | ||||||
|  |     hex::ContentRegistry::UserInterface::addMenuItem( | ||||||
|  |         {"fluxengine.menu.name", "fluxengine.view.controlpanel.createBlank"}, | ||||||
|  |         ICON_VS_FOLDER_OPENED, | ||||||
|  |         1250, | ||||||
|  |         hex::Shortcut::None, | ||||||
|  |         Datastore::createBlankImage, | ||||||
|  |         [] | ||||||
|  |         { | ||||||
|  |             return !Datastore::isBusy() && Datastore::canFormat(); | ||||||
|  |         }); | ||||||
|  |  | ||||||
|  |     hex::ContentRegistry::UserInterface::addMenuItemSeparator( | ||||||
|  |         {"fluxengine.menu.name"}, 1300); | ||||||
|  |  | ||||||
|  |     hex::ContentRegistry::UserInterface::addMenuItem( | ||||||
|  |         {"fluxengine.menu.name", "fluxengine.view.controlpanel.writeDevice"}, | ||||||
|  |         ICON_TA_DEVICE_FLOPPY, | ||||||
|  |         1400, | ||||||
|  |         hex::Shortcut::None, | ||||||
|  |         Datastore::beginWrite, | ||||||
|  |         isReadyAndHasImage); | ||||||
|  |  | ||||||
|  |     hex::ContentRegistry::UserInterface::addMenuItem( | ||||||
|  |         {"fluxengine.menu.name", "fluxengine.view.controlpanel.writeFlux"}, | ||||||
|  |         ICON_TA_DOWNLOAD, | ||||||
|  |         1500, | ||||||
|  |         hex::Shortcut::None, | ||||||
|  |         [] | ||||||
|  |         { | ||||||
|  |             hex::fs::openFileBrowser( | ||||||
|  |                 hex::fs::DialogMode::Save, {}, Datastore::writeFluxFile); | ||||||
|  |         }, | ||||||
|  |         isReady); | ||||||
|  |  | ||||||
|  |     hex::ContentRegistry::UserInterface::addMenuItem( | ||||||
|  |         {"fluxengine.menu.name", "fluxengine.view.controlpanel.writeImage"}, | ||||||
|  |         ICON_VS_SAVE_ALL, | ||||||
|  |         1600, | ||||||
|  |         hex::Shortcut::None, | ||||||
|  |         [] | ||||||
|  |         { | ||||||
|  |             hex::fs::openFileBrowser( | ||||||
|  |                 hex::fs::DialogMode::Save, {}, Datastore::writeImage); | ||||||
|  |         }, | ||||||
|  |         isReadyAndHasImage); | ||||||
|  |  | ||||||
|  |     hex::ContentRegistry::UserInterface::addMenuItemSeparator( | ||||||
|  |         {"fluxengine.menu.name"}, 9999); | ||||||
|  |  | ||||||
|  |     hex::ContentRegistry::UserInterface::addMenuItem( | ||||||
|  |         {"fluxengine.menu.name", "fluxengine.menu.disk.exerciser"}, | ||||||
|         ICON_TA_TOOLS, |         ICON_TA_TOOLS, | ||||||
|         2500, |         10000, | ||||||
|         hex::Shortcut::None, |         hex::Shortcut::None, | ||||||
|         [] |         [] | ||||||
|         { |         { | ||||||
|   | |||||||
| @@ -33,13 +33,13 @@ | |||||||
|     "fluxengine.view.physical.name": "FluxEngine physical sector map", |     "fluxengine.view.physical.name": "FluxEngine physical sector map", | ||||||
|  |  | ||||||
|     "fluxengine.view.controlpanel.name": "FluxEngine controls", |     "fluxengine.view.controlpanel.name": "FluxEngine controls", | ||||||
|     "fluxengine.view.controlpanel.readDevice": "Read", |     "fluxengine.view.controlpanel.readDevice": "Read from device", | ||||||
|     "fluxengine.view.controlpanel.writeDevice": "Write", |     "fluxengine.view.controlpanel.writeDevice": "Write to device", | ||||||
|     "fluxengine.view.controlpanel.writeFlux": "Write flux file", |     "fluxengine.view.controlpanel.writeFlux": "Write flux file", | ||||||
|     "fluxengine.view.controlpanel.readImage": "Load disk image", |     "fluxengine.view.controlpanel.readImage": "Load disk image", | ||||||
|     "fluxengine.view.controlpanel.writeImage": "Save disk image", |     "fluxengine.view.controlpanel.writeImage": "Save disk image", | ||||||
|     "fluxengine.view.controlpanel.rereadBad": "Re-read bad tracks", |     "fluxengine.view.controlpanel.rereadBad": "Re-read bad tracks", | ||||||
|     "fluxengine.view.controlpanel.createBlank": "Empty filesystem", |     "fluxengine.view.controlpanel.createBlank": "Make empty image", | ||||||
|     "fluxengine.view.controlpanel.stop": "Stop", |     "fluxengine.view.controlpanel.stop": "Stop", | ||||||
|  |  | ||||||
|     "fluxengine.view.log.name": "FluxEngine log viewer", |     "fluxengine.view.log.name": "FluxEngine log viewer", | ||||||
| @@ -58,5 +58,8 @@ | |||||||
|     "fluxengine.view.status.blankFilesystem": "Creating blank filesystem", |     "fluxengine.view.status.blankFilesystem": "Creating blank filesystem", | ||||||
|  |  | ||||||
|     "fluxengine.messages.writingFluxToFile": "The current configuration is to write to a flux file rather than to hardware. Is this what you intended?", |     "fluxengine.messages.writingFluxToFile": "The current configuration is to write to a flux file rather than to hardware. Is this what you intended?", | ||||||
|  |      | ||||||
|  |     "fluxengine.menu.name": "Disk", | ||||||
|  |     "fluxengine.menu.disk.exerciser": "Disk exerciser", | ||||||
|     "fluxengine.menu.workspace.reset": "Reset workspace" |     "fluxengine.menu.workspace.reset": "Reset workspace" | ||||||
| } | } | ||||||
|   | |||||||
		Reference in New Issue
	
	Block a user