summaryrefslogtreecommitdiff
path: root/sc/source/ui/view/cellsh2.cxx
diff options
context:
space:
mode:
Diffstat (limited to 'sc/source/ui/view/cellsh2.cxx')
-rw-r--r--sc/source/ui/view/cellsh2.cxx204
1 files changed, 119 insertions, 85 deletions
diff --git a/sc/source/ui/view/cellsh2.cxx b/sc/source/ui/view/cellsh2.cxx
index 38a2e62ac177..29d6f126b4e6 100644
--- a/sc/source/ui/view/cellsh2.cxx
+++ b/sc/source/ui/view/cellsh2.cxx
@@ -920,102 +920,136 @@ void ScCellShell::ExecuteDB( SfxRequest& rReq )
auto xDlg = std::make_shared<ScValidationDlg>(pParentWin, &aArgSet, pTabViewShell);
ScValidationRegisteredDlg aRegisterThatDlgExists(pParentWin, xDlg);
- short nResult = xDlg->run();
- if ( nResult == RET_OK )
+ struct lcl_auxData
{
- const SfxItemSet* pOutSet = xDlg->GetOutputItemSet();
-
- if ( const SfxUInt16Item* pItem = pOutSet->GetItemIfSet( FID_VALID_MODE ) )
- eMode = static_cast<ScValidationMode>(pItem->GetValue());
- if ( const SfxUInt16Item* pItem = pOutSet->GetItemIfSet( FID_VALID_CONDMODE ) )
- eOper = static_cast<ScConditionMode>(pItem->GetValue());
- if ( const SfxStringItem* pItem = pOutSet->GetItemIfSet( FID_VALID_VALUE1 ) )
+ ScAddress aCursorPos;
+ ScValidationMode eMode;
+ ScConditionMode eOper;
+ OUString aExpr1;
+ OUString aExpr2;
+ bool bBlank;
+ sal_Int16 nListType;
+ bool bShowHelp;
+ OUString aHelpTitle;
+ OUString aHelpText;
+ bool bShowError;
+ ScValidErrorStyle eErrStyle;
+ OUString aErrTitle;
+ OUString aErrText;
+ bool bCaseSensitive;
+ };
+
+ std::shared_ptr<lcl_auxData> xAuxData = std::make_shared<lcl_auxData>(lcl_auxData{
+ aCursorPos, eMode, eOper, aExpr1, aExpr2, bBlank, nListType, bShowHelp,
+ aHelpTitle, aHelpText, bShowError, eErrStyle, aErrTitle, aErrText, bCaseSensitive});
+
+ auto xRequest = std::make_shared<SfxRequest>(rReq);
+ rReq.Ignore(); // the 'old' request is not relevant any more
+ SfxTabDialogController::runAsync(
+ xDlg,
+ [&rDoc, xRequest=std::move(xRequest), xAuxData=std::move(xAuxData),
+ xDlg, pTabViewShell](sal_Int32 nResult)
+ {
+ if ( nResult == RET_OK )
{
- OUString aTemp1 = pItem->GetValue();
- if (eMode == SC_VALID_DATE || eMode == SC_VALID_TIME)
+ const SfxItemSet* pOutSet = xDlg->GetOutputItemSet();
+
+ if ( const SfxUInt16Item* pItem = pOutSet->GetItemIfSet( FID_VALID_MODE ) )
+ xAuxData->eMode = static_cast<ScValidationMode>(pItem->GetValue());
+ if ( const SfxUInt16Item* pItem = pOutSet->GetItemIfSet( FID_VALID_CONDMODE ) )
+ xAuxData->eOper = static_cast<ScConditionMode>(pItem->GetValue());
+ if ( const SfxStringItem* pItem = pOutSet->GetItemIfSet( FID_VALID_VALUE1 ) )
{
- sal_uInt32 nNumIndex = 0;
- double nVal;
- if (rDoc.GetFormatTable()->IsNumberFormat(aTemp1, nNumIndex, nVal))
- aExpr1 = ::rtl::math::doubleToUString( nVal,
- rtl_math_StringFormat_Automatic, rtl_math_DecimalPlaces_Max,
- ScGlobal::getLocaleData().getNumDecimalSep()[0], true);
+ OUString aTemp1 = pItem->GetValue();
+ if (xAuxData->eMode == SC_VALID_DATE || xAuxData->eMode == SC_VALID_TIME)
+ {
+ sal_uInt32 nNumIndex = 0;
+ double nVal;
+ if (rDoc.GetFormatTable()->IsNumberFormat(aTemp1, nNumIndex, nVal))
+ xAuxData->aExpr1 = ::rtl::math::doubleToUString( nVal,
+ rtl_math_StringFormat_Automatic, rtl_math_DecimalPlaces_Max,
+ ScGlobal::getLocaleData().getNumDecimalSep()[0], true);
+ else
+ xAuxData->aExpr1 = aTemp1;
+ }
else
- aExpr1 = aTemp1;
+ xAuxData->aExpr1 = aTemp1;
}
- else
- aExpr1 = aTemp1;
- }
- if ( const SfxStringItem* pItem = pOutSet->GetItemIfSet( FID_VALID_VALUE2 ) )
- {
- OUString aTemp2 = pItem->GetValue();
- if (eMode == SC_VALID_DATE || eMode == SC_VALID_TIME)
+ if ( const SfxStringItem* pItem = pOutSet->GetItemIfSet( FID_VALID_VALUE2 ) )
{
- sal_uInt32 nNumIndex = 0;
- double nVal;
- if (rDoc.GetFormatTable()->IsNumberFormat(aTemp2, nNumIndex, nVal))
- aExpr2 = ::rtl::math::doubleToUString( nVal,
- rtl_math_StringFormat_Automatic, rtl_math_DecimalPlaces_Max,
- ScGlobal::getLocaleData().getNumDecimalSep()[0], true);
- else
- aExpr2 = aTemp2;
- if ( eMode == SC_VALID_TIME ) {
- sal_Int32 wraparound = aExpr1.compareTo(aExpr2);
- if (wraparound > 0) {
- if (eOper == ScConditionMode::Between) {
- eOper = ScConditionMode::NotBetween;
- std::swap( aExpr1, aExpr2 );
- }
- else if (eOper == ScConditionMode::NotBetween) {
- eOper = ScConditionMode::Between;
- std::swap( aExpr1, aExpr2 );
+ OUString aTemp2 = pItem->GetValue();
+ if (xAuxData->eMode == SC_VALID_DATE || xAuxData->eMode == SC_VALID_TIME)
+ {
+ sal_uInt32 nNumIndex = 0;
+ double nVal;
+ if (rDoc.GetFormatTable()->IsNumberFormat(aTemp2, nNumIndex, nVal))
+ xAuxData->aExpr2 = ::rtl::math::doubleToUString( nVal,
+ rtl_math_StringFormat_Automatic, rtl_math_DecimalPlaces_Max,
+ ScGlobal::getLocaleData().getNumDecimalSep()[0], true);
+ else
+ xAuxData->aExpr2 = aTemp2;
+ if ( xAuxData->eMode == SC_VALID_TIME ) {
+ sal_Int32 wraparound = xAuxData->aExpr1.compareTo(xAuxData->aExpr2);
+ if (wraparound > 0) {
+ if (xAuxData->eOper == ScConditionMode::Between) {
+ xAuxData->eOper = ScConditionMode::NotBetween;
+ std::swap( xAuxData->aExpr1, xAuxData->aExpr2 );
+ }
+ else if (xAuxData->eOper == ScConditionMode::NotBetween) {
+ xAuxData->eOper = ScConditionMode::Between;
+ std::swap( xAuxData->aExpr1, xAuxData->aExpr2 );
+ }
}
}
}
+ else
+ xAuxData->aExpr2 = aTemp2;
}
- else
- aExpr2 = aTemp2;
+ if ( const SfxBoolItem* pItem = pOutSet->GetItemIfSet( FID_VALID_BLANK ) )
+ xAuxData->bBlank = pItem->GetValue();
+ if ( const SfxBoolItem* pItem = pOutSet->GetItemIfSet( FID_VALID_CASESENS ) )
+ xAuxData->bCaseSensitive = pItem->GetValue();
+ if ( const SfxInt16Item* pItem = pOutSet->GetItemIfSet( FID_VALID_LISTTYPE ) )
+ xAuxData->nListType = pItem->GetValue();
+
+ if ( const SfxBoolItem* pItem = pOutSet->GetItemIfSet( FID_VALID_SHOWHELP ) )
+ xAuxData->bShowHelp = pItem->GetValue();
+ if ( const SfxStringItem* pItem = pOutSet->GetItemIfSet( FID_VALID_HELPTITLE ) )
+ xAuxData->aHelpTitle = pItem->GetValue();
+ if ( const SfxStringItem* pItem = pOutSet->GetItemIfSet( FID_VALID_HELPTEXT ) )
+ xAuxData->aHelpText = pItem->GetValue();
+
+ if ( const SfxBoolItem* pItem = pOutSet->GetItemIfSet( FID_VALID_SHOWERR ) )
+ xAuxData->bShowError = pItem->GetValue();
+ if ( const SfxUInt16Item* pItem = pOutSet->GetItemIfSet( FID_VALID_ERRSTYLE ) )
+ xAuxData->eErrStyle = static_cast<ScValidErrorStyle>(pItem->GetValue());
+ if ( const SfxStringItem* pItem = pOutSet->GetItemIfSet( FID_VALID_ERRTITLE ) )
+ xAuxData->aErrTitle = pItem->GetValue();
+ if ( const SfxStringItem* pItem = pOutSet->GetItemIfSet( FID_VALID_ERRTEXT ) )
+ xAuxData->aErrText = pItem->GetValue();
+
+ ScValidationData aData( xAuxData->eMode, xAuxData->eOper, xAuxData->aExpr1, xAuxData->aExpr2, rDoc, xAuxData->aCursorPos );
+ aData.SetIgnoreBlank( xAuxData->bBlank );
+ aData.SetCaseSensitive( xAuxData->bCaseSensitive );
+ aData.SetListType( xAuxData->nListType );
+
+ aData.SetInput(xAuxData->aHelpTitle, xAuxData->aHelpText); // sets bShowInput to TRUE
+ if (!xAuxData->bShowHelp)
+ aData.ResetInput(); // reset only bShowInput
+
+ aData.SetError(xAuxData->aErrTitle, xAuxData->aErrText, xAuxData->eErrStyle); // sets bShowError to TRUE
+ if (!xAuxData->bShowError)
+ aData.ResetError(); // reset only bShowError
+
+ pTabViewShell->SetValidation( aData );
+ pTabViewShell->TestHintWindow();
+ xRequest->Done( *pOutSet );
}
- if ( const SfxBoolItem* pItem = pOutSet->GetItemIfSet( FID_VALID_BLANK ) )
- bBlank = pItem->GetValue();
- if ( const SfxBoolItem* pItem = pOutSet->GetItemIfSet( FID_VALID_CASESENS ) )
- bCaseSensitive = pItem->GetValue();
- if ( const SfxInt16Item* pItem = pOutSet->GetItemIfSet( FID_VALID_LISTTYPE ) )
- nListType = pItem->GetValue();
-
- if ( const SfxBoolItem* pItem = pOutSet->GetItemIfSet( FID_VALID_SHOWHELP ) )
- bShowHelp = pItem->GetValue();
- if ( const SfxStringItem* pItem = pOutSet->GetItemIfSet( FID_VALID_HELPTITLE ) )
- aHelpTitle = pItem->GetValue();
- if ( const SfxStringItem* pItem = pOutSet->GetItemIfSet( FID_VALID_HELPTEXT ) )
- aHelpText = pItem->GetValue();
-
- if ( const SfxBoolItem* pItem = pOutSet->GetItemIfSet( FID_VALID_SHOWERR ) )
- bShowError = pItem->GetValue();
- if ( const SfxUInt16Item* pItem = pOutSet->GetItemIfSet( FID_VALID_ERRSTYLE ) )
- eErrStyle = static_cast<ScValidErrorStyle>(pItem->GetValue());
- if ( const SfxStringItem* pItem = pOutSet->GetItemIfSet( FID_VALID_ERRTITLE ) )
- aErrTitle = pItem->GetValue();
- if ( const SfxStringItem* pItem = pOutSet->GetItemIfSet( FID_VALID_ERRTEXT ) )
- aErrText = pItem->GetValue();
-
- ScValidationData aData( eMode, eOper, aExpr1, aExpr2, rDoc, aCursorPos );
- aData.SetIgnoreBlank( bBlank );
- aData.SetCaseSensitive( bCaseSensitive );
- aData.SetListType( nListType );
-
- aData.SetInput(aHelpTitle, aHelpText); // sets bShowInput to TRUE
- if (!bShowHelp)
- aData.ResetInput(); // reset only bShowInput
-
- aData.SetError(aErrTitle, aErrText, eErrStyle); // sets bShowError to TRUE
- if (!bShowError)
- aData.ResetError(); // reset only bShowError
-
- pTabViewShell->SetValidation( aData );
- pTabViewShell->TestHintWindow();
- rReq.Done( *pOutSet );
- }
+ else
+ {
+ pTabViewShell->TestHintWindow();
+ }
+ });
}
}
break;