summaryrefslogtreecommitdiff
path: root/sc/inc/conditio.hxx
diff options
context:
space:
mode:
authorJens-Heiner Rechtien <hr@openoffice.org>2000-09-18 16:07:07 +0000
committerJens-Heiner Rechtien <hr@openoffice.org>2000-09-18 16:07:07 +0000
commit9ae5a91f7955e44d3b24a3f7741f9bca02ac7f24 (patch)
tree13c111a6380728f470fa177e679b80089a01efc4 /sc/inc/conditio.hxx
initial import
Diffstat (limited to 'sc/inc/conditio.hxx')
-rw-r--r--sc/inc/conditio.hxx318
1 files changed, 318 insertions, 0 deletions
diff --git a/sc/inc/conditio.hxx b/sc/inc/conditio.hxx
new file mode 100644
index 000000000000..b1e86e832706
--- /dev/null
+++ b/sc/inc/conditio.hxx
@@ -0,0 +1,318 @@
+/*************************************************************************
+ *
+ * $RCSfile: conditio.hxx,v $
+ *
+ * $Revision: 1.1.1.1 $
+ *
+ * last change: $Author: hr $ $Date: 2000-09-18 16:44:48 $
+ *
+ * The Contents of this file are made available subject to the terms of
+ * either of the following licenses
+ *
+ * - GNU Lesser General Public License Version 2.1
+ * - Sun Industry Standards Source License Version 1.1
+ *
+ * Sun Microsystems Inc., October, 2000
+ *
+ * GNU Lesser General Public License Version 2.1
+ * =============================================
+ * Copyright 2000 by Sun Microsystems, Inc.
+ * 901 San Antonio Road, Palo Alto, CA 94303, USA
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License version 2.1, as published by the Free Software Foundation.
+ *
+ * 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
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this library; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place, Suite 330, Boston,
+ * MA 02111-1307 USA
+ *
+ *
+ * Sun Industry Standards Source License Version 1.1
+ * =================================================
+ * The contents of this file are subject to the Sun Industry Standards
+ * Source License Version 1.1 (the "License"); You may not use this file
+ * except in compliance with the License. You may obtain a copy of the
+ * License at http://www.openoffice.org/license.html.
+ *
+ * Software provided under this License is provided on an "AS IS" basis,
+ * WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING,
+ * WITHOUT LIMITATION, WARRANTIES THAT THE SOFTWARE IS FREE OF DEFECTS,
+ * MERCHANTABLE, FIT FOR A PARTICULAR PURPOSE, OR NON-INFRINGING.
+ * See the License for the specific provisions governing your rights and
+ * obligations concerning the Software.
+ *
+ * The Initial Developer of the Original Code is: Sun Microsystems, Inc.
+ *
+ * Copyright: 2000 by Sun Microsystems, Inc.
+ *
+ * All Rights Reserved.
+ *
+ * Contributor(s): _______________________________________
+ *
+ *
+ ************************************************************************/
+
+#ifndef SC_CONDITIO_HXX
+#define SC_CONDITIO_HXX
+
+#ifndef SC_SCGLOB_HXX
+#include "global.hxx"
+#endif
+
+#ifndef _SVARRAY_HXX //autogen
+#include <svtools/svarray.hxx>
+#endif
+
+class ScBaseCell;
+class ScFormulaCell;
+class ScTokenArray;
+class ScMultipleReadHeader;
+class ScMultipleWriteHeader;
+class ScRangeList;
+
+
+#define SC_COND_GROW 16
+
+// nOptions Flags
+#define SC_COND_NOBLANKS 1
+
+
+ // Reihenfolge von ScConditionMode wie ScQueryOp,
+ // damit einmal zusammengefasst werden kann:
+
+enum ScConditionMode
+{
+ SC_COND_EQUAL,
+ SC_COND_LESS,
+ SC_COND_GREATER,
+ SC_COND_EQLESS,
+ SC_COND_EQGREATER,
+ SC_COND_NOTEQUAL,
+ SC_COND_BETWEEN,
+ SC_COND_NOTBETWEEN,
+ SC_COND_DIRECT,
+ SC_COND_NONE
+};
+
+enum ScConditionValType
+{
+ SC_VAL_VALUE,
+ SC_VAL_STRING,
+ SC_VAL_FORMULA
+};
+
+class ScConditionEntry
+{
+ // gespeicherte Daten:
+ ScConditionMode eOp;
+ USHORT nOptions;
+ double nVal1; // eingegeben oder berechnet
+ double nVal2;
+ String aStrVal1; // eingegeben oder berechnet
+ String aStrVal2;
+ BOOL bIsStr1; // um auch leere Strings zu erkennen
+ BOOL bIsStr2;
+ ScTokenArray* pFormula1; // eingegebene Formel
+ ScTokenArray* pFormula2;
+ ScAddress aSrcPos; // Quell-Adresse fuer Formeln
+ // temporaere Daten:
+ ScFormulaCell* pFCell1;
+ ScFormulaCell* pFCell2;
+ ScDocument* pDoc;
+ BOOL bRelRef1;
+ BOOL bRelRef2;
+ BOOL bFirstRun;
+
+ void MakeCells( const ScAddress& rPos );
+ void Compile( const String& rExpr1, const String& rExpr2, BOOL bEnglish );
+ void Interpret( const ScAddress& rPos );
+
+ BOOL IsValid( double nArg ) const;
+ BOOL IsValidStr( const String& rArg ) const;
+
+protected:
+ ScConditionEntry( SvStream& rStream, ScMultipleReadHeader& rHdr,
+ ScDocument* pDocument );
+ void StoreCondition(SvStream& rStream, ScMultipleWriteHeader& rHdr) const;
+
+public:
+ ScConditionEntry( ScConditionMode eOper,
+ const String& rExpr1, const String& rExpr2,
+ ScDocument* pDocument, const ScAddress& rPos,
+ BOOL bCompileEnglish );
+ ScConditionEntry( ScConditionMode eOper,
+ const ScTokenArray* pArr1, const ScTokenArray* pArr2,
+ ScDocument* pDocument, const ScAddress& rPos );
+ ScConditionEntry( const ScConditionEntry& r ); // flache Kopie der Formeln
+ // echte Kopie der Formeln (fuer Ref-Undo):
+ ScConditionEntry( ScDocument* pDocument, const ScConditionEntry& r );
+ ~ScConditionEntry();
+
+ int operator== ( const ScConditionEntry& r ) const;
+
+ BOOL IsCellValid( ScBaseCell* pCell, const ScAddress& rPos ) const;
+
+ ScConditionMode GetOperation() const { return eOp; }
+ BOOL IsIgnoreBlank() const { return ( nOptions & SC_COND_NOBLANKS ) == 0; }
+ void SetIgnoreBlank(BOOL bSet);
+ ScAddress GetSrcPos() const { return aSrcPos; }
+
+ String GetExpression( const ScAddress& rCursor, USHORT nPos,
+ ULONG nNumFmt = 0, BOOL bEnglish = FALSE ) const;
+
+ ScTokenArray* CreateTokenArry( USHORT nPos ) const;
+
+ void CompileAll();
+ void UpdateReference( UpdateRefMode eUpdateRefMode,
+ const ScRange& rRange, short nDx, short nDy, short nDz );
+ void UpdateMoveTab( USHORT nOldPos, USHORT nNewPos );
+
+ void SourceChanged( const ScAddress& rChanged );
+
+protected:
+ virtual void DataChanged( const ScRange* pModified ) const;
+ ScDocument* GetDocument() const { return pDoc; }
+};
+
+//
+// einzelner Eintrag fuer bedingte Formatierung
+//
+
+class ScConditionalFormat;
+
+class ScCondFormatEntry : public ScConditionEntry
+{
+ String aStyleName;
+ ScConditionalFormat* pParent;
+
+public:
+ ScCondFormatEntry( ScConditionMode eOper,
+ const String& rExpr1, const String& rExpr2,
+ ScDocument* pDocument, const ScAddress& rPos,
+ const String& rStyle, BOOL bCompileEnglish = FALSE );
+ ScCondFormatEntry( ScConditionMode eOper,
+ const ScTokenArray* pArr1, const ScTokenArray* pArr2,
+ ScDocument* pDocument, const ScAddress& rPos,
+ const String& rStyle );
+ ScCondFormatEntry( const ScCondFormatEntry& r );
+ ScCondFormatEntry( ScDocument* pDocument, const ScCondFormatEntry& r );
+ ScCondFormatEntry( SvStream& rStream, ScMultipleReadHeader& rHdr,
+ ScDocument* pDocument );
+ ~ScCondFormatEntry();
+
+ void SetParent( ScConditionalFormat* pNew ) { pParent = pNew; }
+
+ void Store(SvStream& rStream, ScMultipleWriteHeader& rHdr) const;
+
+ int operator== ( const ScCondFormatEntry& r ) const;
+
+ const String& GetStyle() const { return aStyleName; }
+
+protected:
+ virtual void DataChanged( const ScRange* pModified ) const;
+};
+
+//
+// komplette bedingte Formatierung
+//
+
+class ScConditionalFormat
+{
+ ScDocument* pDoc;
+ ScRangeList* pAreas; // Bereiche fuer Paint
+ ULONG nKey; // Index in Attributen
+ ScCondFormatEntry** ppEntries;
+ USHORT nEntryCount;
+ BOOL bIsUsed; // temporaer beim Speichern
+
+public:
+ ScConditionalFormat(ULONG nNewKey, ScDocument* pDocument);
+ ScConditionalFormat(const ScConditionalFormat& r);
+ ScConditionalFormat(SvStream& rStream, ScMultipleReadHeader& rHdr,
+ ScDocument* pDocument);
+ ~ScConditionalFormat();
+
+ // echte Kopie der Formeln (fuer Ref-Undo / zwischen Dokumenten)
+ ScConditionalFormat* Clone(ScDocument* pNewDoc = NULL) const;
+
+ void Store(SvStream& rStream, ScMultipleWriteHeader& rHdr) const;
+
+ void AddEntry( const ScCondFormatEntry& rNew );
+
+ BOOL IsEmpty() const { return (nEntryCount == 0); }
+ USHORT Count() const { return nEntryCount; }
+
+ void CompileAll();
+ void UpdateReference( UpdateRefMode eUpdateRefMode,
+ const ScRange& rRange, short nDx, short nDy, short nDz );
+ void UpdateMoveTab( USHORT nOldPos, USHORT nNewPos );
+
+ void SourceChanged( const ScAddress& rAddr );
+
+ const ScCondFormatEntry* GetEntry( USHORT nPos ) const;
+
+ const String& GetCellStyle( ScBaseCell* pCell, const ScAddress& rPos ) const;
+
+ BOOL EqualEntries( const ScConditionalFormat& r ) const;
+
+ void DoRepaint( const ScRange* pModified );
+ void InvalidateArea();
+
+ ULONG GetKey() const { return nKey; }
+ void SetKey(ULONG nNew) { nKey = nNew; } // nur wenn nicht eingefuegt!
+
+ void SetUsed(BOOL bSet) { bIsUsed = bSet; }
+ BOOL IsUsed() const { return bIsUsed; }
+
+ // sortiert (per PTRARR) nach Index
+ // operator== nur fuer die Sortierung
+ BOOL operator ==( const ScConditionalFormat& r ) const { return nKey == r.nKey; }
+ BOOL operator < ( const ScConditionalFormat& r ) const { return nKey < r.nKey; }
+};
+
+//
+// Liste der Bereiche und Formate:
+//
+
+typedef ScConditionalFormat* ScConditionalFormatPtr;
+
+SV_DECL_PTRARR_SORT(ScConditionalFormats_Impl, ScConditionalFormatPtr,
+ SC_COND_GROW, SC_COND_GROW);
+
+class ScConditionalFormatList : public ScConditionalFormats_Impl
+{
+public:
+ ScConditionalFormatList() {}
+ ScConditionalFormatList(const ScConditionalFormatList& rList);
+ ScConditionalFormatList(ScDocument* pNewDoc, const ScConditionalFormatList& rList);
+ ~ScConditionalFormatList() {}
+
+ void InsertNew( ScConditionalFormat* pNew )
+ { if (!Insert(pNew)) delete pNew; }
+
+ ScConditionalFormat* GetFormat( ULONG nKey );
+
+ void Load( SvStream& rStream, ScDocument* pDocument );
+ void Store( SvStream& rStream ) const;
+ void ResetUsed();
+
+ void CompileAll();
+ void UpdateReference( UpdateRefMode eUpdateRefMode,
+ const ScRange& rRange, short nDx, short nDy, short nDz );
+ void UpdateMoveTab( USHORT nOldPos, USHORT nNewPos );
+
+ void SourceChanged( const ScAddress& rAddr );
+
+ BOOL operator==( const ScConditionalFormatList& r ) const; // fuer Ref-Undo
+};
+
+#endif
+
+