diff options
Diffstat (limited to 'dbaccess/source/ui/querydesign/querycontroller.cxx')
-rw-r--r-- | dbaccess/source/ui/querydesign/querycontroller.cxx | 102 |
1 files changed, 63 insertions, 39 deletions
diff --git a/dbaccess/source/ui/querydesign/querycontroller.cxx b/dbaccess/source/ui/querydesign/querycontroller.cxx index aab0703b364c..05bac818cdee 100644 --- a/dbaccess/source/ui/querydesign/querycontroller.cxx +++ b/dbaccess/source/ui/querydesign/querycontroller.cxx @@ -401,6 +401,7 @@ void SAL_CALL OQueryController::getFastPropertyValue( Any& o_rValue, sal_Int32 i { getContainer()->SaveUIConfig(); saveViewSettings( aCurrentDesign, true ); + aCurrentDesign.put( "Statement", m_sStatement ); } else { @@ -858,6 +859,9 @@ void OQueryController::impl_initialize() ::rtl::OUString sCommand; m_nCommandType = CommandType::QUERY; + // °°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°° + // ° reading parameters + // °°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°° // legacy parameters first (later overwritten by regular parameters) ::rtl::OUString sIndependentSQLCommand; if ( rArguments.get_ensureType( "IndependentSQLCommand", sIndependentSQLCommand ) ) @@ -927,6 +931,37 @@ void OQueryController::impl_initialize() m_bGraphicalDesign = false; } + // ................................................................................................................. + // . initial design + bool bForceInitialDesign = false; + Sequence< PropertyValue > aCurrentQueryDesignProps; + aCurrentQueryDesignProps = rArguments.getOrDefault( "CurrentQueryDesign", aCurrentQueryDesignProps ); + + if ( aCurrentQueryDesignProps.getLength() ) + { + ::comphelper::NamedValueCollection aCurrentQueryDesign( aCurrentQueryDesignProps ); + if ( aCurrentQueryDesign.has( (::rtl::OUString)PROPERTY_GRAPHICAL_DESIGN ) ) + { + aCurrentQueryDesign.get_ensureType( (::rtl::OUString)PROPERTY_GRAPHICAL_DESIGN, m_bGraphicalDesign ); + } + if ( aCurrentQueryDesign.has( (::rtl::OUString)PROPERTY_ESCAPE_PROCESSING ) ) + { + aCurrentQueryDesign.get_ensureType( (::rtl::OUString)PROPERTY_ESCAPE_PROCESSING, m_bEscapeProcessing ); + } + if ( aCurrentQueryDesign.has( "Statement" ) ) + { + ::rtl::OUString sStatement; + aCurrentQueryDesign.get_ensureType( "Statement", sStatement ); + aCurrentQueryDesign.remove( "Statement" ); + setStatement_fireEvent( sStatement ); + } + + loadViewSettings( aCurrentQueryDesign ); + + bForceInitialDesign = true; + } + + // °°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°° if ( !ensureConnected( sal_False ) ) { // we have no connection so what else should we do m_bGraphicalDesign = sal_False; @@ -981,20 +1016,30 @@ void OQueryController::impl_initialize() try { getContainer()->initialize(); - impl_reset(); + impl_reset( bForceInitialDesign ); - bool bAttemptedGraphicalDesign = m_bGraphicalDesign; SQLExceptionInfo aError; - impl_setViewMode( &aError ); + const bool bAttemptedGraphicalDesign = m_bGraphicalDesign; + + if ( bForceInitialDesign ) + { + getContainer()->forceInitialView(); + } + else + { + impl_setViewMode( &aError ); + } + if ( aError.isValid() && bAttemptedGraphicalDesign && !m_bGraphicalDesign ) { + // we tried initializing the graphical view, this failed, and we were automatically switched to SQL + // view => tell this to the user if ( !editingView() ) { impl_showAutoSQLViewError( aError.get() ); } } - getUndoMgr()->Clear(); if ( ( m_bGraphicalDesign ) @@ -1159,7 +1204,7 @@ void OQueryController::reconnect(sal_Bool _bUI) } // ----------------------------------------------------------------------------- -void OQueryController::saveViewSettings( ::comphelper::NamedValueCollection& o_rViewSettings, const bool i_includngCriteria ) const +void OQueryController::saveViewSettings( ::comphelper::NamedValueCollection& o_rViewSettings, const bool i_includingCriteria ) const { saveTableWindows( o_rViewSettings ); @@ -1172,31 +1217,10 @@ void OQueryController::saveViewSettings( ::comphelper::NamedValueCollection& o_r { if ( !(*field)->IsEmpty() ) { - const ::rtl::OUString sFieldSettingName = ::rtl::OUString( RTL_CONSTASCII_USTRINGPARAM( "Field" ) ) + ::rtl::OUString::valueOf( i ); - aFieldData.clear(); - (*field)->Save( aFieldData ); - - if ( i_includngCriteria ) - { - const ::std::vector< ::rtl::OUString >& rCriteria( (*field)->GetCriteria() ); - if ( !rCriteria.empty() ) - { - sal_Int32 c = 0; - ::comphelper::NamedValueCollection aCriteria; - for ( ::std::vector< ::rtl::OUString >::const_iterator crit = rCriteria.begin(); - crit != rCriteria.end(); - ++crit, ++c - ) - { - const ::rtl::OUString sCritName = ::rtl::OUString( RTL_CONSTASCII_USTRINGPARAM( "Criterion_" ) ) + ::rtl::OUString::valueOf( c ); - aCriteria.put( sCritName, *crit ); - } - - aFieldData.put( "Criteria", aCriteria.getPropertyValues() ); - } - } + (*field)->Save( aFieldData, i_includingCriteria ); + const ::rtl::OUString sFieldSettingName = ::rtl::OUString( RTL_CONSTASCII_USTRINGPARAM( "Field" ) ) + ::rtl::OUString::valueOf( i ); aAllFieldsData.put( sFieldSettingName, aFieldData.getPropertyValues() ); } } @@ -1206,12 +1230,13 @@ void OQueryController::saveViewSettings( ::comphelper::NamedValueCollection& o_r o_rViewSettings.put( "VisibleRows", m_nVisibleRows ); } // ----------------------------------------------------------------------------- -void OQueryController::loadViewSettings( const Sequence< PropertyValue >& i_rViewData ) +void OQueryController::loadViewSettings( const ::comphelper::NamedValueCollection& o_rViewSettings ) { - const ::comphelper::NamedValueCollection aViewData( i_rViewData ); - m_nSplitPos = aViewData.getOrDefault( "SplitterPosition", m_nSplitPos ); - m_nVisibleRows = aViewData.getOrDefault( "VisibleRows", m_nVisibleRows ); - m_aFieldInformation = aViewData.getOrDefault( "Fields", m_aFieldInformation ); + loadTableWindows( o_rViewSettings ); + + m_nSplitPos = o_rViewSettings.getOrDefault( "SplitterPosition", m_nSplitPos ); + m_nVisibleRows = o_rViewSettings.getOrDefault( "VisibleRows", m_nVisibleRows ); + m_aFieldInformation = o_rViewSettings.getOrDefault( "Fields", m_aFieldInformation ); } // ----------------------------------------------------------------------------- sal_Int32 OQueryController::getColWidth(sal_uInt16 _nColPos) const @@ -1219,7 +1244,7 @@ sal_Int32 OQueryController::getColWidth(sal_uInt16 _nColPos) const if ( _nColPos < m_aFieldInformation.getLength() ) { ::std::auto_ptr<OTableFieldDesc> pField( new OTableFieldDesc()); - pField->Load(m_aFieldInformation[_nColPos]); + pField->Load( m_aFieldInformation[ _nColPos ], false ); return pField->GetColWidth(); } return 0; @@ -1639,13 +1664,13 @@ short OQueryController::saveModified() return nRet; } // ----------------------------------------------------------------------------- -void OQueryController::impl_reset() +void OQueryController::impl_reset( const bool i_bIgnoreQuerySettings ) { bool bValid = false; Sequence< PropertyValue > aLayoutInformation; // get command from the query if a query name was supplied - if ( !editingCommand() ) + if ( !i_bIgnoreQuerySettings && !editingCommand() ) { if ( m_sName.getLength() ) { @@ -1695,15 +1720,14 @@ void OQueryController::impl_reset() { try { - // load the layoutInformation - loadTableWindows(aLayoutInformation); - loadViewSettings(aLayoutInformation); + loadViewSettings( aLayoutInformation ); } catch( const Exception& ) { DBG_UNHANDLED_EXCEPTION(); } } + if ( m_sStatement.getLength() ) { setQueryComposer(); |