summaryrefslogtreecommitdiff
path: root/dbaccess/source/ui/misc/WTypeSelect.cxx
diff options
context:
space:
mode:
Diffstat (limited to 'dbaccess/source/ui/misc/WTypeSelect.cxx')
-rw-r--r--dbaccess/source/ui/misc/WTypeSelect.cxx508
1 files changed, 508 insertions, 0 deletions
diff --git a/dbaccess/source/ui/misc/WTypeSelect.cxx b/dbaccess/source/ui/misc/WTypeSelect.cxx
new file mode 100644
index 000000000000..f33c82abecb7
--- /dev/null
+++ b/dbaccess/source/ui/misc/WTypeSelect.cxx
@@ -0,0 +1,508 @@
+/*************************************************************************
+ *
+ * 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_dbaccess.hxx"
+#ifndef DBAUI_WIZ_TYPESELECT_HXX
+#include "WTypeSelect.hxx"
+#endif
+#ifndef DBAUI_WIZARD_PAGES_HRC
+#include "WizardPages.hrc"
+#endif
+#ifndef DBACCESS_SHARED_DBUSTRINGS_HRC
+#include "dbustrings.hrc"
+#endif
+#ifndef _TOOLS_DEBUG_HXX
+#include <tools/debug.hxx>
+#endif
+#ifndef TOOLS_DIAGNOSE_EX_H
+#include <tools/diagnose_ex.h>
+#endif
+#ifndef DBAUI_FIELDDESCRIPTIONS_HXX
+#include "FieldDescriptions.hxx"
+#endif
+#ifndef DBAUI_WIZ_COPYTABLEDIALOG_HXX
+#include "WCopyTable.hxx"
+#endif
+#ifndef _DBA_DBACCESS_HELPID_HRC_
+#include "dbaccess_helpid.hrc"
+#endif
+#ifndef _DBU_MISC_HRC_
+#include "dbu_misc.hrc"
+#endif
+#ifndef _STREAM_HXX
+#include <tools/stream.hxx>
+#endif
+#ifndef _SVPARSER_HXX
+#include <svtools/svparser.hxx>
+#endif
+#ifndef DBAUI_TOOLS_HXX
+#include "UITools.hxx"
+#endif
+#ifndef _DBAUI_SQLMESSAGE_HXX_
+#include "sqlmessage.hxx"
+#endif
+#ifndef DBAUI_FIELDCONTROLS_HXX
+#include "FieldControls.hxx"
+#endif
+
+using namespace ::dbaui;
+using namespace ::com::sun::star::uno;
+using namespace ::com::sun::star::beans;
+using namespace ::com::sun::star::container;
+using namespace ::com::sun::star::util;
+using namespace ::com::sun::star::sdbc;
+// using namespace ::com::sun::star::sdbcx;
+
+//========================================================================
+// OWizTypeSelectControl
+DBG_NAME(OWizTypeSelectControl)
+//========================================================================
+OWizTypeSelectControl::OWizTypeSelectControl(Window* pParent, const ResId& rResId,OTableDesignHelpBar* pHelpBar)
+ : OFieldDescControl(pParent,rResId,pHelpBar)
+{
+ DBG_CTOR(OWizTypeSelectControl,NULL);
+
+}
+// -----------------------------------------------------------------------------
+OWizTypeSelectControl::~OWizTypeSelectControl()
+{
+
+ DBG_DTOR(OWizTypeSelectControl,NULL);
+}
+// -----------------------------------------------------------------------
+void OWizTypeSelectControl::ActivateAggregate( EControlType eType )
+{
+ switch(eType )
+ {
+ case tpFormat:
+ case tpDefault:
+ case tpAutoIncrement:
+ case tpAutoIncrementValue:
+ break;
+ default:
+ OFieldDescControl::ActivateAggregate( eType );
+ }
+}
+// -----------------------------------------------------------------------
+void OWizTypeSelectControl::DeactivateAggregate( EControlType eType )
+{
+ switch(eType )
+ {
+ case tpFormat:
+ case tpDefault:
+ case tpAutoIncrement:
+ case tpAutoIncrementValue:
+ break;
+ default:
+ OFieldDescControl::DeactivateAggregate( eType );
+ }
+}
+// -----------------------------------------------------------------------
+void OWizTypeSelectControl::CellModified(long nRow, sal_uInt16 nColId )
+{
+ DBG_ASSERT(nRow == -1,"nRow muss -1 sein!");
+ (void)nRow;
+
+ MultiListBox &aListBox = ((OWizTypeSelect*)GetParent())->m_lbColumnNames;
+
+ OFieldDescription* pCurFieldDescr = getCurrentFieldDescData();
+
+ sal_uInt16 nPos = aListBox.GetEntryPos( String( pCurFieldDescr->GetName() ) );
+ pCurFieldDescr = static_cast< OFieldDescription* >( aListBox.GetEntryData( nPos ) );
+ OSL_ENSURE( pCurFieldDescr, "OWizTypeSelectControl::CellModified: Columnname/type not found in the listbox!" );
+ if ( !pCurFieldDescr )
+ return;
+ setCurrentFieldDescData( pCurFieldDescr );
+
+ ::rtl::OUString sName = pCurFieldDescr->GetName();
+ ::rtl::OUString sNewName;
+ const OPropColumnEditCtrl* pColumnName = getColumnCtrl();
+ if ( pColumnName )
+ sNewName = pColumnName->GetText();
+
+ switch(nColId)
+ {
+ case FIELD_PRPOERTY_COLUMNNAME:
+ {
+ OCopyTableWizard* pWiz = static_cast<OCopyTableWizard*>(GetParent()->GetParent());
+ // first we have to check if this name already exists
+ sal_Bool bDoubleName = sal_False;
+ sal_Bool bCase = sal_True;
+ if ( getMetaData().is() && !getMetaData()->supportsMixedCaseQuotedIdentifiers() )
+ {
+ bCase = sal_False;
+ USHORT nCount = aListBox.GetEntryCount();
+ for (USHORT i=0 ; !bDoubleName && i < nCount ; ++i)
+ {
+ ::rtl::OUString sEntry(aListBox.GetEntry(i));
+ bDoubleName = sNewName.equalsIgnoreAsciiCase(sEntry);
+ }
+ if ( !bDoubleName && pWiz->shouldCreatePrimaryKey() )
+ bDoubleName = sNewName.equalsIgnoreAsciiCase(pWiz->getPrimaryKeyName());
+
+ }
+ else
+ bDoubleName = ((aListBox.GetEntryPos(String(sNewName)) != LISTBOX_ENTRY_NOTFOUND)
+ || ( pWiz->shouldCreatePrimaryKey()
+ && pWiz->getPrimaryKeyName() == sNewName) );
+
+ if ( bDoubleName )
+ {
+ String strMessage = String(ModuleRes(STR_TABLEDESIGN_DUPLICATE_NAME));
+ strMessage.SearchAndReplaceAscii("$column$", sNewName);
+ pWiz->showError(strMessage);
+ pCurFieldDescr->SetName(sName);
+ DisplayData(pCurFieldDescr);
+ static_cast<OWizTypeSelect*>(GetParent())->setDuplicateName(sal_True);
+ return;
+ }
+
+ ::rtl::OUString sOldName = pCurFieldDescr->GetName();
+ pCurFieldDescr->SetName(sNewName);
+ static_cast<OWizTypeSelect*>(GetParent())->setDuplicateName(sal_False);
+
+ // now we change the name
+ OCopyTableWizard::TNameMapping::iterator aIter = pWiz->m_mNameMapping.begin();
+ OCopyTableWizard::TNameMapping::iterator aEnd = pWiz->m_mNameMapping.end();
+
+ ::comphelper::UStringMixEqual aCase(bCase);
+ for(;aIter != aEnd;++aIter)
+ {
+ if ( aCase(aIter->second,sName) )
+ {
+ aIter->second = sNewName;
+ break;
+ }
+ }
+
+ aListBox.RemoveEntry(nPos);
+ aListBox.InsertEntry(pCurFieldDescr->GetName(),nPos);
+ aListBox.SetEntryData(nPos,pCurFieldDescr);
+
+ pWiz->replaceColumn(nPos,pCurFieldDescr,sOldName);
+ }
+ break;
+ }
+ saveCurrentFieldDescData();
+}
+// -----------------------------------------------------------------------------
+::com::sun::star::lang::Locale OWizTypeSelectControl::GetLocale() const
+{
+ return static_cast<OWizTypeSelect*>(GetParent())->m_pParent->GetLocale();
+}
+// -----------------------------------------------------------------------------
+Reference< XNumberFormatter > OWizTypeSelectControl::GetFormatter() const
+{
+ return static_cast<OWizTypeSelect*>(GetParent())->m_pParent->GetFormatter();
+}
+// -----------------------------------------------------------------------------
+TOTypeInfoSP OWizTypeSelectControl::getTypeInfo(sal_Int32 _nPos)
+{
+ return static_cast<OWizTypeSelect*>(GetParent())->m_pParent->getDestTypeInfo(_nPos);
+}
+// -----------------------------------------------------------------------------
+const OTypeInfoMap* OWizTypeSelectControl::getTypeInfo() const
+{
+ return static_cast<OWizTypeSelect*>(GetParent())->m_pParent->getDestTypeInfo();
+}
+// -----------------------------------------------------------------------------
+::com::sun::star::uno::Reference< ::com::sun::star::sdbc::XDatabaseMetaData> OWizTypeSelectControl::getMetaData()
+{
+ return ((OWizTypeSelect*)GetParent())->m_pParent->m_xDestConnection->getMetaData();
+}
+// -----------------------------------------------------------------------------
+::com::sun::star::uno::Reference< ::com::sun::star::sdbc::XConnection> OWizTypeSelectControl::getConnection()
+{
+ return ((OWizTypeSelect*)GetParent())->m_pParent->m_xDestConnection;
+}
+// -----------------------------------------------------------------------------
+sal_Bool OWizTypeSelectControl::isAutoIncrementValueEnabled() const
+{
+ return ((OWizTypeSelect*)GetParent())->m_bAutoIncrementEnabled;
+}
+// -----------------------------------------------------------------------------
+::rtl::OUString OWizTypeSelectControl::getAutoIncrementValue() const
+{
+ return ((OWizTypeSelect*)GetParent())->m_sAutoIncrementValue;
+}
+// -----------------------------------------------------------------------------
+
+//========================================================================
+DBG_NAME(OWizTypeSelect);
+#define IMG_PRIMARY_KEY 1
+//========================================================================
+OWizTypeSelect::OWizTypeSelect( Window* pParent, SvStream* _pStream )
+ :OWizardPage( pParent, ModuleRes( TAB_WIZ_TYPE_SELECT ))
+ ,m_lbColumnNames( this, ModuleRes( LB_NEW_COLUMN_NAMES ) )
+ ,m_flColumns( this, ModuleRes( FL_COLUMN_NAME ) )
+ ,m_aTypeControl( this, ModuleRes( CONTROL_CONTAINER ))
+ ,m_flAutoType( this, ModuleRes( FL_AUTO_TYPE ) )
+ ,m_ftAuto( this, ModuleRes( FT_AUTO ) )
+ ,m_etAuto( this, ModuleRes( ET_AUTO ) )
+ ,m_pbAuto( this, ModuleRes( PB_AUTO ) )
+ ,m_pParserStream( _pStream )
+ ,m_nDisplayRow(0)
+ ,m_bAutoIncrementEnabled(sal_False)
+ ,m_bDuplicateName(sal_False)
+{
+ DBG_CTOR(OWizTypeSelect,NULL);
+ m_lbColumnNames.SetSelectHdl(LINK(this,OWizTypeSelect,ColumnSelectHdl));
+
+ ModuleRes aModuleRes(isHiContrast(&m_lbColumnNames) ? IMG_JOINS_H : IMG_JOINS);
+ ImageList aImageList(aModuleRes);
+ m_imgPKey = aImageList.GetImage(IMG_PRIMARY_KEY);
+
+ m_aTypeControl.Show();
+ m_aTypeControl.Init();
+ m_etAuto.SetText(String::CreateFromAscii("10"));
+ m_etAuto.SetDecimalDigits(0);
+ m_pbAuto.SetClickHdl(LINK(this,OWizTypeSelect,ButtonClickHdl));
+ m_lbColumnNames.EnableMultiSelection(sal_True);
+
+ try
+ {
+ m_lbColumnNames.SetPKey( m_pParent->supportsPrimaryKey() );
+ ::dbaui::fillAutoIncrementValue( m_pParent->m_xDestConnection, m_bAutoIncrementEnabled, m_sAutoIncrementValue );
+ }
+ catch(const Exception&)
+ {
+ DBG_UNHANDLED_EXCEPTION();
+ }
+
+ FreeResource();
+}
+// -----------------------------------------------------------------------
+OWizTypeSelect::~OWizTypeSelect()
+{
+ DBG_DTOR(OWizTypeSelect,NULL);
+}
+// -----------------------------------------------------------------------------
+String OWizTypeSelect::GetTitle() const
+{
+ DBG_CHKTHIS(OWizTypeSelect,NULL);
+ return String(ModuleRes(STR_WIZ_TYPE_SELECT_TITEL));
+}
+// -----------------------------------------------------------------------
+void OWizTypeSelect::Resize()
+{
+ DBG_CHKTHIS(OWizTypeSelect,NULL);
+}
+// -----------------------------------------------------------------------
+IMPL_LINK( OWizTypeSelect, ColumnSelectHdl, MultiListBox *, /*pListBox*/ )
+{
+ String aColumnName( m_lbColumnNames.GetSelectEntry() );
+
+ OFieldDescription* pField = static_cast<OFieldDescription*>(m_lbColumnNames.GetEntryData(m_lbColumnNames.GetEntryPos(aColumnName)));
+ if(pField)
+ m_aTypeControl.DisplayData(pField);
+
+ m_aTypeControl.Enable(m_lbColumnNames.GetSelectEntryCount() == 1 );
+ return 0;
+}
+// -----------------------------------------------------------------------
+void OWizTypeSelect::Reset()
+{
+ // urspr"unglichen zustand wiederherstellen
+ DBG_CHKTHIS(OWizTypeSelect,NULL);
+
+ while(m_lbColumnNames.GetEntryCount())
+ m_lbColumnNames.RemoveEntry(0);
+ m_lbColumnNames.Clear();
+ sal_Int32 nBreakPos;
+ m_pParent->CheckColumns(nBreakPos);
+
+ const ODatabaseExport::TColumnVector* pDestColumns = m_pParent->getDestVector();
+ ODatabaseExport::TColumnVector::const_iterator aIter = pDestColumns->begin();
+ ODatabaseExport::TColumnVector::const_iterator aEnd = pDestColumns->end();
+ for(;aIter != aEnd;++aIter)
+ {
+ sal_uInt16 nPos;
+ if((*aIter)->second->IsPrimaryKey())
+ nPos = m_lbColumnNames.InsertEntry((*aIter)->first, m_imgPKey );
+ else
+ nPos = m_lbColumnNames.InsertEntry((*aIter)->first);
+ m_lbColumnNames.SetEntryData(nPos,(*aIter)->second);
+ }
+ m_bFirstTime = sal_False;
+}
+// -----------------------------------------------------------------------
+void OWizTypeSelect::ActivatePage( )
+{
+ DBG_CHKTHIS(OWizTypeSelect,NULL);
+ sal_Bool bOldFirstTime = m_bFirstTime;
+ Reset();
+ m_bFirstTime = bOldFirstTime;
+
+ m_lbColumnNames.SelectEntryPos(static_cast<USHORT>(m_nDisplayRow));
+ m_nDisplayRow = 0;
+ m_lbColumnNames.GetSelectHdl().Call(&m_lbColumnNames);
+}
+// -----------------------------------------------------------------------
+sal_Bool OWizTypeSelect::LeavePage()
+{
+ DBG_CHKTHIS(OWizTypeSelect,NULL);
+ String aColumnName( m_lbColumnNames.GetSelectEntry() );
+
+ sal_Bool bDuplicateName = sal_False;
+ OFieldDescription* pField = static_cast<OFieldDescription*>(m_lbColumnNames.GetEntryData(m_lbColumnNames.GetEntryPos(aColumnName)));
+ if ( pField )
+ {
+ m_aTypeControl.SaveData(pField);
+ bDuplicateName = m_bDuplicateName;
+ }
+ return !bDuplicateName;
+}
+//------------------------------------------------------------------------------
+void OWizTypeSelect::EnableAuto(sal_Bool bEnable)
+{
+ DBG_CHKTHIS(OWizTypeSelect,NULL);
+ m_ftAuto.Show(bEnable);
+ m_etAuto.Show(bEnable);
+ m_pbAuto.Show(bEnable);
+ m_flAutoType.Show(bEnable);
+}
+//------------------------------------------------------------------------------
+IMPL_LINK( OWizTypeSelect, ButtonClickHdl, Button *, /*pButton*/ )
+{
+ DBG_CHKTHIS(OWizTypeSelect,NULL);
+ sal_Int32 nBreakPos;
+ m_pParent->CheckColumns(nBreakPos);
+ fillColumnList(m_etAuto.GetText().ToInt32());
+
+ ActivatePage();
+
+ return 0;
+}
+//------------------------------------------------------------------------
+sal_Bool OWizTypeSelectList::IsPrimaryKeyAllowed() const
+{
+ DBG_CHKTHIS(OWizTypeSelect,NULL);
+ sal_uInt16 nCount = GetSelectEntryCount();
+ sal_uInt16 j;
+
+ for( j = 0; m_bPKey && j < nCount; ++j )
+ {
+ OFieldDescription* pField = static_cast<OFieldDescription*>(GetEntryData(GetSelectEntryPos(j)));
+ if(!pField || pField->getTypeInfo()->nSearchType == ColumnSearch::NONE)
+ break;
+ }
+ return j == nCount;
+}
+// -----------------------------------------------------------------------------
+void OWizTypeSelectList::setPrimaryKey(OFieldDescription* _pFieldDescr,sal_uInt16 _nPos,sal_Bool _bSet)
+{
+ String sColumnName = GetEntry(_nPos);
+ RemoveEntry(_nPos);
+ _pFieldDescr->SetPrimaryKey(_bSet);
+ if( _bSet )
+ InsertEntry(sColumnName,((OWizTypeSelect*)GetParent())->m_imgPKey,_nPos);
+ else if( _pFieldDescr->getTypeInfo()->bNullable )
+ {
+ _pFieldDescr->SetControlDefault(Any());
+ InsertEntry(sColumnName,_nPos);
+ }
+ SetEntryData(_nPos,_pFieldDescr);
+}
+//------------------------------------------------------------------------
+long OWizTypeSelectList::PreNotify( NotifyEvent& rEvt )
+{
+ long nDone = 0;
+ switch( rEvt.GetType() )
+ {
+ case EVENT_MOUSEBUTTONDOWN:
+ {
+ const MouseEvent* pMEvt = rEvt.GetMouseEvent();
+ if(pMEvt->IsRight() && !pMEvt->GetModifier())
+ nDone = 1;
+ }
+ break;
+ case EVENT_COMMAND:
+ {
+ if(!IsPrimaryKeyAllowed())
+ break;
+
+ const CommandEvent* pComEvt = rEvt.GetCommandEvent();
+ if(pComEvt->GetCommand() != COMMAND_CONTEXTMENU)
+ break;
+ // die Stelle, an der geklickt wurde
+ Point ptWhere(0,0);
+ if (pComEvt->IsMouseEvent())
+ ptWhere = pComEvt->GetMousePosPixel();
+
+ PopupMenu aContextMenu(ModuleRes(RID_SBA_RTF_PKEYPOPUP));
+ switch( aContextMenu.Execute( this, ptWhere ) )
+ {
+ case SID_TABLEDESIGN_TABED_PRIMARYKEY:
+ {
+ String sColumnName;
+ sal_uInt16 nCount = GetEntryCount();
+ for(sal_uInt16 j = 0 ; j < nCount ; ++j)
+ {
+ OFieldDescription* pFieldDescr = static_cast<OFieldDescription*>(GetEntryData(j));
+ if( pFieldDescr )
+ {
+ if(pFieldDescr->IsPrimaryKey() && !IsEntryPosSelected(j))
+ setPrimaryKey(pFieldDescr,j);
+ else if(IsEntryPosSelected(j))
+ {
+ setPrimaryKey(pFieldDescr,j,!pFieldDescr->IsPrimaryKey());
+ SelectEntryPos(j);
+ }
+ }
+ }
+ GetSelectHdl().Call(this);
+ }
+ break;
+ }
+ nDone = 1;
+ }
+ break;
+ }
+ return nDone ? nDone : MultiListBox::PreNotify(rEvt);
+}
+// -----------------------------------------------------------------------------
+void OWizTypeSelect::fillColumnList(sal_uInt32 nRows)
+{
+ DBG_CHKTHIS(OWizTypeSelect,NULL);
+ if(m_pParserStream)
+ {
+ sal_uInt32 nTell = m_pParserStream->Tell(); // verändert vielleicht die Position des Streams
+
+ SvParser *pReader = createReader(nRows);
+ if(pReader)
+ {
+ pReader->AddRef();
+ pReader->CallParser();
+ pReader->ReleaseRef();
+ }
+ m_pParserStream->Seek(nTell);
+ }
+}
+// -----------------------------------------------------------------------------
+
+