summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorManfred Blume <manfred.blume@cib.de>2017-04-05 13:31:25 +0200
committerKatarina Behrens <Katarina.Behrens@cib.de>2017-04-07 10:42:54 +0000
commit1a95e2a2bbdd1b95d97d3e79b1ef0bc5da95a110 (patch)
tree365d08e845d242c8225ade6e558995e8423a5c10
parentb13a0a27444ffbf9ef45cb16ad69fdff0dc64306 (diff)
tdf#74074 Ability to rearrange order of conditions
applied most comments from Katarina Change-Id: I8da44b234ce37747b52fb32c4c13607c06767257 Reviewed-on: https://gerrit.libreoffice.org/36140 Tested-by: Jenkins <ci@libreoffice.org> Reviewed-by: Katarina Behrens <Katarina.Behrens@cib.de>
-rw-r--r--sc/source/ui/condformat/condformatdlg.cxx79
-rw-r--r--sc/source/ui/inc/condformatdlg.hxx5
-rw-r--r--sc/uiconfig/scalc/ui/conditionalformatdialog.ui34
3 files changed, 113 insertions, 5 deletions
diff --git a/sc/source/ui/condformat/condformatdlg.cxx b/sc/source/ui/condformat/condformatdlg.cxx
index 8689c0be7115..a39a9cea2e55 100644
--- a/sc/source/ui/condformat/condformatdlg.cxx
+++ b/sc/source/ui/condformat/condformatdlg.cxx
@@ -144,7 +144,10 @@ void ScCondFormatList::init(ScDocument* pDoc, ScCondFormatDlg* pDialogParent,
Thaw();
RecalcAll();
if (!maEntries.empty())
+ {
(*maEntries.begin())->SetActive();
+ mpDialogParent->OnSelectionChange(0, maEntries.size());
+ }
RecalcAll();
}
@@ -392,6 +395,7 @@ IMPL_LINK_NOARG( ScCondFormatList, AddBtnHdl, Button*, void )
}
mpDialogParent->InvalidateRefData();
pNewEntry->SetActive();
+ mpDialogParent->OnSelectionChange(maEntries.size() - 1, maEntries.size());
Thaw();
RecalcAll();
}
@@ -410,6 +414,51 @@ IMPL_LINK_NOARG( ScCondFormatList, RemoveBtnHdl, Button*, void )
}
}
mpDialogParent->InvalidateRefData();
+ mpDialogParent->OnSelectionChange(0, maEntries.size(), false);
+ Thaw();
+ RecalcAll();
+}
+
+IMPL_LINK_NOARG(ScCondFormatList, UpBtnHdl, Button*, void)
+{
+ Freeze();
+ size_t index = 0;
+ for (size_t i = 0; i < maEntries.size(); i++)
+ {
+ auto widget = maEntries[i];
+ if (widget->IsSelected() && i > 0)
+ {
+ std::swap(maEntries[i], maEntries[i - 1]);
+ index = i - 1;
+ break;
+ }
+ }
+ mpDialogParent->InvalidateRefData();
+ mpDialogParent->OnSelectionChange(index, maEntries.size());
+ Thaw();
+ RecalcAll();
+}
+
+IMPL_LINK_NOARG(ScCondFormatList, DownBtnHdl, Button*, void)
+{
+ Freeze();
+ size_t index = 0;
+ for (size_t i = 0; i < maEntries.size(); i++)
+ {
+ auto widget = maEntries[i];
+ if (widget->IsSelected())
+ {
+ index = i;
+ if (i < maEntries.size()-1)
+ {
+ std::swap(maEntries[i], maEntries[i + 1]);
+ index = i + 1;
+ break;
+ }
+ }
+ }
+ mpDialogParent->InvalidateRefData();
+ mpDialogParent->OnSelectionChange(index, maEntries.size());
Thaw();
RecalcAll();
}
@@ -423,11 +472,17 @@ IMPL_LINK( ScCondFormatList, EntrySelectHdl, ScCondFrmtEntry&, rEntry, void )
//A child has focus, but we will hide that, so regrab to whatever new thing gets
//shown instead of leaving it stuck in the inaccessible hidden element
bool bReGrabFocus = HasChildPathFocus();
- for(EntryContainer::iterator itr = maEntries.begin(); itr != maEntries.end(); ++itr)
+ size_t index = 0;
+ for(size_t i = 0; i < maEntries.size(); i++)
{
- (*itr)->SetInactive();
+ if (maEntries[i] == &rEntry)
+ {
+ index = i;
+ }
+ maEntries[i]->SetInactive();
}
mpDialogParent->InvalidateRefData();
+ mpDialogParent->OnSelectionChange(index, maEntries.size());
rEntry.SetActive();
Thaw();
RecalcAll();
@@ -451,6 +506,8 @@ ScCondFormatDlg::ScCondFormatDlg(SfxBindings* pB, SfxChildWindow* pCW,
{
get(mpBtnOk, "ok");
get(mpBtnAdd, "add");
+ get(mpBtnUp, "up");
+ get(mpBtnDown, "down");
get(mpBtnRemove, "delete");
get(mpBtnCancel, "cancel");
@@ -498,6 +555,8 @@ ScCondFormatDlg::ScCondFormatDlg(SfxBindings* pB, SfxChildWindow* pCW,
mpBtnOk->SetClickHdl(LINK(this, ScCondFormatDlg, BtnPressedHdl ) );
mpBtnAdd->SetClickHdl( LINK( mpCondFormList, ScCondFormatList, AddBtnHdl ) );
mpBtnRemove->SetClickHdl( LINK( mpCondFormList, ScCondFormatList, RemoveBtnHdl ) );
+ mpBtnUp->SetClickHdl(LINK(mpCondFormList, ScCondFormatList, UpBtnHdl));
+ mpBtnDown->SetClickHdl(LINK(mpCondFormList, ScCondFormatList, DownBtnHdl));
mpBtnCancel->SetClickHdl( LINK(this, ScCondFormatDlg, BtnPressedHdl ) );
mpEdRange->SetModifyHdl( LINK( this, ScCondFormatDlg, EdRangeModifyHdl ) );
mpEdRange->SetGetFocusHdl( LINK( this, ScCondFormatDlg, RangeGetFocusHdl ) );
@@ -528,6 +587,8 @@ void ScCondFormatDlg::dispose()
mpBtnOk.clear();
mpBtnAdd.clear();
mpBtnRemove.clear();
+ mpBtnUp.clear();
+ mpBtnDown.clear();
mpBtnCancel.clear();
mpFtRange.clear();
mpEdRange.clear();
@@ -690,6 +751,20 @@ void ScCondFormatDlg::CancelPressed()
Close();
}
+void ScCondFormatDlg::OnSelectionChange(size_t nIndex, size_t nSize, bool bSelected)
+{
+ if (nSize <= 1 || !bSelected)
+ {
+ mpBtnUp->Enable(false);
+ mpBtnDown->Enable(false);
+ }
+ else
+ {
+ mpBtnUp->Enable(nIndex != 0);
+ mpBtnDown->Enable(nIndex < nSize - 1);
+ }
+}
+
IMPL_LINK( ScCondFormatDlg, EdRangeModifyHdl, Edit&, rEdit, void )
{
OUString aRangeStr = rEdit.GetText();
diff --git a/sc/source/ui/inc/condformatdlg.hxx b/sc/source/ui/inc/condformatdlg.hxx
index 40ca3db13522..021e21908185 100644
--- a/sc/source/ui/inc/condformatdlg.hxx
+++ b/sc/source/ui/inc/condformatdlg.hxx
@@ -77,6 +77,8 @@ public:
DECL_LINK( AddBtnHdl, Button*, void );
DECL_LINK( RemoveBtnHdl, Button*, void );
+ DECL_LINK( UpBtnHdl, Button*, void );
+ DECL_LINK( DownBtnHdl, Button*, void );
DECL_LINK( ScrollHdl, ScrollBar*, void );
DECL_LINK( EntrySelectHdl, ScCondFrmtEntry&, void );
@@ -91,6 +93,8 @@ private:
VclPtr<PushButton> mpBtnOk;
VclPtr<PushButton> mpBtnAdd;
VclPtr<PushButton> mpBtnRemove;
+ VclPtr<PushButton> mpBtnUp;
+ VclPtr<PushButton> mpBtnDown;
VclPtr<PushButton> mpBtnCancel;
VclPtr<FixedText> mpFtRange;
VclPtr<formula::RefEdit> mpEdRange;
@@ -131,6 +135,7 @@ public:
virtual bool Close() override;
void InvalidateRefData();
+ void OnSelectionChange(size_t nIndex, size_t nSize, bool bSelected = true);
DECL_LINK( BtnPressedHdl, Button*, void );
DECL_LINK( RangeGetFocusHdl, Control&, void );
diff --git a/sc/uiconfig/scalc/ui/conditionalformatdialog.ui b/sc/uiconfig/scalc/ui/conditionalformatdialog.ui
index 8b93610886d1..c7797cb0542c 100644
--- a/sc/uiconfig/scalc/ui/conditionalformatdialog.ui
+++ b/sc/uiconfig/scalc/ui/conditionalformatdialog.ui
@@ -1,8 +1,7 @@
<?xml version="1.0" encoding="UTF-8"?>
-<!-- Generated with glade 3.18.3 -->
<interface>
- <requires lib="gtk+" version="3.0"/>
- <requires lib="LibreOffice" version="1.0"/>
+ <!-- interface-requires gtk+ 3.0 -->
+ <!-- interface-requires LibreOffice 1.0 -->
<object class="GtkDialog" id="ConditionalFormatDialog">
<property name="can_focus">False</property>
<property name="border_width">6</property>
@@ -83,6 +82,34 @@
<property name="position">1</property>
</packing>
</child>
+ <child>
+ <object class="GtkButton" id="up">
+ <property name="label">gtk-go-up</property>
+ <property name="visible">True</property>
+ <property name="can_focus">True</property>
+ <property name="receives_default">True</property>
+ <property name="use_stock">True</property>
+ </object>
+ <packing>
+ <property name="expand">False</property>
+ <property name="fill">True</property>
+ <property name="position">2</property>
+ </packing>
+ </child>
+ <child>
+ <object class="GtkButton" id="down">
+ <property name="label">gtk-go-down</property>
+ <property name="visible">True</property>
+ <property name="can_focus">True</property>
+ <property name="receives_default">True</property>
+ <property name="use_stock">True</property>
+ </object>
+ <packing>
+ <property name="expand">False</property>
+ <property name="fill">True</property>
+ <property name="position">3</property>
+ </packing>
+ </child>
</object>
<packing>
<property name="expand">False</property>
@@ -256,6 +283,7 @@
<action-widgets>
<action-widget response="0">ok</action-widget>
<action-widget response="0">cancel</action-widget>
+ <action-widget response="0">help</action-widget>
</action-widgets>
</object>
</interface>