SuperScriptMaterializer/SuperScriptMaterializer/vt_menu.cpp
yyc12345 9cd2f93b8b fix something
- use index to accelerate generate
- fix auto suffix problem
- improve progrssbar
2020-06-21 21:54:07 +08:00

135 lines
3.7 KiB
C++

#include "vt_menu.h"
#include "database.h"
#include "script_export.h"
#include "env_export.h"
extern PluginInterface* s_Plugininterface;
CMenu* s_MainMenu = NULL;
void PluginCallback(PluginInfo::CALLBACK_REASON reason, PluginInterface* plugininterface) {
switch (reason) {
case PluginInfo::CR_LOAD:
{
s_Plugininterface = plugininterface;
InitMenu();
UpdateMenu();
}break;
case PluginInfo::CR_UNLOAD:
{
RemoveMenu();
s_Plugininterface = NULL;
}break;
case PluginInfo::CR_NEWCOMPOSITIONNAME:
{
}break;
case PluginInfo::CR_NOTIFICATION:
{
}break;
}
}
void InitMenu() {
if (!s_Plugininterface)
return;
s_MainMenu = s_Plugininterface->AddPluginMenu("Super Script Materializer", 20, NULL, (VoidFunc1Param)PluginMenuCallback);
}
void RemoveMenu() {
if (!s_Plugininterface || !s_MainMenu)
return;
s_Plugininterface->RemovePluginMenu(s_MainMenu);
}
void UpdateMenu() {
s_Plugininterface->ClearPluginMenu(s_MainMenu); //clear menu
s_Plugininterface->AddPluginMenuItem(s_MainMenu, 0, "Export all scripts");
s_Plugininterface->AddPluginMenuItem(s_MainMenu, 1, "Export environment");
//===========================freeze chirs241097 code for future expand
//s_Plugininterface->AddPluginMenuItem(s_MainMenu, -1, NULL, TRUE);
////note : sub menu must have independent command ids that must be >=0
//CMenu* sub0 = s_Plugininterface->AddPluginMenuItem(s_MainMenu, 0, "Fsck /dev/sdb", FALSE, TRUE);//bb manipulation
//s_Plugininterface->AddPluginMenuItem(sub0, 1, "Fsck /dev/sdb1");//modify bb proto
//s_Plugininterface->AddPluginMenuItem(sub0, 2, "Fsck /dev/sdb2");//not implemented
//s_Plugininterface->AddPluginMenuItem(s_MainMenu, -1, NULL, TRUE);
//s_Plugininterface->AddPluginMenuItem(s_MainMenu, 10, "Exit Fsck");
s_Plugininterface->UpdatePluginMenu(s_MainMenu); //update menu,always needed when you finished to update the menu
//unless you want the menu not to have Virtools Dev main menu color scheme.
}
void PluginMenuCallback(int commandID) {
AFX_MANAGE_STATE(AfxGetStaticModuleState());
CKContext* ctx = s_Plugininterface->GetCKContext();
OPENFILENAME ofn;
char* file = (char*)malloc(1024 * sizeof(char));
ZeroMemory(&ofn, sizeof(OPENFILENAME));
ofn.lStructSize = sizeof(OPENFILENAME);
ofn.lpstrFile = file;
ofn.lpstrFile[0] = '\0';
ofn.nMaxFile = 1024;
ofn.lpstrFilter = "Database file(*.db)\0*.db\0";
ofn.lpstrDefExt = "db";
ofn.lpstrFileTitle = NULL;
ofn.nMaxFileTitle = 0;
ofn.lpstrInitialDir = NULL;
ofn.Flags = OFN_EXPLORER;
if (GetSaveFileName(&ofn)) {
//make sure file is not exist
DeleteFile(file);
//switch mode
switch (commandID) {
case 0:
{
//init resources
scriptDatabase* _db = new scriptDatabase();
dbScriptDataStructHelper* _helper = new dbScriptDataStructHelper();
_db->open(file);
_helper->init(ctx->GetParameterManager());
//iterate item
IterateScript(ctx, _db, _helper);
//close all resources
_helper->dispose();
_db->close();
delete _helper;
delete _db;
}
break;
case 1:
{
//init
envDatabase* _db = new envDatabase();
dbEnvDataStructHelper* _helper = new dbEnvDataStructHelper();
_db->open(file);
_helper->init();
//iterate parameter operation/param
IterateParameterOperation(ctx->GetParameterManager(), _db, _helper);
IterateParameter(ctx->GetParameterManager(), _db, _helper);
IterateMessage(ctx->GetMessageManager(), _db, _helper);
IterateAttribute(ctx->GetAttributeManager(), _db, _helper);
IteratePlugin(CKGetPluginManager(), _db, _helper);
//release all
_helper->dispose();
_db->close();
delete _helper;
delete _db;
}
break;
}
ctx->OutputToConsole("[Super Script Materializer] Done");
}
free(file);
}