Branch data 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 _DBAUI_TABLETREE_HXX_
21 : : #define _DBAUI_TABLETREE_HXX_
22 : :
23 : : #include "marktree.hxx"
24 : :
25 : : #include <com/sun/star/beans/PropertyValue.hpp>
26 : : #include <com/sun/star/container/XNameAccess.hpp>
27 : : #include <com/sun/star/sdbc/XDatabaseMetaData.hpp>
28 : : #include <com/sun/star/sdbc/XConnection.hpp>
29 : : #include <com/sun/star/sdbc/XDriver.hpp>
30 : : #include <com/sun/star/sdb/application/NamedDatabaseObject.hpp>
31 : :
32 : : #include <memory>
33 : :
34 : : //.........................................................................
35 : : namespace dbaui
36 : : {
37 : : //.........................................................................
38 : :
39 : : class ImageProvider;
40 : :
41 : : //========================================================================
42 : : //= OTableTreeListBox
43 : : //========================================================================
44 : : class OTableTreeListBox : public OMarkableTreeListBox
45 : : {
46 : : protected:
47 : : ::com::sun::star::uno::Reference< ::com::sun::star::sdbc::XConnection >
48 : : m_xConnection; // the connection we're working for, set in implOnNewConnection, called by UpdateTableList
49 : : ::std::auto_ptr< ImageProvider >
50 : : m_pImageProvider; // provider for our images
51 : : sal_Bool m_bVirtualRoot; // should the first entry be visible
52 : : bool m_bNoEmptyFolders; // should empty catalogs/schematas be prevented from being displayed?
53 : :
54 : : public:
55 : : OTableTreeListBox(
56 : : Window* pParent,
57 : : const ::com::sun::star::uno::Reference< ::com::sun::star::lang::XMultiServiceFactory >& _rxORB,
58 : : WinBits nWinStyle,
59 : : sal_Bool _bVirtualRoot );
60 : :
61 : : OTableTreeListBox(
62 : : Window* pParent,
63 : : const ::com::sun::star::uno::Reference< ::com::sun::star::lang::XMultiServiceFactory >& _rxORB,
64 : : const ResId& rResId,
65 : : sal_Bool _bVirtualRoot );
66 : :
67 : : ~OTableTreeListBox();
68 : :
69 : : typedef ::std::pair< ::rtl::OUString,sal_Bool> TTableViewName;
70 : : typedef ::std::vector< TTableViewName > TNames;
71 : :
72 : 0 : void suppressEmptyFolders() { m_bNoEmptyFolders = true; }
73 : :
74 : : /** call when HiContrast change.
75 : : */
76 : : void notifyHiContrastChanged();
77 : :
78 : : /** determines whether the given entry denotes a tables folder
79 : : */
80 : : bool isFolderEntry( const SvLBoxEntry* _pEntry ) const;
81 : :
82 : : /** determines whether the given entry denotes a table or view
83 : : */
84 : : bool isTableOrViewEntry( const SvLBoxEntry* _pEntry ) const
85 : : {
86 : : return !isFolderEntry( _pEntry );
87 : : }
88 : :
89 : : /** fill the table list with the tables belonging to the connection described by the parameters
90 : : @param _rxConnection
91 : : the connection, which must support the service com.sun.star.sdb.Connection
92 : : @throws
93 : : <type scope="com::sun::star::sdbc">SQLException</type> if no connection could be created
94 : : */
95 : : void UpdateTableList(
96 : : const ::com::sun::star::uno::Reference< ::com::sun::star::sdbc::XConnection >& _rxConnection
97 : : ) throw(::com::sun::star::sdbc::SQLException);
98 : :
99 : : /** fill the table list with the tables and views determined by the two given containers.
100 : : The views sequence is used to determine which table is of type view.
101 : : @param _rxConnection the connection where you got the object names from. Must not be NULL.
102 : : Used to split the full qualified names into it's parts.
103 : : @param _rTables table/view sequence
104 : : @param _rViews view sequence
105 : : */
106 : : void UpdateTableList(
107 : : const ::com::sun::star::uno::Reference< ::com::sun::star::sdbc::XConnection >& _rxConnection,
108 : : const ::com::sun::star::uno::Sequence< ::rtl::OUString>& _rTables,
109 : : const ::com::sun::star::uno::Sequence< ::rtl::OUString>& _rViews
110 : : );
111 : :
112 : : /** returns a NamedDatabaseObject record which describes the given entry
113 : : */
114 : : ::com::sun::star::sdb::application::NamedDatabaseObject
115 : : describeObject( SvLBoxEntry* _pEntry );
116 : :
117 : : /** to be used if a foreign instance added a table
118 : : */
119 : : SvLBoxEntry* addedTable( const ::rtl::OUString& _rName );
120 : :
121 : : /** to be used if a foreign instance removed a table
122 : : */
123 : : void removedTable( const ::rtl::OUString& _rName );
124 : :
125 : : /** returns the fully qualified name of a table entry
126 : : @param _pEntry
127 : : the entry whose name is to be obtained. Must not denote a folder entry.
128 : : */
129 : : String getQualifiedTableName( SvLBoxEntry* _pEntry ) const;
130 : :
131 : : SvLBoxEntry* getEntryByQualifiedName( const ::rtl::OUString& _rName );
132 : :
133 : : SvLBoxEntry* getAllObjectsEntry() const;
134 : :
135 : : /** does a wildcard check of the given entry
136 : : <p>There are two different 'checked' states: If the user checks all children of an entry, this is different
137 : : from checking the entry itself. The second is called 'wildcard' checking, 'cause in the resulting
138 : : table filter it's represented by a wildcard.</p>
139 : : */
140 : : void checkWildcard(SvLBoxEntry* _pEntry);
141 : :
142 : : /** determine if the given entry is 'wildcard checked'
143 : : @see checkWildcard
144 : : */
145 : : sal_Bool isWildcardChecked(SvLBoxEntry* _pEntry) const;
146 : :
147 : : protected:
148 : : virtual void InitEntry(SvLBoxEntry* _pEntry, const XubString& _rString, const Image& _rCollapsedBitmap, const Image& _rExpandedBitmap, SvLBoxButtonKind _eButtonKind);
149 : :
150 : : virtual void checkedButton_noBroadcast(SvLBoxEntry* _pEntry);
151 : :
152 : : void implEmphasize(SvLBoxEntry* _pEntry, sal_Bool _bChecked, sal_Bool _bUpdateDescendants = sal_True, sal_Bool _bUpdateAncestors = sal_True);
153 : :
154 : : /** adds the given entry to our list
155 : : @precond
156 : : our image provider must already have been reset to the connection to which the meta data
157 : : belong.
158 : : */
159 : : SvLBoxEntry* implAddEntry(
160 : : const ::com::sun::star::uno::Reference< ::com::sun::star::sdbc::XDatabaseMetaData >& _rxMeta,
161 : : const ::rtl::OUString& _rTableName,
162 : : sal_Bool _bCheckName = sal_True
163 : : );
164 : :
165 : : void implSetDefaultImages();
166 : :
167 : : void implOnNewConnection( const ::com::sun::star::uno::Reference< ::com::sun::star::sdbc::XConnection >& _rxConnection );
168 : :
169 : : bool impl_getAndAssertMetaData( ::com::sun::star::uno::Reference< ::com::sun::star::sdbc::XDatabaseMetaData >& _out_rMetaData ) const;
170 : :
171 : 0 : sal_Bool haveVirtualRoot() const { return m_bVirtualRoot; }
172 : :
173 : : /** fill the table list with the tables and views determined by the two given containers
174 : : @param _rxConnection the connection where you got the object names from. Must not be NULL.
175 : : Used to split the full qualified names into it's parts.
176 : : @param _rTables table/view sequence, the second argument is <TRUE/> if it is a table, otherwise it is a view.
177 : : */
178 : : void UpdateTableList(
179 : : const ::com::sun::star::uno::Reference< ::com::sun::star::sdbc::XConnection >& _rxConnection,
180 : : const TNames& _rTables
181 : : );
182 : :
183 : : };
184 : :
185 : : //.........................................................................
186 : : } // namespace dbaui
187 : : //.........................................................................
188 : :
189 : : #endif // _DBAUI_TABLETREE_HXX_
190 : :
191 : : /* vim:set shiftwidth=4 softtabstop=4 expandtab: */
|