summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorTomaž Vajngerl <tomaz.vajngerl@collabora.co.uk>2022-03-12 23:30:40 +0900
committerTomaž Vajngerl <quikee@gmail.com>2022-04-03 09:06:59 +0200
commit602f653a65f432e5f75acef8fef21189392a05e1 (patch)
treeb9a0075bf0c00228817cc2504e2dc53cfdd0de20
parentc61aa2dea120cc083f3cd51f0347284f47a9d566 (diff)
sc: SparklineDialog add type, colors and properties
Change-Id: Ie8243985d61cc719fd0444b0e1aaf18f43489d5c Reviewed-on: https://gerrit.libreoffice.org/c/core/+/132466 Tested-by: Tomaž Vajngerl <quikee@gmail.com> Reviewed-by: Tomaž Vajngerl <quikee@gmail.com>
-rw-r--r--sc/inc/SparklineGroup.hxx14
-rw-r--r--sc/source/ui/dialogs/SparklineDialog.cxx113
-rw-r--r--sc/source/ui/inc/SparklineDialog.hxx28
-rw-r--r--sc/uiconfig/scalc/ui/sparklinedialog.ui501
4 files changed, 639 insertions, 17 deletions
diff --git a/sc/inc/SparklineGroup.hxx b/sc/inc/SparklineGroup.hxx
index c6df94e1bdc5..0d3935492d04 100644
--- a/sc/inc/SparklineGroup.hxx
+++ b/sc/inc/SparklineGroup.hxx
@@ -80,13 +80,13 @@ public:
SparklineGroup()
: m_aColorSeries(COL_BLUE)
- , m_aColorNegative(COL_TRANSPARENT)
- , m_aColorAxis(COL_TRANSPARENT)
- , m_aColorMarkers(COL_TRANSPARENT)
- , m_aColorFirst(COL_TRANSPARENT)
- , m_aColorLast(COL_TRANSPARENT)
- , m_aColorHigh(COL_TRANSPARENT)
- , m_aColorLow(COL_TRANSPARENT)
+ , m_aColorNegative(COL_RED)
+ , m_aColorAxis(COL_RED)
+ , m_aColorMarkers(COL_RED)
+ , m_aColorFirst(COL_RED)
+ , m_aColorLast(COL_RED)
+ , m_aColorHigh(COL_RED)
+ , m_aColorLow(COL_RED)
, m_eMinAxisType(AxisType::Individual)
, m_eMaxAxisType(AxisType::Individual)
, m_fLineWeight(0.75)
diff --git a/sc/source/ui/dialogs/SparklineDialog.cxx b/sc/source/ui/dialogs/SparklineDialog.cxx
index 5a167fe8b7c1..fac1d8274be5 100644
--- a/sc/source/ui/dialogs/SparklineDialog.cxx
+++ b/sc/source/ui/dialogs/SparklineDialog.cxx
@@ -12,6 +12,8 @@
#include <Sparkline.hxx>
#include <reffact.hxx>
+#include <svx/colorbox.hxx>
+
namespace sc
{
SparklineDialog::SparklineDialog(SfxBindings* pBindings, SfxChildWindow* pChildWindow,
@@ -30,6 +32,30 @@ SparklineDialog::SparklineDialog(SfxBindings* pBindings, SfxChildWindow* pChildW
, mxOutputRangeLabel(m_xBuilder->weld_label("output-range-label"))
, mxOutputRangeEdit(new formula::RefEdit(m_xBuilder->weld_entry("output-range-edit")))
, mxOutputRangeButton(new formula::RefButton(m_xBuilder->weld_button("output-range-button")))
+ , mxColorSeries(new ColorListBox(m_xBuilder->weld_menu_button("color-button-series"),
+ [pWindow] { return pWindow; }))
+ , mxColorNegative(new ColorListBox(m_xBuilder->weld_menu_button("color-button-negative"),
+ [pWindow] { return pWindow; }))
+ , mxColorMarker(new ColorListBox(m_xBuilder->weld_menu_button("color-button-marker"),
+ [pWindow] { return pWindow; }))
+ , mxColorHigh(new ColorListBox(m_xBuilder->weld_menu_button("color-button-high"),
+ [pWindow] { return pWindow; }))
+ , mxColorLow(new ColorListBox(m_xBuilder->weld_menu_button("color-button-low"),
+ [pWindow] { return pWindow; }))
+ , mxColorFirst(new ColorListBox(m_xBuilder->weld_menu_button("color-button-first"),
+ [pWindow] { return pWindow; }))
+ , mxColorLast(new ColorListBox(m_xBuilder->weld_menu_button("color-button-last"),
+ [pWindow] { return pWindow; }))
+ , mxCheckButtonNegative(m_xBuilder->weld_check_button("check-negative"))
+ , mxCheckButtonMarker(m_xBuilder->weld_check_button("check-marker"))
+ , mxCheckButtonHigh(m_xBuilder->weld_check_button("check-high"))
+ , mxCheckButtonLow(m_xBuilder->weld_check_button("check-low"))
+ , mxCheckButtonFirst(m_xBuilder->weld_check_button("check-first"))
+ , mxCheckButtonLast(m_xBuilder->weld_check_button("check-last"))
+ , mxRadioLine(m_xBuilder->weld_radio_button("line-radiobutton"))
+ , mxRadioColumn(m_xBuilder->weld_radio_button("column-radiobutton"))
+ , mxRadioStacked(m_xBuilder->weld_radio_button("stacked-radiobutton"))
+ , mpLocalSparklineGroup(new sc::SparklineGroup())
{
mxInputRangeEdit->SetReferences(this, mxInputRangeText.get());
mxInputRangeButton->SetReferences(this, mxInputRangeEdit.get());
@@ -59,13 +85,60 @@ SparklineDialog::SparklineDialog(SfxBindings* pBindings, SfxChildWindow* pChildW
mxInputRangeEdit->SetModifyHdl(aModifyLink);
mxOutputRangeEdit->SetModifyHdl(aModifyLink);
- mxOutputRangeEdit->GrabFocus();
+ Link<weld::Toggleable&, void> aRadioButtonLink
+ = LINK(this, SparklineDialog, SelectSparklineType);
+ mxRadioLine->connect_toggled(aRadioButtonLink);
+ mxRadioColumn->connect_toggled(aRadioButtonLink);
+ mxRadioStacked->connect_toggled(aRadioButtonLink);
+
+ Link<weld::Toggleable&, void> aLink = LINK(this, SparklineDialog, ToggleHandler);
+ mxCheckButtonNegative->connect_toggled(aLink);
+ mxCheckButtonMarker->connect_toggled(aLink);
+ mxCheckButtonHigh->connect_toggled(aLink);
+ mxCheckButtonLow->connect_toggled(aLink);
+ mxCheckButtonFirst->connect_toggled(aLink);
+ mxCheckButtonLast->connect_toggled(aLink);
+
+ setupValues(mpLocalSparklineGroup);
GetRangeFromSelection();
+
+ mxOutputRangeEdit->GrabFocus();
}
SparklineDialog::~SparklineDialog() {}
+void SparklineDialog::setupValues(std::shared_ptr<sc::SparklineGroup> const& pSparklineGroup)
+{
+ switch (pSparklineGroup->m_eType)
+ {
+ case sc::SparklineType::Line:
+ mxRadioLine->set_active(true);
+ break;
+ case sc::SparklineType::Column:
+ mxRadioColumn->set_active(true);
+ break;
+ case sc::SparklineType::Stacked:
+ mxRadioStacked->set_active(true);
+ break;
+ }
+
+ mxColorSeries->SelectEntry(pSparklineGroup->m_aColorSeries);
+ mxColorNegative->SelectEntry(pSparklineGroup->m_aColorNegative);
+ mxColorMarker->SelectEntry(pSparklineGroup->m_aColorMarkers);
+ mxColorHigh->SelectEntry(pSparklineGroup->m_aColorHigh);
+ mxColorLow->SelectEntry(pSparklineGroup->m_aColorLow);
+ mxColorFirst->SelectEntry(pSparklineGroup->m_aColorFirst);
+ mxColorLast->SelectEntry(pSparklineGroup->m_aColorLast);
+
+ mxCheckButtonNegative->set_active(pSparklineGroup->m_bNegative);
+ mxCheckButtonMarker->set_active(pSparklineGroup->m_bMarkers);
+ mxCheckButtonHigh->set_active(pSparklineGroup->m_bHigh);
+ mxCheckButtonLow->set_active(pSparklineGroup->m_bLow);
+ mxCheckButtonFirst->set_active(pSparklineGroup->m_bFirst);
+ mxCheckButtonLast->set_active(pSparklineGroup->m_bLast);
+}
+
void SparklineDialog::Close() { DoClose(sc::SparklineDialogWrapper::GetChildWindowId()); }
void SparklineDialog::SetActive()
@@ -211,6 +284,32 @@ IMPL_LINK(SparklineDialog, ButtonClicked, weld::Button&, rButton, void)
}
}
+IMPL_LINK(SparklineDialog, ToggleHandler, weld::Toggleable&, rToggle, void)
+{
+ if (mxCheckButtonNegative.get() == &rToggle)
+ mpLocalSparklineGroup->m_bNegative = mxCheckButtonNegative->get_active();
+ if (mxCheckButtonMarker.get() == &rToggle)
+ mpLocalSparklineGroup->m_bMarkers = mxCheckButtonMarker->get_active();
+ if (mxCheckButtonHigh.get() == &rToggle)
+ mpLocalSparklineGroup->m_bHigh = mxCheckButtonHigh->get_active();
+ if (mxCheckButtonLow.get() == &rToggle)
+ mpLocalSparklineGroup->m_bLow = mxCheckButtonLow->get_active();
+ if (mxCheckButtonFirst.get() == &rToggle)
+ mpLocalSparklineGroup->m_bFirst = mxCheckButtonFirst->get_active();
+ if (mxCheckButtonLast.get() == &rToggle)
+ mpLocalSparklineGroup->m_bLast = mxCheckButtonLast->get_active();
+}
+
+IMPL_LINK_NOARG(SparklineDialog, SelectSparklineType, weld::Toggleable&, void)
+{
+ if (mxRadioLine->get_active())
+ mpLocalSparklineGroup->m_eType = sc::SparklineType::Line;
+ else if (mxRadioColumn->get_active())
+ mpLocalSparklineGroup->m_eType = sc::SparklineType::Column;
+ else if (mxRadioStacked->get_active())
+ mpLocalSparklineGroup->m_eType = sc::SparklineType::Stacked;
+}
+
namespace
{
enum class RangeOrientation
@@ -257,7 +356,13 @@ bool SparklineDialog::checkValidInputOutput()
void SparklineDialog::perform()
{
- auto pSparklineGroup = std::make_shared<sc::SparklineGroup>();
+ mpLocalSparklineGroup->m_aColorSeries = mxColorSeries->GetSelectEntryColor();
+ mpLocalSparklineGroup->m_aColorNegative = mxColorNegative->GetSelectEntryColor();
+ mpLocalSparklineGroup->m_aColorMarkers = mxColorMarker->GetSelectEntryColor();
+ mpLocalSparklineGroup->m_aColorHigh = mxColorHigh->GetSelectEntryColor();
+ mpLocalSparklineGroup->m_aColorLow = mxColorLow->GetSelectEntryColor();
+ mpLocalSparklineGroup->m_aColorFirst = mxColorFirst->GetSelectEntryColor();
+ mpLocalSparklineGroup->m_aColorLast = mxColorLast->GetSelectEntryColor();
if (maOutputRange.aStart.Col() == maOutputRange.aEnd.Col())
{
@@ -283,7 +388,7 @@ void SparklineDialog::perform()
aInputRangeSlice.aStart.SetCol(maInputRange.aStart.Col() + nIndex);
aInputRangeSlice.aEnd.SetCol(maInputRange.aStart.Col() + nIndex);
}
- auto* pCreated = mrDocument.CreateSparkline(aAddress, pSparklineGroup);
+ auto* pCreated = mrDocument.CreateSparkline(aAddress, mpLocalSparklineGroup);
pCreated->setInputRange(aInputRangeSlice);
nIndex++;
}
@@ -313,7 +418,7 @@ void SparklineDialog::perform()
aInputRangeSlice.aStart.SetCol(maInputRange.aStart.Col() + nIndex);
aInputRangeSlice.aEnd.SetCol(maInputRange.aStart.Col() + nIndex);
}
- auto* pCreated = mrDocument.CreateSparkline(aAddress, pSparklineGroup);
+ auto* pCreated = mrDocument.CreateSparkline(aAddress, mpLocalSparklineGroup);
pCreated->setInputRange(aInputRangeSlice);
nIndex++;
}
diff --git a/sc/source/ui/inc/SparklineDialog.hxx b/sc/source/ui/inc/SparklineDialog.hxx
index a4a03f33491d..2cd4f258d484 100644
--- a/sc/source/ui/inc/SparklineDialog.hxx
+++ b/sc/source/ui/inc/SparklineDialog.hxx
@@ -11,7 +11,9 @@
#include <address.hxx>
#include "anyrefdg.hxx"
-#include <viewdata.hxx>
+#include "viewdata.hxx"
+
+class ColorListBox;
namespace sc
{
@@ -38,6 +40,25 @@ private:
std::unique_ptr<formula::RefEdit> mxOutputRangeEdit;
std::unique_ptr<formula::RefButton> mxOutputRangeButton;
+ std::unique_ptr<ColorListBox> mxColorSeries;
+ std::unique_ptr<ColorListBox> mxColorNegative;
+ std::unique_ptr<ColorListBox> mxColorMarker;
+ std::unique_ptr<ColorListBox> mxColorHigh;
+ std::unique_ptr<ColorListBox> mxColorLow;
+ std::unique_ptr<ColorListBox> mxColorFirst;
+ std::unique_ptr<ColorListBox> mxColorLast;
+
+ std::unique_ptr<weld::CheckButton> mxCheckButtonNegative;
+ std::unique_ptr<weld::CheckButton> mxCheckButtonMarker;
+ std::unique_ptr<weld::CheckButton> mxCheckButtonHigh;
+ std::unique_ptr<weld::CheckButton> mxCheckButtonLow;
+ std::unique_ptr<weld::CheckButton> mxCheckButtonFirst;
+ std::unique_ptr<weld::CheckButton> mxCheckButtonLast;
+
+ std::unique_ptr<weld::RadioButton> mxRadioLine;
+ std::unique_ptr<weld::RadioButton> mxRadioColumn;
+ std::unique_ptr<weld::RadioButton> mxRadioStacked;
+
void GetRangeFromSelection();
DECL_LINK(ButtonClicked, weld::Button&, void);
@@ -46,7 +67,12 @@ private:
DECL_LINK(LoseEditFocusHandler, formula::RefEdit&, void);
DECL_LINK(LoseButtonFocusHandler, formula::RefButton&, void);
DECL_LINK(RefInputModifyHandler, formula::RefEdit&, void);
+ DECL_LINK(ToggleHandler, weld::Toggleable&, void);
+ DECL_LINK(SelectSparklineType, weld::Toggleable&, void);
+
+ std::shared_ptr<sc::SparklineGroup> mpLocalSparklineGroup;
+ void setupValues(std::shared_ptr<sc::SparklineGroup> const& pSparklineGroup);
void perform();
bool checkValidInputOutput();
diff --git a/sc/uiconfig/scalc/ui/sparklinedialog.ui b/sc/uiconfig/scalc/ui/sparklinedialog.ui
index 85515462c323..f295023877bf 100644
--- a/sc/uiconfig/scalc/ui/sparklinedialog.ui
+++ b/sc/uiconfig/scalc/ui/sparklinedialog.ui
@@ -70,7 +70,7 @@
<property name="expand">False</property>
<property name="fill">True</property>
<property name="pack-type">end</property>
- <property name="position">0</property>
+ <property name="position">2</property>
</packing>
</child>
<child>
@@ -84,10 +84,10 @@
<object class="GtkGrid">
<property name="visible">True</property>
<property name="can-focus">False</property>
- <property name="margin-start">6</property>
+ <property name="margin-start">12</property>
<property name="margin-end">6</property>
<property name="margin-top">6</property>
- <property name="margin-bottom">7</property>
+ <property name="margin-bottom">6</property>
<property name="row-spacing">6</property>
<property name="column-spacing">6</property>
<child>
@@ -191,10 +191,501 @@
</object>
</child>
<child type="label">
- <object class="GtkLabel" id="label1">
+ <object class="GtkLabel" id="label-data">
+ <property name="visible">True</property>
+ <property name="can-focus">False</property>
+ <property name="label" translatable="yes" context="SparklineDialog|label-data">Data</property>
+ <attributes>
+ <attribute name="weight" value="bold"/>
+ </attributes>
+ </object>
+ </child>
+ </object>
+ <packing>
+ <property name="expand">False</property>
+ <property name="fill">True</property>
+ <property name="position">0</property>
+ </packing>
+ </child>
+ <child>
+ <object class="GtkFrame" id="frame-properties">
+ <property name="visible">True</property>
+ <property name="can-focus">False</property>
+ <property name="label-xalign">0</property>
+ <property name="shadow-type">none</property>
+ <child>
+ <!-- n-columns=6 n-rows=5 -->
+ <object class="GtkGrid">
+ <property name="visible">True</property>
+ <property name="can-focus">False</property>
+ <property name="margin-start">12</property>
+ <property name="margin-end">6</property>
+ <property name="margin-top">6</property>
+ <property name="margin-bottom">6</property>
+ <property name="row-spacing">6</property>
+ <property name="column-spacing">6</property>
+ <child>
+ <object class="GtkLabel" id="label-series">
+ <property name="visible">True</property>
+ <property name="can-focus">False</property>
+ <property name="label" translatable="yes" context="SparklineDialog|label-series">Series:</property>
+ <property name="xalign">0</property>
+ <accessibility>
+ <relation type="label-for" target="color-button-series"/>
+ </accessibility>
+ </object>
+ <packing>
+ <property name="left-attach">0</property>
+ <property name="top-attach">1</property>
+ </packing>
+ </child>
+ <child>
+ <object class="GtkLabel" id="label-negative">
+ <property name="visible">True</property>
+ <property name="can-focus">False</property>
+ <property name="label" translatable="yes" context="SparklineDialog|label-negative">Negative Points:</property>
+ <property name="xalign">0</property>
+ <accessibility>
+ <relation type="label-for" target="color-button-negative"/>
+ <relation type="label-for" target="check-negative"/>
+ </accessibility>
+ </object>
+ <packing>
+ <property name="left-attach">0</property>
+ <property name="top-attach">2</property>
+ </packing>
+ </child>
+ <child>
+ <object class="GtkMenuButton" id="color-button-series">
+ <property name="visible">True</property>
+ <property name="can-focus">True</property>
+ <property name="receives-default">False</property>
+ <property name="draw-indicator">True</property>
+ <child>
+ <placeholder/>
+ </child>
+ <accessibility>
+ <relation type="labelled-by" target="label-series"/>
+ </accessibility>
+ </object>
+ <packing>
+ <property name="left-attach">2</property>
+ <property name="top-attach">1</property>
+ </packing>
+ </child>
+ <child>
+ <object class="GtkMenuButton" id="color-button-negative">
+ <property name="visible">True</property>
+ <property name="can-focus">True</property>
+ <property name="receives-default">False</property>
+ <property name="draw-indicator">True</property>
+ <child>
+ <placeholder/>
+ </child>
+ <accessibility>
+ <relation type="labelled-by" target="label-negative"/>
+ </accessibility>
+ </object>
+ <packing>
+ <property name="left-attach">2</property>
+ <property name="top-attach">2</property>
+ </packing>
+ </child>
+ <child>
+ <object class="GtkCheckButton" id="check-negative">
+ <property name="visible">True</property>
+ <property name="can-focus">True</property>
+ <property name="receives-default">False</property>
+ <property name="image-position">right</property>
+ <property name="always-show-image">True</property>
+ <property name="draw-indicator">True</property>
+ <child>
+ <placeholder/>
+ </child>
+ <accessibility>
+ <relation type="labelled-by" target="label-negative"/>
+ </accessibility>
+ </object>
+ <packing>
+ <property name="left-attach">1</property>
+ <property name="top-attach">2</property>
+ </packing>
+ </child>
+ <child>
+ <object class="GtkLabel" id="label-low">
+ <property name="visible">True</property>
+ <property name="can-focus">False</property>
+ <property name="label" translatable="yes" context="SparklineDialog|label-low">Low Points:</property>
+ <property name="xalign">0</property>
+ <accessibility>
+ <relation type="label-for" target="color-button-low"/>
+ <relation type="label-for" target="check-low"/>
+ </accessibility>
+ </object>
+ <packing>
+ <property name="left-attach">0</property>
+ <property name="top-attach">4</property>
+ </packing>
+ </child>
+ <child>
+ <object class="GtkMenuButton" id="color-button-high">
+ <property name="visible">True</property>
+ <property name="can-focus">True</property>
+ <property name="receives-default">False</property>
+ <property name="draw-indicator">True</property>
+ <child>
+ <placeholder/>
+ </child>
+ <accessibility>
+ <relation type="labelled-by" target="label-high"/>
+ </accessibility>
+ </object>
+ <packing>
+ <property name="left-attach">2</property>
+ <property name="top-attach">3</property>
+ </packing>
+ </child>
+ <child>
+ <object class="GtkMenuButton" id="color-button-low">
+ <property name="visible">True</property>
+ <property name="can-focus">True</property>
+ <property name="receives-default">False</property>
+ <property name="draw-indicator">True</property>
+ <child>
+ <placeholder/>
+ </child>
+ <accessibility>
+ <relation type="labelled-by" target="label-low"/>
+ </accessibility>
+ </object>
+ <packing>
+ <property name="left-attach">2</property>
+ <property name="top-attach">4</property>
+ </packing>
+ </child>
+ <child>
+ <object class="GtkCheckButton" id="check-low">
+ <property name="visible">True</property>
+ <property name="can-focus">True</property>
+ <property name="receives-default">False</property>
+ <property name="image-position">right</property>
+ <property name="always-show-image">True</property>
+ <property name="draw-indicator">True</property>
+ <child>
+ <placeholder/>
+ </child>
+ <accessibility>
+ <relation type="labelled-by" target="label-low"/>
+ </accessibility>
+ </object>
+ <packing>
+ <property name="left-attach">1</property>
+ <property name="top-attach">4</property>
+ </packing>
+ </child>
+ <child>
+ <object class="GtkLabel" id="label-high">
+ <property name="visible">True</property>
+ <property name="can-focus">False</property>
+ <property name="label" translatable="yes" context="SparklineDialog|label-high">High Points:</property>
+ <property name="xalign">0</property>
+ <accessibility>
+ <relation type="label-for" target="color-button-high"/>
+ <relation type="label-for" target="check-high"/>
+ </accessibility>
+ </object>
+ <packing>
+ <property name="left-attach">0</property>
+ <property name="top-attach">3</property>
+ </packing>
+ </child>
+ <child>
+ <object class="GtkCheckButton" id="check-high">
+ <property name="visible">True</property>
+ <property name="can-focus">True</property>
+ <property name="receives-default">False</property>
+ <property name="image-position">right</property>
+ <property name="always-show-image">True</property>
+ <property name="draw-indicator">True</property>
+ <child>
+ <placeholder/>
+ </child>
+ <accessibility>
+ <relation type="labelled-by" target="label-high"/>
+ </accessibility>
+ </object>
+ <packing>
+ <property name="left-attach">1</property>
+ <property name="top-attach">3</property>
+ </packing>
+ </child>
+ <child>
+ <object class="GtkLabel" id="label-marker">
+ <property name="visible">True</property>
+ <property name="can-focus">False</property>
+ <property name="label" translatable="yes" context="SparklineDialog|label-marker">Marker:</property>
+ <property name="xalign">0</property>
+ <accessibility>
+ <relation type="label-for" target="check-marker"/>
+ <relation type="label-for" target="color-button-marker"/>
+ </accessibility>
+ </object>
+ <packing>
+ <property name="left-attach">3</property>
+ <property name="top-attach">2</property>
+ </packing>
+ </child>
+ <child>
+ <object class="GtkCheckButton" id="check-marker">
+ <property name="visible">True</property>
+ <property name="can-focus">True</property>
+ <property name="receives-default">False</property>
+ <property name="image-position">right</property>
+ <property name="always-show-image">True</property>
+ <property name="draw-indicator">True</property>
+ <child>
+ <placeholder/>
+ </child>
+ <accessibility>
+ <relation type="labelled-by" target="label-marker"/>
+ </accessibility>
+ </object>
+ <packing>
+ <property name="left-attach">4</property>
+ <property name="top-attach">2</property>
+ </packing>
+ </child>
+ <child>
+ <object class="GtkMenuButton" id="color-button-marker">
+ <property name="visible">True</property>
+ <property name="can-focus">True</property>
+ <property name="receives-default">False</property>
+ <property name="draw-indicator">True</property>
+ <child>
+ <placeholder/>
+ </child>
+ <accessibility>
+ <relation type="labelled-by" target="label-marker"/>
+ </accessibility>
+ </object>
+ <packing>
+ <property name="left-attach">5</property>
+ <property name="top-attach">2</property>
+ </packing>
+ </child>
+ <child>
+ <object class="GtkMenuButton" id="color-button-first">
+ <property name="visible">True</property>
+ <property name="can-focus">True</property>
+ <property name="receives-default">False</property>
+ <property name="draw-indicator">True</property>
+ <child>
+ <placeholder/>
+ </child>
+ <accessibility>
+ <relation type="labelled-by" target="label-first"/>
+ </accessibility>
+ </object>
+ <packing>
+ <property name="left-attach">5</property>
+ <property name="top-attach">3</property>
+ </packing>
+ </child>
+ <child>
+ <object class="GtkMenuButton" id="color-button-last">
+ <property name="visible">True</property>
+ <property name="can-focus">True</property>
+ <property name="receives-default">False</property>
+ <property name="draw-indicator">True</property>
+ <child>
+ <placeholder/>
+ </child>
+ <accessibility>
+ <relation type="labelled-by" target="label-last"/>
+ </accessibility>
+ </object>
+ <packing>
+ <property name="left-attach">5</property>
+ <property name="top-attach">4</property>
+ </packing>
+ </child>
+ <child>
+ <object class="GtkCheckButton" id="check-first">
+ <property name="visible">True</property>
+ <property name="can-focus">True</property>
+ <property name="receives-default">False</property>
+ <property name="image-position">right</property>
+ <property name="always-show-image">True</property>
+ <property name="draw-indicator">True</property>
+ <child>
+ <placeholder/>
+ </child>
+ <accessibility>
+ <relation type="labelled-by" target="label-first"/>
+ </accessibility>
+ </object>
+ <packing>
+ <property name="left-attach">4</property>
+ <property name="top-attach">3</property>
+ </packing>
+ </child>
+ <child>
+ <object class="GtkCheckButton" id="check-last">
+ <property name="visible">True</property>
+ <property name="can-focus">True</property>
+ <property name="receives-default">False</property>
+ <property name="image-position">right</property>
+ <property name="always-show-image">True</property>
+ <property name="draw-indicator">True</property>
+ <child>
+ <placeholder/>
+ </child>
+ <accessibility>
+ <relation type="labelled-by" target="label-last"/>
+ </accessibility>
+ </object>
+ <packing>
+ <property name="left-attach">4</property>
+ <property name="top-attach">4</property>
+ </packing>
+ </child>
+ <child>
+ <object class="GtkLabel" id="label-first">
+ <property name="visible">True</property>
+ <property name="can-focus">False</property>
+ <property name="label" translatable="yes" context="SparklineDialog|label-first">First Points:</property>
+ <property name="xalign">0</property>
+ <accessibility>
+ <relation type="label-for" target="color-button-first"/>
+ <relation type="label-for" target="check-first"/>
+ </accessibility>
+ </object>
+ <packing>
+ <property name="left-attach">3</property>
+ <property name="top-attach">3</property>
+ </packing>
+ </child>
+ <child>
+ <object class="GtkLabel" id="label-last">
+ <property name="visible">True</property>
+ <property name="can-focus">False</property>
+ <property name="label" translatable="yes" context="SparklineDialog|label-last">Last Points:</property>
+ <property name="xalign">0</property>
+ <accessibility>
+ <relation type="label-for" target="color-button-last"/>
+ <relation type="label-for" target="check-last"/>
+ </accessibility>
+ </object>
+ <packing>
+ <property name="left-attach">3</property>
+ <property name="top-attach">4</property>
+ </packing>
+ </child>
+ <child>
+ <object class="GtkLabel" id="label-type">
+ <property name="visible">True</property>
+ <property name="can-focus">False</property>
+ <property name="label" translatable="yes" context="SparklineDialog|label-type">Type:</property>
+ <property name="xalign">0</property>
+ <accessibility>
+ <relation type="label-for" target="line-radiobutton"/>
+ <relation type="label-for" target="column-radiobutton"/>
+ <relation type="label-for" target="stacked-radiobutton"/>
+ </accessibility>
+ </object>
+ <packing>
+ <property name="left-attach">0</property>
+ <property name="top-attach">0</property>
+ </packing>
+ </child>
+ <child>
+ <object class="GtkBox">
+ <property name="visible">True</property>
+ <property name="can-focus">False</property>
+ <property name="spacing">6</property>
+ <child>
+ <object class="GtkRadioButton" id="line-radiobutton">
+ <property name="label" translatable="yes" context="SparklineDialog|line-radiobutton">Line</property>
+ <property name="visible">True</property>
+ <property name="can-focus">True</property>
+ <property name="receives-default">False</property>
+ <property name="hexpand">True</property>
+ <property name="active">True</property>
+ <property name="draw-indicator">True</property>
+ <accessibility>
+ <relation type="labelled-by" target="label-type"/>
+ </accessibility>
+ </object>
+ <packing>
+ <property name="expand">False</property>
+ <property name="fill">True</property>
+ <property name="position">0</property>
+ </packing>
+ </child>
+ <child>
+ <object class="GtkRadioButton" id="column-radiobutton">
+ <property name="label" translatable="yes" context="SparklineDialog|column-radiobutton">Column</property>
+ <property name="visible">True</property>
+ <property name="can-focus">True</property>
+ <property name="receives-default">False</property>
+ <property name="hexpand">True</property>
+ <property name="draw-indicator">True</property>
+ <property name="group">line-radiobutton</property>
+ <accessibility>
+ <relation type="labelled-by" target="label-type"/>
+ </accessibility>
+ </object>
+ <packing>
+ <property name="expand">False</property>
+ <property name="fill">True</property>
+ <property name="position">1</property>
+ </packing>
+ </child>
+ <child>
+ <object class="GtkRadioButton" id="stacked-radiobutton">
+ <property name="label" translatable="yes" context="SparklineDialog|stacked-radiobutton">Stacked</property>
+ <property name="visible">True</property>
+ <property name="can-focus">True</property>
+ <property name="receives-default">False</property>
+ <property name="hexpand">True</property>
+ <property name="draw-indicator">True</property>
+ <property name="group">line-radiobutton</property>
+ <accessibility>
+ <relation type="labelled-by" target="label-type"/>
+ </accessibility>
+ </object>
+ <packing>
+ <property name="expand">False</property>
+ <property name="fill">True</property>
+ <property name="position">2</property>
+ </packing>
+ </child>
+ </object>
+ <packing>
+ <property name="left-attach">1</property>
+ <property name="top-attach">0</property>
+ <property name="width">5</property>
+ </packing>
+ </child>
+ <child>
+ <placeholder/>
+ </child>
+ <child>
+ <placeholder/>
+ </child>
+ <child>
+ <placeholder/>
+ </child>
+ <child>
+ <placeholder/>
+ </child>
+ </object>
+ </child>
+ <child type="label">
+ <object class="GtkLabel" id="label-properties">
<property name="visible">True</property>
<property name="can-focus">False</property>
- <property name="label" translatable="yes" context="SparklineDialog|label1">Data</property>
+ <property name="label" translatable="yes" context="SparklineDialog|label-properties">Properties</property>
<attributes>
<attribute name="weight" value="bold"/>
</attributes>