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