1
0
forked from 0ad/0ad
0ad/source/tools/atlas/AtlasUI/CustomControls/EditableListCtrl/FieldEditCtrl.cpp
Ykkrosh d0146135c4 Initial Actor Editor code
This was SVN commit r2025.
2005-03-19 22:29:32 +00:00

92 lines
2.0 KiB
C++

#include "stdafx.h"
#include "FieldEditCtrl.h"
#include "ListCtrlValidator.h"
#include "QuickTextCtrl.h"
#include "AtlasDialog.h"
#include "EditableListCtrl.h"
#include "AtlasObject/AtlasObject.h"
#include "AtlasObject/AtlasObjectText.h"
#include <string>
void FieldEditCtrl_Text::StartEdit(wxWindow* parent, wxRect rect, long row, int col)
{
new QuickTextCtrl(parent, rect, ListCtrlValidator((EditableListCtrl*)parent, row, col));
}
//////////////////////////////////////////////////////////////////////////
class EditCommand_Dialog : public wxCommand
{
public:
EditCommand_Dialog(EditableListCtrl* ctrl, long row, int col, AtObj& newData)
: wxCommand(true, _("Edit")), m_Ctrl(ctrl), m_Row(row), m_Col(col), m_NewData(newData)
{
}
bool Do()
{
m_Ctrl->CloneListData(m_OldData);
m_Ctrl->MakeSizeAtLeast(m_Row+1);
m_Ctrl->SetCellObject(m_Row, m_Col, m_NewData);
m_Ctrl->UpdateDisplay();
m_Ctrl->SetSelection(m_Row);
return true;
}
bool Undo()
{
m_Ctrl->SetListData(m_OldData);
m_Ctrl->UpdateDisplay();
m_Ctrl->SetSelection(m_Row);
return true;
}
private:
EditableListCtrl* m_Ctrl;
long m_Row;
int m_Col;
AtObj m_NewData;
std::vector<AtObj> m_OldData;
};
FieldEditCtrl_Dialog::FieldEditCtrl_Dialog(wxString dialogType)
: m_DialogType(dialogType)
{
}
void FieldEditCtrl_Dialog::StartEdit(wxWindow* parent, wxRect WXUNUSED(rect), long row, int col)
{
AtlasDialog* dialog = wxDynamicCast(wxCreateDynamicObject(m_DialogType), AtlasDialog);
wxCHECK2(dialog, return);
dialog->SetParent(parent);
EditableListCtrl* editCtrl = (EditableListCtrl*)parent;
AtObj in (editCtrl->GetCellObject(row, col));
dialog->Import(in);
int ret = dialog->ShowModal();
if (ret == wxID_OK)
{
AtObj out;
dialog->Export(out);
AtlasWindowCommandProc::GetFromParentFrame(parent)->Submit(
new EditCommand_Dialog(editCtrl, row, col, out)
);
}
delete dialog;
}