Fixed Actions for TextCtrl, actions used to apply to the wrong value.

Changed some TABs to spaces in macros, that should end the conflicts because we use different tab sizes (4 vs 8)

git-svn-id: svn://svn.code.sf.net/p/magicseteditor/code/trunk@234 0fc631ac-6414-0410-93d0-97cfa31319b6
This commit is contained in:
twanvl
2007-03-24 20:27:38 +00:00
parent c0eb224386
commit f1c5a8b974
16 changed files with 229 additions and 117 deletions
+22 -2
View File
@@ -10,6 +10,8 @@
#include <data/set.hpp>
#include <data/game.hpp>
#include <data/keyword.hpp>
#include <util/tagged_string.hpp>
#include <gfx/gfx.hpp>
DECLARE_TYPEOF_COLLECTION(KeywordP);
@@ -23,7 +25,7 @@ KeywordList::KeywordList(Window* parent, int id, long additional_style)
: ItemList(parent, id, additional_style)
{
// Add columns
InsertColumn(0, _LABEL_("keyword"), wxLIST_FORMAT_LEFT, 100);
InsertColumn(0, _LABEL_("keyword"), wxLIST_FORMAT_LEFT, 0);
InsertColumn(1, _LABEL_("match"), wxLIST_FORMAT_LEFT, 200);
InsertColumn(2, _LABEL_("mode"), wxLIST_FORMAT_LEFT, 100);
InsertColumn(3, _LABEL_("uses"), wxLIST_FORMAT_RIGHT, 80);
@@ -51,11 +53,21 @@ void KeywordList::onAction(const Action& action, bool undone) {
// ----------------------------------------------------------------------------- : KeywordListBase : for ItemList
String match_string(const Keyword& a) {
return untag(replace_all(replace_all(
a.match,
_("<param>"), _("")),
_("</param>"), _(""))
);
}
void KeywordList::getItems(vector<VoidP>& out) const {
FOR_EACH(k, set->keywords) {
k->fixed = false;
out.push_back(k);
}
FOR_EACH(k, set->game->keywords) {
k->fixed = true;
out.push_back(k);
}
}
@@ -83,7 +95,7 @@ String KeywordList::OnGetItemText (long pos, long col) const {
const Keyword& kw = *getKeyword(pos);
switch(col) {
case 0: return kw.keyword;
case 1: return kw.match;
case 1: return match_string(kw);
case 2: return kw.mode;
case 3: return _("TODO");
case 4: return _("TODO");
@@ -93,3 +105,11 @@ String KeywordList::OnGetItemText (long pos, long col) const {
int KeywordList::OnGetItemImage(long pos) const {
return -1;
}
wxListItemAttr* KeywordList::OnGetItemAttr(long pos) const {
// black for set keywords, grey for game keywords (uneditable)
const Keyword& kw = *getKeyword(pos);
if (!kw.fixed) return nullptr;
item_attr.SetTextColour(lerp(wxSystemSettings::GetColour(wxSYS_COLOUR_WINDOW),wxSystemSettings::GetColour(wxSYS_COLOUR_WINDOWTEXT),0.5));
return &item_attr;
}
+4
View File
@@ -68,9 +68,13 @@ class KeywordList : public ItemList, public SetView {
/// Get the image of an item, by default no image is used
/** Overrides a function from wxListCtrl */
virtual int OnGetItemImage(long pos) const;
/// Get the color for an item
virtual wxListItemAttr* OnGetItemAttr(long pos) const;
private:
void storeColumns();
mutable wxListItemAttr item_attr; // for OnGetItemAttr
};
// ----------------------------------------------------------------------------- : EOF
+10 -3
View File
@@ -37,7 +37,7 @@ void TextCtrl::setValue(String* value) {
// create a field, style and value
TextFieldP field(new TextField);
TextStyleP style(new TextStyle(field));
TextValueP value(new TextValue(field));
TextValueP value(new FakeTextValue(field, this->value));
// set stuff
field->index = 0;
field->multi_line = true;
@@ -57,6 +57,11 @@ void TextCtrl::setValue(String* value) {
viewers.front()->getEditor()->determineSize(true);
// We don't wan to change the window size
//SetMinSize(RealSize(style->width + 6, style->height + 6));
} else if (value) {
// create a new value, for a different underlying actual value
ValueViewer& viewer = *viewers.front();
TextValueP new_value(new FakeTextValue(static_pointer_cast<TextField>(viewer.getField()), this->value));
viewer.setValue(new_value);
}
valueChanged();
}
@@ -70,13 +75,15 @@ void TextCtrl::valueChanged() {
}
void TextCtrl::onAction(const Action& action, bool undone) {
DataEditor::onAction(action, undone);
/*
TYPE_CASE(action, TextValueAction) {
TextValue& tv = static_cast<TextValue&>(*viewers.front()->getValue());
if (&tv == action.valueP.get()) {
FakeTextValue& tv = static_cast<FakeTextValue&>(*viewers.front()->getValue());
if (tv.equals(action.valueP.get())) {
// the value has changed
if (value) *value = tv.value();
}
}
*/
}
void TextCtrl::onChangeSet() {
DataEditor::onChangeSet();
+33 -5
View File
@@ -8,8 +8,10 @@
#include <gui/set/keywords_panel.hpp>
#include <gui/control/keyword_list.hpp>
#include <gui/control/text_ctrl.hpp>
#include <data/keyword.hpp>
#include <wx/listctrl.h>
#include <wx/splitter.h>
// ----------------------------------------------------------------------------- : KeywordsPanel
@@ -17,18 +19,44 @@ KeywordsPanel::KeywordsPanel(Window* parent, int id)
: SetWindowPanel(parent, id)
{
// init controls
list = new KeywordList(this, wxID_ANY);
Panel* panel;
splitter = new wxSplitterWindow(this, wxID_ANY, wxDefaultPosition, wxDefaultSize, 0);
list = new KeywordList(splitter, wxID_ANY);
panel = new Panel(splitter, wxID_ANY);
keyword = new TextCtrl(panel, wxID_ANY);
match = new TextCtrl(panel, wxID_ANY);
reminder = new TextCtrl(panel, wxID_ANY);
rules = new TextCtrl(panel, wxID_ANY);
// init sizer for panel
wxSizer* sp = new wxBoxSizer(wxVERTICAL);
sp->Add(new wxStaticText(panel, wxID_ANY, _("Keyword:")), 0, wxALL, 6);
sp->Add(keyword, 0, wxEXPAND | wxALL & ~wxTOP, 6);
wxSizer* s2 = new wxStaticBoxSizer(wxVERTICAL, panel, _("Match"));
s2->Add(new wxStaticText(panel, wxID_ANY, _("Keyword format:")), 0, wxALL, 6);
s2->Add(match, 0, wxEXPAND | wxALL & ~wxTOP, 6);
s2->Add(new wxStaticText(panel, wxID_ANY, _("Parameters:")), 0, wxALL, 6);
sp->Add(s2, 0, wxEXPAND | wxALL, 6);
sp->Add(new wxStaticText(panel, wxID_ANY, _("Reminder:")), 0, wxALL, 6);
sp->Add(reminder, 0, wxEXPAND | wxALL & ~wxTOP, 6);
sp->Add(new wxStaticText(panel, wxID_ANY, _("Rules:")), 0, wxALL, 6);
sp->Add(rules, 0, wxEXPAND | wxALL & ~wxTOP, 6);
panel->SetSizer(sp);
// init splitter
splitter->SetMinimumPaneSize(100);
splitter->SetSashGravity(0.5);
splitter->SplitVertically(list, panel, -200);
// init sizer
wxSizer* s = new wxBoxSizer(wxHORIZONTAL);
s->Add(list, 1, wxEXPAND);
s->Add(splitter, 1, wxEXPAND);
s->SetSizeHints(this);
SetSizer(s);
//s->Add(new wxStaticText(this, wxID_ANY, _("Sorry, no keywords for now"),wxDefaultPosition,wxDefaultSize,wxALIGN_CENTER), 1, wxALIGN_CENTER); // TODO: Remove
/* wxSizer* s2 = new wxBoxSizer(wxVERTICAL);
s2->Add(list_active, 1, wxEXPAND);
s2->Add(list_inactive, 1, wxEXPAND);*/
s->SetSizeHints(this);
SetSizer(s);
}
void KeywordsPanel::onChangeSet() {
list->setSet(set);
}
}
+8 -2
View File
@@ -12,6 +12,7 @@
#include <util/prec.hpp>
#include <gui/set/panel.hpp>
class wxSplitterWindow;
class KeywordList;
class TextCtrl;
@@ -25,8 +26,13 @@ class KeywordsPanel : public SetWindowPanel {
virtual void onChangeSet();
private:
KeywordList* list;
TextCtrl* keyword;
// --------------------------------------------------- : Controls
wxSplitterWindow* splitter;
KeywordList* list;
TextCtrl* keyword;
TextCtrl* match;
TextCtrl* reminder;
TextCtrl* rules;
};
// ----------------------------------------------------------------------------- : EOF