diff options
author | Kurt Zenker <kz@openoffice.org> | 2009-06-05 12:31:05 +0000 |
---|---|---|
committer | Kurt Zenker <kz@openoffice.org> | 2009-06-05 12:31:05 +0000 |
commit | caaf3d4b4d3a75a570c6a99f6ffe1c1ad1a7e495 (patch) | |
tree | 06dd6915128cc4093a4772085a8adef9c2dc3415 /dbaccess/source/ui/browser/brwctrlr.cxx | |
parent | 3218a95f1fdc7633b94d938275f20ada724824e6 (diff) |
CWS-TOOLING: integrate CWS evoab2def
2009-05-28 16:00:19 +0200 fs r272412 : don't use createFalse - Evo 2.22 simply hangs when ask for all contacts without a first name. Instead, in the WHERE 0=1 case, simply create an empty result set
2009-05-22 14:25:51 +0200 fs r272193 : #i10000#
2009-05-22 14:25:37 +0200 fs r272192 : oops, ENABLE_EVOAB2 for some platforms only, not generically
2009-05-22 14:19:00 +0200 fs r272191 : #i10000#
2009-05-22 12:42:38 +0200 fs r272183 : when sorting, properly use a syslocale collator, instead of comparing the numerical values of the string's UTF-16 code points
2009-05-20 15:09:00 +0200 fs r272131 : clear/getWarnings: also allowed without cache
2009-05-20 14:11:19 +0200 fs r272128 : removed debug traces
2009-05-20 14:03:31 +0200 fs r272126 : #i55701# +STR_SORT_BY_COL_ONLY
2009-05-20 14:02:29 +0200 fs r272125 : implement sorting
2009-05-20 10:10:19 +0200 fs r272107 : #i10000#
2009-05-19 16:02:17 +0200 fs r272089 : #i10000#
2009-05-19 16:02:02 +0200 fs r272088 : #i55701# strings for new error condition DATA_CANNOT_SELECT_UNFILTERED
2009-05-19 16:01:31 +0200 fs r272087 : #i55701# use DATA_CANNOT_SELECT_UNFILTERED as standardized error code
2009-05-19 15:59:59 +0200 fs r272086 : #i55701# +DATA_CANNOT_SELECT_UNFILTERED
2009-05-19 15:46:12 +0200 fs r272084 : #i55701# recognize the DATA_CANNOT_SELECT_UNFILTERED error condition, and allow filtering in this case, even when the result set is empty
2009-05-19 09:06:50 +0200 fs r272059 : merging changes from CWS dba32b, to prevent future conflicts with upcoming local changes
2009-05-18 21:48:58 +0200 fs r272054 : accessing a non-local unfiltered address book now returns an empty result set, and reports a warning, instead of ungracefully failing
2009-05-18 21:48:42 +0200 fs r272053 : accessing a non-local unfiltered address book now returns an empty result set, and reports a warning, instead of ungracefully failing
2009-05-18 21:47:41 +0200 fs r272052 : +setExternalWarnings
2009-05-18 21:47:12 +0200 fs r272051 : #i55701# when re/loading the form, display any possible warnings
2009-05-18 21:43:26 +0200 fs r272050 : #i55701# implement XWarningsSupplier, exposing the warnings of our result set
2009-05-18 21:42:51 +0200 fs r272049 : #i55701# implement XWarningsSupplier, exposing the warnings of our aggregate RowSet
2009-05-18 17:53:59 +0200 fs r272041 : #i55701# moved the (I)WarningsContainer from dbaccess to connectivity, to be able to use it in the latter module, too
2009-05-18 17:24:10 +0200 fs r272040 : #i55701# properly enable the various Evolution types
2009-05-18 14:52:19 +0200 fs r272024 : #i55701# properly enable the Evolution types
2009-05-18 13:57:10 +0200 fs r272018 : fixed/extended whereAnalysis (column searching still not enabled, as neither LIKE nor = seem to work with my (somewhat older) Evolution version)
2009-05-18 13:56:08 +0200 fs r272017 : extended showParseTree
2009-05-18 13:55:25 +0200 fs r272016 : extended showParseTree
2009-05-18 11:40:16 +0200 fs r272008 : #i55701#
2009-05-18 11:39:02 +0200 fs r272006 : let the PreparedStatement return proper meta data, too
2009-05-18 10:05:37 +0200 fs r271999 : moved the XStatement interface to from OCommonStatement to OStatement - the former class is also the base for other classes which should not have this interface
2009-05-15 21:53:22 +0200 fs r271973 : collectColumnInformation: report invalid meta data as assertion
2009-05-15 21:51:40 +0200 fs r271972 : showParseTree should be const
2009-05-15 21:51:26 +0200 fs r271971 : showParseTree should be const
2009-05-15 21:51:03 +0200 fs r271970 : properly recognize the 'WHERE 0 = 1' clause, this way having proper statement meta data, this way saving much much calls from the DBA framework
2009-05-15 20:29:03 +0200 fs r271969 : cleaned up the mess with the statement classes
2009-05-15 15:51:11 +0200 fs r271944 : let the result set properly init its meta data
2009-05-15 15:29:54 +0200 fs r271939 : proper property implementations for the resultset class
2009-05-15 15:01:31 +0200 fs r271936 : proper property implementations for the statement class
2009-05-08 14:46:33 +0200 fs r271717 : component_foo must be PUBLIC
2009-05-06 09:20:05 +0200 fs r271565 : #i10000# (warnings on unxlngi6)
2009-05-06 09:01:30 +0200 fs r271564 : #i101493#
2009-05-05 23:08:12 +0200 fs r271560 : #i55701# merging the changes from the ancient (CVS-based) CWS evoab2default into this CWS here
Diffstat (limited to 'dbaccess/source/ui/browser/brwctrlr.cxx')
-rw-r--r-- | dbaccess/source/ui/browser/brwctrlr.cxx | 136 |
1 files changed, 75 insertions, 61 deletions
diff --git a/dbaccess/source/ui/browser/brwctrlr.cxx b/dbaccess/source/ui/browser/brwctrlr.cxx index 2ddccc2e3..e2059153f 100644 --- a/dbaccess/source/ui/browser/brwctrlr.cxx +++ b/dbaccess/source/ui/browser/brwctrlr.cxx @@ -134,6 +134,9 @@ #ifndef _CPPUHELPER_TYPEPROVIDER_HXX_ #include <cppuhelper/typeprovider.hxx> #endif +#ifndef _CPPUHELPER_EXC_HLP_HXX_ +#include <cppuhelper/exc_hlp.hxx> +#endif #ifndef _SV_MSGBOX_HXX //autogen #include <vcl/msgbox.hxx> #endif @@ -155,6 +158,9 @@ #ifndef _CONNECTIVITY_DBTOOLS_HXX_ #include <connectivity/dbtools.hxx> #endif +#ifndef _DBHELPER_DBEXCEPTION_HXX_ +#include <connectivity/dbexception.hxx> +#endif #ifndef _CPPUHELPER_IMPLBASE2_HXX_ #include <cppuhelper/implbase2.hxx> #endif @@ -176,6 +182,9 @@ #ifndef _DBHELPER_DBEXCEPTION_HXX_ #include <connectivity/dbexception.hxx> #endif +#ifndef CONNECTIVITY_SQLERROR_HXX +#include <connectivity/sqlerror.hxx> +#endif #ifndef _COMPHELPER_EXTRACT_HXX_ #include <comphelper/extract.hxx> #endif @@ -188,6 +197,12 @@ #ifndef _COM_SUN_STAR_TASK_XINTERACTIONHANDLER_HPP_ #include <com/sun/star/task/XInteractionHandler.hpp> #endif +#ifndef INCLUDED_COM_SUN_STAR_SDBC_XWARNINGSSUPPLIER_HPP +#include <com/sun/star/sdbc/XWarningsSupplier.hpp> +#endif +#ifndef INCLUDED_COM_SUN_STAR_SDB_ERRORCONDITION_HPP +#include <com/sun/star/sdb/ErrorCondition.hpp> +#endif #ifndef DBAUI_QUERYFILTER_HXX #include "queryfilter.hxx" #endif @@ -484,6 +499,7 @@ SbaXDataBrowserController::SbaXDataBrowserController(const Reference< ::com::sun ,m_bLoadCanceled( sal_False ) ,m_bClosingKillOpen( sal_False ) ,m_bErrorOccured( sal_False ) + ,m_bCannotSelectUnfiltered( true ) { RTL_LOGFILE_CONTEXT_AUTHOR( aLogger, "dbaui", "Ocke.Janssen@sun.com", "SbaXDataBrowserController::SbaXDataBrowserController" ); DBG_CTOR(SbaXDataBrowserController,NULL); @@ -545,12 +561,35 @@ void SbaXDataBrowserController::stopFrameListening( const Reference< XFrame >& _ } // ----------------------------------------------------------------------------- -sal_Bool SbaXDataBrowserController::reloadForm(const Reference< XLoadable >& _rxLoadable) +void SbaXDataBrowserController::onStartLoading( const Reference< XLoadable >& _rxLoadable ) +{ + m_bLoadCanceled = sal_False; + m_bCannotSelectUnfiltered = false; + + Reference< XWarningsSupplier > xWarnings( _rxLoadable, UNO_QUERY ); + if ( xWarnings.is() ) + xWarnings->clearWarnings(); +} + +// ----------------------------------------------------------------------------- +void SbaXDataBrowserController::impl_checkForCannotSelectUnfiltered( const SQLExceptionInfo& _rError ) +{ + ::connectivity::SQLError aError( getORB() ); + ::connectivity::ErrorCode nErrorCode( aError.getErrorCode( ErrorCondition::DATA_CANNOT_SELECT_UNFILTERED ) ); + if ( ((const SQLException*)_rError)->ErrorCode == nErrorCode ) + { + m_bCannotSelectUnfiltered = true; + InvalidateFeature( ID_BROWSER_FILTERCRIT ); + } +} + +// ----------------------------------------------------------------------------- +sal_Bool SbaXDataBrowserController::reloadForm( const Reference< XLoadable >& _rxLoadable ) { RTL_LOGFILE_CONTEXT_AUTHOR( aLogger, "dbaui", "Ocke.Janssen@sun.com", "SbaXDataBrowserController::reloadForm" ); WaitObject aWO(getBrowserView()); - setLoadingStarted(); + onStartLoading( _rxLoadable ); FormErrorHelper aReportError(this); if (_rxLoadable->isLoaded()) @@ -558,6 +597,17 @@ sal_Bool SbaXDataBrowserController::reloadForm(const Reference< XLoadable >& _rx else _rxLoadable->load(); + Reference< XWarningsSupplier > xWarnings( _rxLoadable, UNO_QUERY ); + if ( xWarnings.is() ) + { + SQLExceptionInfo aInfo( xWarnings->getWarnings() ); + if ( aInfo.isValid() ) + { + showError( aInfo ); + impl_checkForCannotSelectUnfiltered( aInfo ); + } + } + return _rxLoadable->isLoaded() && !errorOccured(); } @@ -1302,8 +1352,7 @@ void SbaXDataBrowserController::errorOccured(const ::com::sun::star::sdb::SQLErr if ( aInfo.isValid() ) { ::vos::OGuard aGuard(Application::GetSolarMutex()); - OSQLMessageBox aDlg(getBrowserView(), aInfo); - aDlg.Execute(); + showError( aInfo ); } if (m_nFormActionNestingLevel) m_bErrorOccured = true; @@ -1523,35 +1572,34 @@ FeatureState SbaXDataBrowserController::GetState(sal_uInt16 nId) const aReturn.bEnabled = ::comphelper::getBOOL(xCurrentField->getPropertyValue(PROPERTY_ISSEARCHABLE)); const Reference< XRowSet > xRow = getRowSet(); - if(aReturn.bEnabled && xRow.is()) // check if we stand on a valid row - aReturn.bEnabled = !(xRow->isBeforeFirst() || xRow->isAfterLast() || xRow->rowDeleted() || ::comphelper::getINT32(xFormSet->getPropertyValue(PROPERTY_ROWCOUNT)) == 0); + aReturn.bEnabled = aReturn.bEnabled + && xRow.is() + && !xRow->isBeforeFirst() + && !xRow->isAfterLast() + && !xRow->rowDeleted() + && ( ::comphelper::getINT32( xFormSet->getPropertyValue( PROPERTY_ROWCOUNT ) ) != 0 ); } break; - case ID_BROWSER_ORDERCRIT: case ID_BROWSER_FILTERCRIT: + if ( m_bCannotSelectUnfiltered ) + { + aReturn.bEnabled = sal_True; + break; + } + // no break + case ID_BROWSER_ORDERCRIT: { const Reference< XPropertySet > xFormSet(getRowSet(), UNO_QUERY); if ( !::comphelper::getBOOL(xFormSet->getPropertyValue(PROPERTY_ESCAPE_PROCESSING))) break; - Reference< XPropertySet > xCurrentField = getBoundField(); - // we are not in the handle column - aReturn.bEnabled = getBrowserView()->getVclControl()->GetCurColumnId() != 0 && - xCurrentField.is() && - ::comphelper::getBOOL(xCurrentField->getPropertyValue(PROPERTY_ISSEARCHABLE)); - - const Reference< XRowSet > xRow = getRowSet(); - - if(aReturn.bEnabled && xRow.is()) // check if we stand on a valid row - aReturn.bEnabled = !(xRow->isBeforeFirst() || xRow->isAfterLast() || xRow->rowDeleted() || ::comphelper::getINT32(xFormSet->getPropertyValue(PROPERTY_ROWCOUNT)) == 0); - // a native statement can't be filtered or sorted - // aReturn.bEnabled &= m_xParser.is(); + aReturn.bEnabled = getRowSet().is() + && ( ::comphelper::getINT32( xFormSet->getPropertyValue( PROPERTY_ROWCOUNT ) ) != 0 ); } break; case ID_BROWSER_REFRESH: - // aReturn.bEnabled = isValidCursor(); aReturn.bEnabled = sal_True; break; @@ -1728,11 +1776,6 @@ void SbaXDataBrowserController::ExecuteFilterSortCrit(sal_Bool bFilter) Reference< XPropertySet > xFormSet(getRowSet(), UNO_QUERY); - // no condition for searching - if (getRowSet()->isBeforeFirst() || getRowSet()->isAfterLast() || - getRowSet()->rowDeleted()) - return; - initializeParser(); const ::rtl::OUString sOldVal = bFilter ? m_xParser->getFilter() : m_xParser->getOrder(); const ::rtl::OUString sOldHaving = m_xParser->getHavingClause(); @@ -1764,7 +1807,12 @@ void SbaXDataBrowserController::ExecuteFilterSortCrit(sal_Bool bFilter) aDlg.BuildOrderPart(); } } - catch(SQLException& e) { showError(SQLExceptionInfo(e)); return; } + catch(const SQLException& ) + { + SQLExceptionInfo aError( ::cppu::getCaughtException() ); + showError( aError ); + return; + } catch(Exception&) { return; @@ -2293,40 +2341,6 @@ IMPL_LINK(SbaXDataBrowserController, OnInvalidateClipboard, AutoTimer*, _pTimer) return 0L; } -// ------------------------------------------------------------------------------ -//sal_uInt16 SbaXDataBrowserController::SaveData(sal_Bool bUI, sal_Bool bForBrowsing) -//{ -// if (!getBrowserView()) -// return sal_True; -// -// if (!isValidCursor()) -// return sal_True; -// -// if (bUI && GetState(ID_BROWSER_SAVEDOC).bEnabled) -// { -// getBrowserView()->getVclControl()->GrabFocus(); -// -// QueryBox aQry(getBrowserView()->getVclControl(), ModuleRes(QUERY_BRW_SAVEMODIFIED)); -// if (bForBrowsing) -// aQry.AddButton(ResId(RID_STR_NEW_TASK), RET_NEWTASK, -// BUTTONDIALOG_DEFBUTTON | BUTTONDIALOG_FOCUSBUTTON); -// -// switch (aQry.Execute()) -// { -// case RET_NO: -// Execute(ID_BROWSER_UNDO); -// return sal_True; -// case RET_CANCEL: -// return sal_False; -// case RET_NEWTASK: -// return RET_NEWTASK; -// } -// } -// -// -// return SbaXDataBrowserController_Base::SaveData(bUI,bForBrowsing); -//} -// // ------------------------------------------------------------------------- Reference< XPropertySet > SbaXDataBrowserController::getBoundField(sal_uInt16 nViewPos) const { @@ -2686,7 +2700,7 @@ sal_Bool SbaXDataBrowserController::isValidCursor() const if ( !bIsValid ) { initializeParser(); - bIsValid = (m_xParser.is() && (m_xParser->getFilter().getLength() || m_xParser->getHavingClause().getLength() || m_xParser->getOrder().getLength())); + bIsValid = m_xParser.is(); } } // if ( !bIsValid ) return bIsValid; |