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