[dyntrans-cvs] qt-tr/src/tools qtrhandler.cpp,1.2,1.3 qtrhandler.h,1.2,1.3 qtrstring.cpp,1.4,1.5 qtr
Status: Pre-Alpha
Brought to you by:
klichota
|
From: Krzysztof L. <kli...@us...> - 2004-11-18 09:59:33
|
Update of /cvsroot/dyntrans/qt-tr/src/tools In directory sc8-pr-cvs1.sourceforge.net:/tmp/cvs-serv21011 Modified Files: qtrhandler.cpp qtrhandler.h qtrstring.cpp qtrstring.h qtrstringelements.cpp qtrstringelements.h Log Message: * Added Arg string element. * Moved creating arg, number and untranslated elements to TrHandler. Index: qtrstring.h =================================================================== RCS file: /cvsroot/dyntrans/qt-tr/src/tools/qtrstring.h,v retrieving revision 1.4 retrieving revision 1.5 diff -u -d -r1.4 -r1.5 --- qtrstring.h 27 Sep 2004 23:47:18 -0000 1.4 +++ qtrstring.h 18 Nov 2004 09:59:22 -0000 1.5 @@ -11,6 +11,9 @@ class QTrStringElement; +typedef signed long int SignedNumber; +typedef unsigned long int UnsignedNumber; + class QTrString { public: @@ -48,12 +51,12 @@ /** Returns translated message. */ - QString getTranslation() const; + QString getTranslation(QString variantTag = QString("")) const; /** Returns whether translation of string is valid. */ - bool translationValid() const; + bool translationValid(QString variantTag = QString("")) const; /** Returns translatable string element. Index: qtrhandler.h =================================================================== RCS file: /cvsroot/dyntrans/qt-tr/src/tools/qtrhandler.h,v retrieving revision 1.2 retrieving revision 1.3 diff -u -d -r1.2 -r1.3 --- qtrhandler.h 26 Sep 2004 22:59:23 -0000 1.2 +++ qtrhandler.h 18 Nov 2004 09:59:22 -0000 1.3 @@ -8,7 +8,7 @@ #define _QTRHANDLER_H_9933232 #include "qtrstring.h" - + /** Interface for class which can be registered to handle translation events. */ @@ -34,6 +34,60 @@ Returns whether widgets should draw attention to invalid translations. */ virtual bool highlightInvalidTranslations() = 0; + + // Elements creation methods + + /** + Creates string element for string which has been created using interface not allowing translations. + */ + virtual QTrStringElement* createUntranslatedElement( + QString const & originalText + ) = 0; + + /** + Creates string element for concatenation of strings. + + Ownership of subcomponents is passed to this object. + */ + virtual QTrStringElement* createConcatElement( + QTrStringElement *first, + QTrStringElement *second + ) = 0; + + /** + Creates string element for plural form of signed number. + + Ownership of subcomponents is passed to this object. + */ + virtual QTrStringElement* createPluralSignedElement( + QTrStringElement *text, + SignedNumber number, + int fieldWidth = 0, + int base = 10 + ) = 0; + + /** + Creates string element for plural form of unsigned number. + + Ownership of subcomponents is passed to this object. + */ + virtual QTrStringElement* createPluralUnsignedElement( + QTrStringElement *text, + UnsignedNumber number, + int fieldWidth = 0, + int base = 10 + ) = 0; + + /** + Creates string element for .arg() application operator. + + Ownership of subcomponents is passed to this object. + */ + virtual QTrStringElement* createArgElement( + QTrStringElement *base, + QTrStringElement *argument, + int fieldWidth = 0 + ) = 0; }; /** @@ -50,6 +104,35 @@ virtual bool openGlobalTranslationMenu(); virtual bool highlightInvalidTranslations(); + + virtual QTrStringElement* createUntranslatedElement( + QString const & originalText + ); + + virtual QTrStringElement* createConcatElement( + QTrStringElement *first, + QTrStringElement *second + ); + + virtual QTrStringElement* createPluralSignedElement( + QTrStringElement *text, + SignedNumber number, + int fieldWidth = 0, + int base = 10 + ); + + virtual QTrStringElement* createPluralUnsignedElement( + QTrStringElement *text, + UnsignedNumber number, + int fieldWidth = 0, + int base = 10 + ); + + virtual QTrStringElement* createArgElement( + QTrStringElement *base, + QTrStringElement *argument, + int fieldWidth = 0 + ); }; /** Index: qtrstring.cpp =================================================================== RCS file: /cvsroot/dyntrans/qt-tr/src/tools/qtrstring.cpp,v retrieving revision 1.4 retrieving revision 1.5 diff -u -d -r1.4 -r1.5 --- qtrstring.cpp 27 Sep 2004 23:47:18 -0000 1.4 +++ qtrstring.cpp 18 Nov 2004 09:59:22 -0000 1.5 @@ -6,6 +6,7 @@ #include "qtrstring.h" #include "qtrstringelements.h" +#include "qapplication.h" QTrString::QTrString(QTrString const& other) { @@ -14,14 +15,18 @@ QTrString::QTrString( ): - element(new QUntranslatedTrStringElement("")) + element( + QApplication::getTrHandler()->createUntranslatedElement("") + ) { } QTrString::QTrString( QString const & qstring ): - element(new QUntranslatedTrStringElement(qstring.isNull() ? "" : qstring)) + element( + QApplication::getTrHandler()->createUntranslatedElement(qstring.isNull() ? "" : qstring) + ) { } @@ -30,7 +35,9 @@ QTrString::QTrString( char const* const string ): - element(new QUntranslatedTrStringElement(QString(string))) + element( + QApplication::getTrHandler()->createUntranslatedElement(QString(string)) + ) { } @@ -46,7 +53,7 @@ return this->element->getTranslation(variantTag); } -bool QTrString::translationValid(QString variantTag) const +bool QTrString::translationValid(QString /*variantTag*/) const { return this->element->translationValid(); } @@ -101,17 +108,63 @@ QTrString operator+(QTrString const & left, QTrString const & right) { - return new QConcatTrStringElement( - left.getRootTrStringElement()->copy(), - right.getRootTrStringElement()->copy() + return QTrString( + QApplication::getTrHandler()->createConcatElement( + left.getRootTrStringElement()->copy(), + right.getRootTrStringElement()->copy() + ) + ); +} + +QTrString QTrString::arg( long a, int fieldWidth, int base) const +{ + return QTrString( + QApplication::getTrHandler()->createPluralSignedElement( + this->getRootTrStringElement()->copy(), + a, + fieldWidth, + base + ) + ); +} + +QTrString QTrString::arg( ulong a, int fieldWidth, int base) const +{ + return QTrString( + QApplication::getTrHandler()->createPluralSignedElement( + this->getRootTrStringElement()->copy(), + a, + fieldWidth, + base + ) + ); +} + +QTrString QTrString::arg( const QString& a, int fieldWidth) const +{ + return QTrString( + QApplication::getTrHandler()->createArgElement( + this->getRootTrStringElement()->copy(), + ((QTrString)a).getRootTrStringElement()->copy(), + fieldWidth + ) + ); +} + +QTrString QTrString::arg( const QTrString& a, int fieldWidth) const +{ + return QTrString( + QApplication::getTrHandler()->createArgElement( + this->getRootTrStringElement()->copy(), + a.getRootTrStringElement()->copy(), + fieldWidth + ) ); } #if 0 -//FIXME: implement arg methods +//FIXME: implement all arg methods //arg methods - QTrString arg( long a, int fieldWidth = 0, int base = 10 ) const; - QTrString arg( ulong a, int fieldWidth = 0, int base = 10 ) const; QTrString arg( Q_LLONG a, int fieldwidth=0, int base=10 ) const; QTrString arg( Q_ULLONG a, int fieldwidth=0, int base=10 ) const; QTrString arg( int a, int fieldWidth = 0, int base = 10 ) const; @@ -122,18 +175,60 @@ int prec = -1 ) const; QTrString arg( char a, int fieldWidth = 0 ) const; QTrString arg( QChar a, int fieldWidth = 0 ) const; - QTrString arg( const QString& a, int fieldWidth = 0 ) const; QTrString arg( const QString& a1, const QString& a2 ) const; QTrString arg( const QString& a1, const QString& a2, const QString& a3 ) const; QTrString arg( const QString& a1, const QString& a2, const QString& a3, const QString& a4 ) const; - QTrString arg( const QTrString& a, int fieldWidth = 0 ) const; QTrString arg( const QTrString& a1, const QTrString& a2 ) const; QTrString arg( const QTrString& a1, const QTrString& a2, const QTrString& a3 ) const; QTrString arg( const QTrString& a1, const QTrString& a2, const QTrString& a3, const QTrString& a4 ) const; + //add these to interface + QString section( QChar sep, int start, int end = 0xffffffff, int flags = SectionDefault ) const; + QString section( char sep, int start, int end = 0xffffffff, int flags = SectionDefault ) const; +#ifndef QT_NO_CAST_ASCII + QString section( const char *in_sep, int start, int end = 0xffffffff, int flags = SectionDefault ) const; +#endif + QString section( const QString &in_sep, int start, int end = 0xffffffff, int flags = SectionDefault ) const; +#ifndef QT_NO_REGEXP + QString section( const QRegExp ®, int start, int end = 0xffffffff, int flags = SectionDefault ) const; +#endif + + + QString left( uint len ) const; + QString right( uint len ) const; + QString mid( uint index, uint len=0xffffffff) const; + + QString leftJustify( uint width, QChar fill=' ', bool trunc=FALSE)const; + QString rightJustify( uint width, QChar fill=' ',bool trunc=FALSE)const; + + QString lower() const; + QString upper() const; + + QString stripWhiteSpace() const; + QString simplifyWhiteSpace() const; + + //add these too? + short toShort( bool *ok=0, int base=10 ) const; + ushort toUShort( bool *ok=0, int base=10 ) const; + int toInt( bool *ok=0, int base=10 ) const; + uint toUInt( bool *ok=0, int base=10 ) const; + long toLong( bool *ok=0, int base=10 ) const; + ulong toULong( bool *ok=0, int base=10 ) const; + Q_LLONG toLongLong( bool *ok=0, int base=10 ) const; + Q_ULLONG toULongLong( bool *ok=0, int base=10 ) const; + float toFloat( bool *ok=0 ) const; + double toDouble( bool *ok=0 ) const; + + //these for sure + QChar at( uint i ) const + { return i < d->len ? d->unicode[i] : QChar::null; } + QChar operator[]( int i ) const { return at((uint)i); } + QCharRef at( uint i ); + QCharRef operator[]( int i ); + #endif Index: qtrstringelements.cpp =================================================================== RCS file: /cvsroot/dyntrans/qt-tr/src/tools/qtrstringelements.cpp,v retrieving revision 1.3 retrieving revision 1.4 diff -u -d -r1.3 -r1.4 --- qtrstringelements.cpp 26 Sep 2004 22:59:23 -0000 1.3 +++ qtrstringelements.cpp 18 Nov 2004 09:59:22 -0000 1.4 @@ -24,11 +24,18 @@ return QTrString("Untranslated"); } -QString QUntranslatedTrStringElement::getTranslation() +QString QUntranslatedTrStringElement::getTranslation(QString /*variantTag*/) { + //variant not supported return this->getOriginalString(); } +QString QUntranslatedTrStringElement::getTranslationForm() +{ + //does not support forms + return QString(""); +} + QString QUntranslatedTrStringElement::getOriginalString() { return this->text; @@ -44,7 +51,7 @@ return this->getOriginalString(); } -bool QUntranslatedTrStringElement::translationValid() +bool QUntranslatedTrStringElement::translationValid(QString /*variantTag*/) { if (this->getOriginalString().isEmpty()) { @@ -80,14 +87,21 @@ return QTrString("StaticTranslated"); } -QString QStaticTranslatedTrStringElement::getTranslation() +QString QStaticTranslatedTrStringElement::getTranslation(QString /*variantTag*/) { - return this->getTranslationComponent(); + //variant not supported + return this->getTranslationComponent(); } - + +QString QStaticTranslatedTrStringElement::getTranslationForm() +{ + //does not support forms + return QString(""); +} + QString QStaticTranslatedTrStringElement::getOriginalString() { - return this->getOriginalComponent(); + return this->getOriginalComponent(); } QString QStaticTranslatedTrStringElement::getTranslationComponent() @@ -100,8 +114,14 @@ return this->originalText; } -bool QStaticTranslatedTrStringElement::translationValid() +bool QStaticTranslatedTrStringElement::translationValid(QString variantTag) { + if (variantTag.isEmpty() == FALSE) + { + //variant not supported, so it is not valid translation + return FALSE; + } + return TRUE; } @@ -142,11 +162,18 @@ return QTrString("Concat"); } -QString QConcatTrStringElement::getTranslation() +QString QConcatTrStringElement::getTranslation(QString /*variantTag*/) { + //variant not supported return this->first->getTranslation() + this->second->getTranslation(); } +QString QConcatTrStringElement::getTranslationForm() +{ + //does not support forms + return QString(""); +} + QString QConcatTrStringElement::getOriginalString() { return this->first->getOriginalString() + this->second->getOriginalString(); @@ -162,8 +189,13 @@ return QString(""); } -bool QConcatTrStringElement::translationValid() +bool QConcatTrStringElement::translationValid(QString variantTag) { + if (variantTag.isEmpty() == FALSE) + { + return FALSE; + } + if (this->first->translationValid() == FALSE) { return FALSE; @@ -185,13 +217,246 @@ ); } -std::vector<std::pair<QTrString, QTrStringElement*> > QConcatTrStringElement::getSubcomponents() +CompoundQTrStringElementInterface::SubcomponentsList QConcatTrStringElement::getSubcomponents() { - std::vector<std::pair<QTrString, QTrStringElement*> > subcomponents; + SubcomponentsList subcomponents; subcomponents.push_back(std::make_pair(QTrString("Left"), this->first)); subcomponents.push_back(std::make_pair(QTrString("Right"), this->second)); return subcomponents; } +/*************************** QArgTrStringElement ************************************/ + +QArgTrStringElement::QArgTrStringElement( + QTrStringElement *_base, + QTrStringElement *_argument, + int _fieldWidth + ): + base(_base), + argument(_argument), + fieldWidth(_fieldWidth) +{ + ASSERT(this->base != NULL); + ASSERT(this->argument != NULL); +} + +QArgTrStringElement::~QArgTrStringElement() +{ + delete this->base; + delete this->argument; +} + +QTrString QArgTrStringElement::getElementName() +{ + return QTrString("Arg"); +} + +QString QArgTrStringElement::getTranslation(QString /*variantTag*/) +{ + //variant not supported + return this->base->getTranslation().arg( + this->argument->getTranslation(), + this->fieldWidth + ); +} + +QString QArgTrStringElement::getTranslationForm() +{ + //does not support forms + return QString(""); +} + +QString QArgTrStringElement::getOriginalString() +{ + //NOTE: no fieldWidth used as original string should not be padded, fieldWidth is just formatting + return this->base->getOriginalString().arg( + this->argument->getOriginalString() + ); +} + +QString QArgTrStringElement::getTranslationComponent() +{ + return QString(""); +} + +QString QArgTrStringElement::getOriginalComponent() +{ + return QString(""); +} + +bool QArgTrStringElement::translationValid(QString variantTag) +{ + if (variantTag.isEmpty() == FALSE) + { + return FALSE; + } + + if (this->base->translationValid() == FALSE) + { + return FALSE; + } + + if (this->argument->translationValid() == FALSE) + { + return FALSE; + } + + return TRUE; +} + +QArgTrStringElement *QArgTrStringElement::copy() +{ + return new QArgTrStringElement( + this->base->copy(), + this->argument->copy(), + this->fieldWidth + ); +} +CompoundQTrStringElementInterface::SubcomponentsList QArgTrStringElement::getSubcomponents() +{ + SubcomponentsList subcomponents; + + subcomponents.push_back(std::make_pair(QTrString("Base"), this->base)); + subcomponents.push_back(std::make_pair(QTrString("Argument"), this->argument)); + + return subcomponents; +} + +/************************************** QNumberTrStringElement ********************************/ + +QNumberTrStringElement::QNumberTrStringElement( + QTrStringElement *_text, + SignedNumber _number, + int _fieldWidth, + int _base + ): + text(_text), + isSigned(TRUE), + fieldWidth(_fieldWidth), + base(_base) +{ + this->getSignedNumberRef() = _number; + ASSERT(this->text != NULL); +} + +QNumberTrStringElement::QNumberTrStringElement( + QTrStringElement *_text, + UnsignedNumber _number, + int _fieldWidth, + int _base + ): + text(_text), + isSigned(FALSE), + fieldWidth(_fieldWidth), + base(_base) +{ + this->getUnsignedNumberRef() = _number; + ASSERT(this->text != NULL); +} + +QNumberTrStringElement::~QNumberTrStringElement() +{ + delete this->text; +} + +QTrString QNumberTrStringElement::getElementName() +{ + return QTrString("Number"); +} + +QString QNumberTrStringElement::getTranslation(QString /*variantTag*/) +{ + //variant not supported + QString translatedText = this->text->getTranslation(); + + QString result; + + if (this->isSigned) + { + result = translatedText.arg( + this->getSignedNumberRef(), + this->fieldWidth, + this->base + ); + } + else + { + result = translatedText.arg( + this->getUnsignedNumberRef(), + this->fieldWidth, + this->base + ); + } + + return result; +} + +QString QNumberTrStringElement::getTranslationForm() +{ + //not supported + return QString(""); +} + +QString QNumberTrStringElement::getOriginalString() +{ + return this->text->getOriginalString(); +} + +QString QNumberTrStringElement::getTranslationComponent() +{ + return this->text->getTranslationComponent(); +} + +QString QNumberTrStringElement::getOriginalComponent() +{ + return this->text->getOriginalComponent(); +} + +bool QNumberTrStringElement::translationValid(QString /*variantTag*/) +{ + // translation always invalid as we don't support per-language plural forms + return FALSE; +} + +QNumberTrStringElement *QNumberTrStringElement::copy() +{ + if (this->isSigned) + { + return new QNumberTrStringElement( + this->text->copy(), + this->getSignedNumberRef(), + this->fieldWidth, + this->base + ); + } + else + { + return new QNumberTrStringElement( + this->text->copy(), + this->getUnsignedNumberRef(), + this->fieldWidth, + this->base + ); + } +} + +CompoundQTrStringElementInterface::SubcomponentsList QNumberTrStringElement::getSubcomponents() +{ + SubcomponentsList subcomponents; + + subcomponents.push_back(std::make_pair(QTrString("Text"), this->text)); + + return subcomponents; +} + +UnsignedNumber & QNumberTrStringElement::getUnsignedNumberRef() +{ + return this->number; +} + +SignedNumber & QNumberTrStringElement::getSignedNumberRef() +{ + return (SignedNumber&)this->number; +} Index: qtrhandler.cpp =================================================================== RCS file: /cvsroot/dyntrans/qt-tr/src/tools/qtrhandler.cpp,v retrieving revision 1.2 retrieving revision 1.3 diff -u -d -r1.2 -r1.3 --- qtrhandler.cpp 26 Sep 2004 22:59:23 -0000 1.2 +++ qtrhandler.cpp 18 Nov 2004 09:59:22 -0000 1.3 @@ -5,6 +5,9 @@ */ #include "qtrhandler.h" +#include "qmessagebox.h" +#include "qapplication.h" +#include "qtrstringelements.h" QTrHandlerDefault defaultTrHandler; @@ -12,13 +15,80 @@ QTrString & string ) { + QMessageBox::information(NULL, QApplication::tr("Editing translation not possible"), QApplication::tr("Editing translation of %1 not possible").arg(string)); + + return FALSE; } bool QTrHandlerDefault::openGlobalTranslationMenu() { + QMessageBox::information(NULL, QApplication::tr("No translations menu"), QApplication::tr("No translations menu")); + + return FALSE; } bool QTrHandlerDefault::highlightInvalidTranslations() { return FALSE; } + +QTrStringElement* QTrHandlerDefault::createUntranslatedElement( + QString const & originalText + ) +{ + return new QUntranslatedTrStringElement(originalText); +} + +QTrStringElement* QTrHandlerDefault::createConcatElement( + QTrStringElement *first, + QTrStringElement *second + ) +{ + return new QConcatTrStringElement( + first, + second + ); +} + +QTrStringElement* QTrHandlerDefault::createPluralSignedElement( + QTrStringElement *text, + SignedNumber number, + int fieldWidth, + int base + ) +{ + return new QNumberTrStringElement( + text, + number, + fieldWidth, + base + ); +} + +QTrStringElement* QTrHandlerDefault::createPluralUnsignedElement( + QTrStringElement *text, + UnsignedNumber number, + int fieldWidth, + int base + ) +{ + return new QNumberTrStringElement( + text, + number, + fieldWidth, + base + ); +} + +QTrStringElement* QTrHandlerDefault::createArgElement( + QTrStringElement *base, + QTrStringElement *argument, + int fieldWidth + ) +{ + return new QArgTrStringElement( + base, + argument, + fieldWidth + ); +} Index: qtrstringelements.h =================================================================== RCS file: /cvsroot/dyntrans/qt-tr/src/tools/qtrstringelements.h,v retrieving revision 1.3 retrieving revision 1.4 diff -u -d -r1.3 -r1.4 --- qtrstringelements.h 26 Sep 2004 22:59:23 -0000 1.3 +++ qtrstringelements.h 18 Nov 2004 09:59:22 -0000 1.4 @@ -22,7 +22,15 @@ If translation is not available, returns original string. Example: "Konfiguruj: Konqueror" */ - virtual QString getTranslation() = 0; + virtual QString getTranslation(QString variantTag = QString("")) = 0; + + /** + Returns form of given string. + + Form is independent of variant (thus it is not passed), but + it can depend on forms of subcomponents. + */ + virtual QString getTranslationForm() = 0; /** Returns (evaluated) original, untranslated string. @@ -51,7 +59,7 @@ Invalid translation includes creation through QString conversion, lack of translation, etc. */ - virtual bool translationValid() = 0; + virtual bool translationValid(QString variantTag = QString("")) = 0; /** Performs deep copy of string element. @@ -104,7 +112,9 @@ public: QUntranslatedTrStringElement(QString const & text); - virtual QString getTranslation(); + virtual QString getTranslation(QString variantTag = QString("")); + + virtual QString getTranslationForm(); virtual QString getOriginalString(); @@ -112,7 +122,7 @@ virtual QString getOriginalComponent(); - virtual bool translationValid(); + virtual bool translationValid(QString variantTag = QString("")); virtual QUntranslatedTrStringElement *copy(); @@ -139,13 +149,10 @@ QString const & translatedText ); - virtual QString getTranslation(); + virtual QString getTranslation(QString variantTag = QString("")); - /** - Updates currently stored translation. - - EditableQTrStringElementInterface interface. - */ + virtual QString getTranslationForm(); + virtual void updateTranslation(QString const & translatedText); virtual QString getOriginalString(); @@ -154,7 +161,7 @@ virtual QString getOriginalComponent(); - virtual bool translationValid(); + virtual bool translationValid(QString variantTag = QString("")); virtual QStaticTranslatedTrStringElement *copy(); @@ -162,6 +169,11 @@ virtual QTrString getElementName(); + /** + Updates currently stored translation. + + EditableQTrStringElementInterface interface. + */ protected: QString originalText; QString translatedText; @@ -179,26 +191,28 @@ Ownership of both string elements is passed to this object. */ QConcatTrStringElement( - QTrStringElement *_first, - QTrStringElement *_second + QTrStringElement *first, + QTrStringElement *second ); virtual ~QConcatTrStringElement(); virtual QTrString getElementName(); - virtual QString getTranslation(); + virtual QString getTranslation(QString variantTag = QString("")); + virtual QString getTranslationForm(); + virtual QString getOriginalString(); virtual QString getTranslationComponent(); virtual QString getOriginalComponent(); - virtual bool translationValid(); + virtual bool translationValid(QString variantTag = QString("")); - virtual QConcatTrStringElement *copy(); - + virtual QConcatTrStringElement *copy(); + /** CompoundQTrStringElementInterface interface. */ @@ -208,5 +222,133 @@ QTrStringElement *second; }; +/** + Element representing applying argument to other string. +*/ +class QArgTrStringElement: + public QTrStringElement, + public CompoundQTrStringElementInterface +{ +public: + /** + Ownership of both string elements is passed to this object. + */ + QArgTrStringElement( + QTrStringElement *base, + QTrStringElement *argument, + int fieldWidth = 0 + ); + + virtual ~QArgTrStringElement(); + + virtual QTrString getElementName(); + + virtual QString getTranslation(QString variantTag = QString("")); + + virtual QString getTranslationForm(); + + virtual QString getOriginalString(); + + virtual QString getTranslationComponent(); + + virtual QString getOriginalComponent(); + + virtual bool translationValid(QString variantTag = QString("")); + + virtual QArgTrStringElement *copy(); + + /** + CompoundQTrStringElementInterface interface. + */ + virtual SubcomponentsList getSubcomponents(); + +protected: + QTrStringElement *base; + QTrStringElement *argument; + int fieldWidth; +}; + +/** + Element representing applying number to other string. + + @attention This is simple implementation which does not differentiate plural forms! +*/ +class QNumberTrStringElement: + public QTrStringElement, + public CompoundQTrStringElementInterface +{ +public: + /** + Constructor for unsigned case. + + Ownership of text element is passed to this object. + */ + QNumberTrStringElement( + QTrStringElement *text, + UnsignedNumber number, + int fieldWidth = 0, + int base = 10 + ); + + /** + Constructor for signed case. + + Ownership of text element is passed to this object. + */ + QNumberTrStringElement( + QTrStringElement *text, + SignedNumber number, + int fieldWidth = 0, + int base = 10 + ); + + virtual ~QNumberTrStringElement(); + + virtual QTrString getElementName(); + + virtual QString getTranslation(QString variantTag = QString("")); + + virtual QString getTranslationForm(); + + virtual QString getOriginalString(); + + virtual QString getTranslationComponent(); + + virtual QString getOriginalComponent(); + + virtual bool translationValid(QString variantTag = QString("")); + + virtual QNumberTrStringElement *copy(); + + /** + CompoundQTrStringElementInterface interface. + */ + virtual SubcomponentsList getSubcomponents(); + +protected: + QTrStringElement *text; + + /** + Number field, can keep signed or unsigned number, depending on isSigned field. + + This is hack to avoid multiple implementation. + FIXME: split this class into two classes for signed and unsigned case. + */ + UnsignedNumber number; + bool isSigned; + + int fieldWidth; + int base; + + /** + Auxiliary function to cast number field to signed number. + */ + UnsignedNumber & getUnsignedNumberRef(); + + /** + Auxiliary function to cast number field to unsigned number. + */ + SignedNumber & getSignedNumberRef(); +}; #endif //#ifndef _QTRSTRINGELEMENTS_H_2293034 |