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 ()
{

View file

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

View file

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

View file

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

View file

@ -132,17 +132,19 @@ Column::Column ()
, _style ("default")
, _label ("")
, _report ("")
, _modifiable (true)
{
}
////////////////////////////////////////////////////////////////////////////////
Column::Column (const Column& other)
{
_name = other._name;
_type = other._type;
_style = other._style;
_label = other._label;
_label = other._report;
_name = other._name;
_type = other._type;
_style = other._style;
_label = other._label;
_label = other._report;
_modifiable = other._modifiable;
}
////////////////////////////////////////////////////////////////////////////////
@ -150,11 +152,12 @@ Column& Column::operator= (const Column& other)
{
if (this != &other)
{
_name = other._name;
_type = other._type;
_style = other._style;
_label = other._label;
_report = other._report;
_name = other._name;
_type = other._type;
_style = other._style;
_label = other._label;
_report = other._report;
_modifiable = other._modifiable;
}
return *this;
@ -163,10 +166,12 @@ Column& Column::operator= (const Column& other)
////////////////////////////////////////////////////////////////////////////////
bool Column::operator== (const Column& other) const
{
return _name == other._name &&
_type == other._type &&
_style == other._style &&
_label == other._label;
return _name == other._name &&
_type == other._type &&
_style == other._style &&
_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?
~Column ();
std::string style () const { return _style; }
std::string label () const { return _label; }
std::string type () const { return _type; }
std::vector <std::string> styles () const { return _styles; }
std::vector <std::string> examples () const { return _examples; }
std::string style () const { return _style; }
std::string label () const { return _label; }
std::string type () const { return _type; }
bool modifiable () const { return _modifiable; }
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 setLabel (const std::string& value) { _label = value; }
@ -68,6 +69,7 @@ protected:
std::string _style;
std::string _label;
std::string _report;
bool _modifiable;
std::vector <std::string> _styles;
std::vector <std::string> _examples;
};