xref: /AOO41X/main/sw/source/ui/dbui/selectdbtabledialog.cxx (revision cdf0e10c4e3984b49a9502b011690b615761d4a3)
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