xref: /aoo4110/main/svx/inc/svx/fmgridcl.hxx (revision b1cdbd2c)
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 #ifndef _SVX_FMGRIDCL_HXX
24 #define _SVX_FMGRIDCL_HXX
25 
26 #include <com/sun/star/container/XIndexContainer.hpp>
27 #include <com/sun/star/container/XNameContainer.hpp>
28 
29 #include <svx/gridctrl.hxx>
30 #include <svtools/transfer.hxx>
31 #include "svx/svxdllapi.h"
32 
33 //==================================================================
34 // FmGridHeader
35 //==================================================================
36 struct FmGridHeaderData;
37 class SVX_DLLPUBLIC FmGridHeader
38 			:public ::svt::EditBrowserHeader
39 			,public DropTargetHelper
40 {
41 protected:
42 	FmGridHeaderData*		m_pImpl;
43 
44 	// trigger context menu execution
45 	void	triggerColumnContextMenu( const ::Point& _rPreferredPos );
46 
47 public:
48 	FmGridHeader( BrowseBox* pParent, WinBits nWinBits = WB_STDHEADERBAR | WB_DRAG );
49 	~FmGridHeader();
50 
51 public:
AccessControlFmGridHeader::AccessControl52 	struct AccessControl { friend class FmGridControl; private: AccessControl() { } };
53 
triggerColumnContextMenu(const::Point & _rPreferredPos,const AccessControl &)54 	inline	void	triggerColumnContextMenu( const ::Point& _rPreferredPos, const AccessControl& )
55 	{
56 		triggerColumnContextMenu( _rPreferredPos );
57 	}
58 
59 protected:
60 	virtual void Command( const CommandEvent& rCEvt );
61 	virtual void RequestHelp( const HelpEvent& rHEvt );
62 	virtual void Select();
63 
64 	/**	the value returned by GetItemPos is meaningless for the grid model if there are hidden columns,
65 		so use GetModelColumnPos instead
66 	*/
67 	sal_uInt16 GetModelColumnPos(sal_uInt16 nId) const;
68 
69 	/**	This is called before executing a context menu for a column. rMenu contains the initial entries
70 		handled by this base class' method (which always has to be called).
71 		Derived classes may alter the menu in any way and handle any additional entries in
72 		PostExecuteColumnContextMenu.
73 		All disabled entries will be removed before executing the menu, so be careful with separators
74 		near entries you probably wish to disable ...
75 	*/
76 	virtual void	PreExecuteColumnContextMenu(sal_uInt16 nColId, PopupMenu& rMenu);
77 	/**	After executing the context menu for a column this method is called.
78 	*/
79 	virtual	void	PostExecuteColumnContextMenu(sal_uInt16 nColId, const PopupMenu& rMenu, sal_uInt16 nExecutionResult);
80 
81 	// DropTargetHelper
82 	virtual sal_Int8	AcceptDrop( const AcceptDropEvent& rEvt );
83 	virtual sal_Int8	ExecuteDrop( const ExecuteDropEvent& rEvt );
84 
85 	/** selects the column at the selection supplier.
86 		@param	nColumnId
87 			The column id.
88 	*/
89 	void notifyColumnSelect(sal_uInt16 nColumnId);
90 private:
91 	DECL_LINK( OnAsyncExecuteDrop, void* );
92 };
93 
94 //==================================================================
95 // FmGridControl
96 //==================================================================
97 class FmXGridPeer;
98 class SVX_DLLPUBLIC FmGridControl : public DbGridControl
99 
100 {
101 	friend class FmGridHeader;
102 	friend class FmXGridPeer;
103 
104 	FmXGridPeer*		m_pPeer;
105 	sal_Int32			m_nCurrentSelectedColumn;	// this is the column model (not the view) posisition ...
106 	sal_uInt16			m_nMarkedColumnId;
107 	sal_Bool			m_bSelecting;
108 	sal_Bool			m_bInColumnMove	: 1;
109 
110 public:
111 	FmGridControl(
112 		::com::sun::star::uno::Reference< ::com::sun::star::lang::XMultiServiceFactory >,
113 		Window* pParent,
114 		FmXGridPeer* _pPeer,
115 		WinBits nBits);
116 
117 	// Window
118 	virtual void KeyInput( const KeyEvent& rKEvt );
119 
120 	// ::com::sun::star::beans::XPropertyChangeListener
121 	void SAL_CALL propertyChange(const ::com::sun::star::beans::PropertyChangeEvent& evt);
122 
123 	// ::com::sun::star::form::XPositioningListener
124 	void positioned(const ::com::sun::star::lang::EventObject& rEvent);
125 
126 	// XBound
127 	sal_Bool commit();
128 
129 	// ::com::sun::star::form::XInsertListener
130 	void inserted(const ::com::sun::star::lang::EventObject& rEvent);
131 
132 	// ::com::sun::star::form::XRestoreListener
133 	void restored(const ::com::sun::star::lang::EventObject& rEvent);
134 
135 	void markColumn(sal_uInt16 nId);
136 	sal_Bool isColumnMarked(sal_uInt16 nId) const;
137 
138 	sal_Int32	GetSelectedColumn() const;
139 
140 	/** return the name of the specified object.
141 		@param	eObjType
142 			The type to ask for
143 		@param	_nPosition
144 			The position of a tablecell (index position), header bar  colum/row cell
145 		@return
146 			The name of the specified object.
147 	*/
148     virtual ::rtl::OUString GetAccessibleObjectName( ::svt::AccessibleBrowseBoxObjType eObjType,sal_Int32 _nPosition = -1) const;
149 
150     /** return the description of the specified object.
151 		@param	eObjType
152 			The type to ask for
153 		@param	_nPosition
154 			The position of a tablecell (index position), header bar  colum/row cell
155 		@return
156 			The description of the specified object.
157 	*/
158     virtual ::rtl::OUString GetAccessibleObjectDescription( ::svt::AccessibleBrowseBoxObjType eObjType,sal_Int32 _nPosition = -1) const;
159 
160 protected:
161 	virtual void Command(const CommandEvent& rEvt);
162 
163 	virtual BrowserHeader* imp_CreateHeaderBar(BrowseBox* pParent);
164     virtual long QueryMinimumRowHeight();
165     virtual void RowHeightChanged();
166 	virtual void ColumnResized(sal_uInt16 nId);
167 	virtual void ColumnMoved(sal_uInt16 nId);
168 	virtual void DeleteSelectedRows();
169 	virtual void SetDesignMode(sal_Bool bMode);
170 	virtual void CellModified();
171 	virtual void HideColumn(sal_uInt16 nId);
172 	virtual void ShowColumn(sal_uInt16 nId);
173 
IsInColumnMove() const174 	sal_Bool	IsInColumnMove() const {return m_bInColumnMove;}
175 
176 	virtual void BeginCursorAction();
177 	virtual void EndCursorAction();
178 	virtual void Select();
179 
180 	// Initialisieren der Spalten
181 	// a.) nur ueber Spaltenbeschreibung
182 	virtual void InitColumnsByModels(const ::com::sun::star::uno::Reference< ::com::sun::star::container::XIndexContainer >& xColumns);
183 	// b.) im alivemode ueber Datenbankfelder
184 	virtual void InitColumnsByFields(const ::com::sun::star::uno::Reference< ::com::sun::star::container::XIndexAccess >& xFields);
185 
186 			// some kind of impl version (for one single column) of our version of InitColumnsByFields
187 			void InitColumnByField(
188 					DbGridColumn* _pColumn,
189 					const ::com::sun::star::uno::Reference< ::com::sun::star::beans::XPropertySet >& _rxColumnModel,
190 					const ::com::sun::star::uno::Reference< ::com::sun::star::container::XNameAccess >& _rxFieldsByNames,
191 					const ::com::sun::star::uno::Reference< ::com::sun::star::container::XIndexAccess >& _rxFieldsByIndex
192 				);
193 
GetPeer() const194 	FmXGridPeer* GetPeer() const {return m_pPeer;}
195 
196 	::com::sun::star::uno::Sequence< ::com::sun::star::uno::Any>
197 			getSelectionBookmarks();
198 	sal_Bool selectBookmarks(const ::com::sun::star::uno::Sequence< ::com::sun::star::uno::Any>& _rBookmarks);
199 
200 	/** returns if a column is selected
201 		@param	nColumnId
202 			The column id.
203 		@param	_pColumn
204 			The column to compare with.
205 		@return
206 			<TRUE/> if the column is selected, otherwise <FALSE/>
207 	*/
208 	sal_Bool isColumnSelected(sal_uInt16 nColumnId,DbGridColumn* _pColumn);
209 };
210 
211 #endif // _SVX_FMGRIDCL_HXX
212 
213