1*2a97ec55SAndrew Rist /************************************************************** 2cdf0e10cSrcweir * 3*2a97ec55SAndrew Rist * Licensed to the Apache Software Foundation (ASF) under one 4*2a97ec55SAndrew Rist * or more contributor license agreements. See the NOTICE file 5*2a97ec55SAndrew Rist * distributed with this work for additional information 6*2a97ec55SAndrew Rist * regarding copyright ownership. The ASF licenses this file 7*2a97ec55SAndrew Rist * to you under the Apache License, Version 2.0 (the 8*2a97ec55SAndrew Rist * "License"); you may not use this file except in compliance 9*2a97ec55SAndrew Rist * with the License. You may obtain a copy of the License at 10*2a97ec55SAndrew Rist * 11*2a97ec55SAndrew Rist * http://www.apache.org/licenses/LICENSE-2.0 12*2a97ec55SAndrew Rist * 13*2a97ec55SAndrew Rist * Unless required by applicable law or agreed to in writing, 14*2a97ec55SAndrew Rist * software distributed under the License is distributed on an 15*2a97ec55SAndrew Rist * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY 16*2a97ec55SAndrew Rist * KIND, either express or implied. See the License for the 17*2a97ec55SAndrew Rist * specific language governing permissions and limitations 18*2a97ec55SAndrew Rist * under the License. 19*2a97ec55SAndrew Rist * 20*2a97ec55SAndrew Rist *************************************************************/ 21*2a97ec55SAndrew Rist 22*2a97ec55SAndrew Rist 23cdf0e10cSrcweir 24cdf0e10cSrcweir // MARKER(update_precomp.py): autogen include statement, do not remove 25cdf0e10cSrcweir #include "precompiled_extensions.hxx" 26cdf0e10cSrcweir #include "listcombowizard.hxx" 27cdf0e10cSrcweir #include "commonpagesdbp.hxx" 28cdf0e10cSrcweir #include <com/sun/star/sdbc/XConnection.hpp> 29cdf0e10cSrcweir #include <com/sun/star/sdbcx/XTablesSupplier.hpp> 30cdf0e10cSrcweir #include <com/sun/star/container/XNameAccess.hpp> 31cdf0e10cSrcweir #include <com/sun/star/form/ListSourceType.hpp> 32cdf0e10cSrcweir #include <com/sun/star/sdbcx/XColumnsSupplier.hpp> 33cdf0e10cSrcweir #include <tools/debug.hxx> 34cdf0e10cSrcweir #include <vcl/msgbox.hxx> 35cdf0e10cSrcweir #include <connectivity/dbtools.hxx> 36cdf0e10cSrcweir #include "dbpilots.hrc" 37cdf0e10cSrcweir #include <comphelper/extract.hxx> 38cdf0e10cSrcweir 39cdf0e10cSrcweir //......................................................................... 40cdf0e10cSrcweir namespace dbp 41cdf0e10cSrcweir { 42cdf0e10cSrcweir //......................................................................... 43cdf0e10cSrcweir 44cdf0e10cSrcweir using namespace ::com::sun::star::uno; 45cdf0e10cSrcweir using namespace ::com::sun::star::lang; 46cdf0e10cSrcweir using namespace ::com::sun::star::beans; 47cdf0e10cSrcweir using namespace ::com::sun::star::sdbc; 48cdf0e10cSrcweir using namespace ::com::sun::star::sdbcx; 49cdf0e10cSrcweir using namespace ::com::sun::star::container; 50cdf0e10cSrcweir using namespace ::com::sun::star::form; 51cdf0e10cSrcweir using namespace ::svt; 52cdf0e10cSrcweir using namespace ::dbtools; 53cdf0e10cSrcweir 54cdf0e10cSrcweir //===================================================================== 55cdf0e10cSrcweir //= OListComboWizard 56cdf0e10cSrcweir //===================================================================== 57cdf0e10cSrcweir //--------------------------------------------------------------------- OListComboWizard(Window * _pParent,const Reference<XPropertySet> & _rxObjectModel,const Reference<XMultiServiceFactory> & _rxORB)58cdf0e10cSrcweir OListComboWizard::OListComboWizard( Window* _pParent, 59cdf0e10cSrcweir const Reference< XPropertySet >& _rxObjectModel, const Reference< XMultiServiceFactory >& _rxORB ) 60cdf0e10cSrcweir :OControlWizard(_pParent, ModuleRes(RID_DLG_LISTCOMBOWIZARD), _rxObjectModel, _rxORB) 61cdf0e10cSrcweir ,m_bListBox(sal_False) 62cdf0e10cSrcweir ,m_bHadDataSelection(sal_True) 63cdf0e10cSrcweir { 64cdf0e10cSrcweir initControlSettings(&m_aSettings); 65cdf0e10cSrcweir 66cdf0e10cSrcweir m_pPrevPage->SetHelpId(HID_LISTWIZARD_PREVIOUS); 67cdf0e10cSrcweir m_pNextPage->SetHelpId(HID_LISTWIZARD_NEXT); 68cdf0e10cSrcweir m_pCancel->SetHelpId(HID_LISTWIZARD_CANCEL); 69cdf0e10cSrcweir m_pFinish->SetHelpId(HID_LISTWIZARD_FINISH); 70cdf0e10cSrcweir 71cdf0e10cSrcweir // if we do not need the data source selection page ... 72cdf0e10cSrcweir if (!needDatasourceSelection()) 73cdf0e10cSrcweir { // ... skip it! 74cdf0e10cSrcweir skip(1); 75cdf0e10cSrcweir m_bHadDataSelection = sal_False; 76cdf0e10cSrcweir } 77cdf0e10cSrcweir } 78cdf0e10cSrcweir 79cdf0e10cSrcweir //--------------------------------------------------------------------- approveControl(sal_Int16 _nClassId)80cdf0e10cSrcweir sal_Bool OListComboWizard::approveControl(sal_Int16 _nClassId) 81cdf0e10cSrcweir { 82cdf0e10cSrcweir switch (_nClassId) 83cdf0e10cSrcweir { 84cdf0e10cSrcweir case FormComponentType::LISTBOX: 85cdf0e10cSrcweir m_bListBox = sal_True; 86cdf0e10cSrcweir setTitleBase(String(ModuleRes(RID_STR_LISTWIZARD_TITLE))); 87cdf0e10cSrcweir return sal_True; 88cdf0e10cSrcweir case FormComponentType::COMBOBOX: 89cdf0e10cSrcweir m_bListBox = sal_False; 90cdf0e10cSrcweir setTitleBase(String(ModuleRes(RID_STR_COMBOWIZARD_TITLE))); 91cdf0e10cSrcweir return sal_True; 92cdf0e10cSrcweir } 93cdf0e10cSrcweir return sal_False; 94cdf0e10cSrcweir } 95cdf0e10cSrcweir 96cdf0e10cSrcweir //--------------------------------------------------------------------- createPage(WizardState _nState)97cdf0e10cSrcweir OWizardPage* OListComboWizard::createPage(WizardState _nState) 98cdf0e10cSrcweir { 99cdf0e10cSrcweir switch (_nState) 100cdf0e10cSrcweir { 101cdf0e10cSrcweir case LCW_STATE_DATASOURCE_SELECTION: 102cdf0e10cSrcweir return new OTableSelectionPage(this); 103cdf0e10cSrcweir case LCW_STATE_TABLESELECTION: 104cdf0e10cSrcweir return new OContentTableSelection(this); 105cdf0e10cSrcweir case LCW_STATE_FIELDSELECTION: 106cdf0e10cSrcweir return new OContentFieldSelection(this); 107cdf0e10cSrcweir case LCW_STATE_FIELDLINK: 108cdf0e10cSrcweir return new OLinkFieldsPage(this); 109cdf0e10cSrcweir case LCW_STATE_COMBODBFIELD: 110cdf0e10cSrcweir return new OComboDBFieldPage(this); 111cdf0e10cSrcweir } 112cdf0e10cSrcweir 113cdf0e10cSrcweir return NULL; 114cdf0e10cSrcweir } 115cdf0e10cSrcweir 116cdf0e10cSrcweir //--------------------------------------------------------------------- determineNextState(WizardState _nCurrentState) const117cdf0e10cSrcweir WizardTypes::WizardState OListComboWizard::determineNextState( WizardState _nCurrentState ) const 118cdf0e10cSrcweir { 119cdf0e10cSrcweir switch (_nCurrentState) 120cdf0e10cSrcweir { 121cdf0e10cSrcweir case LCW_STATE_DATASOURCE_SELECTION: 122cdf0e10cSrcweir return LCW_STATE_TABLESELECTION; 123cdf0e10cSrcweir case LCW_STATE_TABLESELECTION: 124cdf0e10cSrcweir return LCW_STATE_FIELDSELECTION; 125cdf0e10cSrcweir case LCW_STATE_FIELDSELECTION: 126cdf0e10cSrcweir return getFinalState(); 127cdf0e10cSrcweir } 128cdf0e10cSrcweir 129cdf0e10cSrcweir return WZS_INVALID_STATE; 130cdf0e10cSrcweir } 131cdf0e10cSrcweir 132cdf0e10cSrcweir //--------------------------------------------------------------------- enterState(WizardState _nState)133cdf0e10cSrcweir void OListComboWizard::enterState(WizardState _nState) 134cdf0e10cSrcweir { 135cdf0e10cSrcweir OControlWizard::enterState(_nState); 136cdf0e10cSrcweir 137cdf0e10cSrcweir enableButtons(WZB_PREVIOUS, m_bHadDataSelection ? (LCW_STATE_DATASOURCE_SELECTION < _nState) : LCW_STATE_TABLESELECTION < _nState); 138cdf0e10cSrcweir enableButtons(WZB_NEXT, getFinalState() != _nState); 139cdf0e10cSrcweir if (_nState < getFinalState()) 140cdf0e10cSrcweir enableButtons(WZB_FINISH, sal_False); 141cdf0e10cSrcweir 142cdf0e10cSrcweir if (getFinalState() == _nState) 143cdf0e10cSrcweir defaultButton(WZB_FINISH); 144cdf0e10cSrcweir } 145cdf0e10cSrcweir 146cdf0e10cSrcweir //--------------------------------------------------------------------- leaveState(WizardState _nState)147cdf0e10cSrcweir sal_Bool OListComboWizard::leaveState(WizardState _nState) 148cdf0e10cSrcweir { 149cdf0e10cSrcweir if (!OControlWizard::leaveState(_nState)) 150cdf0e10cSrcweir return sal_False; 151cdf0e10cSrcweir 152cdf0e10cSrcweir if (getFinalState() == _nState) 153cdf0e10cSrcweir defaultButton(WZB_NEXT); 154cdf0e10cSrcweir 155cdf0e10cSrcweir return sal_True; 156cdf0e10cSrcweir } 157cdf0e10cSrcweir 158cdf0e10cSrcweir //--------------------------------------------------------------------- implApplySettings()159cdf0e10cSrcweir void OListComboWizard::implApplySettings() 160cdf0e10cSrcweir { 161cdf0e10cSrcweir try 162cdf0e10cSrcweir { 163cdf0e10cSrcweir // for quoting identifiers, we need the connection meta data 164cdf0e10cSrcweir Reference< XConnection > xConn = getFormConnection(); 165cdf0e10cSrcweir DBG_ASSERT(xConn.is(), "OListComboWizard::implApplySettings: no connection, unable to quote!"); 166cdf0e10cSrcweir Reference< XDatabaseMetaData > xMetaData; 167cdf0e10cSrcweir if (xConn.is()) 168cdf0e10cSrcweir xMetaData = xConn->getMetaData(); 169cdf0e10cSrcweir 170cdf0e10cSrcweir // do some quotings 171cdf0e10cSrcweir if (xMetaData.is()) 172cdf0e10cSrcweir { 173cdf0e10cSrcweir ::rtl::OUString sQuoteString = xMetaData->getIdentifierQuoteString(); 174cdf0e10cSrcweir if (isListBox()) // only when we have a listbox this should be not empty 175cdf0e10cSrcweir getSettings().sLinkedListField = quoteName(sQuoteString, getSettings().sLinkedListField); 176cdf0e10cSrcweir 177cdf0e10cSrcweir ::rtl::OUString sCatalog, sSchema, sName; 178cdf0e10cSrcweir ::dbtools::qualifiedNameComponents( xMetaData, getSettings().sListContentTable, sCatalog, sSchema, sName, ::dbtools::eInDataManipulation ); 179cdf0e10cSrcweir getSettings().sListContentTable = ::dbtools::composeTableNameForSelect( xConn, sCatalog, sSchema, sName ); 180cdf0e10cSrcweir 181cdf0e10cSrcweir getSettings().sListContentField = quoteName(sQuoteString, getSettings().sListContentField); 182cdf0e10cSrcweir } 183cdf0e10cSrcweir 184cdf0e10cSrcweir // ListSourceType: SQL 185cdf0e10cSrcweir getContext().xObjectModel->setPropertyValue(::rtl::OUString::createFromAscii("ListSourceType"), makeAny((sal_Int32)ListSourceType_SQL)); 186cdf0e10cSrcweir 187cdf0e10cSrcweir if (isListBox()) 188cdf0e10cSrcweir { 189cdf0e10cSrcweir // BoundColumn: 1 190cdf0e10cSrcweir getContext().xObjectModel->setPropertyValue(::rtl::OUString::createFromAscii("BoundColumn"), makeAny((sal_Int16)1)); 191cdf0e10cSrcweir 192cdf0e10cSrcweir // build the statement to set as list source 193cdf0e10cSrcweir String sStatement; 194cdf0e10cSrcweir sStatement.AppendAscii("SELECT "); 195cdf0e10cSrcweir sStatement += getSettings().sListContentField; 196cdf0e10cSrcweir sStatement.AppendAscii(", "); 197cdf0e10cSrcweir sStatement += getSettings().sLinkedListField; 198cdf0e10cSrcweir sStatement.AppendAscii(" FROM "); 199cdf0e10cSrcweir sStatement += getSettings().sListContentTable; 200cdf0e10cSrcweir Sequence< ::rtl::OUString > aListSource(1); 201cdf0e10cSrcweir aListSource[0] = sStatement; 202cdf0e10cSrcweir getContext().xObjectModel->setPropertyValue(::rtl::OUString::createFromAscii("ListSource"), makeAny(aListSource)); 203cdf0e10cSrcweir } 204cdf0e10cSrcweir else 205cdf0e10cSrcweir { 206cdf0e10cSrcweir // build the statement to set as list source 207cdf0e10cSrcweir String sStatement; 208cdf0e10cSrcweir sStatement.AppendAscii("SELECT DISTINCT "); 209cdf0e10cSrcweir sStatement += getSettings().sListContentField; 210cdf0e10cSrcweir sStatement.AppendAscii(" FROM "); 211cdf0e10cSrcweir sStatement += getSettings().sListContentTable; 212cdf0e10cSrcweir getContext().xObjectModel->setPropertyValue(::rtl::OUString::createFromAscii("ListSource"), makeAny(::rtl::OUString(sStatement))); 213cdf0e10cSrcweir } 214cdf0e10cSrcweir 215cdf0e10cSrcweir // the bound field 216cdf0e10cSrcweir getContext().xObjectModel->setPropertyValue(::rtl::OUString::createFromAscii("DataField"), makeAny(::rtl::OUString(getSettings().sLinkedFormField))); 217cdf0e10cSrcweir } 218cdf0e10cSrcweir catch(Exception&) 219cdf0e10cSrcweir { 220cdf0e10cSrcweir DBG_ERROR("OListComboWizard::implApplySettings: could not set the property values for the listbox!"); 221cdf0e10cSrcweir } 222cdf0e10cSrcweir } 223cdf0e10cSrcweir 224cdf0e10cSrcweir //--------------------------------------------------------------------- onFinish()225cdf0e10cSrcweir sal_Bool OListComboWizard::onFinish() 226cdf0e10cSrcweir { 227cdf0e10cSrcweir if ( !OControlWizard::onFinish() ) 228cdf0e10cSrcweir return sal_False; 229cdf0e10cSrcweir 230cdf0e10cSrcweir implApplySettings(); 231cdf0e10cSrcweir return sal_True; 232cdf0e10cSrcweir } 233cdf0e10cSrcweir 234cdf0e10cSrcweir //===================================================================== 235cdf0e10cSrcweir //= OLCPage 236cdf0e10cSrcweir //===================================================================== 237cdf0e10cSrcweir //--------------------------------------------------------------------- getTables(sal_Bool _bNeedIt)238cdf0e10cSrcweir Reference< XNameAccess > OLCPage::getTables(sal_Bool _bNeedIt) 239cdf0e10cSrcweir { 240cdf0e10cSrcweir Reference< XConnection > xConn = getFormConnection(); 241cdf0e10cSrcweir DBG_ASSERT(!_bNeedIt || xConn.is(), "OLCPage::getTables: should have an active connection when reaching this page!"); 242cdf0e10cSrcweir (void)_bNeedIt; 243cdf0e10cSrcweir 244cdf0e10cSrcweir Reference< XTablesSupplier > xSuppTables(xConn, UNO_QUERY); 245cdf0e10cSrcweir Reference< XNameAccess > xTables; 246cdf0e10cSrcweir if (xSuppTables.is()) 247cdf0e10cSrcweir xTables = xSuppTables->getTables(); 248cdf0e10cSrcweir 249cdf0e10cSrcweir DBG_ASSERT(!_bNeedIt || xTables.is() || !xConn.is(), "OLCPage::getTables: got no tables from the connection!"); 250cdf0e10cSrcweir 251cdf0e10cSrcweir return xTables; 252cdf0e10cSrcweir } 253cdf0e10cSrcweir 254cdf0e10cSrcweir //--------------------------------------------------------------------- getTableFields(sal_Bool _bNeedIt)255cdf0e10cSrcweir Sequence< ::rtl::OUString > OLCPage::getTableFields(sal_Bool _bNeedIt) 256cdf0e10cSrcweir { 257cdf0e10cSrcweir Reference< XNameAccess > xTables = getTables(_bNeedIt); 258cdf0e10cSrcweir Sequence< ::rtl::OUString > aColumnNames; 259cdf0e10cSrcweir if (xTables.is()) 260cdf0e10cSrcweir { 261cdf0e10cSrcweir try 262cdf0e10cSrcweir { 263cdf0e10cSrcweir // the list table as XColumnsSupplier 264cdf0e10cSrcweir Reference< XColumnsSupplier > xSuppCols; 265cdf0e10cSrcweir xTables->getByName(getSettings().sListContentTable) >>= xSuppCols; 266cdf0e10cSrcweir DBG_ASSERT(!_bNeedIt || xSuppCols.is(), "OLCPage::getTableFields: no columns supplier!"); 267cdf0e10cSrcweir 268cdf0e10cSrcweir // the columns 269cdf0e10cSrcweir Reference< XNameAccess > xColumns; 270cdf0e10cSrcweir if (xSuppCols.is()) 271cdf0e10cSrcweir xColumns = xSuppCols->getColumns(); 272cdf0e10cSrcweir 273cdf0e10cSrcweir // the column names 274cdf0e10cSrcweir if (xColumns.is()) 275cdf0e10cSrcweir aColumnNames = xColumns->getElementNames(); 276cdf0e10cSrcweir } 277cdf0e10cSrcweir catch(Exception&) 278cdf0e10cSrcweir { 279cdf0e10cSrcweir DBG_ASSERT(!_bNeedIt, "OLinkFieldsPage::initializePage: caught an exception while retrieving the columns!"); 280cdf0e10cSrcweir } 281cdf0e10cSrcweir } 282cdf0e10cSrcweir return aColumnNames; 283cdf0e10cSrcweir } 284cdf0e10cSrcweir 285cdf0e10cSrcweir //===================================================================== 286cdf0e10cSrcweir //= OContentTableSelection 287cdf0e10cSrcweir //===================================================================== 288cdf0e10cSrcweir //--------------------------------------------------------------------- OContentTableSelection(OListComboWizard * _pParent)289cdf0e10cSrcweir OContentTableSelection::OContentTableSelection( OListComboWizard* _pParent ) 290cdf0e10cSrcweir :OLCPage(_pParent, ModuleRes(RID_PAGE_LCW_CONTENTSELECTION_TABLE)) 291cdf0e10cSrcweir ,m_aFrame (this, ModuleRes(FL_FRAME)) 292cdf0e10cSrcweir ,m_aSelectTableLabel (this, ModuleRes(FT_SELECTTABLE_LABEL)) 293cdf0e10cSrcweir ,m_aSelectTable (this, ModuleRes(LB_SELECTTABLE)) 294cdf0e10cSrcweir { 295cdf0e10cSrcweir FreeResource(); 296cdf0e10cSrcweir 297cdf0e10cSrcweir enableFormDatasourceDisplay(); 298cdf0e10cSrcweir 299cdf0e10cSrcweir m_aSelectTable.SetDoubleClickHdl(LINK(this, OContentTableSelection, OnTableDoubleClicked)); 300cdf0e10cSrcweir m_aSelectTable.SetSelectHdl(LINK(this, OContentTableSelection, OnTableSelected)); 301cdf0e10cSrcweir } 302cdf0e10cSrcweir 303cdf0e10cSrcweir //--------------------------------------------------------------------- ActivatePage()304cdf0e10cSrcweir void OContentTableSelection::ActivatePage() 305cdf0e10cSrcweir { 306cdf0e10cSrcweir OLCPage::ActivatePage(); 307cdf0e10cSrcweir m_aSelectTable.GrabFocus(); 308cdf0e10cSrcweir } 309cdf0e10cSrcweir 310cdf0e10cSrcweir //--------------------------------------------------------------------- canAdvance() const311cdf0e10cSrcweir bool OContentTableSelection::canAdvance() const 312cdf0e10cSrcweir { 313cdf0e10cSrcweir if (!OLCPage::canAdvance()) 314cdf0e10cSrcweir return false; 315cdf0e10cSrcweir 316cdf0e10cSrcweir return 0 != m_aSelectTable.GetSelectEntryCount(); 317cdf0e10cSrcweir } 318cdf0e10cSrcweir 319cdf0e10cSrcweir //--------------------------------------------------------------------- 320cdf0e10cSrcweir IMPL_LINK( OContentTableSelection, OnTableSelected, ListBox*, /*_pListBox*/ ) 321cdf0e10cSrcweir { 322cdf0e10cSrcweir updateDialogTravelUI(); 323cdf0e10cSrcweir return 0L; 324cdf0e10cSrcweir } 325cdf0e10cSrcweir 326cdf0e10cSrcweir //--------------------------------------------------------------------- IMPL_LINK(OContentTableSelection,OnTableDoubleClicked,ListBox *,_pListBox)327cdf0e10cSrcweir IMPL_LINK( OContentTableSelection, OnTableDoubleClicked, ListBox*, _pListBox ) 328cdf0e10cSrcweir { 329cdf0e10cSrcweir if (_pListBox->GetSelectEntryCount()) 330cdf0e10cSrcweir getDialog()->travelNext(); 331cdf0e10cSrcweir return 0L; 332cdf0e10cSrcweir } 333cdf0e10cSrcweir 334cdf0e10cSrcweir //--------------------------------------------------------------------- initializePage()335cdf0e10cSrcweir void OContentTableSelection::initializePage() 336cdf0e10cSrcweir { 337cdf0e10cSrcweir OLCPage::initializePage(); 338cdf0e10cSrcweir 339cdf0e10cSrcweir // fill the list with the table name 340cdf0e10cSrcweir m_aSelectTable.Clear(); 341cdf0e10cSrcweir try 342cdf0e10cSrcweir { 343cdf0e10cSrcweir Reference< XNameAccess > xTables = getTables(sal_True); 344cdf0e10cSrcweir Sequence< ::rtl::OUString > aTableNames; 345cdf0e10cSrcweir if (xTables.is()) 346cdf0e10cSrcweir aTableNames = xTables->getElementNames(); 347cdf0e10cSrcweir fillListBox(m_aSelectTable, aTableNames); 348cdf0e10cSrcweir } 349cdf0e10cSrcweir catch(Exception&) 350cdf0e10cSrcweir { 351cdf0e10cSrcweir DBG_ERROR("OContentTableSelection::initializePage: could not retrieve the table names!"); 352cdf0e10cSrcweir } 353cdf0e10cSrcweir 354cdf0e10cSrcweir m_aSelectTable.SelectEntry(getSettings().sListContentTable); 355cdf0e10cSrcweir } 356cdf0e10cSrcweir 357cdf0e10cSrcweir //--------------------------------------------------------------------- commitPage(::svt::WizardTypes::CommitPageReason _eReason)358cdf0e10cSrcweir sal_Bool OContentTableSelection::commitPage( ::svt::WizardTypes::CommitPageReason _eReason ) 359cdf0e10cSrcweir { 360cdf0e10cSrcweir if (!OLCPage::commitPage(_eReason)) 361cdf0e10cSrcweir return sal_False; 362cdf0e10cSrcweir 363cdf0e10cSrcweir OListComboSettings& rSettings = getSettings(); 364cdf0e10cSrcweir rSettings.sListContentTable = m_aSelectTable.GetSelectEntry(); 365cdf0e10cSrcweir if (!rSettings.sListContentTable.Len() && (::svt::WizardTypes::eTravelBackward != _eReason)) 366cdf0e10cSrcweir // need to select a table 367cdf0e10cSrcweir return sal_False; 368cdf0e10cSrcweir 369cdf0e10cSrcweir return sal_True; 370cdf0e10cSrcweir } 371cdf0e10cSrcweir 372cdf0e10cSrcweir //===================================================================== 373cdf0e10cSrcweir //= OContentFieldSelection 374cdf0e10cSrcweir //===================================================================== 375cdf0e10cSrcweir //--------------------------------------------------------------------- OContentFieldSelection(OListComboWizard * _pParent)376cdf0e10cSrcweir OContentFieldSelection::OContentFieldSelection( OListComboWizard* _pParent ) 377cdf0e10cSrcweir :OLCPage(_pParent, ModuleRes(RID_PAGE_LCW_CONTENTSELECTION_FIELD)) 378cdf0e10cSrcweir ,m_aFrame (this, ModuleRes(FL_FRAME)) 379cdf0e10cSrcweir ,m_aTableFields (this, ModuleRes(FT_TABLEFIELDS)) 380cdf0e10cSrcweir ,m_aSelectTableField (this, ModuleRes(LB_SELECTFIELD)) 381cdf0e10cSrcweir ,m_aDisplayedFieldLabel (this, ModuleRes(FT_DISPLAYEDFIELD)) 382cdf0e10cSrcweir ,m_aDisplayedField (this, ModuleRes(ET_DISPLAYEDFIELD)) 383cdf0e10cSrcweir ,m_aInfo (this, ModuleRes(FT_CONTENTFIELD_INFO)) 384cdf0e10cSrcweir { 385cdf0e10cSrcweir m_aInfo.SetText(String(ModuleRes( isListBox() ? STR_FIELDINFO_LISTBOX : STR_FIELDINFO_COMBOBOX))); 386cdf0e10cSrcweir FreeResource(); 387cdf0e10cSrcweir m_aSelectTableField.SetSelectHdl(LINK(this, OContentFieldSelection, OnFieldSelected)); 388cdf0e10cSrcweir m_aSelectTableField.SetDoubleClickHdl(LINK(this, OContentFieldSelection, OnTableDoubleClicked)); 389cdf0e10cSrcweir } 390cdf0e10cSrcweir 391cdf0e10cSrcweir //--------------------------------------------------------------------- ActivatePage()392cdf0e10cSrcweir void OContentFieldSelection::ActivatePage() 393cdf0e10cSrcweir { 394cdf0e10cSrcweir OLCPage::ActivatePage(); 395cdf0e10cSrcweir m_aTableFields.GrabFocus(); 396cdf0e10cSrcweir } 397cdf0e10cSrcweir 398cdf0e10cSrcweir //--------------------------------------------------------------------- initializePage()399cdf0e10cSrcweir void OContentFieldSelection::initializePage() 400cdf0e10cSrcweir { 401cdf0e10cSrcweir OLCPage::initializePage(); 402cdf0e10cSrcweir 403cdf0e10cSrcweir // fill the list of fields 404cdf0e10cSrcweir fillListBox(m_aSelectTableField, getTableFields(sal_True)); 405cdf0e10cSrcweir 406cdf0e10cSrcweir m_aSelectTableField.SelectEntry(getSettings().sListContentField); 407cdf0e10cSrcweir m_aDisplayedField.SetText(getSettings().sListContentField); 408cdf0e10cSrcweir } 409cdf0e10cSrcweir 410cdf0e10cSrcweir //--------------------------------------------------------------------- canAdvance() const411cdf0e10cSrcweir bool OContentFieldSelection::canAdvance() const 412cdf0e10cSrcweir { 413cdf0e10cSrcweir if (!OLCPage::canAdvance()) 414cdf0e10cSrcweir return false; 415cdf0e10cSrcweir 416cdf0e10cSrcweir return 0 != m_aSelectTableField.GetSelectEntryCount(); 417cdf0e10cSrcweir } 418cdf0e10cSrcweir 419cdf0e10cSrcweir //--------------------------------------------------------------------- 420cdf0e10cSrcweir IMPL_LINK( OContentFieldSelection, OnTableDoubleClicked, ListBox*, /*NOTINTERESTEDIN*/ ) 421cdf0e10cSrcweir { 422cdf0e10cSrcweir if (m_aSelectTableField.GetSelectEntryCount()) 423cdf0e10cSrcweir getDialog()->travelNext(); 424cdf0e10cSrcweir return 0L; 425cdf0e10cSrcweir } 426cdf0e10cSrcweir 427cdf0e10cSrcweir //--------------------------------------------------------------------- 428cdf0e10cSrcweir IMPL_LINK( OContentFieldSelection, OnFieldSelected, ListBox*, /*NOTINTERESTEDIN*/ ) 429cdf0e10cSrcweir { 430cdf0e10cSrcweir updateDialogTravelUI(); 431cdf0e10cSrcweir m_aDisplayedField.SetText(m_aSelectTableField.GetSelectEntry()); 432cdf0e10cSrcweir return 0L; 433cdf0e10cSrcweir } 434cdf0e10cSrcweir 435cdf0e10cSrcweir //--------------------------------------------------------------------- commitPage(::svt::WizardTypes::CommitPageReason _eReason)436cdf0e10cSrcweir sal_Bool OContentFieldSelection::commitPage( ::svt::WizardTypes::CommitPageReason _eReason ) 437cdf0e10cSrcweir { 438cdf0e10cSrcweir if (!OLCPage::commitPage(_eReason)) 439cdf0e10cSrcweir return sal_False; 440cdf0e10cSrcweir 441cdf0e10cSrcweir getSettings().sListContentField = m_aSelectTableField.GetSelectEntry(); 442cdf0e10cSrcweir 443cdf0e10cSrcweir return sal_True; 444cdf0e10cSrcweir } 445cdf0e10cSrcweir 446cdf0e10cSrcweir //===================================================================== 447cdf0e10cSrcweir //= OLinkFieldsPage 448cdf0e10cSrcweir //===================================================================== 449cdf0e10cSrcweir //--------------------------------------------------------------------- OLinkFieldsPage(OListComboWizard * _pParent)450cdf0e10cSrcweir OLinkFieldsPage::OLinkFieldsPage( OListComboWizard* _pParent ) 451cdf0e10cSrcweir :OLCPage(_pParent, ModuleRes(RID_PAGE_LCW_FIELDLINK)) 452cdf0e10cSrcweir ,m_aDescription (this, ModuleRes(FT_FIELDLINK_DESC)) 453cdf0e10cSrcweir ,m_aFrame (this, ModuleRes(FL_FRAME)) 454cdf0e10cSrcweir ,m_aValueListFieldLabel (this, ModuleRes(FT_VALUELISTFIELD)) 455cdf0e10cSrcweir ,m_aValueListField (this, ModuleRes(CMB_VALUELISTFIELD)) 456cdf0e10cSrcweir ,m_aTableFieldLabel (this, ModuleRes(FT_TABLEFIELD)) 457cdf0e10cSrcweir ,m_aTableField (this, ModuleRes(CMB_TABLEFIELD)) 458cdf0e10cSrcweir { 459cdf0e10cSrcweir FreeResource(); 460cdf0e10cSrcweir 461cdf0e10cSrcweir m_aValueListField.SetModifyHdl(LINK(this, OLinkFieldsPage, OnSelectionModified)); 462cdf0e10cSrcweir m_aTableField.SetModifyHdl(LINK(this, OLinkFieldsPage, OnSelectionModified)); 463cdf0e10cSrcweir m_aValueListField.SetSelectHdl(LINK(this, OLinkFieldsPage, OnSelectionModified)); 464cdf0e10cSrcweir m_aTableField.SetSelectHdl(LINK(this, OLinkFieldsPage, OnSelectionModified)); 465cdf0e10cSrcweir } 466cdf0e10cSrcweir 467cdf0e10cSrcweir //--------------------------------------------------------------------- ActivatePage()468cdf0e10cSrcweir void OLinkFieldsPage::ActivatePage() 469cdf0e10cSrcweir { 470cdf0e10cSrcweir OLCPage::ActivatePage(); 471cdf0e10cSrcweir m_aValueListField.GrabFocus(); 472cdf0e10cSrcweir } 473cdf0e10cSrcweir 474cdf0e10cSrcweir //--------------------------------------------------------------------- initializePage()475cdf0e10cSrcweir void OLinkFieldsPage::initializePage() 476cdf0e10cSrcweir { 477cdf0e10cSrcweir OLCPage::initializePage(); 478cdf0e10cSrcweir 479cdf0e10cSrcweir // fill the value list 480cdf0e10cSrcweir fillListBox(m_aValueListField, getContext().aFieldNames); 481cdf0e10cSrcweir // fill the table field list 482cdf0e10cSrcweir fillListBox(m_aTableField, getTableFields(sal_True)); 483cdf0e10cSrcweir 484cdf0e10cSrcweir // the initial selections 485cdf0e10cSrcweir m_aValueListField.SetText(getSettings().sLinkedFormField); 486cdf0e10cSrcweir m_aTableField.SetText(getSettings().sLinkedListField); 487cdf0e10cSrcweir 488cdf0e10cSrcweir implCheckFinish(); 489cdf0e10cSrcweir } 490cdf0e10cSrcweir 491cdf0e10cSrcweir //--------------------------------------------------------------------- canAdvance() const492cdf0e10cSrcweir bool OLinkFieldsPage::canAdvance() const 493cdf0e10cSrcweir { 494cdf0e10cSrcweir // we're on the last page here, no travelNext allowed ... 495cdf0e10cSrcweir return false; 496cdf0e10cSrcweir } 497cdf0e10cSrcweir 498cdf0e10cSrcweir //--------------------------------------------------------------------- implCheckFinish()499cdf0e10cSrcweir void OLinkFieldsPage::implCheckFinish() 500cdf0e10cSrcweir { 501cdf0e10cSrcweir sal_Bool bInvalidSelection = (COMBOBOX_ENTRY_NOTFOUND == m_aValueListField.GetEntryPos(m_aValueListField.GetText())); 502cdf0e10cSrcweir bInvalidSelection |= (COMBOBOX_ENTRY_NOTFOUND == m_aTableField.GetEntryPos(m_aTableField.GetText())); 503cdf0e10cSrcweir getDialog()->enableButtons(WZB_FINISH, !bInvalidSelection); 504cdf0e10cSrcweir } 505cdf0e10cSrcweir 506cdf0e10cSrcweir //--------------------------------------------------------------------- IMPL_LINK(OLinkFieldsPage,OnSelectionModified,void *,EMPTYARG)507cdf0e10cSrcweir IMPL_LINK(OLinkFieldsPage, OnSelectionModified, void*, EMPTYARG) 508cdf0e10cSrcweir { 509cdf0e10cSrcweir implCheckFinish(); 510cdf0e10cSrcweir return 0L; 511cdf0e10cSrcweir } 512cdf0e10cSrcweir 513cdf0e10cSrcweir //--------------------------------------------------------------------- commitPage(::svt::WizardTypes::CommitPageReason _eReason)514cdf0e10cSrcweir sal_Bool OLinkFieldsPage::commitPage( ::svt::WizardTypes::CommitPageReason _eReason ) 515cdf0e10cSrcweir { 516cdf0e10cSrcweir if (!OLCPage::commitPage(_eReason)) 517cdf0e10cSrcweir return sal_False; 518cdf0e10cSrcweir 519cdf0e10cSrcweir getSettings().sLinkedFormField = m_aValueListField.GetText(); 520cdf0e10cSrcweir getSettings().sLinkedListField = m_aTableField.GetText(); 521cdf0e10cSrcweir 522cdf0e10cSrcweir return sal_True; 523cdf0e10cSrcweir } 524cdf0e10cSrcweir 525cdf0e10cSrcweir //===================================================================== 526cdf0e10cSrcweir //= OComboDBFieldPage 527cdf0e10cSrcweir //===================================================================== 528cdf0e10cSrcweir //--------------------------------------------------------------------- OComboDBFieldPage(OControlWizard * _pParent)529cdf0e10cSrcweir OComboDBFieldPage::OComboDBFieldPage( OControlWizard* _pParent ) 530cdf0e10cSrcweir :ODBFieldPage(_pParent) 531cdf0e10cSrcweir { 532cdf0e10cSrcweir setDescriptionText(String(ModuleRes(RID_STR_COMBOWIZ_DBFIELD))); 533cdf0e10cSrcweir } 534cdf0e10cSrcweir 535cdf0e10cSrcweir //--------------------------------------------------------------------- getDBFieldSetting()536cdf0e10cSrcweir String& OComboDBFieldPage::getDBFieldSetting() 537cdf0e10cSrcweir { 538cdf0e10cSrcweir return getSettings().sLinkedFormField; 539cdf0e10cSrcweir } 540cdf0e10cSrcweir 541cdf0e10cSrcweir //--------------------------------------------------------------------- ActivatePage()542cdf0e10cSrcweir void OComboDBFieldPage::ActivatePage() 543cdf0e10cSrcweir { 544cdf0e10cSrcweir ODBFieldPage::ActivatePage(); 545cdf0e10cSrcweir getDialog()->enableButtons(WZB_FINISH, sal_True); 546cdf0e10cSrcweir } 547cdf0e10cSrcweir 548cdf0e10cSrcweir //--------------------------------------------------------------------- canAdvance() const549cdf0e10cSrcweir bool OComboDBFieldPage::canAdvance() const 550cdf0e10cSrcweir { 551cdf0e10cSrcweir // we're on the last page here, no travelNext allowed ... 552cdf0e10cSrcweir return false; 553cdf0e10cSrcweir } 554cdf0e10cSrcweir 555cdf0e10cSrcweir //......................................................................... 556cdf0e10cSrcweir } // namespace dbp 557cdf0e10cSrcweir //......................................................................... 558cdf0e10cSrcweir 559