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