diff --git a/materializer/CMakeLists.txt b/materializer/CMakeLists.txt index 513182b..9b035ec 100644 --- a/materializer/CMakeLists.txt +++ b/materializer/CMakeLists.txt @@ -22,6 +22,10 @@ PRIVATE # Utilities Utilities.cpp Database.cpp + # MFC parts + ExportDialog.cpp + # Resources file + "$<$:Materializer.rc>" # Defination file "$<$:Materializer.def>" ) @@ -33,7 +37,6 @@ FILES # Headers # Misc stdafx.hpp - resource.h # Main PluginMain.hpp StandaloneMain.hpp @@ -43,6 +46,9 @@ FILES Utilities.hpp Database.hpp DataTypes.hpp + # MFC Parts + resource.h + ExportDialog.hpp ) # Setup header infomations target_include_directories(VSWMaterializer @@ -69,10 +75,12 @@ PROPERTIES CXX_EXTENSION OFF ) # Setup MFC used in shared library -set_target_properties(VSWMaterializer -PROPERTIES - CMAKE_MFC_FLAG 2 -) +if (MATERIALIZER_BUILD_TYPE STREQUAL "plugin") + set_target_properties(VSWMaterializer + PROPERTIES + CMAKE_MFC_FLAG 2 + ) +endif () # MSVC specific correction target_compile_definitions(VSWMaterializer PRIVATE diff --git a/materializer/DataTypes.hpp b/materializer/DataTypes.hpp index f14f9bd..e36cbdc 100644 --- a/materializer/DataTypes.hpp +++ b/materializer/DataTypes.hpp @@ -1,6 +1,6 @@ #pragma once #include "stdafx.hpp" -#include "GenericDataTypes.hpp" +#include namespace VSW::Materializer::DataTypes { diff --git a/materializer/ExportCore.hpp b/materializer/ExportCore.hpp index 20a601f..260bd02 100644 --- a/materializer/ExportCore.hpp +++ b/materializer/ExportCore.hpp @@ -1,18 +1,18 @@ #pragma once #include "stdafx.hpp" -namespace YYCC::Materializer { +namespace VSW::Materializer { namespace ExportScript { - void Export(CKContext* ctx, YYCC::yycc_u8string_view& db_path); + void Export(CKContext* ctx, const YYCC::yycc_u8string_view& db_path, UINT code_page); } namespace ExportDocument { - void Export(CKContext* ctx, YYCC::yycc_u8string_view& db_path); + void Export(CKContext* ctx, const YYCC::yycc_u8string_view& db_path, UINT code_page); } namespace ExportEnvironment { - void Export(CKContext* ctx, YYCC::yycc_u8string_view& db_path); + void Export(CKContext* ctx, const YYCC::yycc_u8string_view& db_path, UINT code_page); } } diff --git a/materializer/ExportDialog.cpp b/materializer/ExportDialog.cpp new file mode 100644 index 0000000..72913e5 --- /dev/null +++ b/materializer/ExportDialog.cpp @@ -0,0 +1,255 @@ +#if defined(MATERIALIZER_PLUGIN) + +#include "ExportDialog.hpp" +#include + +namespace VSW::Materializer { + + class ExportDialogSetting { + public: + static ExportDialogSetting& GetSingleton(); + private: + static YYCC::yycc_u8string GetConfigFilePath(); + ExportDialogSetting() : + m_LastFilePath(YYCC_U8("last-file-path"), YYCC_U8("")), + m_Encoding(YYCC_U8("encoding"), CP_ACP), + m_Mgr(ExportDialogSetting::GetConfigFilePath(), UINT64_C(0), { + &m_LastFilePath, &m_Encoding + }) { + m_Mgr.Load(); + } + ~ExportDialogSetting() { + m_Mgr.Save(); + } + + public: + YYCC::ConfigManager::StringSetting m_LastFilePath; + YYCC::ConfigManager::NumberSetting m_Encoding; + YYCC::ConfigManager::CoreManager m_Mgr; + }; + ExportDialogSetting& ExportDialogSetting::GetSingleton() { + static ExportDialogSetting g_Singleton; + return g_Singleton; + } + YYCC::yycc_u8string ExportDialogSetting::GetConfigFilePath() { + // get path to executable virtools + YYCC::yycc_u8string u8_virtools_path; + if (!YYCC::WinFctHelper::GetModuleFileName(NULL, u8_virtools_path)) + u8_virtools_path.clear(); + // get its parent folder and append with cfg file name + std::filesystem::path virtools_path(YYCC::FsPathPatch::FromUTF8Path(u8_virtools_path.c_str())); + return YYCC::FsPathPatch::ToUTF8Path(virtools_path.parent_path() / YYCC::FsPathPatch::FromUTF8Path(YYCC_U8("vsw_materializer.cfg"))); + } + + namespace ExportDialogHelper { + +#define RADIOBTN_GETCHECK(instance) (instance.GetCheck() == BST_CHECKED) +#define RADIOBTN_SETCHECK(instance, stmt) (instance.SetCheck((stmt) ? BST_CHECKED : BST_UNCHECKED)) + + static bool ValidateCodePage(UINT code_page) { + CPINFOEXW cpinfo; + return GetCPInfoExW(code_page, 0, &cpinfo); + } + + static void SetCWndText(CWnd* ctl, const YYCC::yycc_u8string_view& val) { + ctl->SetWindowTextA(YYCC::EncodingHelper::UTF8ToChar(val, CP_ACP).c_str()); + } + + YYCC::yycc_u8string GetCWndText(CWnd* ctl) { + // Ref: https://learn.microsoft.com/zh-cn/cpp/mfc/reference/cwnd-class?view=msvc-170#getwindowtext + CString recv; + ctl->GetWindowTextA(recv); + return YYCC::EncodingHelper::CharToUTF8((LPCSTR)recv, CP_ACP); + } + + } + + // ExportDialog dialog + + IMPLEMENT_DYNAMIC(ExportDialog, CDialogEx) + + ExportDialog::ExportDialog(CWnd* pParent /*=nullptr*/) + : CDialogEx(IDD_EXPORT_DIALOG, pParent), + m_InitialDatabaseType(InitialDatabaseType::Script), + m_DatabaseFileCache(), + m_DatabaseFileResult(), m_EncodingResult(CP_ACP) {} + + ExportDialog::~ExportDialog() {} + + void ExportDialog::DoDataExchange(CDataExchange* pDX) { + CDialogEx::DoDataExchange(pDX); + DDX_Control(pDX, IDC_EDIT1, m_DatabaseFile); + DDX_Control(pDX, IDC_RADIO1, m_EncodingSystem); + DDX_Control(pDX, IDC_RADIO2, m_EncodingCustom); + DDX_Control(pDX, IDC_EDIT2, m_EncodingCustom_Value); + } + + + BEGIN_MESSAGE_MAP(ExportDialog, CDialogEx) + // ===== Buttons ===== + ON_BN_CLICKED(IDOK, &ExportDialog::OnBtnOkClicked) + ON_BN_CLICKED(IDCANCEL, &ExportDialog::OnBtnCancelClicked) + ON_BN_CLICKED(IDC_BUTTON1, &ExportDialog::OnBtnBrowseClicked) + // ===== Radio Buttons ===== + ON_BN_CLICKED(IDC_RADIO1, &ExportDialog::OnBtnEncodingClicked) + ON_BN_CLICKED(IDC_RADIO2, &ExportDialog::OnBtnEncodingClicked) + END_MESSAGE_MAP() + +#pragma region Initial Settings + + void ExportDialog::SetInitialDatabaseType(InitialDatabaseType db_type) { + m_InitialDatabaseType = db_type; + } + +#pragma endregion + +#pragma region Result Getter + + const YYCC::yycc_u8string& ExportDialog::GetDatabaseFileResult() { + return m_DatabaseFileResult; + } + + UINT ExportDialog::GetEncodingResult() { + return m_EncodingResult; + } + +#pragma endregion + + // ExportDialog message handlers + +#pragma region Event Handler + + BOOL ExportDialog::OnInitDialog() { + CDialogEx::OnInitDialog(); + + // Read settings from config manager + auto& config_manager = ExportDialogSetting::GetSingleton(); + auto u8_last_path = config_manager.m_LastFilePath.Get(); + if (!u8_last_path.empty()) { + auto last_path = YYCC::FsPathPatch::FromUTF8Path(u8_last_path.c_str()); + switch (m_InitialDatabaseType) { + case InitialDatabaseType::Script: + last_path.replace_filename(YYCC::FsPathPatch::FromUTF8Path(YYCC_U8("script.db"))); + break; + case InitialDatabaseType::Document: + last_path.replace_filename(YYCC::FsPathPatch::FromUTF8Path(YYCC_U8("doc.db"))); + break; + case InitialDatabaseType::Environment: + last_path.replace_filename(YYCC::FsPathPatch::FromUTF8Path(YYCC_U8("env.db"))); + break; + default: + throw std::runtime_error("invalid initial database type"); + } + u8_last_path = YYCC::FsPathPatch::ToUTF8Path(last_path); + } + PushDatabaseFile(u8_last_path); + PushEncoding(config_manager.m_Encoding.Get()); + + return TRUE; // return TRUE unless you set the focus to a control + // EXCEPTION: OCX Property Pages should return FALSE + } + + void ExportDialog::OnBtnOkClicked() { + // ===== Collect input settings ===== + m_DatabaseFileResult = PullDatabaseFile(); + m_EncodingResult = PullEncoding(); + if (m_DatabaseFileResult.empty()) { + MessageBoxW(m_hWnd, L"Exported database file should not be empty!", L"Setting Error", MB_OK + MB_ICONERROR); + return; + } + if (!ExportDialogHelper::ValidateCodePage(m_EncodingResult)) { + MessageBoxW(m_hWnd, L"Invalid encoding!", L"Setting Error", MB_OK + MB_ICONERROR); + return; + } + + // check done. sync settings to config manager + auto& config_manager = ExportDialogSetting::GetSingleton(); + config_manager.m_LastFilePath.Set(m_DatabaseFileResult); + config_manager.m_Encoding.Set(m_EncodingResult); + + CDialogEx::OnOK(); + } + + void ExportDialog::OnBtnCancelClicked() { + CDialogEx::OnCancel(); + } + + void ExportDialog::OnBtnBrowseClicked() { + // configure dialog properties + YYCC::DialogHelper::FileDialog dialog_settings; + auto& dialog_filter = dialog_settings.ConfigreFileTypes(); + dialog_filter.Add(YYCC_U8("Database File (*.db)"), { YYCC_U8("*.db") }); + dialog_settings.SetOwner(this->m_hWnd); + switch (m_InitialDatabaseType) { + case InitialDatabaseType::Script: + dialog_settings.SetInitFileName(YYCC_U8("script.db")); + break; + case InitialDatabaseType::Document: + dialog_settings.SetInitFileName(YYCC_U8("doc.db")); + break; + case InitialDatabaseType::Environment: + dialog_settings.SetInitFileName(YYCC_U8("env.db")); + break; + default: + throw std::runtime_error("invalid initial database type"); + } + + // open directory picker and assign it if user click ok. + YYCC::yycc_u8string picked_file; + if (YYCC::DialogHelper::SaveFileDialog(dialog_settings, picked_file)) { + PushDatabaseFile(picked_file); + } + } + + void ExportDialog::OnBtnEncodingClicked() { + UpdateLayouts(); + } + +#pragma endregion + +#pragma region Assist Functions + + const YYCC::yycc_u8string& ExportDialog::PullDatabaseFile() { + return m_DatabaseFileCache; + } + + void ExportDialog::PushDatabaseFile(const YYCC::yycc_u8string& data) { + m_DatabaseFileCache = data; + ExportDialogHelper::SetCWndText(&m_DatabaseFile, data); + } + + UINT ExportDialog::PullEncoding() { + if (RADIOBTN_GETCHECK(m_EncodingSystem)) return CP_ACP; + else if (RADIOBTN_GETCHECK(m_EncodingCustom)) { + UINT result; + if (!YYCC::ParserHelper::TryParse(ExportDialogHelper::GetCWndText(&m_EncodingCustom_Value), result)) + result = static_cast(-1); + return result; + } else { + throw std::runtime_error("invalid encoding selection"); + } + } + + void ExportDialog::PushEncoding(UINT data) { + RADIOBTN_SETCHECK(m_EncodingSystem, false); + RADIOBTN_SETCHECK(m_EncodingCustom, false); + + if (data == CP_ACP) RADIOBTN_SETCHECK(m_EncodingSystem, true); + else { + RADIOBTN_SETCHECK(m_EncodingCustom, true); + ExportDialogHelper::SetCWndText(&m_EncodingCustom_Value, YYCC::ParserHelper::ToString(data)); + } + + UpdateLayouts(); + } + + void ExportDialog::UpdateLayouts() { + // enable custom encoding input box according to selection. + m_EncodingCustom_Value.EnableWindow(RADIOBTN_GETCHECK(m_EncodingCustom)); + } + +#pragma endregion + +} + +#endif \ No newline at end of file diff --git a/materializer/ExportDialog.hpp b/materializer/ExportDialog.hpp new file mode 100644 index 0000000..c56add7 --- /dev/null +++ b/materializer/ExportDialog.hpp @@ -0,0 +1,71 @@ +#pragma once +#if defined(MATERIALIZER_PLUGIN) + +#include "stdafx.hpp" +#include "afxdialogex.h" +#include "resource.h" + +namespace VSW::Materializer { + + // ExportDialog dialog + + class ExportDialog : public CDialogEx { + DECLARE_DYNAMIC(ExportDialog) + + public: + ExportDialog(CWnd* pParent = nullptr); // standard constructor + virtual ~ExportDialog(); + + // Dialog Data +#ifdef AFX_DESIGN_TIME + enum { IDD = IDD_EXPORT_DIALOG }; +#endif + + protected: + virtual void DoDataExchange(CDataExchange* pDX); // DDX/DDV support + + DECLARE_MESSAGE_MAP() + public: + virtual BOOL OnInitDialog(); + afx_msg void OnBtnOkClicked(); + afx_msg void OnBtnCancelClicked(); + afx_msg void OnBtnBrowseClicked(); + afx_msg void OnBtnEncodingClicked(); + + // ===== Init Settings ===== + public: + enum class InitialDatabaseType { + Script, Document, Environment + }; + void SetInitialDatabaseType(InitialDatabaseType db_type); + protected: + InitialDatabaseType m_InitialDatabaseType; + + // ===== Result ===== + public: + const YYCC::yycc_u8string& GetDatabaseFileResult(); + UINT GetEncodingResult(); + private: + YYCC::yycc_u8string m_DatabaseFileResult; + UINT m_EncodingResult; + + protected: + // ===== Controls ===== + CEdit m_DatabaseFile; + CButton m_EncodingSystem; + CButton m_EncodingCustom; + CEdit m_EncodingCustom_Value; + // ===== Caches ===== + YYCC::yycc_u8string m_DatabaseFileCache; + // ===== Pull & Push ===== + const YYCC::yycc_u8string& PullDatabaseFile(); + void PushDatabaseFile(const YYCC::yycc_u8string& data); + UINT PullEncoding(); + void PushEncoding(UINT data); + // ===== Update Functions ===== + void UpdateLayouts(); + }; + +} + +#endif \ No newline at end of file diff --git a/materializer/Materializer.rc b/materializer/Materializer.rc new file mode 100644 index 0000000..53e7157 --- /dev/null +++ b/materializer/Materializer.rc @@ -0,0 +1,162 @@ +// Microsoft Visual C++ generated resource script. +// +#include "resource.h" + +#define APSTUDIO_READONLY_SYMBOLS +///////////////////////////////////////////////////////////////////////////// +// +// Generated from the TEXTINCLUDE 2 resource. +// +#include "winres.h" + +///////////////////////////////////////////////////////////////////////////// +#undef APSTUDIO_READONLY_SYMBOLS + +///////////////////////////////////////////////////////////////////////////// +// Chinese (Simplified, PRC) resources + +#if !defined(AFX_RESOURCE_DLL) || defined(AFX_TARG_CHS) +LANGUAGE LANG_CHINESE, SUBLANG_CHINESE_SIMPLIFIED +#pragma code_page(936) + +#ifdef APSTUDIO_INVOKED +///////////////////////////////////////////////////////////////////////////// +// +// TEXTINCLUDE +// + +1 TEXTINCLUDE +BEGIN + "resource.h\0" +END + +2 TEXTINCLUDE +BEGIN + "#include ""winres.h""\r\n" + "\0" +END + +3 TEXTINCLUDE +BEGIN + "\r\n" + "\0" +END + +#endif // APSTUDIO_INVOKED + +#endif // Chinese (Simplified, PRC) resources +///////////////////////////////////////////////////////////////////////////// + + +///////////////////////////////////////////////////////////////////////////// +// English resources + +#if !defined(AFX_RESOURCE_DLL) || defined(AFX_TARG_ENU) +LANGUAGE LANG_ENGLISH, SUBLANG_NEUTRAL +#pragma code_page(1252) + +///////////////////////////////////////////////////////////////////////////// +// +// Version +// + +VS_VERSION_INFO VERSIONINFO + FILEVERSION 2,0,0,0 + PRODUCTVERSION 2,0,0,0 + FILEFLAGSMASK 0x3fL +#ifdef _DEBUG + FILEFLAGS 0x1L +#else + FILEFLAGS 0x0L +#endif + FILEOS 0x40004L + FILETYPE 0x1L + FILESUBTYPE 0x0L +BEGIN + BLOCK "StringFileInfo" + BEGIN + BLOCK "000904b0" + BEGIN + VALUE "CompanyName", "yyc12345" + VALUE "FileDescription", "Virtools Script Weaver - Materializer" + VALUE "FileVersion", "2.0.0.0" + VALUE "InternalName", "RCEditor.dll" + VALUE "LegalCopyright", "Copyright (C) yyc12345 2020-2024" + VALUE "OriginalFilename", "RCEditor.dll" + VALUE "ProductName", "Virtools Script Weaver" + VALUE "ProductVersion", "2.0.0.0" + END + END + BLOCK "VarFileInfo" + BEGIN + VALUE "Translation", 0x9, 1200 + END +END + + +///////////////////////////////////////////////////////////////////////////// +// +// Dialog +// + +IDD_EXPORT_DIALOG DIALOGEX 0, 0, 219, 134 +STYLE DS_SETFONT | DS_MODALFRAME | DS_FIXEDSYS | WS_POPUP | WS_CAPTION | WS_SYSMENU +CAPTION "Export Setting" +FONT 8, "MS Shell Dlg", 400, 0, 0x1 +BEGIN + DEFPUSHBUTTON "OK",IDOK,108,114,50,14 + PUSHBUTTON "Cancel",IDCANCEL,162,114,50,14 + EDITTEXT IDC_EDIT1,12,22,138,14,ES_AUTOHSCROLL | ES_READONLY + PUSHBUTTON "Browse",IDC_BUTTON1,156,22,50,14 + CONTROL "System",IDC_RADIO1,"Button",BS_AUTORADIOBUTTON | WS_GROUP | WS_TABSTOP,12,66,39,10 + CONTROL "Custom",IDC_RADIO2,"Button",BS_AUTORADIOBUTTON | WS_TABSTOP,108,66,40,10 + EDITTEXT IDC_EDIT2,12,84,192,14,ES_AUTOHSCROLL + GROUPBOX "Database",IDC_STATIC,6,6,204,36 + GROUPBOX "Encoding",IDC_STATIC,6,48,204,60 +END + + +///////////////////////////////////////////////////////////////////////////// +// +// DESIGNINFO +// + +#ifdef APSTUDIO_INVOKED +GUIDELINES DESIGNINFO +BEGIN + IDD_EXPORT_DIALOG, DIALOG + BEGIN + LEFTMARGIN, 7 + RIGHTMARGIN, 212 + TOPMARGIN, 7 + BOTTOMMARGIN, 127 + END +END +#endif // APSTUDIO_INVOKED + + +///////////////////////////////////////////////////////////////////////////// +// +// AFX_DIALOG_LAYOUT +// + +IDD_EXPORT_DIALOG AFX_DIALOG_LAYOUT +BEGIN + 0 +END + +#endif // English resources +///////////////////////////////////////////////////////////////////////////// + + + +#ifndef APSTUDIO_INVOKED +///////////////////////////////////////////////////////////////////////////// +// +// Generated from the TEXTINCLUDE 3 resource. +// + + +///////////////////////////////////////////////////////////////////////////// +#endif // not APSTUDIO_INVOKED + diff --git a/materializer/PluginMain.cpp b/materializer/PluginMain.cpp index b0c2ebc..d05c5c8 100644 --- a/materializer/PluginMain.cpp +++ b/materializer/PluginMain.cpp @@ -1,5 +1,6 @@ #include "PluginMain.hpp" #include "ExportCore.hpp" +#include "ExportDialog.hpp" namespace VSW::Materializer::PluginMain { @@ -11,21 +12,34 @@ namespace VSW::Materializer::PluginMain { static void PluginMenuCallback(int command_id) { AFX_MANAGE_STATE(AfxGetStaticModuleState()); + CKContext* ctx = g_Plugininterface->GetCKContext(); switch (command_id) { case 0: { - MessageBoxW(nullptr, L"Work in Progress", L"WIP", MB_ICONINFORMATION + MB_OK); + ExportDialog dialog; + dialog.SetInitialDatabaseType(ExportDialog::InitialDatabaseType::Script); + if (dialog.DoModal() == IDOK) { + ExportScript::Export(ctx, dialog.GetDatabaseFileResult(), dialog.GetEncodingResult()); + } break; } case 1: { - MessageBoxW(nullptr, L"Work in Progress", L"WIP", MB_ICONINFORMATION + MB_OK); + ExportDialog dialog; + dialog.SetInitialDatabaseType(ExportDialog::InitialDatabaseType::Document); + if (dialog.DoModal() == IDOK) { + ExportDocument::Export(ctx, dialog.GetDatabaseFileResult(), dialog.GetEncodingResult()); + } break; } case 2: { - MessageBoxW(nullptr, L"Work in Progress", L"WIP", MB_ICONINFORMATION + MB_OK); + ExportDialog dialog; + dialog.SetInitialDatabaseType(ExportDialog::InitialDatabaseType::Environment); + if (dialog.DoModal() == IDOK) { + ExportEnvironment::Export(ctx, dialog.GetDatabaseFileResult(), dialog.GetEncodingResult()); + } break; } case 3: diff --git a/materializer/resource.h b/materializer/resource.h index cbe02d8..83b0da4 100644 --- a/materializer/resource.h +++ b/materializer/resource.h @@ -1,8 +1,21 @@ +//{{NO_DEPENDENCIES}} +// Microsoft Visual C++ generated include file. +// Used by RCEditor.rc +// +#define IDD_EXPORT_DIALOG 101 +#define IDC_EDIT1 1001 +#define IDC_BUTTON1 1002 +#define IDC_RADIO1 1003 +#define IDC_RADIO2 1004 +#define IDC_EDIT2 1005 + +// Next default values for new objects +// #ifdef APSTUDIO_INVOKED #ifndef APSTUDIO_READONLY_SYMBOLS -#define _APS_NEXT_RESOURCE_VALUE 10003 -#define _APS_NEXT_COMMAND_VALUE 32771 -#define _APS_NEXT_CONTROL_VALUE 10000 -#define _APS_NEXT_SYMED_VALUE 10000 +#define _APS_NEXT_RESOURCE_VALUE 103 +#define _APS_NEXT_COMMAND_VALUE 40001 +#define _APS_NEXT_CONTROL_VALUE 1006 +#define _APS_NEXT_SYMED_VALUE 101 +#endif #endif -#endif \ No newline at end of file diff --git a/shared/CMakeLists.txt b/shared/CMakeLists.txt index cfab01e..2b676da 100644 --- a/shared/CMakeLists.txt +++ b/shared/CMakeLists.txt @@ -4,7 +4,7 @@ add_library(VSWShared STATIC "") target_sources(VSWShared PRIVATE # Sources - "GenericDataTypes.cpp" + "GenericHelper.cpp" ) # Setup header files target_sources(VSWShared @@ -12,12 +12,18 @@ PUBLIC FILE_SET HEADERS FILES # Headers - "GenericDataTypes.hpp" + "GenericHelper.hpp" ) # Setup include directory target_include_directories(VSWShared PUBLIC ${CMAKE_CURRENT_LIST_DIR} + YYCC::YYCCommonplace +) +# Setup linked library +target_link_libraries(VSWShared +PUBLIC + YYCC::YYCCommonplace ) # Setup C++ standard set_target_properties(VSWShared diff --git a/shared/GenericDataTypes.cpp b/shared/GenericDataTypes.cpp deleted file mode 100644 index e69de29..0000000 diff --git a/shared/GenericDataTypes.hpp b/shared/GenericDataTypes.hpp deleted file mode 100644 index c9603c1..0000000 --- a/shared/GenericDataTypes.hpp +++ /dev/null @@ -1,22 +0,0 @@ -#pragma once -#include - -namespace VSW::DataTypes { - - enum class BehaviorLinkIOType : int { - Input, - Output - }; - - enum class ParameterLinkIOType : int { - ParameterIn, - ParameterOut, - /// @brief When using this, ignore [index] and [input_is_bb], set [input_index] to -1 - ParameterLocal, - /// @brief When using this, ignore [index] and [input_is_bb], set [input_index] to -1 - ParameterTarget, - /// @brief When using this, ignore [index], and [input_is_bb] will become [input_is_dataarray] - pParameterAttribute - }; - -} diff --git a/shared/GenericHelper.cpp b/shared/GenericHelper.cpp new file mode 100644 index 0000000..ef0594d --- /dev/null +++ b/shared/GenericHelper.cpp @@ -0,0 +1,7 @@ +#include "GenericHelper.hpp" + +namespace VSW { + + + +} diff --git a/shared/GenericHelper.hpp b/shared/GenericHelper.hpp new file mode 100644 index 0000000..c0cd345 --- /dev/null +++ b/shared/GenericHelper.hpp @@ -0,0 +1,46 @@ +#pragma once +#include +#include + +namespace VSW { + + class Reporter { + public: + Reporter(); + ~Reporter(); + + protected: + void PrePrint(const YYCC::yycc_char8_t* strl); + + public: + void Err(const YYCC::yycc_char8_t* strl); + void ErrF(const YYCC::yycc_char8_t* fmt, ...); + void Warn(const YYCC::yycc_char8_t* strl); + void WarnF(const YYCC::yycc_char8_t* fmt, ...); + void Info(const YYCC::yycc_char8_t* strl); + void InfoF(const YYCC::yycc_char8_t* fmt, ...); + void Debug(const YYCC::yycc_char8_t* strl); + void DebugF(const YYCC::yycc_char8_t* fmt, ...); + }; + + namespace DataTypes { + + enum class BehaviorLinkIOType : int { + Input, + Output + }; + + enum class ParameterLinkIOType : int { + ParameterIn, + ParameterOut, + /// @brief When using this, ignore [index] and [input_is_bb], set [input_index] to -1 + ParameterLocal, + /// @brief When using this, ignore [index] and [input_is_bb], set [input_index] to -1 + ParameterTarget, + /// @brief When using this, ignore [index], and [input_is_bb] will become [input_is_dataarray] + pParameterAttribute + }; + + } + +}