summaryrefslogtreecommitdiff
path: root/sw/source/ui/dbui/selectdbtabledialog.cxx
diff options
context:
space:
mode:
Diffstat (limited to 'sw/source/ui/dbui/selectdbtabledialog.cxx')
-rw-r--r--sw/source/ui/dbui/selectdbtabledialog.cxx223
1 files changed, 223 insertions, 0 deletions
diff --git a/sw/source/ui/dbui/selectdbtabledialog.cxx b/sw/source/ui/dbui/selectdbtabledialog.cxx
new file mode 100644
index 000000000000..41f9a18a0325
--- /dev/null
+++ b/sw/source/ui/dbui/selectdbtabledialog.cxx
@@ -0,0 +1,223 @@
+/*************************************************************************
+ *
+ * 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
+ * <http://www.openoffice.org/license.html>
+ * 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 <swtypes.hxx>
+#include <selectdbtabledialog.hxx>
+#include <dbtablepreviewdialog.hxx>
+#include <com/sun/star/sdbcx/XTablesSupplier.hpp>
+#include <com/sun/star/sdb/XQueriesSupplier.hpp>
+#include <com/sun/star/beans/XPropertySet.hpp>
+#include <com/sun/star/beans/PropertyValue.hpp>
+#include <com/sun/star/container/XChild.hpp>
+#include <com/sun/star/sdbc/XDataSource.hpp>
+
+#include <unomid.h>
+
+#include <selectdbtabledialog.hrc>
+#include <dbui.hrc>
+#include <helpid.h>
+
+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.SetStyle( m_aTableLB.GetStyle() | 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<XTablesSupplier> xTSupplier(m_xConnection, UNO_QUERY);
+ if(xTSupplier.is())
+ {
+ Reference<XNameAccess> xTbls = xTSupplier->getTables();
+ Sequence<rtl::OUString> 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<XQueriesSupplier> xQSupplier(m_xConnection, UNO_QUERY);
+ if(xQSupplier.is())
+ {
+ Reference<XNameAccess> xQueries = xQSupplier->getQueries();
+ Sequence<rtl::OUString> 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> xChild(m_xConnection, UNO_QUERY);
+ if(xChild.is())
+ {
+ Reference<XDataSource> xSource(xChild->getParent(), UNO_QUERY);
+ Reference<XPropertySet> xPrSet(xSource, UNO_QUERY);
+ xPrSet->getPropertyValue(C2U("Name")) >>= sDataSourceName;
+ }
+ DBG_ASSERT(sDataSourceName.getLength(), "no data source found");
+ Sequence<PropertyValue> 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 );
+ }
+}