+
+
+CLASS(StringSource, DataSource)
+ ATTRIB(StringSource, StringSource_str, string, string_null)
+ ATTRIB(StringSource, StringSource_sep, string, string_null)
+ CONSTRUCTOR(StringSource, string str, string sep)
+ {
+ CONSTRUCT(StringSource);
+ this.StringSource_str = str;
+ this.StringSource_sep = sep;
+ }
+ METHOD(StringSource, getEntry, entity(entity this, int i, void(string name, string icon) returns))
+ {
+ int n = tokenizebyseparator(this.StringSource_str, this.StringSource_sep);
+ if (i < 0 || i >= n) return DataSource_false;
+ string s = argv(i);
+ if (returns) returns(s, string_null);
+ return DataSource_true;
+ }
+ METHOD(StringSource, reload, int(entity this, string filter))
+ {
+ return tokenizebyseparator(this.StringSource_str, this.StringSource_sep);
+ }
+ENDCLASS(StringSource)
+
+CLASS(CvarStringSource, StringSource)
+ ATTRIB(CvarStringSource, CvarStringSource_cvar, string, string_null)
+ CONSTRUCTOR(CvarStringSource, string cv, string sep)
+ {
+ CONSTRUCT(CvarStringSource);
+ this.CvarStringSource_cvar = cv;
+ this.StringSource_sep = sep;
+ }
+ METHOD(CvarStringSource, getEntry, entity(entity this, int i, void(string name, string icon) returns))
+ {
+ string s = this.CvarStringSource_cvar;
+ this.StringSource_str = s ? cvar_string(s) : string_null;
+ return super.getEntry(this, i, returns);
+ }
+ METHOD(CvarStringSource, reload, int(entity this, string filter))
+ {
+ string s = this.CvarStringSource_cvar;
+ this.StringSource_str = s ? cvar_string(s) : string_null;
+ return super.reload(this, filter);
+ }
+ENDCLASS(CvarStringSource)