diff options
author | tpearson <tpearson@283d02a7-25f6-0310-bc7c-ecb5cbfe19da> | 2010-01-20 01:29:50 +0000 |
---|---|---|
committer | tpearson <tpearson@283d02a7-25f6-0310-bc7c-ecb5cbfe19da> | 2010-01-20 01:29:50 +0000 |
commit | 8362bf63dea22bbf6736609b0f49c152f975eb63 (patch) | |
tree | 0eea3928e39e50fae91d4e68b21b1e6cbae25604 /kspread/kspread_value.h | |
download | koffice-8362bf63dea22bbf6736609b0f49c152f975eb63.tar.gz koffice-8362bf63dea22bbf6736609b0f49c152f975eb63.zip |
Added old abandoned KDE3 version of koffice
git-svn-id: svn://anonsvn.kde.org/home/kde/branches/trinity/applications/koffice@1077364 283d02a7-25f6-0310-bc7c-ecb5cbfe19da
Diffstat (limited to 'kspread/kspread_value.h')
-rw-r--r-- | kspread/kspread_value.h | 437 |
1 files changed, 437 insertions, 0 deletions
diff --git a/kspread/kspread_value.h b/kspread/kspread_value.h new file mode 100644 index 00000000..3dbfab5b --- /dev/null +++ b/kspread/kspread_value.h @@ -0,0 +1,437 @@ +/* This file is part of the KDE project + Copyright (C) 2003,2004 Ariya Hidayat <ariya@kde.org> + + This library is free software; you can redistribute it and/or + modify it under the terms of the GNU Library General Public + License as published by the Free Software Foundation; either + version 2 of the License. + + This library is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + Library General Public License for more details. + + You should have received a copy of the GNU Library General Public License + along with this library; see the file COPYING.LIB. If not, write to + the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, + * Boston, MA 02110-1301, USA. +*/ + +#ifndef KSPREAD_VALUE_H +#define KSPREAD_VALUE_H + +#include <qdatetime.h> +#include <qstring.h> +#include <qtextstream.h> + +#include <koffice_export.h> + +namespace KSpread +{ +class ValueData; + +/** + * Provides a wrapper for cell value. + * + * Each cell in a worksheet must hold a value, either as enterred by user + * or as a result of formula evaluation. Default cell holds empty value. + * + * Value uses implicit data sharing to reduce memory usage. + */ +class KSPREAD_EXPORT Value +{ + + public: + + typedef enum { + Empty, + Boolean, + Integer, + Float, + String, + Array, + CellRange, // not used yet + Error + } Type; + + typedef enum { + fmt_None, + fmt_Boolean, + fmt_Number, + fmt_Percent, + fmt_Money, + fmt_DateTime, + fmt_Date, + fmt_Time, + fmt_String + } Format; + /** + * Creates an empty value, i.e holds nothing. + */ + Value(); + + /** + * Creates a value of certain type. + */ + Value( Type _type ); + + /** + * Destroys the value. + */ + virtual ~Value(); + + /** + * Creates a copy from another value. + */ + Value( const Value& _value ); + + /** + * Assigns from another value. + * + * Because the data is implicitly shared, such assignment is very fast and + * doesn't consume additional memory. + */ + Value& operator= ( const Value& _value ); + + /** + * Assigns from another value. Same as above. + */ + Value& assign( const Value& _value ); + + /** + * Creates a boolean value. + */ + Value( bool b ); + + /** + * Creates an integer value. + */ + Value( long i ); + + /** + * Creates an integer value. + */ + Value( int i ); + + /** + * Create a floating-point value. + */ + Value( double f ); + + /** + * Create a string value. + */ + Value( const QString& s ); + + Value (const char *s); + /** + * Create a floating-point value from date/time. + * + * Internally date/time is represented as serial-number, i.e number of + * elapsed day since reference date. Day 61 is defined as March 1, 1900. + */ + Value( const QDateTime& dt ); + + /** + * Create a floating-point value from time. + * See also note above. + */ + Value( const QTime& time ); + + /** + * Create a floating-point value from date. + * See also note above. + */ + Value( const QDate& date ); + + /** + * Create an array of values. + */ + Value( unsigned columns, unsigned rows ); + + /** + * Returns the type of the value. + */ + Type type() const; + + /** Returns the format of the value (i.e. how should it be interpreted) */ + Format format() const; + + /** + * Returns true if empty. + */ + bool isEmpty() const { return type() == Empty; } + + /** + * Returns true if the type of this value is Boolean. + */ + bool isBoolean() const { return type() == Boolean; } + + /** + * Returns true if the type of this value is integer. + */ + bool isInteger() const { return type() == Integer; } + + /** + * Returns true if the type of this value is floating-point. + */ + bool isFloat() const { return type() == Float; } + + /** + * Returns true if the type of this value is either + * integer or floating-point. + */ + bool isNumber() const { return (type() == Integer) || (type() == Float); } + + /** + * Returns true if the type of this value is string. + */ + bool isString() const { return type() == String; } + + /** + * Returns true if the type of this value is array. + */ + bool isArray() const { return type() == Array; } + + /** + * Returns true if this value holds error information. + */ + bool isError() const { return type() == Error; } + + /** + * Sets this value to another value. + */ + void setValue( const Value& v ); + + /** + * Sets this value to boolean value. + */ + void setValue( bool b ); + + /** + * Sets this value to integer value. + */ + void setValue( long i ); + + /** + * Sets this value to integer value. + */ + void setValue( int i ); + + /** + * Sets this value to floating-point value. + */ + void setValue( double f ); + + /** + * Sets this value to string value. + */ + void setValue( const QString& s ); + + /** + * Sets this value to hold error message. + */ + void setError( const QString& msg ); + + /** + * Sets this value to floating-point number representing the date/time. + */ + void setValue( const QDateTime& dt ); + + /** + * Sets this value to floating-point number representing the date. + */ + void setValue( const QTime& dt ); + + /** + * Sets this value to floating-point number representing the time. + */ + void setValue( const QDate& dt ); + + /** Sets format information for this value. */ + void setFormat (Format fmt); + + /** + * Returns the boolean value of this value. + * + * Call this function only if isBoolean() returns true. + */ + bool asBoolean() const; + + /** + * Returns the integer value of this value. + * + * Call this function only if isNumber() returns true. + */ + long asInteger() const; + + /** + * Returns the floating-point value of this value. + * + * Call this function only if isNumber() returns true. + */ + double asFloat() const; + + /** + * Returns the string value of this value. + * + * Call this function only if isString() returns true. + */ + QString asString() const; + + /** + * Returns the date/time representation of this value. + */ + QDateTime asDateTime() const; + + /** + * Returns the date representation of this value. + */ + QDate asDate() const; + + /** + * Returns the time representation of this value. + */ + QTime asTime() const; + + /** + * Return an element in the array value. + */ + Value element( unsigned column, unsigned row ) const; + + /** + * Sets an element in the array value. Do not use if isArray() is false. + */ + void setElement( unsigned column, unsigned row, const Value& value ); + + /** + * If this value is an array, return the number of columns. + * Returns 1 if isArray() returns false. + */ + unsigned columns() const; + + /** + * If this value is an array, return the number of rows. + * Returns 1 if isArray() returns false. + */ + unsigned rows() const; + + /** + * Returns error message associated with this value. + * + * Call this function only if isError() returns true. + */ + QString errorMessage() const; + + /** + * Detaches itself from shared value data, i.e make a private, deep copy + * of the data. Usually this function is called automatically so you + * don't have to care about it. + */ + void detach(); + + /** + * Returns constant reference to empty value. + */ + static const Value& empty(); + + /** + * Returns constant reference to #DIV/0! error. + * + * This is used to indicate that a formula divides by 0 (zero). + */ + static const Value& errorDIV0(); + + /** + * Returns constant reference to #N/A error. + * + * This is to indicate that a value is not available to a function. + */ + static const Value& errorNA(); + + /** + * Returns constant reference to #NAME? error. + * + * This is to indicate that certain text inside formula is not + * recognized, possibly a misspelled name or name that + * does not exist. + */ + static const Value& errorNAME(); + + /** + * Returns constant reference to #NUM! error. + * + * This is to indicate a problem with a number in a formula. + */ + static const Value& errorNUM(); + + /** + * Returns constant reference to #NULL! error. + * + * This is to indicate that two area do not intersect. + */ + static const Value& errorNULL(); + + /** + * Returns constant reference to #REF! error. + * + * This is used to indicate an invalid cell reference. + */ + static const Value& errorREF(); + + /** + * Returns constant reference to #VALUE! error. + * + * This is to indicate that wrong type of argument or operand + * is used, usually within a function call, e.g SIN("some text"). + */ + static const Value& errorVALUE(); + + /** + * Returns true if it is OK to compare this value with v. + * If this function returns false, then return value of compare is undefined. + */ + bool allowComparison( const Value& v ) const; + + /** + * Returns -1, 0, 1, depends whether this value is less than, equal to, or + * greater than v. + */ + int compare( const Value& v ) const; + + /** + * Returns true if this value is equal to v. + */ + bool equal( const Value& v ) const; + + /** + * Returns true if this value is less than v. + */ + bool less( const Value& v ) const; + + /** + * Returns true if this value is greater than v. + */ + bool greater( const Value& v ) const; + + // comparison operator - returns true only if strictly identical, unlike equal()/compare() + bool operator==( const Value& v ) const; + inline bool operator!=( const Value& other ) const { return !operator==( other ); } + + static int compare( double v1, double v2 ); + + bool isZero() const; + + static bool isZero( double v ); + + protected: + + ValueData* d; // can't never be 0 +}; + +} // namespace KSpread + +QTextStream& operator<<( QTextStream& ts, KSpread::Value::Type type ); +QTextStream& operator<<( QTextStream& ts, KSpread::Value value ); + +#endif // KSPREAD_VALUE_H |