1*b1cdbd2cSJim Jagielski /**************************************************************
2*b1cdbd2cSJim Jagielski  *
3*b1cdbd2cSJim Jagielski  * Licensed to the Apache Software Foundation (ASF) under one
4*b1cdbd2cSJim Jagielski  * or more contributor license agreements.  See the NOTICE file
5*b1cdbd2cSJim Jagielski  * distributed with this work for additional information
6*b1cdbd2cSJim Jagielski  * regarding copyright ownership.  The ASF licenses this file
7*b1cdbd2cSJim Jagielski  * to you under the Apache License, Version 2.0 (the
8*b1cdbd2cSJim Jagielski  * "License"); you may not use this file except in compliance
9*b1cdbd2cSJim Jagielski  * with the License.  You may obtain a copy of the License at
10*b1cdbd2cSJim Jagielski  *
11*b1cdbd2cSJim Jagielski  *   http://www.apache.org/licenses/LICENSE-2.0
12*b1cdbd2cSJim Jagielski  *
13*b1cdbd2cSJim Jagielski  * Unless required by applicable law or agreed to in writing,
14*b1cdbd2cSJim Jagielski  * software distributed under the License is distributed on an
15*b1cdbd2cSJim Jagielski  * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
16*b1cdbd2cSJim Jagielski  * KIND, either express or implied.  See the License for the
17*b1cdbd2cSJim Jagielski  * specific language governing permissions and limitations
18*b1cdbd2cSJim Jagielski  * under the License.
19*b1cdbd2cSJim Jagielski  *
20*b1cdbd2cSJim Jagielski  *************************************************************/
21*b1cdbd2cSJim Jagielski 
22*b1cdbd2cSJim Jagielski 
23*b1cdbd2cSJim Jagielski 
24*b1cdbd2cSJim Jagielski #ifndef _DBAUI_TABLETREE_HXX_
25*b1cdbd2cSJim Jagielski #define _DBAUI_TABLETREE_HXX_
26*b1cdbd2cSJim Jagielski 
27*b1cdbd2cSJim Jagielski #ifndef _DBAUI_MARKTREE_HXX_
28*b1cdbd2cSJim Jagielski #include "marktree.hxx"
29*b1cdbd2cSJim Jagielski #endif
30*b1cdbd2cSJim Jagielski 
31*b1cdbd2cSJim Jagielski #ifndef _COM_SUN_STAR_BEANS_PROPERTYVALUE_HPP_
32*b1cdbd2cSJim Jagielski #include <com/sun/star/beans/PropertyValue.hpp>
33*b1cdbd2cSJim Jagielski #endif
34*b1cdbd2cSJim Jagielski #ifndef _COM_SUN_STAR_CONTAINER_XNAMEACCESS_HPP_
35*b1cdbd2cSJim Jagielski #include <com/sun/star/container/XNameAccess.hpp>
36*b1cdbd2cSJim Jagielski #endif
37*b1cdbd2cSJim Jagielski #ifndef _COM_SUN_STAR_SDBC_XDATABASEMETADATA_HPP_
38*b1cdbd2cSJim Jagielski #include <com/sun/star/sdbc/XDatabaseMetaData.hpp>
39*b1cdbd2cSJim Jagielski #endif
40*b1cdbd2cSJim Jagielski #ifndef _COM_SUN_STAR_SDBC_XCONNECTION_HPP_
41*b1cdbd2cSJim Jagielski #include <com/sun/star/sdbc/XConnection.hpp>
42*b1cdbd2cSJim Jagielski #endif
43*b1cdbd2cSJim Jagielski #ifndef _COM_SUN_STAR_SDBC_XDRIVER_HPP_
44*b1cdbd2cSJim Jagielski #include <com/sun/star/sdbc/XDriver.hpp>
45*b1cdbd2cSJim Jagielski #endif
46*b1cdbd2cSJim Jagielski #ifndef _COM_SUN_STAR_SDB_APPLICATION_NAMEDDATABASEOBJECT_HPP_
47*b1cdbd2cSJim Jagielski #include <com/sun/star/sdb/application/NamedDatabaseObject.hpp>
48*b1cdbd2cSJim Jagielski #endif
49*b1cdbd2cSJim Jagielski 
50*b1cdbd2cSJim Jagielski #include <memory>
51*b1cdbd2cSJim Jagielski 
52*b1cdbd2cSJim Jagielski //.........................................................................
53*b1cdbd2cSJim Jagielski namespace dbaui
54*b1cdbd2cSJim Jagielski {
55*b1cdbd2cSJim Jagielski //.........................................................................
56*b1cdbd2cSJim Jagielski 
57*b1cdbd2cSJim Jagielski class ImageProvider;
58*b1cdbd2cSJim Jagielski 
59*b1cdbd2cSJim Jagielski //========================================================================
60*b1cdbd2cSJim Jagielski //= OTableTreeListBox
61*b1cdbd2cSJim Jagielski //========================================================================
62*b1cdbd2cSJim Jagielski class OTableTreeListBox : public OMarkableTreeListBox
63*b1cdbd2cSJim Jagielski {
64*b1cdbd2cSJim Jagielski protected:
65*b1cdbd2cSJim Jagielski     ::com::sun::star::uno::Reference< ::com::sun::star::sdbc::XConnection >
66*b1cdbd2cSJim Jagielski                     m_xConnection;      // the connection we're working for, set in implOnNewConnection, called by UpdateTableList
67*b1cdbd2cSJim Jagielski     ::std::auto_ptr< ImageProvider >
68*b1cdbd2cSJim Jagielski                     m_pImageProvider;   // provider for our images
69*b1cdbd2cSJim Jagielski 	sal_Bool		m_bVirtualRoot; // should the first entry be visible
70*b1cdbd2cSJim Jagielski     bool            m_bNoEmptyFolders;  // should empty catalogs/schematas be prevented from being displayed?
71*b1cdbd2cSJim Jagielski 
72*b1cdbd2cSJim Jagielski public:
73*b1cdbd2cSJim Jagielski 	OTableTreeListBox(
74*b1cdbd2cSJim Jagielski         Window* pParent,
75*b1cdbd2cSJim Jagielski 		const ::com::sun::star::uno::Reference< ::com::sun::star::lang::XMultiServiceFactory >& _rxORB,
76*b1cdbd2cSJim Jagielski         WinBits nWinStyle,
77*b1cdbd2cSJim Jagielski         sal_Bool _bVirtualRoot );
78*b1cdbd2cSJim Jagielski 
79*b1cdbd2cSJim Jagielski 	OTableTreeListBox(
80*b1cdbd2cSJim Jagielski         Window* pParent,
81*b1cdbd2cSJim Jagielski 		const ::com::sun::star::uno::Reference< ::com::sun::star::lang::XMultiServiceFactory >& _rxORB,
82*b1cdbd2cSJim Jagielski         const ResId& rResId,
83*b1cdbd2cSJim Jagielski         sal_Bool _bVirtualRoot );
84*b1cdbd2cSJim Jagielski 
85*b1cdbd2cSJim Jagielski     ~OTableTreeListBox();
86*b1cdbd2cSJim Jagielski 
87*b1cdbd2cSJim Jagielski 	typedef ::std::pair< ::rtl::OUString,sal_Bool>	TTableViewName;
88*b1cdbd2cSJim Jagielski 	typedef ::std::vector< TTableViewName >			TNames;
89*b1cdbd2cSJim Jagielski 
suppressEmptyFolders()90*b1cdbd2cSJim Jagielski     void    suppressEmptyFolders() { m_bNoEmptyFolders = true; }
91*b1cdbd2cSJim Jagielski 
92*b1cdbd2cSJim Jagielski     /** call when HiContrast change.
93*b1cdbd2cSJim Jagielski 	*/
94*b1cdbd2cSJim Jagielski 	void notifyHiContrastChanged();
95*b1cdbd2cSJim Jagielski 
96*b1cdbd2cSJim Jagielski     /** determines whether the given entry denotes a tables folder
97*b1cdbd2cSJim Jagielski     */
98*b1cdbd2cSJim Jagielski     bool    isFolderEntry( const SvLBoxEntry* _pEntry ) const;
99*b1cdbd2cSJim Jagielski 
100*b1cdbd2cSJim Jagielski     /** determines whether the given entry denotes a table or view
101*b1cdbd2cSJim Jagielski     */
isTableOrViewEntry(const SvLBoxEntry * _pEntry) const102*b1cdbd2cSJim Jagielski     bool    isTableOrViewEntry( const SvLBoxEntry* _pEntry ) const
103*b1cdbd2cSJim Jagielski     {
104*b1cdbd2cSJim Jagielski         return !isFolderEntry( _pEntry );
105*b1cdbd2cSJim Jagielski     }
106*b1cdbd2cSJim Jagielski 
107*b1cdbd2cSJim Jagielski 	/** fill the table list with the tables belonging to the connection described by the parameters
108*b1cdbd2cSJim Jagielski 		@param _rxConnection
109*b1cdbd2cSJim Jagielski 			the connection, which must support the service com.sun.star.sdb.Connection
110*b1cdbd2cSJim Jagielski 		@throws
111*b1cdbd2cSJim Jagielski 			<type scope="com::sun::star::sdbc">SQLException</type> if no connection could be created
112*b1cdbd2cSJim Jagielski 	*/
113*b1cdbd2cSJim Jagielski 	void    UpdateTableList(
114*b1cdbd2cSJim Jagielski 				const ::com::sun::star::uno::Reference< ::com::sun::star::sdbc::XConnection >& _rxConnection
115*b1cdbd2cSJim Jagielski 			)	throw(::com::sun::star::sdbc::SQLException);
116*b1cdbd2cSJim Jagielski 
117*b1cdbd2cSJim Jagielski 	/** fill the table list with the tables and views determined by the two given containers.
118*b1cdbd2cSJim Jagielski 		The views sequence is used to determine which table is of type view.
119*b1cdbd2cSJim Jagielski 		@param		_rxConnection   the connection where you got the object names from. Must not be NULL.
120*b1cdbd2cSJim Jagielski 									Used to split the full qualified names into it's parts.
121*b1cdbd2cSJim Jagielski 		@param		_rTables		table/view sequence
122*b1cdbd2cSJim Jagielski 		@param		_rViews			view sequence
123*b1cdbd2cSJim Jagielski 	*/
124*b1cdbd2cSJim Jagielski 	void	UpdateTableList(
125*b1cdbd2cSJim Jagielski 				const ::com::sun::star::uno::Reference< ::com::sun::star::sdbc::XConnection >& _rxConnection,
126*b1cdbd2cSJim Jagielski 				const ::com::sun::star::uno::Sequence< ::rtl::OUString>& _rTables,
127*b1cdbd2cSJim Jagielski 				const ::com::sun::star::uno::Sequence< ::rtl::OUString>& _rViews
128*b1cdbd2cSJim Jagielski 			);
129*b1cdbd2cSJim Jagielski 
130*b1cdbd2cSJim Jagielski     /** returns a NamedDatabaseObject record which describes the given entry
131*b1cdbd2cSJim Jagielski     */
132*b1cdbd2cSJim Jagielski     ::com::sun::star::sdb::application::NamedDatabaseObject
133*b1cdbd2cSJim Jagielski             describeObject( SvLBoxEntry* _pEntry );
134*b1cdbd2cSJim Jagielski 
135*b1cdbd2cSJim Jagielski 	/** to be used if a foreign instance added a table
136*b1cdbd2cSJim Jagielski 	*/
137*b1cdbd2cSJim Jagielski 	SvLBoxEntry* addedTable( const ::rtl::OUString& _rName );
138*b1cdbd2cSJim Jagielski 
139*b1cdbd2cSJim Jagielski 	/** to be used if a foreign instance removed a table
140*b1cdbd2cSJim Jagielski 	*/
141*b1cdbd2cSJim Jagielski 	void	removedTable( const ::rtl::OUString& _rName );
142*b1cdbd2cSJim Jagielski 
143*b1cdbd2cSJim Jagielski     /** returns the fully qualified name of a table entry
144*b1cdbd2cSJim Jagielski         @param _pEntry
145*b1cdbd2cSJim Jagielski             the entry whose name is to be obtained. Must not denote a folder entry.
146*b1cdbd2cSJim Jagielski     */
147*b1cdbd2cSJim Jagielski     String getQualifiedTableName( SvLBoxEntry* _pEntry ) const;
148*b1cdbd2cSJim Jagielski 
149*b1cdbd2cSJim Jagielski 	SvLBoxEntry*	getEntryByQualifiedName( const ::rtl::OUString& _rName );
150*b1cdbd2cSJim Jagielski 
151*b1cdbd2cSJim Jagielski 	SvLBoxEntry*	getAllObjectsEntry() const;
152*b1cdbd2cSJim Jagielski 
153*b1cdbd2cSJim Jagielski 	/** does a wildcard check of the given entry
154*b1cdbd2cSJim Jagielski 		<p>There are two different 'checked' states: If the user checks all children of an entry, this is different
155*b1cdbd2cSJim Jagielski 		from checking the entry itself. The second is called 'wildcard' checking, 'cause in the resulting
156*b1cdbd2cSJim Jagielski 		table filter it's represented by a wildcard.</p>
157*b1cdbd2cSJim Jagielski 	*/
158*b1cdbd2cSJim Jagielski 	void			checkWildcard(SvLBoxEntry* _pEntry);
159*b1cdbd2cSJim Jagielski 
160*b1cdbd2cSJim Jagielski 	/** determine if the given entry is 'wildcard checked'
161*b1cdbd2cSJim Jagielski 		@see checkWildcard
162*b1cdbd2cSJim Jagielski 	*/
163*b1cdbd2cSJim Jagielski 	sal_Bool		isWildcardChecked(SvLBoxEntry* _pEntry) const;
164*b1cdbd2cSJim Jagielski 
165*b1cdbd2cSJim Jagielski protected:
166*b1cdbd2cSJim Jagielski 	virtual void InitEntry(SvLBoxEntry* _pEntry, const XubString& _rString, const Image& _rCollapsedBitmap, const Image& _rExpandedBitmap, SvLBoxButtonKind _eButtonKind);
167*b1cdbd2cSJim Jagielski 
168*b1cdbd2cSJim Jagielski 	virtual void checkedButton_noBroadcast(SvLBoxEntry* _pEntry);
169*b1cdbd2cSJim Jagielski 
170*b1cdbd2cSJim Jagielski 	void implEmphasize(SvLBoxEntry* _pEntry, sal_Bool _bChecked, sal_Bool _bUpdateDescendants = sal_True, sal_Bool _bUpdateAncestors = sal_True);
171*b1cdbd2cSJim Jagielski 
172*b1cdbd2cSJim Jagielski     /** adds the given entry to our list
173*b1cdbd2cSJim Jagielski         @precond
174*b1cdbd2cSJim Jagielski             our image provider must already have been reset to the connection to which the meta data
175*b1cdbd2cSJim Jagielski             belong.
176*b1cdbd2cSJim Jagielski     */
177*b1cdbd2cSJim Jagielski 	SvLBoxEntry* implAddEntry(
178*b1cdbd2cSJim Jagielski 			const ::com::sun::star::uno::Reference< ::com::sun::star::sdbc::XDatabaseMetaData >& _rxMeta,
179*b1cdbd2cSJim Jagielski 			const ::rtl::OUString& _rTableName,
180*b1cdbd2cSJim Jagielski 			sal_Bool _bCheckName = sal_True
181*b1cdbd2cSJim Jagielski 		);
182*b1cdbd2cSJim Jagielski 
183*b1cdbd2cSJim Jagielski     void    implSetDefaultImages();
184*b1cdbd2cSJim Jagielski 
185*b1cdbd2cSJim Jagielski     void    implOnNewConnection( const ::com::sun::star::uno::Reference< ::com::sun::star::sdbc::XConnection >& _rxConnection );
186*b1cdbd2cSJim Jagielski 
187*b1cdbd2cSJim Jagielski     bool    impl_getAndAssertMetaData( ::com::sun::star::uno::Reference< ::com::sun::star::sdbc::XDatabaseMetaData >& _out_rMetaData ) const;
188*b1cdbd2cSJim Jagielski 
haveVirtualRoot() const189*b1cdbd2cSJim Jagielski 	sal_Bool haveVirtualRoot() const { return m_bVirtualRoot; }
190*b1cdbd2cSJim Jagielski 
191*b1cdbd2cSJim Jagielski 	/** fill the table list with the tables and views determined by the two given containers
192*b1cdbd2cSJim Jagielski 		@param		_rxConnection	the connection where you got the object names from. Must not be NULL.
193*b1cdbd2cSJim Jagielski 									Used to split the full qualified names into it's parts.
194*b1cdbd2cSJim Jagielski 		@param		_rTables		table/view sequence, the second argument is <TRUE/> if it is a table, otherwise it is a view.
195*b1cdbd2cSJim Jagielski 	*/
196*b1cdbd2cSJim Jagielski 	void	UpdateTableList(
197*b1cdbd2cSJim Jagielski 				const ::com::sun::star::uno::Reference< ::com::sun::star::sdbc::XConnection >& _rxConnection,
198*b1cdbd2cSJim Jagielski 				const TNames& _rTables
199*b1cdbd2cSJim Jagielski 			);
200*b1cdbd2cSJim Jagielski 
201*b1cdbd2cSJim Jagielski };
202*b1cdbd2cSJim Jagielski 
203*b1cdbd2cSJim Jagielski //.........................................................................
204*b1cdbd2cSJim Jagielski }	// namespace dbaui
205*b1cdbd2cSJim Jagielski //.........................................................................
206*b1cdbd2cSJim Jagielski 
207*b1cdbd2cSJim Jagielski #endif // _DBAUI_TABLETREE_HXX_
208*b1cdbd2cSJim Jagielski 
209