2009-06-20 09:13:29 -07:00
|
|
|
/* Copyright (C) 2009 Wildfire Games.
|
|
|
|
|
* This file is part of 0 A.D.
|
|
|
|
|
*
|
|
|
|
|
* 0 A.D. is free software: you can redistribute it and/or modify
|
|
|
|
|
* it under the terms of the GNU General Public License as published by
|
|
|
|
|
* the Free Software Foundation, either version 2 of the License, or
|
|
|
|
|
* (at your option) any later version.
|
|
|
|
|
*
|
|
|
|
|
* 0 A.D. is distributed in the hope that it will be useful,
|
|
|
|
|
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
|
|
|
|
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
|
|
|
|
* GNU General Public License for more details.
|
|
|
|
|
*
|
|
|
|
|
* You should have received a copy of the GNU General Public License
|
|
|
|
|
* along with 0 A.D. If not, see <http://www.gnu.org/licenses/>.
|
|
|
|
|
*/
|
|
|
|
|
|
2007-06-05 11:35:05 -07:00
|
|
|
#include "precompiled.h"
|
2006-04-23 16:14:18 -07:00
|
|
|
|
|
|
|
|
#include "FieldEditCtrl.h"
|
|
|
|
|
|
|
|
|
|
#include "EditableListCtrlCommands.h"
|
|
|
|
|
#include "ListCtrlValidator.h"
|
|
|
|
|
|
|
|
|
|
#include "QuickTextCtrl.h"
|
|
|
|
|
#include "QuickComboBox.h"
|
|
|
|
|
#include "QuickFileCtrl.h"
|
|
|
|
|
|
|
|
|
|
#include "Windows/AtlasDialog.h"
|
|
|
|
|
#include "EditableListCtrl/EditableListCtrl.h"
|
|
|
|
|
#include "AtlasObject/AtlasObject.h"
|
|
|
|
|
#include "AtlasObject/AtlasObjectText.h"
|
|
|
|
|
#include "General/Datafile.h"
|
|
|
|
|
|
|
|
|
|
#include "wx/colour.h"
|
|
|
|
|
#include "wx/colordlg.h"
|
|
|
|
|
#include "wx/regex.h"
|
2006-06-11 00:03:59 -07:00
|
|
|
#include "wx/filename.h"
|
2006-04-23 16:14:18 -07:00
|
|
|
|
|
|
|
|
#include <string>
|
|
|
|
|
|
|
|
|
|
//////////////////////////////////////////////////////////////////////////
|
|
|
|
|
|
|
|
|
|
void FieldEditCtrl_Text::StartEdit(wxWindow* parent, wxRect rect, long row, int col)
|
|
|
|
|
{
|
2006-11-11 20:02:36 -08:00
|
|
|
ListCtrlValidator validator((EditableListCtrl*)parent, row, col);
|
|
|
|
|
new QuickTextCtrl(parent, rect, validator);
|
2006-04-23 16:14:18 -07:00
|
|
|
}
|
|
|
|
|
|
|
|
|
|
//////////////////////////////////////////////////////////////////////////
|
|
|
|
|
|
|
|
|
|
void FieldEditCtrl_Colour::StartEdit(wxWindow* parent, wxRect WXUNUSED(rect), long row, int col)
|
|
|
|
|
{
|
|
|
|
|
EditableListCtrl* editCtrl = (EditableListCtrl*)parent;
|
|
|
|
|
wxColour oldColour;
|
|
|
|
|
wxString oldColourStr (editCtrl->GetCellObject(row, col));
|
|
|
|
|
|
|
|
|
|
// Parse the "r g b" colour string (and ignore leading/trailing junk)
|
|
|
|
|
wxRegEx re (_T("([0-9]+) ([0-9]+) ([0-9]+)")); // don't use \d, since that requires wxRE_ADVANCED
|
|
|
|
|
wxASSERT(re.IsValid());
|
|
|
|
|
if (re.Matches(oldColourStr))
|
|
|
|
|
{
|
|
|
|
|
wxASSERT(re.GetMatchCount() == 4); // 1 for matched string, +3 for captured groups
|
|
|
|
|
long r, g, b;
|
|
|
|
|
re.GetMatch(oldColourStr, 1).ToLong(&r);
|
|
|
|
|
re.GetMatch(oldColourStr, 2).ToLong(&g);
|
|
|
|
|
re.GetMatch(oldColourStr, 3).ToLong(&b);
|
|
|
|
|
oldColour = wxColour(r, g, b);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
wxColour newColour = wxGetColourFromUser(parent, oldColour);
|
|
|
|
|
|
|
|
|
|
if (newColour.Ok()) // test whether the user cancelled the selection
|
|
|
|
|
{
|
|
|
|
|
wxString newColourStr = wxString::Format(_T("%d %d %d"), newColour.Red(), newColour.Green(), newColour.Blue());
|
|
|
|
|
AtlasWindowCommandProc::GetFromParentFrame(editCtrl)->Submit(
|
|
|
|
|
new EditCommand_Text(editCtrl, row, col, newColourStr)
|
|
|
|
|
);
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
//////////////////////////////////////////////////////////////////////////
|
|
|
|
|
|
|
|
|
|
FieldEditCtrl_List::FieldEditCtrl_List(const char* listType)
|
|
|
|
|
: m_ListType(listType)
|
|
|
|
|
{
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
void FieldEditCtrl_List::StartEdit(wxWindow* parent, wxRect rect, long row, int col)
|
|
|
|
|
{
|
|
|
|
|
wxArrayString choices;
|
|
|
|
|
|
|
|
|
|
AtObj list (Datafile::ReadList(m_ListType));
|
|
|
|
|
for (AtIter it = list["item"]; it.defined(); ++it)
|
2006-11-11 20:02:36 -08:00
|
|
|
choices.Add((wxString)it);
|
2006-04-23 16:14:18 -07:00
|
|
|
|
2006-11-11 20:02:36 -08:00
|
|
|
ListCtrlValidator validator((EditableListCtrl*)parent, row, col);
|
|
|
|
|
new QuickComboBox(parent, rect, choices, validator);
|
2006-04-23 16:14:18 -07:00
|
|
|
}
|
|
|
|
|
|
|
|
|
|
//////////////////////////////////////////////////////////////////////////
|
|
|
|
|
|
2006-09-22 10:43:00 -07:00
|
|
|
FieldEditCtrl_Dialog::FieldEditCtrl_Dialog(AtlasDialog* (*dialogCtor)(wxWindow*))
|
|
|
|
|
: m_DialogCtor(dialogCtor)
|
2006-04-23 16:14:18 -07:00
|
|
|
{
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
void FieldEditCtrl_Dialog::StartEdit(wxWindow* parent, wxRect WXUNUSED(rect), long row, int col)
|
|
|
|
|
{
|
2006-09-22 10:43:00 -07:00
|
|
|
AtlasDialog* dialog = m_DialogCtor(parent);
|
2006-04-23 16:14:18 -07:00
|
|
|
wxCHECK2(dialog, return);
|
|
|
|
|
|
|
|
|
|
dialog->SetParent(parent);
|
|
|
|
|
|
|
|
|
|
EditableListCtrl* editCtrl = (EditableListCtrl*)parent;
|
|
|
|
|
|
|
|
|
|
AtObj in (editCtrl->GetCellObject(row, col));
|
|
|
|
|
dialog->ImportData(in);
|
|
|
|
|
|
|
|
|
|
int ret = dialog->ShowModal();
|
|
|
|
|
|
|
|
|
|
if (ret == wxID_OK)
|
|
|
|
|
{
|
|
|
|
|
AtObj out (dialog->ExportData());
|
|
|
|
|
|
|
|
|
|
AtlasWindowCommandProc::GetFromParentFrame(parent)->Submit(
|
|
|
|
|
new EditCommand_Dialog(editCtrl, row, col, out)
|
|
|
|
|
);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
delete dialog;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
//////////////////////////////////////////////////////////////////////////
|
|
|
|
|
|
|
|
|
|
FieldEditCtrl_File::FieldEditCtrl_File(const wxString& rootDir, const wxString& fileMask)
|
2008-10-05 14:00:37 -07:00
|
|
|
: m_RootDir(rootDir), m_FileMask(fileMask)
|
2006-04-23 16:14:18 -07:00
|
|
|
{
|
2008-10-05 14:00:37 -07:00
|
|
|
// Make the rootDir path absolute (where rootDir is relative to binaries/system),
|
|
|
|
|
// defaulting to the 'public' mod:
|
2008-09-18 04:46:14 -07:00
|
|
|
wxFileName path (_T("mods/public/") + rootDir);
|
2006-04-23 16:14:18 -07:00
|
|
|
wxASSERT(path.IsOk());
|
|
|
|
|
path.MakeAbsolute(Datafile::GetDataDirectory());
|
|
|
|
|
wxASSERT(path.IsOk());
|
2008-10-05 14:00:37 -07:00
|
|
|
m_RememberedDir = path.GetPath();
|
2006-04-23 16:14:18 -07:00
|
|
|
}
|
|
|
|
|
|
|
|
|
|
void FieldEditCtrl_File::StartEdit(wxWindow* parent, wxRect rect, long row, int col)
|
|
|
|
|
{
|
2006-11-11 20:02:36 -08:00
|
|
|
ListCtrlValidator validator((EditableListCtrl*)parent, row, col);
|
|
|
|
|
new QuickFileCtrl(parent, rect, m_RootDir, m_FileMask, m_RememberedDir, validator);
|
|
|
|
|
}
|