#pragma once #include "TitanEngine.h" #include "TitanScript.h" namespace TitanScriptGui { using namespace System; using namespace System::ComponentModel; using namespace System::Collections; using namespace System::Windows::Forms; using namespace System::Data; using namespace System::Drawing; using namespace System::Runtime::InteropServices; public delegate void log_callback_delegate( const char* str, eLogType log_type ); /// /// Zusammenfassung für Form1 /// public ref class Form1 : public System::Windows::Forms::Form { public: Form1(void) { InitializeComponent(); InitializeTitanScript(); } protected: /// /// Verwendete Ressourcen bereinigen. /// ~Form1() { if (components) { delete components; } } private: System::Windows::Forms::TextBox^ textBox_targetPath; protected: private: protected: private: System::Windows::Forms::Label^ label1; private: System::Windows::Forms::Button^ openTarget; private: private: private: System::Windows::Forms::Label^ label2; private: System::Windows::Forms::TextBox^ textBox_scriptPath; private: System::Windows::Forms::Button^ openScript; private: private: private: private: System::Windows::Forms::GroupBox^ groupBox1; private: System::Windows::Forms::TextBox^ logBox; private: private: System::Windows::Forms::Button^ run; private: private: System::Windows::Forms::OpenFileDialog^ openFileDialog1; private: tScripterLoadFileA load_file; tScripterExecuteWithTitanMistA exec; tScripterSetLogCallback set_log_callback; log_callback_delegate^ logdelegate; private: /// /// Erforderliche Designervariable. /// System::ComponentModel::Container ^components; #pragma region Windows Form Designer generated code /// /// Erforderliche Methode für die Designerunterstützung. /// Der Inhalt der Methode darf nicht mit dem Code-Editor geändert werden. /// void InitializeComponent(void) { this->textBox_targetPath = (gcnew System::Windows::Forms::TextBox()); this->label1 = (gcnew System::Windows::Forms::Label()); this->openTarget = (gcnew System::Windows::Forms::Button()); this->label2 = (gcnew System::Windows::Forms::Label()); this->textBox_scriptPath = (gcnew System::Windows::Forms::TextBox()); this->openScript = (gcnew System::Windows::Forms::Button()); this->groupBox1 = (gcnew System::Windows::Forms::GroupBox()); this->logBox = (gcnew System::Windows::Forms::TextBox()); this->run = (gcnew System::Windows::Forms::Button()); this->openFileDialog1 = (gcnew System::Windows::Forms::OpenFileDialog()); this->groupBox1->SuspendLayout(); this->SuspendLayout(); // // textBox_targetPath // this->textBox_targetPath->Location = System::Drawing::Point(60, 12); this->textBox_targetPath->Name = L"textBox_targetPath"; this->textBox_targetPath->Size = System::Drawing::Size(168, 20); this->textBox_targetPath->TabIndex = 0; // // label1 // this->label1->AutoSize = true; this->label1->Location = System::Drawing::Point(10, 12); this->label1->Name = L"label1"; this->label1->Size = System::Drawing::Size(44, 13); this->label1->TabIndex = 1; this->label1->Text = L"[Target]"; // // openTarget // this->openTarget->Location = System::Drawing::Point(234, 12); this->openTarget->Name = L"openTarget"; this->openTarget->Size = System::Drawing::Size(75, 23); this->openTarget->TabIndex = 2; this->openTarget->Text = L"[Open...]"; this->openTarget->UseVisualStyleBackColor = true; this->openTarget->Click += gcnew System::EventHandler(this, &Form1::openTarget_Click); // // label2 // this->label2->AutoSize = true; this->label2->Location = System::Drawing::Point(10, 44); this->label2->Name = L"label2"; this->label2->Size = System::Drawing::Size(40, 13); this->label2->TabIndex = 3; this->label2->Text = L"[Script]"; // // textBox_scriptPath // this->textBox_scriptPath->Location = System::Drawing::Point(60, 44); this->textBox_scriptPath->Name = L"textBox_scriptPath"; this->textBox_scriptPath->Size = System::Drawing::Size(168, 20); this->textBox_scriptPath->TabIndex = 4; // // openScript // this->openScript->Location = System::Drawing::Point(234, 44); this->openScript->Name = L"openScript"; this->openScript->Size = System::Drawing::Size(75, 23); this->openScript->TabIndex = 5; this->openScript->Text = L"[Open...]"; this->openScript->UseVisualStyleBackColor = true; this->openScript->Click += gcnew System::EventHandler(this, &Form1::openScript_Click); // // groupBox1 // this->groupBox1->Controls->Add(this->logBox); this->groupBox1->Location = System::Drawing::Point(13, 70); this->groupBox1->Name = L"groupBox1"; this->groupBox1->Size = System::Drawing::Size(294, 285); this->groupBox1->TabIndex = 6; this->groupBox1->TabStop = false; this->groupBox1->Text = L"[Log]"; // // logBox // this->logBox->Location = System::Drawing::Point(6, 19); this->logBox->Multiline = true; this->logBox->Name = L"logBox"; this->logBox->Size = System::Drawing::Size(282, 260); this->logBox->TabIndex = 0; // // run // this->run->Location = System::Drawing::Point(122, 361); this->run->Name = L"run"; this->run->Size = System::Drawing::Size(75, 23); this->run->TabIndex = 7; this->run->Text = L"[Run]"; this->run->UseVisualStyleBackColor = true; this->run->Click += gcnew System::EventHandler(this, &Form1::run_Click); // // openFileDialog1 // this->openFileDialog1->FileName = L"openFileDialog1"; // // Form1 // this->AutoScaleDimensions = System::Drawing::SizeF(6, 13); this->AutoScaleMode = System::Windows::Forms::AutoScaleMode::Font; this->ClientSize = System::Drawing::Size(319, 389); this->Controls->Add(this->run); this->Controls->Add(this->groupBox1); this->Controls->Add(this->openScript); this->Controls->Add(this->textBox_scriptPath); this->Controls->Add(this->label2); this->Controls->Add(this->openTarget); this->Controls->Add(this->label1); this->Controls->Add(this->textBox_targetPath); this->Name = L"Form1"; this->Text = L"TitanScriptGUI"; this->groupBox1->ResumeLayout(false); this->groupBox1->PerformLayout(); this->ResumeLayout(false); this->PerformLayout(); } #pragma endregion void InitializeTitanScript(void) { load_file = GetTSFunctionPointer( LoadFileA ); exec = GetTSFunctionPointer( ExecuteWithTitanMistA ); set_log_callback = GetTSFunctionPointer( SetLogCallback ); //register log callback logdelegate = gcnew log_callback_delegate(this, &Form1::log_callback); IntPtr thunk = System::Runtime::InteropServices::Marshal::GetFunctionPointerForDelegate(logdelegate); set_log_callback((fLogCallback)(void*)thunk); } private: System::Void openTarget_Click(System::Object^ sender, System::EventArgs^ e) { if(openFileDialog1->ShowDialog() == System::Windows::Forms::DialogResult::OK) { textBox_targetPath->Text = openFileDialog1->FileName; } } private: System::Void openScript_Click(System::Object^ sender, System::EventArgs^ e) { if(openFileDialog1->ShowDialog() == System::Windows::Forms::DialogResult::OK) { textBox_scriptPath->Text = openFileDialog1->FileName; } } private: System::Void run_Click(System::Object^ sender, System::EventArgs^ e) { logBox->Clear(); const char* scriptPath = (const char*)(void*) Marshal::StringToHGlobalAnsi(textBox_scriptPath->Text); const char* targetPath = (const char*)(void*) Marshal::StringToHGlobalAnsi(textBox_targetPath->Text); if(!load_file(scriptPath)) { logBox->AppendText("[Error] Couldnt load the script"); } bool ret = exec(targetPath, "dump.exe"); Marshal::FreeHGlobal(IntPtr((void*)scriptPath)); Marshal::FreeHGlobal(IntPtr((void*)targetPath)); } private: void log_callback( const char* str, eLogType log_type ) { logBox->AppendText(gcnew String(str)); } }; }