xref: /AOO41X/main/sc/inc/chartpos.hxx (revision 38d50f7b14e1cf975d8c6468d9633894cd59b523)
1 /**************************************************************
2  *
3  * Licensed to the Apache Software Foundation (ASF) under one
4  * or more contributor license agreements.  See the NOTICE file
5  * distributed with this work for additional information
6  * regarding copyright ownership.  The ASF licenses this file
7  * to you under the Apache License, Version 2.0 (the
8  * "License"); you may not use this file except in compliance
9  * with the License.  You may obtain a copy of the License at
10  *
11  *   http://www.apache.org/licenses/LICENSE-2.0
12  *
13  * Unless required by applicable law or agreed to in writing,
14  * software distributed under the License is distributed on an
15  * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
16  * KIND, either express or implied.  See the License for the
17  * specific language governing permissions and limitations
18  * under the License.
19  *
20  *************************************************************/
21 
22 
23 
24 #ifndef SC_CHARTPOS_HXX
25 #define SC_CHARTPOS_HXX
26 
27 // -----------------------------------------------------------------------
28 
29 #include "collect.hxx"
30 #include "rangelst.hxx"
31 
32 
33 class ScAddress;
34 class Table;
35 
36 class ScChartPositionMap
37 {
38     friend class ScChartPositioner;
39 
40             ScAddress**         ppData;
41             ScAddress**         ppColHeader;
42             ScAddress**         ppRowHeader;
43             sal_uLong               nCount;
44             SCCOL               nColCount;
45             SCROW               nRowCount;
46 
47                                 ScChartPositionMap( SCCOL nChartCols, SCROW nChartRows,
48                                     SCCOL nColAdd,      // Header-Spalten
49                                     SCROW nRowAdd,      // Header-Zeilen
50                                     Table& rCols        // Table mit Col-Tables mit Address*
51                                     );
52                                 ~ScChartPositionMap();  //! deletes all ScAddress*
53 
54                                 // not implemented
55                                 ScChartPositionMap( const ScChartPositionMap& );
56             ScChartPositionMap& operator=( const ScChartPositionMap& );
57 
58 public:
59 
GetCount() const60             sal_uLong               GetCount() const { return nCount; }
GetColCount() const61             SCCOL               GetColCount() const { return nColCount; }
GetRowCount() const62             SCROW               GetRowCount() const { return nRowCount; }
63 
IsValid(SCCOL nCol,SCROW nRow) const64             sal_Bool                IsValid( SCCOL nCol, SCROW nRow ) const
65                                     { return nCol < nColCount && nRow < nRowCount; }
66                                 // Daten spaltenweise
GetIndex(SCCOL nCol,SCROW nRow) const67             sal_uLong               GetIndex( SCCOL nCol, SCROW nRow ) const
68                                     { return (sal_uLong) nCol * nRowCount + nRow; }
69 
GetPosition(sal_uLong nIndex) const70             const ScAddress*    GetPosition( sal_uLong nIndex ) const
71                                     {
72                                         if ( nIndex < nCount )
73                                             return ppData[ nIndex ];
74                                         return NULL;
75                                     }
76 
77                                     //! kann NULL sein und damit "kein Wert"
GetPosition(SCCOL nChartCol,SCROW nChartRow) const78             const ScAddress*    GetPosition( SCCOL nChartCol, SCROW nChartRow ) const
79                                     {
80                                         if ( IsValid( nChartCol, nChartRow ) )
81                                             return ppData[ GetIndex( nChartCol, nChartRow ) ];
82                                         return NULL;
83                                     }
GetColHeaderPosition(SCCOL nChartCol) const84             const ScAddress*    GetColHeaderPosition( SCCOL nChartCol ) const
85                                     {
86                                         if ( nChartCol < nColCount )
87                                             return ppColHeader[ nChartCol ];
88                                         return NULL;
89                                     }
GetRowHeaderPosition(SCROW nChartRow) const90             const ScAddress*    GetRowHeaderPosition( SCROW nChartRow ) const
91                                     {
92                                         if ( nChartRow < nRowCount )
93                                             return ppRowHeader[ nChartRow ];
94                                         return NULL;
95                                     }
96 //UNUSED2009-05 ScRangeListRef      GetColRanges( SCCOL nChartCol ) const;
97 //UNUSED2009-05 ScRangeListRef      GetRowRanges( SCROW nChartRow ) const;
98 };
99 
100 
101 enum ScChartGlue {
102     SC_CHARTGLUE_NA,
103     SC_CHARTGLUE_NONE,      // alte Mimik
104     SC_CHARTGLUE_COLS,      // alte Mimik
105     SC_CHARTGLUE_ROWS,
106     SC_CHARTGLUE_BOTH
107 };
108 
109 class ScDocument;
110 
111 class ScChartPositioner             // nur noch Parameter-Struct
112 {
113     ScRangeListRef  aRangeListRef;
114     ScDocument* pDocument;
115     ScChartPositionMap* pPositionMap;
116     ScChartGlue eGlue;
117     SCCOL       nStartCol;
118     SCROW       nStartRow;
119     sal_Bool        bColHeaders;
120     sal_Bool        bRowHeaders;
121     sal_Bool        bDummyUpperLeft;
122 
123 private:
124     void        CheckColRowHeaders();
125 
126     void        GlueState();        // zusammengefasste Bereiche
127     void        CreatePositionMap();
128 
129 public:
130     ScChartPositioner( ScDocument* pDoc, SCTAB nTab,
131                     SCCOL nStartColP, SCROW nStartRowP,
132                     SCCOL nEndColP, SCROW nEndRowP );
133     ScChartPositioner( ScDocument* pDoc, const ScRangeListRef& rRangeList );
134     ScChartPositioner( const ScChartPositioner& rPositioner );
135 
136     virtual ~ScChartPositioner();
137 
GetRangeList() const138     const ScRangeListRef&   GetRangeList() const { return aRangeListRef; }
SetRangeList(const ScRangeListRef & rNew)139     void    SetRangeList( const ScRangeListRef& rNew ) { aRangeListRef = rNew; }
140     void    SetRangeList( const ScRange& rNew );
141 
SetHeaders(sal_Bool bCol,sal_Bool bRow)142     void    SetHeaders(sal_Bool bCol, sal_Bool bRow) { bColHeaders=bCol; bRowHeaders=bRow; }
HasColHeaders() const143     sal_Bool    HasColHeaders() const            { return bColHeaders; }
HasRowHeaders() const144     sal_Bool    HasRowHeaders() const            { return bRowHeaders; }
SetDummyUpperLeft(sal_Bool bNew)145     void    SetDummyUpperLeft(sal_Bool bNew) { bDummyUpperLeft = bNew; }
SeteGlue(ScChartGlue eNew)146     void    SeteGlue(ScChartGlue eNew) { eGlue = eNew; }
SetStartCol(SCCOL nNew)147     void    SetStartCol(SCCOL nNew) { nStartCol = nNew; }
SetStartRow(SCROW nNew)148     void    SetStartRow(SCROW nNew) { nStartRow = nNew; }
149 
150     sal_Bool    operator==(const ScChartPositioner& rCmp) const;
151 
InvalidateGlue()152     void                    InvalidateGlue()
153                                 {
154                                     eGlue = SC_CHARTGLUE_NA;
155                                     if ( pPositionMap )
156                                     {
157                                         delete pPositionMap;
158                                         pPositionMap = NULL;
159                                     }
160                                 }
161     const ScChartPositionMap*   GetPositionMap();
162 };
163 
164 
165 #endif
166 
167