Fixed undo issue for combined editor;

Added keyword usage statistics

git-svn-id: svn://svn.code.sf.net/p/magicseteditor/code/trunk@516 0fc631ac-6414-0410-93d0-97cfa31319b6
This commit is contained in:
twanvl
2007-07-07 00:55:27 +00:00
parent e3939813dc
commit 86235dfc91
11 changed files with 66 additions and 5 deletions
+4
View File
@@ -16,6 +16,7 @@
class Game;
class Dependency;
class Keyword;
DECLARE_POINTER_TYPE(Card);
DECLARE_POINTER_TYPE(Field);
DECLARE_POINTER_TYPE(Value);
@@ -50,6 +51,9 @@ class Card : public IntrusivePtrVirtualBase {
/// Styling information for a particular stylesheet
IndexMap<FieldP, ValueP>& extraDataFor(const StyleSheet& stylesheet) ;
/// Keyword usage statistics
vector<pair<Value*,const Keyword*> > keyword_usage;
/// Get the identification of this card, an identification is something like a name, title, etc.
/** May return "" */
String identification() const;
+2
View File
@@ -199,6 +199,8 @@ StyleListener::~StyleListener() {
// ----------------------------------------------------------------------------- : Value
IMPLEMENT_DYNAMIC_ARG(Value*, value_being_updated, nullptr);
Value::~Value() {}
IMPLEMENT_REFLECTION_NAMELESS(Value) {
+3
View File
@@ -29,6 +29,9 @@ class DataViewer; class DataEditor;
DECLARE_POINTER_TYPE(ValueViewer);
DECLARE_POINTER_TYPE(ValueEditor);
// Value for which script updates are being run
DECLARE_DYNAMIC_ARG(Value*, value_being_updated);
// ----------------------------------------------------------------------------- : Field
/// Information on how to store a value
+2 -1
View File
@@ -119,7 +119,8 @@ String TextValue::toString() const {
}
bool TextValue::update(Context& ctx) {
Value::update(ctx);
WITH_DYNAMIC_ARG(last_update_age, value.isDefault() ? 0 : last_update.get());
WITH_DYNAMIC_ARG(last_update_age, last_update.get());
WITH_DYNAMIC_ARG(value_being_updated, this);
bool change = field().default_script.invokeOnDefault(ctx, value)
| field(). script.invokeOn(ctx, value);
if (change) last_update.update();
+1 -1
View File
@@ -92,7 +92,7 @@ class TextStyle : public Style {
/// The Value in a TextField
class TextValue : public Value {
public:
inline TextValue(const TextFieldP& field) : Value(field) {}
inline TextValue(const TextFieldP& field) : Value(field), last_update(1) {}
DECLARE_HAS_FIELD(Text)
typedef Defaultable<String> ValueType;
+20
View File
@@ -17,6 +17,8 @@ DECLARE_TYPEOF_COLLECTION(KeywordModeP);
DECLARE_TYPEOF_COLLECTION(KeywordParamP);
DECLARE_TYPEOF_COLLECTION(const Keyword*);
DECLARE_POINTER_TYPE(KeywordParamValue);
class Value;
DECLARE_DYNAMIC_ARG(Value*, value_being_updated);
// ----------------------------------------------------------------------------- : Reflection
@@ -329,6 +331,8 @@ KeywordTrie* KeywordTrie::insertAnyStar() {
// ----------------------------------------------------------------------------- : KeywordDatabase
IMPLEMENT_DYNAMIC_ARG(KeywordUsageStatistics*, keyword_usage_statistics, nullptr);
KeywordDatabase::KeywordDatabase()
: root(nullptr)
{}
@@ -440,6 +444,17 @@ String KeywordDatabase::expand(const String& text,
Context& ctx) const {
assert(combine_script);
// Clean up usage statistics
KeywordUsageStatistics* stat = keyword_usage_statistics();
Value* stat_key = value_being_updated();
if (stat && stat_key) {
for (size_t i = stat->size() - 1 ; i + 1 > 0 ; --i) { // loop backwards
if ((*stat)[i].first == stat_key) {
stat->erase(stat->begin() + i);
}
}
}
// Remove all old reminder texts
String s = remove_tag_contents(text, _("<atom-reminder"));
s = remove_tag_contents(s, _("<atom-keyword")); // OLD, TODO: REMOVEME
@@ -614,6 +629,11 @@ String KeywordDatabase::expand(const String& text,
result += _("</kw-"); result += expand_type; result += _(">");
}
// Add to usage statistics
if (stat && stat_key) {
stat->push_back(make_pair(stat_key, kw));
}
// After keyword
s = s.substr(end);
untagged = untagged.substr(start_u + len_u);
+6
View File
@@ -11,6 +11,7 @@
#include <util/prec.hpp>
#include <script/scriptable.hpp>
#include <util/dynamic_arg.hpp>
#include <wx/regex.h>
DECLARE_POINTER_TYPE(KeywordParam);
@@ -18,6 +19,7 @@ DECLARE_POINTER_TYPE(KeywordMode);
DECLARE_POINTER_TYPE(Keyword);
DECLARE_POINTER_TYPE(ParamReferenceType);
class KeywordTrie;
class Value;
// ----------------------------------------------------------------------------- : Keyword parameters
@@ -115,6 +117,10 @@ class Keyword : public IntrusivePtrVirtualBase {
// ----------------------------------------------------------------------------- : Using keywords
/// Store keyword usage statistics here, using value_being_updated as the key
typedef vector<pair<Value*, const Keyword*> > KeywordUsageStatistics;
DECLARE_DYNAMIC_ARG(KeywordUsageStatistics*, keyword_usage_statistics);
/// A database of keywords to allow for fast matching
/** NOTE: keywords may not be altered after they are added to the database,
* The database should be rebuild.