new userString methode

This commit is contained in:
jriegel 2013-12-01 21:55:24 +01:00
parent 3a3afa0783
commit 87c4741fac
12 changed files with 84 additions and 89 deletions

View File

@ -39,8 +39,10 @@
# pragma warning(disable : 4335) // disable MAC file format warning on VC # pragma warning(disable : 4335) // disable MAC file format warning on VC
#endif #endif
using namespace Base; using namespace Base;
double Quantity::defaultFactor = 1.0;
Quantity::Quantity() Quantity::Quantity()
{ {
@ -117,18 +119,23 @@ Quantity& Quantity::operator = (const Quantity &New)
return *this; return *this;
} }
double Quantity::getUserPrefered(QString &unitString)const QString Quantity::getUserString(double &factor,QString &unitString)
{ {
return Base::UnitsApi::schemaPrefUnit(_Unit,unitString).getValue() * _Value; return Base::UnitsApi::schemaTranslate(*this,factor,unitString);
} }
std::string Quantity::getUserString(void)const //double Quantity::getUserPrefered(QString &unitString)const
{ //{
std::stringstream sstream; // return Base::UnitsApi::schemaPrefUnit(_Unit,unitString).getValue() * _Value;
sstream << _Value << _Unit.getString(); //}
//TODO: implementing //
return sstream.str(); //std::string Quantity::getUserString(void)const
} //{
// std::stringstream sstream;
// sstream << _Value << _Unit.getString();
// //TODO: implementing
// return sstream.str();
//}
/// true if it has a number without a unit /// true if it has a number without a unit
bool Quantity::isDimensionless(void)const bool Quantity::isDimensionless(void)const

View File

@ -62,9 +62,10 @@ public:
//@} //@}
/// transfer to user prefered unit/potence /// transfer to user prefered unit/potence
double getUserPrefered() const { QString dummy; return getUserPrefered(dummy); } QString getUserString(double &factor=defaultFactor,QString &unitString=QString());
double getUserPrefered(QString &unitString) const; //double getUserPrefered() const { QString dummy; return getUserPrefered(dummy); }
std::string getUserString(void)const; //double getUserPrefered(QString &unitString) const;
//std::string getUserString(void)const;
static Quantity parse(const char* buffer); static Quantity parse(const char* buffer);
@ -167,6 +168,7 @@ public:
//@} //@}
static double defaultFactor;
protected: protected:

View File

@ -57,6 +57,7 @@ using namespace Base;
// return QString::fromLatin1(QuantityNames[t]); // return QString::fromLatin1(QuantityNames[t]);
//} //}
// === static attributes ================================================ // === static attributes ================================================
double UnitsApi::defaultFactor = 1.0;
UnitsSchema *UnitsApi::UserPrefSystem = new UnitsSchemaInternal(); UnitsSchema *UnitsApi::UserPrefSystem = new UnitsSchemaInternal();
@ -103,15 +104,11 @@ void UnitsApi::setSchema(UnitSystem s)
// === static translation methodes ========================================== // === static translation methodes ==========================================
QString UnitsApi::schemaTranslate(Base::Quantity quant) QString UnitsApi::schemaTranslate(Base::Quantity quant,double &factor,QString &unitString)
{ {
return UserPrefSystem->schemaTranslate(quant); return UserPrefSystem->schemaTranslate(quant,factor,unitString);
} }
Base::Quantity UnitsApi::schemaPrefUnit(const Base::Unit &unit,QString &outUnitString)
{
return UserPrefSystem->schemaPrefUnit(unit,outUnitString);
}
//QString UnitsApi::toStrWithUserPrefs(QuantityType t,double Value) //QString UnitsApi::toStrWithUserPrefs(QuantityType t,double Value)
//{ //{

View File

@ -62,13 +62,7 @@ public:
*/ */
static void setSchema(UnitSystem s); static void setSchema(UnitSystem s);
static QString schemaTranslate(Base::Quantity quant,double &factor=defaultFactor,QString &unitString=QString());
/// raw parser interface to calculat units (only from and to internal)
//tatic Quantity translateUnit(const char*);
//static Quantity translateUnit(const QString &);
static QString schemaTranslate(Base::Quantity quant);
static Base::Quantity schemaPrefUnit(const Base::Unit &unit,QString &outUnitString);
/// generate a value for a quantity with default user prefered system /// generate a value for a quantity with default user prefered system
static double toDbl(PyObject *ArgObj,const Base::Unit &u=Base::Unit()); static double toDbl(PyObject *ArgObj,const Base::Unit &u=Base::Unit());
/// generate a value for a quantity with default user prefered system /// generate a value for a quantity with default user prefered system
@ -87,6 +81,8 @@ public:
// Python interface // Python interface
static PyMethodDef Methods[]; static PyMethodDef Methods[];
static double defaultFactor;
protected: protected:
// not used at the moment // not used at the moment

View File

@ -50,9 +50,7 @@ class UnitsSchema
{ {
public: public:
/// this methode translate the quantity in a string as the user may expect it /// this methode translate the quantity in a string as the user may expect it
virtual QString schemaTranslate(Base::Quantity quant)=0; virtual QString schemaTranslate(Base::Quantity quant,double &factor,QString &unitString)=0;
// returns the prefered unit as string and the quantity to translate
virtual Base::Quantity schemaPrefUnit(const Base::Unit &unit,QString &outUnitString)=0;
}; };

View File

@ -34,25 +34,25 @@
using namespace Base; using namespace Base;
QString UnitsSchemaImperial1::schemaTranslate(Base::Quantity quant) QString UnitsSchemaImperial1::schemaTranslate(Base::Quantity quant,double &factor,QString &unitString)
{ {
double UnitValue = quant.getValue(); double UnitValue = quant.getValue();
Unit unit = quant.getUnit(); Unit unit = quant.getUnit();
return QString::fromAscii("%1 %2").arg(UnitValue).arg(QString::fromAscii(unit.getString().c_str())); return QString::fromAscii("%1 %2").arg(UnitValue).arg(QString::fromAscii(unit.getString().c_str()));
} }
//
Base::Quantity UnitsSchemaImperial1::schemaPrefUnit(const Base::Unit &unit,QString &outUnitString) //Base::Quantity UnitsSchemaImperial1::schemaPrefUnit(const Base::Unit &unit,QString &outUnitString)
{ //{
if(unit == Unit::Length){ // if(unit == Unit::Length){
outUnitString = QString::fromAscii("\""); // outUnitString = QString::fromAscii("\"");
return Base::Quantity(1/25.40,Unit::Length); // return Base::Quantity(1/25.40,Unit::Length);
}else if(unit == Unit::Mass){ // }else if(unit == Unit::Mass){
outUnitString = QString::fromAscii("lb"); // outUnitString = QString::fromAscii("lb");
return Base::Quantity(1/0.45359237,Unit::Length); // return Base::Quantity(1/0.45359237,Unit::Length);
}else{ // }else{
outUnitString = QString::fromAscii(unit.getString().c_str()); // outUnitString = QString::fromAscii(unit.getString().c_str());
return Base::Quantity(1,unit); // return Base::Quantity(1,unit);
} // }
//
} //}

View File

@ -39,8 +39,8 @@ namespace Base {
class UnitsSchemaImperial1: public UnitsSchema class UnitsSchemaImperial1: public UnitsSchema
{ {
public: public:
virtual QString schemaTranslate(Base::Quantity quant); virtual QString schemaTranslate(Base::Quantity quant,double &factor,QString &unitString);
Base::Quantity schemaPrefUnit(const Base::Unit &unit,QString &outUnitString);
}; };

View File

@ -34,22 +34,22 @@
using namespace Base; using namespace Base;
QString UnitsSchemaInternal::schemaTranslate(Base::Quantity quant) QString UnitsSchemaInternal::schemaTranslate(Base::Quantity quant,double &factor,QString &unitString)
{ {
double UnitValue = quant.getValue(); double UnitValue = quant.getValue();
Unit unit = quant.getUnit(); Unit unit = quant.getUnit();
return QString::fromAscii("%1 %2").arg(UnitValue).arg(QString::fromAscii(unit.getString().c_str())); return QString::fromAscii("%1 %2").arg(UnitValue).arg(QString::fromAscii(unit.getString().c_str()));
} }
//
Base::Quantity UnitsSchemaInternal::schemaPrefUnit(const Base::Unit &unit,QString &outUnitString) //Base::Quantity UnitsSchemaInternal::schemaPrefUnit(const Base::Unit &unit,QString &outUnitString)
{ //{
if(unit == Unit::Length){ // if(unit == Unit::Length){
outUnitString = QString::fromAscii("mm"); // outUnitString = QString::fromAscii("mm");
return Base::Quantity(1.0,Unit::Length); // return Base::Quantity(1.0,Unit::Length);
}else{ // }else{
outUnitString = QString::fromAscii(unit.getString().c_str()); // outUnitString = QString::fromAscii(unit.getString().c_str());
return Base::Quantity(1,unit); // return Base::Quantity(1,unit);
} // }
} }

View File

@ -40,8 +40,7 @@ namespace Base {
class UnitsSchemaInternal: public UnitsSchema class UnitsSchemaInternal: public UnitsSchema
{ {
public: public:
virtual QString schemaTranslate(Base::Quantity quant); virtual QString schemaTranslate(Base::Quantity quant,double &factor,QString &unitString);
Base::Quantity schemaPrefUnit(const Base::Unit &unit,QString &outUnitString);
}; };

View File

@ -34,22 +34,22 @@
using namespace Base; using namespace Base;
QString UnitsSchemaMKS::schemaTranslate(Base::Quantity quant) QString UnitsSchemaMKS::schemaTranslate(Base::Quantity quant,double &factor,QString &unitString)
{ {
double UnitValue = quant.getValue(); double UnitValue = quant.getValue();
Unit unit = quant.getUnit(); Unit unit = quant.getUnit();
return QString::fromAscii("%1 %2").arg(UnitValue).arg(QString::fromAscii(unit.getString().c_str())); return QString::fromAscii("%1 %2").arg(UnitValue).arg(QString::fromAscii(unit.getString().c_str()));
} }
//
Base::Quantity UnitsSchemaMKS::schemaPrefUnit(const Base::Unit &unit,QString &outUnitString) //Base::Quantity UnitsSchemaMKS::schemaPrefUnit(const Base::Unit &unit,QString &outUnitString)
{ //{
if(unit == Unit::Length){ // if(unit == Unit::Length){
outUnitString = QString::fromAscii("m"); // outUnitString = QString::fromAscii("m");
return Base::Quantity(1/1000.0,Unit::Length); // return Base::Quantity(1/1000.0,Unit::Length);
}else{ // }else{
outUnitString = QString::fromAscii(unit.getString().c_str()); // outUnitString = QString::fromAscii(unit.getString().c_str());
return Base::Quantity(1,unit); // return Base::Quantity(1,unit);
} // }
//
} //}

View File

@ -38,8 +38,8 @@ namespace Base {
class UnitsSchemaMKS: public UnitsSchema class UnitsSchemaMKS: public UnitsSchema
{ {
public: public:
virtual QString schemaTranslate(Base::Quantity quant); virtual QString schemaTranslate(Base::Quantity quant,double &factor,QString &unitString);
Base::Quantity schemaPrefUnit(const Base::Unit &unit,QString &outUnitString);
}; };

View File

@ -655,13 +655,10 @@ QVariant PropertyUnitItem::toString(const QVariant& Value) const
const std::vector<App::Property*>& prop = getPropertyData(); const std::vector<App::Property*>& prop = getPropertyData();
if (!prop.empty() && prop.front()->getTypeId().isDerivedFrom(App::PropertyQuantity::getClassTypeId())) { if (!prop.empty() && prop.front()->getTypeId().isDerivedFrom(App::PropertyQuantity::getClassTypeId())) {
Base::Quantity value = static_cast<const App::PropertyQuantity*>(prop.front())->getQuantityValue(); Base::Quantity value = static_cast<const App::PropertyQuantity*>(prop.front())->getQuantityValue();
value.getUserPrefered(unit); unit = value.getUserString();
unit.prepend(QLatin1String(" "));
} }
QString data = QString::fromAscii("%1 %2").arg(val,0,'f',decimals()).arg(unit); return QVariant(unit);
return QVariant(data);
} }
QVariant PropertyUnitItem::value(const App::Property* prop) const QVariant PropertyUnitItem::value(const App::Property* prop) const
@ -669,7 +666,7 @@ QVariant PropertyUnitItem::value(const App::Property* prop) const
assert(prop && prop->getTypeId().isDerivedFrom(App::PropertyQuantity::getClassTypeId())); assert(prop && prop->getTypeId().isDerivedFrom(App::PropertyQuantity::getClassTypeId()));
Base::Quantity value = static_cast<const App::PropertyQuantity*>(prop)->getQuantityValue(); Base::Quantity value = static_cast<const App::PropertyQuantity*>(prop)->getQuantityValue();
QString unitString; QString unitString;
return QVariant(value.getUserPrefered(unitString)); return QVariant(value.getValue());
} }
void PropertyUnitItem::setValue(const QVariant& value) void PropertyUnitItem::setValue(const QVariant& value)
@ -684,12 +681,10 @@ void PropertyUnitItem::setValue(const QVariant& value)
return; return;
else if (prop.front()->getTypeId().isDerivedFrom(App::PropertyQuantity::getClassTypeId())) { else if (prop.front()->getTypeId().isDerivedFrom(App::PropertyQuantity::getClassTypeId())) {
Base::Quantity value = static_cast<const App::PropertyQuantity*>(prop.front())->getQuantityValue(); Base::Quantity value = static_cast<const App::PropertyQuantity*>(prop.front())->getQuantityValue();
value.getUserPrefered(unit); unit = value.getUserString();
unit.prepend(QLatin1String(" "));
} }
QString data = QString::fromAscii("'%1%2'").arg(val,0,'f',decimals()).arg(unit); setPropertyValue(unit);
setPropertyValue(data);
} }
QWidget* PropertyUnitItem::createEditor(QWidget* parent, const QObject* receiver, const char* method) const QWidget* PropertyUnitItem::createEditor(QWidget* parent, const QObject* receiver, const char* method) const
@ -712,9 +707,10 @@ void PropertyUnitItem::setEditorData(QWidget *editor, const QVariant& data) cons
else if (prop.front()->getTypeId().isDerivedFrom(App::PropertyQuantity::getClassTypeId())) { else if (prop.front()->getTypeId().isDerivedFrom(App::PropertyQuantity::getClassTypeId())) {
Base::Quantity value = static_cast<const App::PropertyQuantity*>(prop.front())->getQuantityValue(); Base::Quantity value = static_cast<const App::PropertyQuantity*>(prop.front())->getQuantityValue();
QString unitString; QString unitString;
value.getUserPrefered(unitString); //double factor;
unitString.prepend(QLatin1String(" ")); //value.getUserString(unitString);
sb->setSuffix(unitString); //unitString.prepend(QLatin1String(" "));
//sb->setSuffix(unitString);
} }
} }