Expression support

- Added Context::getColumns to return a vector of column names.
  This is to help a shift toward using the Column objects to assist
  in the parsing/validation of data entry/modifications.
- Added Column::modifiable to delegate an attributes readable/writeable
  state.  This means the columns will be in charge of their own
  mutability, which will simplify and generalize Command::modify_task.
This commit is contained in:
Paul Beckingham 2011-07-23 12:08:13 -04:00
parent ee9199b4e0
commit 1164ea5cf1
6 changed files with 49 additions and 27 deletions

View file

@ -411,6 +411,17 @@ void Context::shadow ()
*/ */
} }
////////////////////////////////////////////////////////////////////////////////
const std::vector <std::string> Context::getColumns () const
{
std::vector <std::string> output;
std::map <std::string, Column*>::const_iterator i;
for (i = columns.begin (); i != columns.end (); ++i)
output.push_back (i->first);
return output;
}
//////////////////////////////////////////////////////////////////////////////// ////////////////////////////////////////////////////////////////////////////////
void Context::assumeLocations () void Context::assumeLocations ()
{ {

View file

@ -58,6 +58,8 @@ public:
int getWidth (); // determine terminal width int getWidth (); // determine terminal width
int getHeight (); // determine terminal height int getHeight (); // determine terminal height
const std::vector <std::string> getColumns () const;
bool color (); // TTY or <other>? bool color (); // TTY or <other>?
bool verbose (const std::string&); // Verbosity control bool verbose (const std::string&); // Verbosity control

View file

@ -38,10 +38,11 @@ extern Context context;
//////////////////////////////////////////////////////////////////////////////// ////////////////////////////////////////////////////////////////////////////////
ColumnID::ColumnID () ColumnID::ColumnID ()
{ {
_name = "id"; _name = "id";
_type = "number"; _type = "number";
_style = "number"; _style = "number";
_label = STRING_COLUMN_LABEL_ID; _label = STRING_COLUMN_LABEL_ID;
_modifiable = false;
_styles.push_back ("number"); _styles.push_back ("number");

View file

@ -38,10 +38,11 @@ extern Context context;
//////////////////////////////////////////////////////////////////////////////// ////////////////////////////////////////////////////////////////////////////////
ColumnUUID::ColumnUUID () ColumnUUID::ColumnUUID ()
{ {
_name = "uuid"; _name = "uuid";
_type = "string"; _type = "string";
_style = "long"; _style = "long";
_label = STRING_COLUMN_LABEL_UUID; _label = STRING_COLUMN_LABEL_UUID;
_modifiable = false;
_styles.push_back ("long"); _styles.push_back ("long");
_styles.push_back ("short"); _styles.push_back ("short");

View file

@ -132,17 +132,19 @@ Column::Column ()
, _style ("default") , _style ("default")
, _label ("") , _label ("")
, _report ("") , _report ("")
, _modifiable (true)
{ {
} }
//////////////////////////////////////////////////////////////////////////////// ////////////////////////////////////////////////////////////////////////////////
Column::Column (const Column& other) Column::Column (const Column& other)
{ {
_name = other._name; _name = other._name;
_type = other._type; _type = other._type;
_style = other._style; _style = other._style;
_label = other._label; _label = other._label;
_label = other._report; _label = other._report;
_modifiable = other._modifiable;
} }
//////////////////////////////////////////////////////////////////////////////// ////////////////////////////////////////////////////////////////////////////////
@ -150,11 +152,12 @@ Column& Column::operator= (const Column& other)
{ {
if (this != &other) if (this != &other)
{ {
_name = other._name; _name = other._name;
_type = other._type; _type = other._type;
_style = other._style; _style = other._style;
_label = other._label; _label = other._label;
_report = other._report; _report = other._report;
_modifiable = other._modifiable;
} }
return *this; return *this;
@ -163,10 +166,12 @@ Column& Column::operator= (const Column& other)
//////////////////////////////////////////////////////////////////////////////// ////////////////////////////////////////////////////////////////////////////////
bool Column::operator== (const Column& other) const bool Column::operator== (const Column& other) const
{ {
return _name == other._name && return _name == other._name &&
_type == other._type && _type == other._type &&
_style == other._style && _style == other._style &&
_label == other._label; _label == other._label &&
_report == other._report &&
_modifiable == other._modifiable;
} }
//////////////////////////////////////////////////////////////////////////////// ////////////////////////////////////////////////////////////////////////////////

View file

@ -45,11 +45,12 @@ public:
bool operator== (const Column&) const; // TODO Is this necessary? bool operator== (const Column&) const; // TODO Is this necessary?
~Column (); ~Column ();
std::string style () const { return _style; } std::string style () const { return _style; }
std::string label () const { return _label; } std::string label () const { return _label; }
std::string type () const { return _type; } std::string type () const { return _type; }
std::vector <std::string> styles () const { return _styles; } bool modifiable () const { return _modifiable; }
std::vector <std::string> examples () const { return _examples; } std::vector <std::string> styles () const { return _styles; }
std::vector <std::string> examples () const { return _examples; }
virtual void setStyle (const std::string& value) { _style = value; } virtual void setStyle (const std::string& value) { _style = value; }
virtual void setLabel (const std::string& value) { _label = value; } virtual void setLabel (const std::string& value) { _label = value; }
@ -68,6 +69,7 @@ protected:
std::string _style; std::string _style;
std::string _label; std::string _label;
std::string _report; std::string _report;
bool _modifiable;
std::vector <std::string> _styles; std::vector <std::string> _styles;
std::vector <std::string> _examples; std::vector <std::string> _examples;
}; };