1*cdf0e10cSrcweir /************************************************************************* 2*cdf0e10cSrcweir * 3*cdf0e10cSrcweir * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. 4*cdf0e10cSrcweir * 5*cdf0e10cSrcweir * Copyright 2000, 2010 Oracle and/or its affiliates. 6*cdf0e10cSrcweir * 7*cdf0e10cSrcweir * OpenOffice.org - a multi-platform office productivity suite 8*cdf0e10cSrcweir * 9*cdf0e10cSrcweir * This file is part of OpenOffice.org. 10*cdf0e10cSrcweir * 11*cdf0e10cSrcweir * OpenOffice.org is free software: you can redistribute it and/or modify 12*cdf0e10cSrcweir * it under the terms of the GNU Lesser General Public License version 3 13*cdf0e10cSrcweir * only, as published by the Free Software Foundation. 14*cdf0e10cSrcweir * 15*cdf0e10cSrcweir * OpenOffice.org is distributed in the hope that it will be useful, 16*cdf0e10cSrcweir * but WITHOUT ANY WARRANTY; without even the implied warranty of 17*cdf0e10cSrcweir * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 18*cdf0e10cSrcweir * GNU Lesser General Public License version 3 for more details 19*cdf0e10cSrcweir * (a copy is included in the LICENSE file that accompanied this code). 20*cdf0e10cSrcweir * 21*cdf0e10cSrcweir * You should have received a copy of the GNU Lesser General Public License 22*cdf0e10cSrcweir * version 3 along with OpenOffice.org. If not, see 23*cdf0e10cSrcweir * <http://www.openoffice.org/license.html> 24*cdf0e10cSrcweir * for a copy of the LGPLv3 License. 25*cdf0e10cSrcweir * 26*cdf0e10cSrcweir ************************************************************************/ 27*cdf0e10cSrcweir 28*cdf0e10cSrcweir // MARKER(update_precomp.py): autogen include statement, do not remove 29*cdf0e10cSrcweir #include "precompiled_sw.hxx" 30*cdf0e10cSrcweir 31*cdf0e10cSrcweir #ifdef SW_DLLIMPLEMENTATION 32*cdf0e10cSrcweir #undef SW_DLLIMPLEMENTATION 33*cdf0e10cSrcweir #endif 34*cdf0e10cSrcweir 35*cdf0e10cSrcweir 36*cdf0e10cSrcweir #include <swtypes.hxx> 37*cdf0e10cSrcweir #include <selectdbtabledialog.hxx> 38*cdf0e10cSrcweir #include <dbtablepreviewdialog.hxx> 39*cdf0e10cSrcweir #include <com/sun/star/sdbcx/XTablesSupplier.hpp> 40*cdf0e10cSrcweir #include <com/sun/star/sdb/XQueriesSupplier.hpp> 41*cdf0e10cSrcweir #include <com/sun/star/beans/XPropertySet.hpp> 42*cdf0e10cSrcweir #include <com/sun/star/beans/PropertyValue.hpp> 43*cdf0e10cSrcweir #include <com/sun/star/container/XChild.hpp> 44*cdf0e10cSrcweir #include <com/sun/star/sdbc/XDataSource.hpp> 45*cdf0e10cSrcweir 46*cdf0e10cSrcweir #include <unomid.h> 47*cdf0e10cSrcweir 48*cdf0e10cSrcweir #include <selectdbtabledialog.hrc> 49*cdf0e10cSrcweir #include <dbui.hrc> 50*cdf0e10cSrcweir #include <helpid.h> 51*cdf0e10cSrcweir 52*cdf0e10cSrcweir using namespace ::com::sun::star; 53*cdf0e10cSrcweir using namespace ::com::sun::star::sdbcx; 54*cdf0e10cSrcweir using namespace ::com::sun::star::sdbc; 55*cdf0e10cSrcweir using namespace ::com::sun::star::sdb; 56*cdf0e10cSrcweir using namespace ::com::sun::star::uno; 57*cdf0e10cSrcweir using namespace ::com::sun::star::container; 58*cdf0e10cSrcweir using namespace ::com::sun::star::beans; 59*cdf0e10cSrcweir 60*cdf0e10cSrcweir /*-- 08.04.2004 14:33:56--------------------------------------------------- 61*cdf0e10cSrcweir 62*cdf0e10cSrcweir -----------------------------------------------------------------------*/ 63*cdf0e10cSrcweir SwSelectDBTableDialog::SwSelectDBTableDialog(Window* pParent, 64*cdf0e10cSrcweir const uno::Reference< sdbc::XConnection>& rConnection) : 65*cdf0e10cSrcweir SfxModalDialog(pParent, SW_RES(DLG_MM_SELECTDBTABLEDDIALOG)), 66*cdf0e10cSrcweir #ifdef MSC 67*cdf0e10cSrcweir #pragma warning (disable : 4355) 68*cdf0e10cSrcweir #endif 69*cdf0e10cSrcweir m_aSelectFI( this, SW_RES( FI_SELECT )), 70*cdf0e10cSrcweir m_aTableHB( this, WB_BUTTONSTYLE | WB_BOTTOMBORDER), 71*cdf0e10cSrcweir m_aTableLB( this, SW_RES( LB_TABLE )), 72*cdf0e10cSrcweir m_aPreviewPB( this, SW_RES( PB_PREVIEW )), 73*cdf0e10cSrcweir m_aSeparatorFL(this, SW_RES( FL_SEPARATOR )), 74*cdf0e10cSrcweir m_aOK( this, SW_RES( PB_OK )), 75*cdf0e10cSrcweir m_aCancel( this, SW_RES( PB_CANCEL )), 76*cdf0e10cSrcweir m_aHelp( this, SW_RES( PB_HELP )), 77*cdf0e10cSrcweir #ifdef MSC 78*cdf0e10cSrcweir #pragma warning (default : 4355) 79*cdf0e10cSrcweir #endif 80*cdf0e10cSrcweir m_sName( SW_RES( ST_NAME )), 81*cdf0e10cSrcweir m_sType( SW_RES( ST_TYPE )), 82*cdf0e10cSrcweir m_sTable( SW_RES( ST_TABLE )), 83*cdf0e10cSrcweir m_sQuery( SW_RES( ST_QUERY )), 84*cdf0e10cSrcweir m_xConnection(rConnection) 85*cdf0e10cSrcweir { 86*cdf0e10cSrcweir FreeResource(); 87*cdf0e10cSrcweir 88*cdf0e10cSrcweir Size aLBSize(m_aTableLB.GetSizePixel()); 89*cdf0e10cSrcweir m_aTableHB.SetSizePixel(aLBSize); 90*cdf0e10cSrcweir Size aHeadSize(m_aTableHB.CalcWindowSizePixel()); 91*cdf0e10cSrcweir aHeadSize.Width() = aLBSize.Width(); 92*cdf0e10cSrcweir m_aTableHB.SetSizePixel(aHeadSize); 93*cdf0e10cSrcweir Point aLBPos(m_aTableLB.GetPosPixel()); 94*cdf0e10cSrcweir m_aTableHB.SetPosPixel(aLBPos); 95*cdf0e10cSrcweir aLBPos.Y() += aHeadSize.Height(); 96*cdf0e10cSrcweir aLBSize.Height() -= aHeadSize.Height(); 97*cdf0e10cSrcweir m_aTableLB.SetPosSizePixel(aLBPos, aLBSize); 98*cdf0e10cSrcweir 99*cdf0e10cSrcweir Size aSz(m_aTableHB.GetOutputSizePixel()); 100*cdf0e10cSrcweir m_aTableHB.InsertItem( 1, m_sName, 101*cdf0e10cSrcweir aSz.Width()/2, 102*cdf0e10cSrcweir HIB_LEFT | HIB_VCENTER /*| HIB_CLICKABLE | HIB_UPARROW */); 103*cdf0e10cSrcweir m_aTableHB.InsertItem( 2, m_sType, 104*cdf0e10cSrcweir aSz.Width()/2, 105*cdf0e10cSrcweir HIB_LEFT | HIB_VCENTER /*| HIB_CLICKABLE | HIB_UPARROW */); 106*cdf0e10cSrcweir m_aTableHB.SetHelpId(HID_MM_ADDRESSLIST_HB ); 107*cdf0e10cSrcweir m_aTableHB.Show(); 108*cdf0e10cSrcweir 109*cdf0e10cSrcweir static long nTabs[] = {3, 0, aSz.Width()/2, aSz.Width() }; 110*cdf0e10cSrcweir m_aTableLB.SetTabs(&nTabs[0], MAP_PIXEL); 111*cdf0e10cSrcweir m_aTableLB.SetHelpId(HID_MM_SELECTDBTABLEDDIALOG_LISTBOX); 112*cdf0e10cSrcweir m_aTableLB.SetStyle( m_aTableLB.GetStyle() | WB_CLIPCHILDREN ); 113*cdf0e10cSrcweir m_aTableLB.SetSpaceBetweenEntries(3); 114*cdf0e10cSrcweir m_aTableLB.SetSelectionMode( SINGLE_SELECTION ); 115*cdf0e10cSrcweir m_aTableLB.SetDragDropMode( 0 ); 116*cdf0e10cSrcweir m_aTableLB.EnableAsyncDrag(sal_False); 117*cdf0e10cSrcweir 118*cdf0e10cSrcweir m_aPreviewPB.SetClickHdl(LINK(this, SwSelectDBTableDialog, PreviewHdl)); 119*cdf0e10cSrcweir 120*cdf0e10cSrcweir Reference<XTablesSupplier> xTSupplier(m_xConnection, UNO_QUERY); 121*cdf0e10cSrcweir if(xTSupplier.is()) 122*cdf0e10cSrcweir { 123*cdf0e10cSrcweir Reference<XNameAccess> xTbls = xTSupplier->getTables(); 124*cdf0e10cSrcweir Sequence<rtl::OUString> aTbls = xTbls->getElementNames(); 125*cdf0e10cSrcweir const rtl::OUString* pTbls = aTbls.getConstArray(); 126*cdf0e10cSrcweir for(long i = 0; i < aTbls.getLength(); i++) 127*cdf0e10cSrcweir { 128*cdf0e10cSrcweir String sEntry = pTbls[i]; 129*cdf0e10cSrcweir sEntry += '\t'; 130*cdf0e10cSrcweir sEntry += m_sTable; 131*cdf0e10cSrcweir SvLBoxEntry* pEntry = m_aTableLB.InsertEntry(sEntry); 132*cdf0e10cSrcweir pEntry->SetUserData((void*)0); 133*cdf0e10cSrcweir } 134*cdf0e10cSrcweir } 135*cdf0e10cSrcweir Reference<XQueriesSupplier> xQSupplier(m_xConnection, UNO_QUERY); 136*cdf0e10cSrcweir if(xQSupplier.is()) 137*cdf0e10cSrcweir { 138*cdf0e10cSrcweir Reference<XNameAccess> xQueries = xQSupplier->getQueries(); 139*cdf0e10cSrcweir Sequence<rtl::OUString> aQueries = xQueries->getElementNames(); 140*cdf0e10cSrcweir const rtl::OUString* pQueries = aQueries.getConstArray(); 141*cdf0e10cSrcweir for(long i = 0; i < aQueries.getLength(); i++) 142*cdf0e10cSrcweir { 143*cdf0e10cSrcweir String sEntry = pQueries[i]; 144*cdf0e10cSrcweir sEntry += '\t'; 145*cdf0e10cSrcweir sEntry += m_sQuery; 146*cdf0e10cSrcweir SvLBoxEntry* pEntry = m_aTableLB.InsertEntry(sEntry); 147*cdf0e10cSrcweir pEntry->SetUserData((void*)1); 148*cdf0e10cSrcweir } 149*cdf0e10cSrcweir } 150*cdf0e10cSrcweir } 151*cdf0e10cSrcweir /*-- 08.04.2004 14:33:57--------------------------------------------------- 152*cdf0e10cSrcweir 153*cdf0e10cSrcweir -----------------------------------------------------------------------*/ 154*cdf0e10cSrcweir SwSelectDBTableDialog::~SwSelectDBTableDialog() 155*cdf0e10cSrcweir { 156*cdf0e10cSrcweir } 157*cdf0e10cSrcweir /*-- 08.04.2004 14:33:57--------------------------------------------------- 158*cdf0e10cSrcweir 159*cdf0e10cSrcweir -----------------------------------------------------------------------*/ 160*cdf0e10cSrcweir IMPL_LINK(SwSelectDBTableDialog, PreviewHdl, PushButton*, pButton) 161*cdf0e10cSrcweir { 162*cdf0e10cSrcweir SvLBoxEntry* pEntry = m_aTableLB.FirstSelected(); 163*cdf0e10cSrcweir if(pEntry) 164*cdf0e10cSrcweir { 165*cdf0e10cSrcweir ::rtl::OUString sTableOrQuery = m_aTableLB.GetEntryText(pEntry, 0); 166*cdf0e10cSrcweir sal_Int32 nCommandType = 0 == pEntry->GetUserData() ? 0 : 1; 167*cdf0e10cSrcweir 168*cdf0e10cSrcweir ::rtl::OUString sDataSourceName; 169*cdf0e10cSrcweir Reference<XChild> xChild(m_xConnection, UNO_QUERY); 170*cdf0e10cSrcweir if(xChild.is()) 171*cdf0e10cSrcweir { 172*cdf0e10cSrcweir Reference<XDataSource> xSource(xChild->getParent(), UNO_QUERY); 173*cdf0e10cSrcweir Reference<XPropertySet> xPrSet(xSource, UNO_QUERY); 174*cdf0e10cSrcweir xPrSet->getPropertyValue(C2U("Name")) >>= sDataSourceName; 175*cdf0e10cSrcweir } 176*cdf0e10cSrcweir DBG_ASSERT(sDataSourceName.getLength(), "no data source found"); 177*cdf0e10cSrcweir Sequence<PropertyValue> aProperties(5); 178*cdf0e10cSrcweir PropertyValue* pProperties = aProperties.getArray(); 179*cdf0e10cSrcweir pProperties[0].Name = C2U("DataSourceName"); 180*cdf0e10cSrcweir pProperties[0].Value <<= sDataSourceName; 181*cdf0e10cSrcweir pProperties[1].Name = C2U("Command"); 182*cdf0e10cSrcweir pProperties[1].Value <<= sTableOrQuery; 183*cdf0e10cSrcweir pProperties[2].Name = C2U("CommandType"); 184*cdf0e10cSrcweir pProperties[2].Value <<= nCommandType; 185*cdf0e10cSrcweir pProperties[3].Name = C2U("ShowTreeView"); 186*cdf0e10cSrcweir sal_Bool bFalse = sal_False; 187*cdf0e10cSrcweir pProperties[3].Value <<= bFalse; 188*cdf0e10cSrcweir pProperties[4].Name = C2U("ShowTreeViewButton"); 189*cdf0e10cSrcweir pProperties[4].Value <<= bFalse; 190*cdf0e10cSrcweir 191*cdf0e10cSrcweir SwDBTablePreviewDialog* pDlg = new SwDBTablePreviewDialog(pButton, aProperties); 192*cdf0e10cSrcweir pDlg->Execute(); 193*cdf0e10cSrcweir delete pDlg; 194*cdf0e10cSrcweir } 195*cdf0e10cSrcweir 196*cdf0e10cSrcweir return 0; 197*cdf0e10cSrcweir } 198*cdf0e10cSrcweir /*-- 19.04.2004 10:03:26--------------------------------------------------- 199*cdf0e10cSrcweir 200*cdf0e10cSrcweir -----------------------------------------------------------------------*/ 201*cdf0e10cSrcweir String SwSelectDBTableDialog::GetSelectedTable(bool& bIsTable) 202*cdf0e10cSrcweir { 203*cdf0e10cSrcweir SvLBoxEntry* pEntry = m_aTableLB.FirstSelected(); 204*cdf0e10cSrcweir bIsTable = pEntry->GetUserData() ? false : true; 205*cdf0e10cSrcweir return pEntry ? m_aTableLB.GetEntryText(pEntry, 0) : String(); 206*cdf0e10cSrcweir } 207*cdf0e10cSrcweir /*-- 13.05.2004 12:58:26--------------------------------------------------- 208*cdf0e10cSrcweir 209*cdf0e10cSrcweir -----------------------------------------------------------------------*/ 210*cdf0e10cSrcweir void SwSelectDBTableDialog::SetSelectedTable(const String& rTable, bool bIsTable) 211*cdf0e10cSrcweir { 212*cdf0e10cSrcweir SvLBoxEntry* pEntry = m_aTableLB.First(); 213*cdf0e10cSrcweir while(pEntry) 214*cdf0e10cSrcweir { 215*cdf0e10cSrcweir if((m_aTableLB.GetEntryText(pEntry, 0) == rTable) && 216*cdf0e10cSrcweir ((pEntry->GetUserData() == 0 ) == bIsTable)) 217*cdf0e10cSrcweir { 218*cdf0e10cSrcweir m_aTableLB.Select(pEntry); 219*cdf0e10cSrcweir break; 220*cdf0e10cSrcweir } 221*cdf0e10cSrcweir pEntry = m_aTableLB.Next( pEntry ); 222*cdf0e10cSrcweir } 223*cdf0e10cSrcweir } 224