/************************************************************************* * * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * * Copyright 2000, 2010 Oracle and/or its affiliates. * * OpenOffice.org - a multi-platform office productivity suite * * This file is part of OpenOffice.org. * * OpenOffice.org is free software: you can redistribute it and/or modify * it under the terms of the GNU Lesser General Public License version 3 * only, as published by the Free Software Foundation. * * OpenOffice.org is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU Lesser General Public License version 3 for more details * (a copy is included in the LICENSE file that accompanied this code). * * You should have received a copy of the GNU Lesser General Public License * version 3 along with OpenOffice.org. If not, see * * for a copy of the LGPLv3 License. * ************************************************************************/ // MARKER(update_precomp.py): autogen include statement, do not remove #include "precompiled_sw.hxx" #ifdef SW_DLLIMPLEMENTATION #undef SW_DLLIMPLEMENTATION #endif #include #include #include #include #include #include #include #include #include #include #include #include #include using namespace ::com::sun::star; using namespace ::com::sun::star::sdbcx; using namespace ::com::sun::star::sdbc; using namespace ::com::sun::star::sdb; using namespace ::com::sun::star::uno; using namespace ::com::sun::star::container; using namespace ::com::sun::star::beans; /*-- 08.04.2004 14:33:56--------------------------------------------------- -----------------------------------------------------------------------*/ SwSelectDBTableDialog::SwSelectDBTableDialog(Window* pParent, const uno::Reference< sdbc::XConnection>& rConnection) : SfxModalDialog(pParent, SW_RES(DLG_MM_SELECTDBTABLEDDIALOG)), #ifdef MSC #pragma warning (disable : 4355) #endif m_aSelectFI( this, SW_RES( FI_SELECT )), m_aTableHB( this, WB_BUTTONSTYLE | WB_BOTTOMBORDER), m_aTableLB( this, SW_RES( LB_TABLE )), m_aPreviewPB( this, SW_RES( PB_PREVIEW )), m_aSeparatorFL(this, SW_RES( FL_SEPARATOR )), m_aOK( this, SW_RES( PB_OK )), m_aCancel( this, SW_RES( PB_CANCEL )), m_aHelp( this, SW_RES( PB_HELP )), #ifdef MSC #pragma warning (default : 4355) #endif m_sName( SW_RES( ST_NAME )), m_sType( SW_RES( ST_TYPE )), m_sTable( SW_RES( ST_TABLE )), m_sQuery( SW_RES( ST_QUERY )), m_xConnection(rConnection) { FreeResource(); Size aLBSize(m_aTableLB.GetSizePixel()); m_aTableHB.SetSizePixel(aLBSize); Size aHeadSize(m_aTableHB.CalcWindowSizePixel()); aHeadSize.Width() = aLBSize.Width(); m_aTableHB.SetSizePixel(aHeadSize); Point aLBPos(m_aTableLB.GetPosPixel()); m_aTableHB.SetPosPixel(aLBPos); aLBPos.Y() += aHeadSize.Height(); aLBSize.Height() -= aHeadSize.Height(); m_aTableLB.SetPosSizePixel(aLBPos, aLBSize); Size aSz(m_aTableHB.GetOutputSizePixel()); m_aTableHB.InsertItem( 1, m_sName, aSz.Width()/2, HIB_LEFT | HIB_VCENTER /*| HIB_CLICKABLE | HIB_UPARROW */); m_aTableHB.InsertItem( 2, m_sType, aSz.Width()/2, HIB_LEFT | HIB_VCENTER /*| HIB_CLICKABLE | HIB_UPARROW */); m_aTableHB.SetHelpId(HID_MM_ADDRESSLIST_HB ); m_aTableHB.Show(); static long nTabs[] = {3, 0, aSz.Width()/2, aSz.Width() }; m_aTableLB.SetTabs(&nTabs[0], MAP_PIXEL); m_aTableLB.SetHelpId(HID_MM_SELECTDBTABLEDDIALOG_LISTBOX); m_aTableLB.SetWindowBits( WB_CLIPCHILDREN ); m_aTableLB.SetSpaceBetweenEntries(3); m_aTableLB.SetSelectionMode( SINGLE_SELECTION ); m_aTableLB.SetDragDropMode( 0 ); m_aTableLB.EnableAsyncDrag(FALSE); m_aPreviewPB.SetClickHdl(LINK(this, SwSelectDBTableDialog, PreviewHdl)); Reference xTSupplier(m_xConnection, UNO_QUERY); if(xTSupplier.is()) { Reference xTbls = xTSupplier->getTables(); Sequence aTbls = xTbls->getElementNames(); const rtl::OUString* pTbls = aTbls.getConstArray(); for(long i = 0; i < aTbls.getLength(); i++) { String sEntry = pTbls[i]; sEntry += '\t'; sEntry += m_sTable; SvLBoxEntry* pEntry = m_aTableLB.InsertEntry(sEntry); pEntry->SetUserData((void*)0); } } Reference xQSupplier(m_xConnection, UNO_QUERY); if(xQSupplier.is()) { Reference xQueries = xQSupplier->getQueries(); Sequence aQueries = xQueries->getElementNames(); const rtl::OUString* pQueries = aQueries.getConstArray(); for(long i = 0; i < aQueries.getLength(); i++) { String sEntry = pQueries[i]; sEntry += '\t'; sEntry += m_sQuery; SvLBoxEntry* pEntry = m_aTableLB.InsertEntry(sEntry); pEntry->SetUserData((void*)1); } } } /*-- 08.04.2004 14:33:57--------------------------------------------------- -----------------------------------------------------------------------*/ SwSelectDBTableDialog::~SwSelectDBTableDialog() { } /*-- 08.04.2004 14:33:57--------------------------------------------------- -----------------------------------------------------------------------*/ IMPL_LINK(SwSelectDBTableDialog, PreviewHdl, PushButton*, pButton) { SvLBoxEntry* pEntry = m_aTableLB.FirstSelected(); if(pEntry) { ::rtl::OUString sTableOrQuery = m_aTableLB.GetEntryText(pEntry, 0); sal_Int32 nCommandType = 0 == pEntry->GetUserData() ? 0 : 1; ::rtl::OUString sDataSourceName; Reference xChild(m_xConnection, UNO_QUERY); if(xChild.is()) { Reference xSource(xChild->getParent(), UNO_QUERY); Reference xPrSet(xSource, UNO_QUERY); xPrSet->getPropertyValue(C2U("Name")) >>= sDataSourceName; } DBG_ASSERT(sDataSourceName.getLength(), "no data source found"); Sequence aProperties(5); PropertyValue* pProperties = aProperties.getArray(); pProperties[0].Name = C2U("DataSourceName"); pProperties[0].Value <<= sDataSourceName; pProperties[1].Name = C2U("Command"); pProperties[1].Value <<= sTableOrQuery; pProperties[2].Name = C2U("CommandType"); pProperties[2].Value <<= nCommandType; pProperties[3].Name = C2U("ShowTreeView"); sal_Bool bFalse = sal_False; pProperties[3].Value <<= bFalse; pProperties[4].Name = C2U("ShowTreeViewButton"); pProperties[4].Value <<= bFalse; SwDBTablePreviewDialog* pDlg = new SwDBTablePreviewDialog(pButton, aProperties); pDlg->Execute(); delete pDlg; } return 0; } /*-- 19.04.2004 10:03:26--------------------------------------------------- -----------------------------------------------------------------------*/ String SwSelectDBTableDialog::GetSelectedTable(bool& bIsTable) { SvLBoxEntry* pEntry = m_aTableLB.FirstSelected(); bIsTable = pEntry->GetUserData() ? false : true; return pEntry ? m_aTableLB.GetEntryText(pEntry, 0) : String(); } /*-- 13.05.2004 12:58:26--------------------------------------------------- -----------------------------------------------------------------------*/ void SwSelectDBTableDialog::SetSelectedTable(const String& rTable, bool bIsTable) { SvLBoxEntry* pEntry = m_aTableLB.First(); while(pEntry) { if((m_aTableLB.GetEntryText(pEntry, 0) == rTable) && ((pEntry->GetUserData() == 0 ) == bIsTable)) { m_aTableLB.Select(pEntry); break; } pEntry = m_aTableLB.Next( pEntry ); } }