2013-05-09 11:13:16 -04:00

672 lines
25 KiB
C++

#include <wx/wx.h>
#include <wx/aboutdlg.h>
#include <wx/cmdline.h>
#include <mysql.h>
#include <vector>
#include "tasks.h"
#include "utility.h"
#include "base.h"
#include "ErrorLog.h"
using namespace std;
//Defined Events
BEGIN_EVENT_TABLE ( MainFrame, wxFrame )
EVT_MENU(MENU_Connect, MainFrame::Connect)
EVT_MENU(MENU_Quit, MainFrame::Quit)
EVT_MENU(MENU_NewTask, MainFrame::NewTask)
EVT_MENU(MENU_DeleteTask, MainFrame::DeleteTask)
EVT_MENU(MENU_SaveTask, MainFrame::SaveTask)
EVT_MENU(MENU_NewActivity, MainFrame::NewActivity)
EVT_MENU(MENU_DeleteActivity, MainFrame::DeleteActivity)
EVT_MENU(MENU_SaveActivity, MainFrame::SaveActivity)
EVT_MENU(MENU_About, MainFrame::About)
EVT_LISTBOX_DCLICK(LIST_Click, MainFrame::ListBoxDoubleClick)
EVT_LISTBOX(LIST_Click, MainFrame::ListBoxSimpleSelect)
EVT_BUTTON(BUTTON_Reward, MainFrame::OnRewardButton )
EVT_LISTBOX_DCLICK(LIST_Click_Activities, MainFrame::ActivitiesListBoxDoubleClick)
EVT_LISTBOX(LIST_Click_Activities, MainFrame::ActivitiesListBoxSimpleSelect)
EVT_CHOICE(CHOICE_ActivityChoiceChange, MainFrame::ActivityChoiceChange)
EVT_CONTEXT_MENU(MainFrame::ContextClick)
EVT_LISTBOX_DCLICK(LIST_Click_Goals, MainFrame::GoalsListBoxDoubleClick)
EVT_MENU(MENU_NewGoal, MainFrame::NewGoal)
EVT_MENU(MENU_DeleteGoal, MainFrame::DeleteGoal)
EVT_MENU(MENU_AddGoalItem, MainFrame::NewGoalValue)
EVT_MENU(MENU_DeleteGoalItem, MainFrame::DeleteGoalValue)
EVT_MENU(MENU_ModifyGoalItem, MainFrame::ChangeGoalValue)
EVT_BUTTON(BUTTON_AddGoalItem, MainFrame::NewGoalValue)
EVT_BUTTON(BUTTON_DeleteGoalItem, MainFrame::DeleteGoalValue)
EVT_BUTTON(BUTTON_ModifyGoalItem, MainFrame::ChangeGoalValue)
EVT_MENU(MENU_NewProximity, MainFrame::NewProximity)
EVT_MENU(MENU_DeleteProximity, MainFrame::DeleteProximity)
EVT_MENU(MENU_SaveProximity, MainFrame::SaveProximity)
EVT_LISTBOX_DCLICK(LIST_Click_Proximity, MainFrame::ProximityListBoxDoubleClick)
END_EVENT_TABLE()
//Our main() thread
IMPLEMENT_APP_CONSOLE(MainApp)
bool MainApp::OnInit()
{
MainFrame *MainWin = new MainFrame(wxT("Task Master"), wxDefaultPosition, //wxPoint(1,1),
wxSize(800, 600)); // Create an instance of our frame, or window
MainWin->Show(TRUE); // show the window
SetTopWindow(MainWin);// and finally, set it as the main window
return TRUE;
}
MainFrame::MainFrame(const wxString& title,
const wxPoint& pos, const wxSize& size)
: wxFrame((wxFrame *) NULL, -1, title, pos, size, (wxCAPTION|wxCLOSE_BOX|wxMINIMIZE_BOX|wxSYSTEM_MENU|wxCLIP_CHILDREN|wxTAB_TRAVERSAL))
{
mErrorLog = new EQEmuErrorLog;
CreateStatusBar(1, 0);
mErrorLog->Log(eqEmuLogBoth, "Creating Menus.");
MainMenu = new wxMenuBar();
wxMenu *FileMenu = new wxMenu();
FileMenu->Append(MENU_Connect, wxT("&Connect"), wxT("Connect to the Database"));
FileMenu->AppendSeparator();
FileMenu->Append(MENU_Quit, wxT("&Quit"), wxT("Quit"));
MainMenu->Append(FileMenu, wxT("&Main"));
wxMenu *EditMenu = new wxMenu();
EditMenu->Append(MENU_NewTask, wxT("&New Task"), wxT("Creates a new task"));
EditMenu->Append(MENU_DeleteTask, wxT("&Delete Task"), wxT("Deletes the selected task"));
EditMenu->AppendSeparator();
EditMenu->Append(MENU_SaveTask, wxT("&Save Task"), wxT("Saves the opened task"));
MainMenu->Append(EditMenu, wxT("&Tasks"));
wxMenu *ActMenu = new wxMenu();
ActMenu->Append(MENU_NewActivity, wxT("&New Activity"), wxT("Create a new activity for this task"));
ActMenu->Append(MENU_DeleteActivity, wxT("&Delete Activity"), wxT("Deletes the selected activity for this task"));
ActMenu->AppendSeparator();
ActMenu->Append(MENU_SaveActivity, wxT("&Save Activity"), wxT("Saves the opened task activity"));
MainMenu->Append(ActMenu, wxT("&Activities"));
wxMenu *GoalsMenu = new wxMenu();
GoalsMenu->Append(MENU_NewGoal, wxT("&New Goal"), wxT("Creates a new goal list entry"));
GoalsMenu->Append(MENU_DeleteGoal, wxT("&Delete Goal"), wxT("Deletes the selected goal list entry"));
GoalsMenu->AppendSeparator();
GoalsMenu->Append(MENU_AddGoalItem, wxT("N&ew Goal Value"), wxT("Saves the opened task activity"));
GoalsMenu->Append(MENU_DeleteGoalItem, wxT("De&lete Goal Value"), wxT("Deletes the selected goal value entry"));
GoalsMenu->Append(MENU_ModifyGoalItem, wxT("M&odify Goal Value"), wxT("Attempts to change the selected goal value entry"));
MainMenu->Append(GoalsMenu, wxT("&Goals"));
wxMenu *ProximityMenu = new wxMenu();
ProximityMenu->Append(MENU_NewProximity, wxT("&New Proximity"), wxT("Creates a new proximity entry"));
ProximityMenu->Append(MENU_DeleteProximity, wxT("&Delete Proximity"), wxT("Deletes the selected proximity entry"));
ProximityMenu->AppendSeparator();
ProximityMenu->Append(MENU_SaveProximity, wxT("&Save Proximity"), wxT("Saves the opened proximity entry"));
MainMenu->Append(ProximityMenu, wxT("&Proximity"));
wxMenu *AboutMenu = new wxMenu();
AboutMenu->Append(MENU_About, wxT("A&bout"), wxT("Program Information"));
MainMenu->Append(AboutMenu, wxT("A&bout"));
SetMenuBar(MainMenu);
mErrorLog->Log(eqEmuLogBoth, "Creating Sizer.");
BoxSizer1 = new wxBoxSizer(wxHORIZONTAL);
mErrorLog->Log(eqEmuLogBoth, "Creating Item List Box.");
ItemSelectionList = new wxListBox(this, LIST_Click, wxDefaultPosition, wxSize( -1,-1 ), 0, NULL, 0);
mErrorLog->Log(eqEmuLogBoth, "Adding Item List Box to Sizer.");
BoxSizer1->Add(ItemSelectionList, 0, wxALIGN_TOP|wxALL|wxEXPAND, 5);
mErrorLog->Log(eqEmuLogBoth, "Creating Notebook Backing.");
MainNotebookBack = new wxNotebook(this, wxID_ANY, wxDefaultPosition, wxSize( -1,-1 ), 0);
mErrorLog->Log(eqEmuLogBoth, "Creating Panels.");
MainPanel1 = new wxPanel(MainNotebookBack, wxID_ANY, wxDefaultPosition, wxDefaultSize, wxTAB_TRAVERSAL);
MainPanel2 = new wxPanel(MainNotebookBack, wxID_ANY, wxDefaultPosition, wxDefaultSize, wxTAB_TRAVERSAL);
MainPanel3 = new wxPanel(MainNotebookBack, wxID_ANY, wxDefaultPosition, wxDefaultSize, wxTAB_TRAVERSAL);
MainPanel4 = new wxPanel(MainNotebookBack, wxID_ANY, wxDefaultPosition, wxDefaultSize, wxTAB_TRAVERSAL);
MainPanel5 = new wxPanel(MainNotebookBack, wxID_ANY, wxDefaultPosition, wxDefaultSize, wxTAB_TRAVERSAL);
mErrorLog->Log(eqEmuLogBoth, "Adding Panels to Notebook Backing.");
MainNotebookBack->AddPage(MainPanel1, wxT("General"), true);
MainNotebookBack->AddPage(MainPanel2, wxT("Activities"), false);
MainNotebookBack->AddPage(MainPanel3, wxT("Goals"), false);
MainNotebookBack->AddPage(MainPanel4, wxT("Proximities"), false);
MainNotebookBack->AddPage(MainPanel5, wxT("Task Sets"), false);
/*General Page Elements*/
mErrorLog->Log(eqEmuLogBoth, "Adding elements to General Page");
//name label + text
mTaskNameLabel = new wxStaticText(MainPanel1, -1, "Name:", wxPoint(0,2), wxDefaultSize);
mTaskName = new wxTextCtrl(MainPanel1, -1, wxT("Task Name"), wxPoint(65,0), wxSize(300,20));
mTaskName->SetMaxLength(100);
mTaskName->Disable();
//desc label + text
mTaskDescLabel = new wxStaticText(MainPanel1, -1, "Desc:", wxPoint(0,32), wxDefaultSize);
mTaskDesc = new wxTextCtrl(MainPanel1, -1, wxT("Task Description"), wxPoint(65,30), wxSize(300,200), wxTE_MULTILINE);
mTaskDesc->SetMaxLength(2047);
mTaskDesc->Disable();
//Min Level label + text
mTaskMinLvlLabel = new wxStaticText(MainPanel1, -1, "Min Lvl:", wxPoint(375,2), wxDefaultSize);
mTaskMinLvl = new wxTextCtrl(MainPanel1, -1, wxT("0"), wxPoint(450,0), wxSize(25,20), wxTE_DONTWRAP, wxTextValidator(wxFILTER_NUMERIC));
mTaskMinLvl->SetMaxLength(2);
mTaskMinLvl->Disable();
//Max Level label + text
mTaskMaxLvlLabel = new wxStaticText(MainPanel1, -1, "Max Lvl:", wxPoint(500,2), wxDefaultSize);
mTaskMaxLvl = new wxTextCtrl(MainPanel1, -1, wxT("0"), wxPoint(580,0), wxSize(25,20), wxTE_DONTWRAP, wxTextValidator(wxFILTER_NUMERIC));
mTaskMaxLvl->SetMaxLength(2);
mTaskMaxLvl->Disable();
//duration
mTaskDurationLabel = new wxStaticText(MainPanel1, -1, "Duration:", wxPoint(375,32), wxDefaultSize);
mTaskDuration = new wxTextCtrl(MainPanel1, -1, wxT("0"), wxPoint(450,30), wxSize(70,20), wxTE_DONTWRAP, wxTextValidator(wxFILTER_NUMERIC));
mTaskDuration->SetMaxLength(9);
mTaskDuration->Disable();
//box to enclose rewards
mRewardsBox = new wxStaticBox(MainPanel1, -1, "Rewards", wxPoint(0,300), wxSize(644,210));
mRewardNameLabel = new wxStaticText(mRewardsBox, -1, "Reward:", wxPoint(10,17), wxDefaultSize);
mRewardName = new wxTextCtrl(mRewardsBox, -1, wxT(""), wxPoint(80,15), wxSize(280,20));
mRewardName->SetMaxLength(64);
mRewardName->Disable();
mRewardIDLabel = new wxStaticText(mRewardsBox, -1, "Reward ID:", wxPoint(10,47), wxDefaultSize);
mRewardID = new wxTextCtrl(mRewardsBox, -1, wxT("0"), wxPoint(160,45), wxSize(70,20), wxTE_DONTWRAP, wxTextValidator(wxFILTER_NUMERIC));
mRewardID->SetMaxLength(9);
mRewardID->Disable();
mRewardCashLabel = new wxStaticText(mRewardsBox, -1, "Money Rewarded:", wxPoint(10,77), wxDefaultSize);
mRewardCash = new wxTextCtrl(mRewardsBox, -1, wxT("0"), wxPoint(160,75), wxSize(70,20), wxTE_DONTWRAP, wxTextValidator(wxFILTER_NUMERIC));
mRewardCash->SetMaxLength(9);
mRewardCash->Disable();
mRewardXPLabel = new wxStaticText(mRewardsBox, -1, "Experience Rewarded:", wxPoint(10,107), wxDefaultSize);
mRewardXP = new wxTextCtrl(mRewardsBox, -1, wxT("0"), wxPoint(160,105), wxSize(70,20), wxTE_DONTWRAP, wxTextValidator(wxFILTER_NUMERIC));
mRewardXP->SetMaxLength(9);
mRewardXP->Disable();
mRewardMethodLabel = new wxStaticText(mRewardsBox, -1, "Reward Method:", wxPoint(10,137), wxDefaultSize);
mRewardMethod = new wxChoice(mRewardsBox, -1, wxPoint(160, 135), wxDefaultSize);
wxString mRewardMethodStr;
mRewardMethodStr.Printf("%s", "(0) Single Item Id");
mRewardMethod->Append(mRewardMethodStr);
mRewardMethodStr.clear();
mRewardMethodStr.Printf("%s", "(1) List from Goal List");
mRewardMethod->Append(mRewardMethodStr);
mRewardMethodStr.clear();
mRewardMethodStr.Printf("%s", "(2) Perl Quest Reward");
mRewardMethod->Append(mRewardMethodStr);
mRewardMethod->Select(0);
mRewardMethod->Disable();
ShowRewardItems = new wxListBox(mRewardsBox, -1, wxPoint(375, 40), wxSize(250,160), 0, NULL, 0);
ShowRewardItems->Disable();
RefreshItems = new wxButton(mRewardsBox,BUTTON_Reward,"Refresh Item List", wxPoint(375,10), wxSize(250,25));
RefreshItems->Disable();
mStartZoneLabel = new wxStaticText(MainPanel1, -1, "Start Zone:", wxPoint(375,62), wxDefaultSize);
mStartZone = new wxChoice(MainPanel1, -1, wxPoint(460, 60), wxDefaultSize, 0, NULL, wxCB_SORT);
mStartZone->Disable();
mTaskRepeatable = new wxCheckBox(MainPanel1, -1, "Repeatable:", wxPoint(375, 87), wxDefaultSize, wxCHK_2STATE | wxALIGN_RIGHT);
mTaskRepeatable->Disable();
/*General Page Elements End*/
/*Activities Page Elements*/
mErrorLog->Log(eqEmuLogBoth, "Adding elements to Activities Page");
ActivitiesSelectionList = new wxListBox(MainPanel2, LIST_Click_Activities, wxPoint(0,0), wxSize(100,510), 0, NULL, 0);
ActivitiesSelectionList->Disable();
mActText1Label = new wxStaticText(MainPanel2, -1, "Text 1:", wxPoint(105,2), wxDefaultSize);
mActText1 = new wxTextCtrl(MainPanel2, -1, wxT(""), wxPoint(185,0), wxSize(180,20), wxTE_DONTWRAP);
mActText1->SetMaxLength(64);
mActText1->Disable();
mActText2Label = new wxStaticText(MainPanel2, -1, "Text 2:", wxPoint(105,22), wxDefaultSize);
mActText2 = new wxTextCtrl(MainPanel2, -1, wxT(""), wxPoint(185,20), wxSize(180,20), wxTE_DONTWRAP);
mActText2->SetMaxLength(64);
mActText2->Disable();
mActText3Label = new wxStaticText(MainPanel2, -1, "Text 3:", wxPoint(105,42), wxDefaultSize);
mActText3 = new wxTextCtrl(MainPanel2, -1, wxT(""), wxPoint(185,40), wxSize(180,60), wxTE_MULTILINE);
mActText3->SetMaxLength(128);
mActText3->Disable();
mActivityZoneLabel = new wxStaticText(MainPanel2, -1, "Zone:", wxPoint(380,2), wxDefaultSize);
mActivityZone = new wxChoice(MainPanel2, -1, wxPoint(440, 0), wxDefaultSize, 0, NULL, wxCB_SORT);
mActivityZone->Disable();
mActivityOptional = new wxCheckBox(MainPanel2, -1, "Optional:", wxPoint(580, 2), wxDefaultSize, wxCHK_2STATE | wxALIGN_RIGHT);
mActivityOptional->Disable();
mActIDLabel = new wxStaticText(MainPanel2, -1, "Activity ID:", wxPoint(105,107), wxDefaultSize);
mActID = new wxTextCtrl(MainPanel2, -1, wxT(""), wxPoint(185,105), wxSize(25,20), wxTE_DONTWRAP, wxTextValidator(wxFILTER_NUMERIC));
mActID->SetMaxLength(2);
mActID->Disable();
mActStepLabel = new wxStaticText(MainPanel2, -1, "Step:", wxPoint(105,129), wxDefaultSize);
mActStep = new wxTextCtrl(MainPanel2, -1, wxT(""), wxPoint(185,127), wxSize(25,20), wxTE_DONTWRAP, wxTextValidator(wxFILTER_NUMERIC));
mActStep->SetMaxLength(2);
mActStep->Disable();
mActTypeLabel = new wxStaticText(MainPanel2, -1, "Type:", wxPoint(105,155), wxDefaultSize);
mActType = new wxChoice(MainPanel2, CHOICE_ActivityChoiceChange, wxPoint(185, 153), wxDefaultSize);
mRewardMethodStr.Clear();
mRewardMethodStr.Printf("%s", "(0) Unknown");
mActType->Append(mRewardMethodStr);
mRewardMethodStr.Clear();
mRewardMethodStr.Printf("%s", "(1) Deliver");
mActType->Append(mRewardMethodStr);
mRewardMethodStr.Clear();
mRewardMethodStr.Printf("%s", "(2) Kill");
mActType->Append(mRewardMethodStr);
mRewardMethodStr.Clear();
mRewardMethodStr.Printf("%s", "(3) Loot");
mActType->Append(mRewardMethodStr);
mRewardMethodStr.Clear();
mRewardMethodStr.Printf("%s", "(4) Speak To");
mActType->Append(mRewardMethodStr);
mRewardMethodStr.Clear();
mRewardMethodStr.Printf("%s", "(5) Explore");
mActType->Append(mRewardMethodStr);
mRewardMethodStr.Clear();
mRewardMethodStr.Printf("%s", "(6) Trade Skill");
mActType->Append(mRewardMethodStr);
mRewardMethodStr.Clear();
mRewardMethodStr.Printf("%s", "(7) Fish");
mActType->Append(mRewardMethodStr);
mRewardMethodStr.Clear();
mRewardMethodStr.Printf("%s", "(8) Forage");
mActType->Append(mRewardMethodStr);
mRewardMethodStr.Clear();
mRewardMethodStr.Printf("%s", "(9) Use");
mActType->Append(mRewardMethodStr);
mRewardMethodStr.Clear();
mRewardMethodStr.Printf("%s", "(10) Use");
mActType->Append(mRewardMethodStr);
mRewardMethodStr.Clear();
mRewardMethodStr.Printf("%s", "(11) Touch");
mActType->Append(mRewardMethodStr);
mRewardMethodStr.Clear();
mRewardMethodStr.Printf("%s", "(100) GiveCash");
mActType->Append(mRewardMethodStr);
mRewardMethodStr.Clear();
mRewardMethodStr.Printf("%s", "(999) Custom");
mActType->Append(mRewardMethodStr);
mActType->Disable();
mActType->Select(0);
mActInfo = new wxStaticBox(MainPanel2, -1, "Info", wxPoint(425,385), wxSize(219,125));
mActInfoText = new wxStaticText(mActInfo, -1, "Unknown Activity Type:\nThis is not a valid activity type", wxPoint(25,25), wxDefaultSize);
mActDeliverLabel = new wxStaticText(MainPanel2, -1, "Deliver to NPCID:", wxPoint(105,182), wxDefaultSize);
mActDeliver = new wxTextCtrl(MainPanel2, -1, wxT(""), wxPoint(215,180), wxSize(60,20), wxTE_DONTWRAP, wxTextValidator(wxFILTER_NUMERIC));
mActDeliver->SetMaxLength(7);
mActDeliver->Disable();
mActMethodLabel = new wxStaticText(MainPanel2, -1, "Goal Method:", wxPoint(105,402), wxDefaultSize);
mActMethod = new wxChoice(MainPanel2, -1, wxPoint(200, 400), wxDefaultSize);
mRewardMethodStr.Clear();
mRewardMethodStr.Printf("%s", "(0) Single Goal ID");
mActMethod->Append(mRewardMethodStr);
mRewardMethodStr.Clear();
mRewardMethodStr.Printf("%s", "(1) Goal ID List");
mActMethod->Append(mRewardMethodStr);
mRewardMethodStr.Clear();
mRewardMethodStr.Printf("%s", "(2) Perl Quest");
mActMethod->Append(mRewardMethodStr);
mActMethod->Select(2);
mActMethod->Disable();
mActGoalIDLabel = new wxStaticText(MainPanel2, -1, "Goal ID:", wxPoint(105,432), wxDefaultSize);
mActGoalID = new wxTextCtrl(MainPanel2, -1, wxT(""), wxPoint(200,430), wxSize(60,20), wxTE_DONTWRAP, wxTextValidator(wxFILTER_NUMERIC));
mActGoalID->SetMaxLength(7);
mActGoalID->Disable();
mActGoalCountLabel = new wxStaticText(MainPanel2, -1, "Goal Count:", wxPoint(105,457), wxDefaultSize);
mActGoalCount = new wxTextCtrl(MainPanel2, -1, wxT(""), wxPoint(200,455), wxSize(60,20), wxTE_DONTWRAP, wxTextValidator(wxFILTER_NUMERIC));
mActGoalCount->SetMaxLength(8);
mActGoalCount->Disable();
/*Activities Page Elements End*/
/*Goals Page Elements*/
mErrorLog->Log(eqEmuLogBoth, "Adding elements to Goals Page");
GoalsSelectionList = new wxListBox(MainPanel3, LIST_Click_Goals, wxPoint(0,0), wxSize(100,510), 0, NULL, 0);
GoalsValuesList = new wxListBox(MainPanel3, -1, wxPoint(150,50), wxSize(150,300), 0, NULL, 0);
GoalsValuesList->Disable();
mGoalsNewValueButton = new wxButton(MainPanel3, BUTTON_AddGoalItem, "Add Value", wxPoint(302,275), wxSize(100,-1));
mGoalsNewValueButton->Disable();
mGoalsDeleteValueButton = new wxButton(MainPanel3, BUTTON_DeleteGoalItem, "Delete Value", wxPoint(302,300), wxSize(100,-1));
mGoalsDeleteValueButton->Disable();
mGoalsChangeValueButton = new wxButton(MainPanel3, BUTTON_ModifyGoalItem, "Change Value", wxPoint(302,325), wxSize(100,-1));
mGoalsChangeValueButton->Disable();
/*Goals Page Elements End*/
/*Proximities Page Elements*/
mErrorLog->Log(eqEmuLogBoth, "Adding elements to Proximities Page");
ProximitySelectionList = new wxListBox(MainPanel4, LIST_Click_Proximity, wxPoint(0,0), wxSize(100,510), 0, NULL, 0);
mProxIdLabel = new wxStaticText(MainPanel4, -1, "Id:", wxPoint(105,12), wxDefaultSize);
mProxId = new wxTextCtrl(MainPanel4, -1, wxT(""), wxPoint(150,10), wxSize(50,20), wxTE_DONTWRAP, wxTextValidator(wxFILTER_NUMERIC));
mProxId->SetMaxLength(6);
mProxId->Disable();
mProxMinxLabel = new wxStaticText(MainPanel4, -1, "MinX:", wxPoint(105,42), wxDefaultSize);
mProxMinx = new wxTextCtrl(MainPanel4, -1, wxT(""), wxPoint(150,40), wxSize(80,20), wxTE_DONTWRAP, wxTextValidator(wxFILTER_NUMERIC));
mProxMinx->SetMaxLength(12);
mProxMinx->Disable();
mProxMaxxLabel = new wxStaticText(MainPanel4, -1, "MaxX:", wxPoint(255,42), wxDefaultSize);
mProxMaxx = new wxTextCtrl(MainPanel4, -1, wxT(""), wxPoint(300,40), wxSize(80,20), wxTE_DONTWRAP, wxTextValidator(wxFILTER_NUMERIC));
mProxMaxx->SetMaxLength(12);
mProxMaxx->Disable();
mProxMinyLabel = new wxStaticText(MainPanel4, -1, "MinY:", wxPoint(105,72), wxDefaultSize);
mProxMiny = new wxTextCtrl(MainPanel4, -1, wxT(""), wxPoint(150,70), wxSize(80,20), wxTE_DONTWRAP, wxTextValidator(wxFILTER_NUMERIC));
mProxMiny->SetMaxLength(12);
mProxMiny->Disable();
mProxMaxyLabel = new wxStaticText(MainPanel4, -1, "MaxY:", wxPoint(255,72), wxDefaultSize);
mProxMaxy = new wxTextCtrl(MainPanel4, -1, wxT(""), wxPoint(300,70), wxSize(80,20), wxTE_DONTWRAP, wxTextValidator(wxFILTER_NUMERIC));
mProxMaxy->SetMaxLength(12);
mProxMaxy->Disable();
mProxMinzLabel = new wxStaticText(MainPanel4, -1, "MinZ:", wxPoint(105,102), wxDefaultSize);
mProxMinz = new wxTextCtrl(MainPanel4, -1, wxT(""), wxPoint(150,100), wxSize(80,20), wxTE_DONTWRAP, wxTextValidator(wxFILTER_NUMERIC));
mProxMinz->SetMaxLength(12);
mProxMinz->Disable();
mProxMaxzLabel = new wxStaticText(MainPanel4, -1, "MaxZ:", wxPoint(255,102), wxDefaultSize);
mProxMaxz = new wxTextCtrl(MainPanel4, -1, wxT(""), wxPoint(300,100), wxSize(80,20), wxTE_DONTWRAP, wxTextValidator(wxFILTER_NUMERIC));
mProxMaxz->SetMaxLength(12);
mProxMaxz->Disable();
mProxZoneLabel = new wxStaticText(MainPanel4, -1, "Zone:", wxPoint(105,202), wxDefaultSize);
mProxZone = new wxChoice(MainPanel4, -1, wxPoint(150, 200), wxDefaultSize);
mProxZone->Disable();
/*Proximities Page Elements End*/
mErrorLog->Log(eqEmuLogBoth, "Adding Notebook to Sizer.");
BoxSizer1->Add(MainNotebookBack, 1, wxALIGN_TOP|wxEXPAND, 5);
mErrorLog->Log(eqEmuLogBoth, "Setting Frame Sizer.");
this->SetSizer(BoxSizer1);
mErrorLog->Log(eqEmuLogBoth, "Calculating Frame Layout.");
this->Layout();
selectedIndex = -1; //nothing selected
openedIndex = -1; //nothing opened
highestIndex = 0;
openedActivity.activityid = -1;
openedActivity.id = -1;
openedActivity.step = -1;
openedGoal = 0;
openedProximity.exploreid = 0xFFFFFFFF;
openedProximity.zoneid = 0xFFFFFFFF;
//database setting init.
mMysql = NULL;
memset(server,0,256);
memset(user,0,256);
memset(password,0,256);
memset(database,0,256);
if(!GetDatabaseSettings())
Close(TRUE);
}
void MainFrame::Connect(wxCommandEvent& WXUNUSED(event))
{
if(mMysql){
mErrorLog->Log(eqEmuLogBoth, "Connect to database requested but database connection exists.");
return;
}
ItemSelectionList->Clear();
mErrorLog->Log(eqEmuLogBoth, "Connect to database requested.");
if(!mMysql){
mMysql = mysql_init(NULL);
}
if(mMysql){
if (!mysql_real_connect(mMysql, server,
user, password, database, 0, NULL, 0)) {
mErrorLog->Log(eqEmuLogBoth, "MySQL Connection Error: %s", mysql_error(mMysql));
Close(TRUE);
return;
}
if(!LoadTasks()){
mysql_close(mMysql);
mErrorLog->Log(eqEmuLogBoth, "Failed to load tasks, exiting.");
Close(TRUE);
return;
}
if(!LoadGoals()){
mysql_close(mMysql);
mErrorLog->Log(eqEmuLogBoth, "Failed to load goals, exiting.");
Close(TRUE);
return;
}
if(!LoadActivities()){
mysql_close(mMysql);
mErrorLog->Log(eqEmuLogBoth, "Failed to load activities, exiting.");
Close(TRUE);
return;
}
if(!LoadItems()){
mysql_close(mMysql);
mErrorLog->Log(eqEmuLogBoth, "Failed to load items, exiting.");
Close(TRUE);
return;
}
if(!LoadZones()){
mysql_close(mMysql);
mErrorLog->Log(eqEmuLogBoth, "Failed to load zones, exiting.");
Close(TRUE);
return;
}
if(!LoadProximity()){
mysql_close(mMysql);
mErrorLog->Log(eqEmuLogBoth, "Failed to load proximities, exiting.");
Close(TRUE);
return;
}
PopulateGoals();
PopulateProximity();
}
}
void MainFrame::Quit(wxCommandEvent& WXUNUSED(event))
{
mErrorLog->Log(eqEmuLogBoth, "Exit requested, exiting.");
delete mErrorLog;
mErrorLog = NULL;
mysql_close(mMysql);
Close(TRUE);
}
void MainFrame::ListBoxSimpleSelect(wxCommandEvent& event)
{
selectedIndex = event.GetInt();
}
void MainFrame::ListBoxDoubleClick(wxCommandEvent& event)
{
mErrorLog->Log(eqEmuLogBoth, "Double clicked on item %d.", event.GetInt());
openedIndex = event.GetInt();
vector<eqtask>::iterator Iter;
Iter = taskList.begin();
Iter += openedIndex;
eqtask mTask = *Iter;
wxString mStr;
mStr.Printf("%s", mTask.title);
mTaskName->Clear();
mTaskName->AppendText(mStr);
mTaskName->Enable();
mStr.clear();
mStr.Printf("%s", mTask.desc);
mTaskDesc->Clear();
mTaskDesc->AppendText(mStr);
mTaskDesc->Enable();
mStr.clear();
mStr.Printf("%u", mTask.level_min);
mTaskMinLvl->Clear();
mTaskMinLvl->AppendText(mStr);
mTaskMinLvl->Enable();
mStr.clear();
mStr.Printf("%u", mTask.level_max);
mTaskMaxLvl->Clear();
mTaskMaxLvl->AppendText(mStr);
mTaskMaxLvl->Enable();
mStr.clear();
mStr.Printf("%u", mTask.duration);
mTaskDuration->Clear();
mTaskDuration->AppendText(mStr);
mTaskDuration->Enable();
mStr.clear();
mStr.Printf("%s", mTask.reward);
mRewardName->Clear();
mRewardName->AppendText(mStr);
mRewardName->Enable();
mStr.clear();
mStr.Printf("%u", mTask.rewardid);
mRewardID->Clear();
mRewardID->AppendText(mStr);
mRewardID->Enable();
mStr.clear();
mStr.Printf("%u", mTask.cashreward);
mRewardCash->Clear();
mRewardCash->AppendText(mStr);
mRewardCash->Enable();
mStr.clear();
mStr.Printf("%i", mTask.xpreward);
mRewardXP->Clear();
mRewardXP->AppendText(mStr);
mRewardXP->Enable();
mStr.clear();
mRewardMethod->Select(mTask.rewardmethod);
mRewardMethod->Enable();
ShowRewardChange(mTask.rewardmethod, mTask.rewardid);
mStartZone->Enable();
SetZoneSelectionById(mTask.startzone);
mTaskRepeatable->Enable();
mTaskRepeatable->SetValue(mTask.repeatable);
ClearActivities();
ActivitiesSelectionList->Enable();
PopulateActivities();
openedActivity.activityid = -1;
openedActivity.id = -1;
openedActivity.step = -1;
mActText1->Clear();
mActText1->Disable();
mActText2->Clear();
mActText2->Disable();
mActText3->Clear();
mActText3->Disable();
mActivityZone->Select(0);
mActivityZone->Disable();
mActivityOptional->SetValue(false);
mActivityOptional->Disable();
mActID->Clear();
mActID->Disable();
mActStep->Clear();
mActStep->Disable();
mActType->Select(0);
mActType->Disable();
mActDeliver->Clear();
mActDeliver->Disable();
mActGoalID->Clear();
mActGoalID->Disable();
mActGoalCount->Clear();
mActGoalCount->Disable();
mActMethod->Select(2);
mActMethod->Disable();
ShowRewardItems->Enable();
RefreshItems->Enable();
}
void MainFrame::ContextClick(wxContextMenuEvent& event)
{
mErrorLog->Log(eqEmuLogBoth, "Context Menu Requested");
if(event.GetPosition() == wxDefaultPosition)
{
mErrorLog->Log(eqEmuLogBoth, "Context Menu Triggered From Keyboard.");
}
else{
wxPoint p = event.GetPosition();
mErrorLog->Log(eqEmuLogBoth, "Context Menu Triggered At (%d,%d)", p.x, p.y);
wxPoint stcp = ScreenToClient(p);
mErrorLog->Log(eqEmuLogBoth, "Context Menu Triggered At (%d,%d)(Adjusted for Client)", stcp.x, stcp.y);
//big box on the side: holds tasks
if(stcp.x >= 7 && stcp.x <= 133)
{
if(stcp.y >=7 && stcp.y <= 258)
{
ContextMenuTaskList();
}
}
//small box on the 2nd tab: must be on top to work
if(stcp.x >= 146 && stcp.x <= 243)
{
if(stcp.y >=23 && stcp.y <= 529)
{
if(MainPanel2->IsShownOnScreen())
ContextMenuActivityList();
else if(MainPanel3->IsShownOnScreen())
ContextMenuGoalList();
else if(MainPanel4->IsShownOnScreen())
ContextMenuProximity();
}
}
if(stcp.x >= 297 && stcp.x <= 442)
{
if(stcp.y >= 74 && stcp.y <= 368)
{
if(MainPanel3->IsShownOnScreen() && GoalsValuesList->IsEnabled())
ContextMenuGoalValueList();
}
}
}
}
void MainFrame::About(wxCommandEvent& event)
{
wxAboutDialogInfo info;
info.SetName(_("Task Master"));
info.SetVersion(_(TASK_MASTER_VERSION));
info.SetDescription(_("Task Creation Tool"));
info.SetWebSite("www.eqemulator.net");
wxAboutBox(info);
}