diff options
Diffstat (limited to 'sc/source/ui')
-rw-r--r-- | sc/source/ui/StatisticsDialogs/RandomNumberGeneratorDialog.cxx | 486 | ||||
-rw-r--r-- | sc/source/ui/app/scdll.cxx | 2 | ||||
-rw-r--r-- | sc/source/ui/inc/RandomNumberGeneratorDialog.hxx | 85 | ||||
-rw-r--r-- | sc/source/ui/inc/reffact.hxx | 2 | ||||
-rw-r--r-- | sc/source/ui/view/cellsh.cxx | 1 | ||||
-rw-r--r-- | sc/source/ui/view/cellsh1.cxx | 8 | ||||
-rw-r--r-- | sc/source/ui/view/reffact.cxx | 5 | ||||
-rw-r--r-- | sc/source/ui/view/tabvwsh.cxx | 2 | ||||
-rw-r--r-- | sc/source/ui/view/tabvwshc.cxx | 9 |
9 files changed, 600 insertions, 0 deletions
diff --git a/sc/source/ui/StatisticsDialogs/RandomNumberGeneratorDialog.cxx b/sc/source/ui/StatisticsDialogs/RandomNumberGeneratorDialog.cxx new file mode 100644 index 000000000000..80a2da714e21 --- /dev/null +++ b/sc/source/ui/StatisticsDialogs/RandomNumberGeneratorDialog.cxx @@ -0,0 +1,486 @@ +/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */ +/* + * This file is part of the LibreOffice project. + * + * This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. + * + */ + +#include <sfx2/dispatch.hxx> +#include <svl/zforlist.hxx> +#include <svl/undo.hxx> + +#include "rangelst.hxx" +#include "scitems.hxx" +#include "docsh.hxx" +#include "document.hxx" +#include "uiitems.hxx" +#include "reffact.hxx" +#include "scresid.hxx" +#include "random.hxx" +#include "docfunc.hxx" +#include "globstr.hrc" +#include "sc.hrc" + +#include <boost/random.hpp> +#include <boost/random/uniform_real_distribution.hpp> +#include <boost/random/uniform_int_distribution.hpp> +#include <boost/random/binomial_distribution.hpp> +#include <boost/random/normal_distribution.hpp> +#include <boost/random/cauchy_distribution.hpp> +#include <boost/random/bernoulli_distribution.hpp> +#include <boost/random/binomial_distribution.hpp> +#include <boost/random/chi_squared_distribution.hpp> +#include <boost/random/geometric_distribution.hpp> +#include <boost/random/negative_binomial_distribution.hpp> + +#include "RandomNumberGeneratorDialog.hxx" + +#define ABS_DREF3D SCA_VALID | SCA_COL_ABSOLUTE | SCA_ROW_ABSOLUTE | SCA_TAB_ABSOLUTE | SCA_COL2_ABSOLUTE | SCA_ROW2_ABSOLUTE | SCA_TAB2_ABSOLUTE | SCA_TAB_3D + +namespace +{ + +static const sal_Int64 DIST_UNIFORM = 0; +static const sal_Int64 DIST_NORMAL = 1; +static const sal_Int64 DIST_CAUCHY = 2; +static const sal_Int64 DIST_BERNOULLI = 3; +static const sal_Int64 DIST_BINOMIAL = 4; +static const sal_Int64 DIST_CHI_SQUARED = 5; +static const sal_Int64 DIST_GEOMETRIC = 6; +static const sal_Int64 DIST_NEGATIVE_BINOMIAL = 7; +static const sal_Int64 DIST_UNIFORM_INTEGER = 8; + +static const sal_Int64 PERCISION = 10000; +static const sal_Int64 DIGITS = 4; +} + +ScRandomNumberGeneratorDialog::ScRandomNumberGeneratorDialog( + SfxBindings* pB, SfxChildWindow* pCW, Window* pParent, ScViewData* pViewData ) : + ScAnyRefDlg ( pB, pCW, pParent, "RandomNumberGeneratorDialog", "modules/scalc/ui/randomnumbergenerator.ui" ), + mViewData ( pViewData ), + mDocument ( pViewData->GetDocument() ), + mAddressDetails ( mDocument->GetAddressConvention(), 0, 0 ), + mDialogLostFocus( false ) +{ + get(mpFtVariableCell, "cell-range-label"); + get(mpEdVariableCell, "cell-range-edit"); + mpEdVariableCell->SetReferences(this, mpFtVariableCell); + get(mpRBVariableCell, "cell-range-button"); + mpRBVariableCell->SetReferences(this, mpEdVariableCell); + + get(mpButtonOk, "ok"); + get(mpButtonApply, "apply"); + get(mpButtonCancel, "cancel"); + + get(mpParameter1Value, "parameter1-spin"); + get(mpParameter1Text, "parameter1-label"); + get(mpParameter2Value, "parameter2-spin"); + get(mpParameter2Text, "parameter2-label"); + + get(mpEnableSeed, "enable-seed-check"); + get(mpSeed, "seed-spin"); + + get(mpDistributionCombo, "distribution-combo"); + + Init(); + GetRangeFromSelection(); +} + +void ScRandomNumberGeneratorDialog::Init() +{ + mpButtonOk->SetClickHdl( LINK( this, ScRandomNumberGeneratorDialog, OkClicked ) ); + mpButtonCancel->SetClickHdl( LINK( this, ScRandomNumberGeneratorDialog, CancelClicked ) ); + mpButtonApply->SetClickHdl( LINK( this, ScRandomNumberGeneratorDialog, ApplyClicked ) ); + + Link aLink = LINK( this, ScRandomNumberGeneratorDialog, GetFocusHandler ); + mpEdVariableCell->SetGetFocusHdl( aLink ); + mpRBVariableCell->SetGetFocusHdl( aLink ); + + aLink = LINK( this, ScRandomNumberGeneratorDialog, LoseFocusHandler ); + mpEdVariableCell->SetLoseFocusHdl ( aLink ); + mpRBVariableCell->SetLoseFocusHdl ( aLink ); + + mpParameter1Value->SetModifyHdl( LINK( this, ScRandomNumberGeneratorDialog, Parameter1ValueModified )); + mpParameter2Value->SetModifyHdl( LINK( this, ScRandomNumberGeneratorDialog, Parameter2ValueModified )); + + mpDistributionCombo->SetSelectHdl( LINK( this, ScRandomNumberGeneratorDialog, DistributionChanged )); + + mpEnableSeed->SetToggleHdl( LINK( this, ScRandomNumberGeneratorDialog, SeedCheckChanged )); + + mpParameter1Value->SetMin( SAL_MIN_INT64 ); + mpParameter1Value->SetMax( SAL_MAX_INT64 ); + mpParameter2Value->SetMin( SAL_MIN_INT64 ); + mpParameter2Value->SetMax( SAL_MAX_INT64 ); + + DistributionChanged(NULL); + SeedCheckChanged(NULL); +} + +void ScRandomNumberGeneratorDialog::GetRangeFromSelection() +{ + String aCurrentString; + + SCCOL nStartCol = 0; + SCROW nStartRow = 0; + SCTAB nStartTab = 0; + SCCOL nEndCol = 0; + SCROW nEndRow = 0; + SCTAB nEndTab = 0; + + mViewData->GetSimpleArea( nStartCol, nStartRow, nStartTab, + nEndCol, nEndRow, nEndTab ); + + mCurrentRange = ScRange( ScAddress( nStartCol, nStartRow, nStartTab ), + ScAddress( nEndCol, nEndRow, nEndTab ) ); + + mCurrentRange.Format( aCurrentString, ABS_DREF3D, mDocument, mAddressDetails ); + + mpEdVariableCell->SetText( aCurrentString ); +} + + +ScRandomNumberGeneratorDialog::~ScRandomNumberGeneratorDialog() +{ +} + +void ScRandomNumberGeneratorDialog::SetActive() +{ + if ( mDialogLostFocus ) + { + mDialogLostFocus = false; + if( mpEdVariableCell ) + mpEdVariableCell->GrabFocus(); + } + else + { + GrabFocus(); + } + RefInputDone(); +} + +sal_Bool ScRandomNumberGeneratorDialog::Close() +{ + return DoClose( ScRandomNumberGeneratorDialogWrapper::GetChildWindowId() ); +} + +void ScRandomNumberGeneratorDialog::SetReference( const ScRange& rReferenceRange, ScDocument* pDocument ) +{ + if ( mpEdVariableCell->IsEnabled() ) + { + if ( rReferenceRange.aStart != rReferenceRange.aEnd ) + RefInputStart( mpEdVariableCell ); + + mCurrentRange = rReferenceRange; + + String aReferenceString; + mCurrentRange.Format( aReferenceString, ABS_DREF3D, pDocument, mAddressDetails ); + mpEdVariableCell->SetRefString( aReferenceString ); + } +} + +void ScRandomNumberGeneratorDialog::SelectGeneratorAndGenerateNumbers() +{ + sal_Int16 aSelectedIndex = mpDistributionCombo-> GetSelectEntryPos(); + sal_Int64 aSelectedId = (sal_Int64) mpDistributionCombo->GetEntryData(aSelectedIndex); + + sal_uInt32 seedValue; + + if( mpEnableSeed->IsChecked() ) + { + seedValue = mpSeed->GetValue(); + } + else + { + TimeValue now; + osl_getSystemTime(&now); + seedValue = now.Nanosec; + } + + boost::mt19937 seed(seedValue); + + sal_Int64 parameterInteger1 = mpParameter1Value->GetValue(); + sal_Int64 parameterInteger2 = mpParameter2Value->GetValue(); + + double parameter1 = parameterInteger1 / static_cast<double>(PERCISION); + double parameter2 = parameterInteger2 / static_cast<double>(PERCISION); + + switch(aSelectedId) + { + case DIST_UNIFORM: + { + boost::random::uniform_real_distribution<> distribution(parameter1, parameter2); + boost::variate_generator<boost::mt19937&, boost::random::uniform_real_distribution<> > rng(seed, distribution); + GenerateNumbers(rng, OUString("Uniform Real")); + break; + } + case DIST_UNIFORM_INTEGER: + { + boost::random::uniform_int_distribution<> distribution(parameterInteger1, parameterInteger2); + boost::variate_generator<boost::mt19937&, boost::random::uniform_int_distribution<> > rng(seed, distribution); + GenerateNumbers(rng, OUString("Uniform Integer")); + break; + } + case DIST_NORMAL: + { + boost::random::normal_distribution<> distribution(parameter1, parameter2); + boost::variate_generator<boost::mt19937&, boost::random::normal_distribution<> > rng(seed, distribution); + GenerateNumbers(rng, OUString("Normal")); + break; + } + case DIST_CAUCHY: + { + boost::random::cauchy_distribution<> distribution(parameter1); + boost::variate_generator<boost::mt19937&, boost::random::cauchy_distribution<> > rng(seed, distribution); + GenerateNumbers(rng, OUString("Cauchy")); + break; + } + case DIST_BERNOULLI: + { + boost::random::bernoulli_distribution<> distribution(parameter1); + boost::variate_generator<boost::mt19937&, boost::random::bernoulli_distribution<> > rng(seed, distribution); + GenerateNumbers(rng, OUString("Bernoulli")); + break; + } + case DIST_BINOMIAL: + { + boost::random::binomial_distribution<> distribution(parameterInteger2, parameter1); + boost::variate_generator<boost::mt19937&, boost::random::binomial_distribution<> > rng(seed, distribution); + GenerateNumbers(rng, OUString("Binomial")); + break; + } + case DIST_NEGATIVE_BINOMIAL: + { + boost::random::negative_binomial_distribution<> distribution(parameterInteger2, parameter1); + boost::variate_generator<boost::mt19937&, boost::random::negative_binomial_distribution<> > rng(seed, distribution); + GenerateNumbers(rng, OUString("Negative Binomial")); + break; + } + case DIST_CHI_SQUARED: + { + boost::random::chi_squared_distribution<> distribution(parameter1); + boost::variate_generator<boost::mt19937&, boost::random::chi_squared_distribution<> > rng(seed, distribution); + GenerateNumbers(rng, OUString("Chi Squared")); + break; + } + case DIST_GEOMETRIC: + { + boost::random::geometric_distribution<> distribution(parameter1); + boost::variate_generator<boost::mt19937&, boost::random::geometric_distribution<> > rng(seed, distribution); + GenerateNumbers(rng, OUString("Geometric")); + break; + } + } +} + +template<class RNG> +void ScRandomNumberGeneratorDialog::GenerateNumbers(RNG randomGenerator, OUString aDistributionName) +{ + OUString aUndo("Random ("); + aUndo += aDistributionName; + aUndo += ")"; + ScDocShell* pDocShell = mViewData->GetDocShell(); + svl::IUndoManager* pUndoManager = pDocShell->GetUndoManager(); + pUndoManager->EnterListAction( aUndo, aUndo ); + + SCROW nRowStart = mCurrentRange.aStart.Row(); + SCROW nRowEnd = mCurrentRange.aEnd.Row(); + SCCOL nColStart = mCurrentRange.aStart.Col(); + SCCOL nColEnd = mCurrentRange.aEnd.Col(); + SCTAB nTabStart = mCurrentRange.aStart.Tab(); + SCTAB nTabEnd = mCurrentRange.aEnd.Tab(); + + for (SCROW nTab = nTabStart; nTab <= nTabEnd; nTab++) + { + for (SCROW nRow = nRowStart; nRow <= nRowEnd; nRow++) + { + for (SCCOL nCol = nColStart; nCol <= nColEnd; nCol++) + { + pDocShell->GetDocFunc().SetValueCell(ScAddress(nCol, nRow, nTab), randomGenerator(), true); + } + } + } + + pUndoManager->LeaveListAction(); + + pDocShell->PostPaint( mCurrentRange, PAINT_GRID ); +} + +IMPL_LINK( ScRandomNumberGeneratorDialog, OkClicked, PushButton*, /*pButton*/ ) +{ + SelectGeneratorAndGenerateNumbers(); + Close(); + return 0; +} + + +IMPL_LINK( ScRandomNumberGeneratorDialog, ApplyClicked, PushButton*, /*pButton*/ ) +{ + SelectGeneratorAndGenerateNumbers(); + return 0; +} + +IMPL_LINK( ScRandomNumberGeneratorDialog, CancelClicked, PushButton*, /*pButton*/ ) +{ + Close(); + return 0; +} + +IMPL_LINK( ScRandomNumberGeneratorDialog, GetFocusHandler, Control*, pCtrl ) +{ + Edit* pEdit = NULL; + + if( (pCtrl == (Control*)mpEdVariableCell) || (pCtrl == (Control*)mpRBVariableCell) ) + pEdit = mpEdVariableCell; + + if( pEdit ) + pEdit->SetSelection( Selection( 0, SELECTION_MAX ) ); + + return 0; +} + +IMPL_LINK_NOARG(ScRandomNumberGeneratorDialog, LoseFocusHandler) +{ + mDialogLostFocus = !IsActive(); + return 0; +} + +IMPL_LINK_NOARG(ScRandomNumberGeneratorDialog, Parameter1ValueModified) +{ + sal_Int16 aSelectedIndex = mpDistributionCombo-> GetSelectEntryPos(); + sal_Int64 aSelectedId = (sal_Int64) mpDistributionCombo->GetEntryData(aSelectedIndex); + if (aSelectedId == DIST_UNIFORM || + aSelectedId == DIST_UNIFORM_INTEGER) + { + sal_Int64 min = mpParameter1Value->GetValue(); + sal_Int64 max = mpParameter2Value->GetValue(); + if(min > max) + { + mpParameter2Value->SetValue(min); + } + } + return 0; +} + +IMPL_LINK_NOARG(ScRandomNumberGeneratorDialog, Parameter2ValueModified) +{ + sal_Int16 aSelectedIndex = mpDistributionCombo-> GetSelectEntryPos(); + sal_Int64 aSelectedId = (sal_Int64) mpDistributionCombo->GetEntryData(aSelectedIndex); + if (aSelectedId == DIST_UNIFORM || + aSelectedId == DIST_UNIFORM_INTEGER) + { + sal_Int64 min = mpParameter1Value->GetValue(); + sal_Int64 max = mpParameter2Value->GetValue(); + if(min > max) + { + mpParameter1Value->SetValue(max); + } + } + return 0; +} + +IMPL_LINK_NOARG(ScRandomNumberGeneratorDialog, SeedCheckChanged) +{ + mpSeed->Enable(mpEnableSeed->IsChecked()); + return 0; +} + +IMPL_LINK_NOARG(ScRandomNumberGeneratorDialog, DistributionChanged) +{ + sal_Int16 aSelectedIndex = mpDistributionCombo-> GetSelectEntryPos(); + sal_Int64 aSelectedId = (sal_Int64) mpDistributionCombo->GetEntryData(aSelectedIndex); + + mpParameter1Value->SetMin( SAL_MIN_INT64 ); + mpParameter1Value->SetMax( SAL_MAX_INT64 ); + mpParameter2Value->SetMin( SAL_MIN_INT64 ); + mpParameter2Value->SetMax( SAL_MAX_INT64 ); + + mpParameter1Value->SetDecimalDigits(DIGITS); + mpParameter1Value->SetSpinSize(PERCISION); + + mpParameter2Value->SetDecimalDigits(DIGITS); + mpParameter2Value->SetSpinSize(PERCISION); + + switch(aSelectedId) + { + case DIST_UNIFORM: + { + mpParameter1Text->SetText(OUString("Minimum")); + mpParameter2Text->SetText(OUString("Maximum")); + mpParameter2Text->Show(); + mpParameter2Value->Show(); + break; + } + case DIST_UNIFORM_INTEGER: + { + mpParameter1Text->SetText(OUString("Minimum")); + mpParameter1Value->SetDecimalDigits(0); + mpParameter1Value->SetSpinSize(1); + + mpParameter2Text->SetText(OUString("Maximum")); + mpParameter2Value->SetDecimalDigits(0); + mpParameter2Value->SetSpinSize(1); + + mpParameter2Text->Show(); + mpParameter2Value->Show(); + break; + } + case DIST_NORMAL: + { + mpParameter1Text->SetText(OUString("Mean")); + mpParameter2Text->SetText(OUString("Standard Deviation")); + mpParameter2Text->Show(); + mpParameter2Value->Show(); + break; + } + case DIST_CAUCHY: + { + mpParameter1Text->SetText(OUString("Median")); + mpParameter2Text->SetText(OUString("Sigma")); + mpParameter2Text->Show(); + mpParameter2Value->Show(); + break; + } + case DIST_BERNOULLI: + case DIST_GEOMETRIC: + { + mpParameter1Text->SetText(OUString("p Value")); + mpParameter1Value->SetMin( 0 ); + mpParameter1Value->SetMax( PERCISION ); + mpParameter1Value->SetSpinSize(1000); + + mpParameter2Text->Hide(); + mpParameter2Value->Hide(); + break; + } + case DIST_BINOMIAL: + case DIST_NEGATIVE_BINOMIAL: + { + mpParameter1Text->SetText(OUString("p Value")); + mpParameter1Value->SetMin( 0 ); + mpParameter1Value->SetMax( PERCISION ); + mpParameter1Value->SetSpinSize(1000); + + mpParameter2Text->SetText(OUString("Number Of Trials")); + mpParameter2Text->Show(); + mpParameter2Value->Show(); + mpParameter2Value->SetDecimalDigits(0); + mpParameter2Value->SetSpinSize(1); + break; + } + case DIST_CHI_SQUARED: + { + mpParameter1Text->SetText(OUString("nu Value")); + + mpParameter2Text->Hide(); + mpParameter2Value->Hide(); + break; + } + } + return 0; +} + + +/* vim:set shiftwidth=4 softtabstop=4 expandtab: */ diff --git a/sc/source/ui/app/scdll.cxx b/sc/source/ui/app/scdll.cxx index b31a45e74874..553399fe2903 100644 --- a/sc/source/ui/app/scdll.cxx +++ b/sc/source/ui/app/scdll.cxx @@ -270,6 +270,8 @@ void ScDLL::Init() ScColRowNameRangesDlgWrapper::RegisterChildWindow(false, pMod); ScFormulaDlgWrapper ::RegisterChildWindow(false, pMod); + ScRandomNumberGeneratorDialogWrapper::RegisterChildWindow(false, pMod); + // First docking Window for Calc ScFunctionChildWindow ::RegisterChildWindow(false, pMod); diff --git a/sc/source/ui/inc/RandomNumberGeneratorDialog.hxx b/sc/source/ui/inc/RandomNumberGeneratorDialog.hxx new file mode 100644 index 000000000000..1f5ea8018bc9 --- /dev/null +++ b/sc/source/ui/inc/RandomNumberGeneratorDialog.hxx @@ -0,0 +1,85 @@ +/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */ +/* + * This file is part of the LibreOffice project. + * + * This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. + * + */ + +#ifndef RANDOM_NUMBER_GENERATION_HXX +#define RANDOM_NUMBER_GENERATION_HXX + +#include "global.hxx" +#include "address.hxx" +#include "anyrefdg.hxx" + + +#include <vcl/fixed.hxx> +#include <vcl/group.hxx> +#include <vcl/lstbox.hxx> + +class ScRandomNumberGeneratorDialog : public ScAnyRefDlg +{ +public: + ScRandomNumberGeneratorDialog( + SfxBindings* pB, SfxChildWindow* pCW, + Window* pParent, ScViewData* pViewData ); + + virtual ~ScRandomNumberGeneratorDialog(); + + virtual void SetReference( const ScRange& rRef, ScDocument* pDoc ); + virtual void SetActive(); + virtual sal_Bool Close(); + +private: + // Widgets + FixedText* mpFtVariableCell; + formula::RefEdit* mpEdVariableCell; + formula::RefButton* mpRBVariableCell; + ListBox* mpDistributionCombo; + FixedText* mpParameter1Text; + NumericField* mpParameter1Value; + FixedText* mpParameter2Text; + NumericField* mpParameter2Value; + NumericField* mpSeed; + CheckBox* mpEnableSeed; + PushButton* mpButtonApply; + OKButton* mpButtonOk; + CancelButton* mpButtonCancel; + + // Data + ScViewData* mViewData; + ScDocument* mDocument; + + ScRange mCurrentRange; + ScAddress::Details mAddressDetails; + + bool mDialogLostFocus; + + void Init(); + void GetRangeFromSelection(); + + template<class RNG> + void GenerateNumbers(RNG randomGenerator, OUString aDistributionName); + + void SelectGeneratorAndGenerateNumbers(); + + DECL_LINK( OkClicked, PushButton* ); + DECL_LINK( CancelClicked, PushButton* ); + DECL_LINK( ApplyClicked, PushButton* ); + DECL_LINK( GetFocusHandler, Control* ); + DECL_LINK( LoseFocusHandler, void* ); + + DECL_LINK( Parameter1ValueModified, void* ); + DECL_LINK( Parameter2ValueModified, void* ); + DECL_LINK( DistributionChanged, void* ); + DECL_LINK( SeedCheckChanged, void* ); + +}; + +#endif // SC_SOLVRDLG_HXX + + +/* vim:set shiftwidth=4 softtabstop=4 expandtab: */ diff --git a/sc/source/ui/inc/reffact.hxx b/sc/source/ui/inc/reffact.hxx index 215836c39876..aa94ff1108eb 100644 --- a/sc/source/ui/inc/reffact.hxx +++ b/sc/source/ui/inc/reffact.hxx @@ -50,6 +50,8 @@ DECL_WRAPPER_WITHID(ScColRowNameRangesDlgWrapper) DECL_WRAPPER_WITHID(ScFormulaDlgWrapper) DECL_WRAPPER_WITHID(ScHighlightChgDlgWrapper) +DECL_WRAPPER_WITHID(ScRandomNumberGeneratorDialogWrapper) + class ScAcceptChgDlgWrapper: public SfxChildWindow { public: diff --git a/sc/source/ui/view/cellsh.cxx b/sc/source/ui/view/cellsh.cxx index 9431b90729ed..05d55f4dee3e 100644 --- a/sc/source/ui/view/cellsh.cxx +++ b/sc/source/ui/view/cellsh.cxx @@ -171,6 +171,7 @@ void ScCellShell::GetBlockState( SfxItemSet& rSet ) } break; case FID_FILL_SERIES: // fill block + case SID_OPENDLG_RANDOM_NUMBER_GENERATOR: case SID_OPENDLG_TABOP: // multiple-cell operations, are at least 2 cells marked? if (pDoc->GetChangeTrack()!=NULL &&nWhich ==SID_OPENDLG_TABOP) bDisable = sal_True; diff --git a/sc/source/ui/view/cellsh1.cxx b/sc/source/ui/view/cellsh1.cxx index 23bbec0b5501..daac7ec9ca4b 100644 --- a/sc/source/ui/view/cellsh1.cxx +++ b/sc/source/ui/view/cellsh1.cxx @@ -903,7 +903,15 @@ void ScCellShell::ExecuteEdit( SfxRequest& rReq ) } } break; + case SID_OPENDLG_RANDOM_NUMBER_GENERATOR: + { + sal_uInt16 nId = ScRandomNumberGeneratorDialogWrapper::GetChildWindowId(); + SfxViewFrame* pViewFrm = pTabViewShell->GetViewFrame(); + SfxChildWindow* pWnd = pViewFrm->GetChildWindow( nId ); + pScMod->SetRefDialog( nId, pWnd ? false : sal_True ); + } + break; // // disposal (Outlines) // SID_AUTO_OUTLINE, SID_OUTLINE_DELETEALL in Execute (in docsh.idl) diff --git a/sc/source/ui/view/reffact.cxx b/sc/source/ui/view/reffact.cxx index 687b5271c71b..cf7e796af408 100644 --- a/sc/source/ui/view/reffact.cxx +++ b/sc/source/ui/view/reffact.cxx @@ -50,6 +50,9 @@ SFX_IMPL_MODELESSDIALOG_WITHID(ScFormulaDlgWrapper, SID_OPENDLG_FUNCTION ) SFX_IMPL_MODELESSDIALOG_WITHID(ScAcceptChgDlgWrapper, FID_CHG_ACCEPT ) SFX_IMPL_MODELESSDIALOG_WITHID(ScHighlightChgDlgWrapper, FID_CHG_SHOW ) SFX_IMPL_MODELESSDIALOG_WITHID(ScSimpleRefDlgWrapper, WID_SIMPLE_REF ) + +SFX_IMPL_MODELESSDIALOG_WITHID(ScRandomNumberGeneratorDialogWrapper, SID_OPENDLG_RANDOM_NUMBER_GENERATOR ) + SFX_IMPL_CHILDWINDOW_WITHID(ScValidityRefChildWin, SID_VALIDITY_REFERENCE) SfxChildWinInfo ScValidityRefChildWin::GetInfo() const @@ -177,6 +180,8 @@ IMPL_CHILD_CTOR( ScPrintAreasDlgWrapper, SID_OPENDLG_EDIT_PRINTAREA ) IMPL_CHILD_CTOR( ScFormulaDlgWrapper, SID_OPENDLG_FUNCTION ) +IMPL_CHILD_CTOR( ScRandomNumberGeneratorDialogWrapper, SID_OPENDLG_RANDOM_NUMBER_GENERATOR ) + //------------------------------------------------------------------------- // ScSimpleRefDlgWrapper //------------------------------------------------------------------------- diff --git a/sc/source/ui/view/tabvwsh.cxx b/sc/source/ui/view/tabvwsh.cxx index 7949e1776b78..c53bf66f0e84 100644 --- a/sc/source/ui/view/tabvwsh.cxx +++ b/sc/source/ui/view/tabvwsh.cxx @@ -80,6 +80,8 @@ SFX_IMPL_INTERFACE(ScTabViewShell,SfxViewShell,ScResId(SCSTR_TABVIEWSHELL)) SFX_CHILDWINDOW_REGISTRATION(GalleryChildWindow::GetChildWindowId()); SFX_CHILDWINDOW_REGISTRATION(ScSpellDialogChildWindow::GetChildWindowId()); SFX_CHILDWINDOW_REGISTRATION(ScValidityRefChildWin::GetChildWindowId()); + + SFX_CHILDWINDOW_REGISTRATION(ScRandomNumberGeneratorDialogWrapper::GetChildWindowId()); } SFX_IMPL_NAMED_VIEWFACTORY( ScTabViewShell, "Default" ) diff --git a/sc/source/ui/view/tabvwshc.cxx b/sc/source/ui/view/tabvwshc.cxx index f8e7763d35ad..a613c77b30d8 100644 --- a/sc/source/ui/view/tabvwshc.cxx +++ b/sc/source/ui/view/tabvwshc.cxx @@ -61,6 +61,8 @@ #include "condformatdlg.hxx" #include "xmlsourcedlg.hxx" +#include "RandomNumberGeneratorDialog.hxx" + //------------------------------------------------------------------ void ScTabViewShell::SetCurRefDlgId( sal_uInt16 nNew ) @@ -311,6 +313,13 @@ SfxModelessDialog* ScTabViewShell::CreateRefDialog( } break; + case SID_OPENDLG_RANDOM_NUMBER_GENERATOR: + { + ScViewData* pViewData = GetViewData(); + pResult = new ScRandomNumberGeneratorDialog( pB, pCW, pParent, pViewData ); + } + break; + case SID_OPENDLG_OPTSOLVER: { ScViewData* pViewData = GetViewData(); |