LibreOffice Module sc (master) 1
SparklineDialog.cxx
Go to the documentation of this file.
1/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */
2/*
3 * This file is part of the LibreOffice project.
4 *
5 * This Source Code Form is subject to the terms of the Mozilla Public
6 * License, v. 2.0. If a copy of the MPL was not distributed with this
7 * file, You can obtain one at http://mozilla.org/MPL/2.0/.
8 */
9
10#include <SparklineDialog.hxx>
11#include <SparklineData.hxx>
12#include <SparklineGroup.hxx>
13#include <Sparkline.hxx>
14#include <reffact.hxx>
15
16#include <docfunc.hxx>
17
18#include <svx/colorbox.hxx>
19#include <vcl/formatter.hxx>
20
21namespace sc
22{
24 weld::Window* pWindow, ScViewData& rViewData)
25 : ScAnyRefDlgController(pBindings, pChildWindow, pWindow,
26 u"modules/scalc/ui/sparklinedialog.ui", "SparklineDialog")
27 , mrViewData(rViewData)
28 , mrDocument(rViewData.GetDocument())
29 , mpActiveEdit(nullptr)
30 , mbDialogLostFocus(false)
31 , mxButtonOk(m_xBuilder->weld_button("ok"))
32 , mxButtonCancel(m_xBuilder->weld_button("cancel"))
33 , mxFrameData(m_xBuilder->weld_frame("frmData"))
34 , mxInputRangeLabel(m_xBuilder->weld_label("lbInputRange"))
35 , mxInputRangeEdit(new formula::RefEdit(m_xBuilder->weld_entry("edInputRange")))
36 , mxInputRangeButton(new formula::RefButton(m_xBuilder->weld_button("btnInputRange")))
37 , mxOutputRangeLabel(m_xBuilder->weld_label("lbOutputRange"))
38 , mxOutputRangeEdit(new formula::RefEdit(m_xBuilder->weld_entry("edOutputRange")))
39 , mxOutputRangeButton(new formula::RefButton(m_xBuilder->weld_button("btnOutputRange")))
40 , mxColorSeries(new ColorListBox(m_xBuilder->weld_menu_button("colSeries"),
41 [pWindow] { return pWindow; }))
42 , mxColorNegative(new ColorListBox(m_xBuilder->weld_menu_button("colNegative"),
43 [pWindow] { return pWindow; }))
44 , mxColorMarker(new ColorListBox(m_xBuilder->weld_menu_button("colMarker"),
45 [pWindow] { return pWindow; }))
46 , mxColorHigh(
47 new ColorListBox(m_xBuilder->weld_menu_button("colHigh"), [pWindow] { return pWindow; }))
48 , mxColorLow(
49 new ColorListBox(m_xBuilder->weld_menu_button("colLow"), [pWindow] { return pWindow; }))
50 , mxColorFirst(
51 new ColorListBox(m_xBuilder->weld_menu_button("colFirst"), [pWindow] { return pWindow; }))
52 , mxColorLast(
53 new ColorListBox(m_xBuilder->weld_menu_button("colLast"), [pWindow] { return pWindow; }))
54 , mxCheckButtonNegative(m_xBuilder->weld_check_button("cbNegative"))
55 , mxCheckButtonMarker(m_xBuilder->weld_check_button("cbMarker"))
56 , mxCheckButtonHigh(m_xBuilder->weld_check_button("cbHigh"))
57 , mxCheckButtonLow(m_xBuilder->weld_check_button("cbLow"))
58 , mxCheckButtonFirst(m_xBuilder->weld_check_button("cbFirst"))
59 , mxCheckButtonLast(m_xBuilder->weld_check_button("cbLast"))
60 , mxSpinLineWidth(m_xBuilder->weld_spin_button("seLineWidth"))
61 , mxType(m_xBuilder->weld_combo_box("cbType"))
62 , mxCheckDisplayXAxis(m_xBuilder->weld_check_button("cbDisplayXAxis"))
63 , mxCheckDisplayHidden(m_xBuilder->weld_check_button("cbHidden"))
64 , mxCheckRightToLeft(m_xBuilder->weld_check_button("cbRTL"))
65 , mxDisplayEmptyGap(m_xBuilder->weld_combo_box("cbEmptyCells"))
66 , mxComboMinAxisType(m_xBuilder->weld_combo_box("cbMinAxisType"))
67 , mxComboMaxAxisType(m_xBuilder->weld_combo_box("cbMaxAxisType"))
68 , mxSpinCustomMin(m_xBuilder->weld_formatted_spin_button("seMinAxis"))
69 , mxSpinCustomMax(m_xBuilder->weld_formatted_spin_button("seMaxAxis"))
70 , mbEditMode(false)
71{
72 mxInputRangeEdit->SetReferences(this, mxInputRangeLabel.get());
73 mxInputRangeButton->SetReferences(this, mxInputRangeEdit.get());
74
75 mxOutputRangeEdit->SetReferences(this, mxOutputRangeLabel.get());
76 mxOutputRangeButton->SetReferences(this, mxOutputRangeEdit.get());
77
78 mxButtonCancel->connect_clicked(LINK(this, SparklineDialog, ButtonClicked));
79 mxButtonOk->connect_clicked(LINK(this, SparklineDialog, ButtonClicked));
80 mxButtonOk->set_sensitive(false);
81
82 Link<formula::RefEdit&, void> aEditLink = LINK(this, SparklineDialog, EditFocusHandler);
83 mxInputRangeEdit->SetGetFocusHdl(aEditLink);
84 mxOutputRangeEdit->SetGetFocusHdl(aEditLink);
85 aEditLink = LINK(this, SparklineDialog, LoseEditFocusHandler);
86 mxInputRangeEdit->SetLoseFocusHdl(aEditLink);
87 mxOutputRangeEdit->SetLoseFocusHdl(aEditLink);
88
89 Link<formula::RefButton&, void> aButtonLink = LINK(this, SparklineDialog, ButtonFocusHandler);
90 mxInputRangeButton->SetGetFocusHdl(aButtonLink);
91 mxOutputRangeButton->SetGetFocusHdl(aButtonLink);
92 aButtonLink = LINK(this, SparklineDialog, LoseButtonFocusHandler);
93 mxInputRangeButton->SetLoseFocusHdl(aButtonLink);
94 mxOutputRangeButton->SetLoseFocusHdl(aButtonLink);
95
96 Link<formula::RefEdit&, void> aModifyLink = LINK(this, SparklineDialog, RefInputModifyHandler);
97 mxInputRangeEdit->SetModifyHdl(aModifyLink);
98 mxOutputRangeEdit->SetModifyHdl(aModifyLink);
99
100 mxType->connect_changed(LINK(this, SparklineDialog, SelectSparklineType));
101 mxDisplayEmptyGap->connect_changed(LINK(this, SparklineDialog, SelectSparklineType));
102
103 Link<weld::Toggleable&, void> aLink = LINK(this, SparklineDialog, ToggleHandler);
104 mxCheckButtonNegative->connect_toggled(aLink);
105 mxCheckButtonMarker->connect_toggled(aLink);
106 mxCheckButtonHigh->connect_toggled(aLink);
107 mxCheckButtonLow->connect_toggled(aLink);
108 mxCheckButtonFirst->connect_toggled(aLink);
109 mxCheckButtonLast->connect_toggled(aLink);
110 mxCheckDisplayXAxis->connect_toggled(aLink);
111 mxCheckDisplayHidden->connect_toggled(aLink);
112 mxCheckRightToLeft->connect_toggled(aLink);
113
114 mxSpinLineWidth->connect_value_changed(LINK(this, SparklineDialog, SpinLineWidthChanged));
115
116 mxComboMinAxisType->connect_changed(LINK(this, SparklineDialog, ComboValueChanged));
117 mxComboMaxAxisType->connect_changed(LINK(this, SparklineDialog, ComboValueChanged));
118
119 mxSpinCustomMin->connect_value_changed(LINK(this, SparklineDialog, SpinCustomChanged));
120 Formatter& rSpinCustomMinFormatter = mxSpinCustomMin->GetFormatter();
121 rSpinCustomMinFormatter.ClearMinValue();
122 rSpinCustomMinFormatter.ClearMaxValue();
123 rSpinCustomMinFormatter.UseInputStringForFormatting();
124
125 mxSpinCustomMax->connect_value_changed(LINK(this, SparklineDialog, SpinCustomChanged));
126 Formatter& rSpinCustomMaxFormatter = mxSpinCustomMax->GetFormatter();
127 rSpinCustomMaxFormatter.ClearMinValue();
128 rSpinCustomMaxFormatter.ClearMaxValue();
129 rSpinCustomMaxFormatter.UseInputStringForFormatting();
130
131 setupValues();
132
133 mxOutputRangeEdit->GrabFocus();
134 mxButtonOk->set_sensitive(checkValidInputOutput());
135}
136
138
140{
144 mxInputRangeEdit->SetRefString(aString);
145}
146
148{
149 ScRange aSelectionRange;
150 mrViewData.GetSimpleArea(aSelectionRange);
151
152 if (mrDocument.HasOneSparklineGroup(aSelectionRange))
153 {
154 if (auto pSparkline = mrDocument.GetSparkline(aSelectionRange.aStart))
155 {
156 mpSparklineGroup = pSparkline->getSparklineGroup();
157 maAttributes = mpSparklineGroup->getAttributes();
158 mxFrameData->set_visible(false);
159 mbEditMode = true;
160 }
161 }
162 else
163 {
164 maInputRange = aSelectionRange;
165 }
166
168
169 switch (maAttributes.getType())
170 {
172 mxType->set_active(0);
173 break;
175 mxType->set_active(1);
176 break;
178 mxType->set_active(2);
179 break;
180 }
181
183 {
185 mxDisplayEmptyGap->set_active(0);
186 break;
188 mxDisplayEmptyGap->set_active(1);
189 break;
191 mxDisplayEmptyGap->set_active(2);
192 break;
193 }
194
198 mxColorHigh->SelectEntry(maAttributes.getColorHigh());
199 mxColorLow->SelectEntry(maAttributes.getColorLow());
201 mxColorLast->SelectEntry(maAttributes.getColorLast());
202
206 mxCheckButtonLow->set_active(maAttributes.isLow());
209
210 mxSpinLineWidth->set_value(sal_Int64(maAttributes.getLineWeight() * 100.0));
211
215
217 {
219 mxComboMinAxisType->set_active(0);
220 mxSpinCustomMin->GetFormatter().SetValue(0.0);
221 break;
223 mxComboMinAxisType->set_active(1);
224 mxSpinCustomMin->GetFormatter().SetValue(0.0);
225 break;
227 mxComboMinAxisType->set_active(2);
229 mxSpinCustomMin->GetFormatter().SetValue(*maAttributes.getManualMin());
230 break;
231 }
232 ComboValueChanged(*mxComboMinAxisType);
233
235 {
237 mxComboMaxAxisType->set_active(0);
238 mxSpinCustomMax->GetFormatter().SetValue(0.0);
239 break;
241 mxComboMaxAxisType->set_active(1);
242 mxSpinCustomMax->GetFormatter().SetValue(0.0);
243 break;
245 mxComboMaxAxisType->set_active(2);
247 mxSpinCustomMax->GetFormatter().SetValue(*maAttributes.getManualMax());
248 break;
249 }
250 ComboValueChanged(*mxComboMaxAxisType);
251}
252
254
256{
258 {
259 mbDialogLostFocus = false;
260 if (mpActiveEdit)
262 }
263 else
264 {
265 m_xDialog->grab_focus();
266 }
267 RefInputDone();
268}
269
270void SparklineDialog::SetReference(const ScRange& rReferenceRange, ScDocument& rDocument)
271{
272 if (mpActiveEdit)
273 {
274 if (rReferenceRange.aStart != rReferenceRange.aEnd)
276
277 OUString aString;
279 auto eAddressConvention = rDocument.GetAddressConvention();
280
281 if (mpActiveEdit == mxInputRangeEdit.get())
282 {
283 maInputRange = rReferenceRange;
284 aString = maInputRange.Format(rDocument, eFlags, eAddressConvention);
285 mxInputRangeEdit->SetRefString(aString);
286 }
287 else if (mpActiveEdit == mxOutputRangeEdit.get())
288 {
289 maOutputRange = rReferenceRange;
290 aString = maOutputRange.Format(rDocument, eFlags, eAddressConvention);
291 mxOutputRangeEdit->SetRefString(aString);
292 }
293 }
294
295 mxButtonOk->set_sensitive(checkValidInputOutput());
296}
297
298IMPL_LINK(SparklineDialog, EditFocusHandler, formula::RefEdit&, rEdit, void)
299{
300 auto* pEdit = &rEdit;
301
302 if (mxInputRangeEdit.get() == pEdit)
303 mpActiveEdit = mxInputRangeEdit.get();
304 else if (mxOutputRangeEdit.get() == pEdit)
305 mpActiveEdit = mxOutputRangeEdit.get();
306 else
307 mpActiveEdit = nullptr;
308
309 if (mpActiveEdit)
310 mpActiveEdit->SelectAll();
311}
312
313IMPL_LINK(SparklineDialog, ButtonFocusHandler, formula::RefButton&, rButton, void)
314{
315 auto* pButton = &rButton;
316
317 if (mxInputRangeButton.get() == pButton)
318 mpActiveEdit = mxInputRangeEdit.get();
319 else if (mxOutputRangeButton.get() == pButton)
320 mpActiveEdit = mxOutputRangeEdit.get();
321 else
322 mpActiveEdit = nullptr;
323
324 if (mpActiveEdit)
325 mpActiveEdit->SelectAll();
326}
327
329{
330 mbDialogLostFocus = !m_xDialog->has_toplevel_focus();
331}
332
333IMPL_LINK_NOARG(SparklineDialog, LoseButtonFocusHandler, formula::RefButton&, void)
334{
335 mbDialogLostFocus = !m_xDialog->has_toplevel_focus();
336}
337
338IMPL_LINK_NOARG(SparklineDialog, RefInputModifyHandler, formula::RefEdit&, void)
339{
340 if (mpActiveEdit)
341 {
342 if (mpActiveEdit == mxInputRangeEdit.get())
343 {
344 ScRangeList aRangeList;
345 bool bValid = ParseWithNames(aRangeList, mxInputRangeEdit->GetText(), mrDocument);
346 const ScRange* pRange = (bValid && aRangeList.size() == 1) ? &aRangeList[0] : nullptr;
347 if (pRange)
348 {
349 maInputRange = *pRange;
350 mxInputRangeEdit->StartUpdateData();
351 }
352 else
353 {
355 }
356 }
357 else if (mpActiveEdit == mxOutputRangeEdit.get())
358 {
359 ScRangeList aRangeList;
360 bool bValid = ParseWithNames(aRangeList, mxOutputRangeEdit->GetText(), mrDocument);
361 const ScRange* pRange = (bValid && aRangeList.size() == 1) ? &aRangeList[0] : nullptr;
362 if (pRange)
363 {
364 maOutputRange = *pRange;
365 mxOutputRangeEdit->StartUpdateData();
366 }
367 else
368 {
369 maOutputRange = ScRange(ScAddress::INITIALIZE_INVALID);
370 }
371 }
372 }
373
374 mxButtonOk->set_sensitive(checkValidInputOutput());
375}
376
377IMPL_LINK(SparklineDialog, ButtonClicked, weld::Button&, rButton, void)
378{
379 if (mxButtonOk.get() == &rButton)
380 {
381 perform();
382 response(RET_OK);
383 }
384 else
385 {
386 response(RET_CANCEL);
387 }
388}
389
390IMPL_LINK(SparklineDialog, ToggleHandler, weld::Toggleable&, rToggle, void)
391{
392 if (mxCheckButtonNegative.get() == &rToggle)
393 maAttributes.setNegative(mxCheckButtonNegative->get_active());
394 if (mxCheckButtonMarker.get() == &rToggle)
395 maAttributes.setMarkers(mxCheckButtonMarker->get_active());
396 if (mxCheckButtonHigh.get() == &rToggle)
397 maAttributes.setHigh(mxCheckButtonHigh->get_active());
398 if (mxCheckButtonLow.get() == &rToggle)
399 maAttributes.setLow(mxCheckButtonLow->get_active());
400 if (mxCheckButtonFirst.get() == &rToggle)
401 maAttributes.setFirst(mxCheckButtonFirst->get_active());
402 if (mxCheckButtonLast.get() == &rToggle)
403 maAttributes.setLast(mxCheckButtonLast->get_active());
404 if (mxCheckDisplayXAxis.get() == &rToggle)
405 maAttributes.setDisplayXAxis(mxCheckDisplayXAxis->get_active());
406 if (mxCheckDisplayHidden.get() == &rToggle)
407 maAttributes.setDisplayHidden(mxCheckDisplayHidden->get_active());
408 if (mxCheckRightToLeft.get() == &rToggle)
409 maAttributes.setRightToLeft(mxCheckRightToLeft->get_active());
410}
411
412IMPL_LINK_NOARG(SparklineDialog, SelectSparklineType, weld::ComboBox&, void)
413{
414 switch (mxType->get_active())
415 {
416 case 0:
417 maAttributes.setType(sc::SparklineType::Line);
418 break;
419 case 1:
420 maAttributes.setType(sc::SparklineType::Column);
421 break;
422 case 2:
423 maAttributes.setType(sc::SparklineType::Stacked);
424 break;
425 }
426 switch (mxDisplayEmptyGap->get_active())
427 {
428 case 1:
429 maAttributes.setDisplayEmptyCellsAs(sc::DisplayEmptyCellsAs::Gap);
430 break;
431 case 2:
432 maAttributes.setDisplayEmptyCellsAs(sc::DisplayEmptyCellsAs::Zero);
433 break;
434 case 3:
435 maAttributes.setDisplayEmptyCellsAs(sc::DisplayEmptyCellsAs::Span);
436 break;
437 }
438}
439
441{
442 double value = mxSpinLineWidth->get_value() / 100.0;
443 maAttributes.setLineWeight(value);
444}
445
446IMPL_LINK(SparklineDialog, SpinCustomChanged, weld::FormattedSpinButton&, rFormatted, void)
447{
448 if (mxSpinCustomMin.get() == &rFormatted)
449 {
450 maAttributes.setManualMin(rFormatted.GetFormatter().GetValue());
451 }
452 else if (mxSpinCustomMax.get() == &rFormatted)
453 {
454 maAttributes.setManualMax(rFormatted.GetFormatter().GetValue());
455 }
456}
457
458IMPL_LINK(SparklineDialog, ComboValueChanged, weld::ComboBox&, rComboBox, void)
459{
460 int nActive = rComboBox.get_active();
461
462 if (mxComboMinAxisType.get() == &rComboBox)
463 {
464 switch (nActive)
465 {
466 case 0:
467 maAttributes.setMinAxisType(sc::AxisType::Individual);
468 mxSpinCustomMin->set_sensitive(false);
469 break;
470 case 1:
471 maAttributes.setMinAxisType(sc::AxisType::Group);
472 mxSpinCustomMin->set_sensitive(false);
473 break;
474 case 2:
475 maAttributes.setMinAxisType(sc::AxisType::Custom);
476 mxSpinCustomMin->set_sensitive(true);
477 break;
478 default:
479 break;
480 }
481 }
482 else if (mxComboMaxAxisType.get() == &rComboBox)
483 {
484 switch (nActive)
485 {
486 case 0:
487 maAttributes.setMaxAxisType(sc::AxisType::Individual);
488 mxSpinCustomMax->set_sensitive(false);
489 break;
490 case 1:
491 maAttributes.setMaxAxisType(sc::AxisType::Group);
492 mxSpinCustomMax->set_sensitive(false);
493 break;
494 case 2:
495 maAttributes.setMaxAxisType(sc::AxisType::Custom);
496 mxSpinCustomMax->set_sensitive(true);
497 break;
498 default:
499 break;
500 }
501 }
502}
503
505{
506 if (mbEditMode)
507 return true;
508
510 return false;
511
514 {
515 sal_Int32 nOutputRowSize = maOutputRange.aEnd.Row() - maOutputRange.aStart.Row();
516 eInputOrientation = sc::calculateOrientation(nOutputRowSize, maInputRange);
517 }
519 {
520 sal_Int32 nOutputColSize = maOutputRange.aEnd.Col() - maOutputRange.aStart.Col();
521 eInputOrientation = sc::calculateOrientation(nOutputColSize, maInputRange);
522 }
523
524 return eInputOrientation != sc::RangeOrientation::Unknown;
525}
526
528{
529 maAttributes.setColorSeries(mxColorSeries->GetSelectEntryColor());
530 maAttributes.setColorNegative(mxColorNegative->GetSelectEntryColor());
531 maAttributes.setColorMarkers(mxColorMarker->GetSelectEntryColor());
532 maAttributes.setColorHigh(mxColorHigh->GetSelectEntryColor());
533 maAttributes.setColorLow(mxColorLow->GetSelectEntryColor());
534 maAttributes.setColorFirst(mxColorFirst->GetSelectEntryColor());
535 maAttributes.setColorLast(mxColorLast->GetSelectEntryColor());
536
537 auto& rDocFunc = mrViewData.GetDocShell()->GetDocFunc();
538
540 {
542 }
543 else
544 {
545 auto pNewSparklineGroup = std::make_shared<sc::SparklineGroup>(maAttributes);
546 rDocFunc.InsertSparklines(maInputRange, maOutputRange, pNewSparklineGroup);
547 }
548}
549
550} // end sc
551
552/* vim:set shiftwidth=4 softtabstop=4 expandtab: */
ScRefFlags
Definition: address.hxx:158
Reference< XExecutableDialog > m_xDialog
void UseInputStringForFormatting()
virtual void ClearMinValue()
virtual void ClearMaxValue()
SvNumberFormatter * GetFormatter() const
SCROW Row() const
Definition: address.hxx:274
@ INITIALIZE_INVALID
Definition: address.hxx:221
SCCOL Col() const
Definition: address.hxx:279
SC_DLLPUBLIC bool ChangeSparklineGroupAttributes(std::shared_ptr< sc::SparklineGroup > const &pExistingSparklineGroup, sc::SparklineAttributes const &rNewAttributes)
Definition: docfunc.cxx:5884
ScDocFunc & GetDocFunc()
Definition: docsh.hxx:222
SC_DLLPUBLIC std::shared_ptr< sc::Sparkline > GetSparkline(ScAddress const &rPosition)
Returns sparkline at the address if it exists.
Definition: document.cxx:6619
SC_DLLPUBLIC formula::FormulaGrammar::AddressConvention GetAddressConvention() const
Definition: documen3.cxx:502
SC_DLLPUBLIC bool HasOneSparklineGroup(ScRange const &rRange)
Definition: document.cxx:6668
size_t size() const
Definition: rangelst.hxx:89
OUString Format(const ScDocument &rDocument, ScRefFlags nFlags=ScRefFlags::ZERO, const ScAddress::Details &rDetails=ScAddress::detailsOOOa1, bool bFullAddressNotation=false) const
Returns string with formatted cell range from aStart to aEnd, according to provided address conventio...
Definition: address.cxx:2170
ScAddress aEnd
Definition: address.hxx:498
bool IsValid() const
Definition: address.hxx:544
ScAddress aStart
Definition: address.hxx:497
virtual void RefInputStart(formula::RefEdit *pEdit, formula::RefButton *pButton=nullptr) override
Definition: anyrefdg.cxx:749
virtual void RefInputDone(bool bForced=false) override
Definition: anyrefdg.cxx:779
bool DoClose(sal_uInt16 nId)
Definition: anyrefdg.cxx:718
ScDocShell * GetDocShell() const
Definition: viewdata.hxx:354
ScMarkType GetSimpleArea(SCCOL &rStartCol, SCROW &rStartRow, SCTAB &rStartTab, SCCOL &rEndCol, SCROW &rEndRow, SCTAB &rEndTab) const
Definition: viewdata.cxx:1181
DisplayEmptyCellsAs getDisplayEmptyCellsAs() const
std::optional< double > getManualMax() const
SparklineType getType() const
void setColorLast(Color aColorSeries)
void setColorSeries(Color aColorSeries)
void setColorFirst(Color aColorSeries)
void setColorLow(Color aColorSeries)
std::optional< double > getManualMin() const
double getLineWeight() const
Line weight or width in points.
void setColorMarkers(Color aColorSeries)
void setColorNegative(Color aColorSeries)
void setColorHigh(Color aColorSeries)
Dialog to create or edit sparkline group attributes.
std::unique_ptr< weld::CheckButton > mxCheckButtonHigh
std::unique_ptr< weld::CheckButton > mxCheckDisplayXAxis
std::unique_ptr< weld::FormattedSpinButton > mxSpinCustomMin
std::unique_ptr< ColorListBox > mxColorMarker
std::unique_ptr< weld::SpinButton > mxSpinLineWidth
std::unique_ptr< ColorListBox > mxColorFirst
std::unique_ptr< weld::CheckButton > mxCheckDisplayHidden
virtual ~SparklineDialog() override
SparklineDialog(SfxBindings *pBindings, SfxChildWindow *pChildWindow, weld::Window *pWindow, ScViewData &rViewData)
std::unique_ptr< weld::FormattedSpinButton > mxSpinCustomMax
std::unique_ptr< weld::ComboBox > mxType
std::unique_ptr< ColorListBox > mxColorNegative
std::unique_ptr< ColorListBox > mxColorHigh
std::unique_ptr< weld::CheckButton > mxCheckButtonMarker
std::unique_ptr< ColorListBox > mxColorSeries
std::unique_ptr< weld::Frame > mxFrameData
std::unique_ptr< weld::CheckButton > mxCheckButtonNegative
std::unique_ptr< formula::RefEdit > mxOutputRangeEdit
std::unique_ptr< formula::RefEdit > mxInputRangeEdit
std::unique_ptr< weld::ComboBox > mxComboMinAxisType
std::unique_ptr< weld::ComboBox > mxComboMaxAxisType
std::unique_ptr< weld::CheckButton > mxCheckButtonLast
std::unique_ptr< weld::CheckButton > mxCheckButtonFirst
std::unique_ptr< weld::ComboBox > mxDisplayEmptyGap
std::shared_ptr< sc::SparklineGroup > mpSparklineGroup
std::unique_ptr< weld::CheckButton > mxCheckRightToLeft
formula::RefEdit * mpActiveEdit
virtual void SetReference(const ScRange &rRef, ScDocument &rDocument) override
std::unique_ptr< weld::Button > mxButtonOk
virtual void Close() override
sc::SparklineAttributes maAttributes
std::unique_ptr< ColorListBox > mxColorLow
std::unique_ptr< weld::CheckButton > mxCheckButtonLow
virtual void SetActive() override
std::unique_ptr< ColorListBox > mxColorLast
Any value
float u
CAUTION! The following defines must be in the same namespace as the respective type.
IMPL_LINK_NOARG(SharedStringPoolPurge, timerHandler, Timer *, void)
RangeOrientation
IMPL_LINK(SearchResultsDlg, HeaderBarClick, int, nColumn, void)
RangeOrientation calculateOrientation(sal_Int32 nOutputSize, ScRange const &rInputRange)
Determine the sparkline group orientation for the input data the output size.
RET_OK
RET_CANCEL