| /*************************************************************************** |
| options.cpp |
| ------------------- |
| begin : Sun Dec 23 2001 |
| copyright : (C) 2001 - 2007 by Roland Riegel |
| email : feedback@roland-riegel.de |
| ***************************************************************************/ |
| |
| /*************************************************************************** |
| * * |
| * This program is free software; you can redistribute it and/or modify * |
| * it under the terms of the GNU General Public License as published by * |
| * the Free Software Foundation; either version 2 of the License, or * |
| * (at your option) any later version. * |
| * * |
| ***************************************************************************/ |
| |
| #include <sstream> |
| |
| #include "form_field.h" |
| #include "options.h" |
| |
| using namespace std; |
| |
| static const char* status_format_strings[] = |
| { |
| "Human Readable (Bit)", "Human Readable (Byte)", |
| "Bit", "Byte", |
| "kBit", "kByte", |
| "MBit", "MByte", |
| "GBit", "GByte", |
| 0 |
| }; |
| static const char* bool_strings[] = { "[X]", "[ ]", 0 }; |
| |
| OptionBool::OptionBool(bool new_value, string new_description) |
| : OptionBase(new_description), m_edit_field(0) |
| { |
| m_value = new_value; |
| } |
| |
| OptionBool::~OptionBool() |
| { |
| if(m_edit_field) |
| delete m_edit_field; |
| } |
| |
| string OptionBool::asString() const |
| { |
| return m_value ? string("[X]") : string("[ ]"); |
| } |
| |
| void OptionBool::assignString(const string new_value) |
| { |
| m_value = (new_value.substr(0, 3) == "[X]"); |
| } |
| |
| Field* OptionBool::editField(int x, int y, int width, int height) |
| { |
| if(x < 0 || y < 0) |
| return m_edit_field; |
| if(width < 1 || height < 1) |
| return m_edit_field; |
| |
| if(m_edit_field) |
| delete m_edit_field; |
| |
| m_edit_field = new Field(x, y, width, height); |
| m_edit_field->setFixed(true); |
| m_edit_field->setBlankWithFirstChar(false); |
| m_edit_field->setAutoSkip(false); |
| m_edit_field->setValidateBlank(true); |
| m_edit_field->setBuffer(asString().c_str()); |
| m_edit_field->setEnumField(bool_strings); |
| |
| return m_edit_field; |
| } |
| |
| OptionBool::operator bool() const |
| { |
| return m_value; |
| } |
| |
| OptionBool OptionBool::operator= (bool new_value) |
| { |
| m_value = new_value; |
| |
| return *this; |
| } |
| |
| OptionInt::OptionInt(int new_value, string new_description) |
| : OptionBase(new_description), |
| m_edit_field(0), m_min(0), m_max(0) |
| { |
| m_value = new_value; |
| } |
| |
| OptionInt::~OptionInt() |
| { |
| if(m_edit_field) |
| delete m_edit_field; |
| } |
| |
| string OptionInt::asString() const |
| { |
| ostringstream oss; |
| oss << m_value; |
| return oss.str(); |
| } |
| |
| void OptionInt::assignString(const string new_value) |
| { |
| stringstream ss; |
| ss << new_value; |
| ss >> m_value; |
| } |
| |
| Field* OptionInt::editField(int x, int y, int width, int height) |
| { |
| if(x < 0 || y < 0) |
| return m_edit_field; |
| if(width < 1 || height < 1) |
| return m_edit_field; |
| |
| if(m_edit_field) |
| delete m_edit_field; |
| |
| m_edit_field = new Field(x, y, width, height); |
| m_edit_field->setBlankWithFirstChar(false); |
| m_edit_field->setAutoSkip(false); |
| m_edit_field->setValidateBlank(true); |
| m_edit_field->setBuffer(asString().c_str()); |
| m_edit_field->setIntegerField(m_min, m_max); |
| |
| return m_edit_field; |
| } |
| |
| void OptionInt::min(int new_min) |
| { |
| m_min = new_min; |
| } |
| |
| void OptionInt::max(int new_max) |
| { |
| m_max = new_max; |
| } |
| |
| OptionInt::operator int() const |
| { |
| return m_value; |
| } |
| |
| OptionInt OptionInt::operator= (int new_value) |
| { |
| m_value = new_value; |
| |
| return *this; |
| } |
| |
| OptionLong::OptionLong(long new_value, string new_description) |
| : OptionBase(new_description), |
| m_edit_field(0), m_min(0), m_max(0) |
| { |
| m_value = new_value; |
| } |
| |
| OptionLong::~OptionLong() |
| { |
| if(m_edit_field) |
| delete m_edit_field; |
| } |
| |
| string OptionLong::asString() const |
| { |
| ostringstream oss; |
| oss << m_value; |
| return oss.str(); |
| } |
| |
| void OptionLong::assignString(const string new_value) |
| { |
| stringstream ss; |
| ss << new_value; |
| ss >> m_value; |
| } |
| |
| Field* OptionLong::editField(int x, int y, int width, int height) |
| { |
| if(x < 0 || y < 0) |
| return m_edit_field; |
| if(width < 1 || height < 1) |
| return m_edit_field; |
| |
| if(m_edit_field) |
| delete m_edit_field; |
| |
| m_edit_field = new Field(x, y, width, height); |
| m_edit_field->setBlankWithFirstChar(false); |
| m_edit_field->setAutoSkip(false); |
| m_edit_field->setValidateBlank(true); |
| m_edit_field->setBuffer(asString().c_str()); |
| m_edit_field->setIntegerField(m_min, m_max); |
| |
| return m_edit_field; |
| } |
| |
| void OptionLong::min(int new_min) |
| { |
| m_min = new_min; |
| } |
| |
| void OptionLong::max(int new_max) |
| { |
| m_max = new_max; |
| } |
| |
| OptionLong::operator long() const |
| { |
| return m_value; |
| } |
| |
| OptionLong OptionLong::operator= (long new_value) |
| { |
| m_value = new_value; |
| |
| return *this; |
| } |
| |
| OptionStatusFormat::OptionStatusFormat(Status::status_format new_value, string new_description) |
| : OptionBase(new_description), m_edit_field(0) |
| { |
| m_value = new_value; |
| } |
| |
| OptionStatusFormat::~OptionStatusFormat() |
| { |
| if(m_edit_field) |
| delete m_edit_field; |
| } |
| |
| string OptionStatusFormat::asString() const |
| { |
| return string(status_format_strings[ m_value + 2 ]); |
| } |
| |
| void OptionStatusFormat::assignString(const string new_value) |
| { |
| for(int i = Status::human_readable_bit; i <= Status::gigabyte; i++) |
| { |
| if(new_value.substr(0, string(status_format_strings[ i + 2 ]).size()) == (status_format_strings[ i + 2 ])) |
| { |
| m_value = (Status::status_format) i; |
| break; |
| } |
| } |
| } |
| |
| Field* OptionStatusFormat::editField(int x, int y, int width, int height) |
| { |
| if(x < 0 || y < 0) |
| return m_edit_field; |
| if(width < 1 || height < 1) |
| return m_edit_field; |
| |
| if(m_edit_field) |
| delete m_edit_field; |
| |
| m_edit_field = new Field(x, y, width, height); |
| m_edit_field->setBlankWithFirstChar(false); |
| m_edit_field->setAutoSkip(false); |
| m_edit_field->setValidateBlank(true); |
| m_edit_field->setFixed(true); |
| m_edit_field->setBuffer(asString().c_str()); |
| m_edit_field->setEnumField(status_format_strings); |
| |
| return m_edit_field; |
| } |
| |
| OptionStatusFormat::operator Status::status_format() const |
| { |
| return m_value; |
| } |
| |
| OptionStatusFormat OptionStatusFormat::operator= (Status::status_format new_value) |
| { |
| m_value = new_value; |
| |
| return *this; |
| } |