Line data Source code
1 : /* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */
2 : /*
3 : * This file is part of the LibreOffice project.
4 : *
5 : * This Source Code Form is subject to the terms of the Mozilla Public
6 : * License, v. 2.0. If a copy of the MPL was not distributed with this
7 : * file, You can obtain one at http://mozilla.org/MPL/2.0/.
8 : *
9 : * This file incorporates work covered by the following license notice:
10 : *
11 : * Licensed to the Apache Software Foundation (ASF) under one or more
12 : * contributor license agreements. See the NOTICE file distributed
13 : * with this work for additional information regarding copyright
14 : * ownership. The ASF licenses this file to you under the Apache
15 : * License, Version 2.0 (the "License"); you may not use this file
16 : * except in compliance with the License. You may obtain a copy of
17 : * the License at http://www.apache.org/licenses/LICENSE-2.0 .
18 : */
19 :
20 : #ifndef FORMS_SOURCE_RICHTEXT_RTATTRIBUTES_HXX
21 : #define FORMS_SOURCE_RICHTEXT_RTATTRIBUTES_HXX
22 :
23 : #include <tools/solar.h>
24 : #include <sal/types.h>
25 : #include <svl/poolitem.hxx>
26 :
27 : //........................................................................
28 : namespace frm
29 : {
30 : //........................................................................
31 :
32 : //====================================================================
33 : //= misc
34 : //====================================================================
35 : /// the id of an attribute
36 : typedef sal_Int32 AttributeId;
37 : /// the "which id" of an item in an SfxItemSet
38 : typedef sal_uInt16 WhichId;
39 : /// a SFX slot id
40 : typedef sal_uInt16 SfxSlotId;
41 : /// a script type
42 : typedef sal_uInt16 ScriptType;
43 :
44 : //====================================================================
45 : //= AttributeCheckState
46 : //====================================================================
47 : enum AttributeCheckState
48 : {
49 : eChecked,
50 : eUnchecked,
51 : eIndetermined
52 : };
53 :
54 : //====================================================================
55 : //= AttributeState
56 : //====================================================================
57 : struct AttributeState
58 : {
59 : private:
60 : SfxItemHandle* pItemHandle;
61 :
62 : public:
63 : AttributeCheckState eSimpleState;
64 :
65 : //................................................................
66 : inline AttributeState( );
67 : inline explicit AttributeState( AttributeCheckState _eCheckState );
68 : inline AttributeState( const AttributeState& _rSource );
69 :
70 : inline AttributeState& operator=( const AttributeState& _rSource );
71 :
72 : inline bool operator==( const AttributeState& _rRHS );
73 :
74 : inline const SfxPoolItem* getItem() const;
75 : inline void setItem( const SfxPoolItem* _pItem );
76 : };
77 :
78 : //====================================================================
79 : //= AttributeState (inline implementation)
80 : //====================================================================
81 : //................................................................
82 0 : inline AttributeState::AttributeState( )
83 : :pItemHandle( NULL )
84 0 : ,eSimpleState( eIndetermined )
85 : {
86 0 : }
87 :
88 : //................................................................
89 0 : inline AttributeState::AttributeState( AttributeCheckState _eCheckState )
90 : :pItemHandle( NULL )
91 0 : ,eSimpleState( _eCheckState )
92 : {
93 0 : }
94 :
95 : //................................................................
96 0 : inline AttributeState::AttributeState( const AttributeState& _rSource )
97 : :pItemHandle( NULL )
98 0 : ,eSimpleState( eIndetermined )
99 : {
100 0 : operator=( _rSource );
101 0 : }
102 :
103 : //................................................................
104 0 : inline AttributeState& AttributeState::operator=( const AttributeState& _rSource )
105 : {
106 0 : if ( &_rSource == this )
107 0 : return *this;
108 :
109 0 : eSimpleState = _rSource.eSimpleState;
110 0 : setItem( _rSource.getItem() );
111 0 : return *this;
112 : }
113 :
114 : //................................................................
115 0 : inline const SfxPoolItem* AttributeState::getItem() const
116 : {
117 0 : return pItemHandle ? &pItemHandle->GetItem() : NULL;
118 : }
119 :
120 : //................................................................
121 0 : inline void AttributeState::setItem( const SfxPoolItem* _pItem )
122 : {
123 0 : if ( pItemHandle )
124 0 : delete pItemHandle;
125 0 : if ( _pItem )
126 0 : pItemHandle = new SfxItemHandle( *const_cast< SfxPoolItem* >( _pItem ) );
127 : else
128 0 : pItemHandle = NULL;
129 0 : }
130 :
131 : //................................................................
132 0 : inline bool AttributeState::operator==( const AttributeState& _rRHS )
133 : {
134 0 : if ( eSimpleState != _rRHS.eSimpleState )
135 0 : return false;
136 :
137 0 : if ( pItemHandle && !_rRHS.pItemHandle )
138 0 : return false;
139 :
140 0 : if ( !pItemHandle && _rRHS.pItemHandle )
141 0 : return false;
142 :
143 0 : if ( !pItemHandle && !_rRHS.pItemHandle )
144 0 : return true;
145 :
146 0 : return ( pItemHandle->GetItem() == _rRHS.pItemHandle->GetItem() );
147 : }
148 :
149 : //====================================================================
150 : //= IMultiAttributeDispatcher
151 : //====================================================================
152 0 : class IMultiAttributeDispatcher
153 : {
154 : public:
155 : virtual AttributeState getState( AttributeId _nAttributeId ) const = 0;
156 : virtual void executeAttribute( AttributeId _nAttributeId, const SfxPoolItem* _pArgument ) = 0;
157 :
158 : protected:
159 0 : ~IMultiAttributeDispatcher() {}
160 : };
161 :
162 : //........................................................................
163 : } // namespace frm
164 : //........................................................................
165 :
166 : #endif // FORMS_SOURCE_RICHTEXT_RTATTRIBUTES_HXX
167 :
168 : /* vim:set shiftwidth=4 softtabstop=4 expandtab: */
|