summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorTomaž Vajngerl <quikee@gmail.com>2013-07-17 18:04:28 +0200
committerTomaž Vajngerl <quikee@gmail.com>2013-07-19 16:57:37 +0200
commita3759155707ee18ea5013bb42da93fbe9894a0cb (patch)
treeb7346a2471e464259c6f5238d99607679406caed
parentf2c9aa43666101c6970ea33f50fb4e780b99b97c (diff)
SamplingDialog: add random and periodic method of sampling
Change-Id: I1ed75d1434751da017070fb6903f6288defa02b6
-rw-r--r--sc/AllLangResTarget_sc.mk1
-rw-r--r--sc/inc/globstr.hrc2
-rw-r--r--sc/source/ui/StatisticsDialogs/SamplingDialog.cxx182
-rw-r--r--sc/source/ui/StatisticsDialogs/SamplingDialog.src28
-rw-r--r--sc/source/ui/inc/SamplingDialog.hxx9
-rw-r--r--sc/uiconfig/scalc/ui/samplingdialog.ui328
6 files changed, 400 insertions, 150 deletions
diff --git a/sc/AllLangResTarget_sc.mk b/sc/AllLangResTarget_sc.mk
index 536e95461f34..4de23aa4fa0f 100644
--- a/sc/AllLangResTarget_sc.mk
+++ b/sc/AllLangResTarget_sc.mk
@@ -84,6 +84,7 @@ $(eval $(call gb_SrsTarget_add_files,sc/res,\
sc/source/ui/formdlg/dwfunctr.src \
sc/source/ui/sidebar/CellAppearancePropertyPanel.src \
sc/source/ui/StatisticsDialogs/RandomNumberGeneratorDialog.src \
+ sc/source/ui/StatisticsDialogs/SamplingDialog.src \
sc/source/core/src/compiler.src \
))
diff --git a/sc/inc/globstr.hrc b/sc/inc/globstr.hrc
index 31694f1297d5..458e775a1a10 100644
--- a/sc/inc/globstr.hrc
+++ b/sc/inc/globstr.hrc
@@ -704,6 +704,8 @@
#define STR_RNG_PARAMETER_STANDARD_NUMBER_OF_TRIALS 571
#define STR_RNG_PARAMETER_STANDARD_NU_VALUE 572
+#define STR_SAMPLING_UNDO_NAME 573
+
#endif
/* vim:set shiftwidth=4 softtabstop=4 expandtab: */
diff --git a/sc/source/ui/StatisticsDialogs/SamplingDialog.cxx b/sc/source/ui/StatisticsDialogs/SamplingDialog.cxx
index c9e8c3462e01..d78d901f8a13 100644
--- a/sc/source/ui/StatisticsDialogs/SamplingDialog.cxx
+++ b/sc/source/ui/StatisticsDialogs/SamplingDialog.cxx
@@ -55,6 +55,12 @@ ScSamplingDialog::ScSamplingDialog(
get(mpOutputRangeButton, "output-range-button");
mpOutputRangeButton->SetReferences(this, mpOutputRangeEdit);
+ get(mpSampleSize, "sample-size-spin");
+ get(mpPeriod, "period-spin");
+
+ get(mpRandomMethodRadio, "random-method-radio");
+ get(mpPeriodicMethodRadio, "periodic-method-radio");
+
get(mpButtonOk, "ok");
get(mpButtonApply, "apply");
get(mpButtonCancel, "cancel");
@@ -68,6 +74,8 @@ void ScSamplingDialog::Init()
mpButtonOk->SetClickHdl( LINK( this, ScSamplingDialog, OkClicked ) );
mpButtonCancel->SetClickHdl( LINK( this, ScSamplingDialog, CancelClicked ) );
mpButtonApply->SetClickHdl( LINK( this, ScSamplingDialog, ApplyClicked ) );
+ mpButtonOk->Enable(false);
+ mpButtonApply->Enable(false);
Link aLink = LINK( this, ScSamplingDialog, GetFocusHandler );
mpInputRangeEdit->SetGetFocusHdl( aLink );
@@ -80,20 +88,31 @@ void ScSamplingDialog::Init()
mpInputRangeButton->SetLoseFocusHdl( aLink );
mpOutputRangeEdit->SetLoseFocusHdl( aLink );
mpOutputRangeButton->SetLoseFocusHdl( aLink );
+
+ mpSampleSize->SetModifyHdl( LINK( this, ScSamplingDialog, SamplingSizeValueModified ));
+
+ mpPeriodicMethodRadio->SetToggleHdl( LINK( this, ScSamplingDialog, ToggleSamplingMethod ) );
+ mpRandomMethodRadio->SetToggleHdl( LINK( this, ScSamplingDialog, ToggleSamplingMethod ) );
+
+ mpSampleSize->SetMin( 0 );
+ mpSampleSize->SetMax( SAL_MAX_INT64 );
+
+ mpOutputRangeEdit->GrabFocus();
+ mpPeriodicMethodRadio->Check(true);
+
+ ToggleSamplingMethod(NULL);
}
void ScSamplingDialog::GetRangeFromSelection()
{
OUString aCurrentString;
mViewData->GetSimpleArea(mInputRange);
- mInputRange.Format( aCurrentString, ABS_DREF3D, mDocument, mAddressDetails );
- mpInputRangeEdit->SetText( aCurrentString );
+ mInputRange.Format(aCurrentString, ABS_DREF3D, mDocument, mAddressDetails);
+ mpInputRangeEdit->SetText(aCurrentString);
}
-
ScSamplingDialog::~ScSamplingDialog()
-{
-}
+{}
void ScSamplingDialog::SetActive()
{
@@ -133,77 +152,112 @@ void ScSamplingDialog::SetReference( const ScRange& rReferenceRange, ScDocument*
else if ( mpActiveEdit == mpOutputRangeEdit )
{
mOutputAddress = rReferenceRange.aStart;
- sal_uInt16 nFormat = ( mOutputAddress.Tab() == mCurrentAddress.Tab() ) ? SCA_ABS : SCA_ABS_3D;
+
+ sal_uInt16 nFormat = ( mOutputAddress.Tab() == mCurrentAddress.Tab() ) ? SCA_ABS : SCA_ABS_3D;
mOutputAddress.Format( aReferenceString, nFormat, pDocument, pDocument->GetAddressConvention() );
- mpActiveEdit->SetRefString( aReferenceString );
+ mpOutputRangeEdit->SetRefString( aReferenceString );
+
+ // Change sampling size according to output range selection
+ sal_Int64 aSelectedSampleSize = rReferenceRange.aEnd.Row() - rReferenceRange.aStart.Row() + 1;
+ if (aSelectedSampleSize > 1)
+ mpSampleSize->SetValue(aSelectedSampleSize);
+ SamplingSizeValueModified(NULL);
+
+ // Enable OK, Cancel if output range is set
+ mpButtonOk->Enable(!mpOutputRangeEdit->GetText().isEmpty());
+ mpButtonApply->Enable(!mpOutputRangeEdit->GetText().isEmpty());
+
}
}
}
void ScSamplingDialog::PerformSampling()
{
- OUString aUndo("A");
+ OUString aUndo(ScResId(STR_SAMPLING_UNDO_NAME));
ScDocShell* pDocShell = mViewData->GetDocShell();
svl::IUndoManager* pUndoManager = pDocShell->GetUndoManager();
pUndoManager->EnterListAction( aUndo, aUndo );
- SCCOL nColStart = mInputRange.aStart.Col();
- SCCOL nColEnd = mInputRange.aEnd.Col();
- SCROW nRowStart = mInputRange.aStart.Row();
- SCROW nRowEnd = mInputRange.aEnd.Row();
- SCTAB nTabStart = mInputRange.aStart.Tab();
- SCTAB nTabEnd = mInputRange.aEnd.Tab();
-
- TimeValue now;
- osl_getSystemTime(&now);
- boost::mt19937 seed(now.Nanosec);
- boost::uniform_01<boost::mt19937> rng(seed);
-
- SCTAB nOutTab = mOutputAddress.Tab();
- SCCOL nOutCol = mOutputAddress.Col();
- SCROW nOutRow = mOutputAddress.Row();
- for (SCROW nTab = nTabStart; nTab <= nTabEnd; nTab++)
+ ScAddress aStart = mInputRange.aStart;
+ ScAddress aEnd = mInputRange.aEnd;
+
+ SCTAB outTab = mOutputAddress.Tab();
+ SCCOL outCol = mOutputAddress.Col();
+ SCROW outRow = mOutputAddress.Row();
+
+ if (mpRandomMethodRadio->IsChecked())
{
- nOutCol = mOutputAddress.Col();
- for (SCCOL nCol = nColStart; nCol <= nColEnd; nCol++)
- {
- nOutRow = mOutputAddress.Row();
- SCROW nRow = nRowStart;
+ TimeValue now;
+ osl_getSystemTime(&now);
+ boost::mt19937 seed(now.Nanosec);
+ boost::uniform_01<boost::mt19937> rng(seed);
+
+ SCROW inRow;
- SCROW t = 0;
- SCROW N = (nRowEnd - nRowStart) + 1;
- int m = 0;
- int n = 3;
- double u;
+ sal_Int64 aSampleSize = mpSampleSize->GetValue();
- while (m < n)
+ for (SCROW inTab = aStart.Tab(); inTab <= aEnd.Tab(); inTab++)
+ {
+ outCol = mOutputAddress.Col();
+ for (SCCOL inCol = aStart.Col(); inCol <= aEnd.Col(); inCol++)
{
- u = rng();
- if ( (N - t)*u >= n - m )
+ SCROW aPopulationSize = (aEnd.Row() - aStart.Row()) + 1;
+
+ outRow = mOutputAddress.Row();
+ inRow = aStart.Row();
+
+ double aRandomValue;
+
+ while ((outRow - mOutputAddress.Row()) < aSampleSize)
{
- nRow++;
- t++;
+ aRandomValue = rng();
+
+ if ( (aPopulationSize - (inRow - aStart.Row())) * aRandomValue >= aSampleSize - (outRow - mOutputAddress.Row()) )
+ {
+ inRow++;
+ }
+ else
+ {
+ double aValue = mDocument->GetValue( ScAddress(inCol, inRow, inTab) );
+ pDocShell->GetDocFunc().SetValueCell(ScAddress(outCol, outRow, outTab), aValue, true);
+ inRow++;
+ outRow++;
+ }
}
- else
+ outCol++;
+ }
+ outTab++;
+ }
+ }
+ else if (mpPeriodicMethodRadio->IsChecked())
+ {
+ sal_Int64 aPeriod = mpPeriod->GetValue();
+
+ for (SCROW inTab = aStart.Tab(); inTab <= aEnd.Tab(); inTab++)
+ {
+ outCol = mOutputAddress.Col();
+ for (SCCOL inCol = aStart.Col(); inCol <= aEnd.Col(); inCol++)
+ {
+ sal_Int64 i = 0;
+ outRow = mOutputAddress.Row();
+ for (SCROW inRow = aStart.Row(); inRow <= aEnd.Row(); inRow++)
{
- double aValue = mDocument->GetValue( ScAddress(nCol, nRow, nTab) );
- pDocShell->GetDocFunc().SetValueCell(ScAddress(nOutCol, nOutRow, nOutTab), aValue, true);
- nRow++;
- nOutRow++;
- m++;
- t++;
+ if (i % aPeriod == aPeriod - 1 ) // Sample the last of period
+ {
+ double aValue = mDocument->GetValue(ScAddress(inCol, inRow, inTab));
+ pDocShell->GetDocFunc().SetValueCell(ScAddress(outCol, outRow, outTab), aValue, true);
+ outRow++;
+ }
+ i++;
}
+ outCol++;
}
-
- nOutCol++;
+ outTab++;
}
- nOutTab++;
}
- ScRange aOutputRange(mOutputAddress, ScAddress(nOutCol, nOutRow, nOutTab) );
-
+ ScRange aOutputRange(mOutputAddress, ScAddress(outTab, outRow, outTab) );
pUndoManager->LeaveListAction();
-
pDocShell->PostPaint( aOutputRange, PAINT_GRID );
}
@@ -248,4 +302,28 @@ IMPL_LINK_NOARG(ScSamplingDialog, LoseFocusHandler)
return 0;
}
+IMPL_LINK_NOARG(ScSamplingDialog, SamplingSizeValueModified)
+{
+ sal_Int64 aPopulationSize = mInputRange.aEnd.Row() - mInputRange.aStart.Row() + 1;
+ if (mpSampleSize->GetValue() > aPopulationSize)
+ mpSampleSize->SetValue(aPopulationSize);
+ return 0;
+}
+
+IMPL_LINK_NOARG(ScSamplingDialog, ToggleSamplingMethod)
+{
+ if (mpRandomMethodRadio->IsChecked())
+ {
+ mpPeriod->Enable(false);
+ mpSampleSize->Enable(true);
+ }
+ else if (mpPeriodicMethodRadio->IsChecked())
+ {
+ mpPeriod->Enable(true);
+ mpSampleSize->Enable(false);
+ }
+ return 0;
+}
+
+
/* vim:set shiftwidth=4 softtabstop=4 expandtab: */
diff --git a/sc/source/ui/StatisticsDialogs/SamplingDialog.src b/sc/source/ui/StatisticsDialogs/SamplingDialog.src
new file mode 100644
index 000000000000..e7eef3ac9ccb
--- /dev/null
+++ b/sc/source/ui/StatisticsDialogs/SamplingDialog.src
@@ -0,0 +1,28 @@
+/* -*- 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/.
+ *
+ * This file incorporates work covered by the following license notice:
+ *
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements. See the NOTICE file distributed
+ * with this work for additional information regarding copyright
+ * ownership. The ASF licenses this file to you under the Apache
+ * License, Version 2.0 (the "License"); you may not use this file
+ * except in compliance with the License. You may obtain a copy of
+ * the License at http://www.apache.org/licenses/LICENSE-2.0 .
+ */
+
+#include "globstr.hrc"
+
+String STR_SAMPLING_UNDO_NAME
+{
+ Text [ en-US ] = "Sampling";
+};
+
+
+/* vim:set shiftwidth=4 softtabstop=4 expandtab: */
diff --git a/sc/source/ui/inc/SamplingDialog.hxx b/sc/source/ui/inc/SamplingDialog.hxx
index b46524a940bf..c57390586013 100644
--- a/sc/source/ui/inc/SamplingDialog.hxx
+++ b/sc/source/ui/inc/SamplingDialog.hxx
@@ -42,6 +42,12 @@ private:
formula::RefEdit* mpOutputRangeEdit;
formula::RefButton* mpOutputRangeButton;
+ NumericField* mpSampleSize;
+ NumericField* mpPeriod;
+
+ RadioButton* mpRandomMethodRadio;
+ RadioButton* mpPeriodicMethodRadio;
+
PushButton* mpButtonApply;
OKButton* mpButtonOk;
CancelButton* mpButtonCancel;
@@ -70,7 +76,8 @@ private:
DECL_LINK( ApplyClicked, PushButton* );
DECL_LINK( GetFocusHandler, Control* );
DECL_LINK( LoseFocusHandler, void* );
-
+ DECL_LINK( SamplingSizeValueModified, void* );
+ DECL_LINK( ToggleSamplingMethod, void* );
};
#endif
diff --git a/sc/uiconfig/scalc/ui/samplingdialog.ui b/sc/uiconfig/scalc/ui/samplingdialog.ui
index 690c37a53870..cd6bd2155a25 100644
--- a/sc/uiconfig/scalc/ui/samplingdialog.ui
+++ b/sc/uiconfig/scalc/ui/samplingdialog.ui
@@ -2,9 +2,17 @@
<interface>
<!-- interface-requires gtk+ 3.0 -->
<!-- interface-requires LibreOffice 1.0 -->
+ <object class="GtkAdjustment" id="period-adjustment">
+ <property name="lower">1</property>
+ <property name="upper">100</property>
+ <property name="value">1</property>
+ <property name="step_increment">1</property>
+ <property name="page_increment">10</property>
+ </object>
<object class="GtkDialog" id="SamplingDialog">
<property name="can_focus">False</property>
<property name="border_width">5</property>
+ <property name="title" translatable="yes">Sampling</property>
<property name="type_hint">dialog</property>
<child internal-child="vbox">
<object class="GtkBox" id="dialog-vbox1">
@@ -70,119 +78,240 @@
</packing>
</child>
<child>
- <object class="GtkFrame" id="frame1">
+ <object class="GtkGrid" id="grid1">
<property name="visible">True</property>
<property name="can_focus">False</property>
- <property name="label_xalign">0</property>
- <property name="shadow_type">none</property>
+ <property name="row_spacing">6</property>
+ <property name="column_spacing">12</property>
+ <child>
+ <object class="GtkLabel" id="input-range-label">
+ <property name="visible">True</property>
+ <property name="can_focus">False</property>
+ <property name="xalign">0</property>
+ <property name="label" translatable="yes">Input Range</property>
+ </object>
+ <packing>
+ <property name="left_attach">0</property>
+ <property name="top_attach">0</property>
+ <property name="width">1</property>
+ <property name="height">1</property>
+ </packing>
+ </child>
+ <child>
+ <object class="foruilo-RefEdit" id="input-range-edit">
+ <property name="visible">True</property>
+ <property name="can_focus">True</property>
+ <property name="valign">center</property>
+ <property name="hexpand">True</property>
+ <property name="invisible_char">•</property>
+ <property name="width_chars">30</property>
+ <property name="invisible_char_set">True</property>
+ </object>
+ <packing>
+ <property name="left_attach">1</property>
+ <property name="top_attach">0</property>
+ <property name="width">1</property>
+ <property name="height">1</property>
+ </packing>
+ </child>
+ <child>
+ <object class="foruilo-RefButton" id="input-range-button">
+ <property name="visible">True</property>
+ <property name="can_focus">False</property>
+ <property name="receives_default">True</property>
+ </object>
+ <packing>
+ <property name="left_attach">2</property>
+ <property name="top_attach">0</property>
+ <property name="width">1</property>
+ <property name="height">1</property>
+ </packing>
+ </child>
+ <child>
+ <object class="GtkLabel" id="output-range-label">
+ <property name="visible">True</property>
+ <property name="can_focus">False</property>
+ <property name="xalign">0</property>
+ <property name="label" translatable="yes">Output Range</property>
+ </object>
+ <packing>
+ <property name="left_attach">0</property>
+ <property name="top_attach">1</property>
+ <property name="width">1</property>
+ <property name="height">1</property>
+ </packing>
+ </child>
<child>
- <object class="GtkAlignment" id="alignment1">
+ <object class="foruilo-RefEdit" id="output-range-edit">
+ <property name="visible">True</property>
+ <property name="can_focus">True</property>
+ <property name="valign">center</property>
+ <property name="hexpand">True</property>
+ <property name="invisible_char">•</property>
+ <property name="width_chars">30</property>
+ <property name="invisible_char_set">True</property>
+ </object>
+ <packing>
+ <property name="left_attach">1</property>
+ <property name="top_attach">1</property>
+ <property name="width">1</property>
+ <property name="height">1</property>
+ </packing>
+ </child>
+ <child>
+ <object class="foruilo-RefButton" id="output-range-button">
<property name="visible">True</property>
<property name="can_focus">False</property>
- <property name="left_padding">12</property>
+ <property name="receives_default">True</property>
+ </object>
+ <packing>
+ <property name="left_attach">2</property>
+ <property name="top_attach">1</property>
+ <property name="width">1</property>
+ <property name="height">1</property>
+ </packing>
+ </child>
+ <child>
+ <object class="GtkFrame" id="frame2">
+ <property name="visible">True</property>
+ <property name="can_focus">False</property>
+ <property name="label_xalign">0</property>
+ <property name="shadow_type">in</property>
<child>
- <object class="GtkGrid" id="grid1">
+ <object class="GtkAlignment" id="alignment2">
<property name="visible">True</property>
<property name="can_focus">False</property>
- <property name="row_spacing">6</property>
- <property name="column_spacing">12</property>
- <child>
- <object class="GtkLabel" id="input-range-label">
- <property name="visible">True</property>
- <property name="can_focus">False</property>
- <property name="xalign">0</property>
- <property name="label" translatable="yes">Input Range</property>
- </object>
- <packing>
- <property name="left_attach">0</property>
- <property name="top_attach">0</property>
- <property name="width">1</property>
- <property name="height">1</property>
- </packing>
- </child>
+ <property name="top_padding">6</property>
+ <property name="bottom_padding">6</property>
+ <property name="left_padding">12</property>
+ <property name="right_padding">12</property>
<child>
- <object class="foruilo-RefEdit" id="input-range-edit">
- <property name="visible">True</property>
- <property name="can_focus">True</property>
- <property name="valign">center</property>
- <property name="hexpand">True</property>
- <property name="invisible_char">•</property>
- <property name="invisible_char_set">True</property>
- </object>
- <packing>
- <property name="left_attach">1</property>
- <property name="top_attach">0</property>
- <property name="width">1</property>
- <property name="height">1</property>
- </packing>
- </child>
- <child>
- <object class="foruilo-RefButton" id="input-range-button">
- <property name="visible">True</property>
- <property name="can_focus">False</property>
- <property name="receives_default">True</property>
- </object>
- <packing>
- <property name="left_attach">2</property>
- <property name="top_attach">0</property>
- <property name="width">1</property>
- <property name="height">1</property>
- </packing>
- </child>
- <child>
- <object class="GtkLabel" id="output-range-label">
+ <object class="GtkGrid" id="grid2">
<property name="visible">True</property>
<property name="can_focus">False</property>
- <property name="xalign">0</property>
- <property name="label" translatable="yes">Output Range</property>
+ <property name="row_spacing">6</property>
+ <property name="column_spacing">12</property>
+ <child>
+ <object class="GtkSpinButton" id="sample-size-spin">
+ <property name="visible">True</property>
+ <property name="can_focus">False</property>
+ <property name="hexpand">True</property>
+ <property name="invisible_char">•</property>
+ <property name="invisible_char_set">True</property>
+ <property name="adjustment">sample-size-adjustment</property>
+ <property name="update_policy">if-valid</property>
+ </object>
+ <packing>
+ <property name="left_attach">1</property>
+ <property name="top_attach">1</property>
+ <property name="width">1</property>
+ <property name="height">1</property>
+ </packing>
+ </child>
+ <child>
+ <object class="GtkLabel" id="label1">
+ <property name="visible">True</property>
+ <property name="can_focus">False</property>
+ <property name="margin_left">12</property>
+ <property name="hexpand">True</property>
+ <property name="xalign">0</property>
+ <property name="label" translatable="yes">Sample SIze</property>
+ <property name="justify">center</property>
+ </object>
+ <packing>
+ <property name="left_attach">0</property>
+ <property name="top_attach">1</property>
+ <property name="width">1</property>
+ <property name="height">1</property>
+ </packing>
+ </child>
+ <child>
+ <object class="GtkRadioButton" id="random-method-radio">
+ <property name="label" translatable="yes">Random</property>
+ <property name="visible">True</property>
+ <property name="can_focus">False</property>
+ <property name="receives_default">False</property>
+ <property name="xalign">0</property>
+ <property name="draw_indicator">True</property>
+ <property name="group">periodic-method-radio</property>
+ </object>
+ <packing>
+ <property name="left_attach">0</property>
+ <property name="top_attach">0</property>
+ <property name="width">2</property>
+ <property name="height">1</property>
+ </packing>
+ </child>
+ <child>
+ <object class="GtkRadioButton" id="periodic-method-radio">
+ <property name="label" translatable="yes">Periodic</property>
+ <property name="visible">True</property>
+ <property name="can_focus">False</property>
+ <property name="receives_default">False</property>
+ <property name="xalign">0</property>
+ <property name="draw_indicator">True</property>
+ <property name="group">random-method-radio</property>
+ </object>
+ <packing>
+ <property name="left_attach">0</property>
+ <property name="top_attach">2</property>
+ <property name="width">2</property>
+ <property name="height">1</property>
+ </packing>
+ </child>
+ <child>
+ <object class="GtkSpinButton" id="period-spin">
+ <property name="visible">True</property>
+ <property name="can_focus">False</property>
+ <property name="hexpand">True</property>
+ <property name="invisible_char">•</property>
+ <property name="invisible_char_set">True</property>
+ <property name="adjustment">period-adjustment</property>
+ </object>
+ <packing>
+ <property name="left_attach">1</property>
+ <property name="top_attach">3</property>
+ <property name="width">1</property>
+ <property name="height">1</property>
+ </packing>
+ </child>
+ <child>
+ <object class="GtkLabel" id="label3">
+ <property name="visible">True</property>
+ <property name="can_focus">False</property>
+ <property name="margin_left">12</property>
+ <property name="hexpand">True</property>
+ <property name="xalign">0</property>
+ <property name="label" translatable="yes">Period</property>
+ </object>
+ <packing>
+ <property name="left_attach">0</property>
+ <property name="top_attach">3</property>
+ <property name="width">1</property>
+ <property name="height">1</property>
+ </packing>
+ </child>
</object>
- <packing>
- <property name="left_attach">0</property>
- <property name="top_attach">1</property>
- <property name="width">1</property>
- <property name="height">1</property>
- </packing>
- </child>
- <child>
- <object class="foruilo-RefEdit" id="output-range-edit">
- <property name="visible">True</property>
- <property name="can_focus">True</property>
- <property name="valign">center</property>
- <property name="hexpand">True</property>
- <property name="invisible_char">•</property>
- <property name="invisible_char_set">True</property>
- </object>
- <packing>
- <property name="left_attach">1</property>
- <property name="top_attach">1</property>
- <property name="width">1</property>
- <property name="height">1</property>
- </packing>
- </child>
- <child>
- <object class="foruilo-RefButton" id="output-range-button">
- <property name="visible">True</property>
- <property name="can_focus">False</property>
- <property name="receives_default">True</property>
- </object>
- <packing>
- <property name="left_attach">2</property>
- <property name="top_attach">1</property>
- <property name="width">1</property>
- <property name="height">1</property>
- </packing>
</child>
</object>
</child>
+ <child type="label">
+ <object class="GtkLabel" id="label2">
+ <property name="visible">True</property>
+ <property name="can_focus">False</property>
+ <property name="label" translatable="yes">Sampling Method</property>
+ <attributes>
+ <attribute name="weight" value="bold"/>
+ </attributes>
+ </object>
+ </child>
</object>
- </child>
- <child type="label">
- <object class="GtkLabel" id="sampling-label">
- <property name="visible">True</property>
- <property name="can_focus">False</property>
- <property name="xalign">0.4699999988079071</property>
- <property name="label" translatable="yes">Sampling</property>
- </object>
+ <packing>
+ <property name="left_attach">0</property>
+ <property name="top_attach">2</property>
+ <property name="width">3</property>
+ <property name="height">1</property>
+ </packing>
</child>
</object>
<packing>
@@ -199,4 +328,9 @@
<action-widget response="0">cancel</action-widget>
</action-widgets>
</object>
+ <object class="GtkAdjustment" id="sample-size-adjustment">
+ <property name="upper">100</property>
+ <property name="step_increment">1</property>
+ <property name="page_increment">10</property>
+ </object>
</interface>