[Libreoffice-commits] core.git: Branch 'libreoffice-4-4' - sc/source
Eike Rathke
erack at redhat.com
Wed Aug 26 06:51:29 PDT 2015
sc/source/ui/StatisticsDialogs/RandomNumberGeneratorDialog.cxx | 29 +++
sc/source/ui/StatisticsDialogs/SamplingDialog.cxx | 75 ++++++++
sc/source/ui/StatisticsDialogs/StatisticsInputOutputDialog.cxx | 71 +++++++
sc/source/ui/StatisticsDialogs/StatisticsTwoVariableDialog.cxx | 89 +++++++++-
sc/source/ui/inc/RandomNumberGeneratorDialog.hxx | 1
sc/source/ui/inc/SamplingDialog.hxx | 1
sc/source/ui/inc/StatisticsInputOutputDialog.hxx | 1
sc/source/ui/inc/StatisticsTwoVariableDialog.hxx | 1
8 files changed, 259 insertions(+), 9 deletions(-)
New commits:
commit 299dfbdaeb752af1879b7df05b53b802d1d485cd
Author: Eike Rathke <erack at redhat.com>
Date: Tue Aug 25 21:16:43 2015 +0200
Resolves: rhbz#1255811 implement Edit modify handler
... and disable/enable Apply/Ok buttons for in/valid ranges.
(cherry picked from commit ad1284df599f3493e7c76c7f8b4230aab1946558)
implement Edit modify handler, rhbz#1255811 related
Same as in ScRandomNumberGeneratorDialog.
(cherry picked from commit da9ecf1a59b85eb93004507fe55b92f74c2cdb4c)
implement Edit modify handler, rhbz#1255811 related
Same as in ScSamplingDialog.
(cherry picked from commit a88fecdcdbf0b3f6a5ba3375f8193a9dc7ba7422)
implement Edit modify handler, rhbz#1255811 related
Same as in ScStatisticsInputOutputDialog.
(cherry picked from commit b2363e98af7b0281279617e43b8fec5b898b9120)
1bc9296bfc8b1b2b8f3fc20183e2c626f94dee09
ff709ec2284673efa8824a9b8cfc037e4d6d567a
0e3eb06bc86cf77c405c54f312340c7b2551c1ec
Change-Id: I52b5eae2f34e3fca7c0761b14124477a0d160b01
Reviewed-on: https://gerrit.libreoffice.org/18010
Reviewed-by: Caolán McNamara <caolanm at redhat.com>
Tested-by: Caolán McNamara <caolanm at redhat.com>
diff --git a/sc/source/ui/StatisticsDialogs/RandomNumberGeneratorDialog.cxx b/sc/source/ui/StatisticsDialogs/RandomNumberGeneratorDialog.cxx
index 9e9b5c5..e939e0d 100644
--- a/sc/source/ui/StatisticsDialogs/RandomNumberGeneratorDialog.cxx
+++ b/sc/source/ui/StatisticsDialogs/RandomNumberGeneratorDialog.cxx
@@ -104,6 +104,7 @@ void ScRandomNumberGeneratorDialog::Init()
mpInputRangeEdit->SetLoseFocusHdl ( aLink );
mpInputRangeButton->SetLoseFocusHdl ( aLink );
+ mpInputRangeEdit->SetModifyHdl( LINK( this, ScRandomNumberGeneratorDialog, InputRangeModified ));
mpParameter1Value->SetModifyHdl( LINK( this, ScRandomNumberGeneratorDialog, Parameter1ValueModified ));
mpParameter2Value->SetModifyHdl( LINK( this, ScRandomNumberGeneratorDialog, Parameter2ValueModified ));
@@ -157,11 +158,17 @@ void ScRandomNumberGeneratorDialog::SetReference( const ScRange& rReferenceRange
OUString aReferenceString(maInputRange.Format(SCR_ABS_3D, pDoc, pDoc->GetAddressConvention()));
mpInputRangeEdit->SetRefString( aReferenceString );
+
+ mpButtonApply->Enable();
+ mpButtonOk->Enable();
}
}
void ScRandomNumberGeneratorDialog::SelectGeneratorAndGenerateNumbers()
{
+ if (!maInputRange.IsValid())
+ return;
+
sal_Int16 aSelectedIndex = mpDistributionCombo-> GetSelectEntryPos();
sal_Int64 aSelectedId = reinterpret_cast<sal_Int64>(mpDistributionCombo->GetEntryData(aSelectedIndex));
@@ -344,6 +351,28 @@ IMPL_LINK_NOARG(ScRandomNumberGeneratorDialog, LoseFocusHandler)
return 0;
}
+IMPL_LINK_NOARG(ScRandomNumberGeneratorDialog, InputRangeModified)
+{
+ ScRangeList aRangeList;
+ bool bValid = ParseWithNames( aRangeList, mpInputRangeEdit->GetText(), mpDoc);
+ const ScRange* pRange = (bValid && aRangeList.size() == 1) ? aRangeList[0] : nullptr;
+ if (pRange)
+ {
+ maInputRange = *pRange;
+ mpButtonApply->Enable();
+ mpButtonOk->Enable();
+ // Highlight the resulting range.
+ mpInputRangeEdit->StartUpdateData();
+ }
+ else
+ {
+ maInputRange = ScRange( ScAddress::INITIALIZE_INVALID);
+ mpButtonApply->Disable();
+ mpButtonOk->Disable();
+ }
+ return 0;
+}
+
IMPL_LINK_NOARG(ScRandomNumberGeneratorDialog, Parameter1ValueModified)
{
sal_Int16 aSelectedIndex = mpDistributionCombo-> GetSelectEntryPos();
diff --git a/sc/source/ui/StatisticsDialogs/SamplingDialog.cxx b/sc/source/ui/StatisticsDialogs/SamplingDialog.cxx
index a88faaf..25cdef2 100644
--- a/sc/source/ui/StatisticsDialogs/SamplingDialog.cxx
+++ b/sc/source/ui/StatisticsDialogs/SamplingDialog.cxx
@@ -32,7 +32,9 @@ ScSamplingDialog::ScSamplingDialog(
mpActiveEdit ( NULL ),
mViewData ( pViewData ),
mDocument ( pViewData->GetDocument() ),
+ mInputRange ( ScAddress::INITIALIZE_INVALID ),
mAddressDetails ( mDocument->GetAddressConvention(), 0, 0 ),
+ mOutputAddress ( ScAddress::INITIALIZE_INVALID ),
mCurrentAddress ( pViewData->GetCurX(), pViewData->GetCurY(), pViewData->GetTabNo() ),
mDialogLostFocus( false )
{
@@ -77,6 +79,10 @@ void ScSamplingDialog::Init()
mpOutputRangeEdit->SetLoseFocusHdl( aLink );
mpOutputRangeButton->SetLoseFocusHdl( aLink );
+ aLink = LINK( this, ScSamplingDialog, RefInputModifyHandler);
+ mpInputRangeEdit->SetModifyHdl( aLink);
+ mpOutputRangeEdit->SetModifyHdl( aLink);
+
mpSampleSize->SetModifyHdl( LINK( this, ScSamplingDialog, SamplingSizeValueModified ));
mpPeriodicMethodRadio->SetToggleHdl( LINK( this, ScSamplingDialog, ToggleSamplingMethod ) );
@@ -149,11 +155,12 @@ void ScSamplingDialog::SetReference( const ScRange& rReferenceRange, ScDocument*
if (aSelectedSampleSize > 1)
mpSampleSize->SetValue(aSelectedSampleSize);
SamplingSizeValueModified(NULL);
-
- // Enable OK, Cancel if output range is set
- mpButtonOk->Enable(!mpOutputRangeEdit->GetText().isEmpty());
}
}
+
+ // Enable OK if both, input range and output address are set.
+ if (mInputRange.IsValid() && mOutputAddress.IsValid())
+ mpButtonOk->Enable();
}
ScRange ScSamplingDialog::PerformPeriodicSampling(ScDocShell* pDocShell)
@@ -313,4 +320,66 @@ IMPL_LINK_NOARG(ScSamplingDialog, ToggleSamplingMethod)
return 0;
}
+IMPL_LINK_NOARG(ScSamplingDialog, RefInputModifyHandler)
+{
+ if ( mpActiveEdit )
+ {
+ if ( mpActiveEdit == mpInputRangeEdit )
+ {
+ ScRangeList aRangeList;
+ bool bValid = ParseWithNames( aRangeList, mpInputRangeEdit->GetText(), mDocument);
+ const ScRange* pRange = (bValid && aRangeList.size() == 1) ? aRangeList[0] : nullptr;
+ if (pRange)
+ {
+ mInputRange = *pRange;
+ // Highlight the resulting range.
+ mpInputRangeEdit->StartUpdateData();
+ }
+ else
+ {
+ mInputRange = ScRange( ScAddress::INITIALIZE_INVALID);
+ }
+ }
+ else if ( mpActiveEdit == mpOutputRangeEdit )
+ {
+ ScRangeList aRangeList;
+ bool bValid = ParseWithNames( aRangeList, mpOutputRangeEdit->GetText(), mDocument);
+ const ScRange* pRange = (bValid && aRangeList.size() == 1) ? aRangeList[0] : nullptr;
+ if (pRange)
+ {
+ mOutputAddress = pRange->aStart;
+
+ // Crop output range to top left address for Edit field.
+ if (pRange->aStart != pRange->aEnd)
+ {
+ sal_uInt16 nFormat = ( mOutputAddress.Tab() == mCurrentAddress.Tab() ) ? SCA_ABS : SCA_ABS_3D;
+ OUString aReferenceString = mOutputAddress.Format(nFormat, mDocument, mDocument->GetAddressConvention());
+ mpOutputRangeEdit->SetRefString( aReferenceString );
+ }
+
+ // Change sampling size according to output range selection
+ sal_Int64 aSelectedSampleSize = pRange->aEnd.Row() - pRange->aStart.Row() + 1;
+ if (aSelectedSampleSize > 1)
+ mpSampleSize->SetValue(aSelectedSampleSize);
+ SamplingSizeValueModified(NULL);
+
+ // Highlight the resulting range.
+ mpOutputRangeEdit->StartUpdateData();
+ }
+ else
+ {
+ mOutputAddress = ScAddress( ScAddress::INITIALIZE_INVALID);
+ }
+ }
+ }
+
+ // Enable OK if both, input range and output address are set.
+ if (mInputRange.IsValid() && mOutputAddress.IsValid())
+ mpButtonOk->Enable();
+ else
+ mpButtonOk->Disable();
+
+ return 0;
+}
+
/* vim:set shiftwidth=4 softtabstop=4 expandtab: */
diff --git a/sc/source/ui/StatisticsDialogs/StatisticsInputOutputDialog.cxx b/sc/source/ui/StatisticsDialogs/StatisticsInputOutputDialog.cxx
index cb63821..d6636e9 100644
--- a/sc/source/ui/StatisticsDialogs/StatisticsInputOutputDialog.cxx
+++ b/sc/source/ui/StatisticsDialogs/StatisticsInputOutputDialog.cxx
@@ -59,7 +59,9 @@ ScStatisticsInputOutputDialog::ScStatisticsInputOutputDialog(
ScAnyRefDlg ( pSfxBindings, pChildWindow, pParent, rID, rUIXMLDescription ),
mViewData ( pViewData ),
mDocument ( pViewData->GetDocument() ),
+ mInputRange ( ScAddress::INITIALIZE_INVALID ),
mAddressDetails ( mDocument->GetAddressConvention(), 0, 0 ),
+ mOutputAddress ( ScAddress::INITIALIZE_INVALID ),
mGroupedBy ( BY_COLUMN ),
mpActiveEdit ( NULL ),
mCurrentAddress ( pViewData->GetCurX(), pViewData->GetCurY(), pViewData->GetTabNo() ),
@@ -106,6 +108,10 @@ void ScStatisticsInputOutputDialog::Init()
mpOutputRangeEdit->SetLoseFocusHdl( aLink );
mpOutputRangeButton->SetLoseFocusHdl( aLink );
+ aLink = LINK( this, ScStatisticsInputOutputDialog, RefInputModifyHandler);
+ mpInputRangeEdit->SetModifyHdl( aLink);
+ mpOutputRangeEdit->SetModifyHdl( aLink);
+
mpOutputRangeEdit->GrabFocus();
mpGroupByColumnsRadio->SetToggleHdl( LINK( this, ScStatisticsInputOutputDialog, GroupByChanged ) );
@@ -159,11 +165,14 @@ void ScStatisticsInputOutputDialog::SetReference( const ScRange& rReferenceRange
sal_uInt16 nFormat = ( mOutputAddress.Tab() == mCurrentAddress.Tab() ) ? SCA_ABS : SCA_ABS_3D;
aReferenceString = mOutputAddress.Format(nFormat, pDocument, pDocument->GetAddressConvention());
mpOutputRangeEdit->SetRefString( aReferenceString );
-
- // Enable OK, Cancel if output range is set
- mpButtonOk->Enable(!mpOutputRangeEdit->GetText().isEmpty());
}
}
+
+ // Enable OK if both, input range and output address are set.
+ if (mInputRange.IsValid() && mOutputAddress.IsValid())
+ mpButtonOk->Enable();
+ else
+ mpButtonOk->Disable();
}
IMPL_LINK( ScStatisticsInputOutputDialog, OkClicked, PushButton*, /*pButton*/ )
@@ -204,6 +213,62 @@ IMPL_LINK_NOARG( ScStatisticsInputOutputDialog, GroupByChanged )
return 0;
}
+IMPL_LINK_NOARG( ScStatisticsInputOutputDialog, RefInputModifyHandler )
+{
+ if ( mpActiveEdit )
+ {
+ if ( mpActiveEdit == mpInputRangeEdit )
+ {
+ ScRangeList aRangeList;
+ bool bValid = ParseWithNames( aRangeList, mpInputRangeEdit->GetText(), mDocument);
+ const ScRange* pRange = (bValid && aRangeList.size() == 1) ? aRangeList[0] : nullptr;
+ if (pRange)
+ {
+ mInputRange = *pRange;
+ // Highlight the resulting range.
+ mpInputRangeEdit->StartUpdateData();
+ }
+ else
+ {
+ mInputRange = ScRange( ScAddress::INITIALIZE_INVALID);
+ }
+ }
+ else if ( mpActiveEdit == mpOutputRangeEdit )
+ {
+ ScRangeList aRangeList;
+ bool bValid = ParseWithNames( aRangeList, mpOutputRangeEdit->GetText(), mDocument);
+ const ScRange* pRange = (bValid && aRangeList.size() == 1) ? aRangeList[0] : nullptr;
+ if (pRange)
+ {
+ mOutputAddress = pRange->aStart;
+
+ // Crop output range to top left address for Edit field.
+ if (pRange->aStart != pRange->aEnd)
+ {
+ sal_uInt16 nFormat = ( mOutputAddress.Tab() == mCurrentAddress.Tab() ) ? SCA_ABS : SCA_ABS_3D;
+ OUString aReferenceString = mOutputAddress.Format(nFormat, mDocument, mDocument->GetAddressConvention());
+ mpOutputRangeEdit->SetRefString( aReferenceString );
+ }
+
+ // Highlight the resulting range.
+ mpOutputRangeEdit->StartUpdateData();
+ }
+ else
+ {
+ mOutputAddress = ScAddress( ScAddress::INITIALIZE_INVALID);
+ }
+ }
+ }
+
+ // Enable OK if both, input range and output address are set.
+ if (mInputRange.IsValid() && mOutputAddress.IsValid())
+ mpButtonOk->Enable();
+ else
+ mpButtonOk->Disable();
+
+ return 0;
+}
+
void ScStatisticsInputOutputDialog::CalculateInputAndWriteToOutput()
{
OUString aUndo(SC_STRLOAD(RID_STATISTICS_DLGS, GetUndoNameId()));
diff --git a/sc/source/ui/StatisticsDialogs/StatisticsTwoVariableDialog.cxx b/sc/source/ui/StatisticsDialogs/StatisticsTwoVariableDialog.cxx
index 80da64a..b50f421 100644
--- a/sc/source/ui/StatisticsDialogs/StatisticsTwoVariableDialog.cxx
+++ b/sc/source/ui/StatisticsDialogs/StatisticsTwoVariableDialog.cxx
@@ -31,7 +31,10 @@ ScStatisticsTwoVariableDialog::ScStatisticsTwoVariableDialog(
ScAnyRefDlg ( pSfxBindings, pChildWindow, pParent, rID, rUIXMLDescription ),
mViewData ( pViewData ),
mDocument ( pViewData->GetDocument() ),
+ mVariable1Range ( ScAddress::INITIALIZE_INVALID ),
+ mVariable2Range ( ScAddress::INITIALIZE_INVALID ),
mAddressDetails ( mDocument->GetAddressConvention(), 0, 0 ),
+ mOutputAddress ( ScAddress::INITIALIZE_INVALID ),
mGroupedBy ( BY_COLUMN ),
mpActiveEdit ( NULL ),
mCurrentAddress ( pViewData->GetCurX(), pViewData->GetCurY(), pViewData->GetTabNo() ),
@@ -88,6 +91,11 @@ void ScStatisticsTwoVariableDialog::Init()
mpOutputRangeEdit->SetLoseFocusHdl( aLink );
mpOutputRangeButton->SetLoseFocusHdl( aLink );
+ aLink = LINK( this, ScStatisticsTwoVariableDialog, RefInputModifyHandler);
+ mpVariable1RangeEdit->SetModifyHdl( aLink);
+ mpVariable2RangeEdit->SetModifyHdl( aLink);
+ mpOutputRangeEdit->SetModifyHdl( aLink);
+
mpOutputRangeEdit->GrabFocus();
mpGroupByColumnsRadio->SetToggleHdl( LINK( this, ScStatisticsTwoVariableDialog, GroupByChanged ) );
@@ -167,11 +175,14 @@ void ScStatisticsTwoVariableDialog::SetReference( const ScRange& rReferenceRange
sal_uInt16 nFormat = ( mOutputAddress.Tab() == mCurrentAddress.Tab() ) ? SCA_ABS : SCA_ABS_3D;
aReferenceString = mOutputAddress.Format(nFormat, pDocument, pDocument->GetAddressConvention());
mpOutputRangeEdit->SetRefString( aReferenceString );
-
- // Enable OK, Cancel if output range is set
- mpButtonOk->Enable(!mpOutputRangeEdit->GetText().isEmpty());
}
}
+
+ // Enable OK if all ranges are set.
+ if (mVariable1Range.IsValid() && mVariable2Range.IsValid() && mOutputAddress.IsValid())
+ mpButtonOk->Enable();
+ else
+ mpButtonOk->Disable();
}
IMPL_LINK( ScStatisticsTwoVariableDialog, OkClicked, PushButton*, /*pButton*/ )
@@ -222,6 +233,78 @@ IMPL_LINK_NOARG( ScStatisticsTwoVariableDialog, GroupByChanged )
return 0;
}
+IMPL_LINK_NOARG( ScStatisticsTwoVariableDialog, RefInputModifyHandler )
+{
+ if ( mpActiveEdit )
+ {
+ if ( mpActiveEdit == mpVariable1RangeEdit )
+ {
+ ScRangeList aRangeList;
+ bool bValid = ParseWithNames( aRangeList, mpVariable1RangeEdit->GetText(), mDocument);
+ const ScRange* pRange = (bValid && aRangeList.size() == 1) ? aRangeList[0] : nullptr;
+ if (pRange)
+ {
+ mVariable1Range = *pRange;
+ // Highlight the resulting range.
+ mpVariable1RangeEdit->StartUpdateData();
+ }
+ else
+ {
+ mVariable1Range = ScRange( ScAddress::INITIALIZE_INVALID);
+ }
+ }
+ else if ( mpActiveEdit == mpVariable2RangeEdit )
+ {
+ ScRangeList aRangeList;
+ bool bValid = ParseWithNames( aRangeList, mpVariable2RangeEdit->GetText(), mDocument);
+ const ScRange* pRange = (bValid && aRangeList.size() == 1) ? aRangeList[0] : nullptr;
+ if (pRange)
+ {
+ mVariable2Range = *pRange;
+ // Highlight the resulting range.
+ mpVariable2RangeEdit->StartUpdateData();
+ }
+ else
+ {
+ mVariable2Range = ScRange( ScAddress::INITIALIZE_INVALID);
+ }
+ }
+ else if ( mpActiveEdit == mpOutputRangeEdit )
+ {
+ ScRangeList aRangeList;
+ bool bValid = ParseWithNames( aRangeList, mpOutputRangeEdit->GetText(), mDocument);
+ const ScRange* pRange = (bValid && aRangeList.size() == 1) ? aRangeList[0] : nullptr;
+ if (pRange)
+ {
+ mOutputAddress = pRange->aStart;
+
+ // Crop output range to top left address for Edit field.
+ if (pRange->aStart != pRange->aEnd)
+ {
+ sal_uInt16 nFormat = ( mOutputAddress.Tab() == mCurrentAddress.Tab() ) ? SCA_ABS : SCA_ABS_3D;
+ OUString aReferenceString = mOutputAddress.Format(nFormat, mDocument, mDocument->GetAddressConvention());
+ mpOutputRangeEdit->SetRefString( aReferenceString );
+ }
+
+ // Highlight the resulting range.
+ mpOutputRangeEdit->StartUpdateData();
+ }
+ else
+ {
+ mOutputAddress = ScAddress( ScAddress::INITIALIZE_INVALID);
+ }
+ }
+ }
+
+ // Enable OK if all ranges are set.
+ if (mVariable1Range.IsValid() && mVariable2Range.IsValid() && mOutputAddress.IsValid())
+ mpButtonOk->Enable();
+ else
+ mpButtonOk->Disable();
+
+ return 0;
+}
+
void ScStatisticsTwoVariableDialog::CalculateInputAndWriteToOutput()
{
OUString aUndo(SC_STRLOAD(RID_STATISTICS_DLGS, GetUndoNameId()));
diff --git a/sc/source/ui/inc/RandomNumberGeneratorDialog.hxx b/sc/source/ui/inc/RandomNumberGeneratorDialog.hxx
index d940b39..02c6adc 100644
--- a/sc/source/ui/inc/RandomNumberGeneratorDialog.hxx
+++ b/sc/source/ui/inc/RandomNumberGeneratorDialog.hxx
@@ -75,6 +75,7 @@ private:
DECL_LINK( GetFocusHandler, Control* );
DECL_LINK( LoseFocusHandler, void* );
+ DECL_LINK( InputRangeModified, void* );
DECL_LINK( Parameter1ValueModified, void* );
DECL_LINK( Parameter2ValueModified, void* );
DECL_LINK( DistributionChanged, void* );
diff --git a/sc/source/ui/inc/SamplingDialog.hxx b/sc/source/ui/inc/SamplingDialog.hxx
index 022b5e80..2510e3f 100644
--- a/sc/source/ui/inc/SamplingDialog.hxx
+++ b/sc/source/ui/inc/SamplingDialog.hxx
@@ -76,6 +76,7 @@ private:
DECL_LINK( LoseFocusHandler, void* );
DECL_LINK( SamplingSizeValueModified, void* );
DECL_LINK( ToggleSamplingMethod, void* );
+ DECL_LINK( RefInputModifyHandler, void* );
};
#endif
diff --git a/sc/source/ui/inc/StatisticsInputOutputDialog.hxx b/sc/source/ui/inc/StatisticsInputOutputDialog.hxx
index ce60a44..009645a 100644
--- a/sc/source/ui/inc/StatisticsInputOutputDialog.hxx
+++ b/sc/source/ui/inc/StatisticsInputOutputDialog.hxx
@@ -82,6 +82,7 @@ private:
DECL_LINK( OkClicked, PushButton* );
DECL_LINK( GetFocusHandler, Control* );
DECL_LINK( LoseFocusHandler, void* );
+ DECL_LINK( RefInputModifyHandler, void* );
};
#endif
diff --git a/sc/source/ui/inc/StatisticsTwoVariableDialog.hxx b/sc/source/ui/inc/StatisticsTwoVariableDialog.hxx
index 682197c..e176c5f 100644
--- a/sc/source/ui/inc/StatisticsTwoVariableDialog.hxx
+++ b/sc/source/ui/inc/StatisticsTwoVariableDialog.hxx
@@ -85,6 +85,7 @@ private:
DECL_LINK( OkClicked, PushButton* );
DECL_LINK( GetFocusHandler, Control* );
DECL_LINK( LoseFocusHandler, void* );
+ DECL_LINK( RefInputModifyHandler, void* );
};
#endif
More information about the Libreoffice-commits
mailing list