2013-02-16 16:14:39 -08:00

328 lines
9.2 KiB
C++

#include <wx/wx.h>
#include <wx/numdlg.h>
#include <mysql.h>
#include <vector>
#include "tasks.h"
#include "utility.h"
#include "base.h"
#include "ErrorLog.h"
using namespace std;
void MainFrame::NewTask(wxCommandEvent& event)
{
if(mMysql){
eqtask newT;
newT.id = (highestIndex+1);
newT.duration = 0;
strcpy(newT.title, "Default Task Name");
strcpy(newT.desc, "Default Task Description");
strcpy(newT.reward, "");
newT.cashreward = 0;
newT.xpreward = 0;
newT.rewardmethod = 2;
newT.rewardid = 0;
newT.startzone = -1;
newT.level_min = 0;
newT.level_max = 0;
newT.repeatable = true;
unsigned int newID = wxGetNumberFromUser("", "ID:", "Input ID", (highestIndex+1), 0, 2147483600);
newT.id = newID;
char * mQuery = 0;
MakeAnyLenString(&mQuery, "INSERT INTO `tasks` (`id`,`duration`,`title`,`description`,`reward`,`rewardid`,`cashreward`,`xpreward`,`rewardmethod`,`startzone`, `minlevel`, `maxlevel`, `repeatable`) VALUES (%u,%u,'%s','%s','%s',%u,%u,%u,%u,%u,%u,%u,%u)",
newT.id, newT.duration, newT.title, newT.desc, newT.reward, newT.rewardid, newT.cashreward, newT.xpreward, newT.rewardmethod, newT.startzone, newT.level_min, newT.level_max, newT.repeatable);
mErrorLog->Log(eqEmuLogSQL, "%s", mQuery);
if (mysql_query(mMysql, mQuery)) {
mErrorLog->Log(eqEmuLogBoth, "MySQL Error: %s", mysql_error(mMysql));
return;
}
taskList.push_back(newT);
wxString str;
str.Printf("%d:%s", newT.id, "Default Task Name");
ItemSelectionList->Append(str);
if(highestIndex < (newID + 1))
highestIndex = newID + 1;
}
else{
mErrorLog->Log(eqEmuLogBoth, "Error with new task create, mysql not initialized");
}
}
void MainFrame::DeleteTask(wxCommandEvent& event)
{
if(selectedIndex < 0)
{
mErrorLog->Log(eqEmuLogBoth, "No item selected for delete, delete failing.");
return;
}
if(mMysql){
int reply = wxMessageBox("Are you sure?", "Confirm Delete", wxYES_NO, this);
if(reply != wxYES)
{
mErrorLog->Log(eqEmuLogBoth, "User aborted delete of task.");
return;
}
vector<eqtask>::iterator Iter;
Iter = taskList.begin();
Iter += selectedIndex;
eqtask mTask = *Iter;
char * mQuery = 0;
MakeAnyLenString(&mQuery, "DELETE FROM `tasks` WHERE id=%u", mTask.id);
mErrorLog->Log(eqEmuLogSQL, "%s", mQuery);
if (mysql_query(mMysql, mQuery)) {
mErrorLog->Log(eqEmuLogBoth, "MySQL Error: %s", mysql_error(mMysql));
return;
}
if(openedIndex == selectedIndex){
wxString mStr;
mStr.Printf("%s", "Task Name");
mTaskName->Clear();
mTaskName->AppendText(mStr);
mTaskName->Disable();
mStr.clear();
mStr.Printf("%s", "Task Description");
mTaskDesc->Clear();
mTaskDesc->AppendText(mStr);
mTaskDesc->Disable();
mStr.clear();
mStr.Printf("%u", 0);
mTaskMinLvl->Clear();
mTaskMinLvl->AppendText(mStr);
mTaskMinLvl->Disable();
mStr.clear();
mStr.Printf("%u", 0);
mTaskMaxLvl->Clear();
mTaskMaxLvl->AppendText(mStr);
mTaskMaxLvl->Disable();
mStr.clear();
mStr.Printf("%u", 0);
mTaskDuration->Clear();
mTaskDuration->AppendText(mStr);
mTaskDuration->Disable();
mStr.clear();
mRewardName->Clear();
mRewardName->Disable();
mStr.Printf("%u", 0);
mRewardID->Clear();
mRewardID->AppendText(mStr);
mRewardID->Disable();
mStr.clear();
mStr.Printf("%u", 0);
mRewardCash->Clear();
mRewardCash->AppendText(mStr);
mRewardCash->Disable();
mStr.clear();
mStr.Printf("%u", 0);
mRewardXP->Clear();
mRewardXP->AppendText(mStr);
mRewardXP->Disable();
mStr.clear();
openedIndex = -1;
mRewardMethod->Select(0);
mRewardMethod->Disable();
mStartZone->Select(0);
mStartZone->Disable();
mTaskRepeatable->SetValue(false);
mTaskRepeatable->Disable();
ShowRewardItems->Disable();
ShowRewardItems->Clear();
RefreshItems->Disable();
ClearActivities();
ActivitiesSelectionList->Disable();
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();
mActMethod->Select(2);
mActMethod->Disable();
mActGoalID->Clear();
mActGoalID->Disable();
mActGoalCount->Clear();
mActGoalCount->Disable();
}
taskList.erase(Iter);
ItemSelectionList->Delete(selectedIndex);
}
else{
mErrorLog->Log(eqEmuLogBoth, "Error with task delete, mysql not initialized");
}
selectedIndex = -1;
}
void MainFrame::OnRewardButton(wxCommandEvent& event)
{
wxString ridStr = mRewardID->GetValue();
int rtype = mRewardMethod->GetCurrentSelection();
int rid = atoi(ridStr.mb_str());
ShowRewardChange(rtype,rid);
}
void MainFrame::SaveTask(wxCommandEvent& event)
{
if(!mMysql){
mErrorLog->Log(eqEmuLogBoth, "Mysql not connected for save of task");
return;
}
if(openedIndex>=0){
mErrorLog->Log(eqEmuLogBoth, "Saving task...");
vector<eqtask>::iterator Iter;
Iter = taskList.begin();
Iter += openedIndex;
eqtask ourTask = *Iter;
wxString getStr;
getStr = mTaskName->GetValue();
strcpy(ourTask.title, getStr.mb_str());
getStr.Clear();
getStr = mTaskDesc->GetValue();
strcpy(ourTask.desc, getStr.mb_str());
getStr.Clear();
getStr = mTaskMinLvl->GetValue();
ourTask.level_min = atoi(getStr.mb_str());
getStr.Clear();
getStr = mTaskMaxLvl->GetValue();
ourTask.level_max = atoi(getStr.mb_str());
getStr.Clear();
getStr = mTaskDuration->GetValue();
ourTask.duration = atoi(getStr.mb_str());
getStr.Clear();
getStr = mRewardName->GetValue();
strcpy(ourTask.reward, getStr.mb_str());
getStr.Clear();
getStr = mRewardID->GetValue();
ourTask.rewardid = atoi(getStr.mb_str());
getStr.Clear();
getStr = mRewardCash->GetValue();
ourTask.cashreward = atoi(getStr.mb_str());
getStr.Clear();
getStr = mRewardXP->GetValue();
ourTask.xpreward = atoi(getStr.mb_str());
getStr.Clear();
int * i = (int*)mStartZone->GetClientData(mStartZone->GetSelection());
ourTask.startzone = *i;
ourTask.rewardmethod = mRewardMethod->GetSelection();
ourTask.repeatable = mTaskRepeatable->GetValue();
char * mQuery = 0;
MakeAnyLenString(&mQuery, "UPDATE tasks SET duration=%u, title='%s', description='%s', reward='%s', rewardid=%u, cashreward=%u, xpreward=%i, rewardmethod=%u, startzone=%u, minlevel=%u, maxlevel=%u, repeatable=%u WHERE id=%u",
ourTask.duration, MakeStringSQLSafe(ourTask.title).mb_str(), MakeStringSQLSafe(ourTask.desc).mb_str(), MakeStringSQLSafe(ourTask.reward).mb_str(), ourTask.rewardid, ourTask.cashreward, ourTask.xpreward, ourTask.rewardmethod, ourTask.startzone, ourTask.level_min, ourTask.level_max, ourTask.repeatable, ourTask.id);
mErrorLog->Log(eqEmuLogSQL, "%s", mQuery);
if (mysql_query(mMysql, mQuery)) {
mErrorLog->Log(eqEmuLogBoth, "MySQL Error: %s", mysql_error(mMysql));
return;
}
/*char * mQuery = 0;
MakeAnyLenString(&mQuery, "DELETE FROM tasks WHERE id=%u", (*Iter).id);
mErrorLog->Log(eqEmuLogSQL, "%s", mQuery);
if (mysql_query(mMysql, mQuery)) {
mErrorLog->Log(eqEmuLogBoth, "MySQL Error: %s", mysql_error(mMysql));
return;
}
MakeAnyLenString(&mQuery, "INSERT INTO `tasks` (`id`,`duration`,`title`,`description`,`reward`,`rewardid`,`cashreward`,`xpreward`,`rewardmethod`,`startzone`, `minlevel`, `maxlevel`) VALUES (%u,%u,'%s','%s','%s',%u,%u,%u,%u,%u,%u,%u)",
ourTask.id, ourTask.duration, MakeStringSQLSafe(ourTask.title).mb_str(), MakeStringSQLSafe(ourTask.desc).mb_str(), MakeStringSQLSafe(ourTask.reward).mb_str(), ourTask.rewardid, ourTask.cashreward, ourTask.xpreward, ourTask.rewardmethod, ourTask.startzone, ourTask.level_min, ourTask.level_max);
mErrorLog->Log(eqEmuLogSQL, "%s", mQuery);
if (mysql_query(mMysql, mQuery)) {
mErrorLog->Log(eqEmuLogBoth, "MySQL Error: %s", mysql_error(mMysql));
return;
}*/
(*Iter).cashreward = ourTask.cashreward;
strcpy((*Iter).desc, ourTask.desc);
(*Iter).duration = ourTask.duration;
(*Iter).level_max = ourTask.level_max;
(*Iter).level_min = ourTask.level_min;
strcpy((*Iter).reward, ourTask.reward);
(*Iter).rewardid = ourTask.rewardid;
(*Iter).rewardmethod = ourTask.rewardmethod;
(*Iter).startzone = ourTask.startzone;
strcpy((*Iter).title, ourTask.title);
(*Iter).xpreward = ourTask.xpreward;
(*Iter).repeatable = ourTask.repeatable;
getStr.Printf("%u:%s", (*Iter).id, (*Iter).title);
ItemSelectionList->SetString(openedIndex, getStr);
mErrorLog->Log(eqEmuLogBoth, "Save finished.");
}
else{
mErrorLog->Log(eqEmuLogBoth, "Opened index for Task Save not valid.");
}
}
void MainFrame::ContextMenuTaskList()
{
if(!mMysql){
mErrorLog->Log(eqEmuLogBoth, "Context menu cannot open, not connected to db");
return;
}
wxMenu *mMenu;
mMenu = new wxMenu();
mMenu->Append(MENU_NewTask, wxT("New Task"), wxT("Creates a new task"));
mMenu->Append(MENU_DeleteTask, wxT("Delete Task"), wxT("Deletes the selected task"));
mMenu->AppendSeparator();
mMenu->Append(MENU_SaveTask, wxT("Save Task"), wxT("Saves the opened task"));
PopupMenu(mMenu);
delete mMenu;
}