summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorBernhard Widl <bernhard.widl@cib.de>2017-09-15 17:39:48 +0200
committerThorsten Behrens <Thorsten.Behrens@CIB.de>2017-09-19 01:11:25 +0200
commit7d5245848c28f5786258476cd7aa2a4523645de3 (patch)
treedc57a024f062b9d18bf647710652b67206c3b0d7
parentc686dc4f33c7461a28df95603d06591a3a0171cd (diff)
tdf#79877 revert to old behavior when clicking on input fields.
doubleclick on input field brings up old input fields dialog that dialog now starts at current field and has previous/next navigation Change-Id: Ie3eec38d62cbf8a8248acb4fd84731c078ebadd4 Reviewed-on: https://gerrit.libreoffice.org/42333 Reviewed-by: Thorsten Behrens <Thorsten.Behrens@CIB.de> Tested-by: Thorsten Behrens <Thorsten.Behrens@CIB.de>
-rw-r--r--sw/inc/swabstdlg.hxx18
-rw-r--r--sw/source/ui/dialog/swdlgfact.cxx28
-rw-r--r--sw/source/ui/dialog/swdlgfact.hxx18
-rw-r--r--sw/source/ui/fldui/DropDownFieldDialog.cxx48
-rw-r--r--sw/source/ui/fldui/inpdlg.cxx31
-rw-r--r--sw/source/uibase/docvw/edtwin.cxx2
-rw-r--r--sw/source/uibase/inc/DropDownFieldDialog.hxx15
-rw-r--r--sw/source/uibase/inc/inpdlg.hxx10
-rw-r--r--sw/source/uibase/inc/wrtsh.hxx6
-rw-r--r--sw/source/uibase/shells/textfld.cxx2
-rw-r--r--sw/source/uibase/wrtsh/wrtsh2.cxx76
-rw-r--r--sw/uiconfig/swriter/ui/dropdownfielddialog.ui27
-rw-r--r--sw/uiconfig/swriter/ui/inputfielddialog.ui27
13 files changed, 248 insertions, 60 deletions
diff --git a/sw/inc/swabstdlg.hxx b/sw/inc/swabstdlg.hxx
index ba607870619d..c582500ac0b0 100644
--- a/sw/inc/swabstdlg.hxx
+++ b/sw/inc/swabstdlg.hxx
@@ -111,9 +111,11 @@ protected:
virtual ~AbstractFieldInputDlg() override = default;
public:
//from class SalFrame
- virtual void SetWindowState( const OString & rStr ) = 0;
- virtual OString GetWindowState() const = 0;
- virtual void EndDialog(sal_Int32 nResult) override = 0;
+ virtual void SetWindowState( const OString & rStr ) = 0;
+ virtual OString GetWindowState() const = 0;
+ virtual void EndDialog(sal_Int32 nResult) override = 0;
+ virtual bool PrevButtonPressed() const = 0;
+ virtual bool NextButtonPressed() const = 0;
};
class AbstractInsFootNoteDlg : public VclAbstractDialog
@@ -282,8 +284,10 @@ class AbstractDropDownFieldDialog : public VclAbstractDialog
protected:
virtual ~AbstractDropDownFieldDialog() override = default;
public:
- virtual OString GetWindowState() const = 0; //this method inherit from SystemWindow
- virtual void SetWindowState( const OString & rStr ) = 0; //this method inherit from SystemWindow
+ virtual OString GetWindowState() const = 0; //this method inherit from SystemWindow
+ virtual void SetWindowState( const OString & rStr ) = 0; //this method inherit from SystemWindow
+ virtual bool PrevButtonPressed() const = 0;
+ virtual bool NextButtonPressed() const = 0;
};
class AbstractSwLabDlg : public SfxAbstractTabDialog
@@ -404,7 +408,7 @@ public:
virtual VclPtr<SfxAbstractTabDialog> CreateSwFootNoteOptionDlg(vcl::Window *pParent, SwWrtShell &rSh) = 0;
virtual VclPtr<AbstractDropDownFieldDialog> CreateDropDownFieldDialog(SwWrtShell &rSh,
- SwField* pField, bool bNextButton) = 0;
+ SwField* pField, bool bPrevButton, bool bNextButton) = 0;
virtual VclPtr<SfxAbstractTabDialog> CreateSwEnvDlg ( vcl::Window* pParent, const SfxItemSet& rSet, SwWrtShell* pWrtSh, Printer* pPrt, bool bInsert ) = 0;
virtual VclPtr<AbstractSwLabDlg> CreateSwLabDlg(const SfxItemSet& rSet,
@@ -463,7 +467,7 @@ public:
SwGlossaryHdl* pGlosHdl,
SwWrtShell *pWrtShell) = 0;
virtual VclPtr<AbstractFieldInputDlg> CreateFieldInputDlg(vcl::Window *pParent,
- SwWrtShell &rSh, SwField* pField, bool bNextButton) = 0;
+ SwWrtShell &rSh, SwField* pField, bool bPrevButton, bool bNextButton) = 0;
virtual VclPtr<AbstractInsFootNoteDlg> CreateInsFootNoteDlg(vcl::Window * pParent,
SwWrtShell &rSh, bool bEd = false) = 0;
virtual VclPtr<VclAbstractDialog> CreateTitlePageDlg ( vcl::Window * pParent ) = 0;
diff --git a/sw/source/ui/dialog/swdlgfact.cxx b/sw/source/ui/dialog/swdlgfact.cxx
index 9d6f17de3971..12f2ce433673 100644
--- a/sw/source/ui/dialog/swdlgfact.cxx
+++ b/sw/source/ui/dialog/swdlgfact.cxx
@@ -239,6 +239,16 @@ void AbstractDropDownFieldDialog_Impl::SetWindowState( const OString& rStr )
pDlg->SetWindowState(rStr);
}
+bool AbstractDropDownFieldDialog_Impl::PrevButtonPressed() const
+{
+ return pDlg->PrevButtonPressed();
+}
+
+bool AbstractDropDownFieldDialog_Impl::NextButtonPressed() const
+{
+ return pDlg->NextButtonPressed();
+}
+
void AbstractSwLabDlg_Impl::SetCurPageId( sal_uInt16 nId )
{
pDlg->SetCurPageId( nId );
@@ -411,6 +421,16 @@ void AbstractFieldInputDlg_Impl::EndDialog(sal_Int32 n)
pDlg->EndDialog(n);
}
+bool AbstractFieldInputDlg_Impl::PrevButtonPressed() const
+{
+ return pDlg->PrevButtonPressed();
+}
+
+bool AbstractFieldInputDlg_Impl::NextButtonPressed() const
+{
+ return pDlg->NextButtonPressed();
+}
+
OUString AbstractInsFootNoteDlg_Impl::GetFontName()
{
return pDlg->GetFontName();
@@ -723,9 +743,9 @@ VclPtr<SfxAbstractTabDialog> SwAbstractDialogFactory_Impl::CreateSwFootNoteOptio
}
VclPtr<AbstractDropDownFieldDialog> SwAbstractDialogFactory_Impl::CreateDropDownFieldDialog(
- SwWrtShell &rSh, SwField* pField, bool bNextButton)
+ SwWrtShell &rSh, SwField* pField, bool bPrevButton, bool bNextButton)
{
- VclPtr<sw::DropDownFieldDialog> pDlg = VclPtr<sw::DropDownFieldDialog>::Create(nullptr, rSh, pField, bNextButton);
+ VclPtr<sw::DropDownFieldDialog> pDlg = VclPtr<sw::DropDownFieldDialog>::Create(nullptr, rSh, pField, bPrevButton, bNextButton);
return VclPtr<AbstractDropDownFieldDialog_Impl>::Create( pDlg );
}
@@ -888,9 +908,9 @@ VclPtr<AbstractGlossaryDlg> SwAbstractDialogFactory_Impl::CreateGlossaryDlg(SfxV
}
VclPtr<AbstractFieldInputDlg> SwAbstractDialogFactory_Impl::CreateFieldInputDlg(vcl::Window *pParent,
- SwWrtShell &rSh, SwField* pField, bool bNextButton)
+ SwWrtShell &rSh, SwField* pField, bool bPrevButton, bool bNextButton)
{
- VclPtr<SwFieldInputDlg> pDlg = VclPtr<SwFieldInputDlg>::Create( pParent, rSh, pField, bNextButton );
+ VclPtr<SwFieldInputDlg> pDlg = VclPtr<SwFieldInputDlg>::Create( pParent, rSh, pField, bPrevButton, bNextButton );
return VclPtr<AbstractFieldInputDlg_Impl>::Create( pDlg );
}
diff --git a/sw/source/ui/dialog/swdlgfact.hxx b/sw/source/ui/dialog/swdlgfact.hxx
index d6375e95103f..0f94db107ab8 100644
--- a/sw/source/ui/dialog/swdlgfact.hxx
+++ b/sw/source/ui/dialog/swdlgfact.hxx
@@ -156,8 +156,10 @@ class AbstractSwInsertDBColAutoPilot_Impl : public AbstractSwInsertDBColAutoPil
class AbstractDropDownFieldDialog_Impl : public AbstractDropDownFieldDialog
{
DECL_ABSTDLG_BASE(AbstractDropDownFieldDialog_Impl, sw::DropDownFieldDialog)
- virtual OString GetWindowState() const override; //this method inherit from SystemWindow
- virtual void SetWindowState( const OString& rStr ) override; //this method inherit from SystemWindow
+ virtual OString GetWindowState() const override; //this method inherit from SystemWindow
+ virtual void SetWindowState( const OString& rStr ) override; //this method inherit from SystemWindow
+ virtual bool PrevButtonPressed() const override;
+ virtual bool NextButtonPressed() const override;
};
class AbstractSwLabDlg_Impl : public AbstractSwLabDlg
@@ -236,9 +238,11 @@ class AbstractFieldInputDlg_Impl : public AbstractFieldInputDlg
{
DECL_ABSTDLG_BASE(AbstractFieldInputDlg_Impl,SwFieldInputDlg)
//from class SalFrame
- virtual void SetWindowState( const OString & rStr ) override;
- virtual OString GetWindowState() const override;
- virtual void EndDialog(sal_Int32) override;
+ virtual void SetWindowState( const OString & rStr ) override;
+ virtual OString GetWindowState() const override;
+ virtual void EndDialog(sal_Int32) override;
+ virtual bool PrevButtonPressed() const override;
+ virtual bool NextButtonPressed() const override;
};
class SwInsFootNoteDlg;
@@ -393,7 +397,7 @@ public:
virtual VclPtr<SfxAbstractTabDialog> CreateSwFootNoteOptionDlg(vcl::Window *pParent, SwWrtShell &rSh) override;
virtual VclPtr<AbstractDropDownFieldDialog> CreateDropDownFieldDialog(SwWrtShell &rSh,
- SwField* pField, bool bNextButton) override;
+ SwField* pField, bool bPrevButton, bool bNextButton) override;
virtual VclPtr<SfxAbstractTabDialog> CreateSwEnvDlg ( vcl::Window* pParent, const SfxItemSet& rSet, SwWrtShell* pWrtSh, Printer* pPrt, bool bInsert ) override;
virtual VclPtr<AbstractSwLabDlg> CreateSwLabDlg(const SfxItemSet& rSet,
SwDBManager* pDBManager, bool bLabel) override;
@@ -445,7 +449,7 @@ public:
SwGlossaryHdl* pGlosHdl,
SwWrtShell *pWrtShell) override;
virtual VclPtr<AbstractFieldInputDlg> CreateFieldInputDlg(vcl::Window *pParent,
- SwWrtShell &rSh, SwField* pField, bool bNextButton) override;
+ SwWrtShell &rSh, SwField* pField, bool bPrevButton, bool bNextButton) override;
virtual VclPtr<AbstractInsFootNoteDlg> CreateInsFootNoteDlg(
vcl::Window * pParent, SwWrtShell &rSh, bool bEd = false) override;
virtual VclPtr<VclAbstractDialog> CreateTitlePageDlg ( vcl::Window * pParent ) override;
diff --git a/sw/source/ui/fldui/DropDownFieldDialog.cxx b/sw/source/ui/fldui/DropDownFieldDialog.cxx
index f0fa95c02e03..9d624e81d88a 100644
--- a/sw/source/ui/fldui/DropDownFieldDialog.cxx
+++ b/sw/source/ui/fldui/DropDownFieldDialog.cxx
@@ -30,27 +30,36 @@ using namespace ::com::sun::star;
// edit insert-field
sw::DropDownFieldDialog::DropDownFieldDialog(vcl::Window *pParent, SwWrtShell &rS,
- SwField* pField, bool bNextButton)
+ SwField* pField, bool bPrevButton, bool bNextButton)
: SvxStandardDialog(pParent, "DropdownFieldDialog",
"modules/swriter/ui/dropdownfielddialog.ui")
, rSh( rS )
, pDropField(nullptr)
+ , m_pPressedButton(nullptr)
{
get(m_pListItemsLB, "list");
m_pListItemsLB->SetDropDownLineCount(12);
m_pListItemsLB->set_width_request(m_pListItemsLB->approximate_char_width()*32);
get(m_pOKPB, "ok");
+ get(m_pPrevPB, "prev");
get(m_pNextPB, "next");
get(m_pEditPB, "edit");
Link<ListBox&, void> aDoubleLk = LINK(this, DropDownFieldDialog, DoubleClickHdl);
m_pListItemsLB->SetDoubleClickHdl( aDoubleLk );
- Link<Button*,void> aButtonLk = LINK(this, DropDownFieldDialog, ButtonHdl);
- m_pEditPB->SetClickHdl(aButtonLk);
- if( bNextButton )
+ Link<Button*, void> aEditButtonLk = LINK(this, DropDownFieldDialog, EditHdl);
+ Link<Button*,void> aPrevButtonLk = LINK(this, DropDownFieldDialog, PrevHdl);
+ Link<Button*, void> aNextButtonLk = LINK(this, DropDownFieldDialog, NextHdl);
+ m_pEditPB->SetClickHdl(aEditButtonLk);
+ if( bPrevButton || bNextButton )
{
+ m_pPrevPB->Show();
+ m_pPrevPB->SetClickHdl(aPrevButtonLk);
+ m_pPrevPB->Enable(bPrevButton);
+
m_pNextPB->Show();
- m_pNextPB->SetClickHdl(aButtonLk);
+ m_pNextPB->SetClickHdl(aNextButtonLk);
+ m_pNextPB->Enable(bNextButton);
}
if( SwFieldIds::Dropdown == pField->GetTyp()->Which() )
{
@@ -81,8 +90,10 @@ void sw::DropDownFieldDialog::dispose()
{
m_pListItemsLB.clear();
m_pOKPB.clear();
+ m_pPrevPB.clear();
m_pNextPB.clear();
m_pEditPB.clear();
+ m_pPressedButton.clear();
SvxStandardDialog::dispose();
}
@@ -107,9 +118,32 @@ void sw::DropDownFieldDialog::Apply()
}
}
-IMPL_LINK(sw::DropDownFieldDialog, ButtonHdl, Button*, pButton, void)
+bool sw::DropDownFieldDialog::PrevButtonPressed() const
+{
+ return m_pPressedButton == m_pPrevPB;
+}
+
+bool sw::DropDownFieldDialog::NextButtonPressed() const
+{
+ return m_pPressedButton == m_pNextPB;
+}
+
+IMPL_LINK_NOARG(sw::DropDownFieldDialog, EditHdl, Button*, void)
+{
+ m_pPressedButton = m_pEditPB;
+ EndDialog(RET_OK);
+}
+
+IMPL_LINK_NOARG(sw::DropDownFieldDialog, PrevHdl, Button*, void)
+{
+ m_pPressedButton = m_pPrevPB;
+ EndDialog(RET_OK);
+}
+
+IMPL_LINK_NOARG(sw::DropDownFieldDialog, NextHdl, Button*, void)
{
- EndDialog(m_pNextPB == pButton ? RET_OK : RET_YES );
+ m_pPressedButton = m_pNextPB;
+ EndDialog(RET_OK);
}
IMPL_LINK_NOARG(sw::DropDownFieldDialog, DoubleClickHdl, ListBox&, void)
diff --git a/sw/source/ui/fldui/inpdlg.cxx b/sw/source/ui/fldui/inpdlg.cxx
index 751cba3d90ca..c11adb50e72e 100644
--- a/sw/source/ui/fldui/inpdlg.cxx
+++ b/sw/source/ui/fldui/inpdlg.cxx
@@ -30,17 +30,19 @@
// edit field-insert
SwFieldInputDlg::SwFieldInputDlg( vcl::Window *pParent, SwWrtShell &rS,
- SwField* pField, bool bNextButton )
+ SwField* pField, bool bPrevButton, bool bNextButton )
: SvxStandardDialog( pParent, "InputFieldDialog",
"modules/swriter/ui/inputfielddialog.ui")
, rSh( rS )
, pInpField(nullptr)
, pSetField(nullptr)
, pUsrType(nullptr)
+ , m_pPressedButton(nullptr)
{
get(m_pLabelED, "name");
get(m_pEditED, "text");
m_pEditED->set_height_request(m_pEditED->GetTextHeight() * 9);
+ get(m_pPrevBT, "prev");
get(m_pNextBT, "next");
get(m_pOKBT, "ok");
// switch font for Edit
@@ -48,10 +50,15 @@ SwFieldInputDlg::SwFieldInputDlg( vcl::Window *pParent, SwWrtShell &rS,
aFont.SetWeight(WEIGHT_LIGHT);
m_pEditED->SetFont(aFont);
- if( bNextButton )
+ if( bPrevButton || bNextButton )
{
+ m_pPrevBT->Show();
+ m_pPrevBT->SetClickHdl(LINK(this, SwFieldInputDlg, PrevHdl));
+ m_pPrevBT->Enable(bPrevButton);
+
m_pNextBT->Show();
m_pNextBT->SetClickHdl(LINK(this, SwFieldInputDlg, NextHdl));
+ m_pNextBT->Enable(bNextButton);
}
// evaluation here
@@ -114,7 +121,9 @@ void SwFieldInputDlg::dispose()
m_pLabelED.clear();
m_pEditED.clear();
m_pOKBT.clear();
+ m_pPrevBT.clear();
m_pNextBT.clear();
+ m_pPressedButton.clear();
SvxStandardDialog::dispose();
}
@@ -162,9 +171,27 @@ void SwFieldInputDlg::Apply()
rSh.EndAllAction();
}
+bool SwFieldInputDlg::PrevButtonPressed() const
+{
+ return m_pPressedButton == m_pPrevBT;
+}
+
+bool SwFieldInputDlg::NextButtonPressed() const
+{
+ return m_pPressedButton == m_pNextBT;
+}
+
+IMPL_LINK_NOARG(SwFieldInputDlg, PrevHdl, Button*, void)
+{
+ m_pPressedButton = m_pPrevBT;
+ EndDialog(RET_OK);
+}
+
IMPL_LINK_NOARG(SwFieldInputDlg, NextHdl, Button*, void)
{
+ m_pPressedButton = m_pNextBT;
EndDialog(RET_OK);
}
+
/* vim:set shiftwidth=4 softtabstop=4 expandtab: */
diff --git a/sw/source/uibase/docvw/edtwin.cxx b/sw/source/uibase/docvw/edtwin.cxx
index 41c8b841a6e6..5d87ea7909f1 100644
--- a/sw/source/uibase/docvw/edtwin.cxx
+++ b/sw/source/uibase/docvw/edtwin.cxx
@@ -3370,7 +3370,7 @@ void SwEditWin::MouseButtonDown(const MouseEvent& _rMEvt)
pVFrame->GetBindings().Execute(FN_EDIT_AUTH_ENTRY_DLG);
break;
default:
- pVFrame->GetBindings().Execute(FN_EDIT_FIELD);
+ pVFrame->GetBindings().Execute(FN_UPDATE_INPUTFIELDS);
}
}
return;
diff --git a/sw/source/uibase/inc/DropDownFieldDialog.hxx b/sw/source/uibase/inc/DropDownFieldDialog.hxx
index d670afb55c70..b2dbffaefa2c 100644
--- a/sw/source/uibase/inc/DropDownFieldDialog.hxx
+++ b/sw/source/uibase/inc/DropDownFieldDialog.hxx
@@ -36,21 +36,28 @@ class DropDownFieldDialog : public SvxStandardDialog
VclPtr<ListBox> m_pListItemsLB;
VclPtr<OKButton> m_pOKPB;
+ VclPtr<PushButton> m_pPrevPB;
VclPtr<PushButton> m_pNextPB;
VclPtr<PushButton> m_pEditPB;
- SwWrtShell &rSh;
- SwDropDownField* pDropField;
+ SwWrtShell &rSh;
+ SwDropDownField* pDropField;
- DECL_LINK(ButtonHdl, Button*, void);
+ VclPtr<PushButton> m_pPressedButton;
+
+ DECL_LINK(EditHdl, Button*, void);
+ DECL_LINK(PrevHdl, Button*, void);
+ DECL_LINK(NextHdl, Button*, void);
virtual void Apply() override;
DECL_LINK(DoubleClickHdl, ListBox&, void);
public:
DropDownFieldDialog( vcl::Window *pParent, SwWrtShell &rSh,
- SwField* pField, bool bNextButton );
+ SwField* pField, bool bPrevButton, bool bNextButton );
virtual ~DropDownFieldDialog() override;
virtual void dispose() override;
+ bool PrevButtonPressed() const;
+ bool NextButtonPressed() const;
};
} //namespace sw
diff --git a/sw/source/uibase/inc/inpdlg.hxx b/sw/source/uibase/inc/inpdlg.hxx
index 505ed6d52958..9307f5d9e8cd 100644
--- a/sw/source/uibase/inc/inpdlg.hxx
+++ b/sw/source/uibase/inc/inpdlg.hxx
@@ -30,6 +30,7 @@ class SwSetExpField;
class SwUserFieldType;
class SwField;
class SwWrtShell;
+class SwFieldMgr;
// insert fields
class SwFieldInputDlg: public SvxStandardDialog
@@ -48,13 +49,20 @@ class SwFieldInputDlg: public SvxStandardDialog
VclPtr<OKButton> m_pOKBT;
VclPtr<PushButton> m_pNextBT;
+ VclPtr<PushButton> m_pPrevBT;
+
+ VclPtr<PushButton> m_pPressedButton;
DECL_LINK(NextHdl, Button*, void);
+ DECL_LINK(PrevHdl, Button*, void);
+
public:
SwFieldInputDlg( vcl::Window *pParent, SwWrtShell &rSh,
- SwField* pField, bool bNextButton );
+ SwField* pField, bool bPrevButton, bool bNextButton );
virtual ~SwFieldInputDlg() override;
virtual void dispose() override;
+ bool PrevButtonPressed() const;
+ bool NextButtonPressed() const;
};
#endif
diff --git a/sw/source/uibase/inc/wrtsh.hxx b/sw/source/uibase/inc/wrtsh.hxx
index 95d0564668eb..d95ede2d2b50 100644
--- a/sw/source/uibase/inc/wrtsh.hxx
+++ b/sw/source/uibase/inc/wrtsh.hxx
@@ -359,6 +359,8 @@ typedef bool (SwWrtShell:: *FNSimpleMove)();
enum DoType { UNDO, REDO, REPEAT };
+ enum FieldDialogPressedButton { BTN_NONE, BTN_EDIT, BTN_PREV, BTN_NEXT };
+
void Do( DoType eDoType, sal_uInt16 nCnt = 1 );
OUString GetDoString( DoType eDoType ) const;
OUString GetRepeatString() const;
@@ -390,9 +392,9 @@ typedef bool (SwWrtShell:: *FNSimpleMove)();
void MoveCursor( bool bWithSelect = false );
// update input fields
- bool StartInputFieldDlg(SwField*, bool bNextButton, vcl::Window* pParentWin = nullptr, OString* pWindowState = nullptr);
+ bool StartInputFieldDlg(SwField*, bool bPrevButton, bool bNextButton, vcl::Window* pParentWin = nullptr, OString* pWindowState = nullptr, FieldDialogPressedButton* pPressedButton = nullptr);
// update DropDown fields
- bool StartDropDownFieldDlg(SwField*, bool bNextButton, OString* pWindowState = nullptr);
+ bool StartDropDownFieldDlg(SwField*, bool bPrevButton, bool bNextButton, OString* pWindowState = nullptr, FieldDialogPressedButton* pPressedButton = nullptr);
//"Handler" for changes at DrawView - for controls.
virtual void DrawSelChanged( ) override;
diff --git a/sw/source/uibase/shells/textfld.cxx b/sw/source/uibase/shells/textfld.cxx
index 74263bae3a81..9eeddb8e2a2b 100644
--- a/sw/source/uibase/shells/textfld.cxx
+++ b/sw/source/uibase/shells/textfld.cxx
@@ -198,7 +198,7 @@ void SwTextShell::ExecField(SfxRequest &rReq)
}
else
{
- rSh.StartInputFieldDlg( rSh.GetCurField( true ), false );
+ rSh.StartInputFieldDlg( rSh.GetCurField( true ), false, false );
}
bRet = true;
}
diff --git a/sw/source/uibase/wrtsh/wrtsh2.cxx b/sw/source/uibase/wrtsh/wrtsh2.cxx
index fb938549ebbf..126d599b018e 100644
--- a/sw/source/uibase/wrtsh/wrtsh2.cxx
+++ b/sw/source/uibase/wrtsh/wrtsh2.cxx
@@ -144,21 +144,50 @@ void SwWrtShell::UpdateInputFields( SwInputFieldList* pLst )
bool bCancel = false;
OString aDlgPos;
- for( size_t i = 0; i < nCnt && !bCancel; ++i )
+
+ size_t nIndex = 0;
+ FieldDialogPressedButton ePressedButton = BTN_NONE;
+
+ SwField* pField = GetCurField();
+ if (pField)
{
- pTmp->GotoFieldPos( i );
- SwField* pField = pTmp->GetField( i );
- if(pField->GetTyp()->Which() == SwFieldIds::Dropdown)
- bCancel = StartDropDownFieldDlg( pField, true, &aDlgPos );
+ for (size_t i = 0; i < nCnt; i++)
+ {
+ if (pField == pTmp->GetField(i))
+ {
+ nIndex = i;
+ break;
+ }
+ }
+ }
+
+ while (!bCancel)
+ {
+ bool bPrev = nIndex > 0;
+ bool bNext = nIndex < nCnt - 1;
+ pTmp->GotoFieldPos(nIndex);
+ pField = pTmp->GetField(nIndex);
+ if (pField->GetTyp()->Which() == SwFieldIds::Dropdown)
+ {
+ bCancel = StartDropDownFieldDlg(pField, bPrev, bNext, &aDlgPos, &ePressedButton);
+ }
else
- bCancel = StartInputFieldDlg( pField, true, nullptr, &aDlgPos);
+ bCancel = StartInputFieldDlg(pField, bPrev, bNext, nullptr, &aDlgPos, &ePressedButton);
if (!bCancel)
{
// Otherwise update error at multi-selection:
- pTmp->GetField( i )->GetTyp()->UpdateFields();
+ pTmp->GetField(nIndex)->GetTyp()->UpdateFields();
+
+ if (ePressedButton == BTN_PREV && nIndex > 0)
+ nIndex--;
+ else if (ePressedButton == BTN_NEXT && nIndex < nCnt - 1)
+ nIndex++;
+ else
+ bCancel = true;
}
}
+
pTmp->PopCursor();
}
@@ -225,13 +254,13 @@ class FieldDeletionModify : public SwModify
};
// Start input dialog for a specific field
-bool SwWrtShell::StartInputFieldDlg( SwField* pField, bool bNextButton,
- vcl::Window* pParentWin, OString* pWindowState )
+bool SwWrtShell::StartInputFieldDlg( SwField* pField, bool bPrevButton, bool bNextButton,
+ vcl::Window* pParentWin, OString* pWindowState, SwWrtShell::FieldDialogPressedButton* pPressedButton )
{
SwAbstractDialogFactory* pFact = SwAbstractDialogFactory::Create();
OSL_ENSURE(pFact, "Dialog creation failed!");
- ScopedVclPtr<AbstractFieldInputDlg> pDlg(pFact->CreateFieldInputDlg(pParentWin, *this, pField, bNextButton));
+ ScopedVclPtr<AbstractFieldInputDlg> pDlg(pFact->CreateFieldInputDlg(pParentWin, *this, pField, bPrevButton, bNextButton));
OSL_ENSURE(pDlg, "Dialog creation failed!");
if(pWindowState && !pWindowState->isEmpty())
pDlg->SetWindowState(*pWindowState);
@@ -246,23 +275,40 @@ bool SwWrtShell::StartInputFieldDlg( SwField* pField, bool bNextButton,
if(pWindowState)
*pWindowState = pDlg->GetWindowState();
+ if (pPressedButton)
+ {
+ if (pDlg->PrevButtonPressed())
+ *pPressedButton = BTN_PREV;
+ else if (pDlg->NextButtonPressed())
+ *pPressedButton = BTN_NEXT;
+ }
+
pDlg.disposeAndClear();
GetWin()->Update();
return bRet;
}
-bool SwWrtShell::StartDropDownFieldDlg(SwField* pField, bool bNextButton, OString* pWindowState)
+bool SwWrtShell::StartDropDownFieldDlg(SwField* pField, bool bPrevButton, bool bNextButton, OString* pWindowState, SwWrtShell::FieldDialogPressedButton* pPressedButton)
{
SwAbstractDialogFactory* pFact = SwAbstractDialogFactory::Create();
OSL_ENSURE(pFact, "SwAbstractDialogFactory fail!");
- ScopedVclPtr<AbstractDropDownFieldDialog> pDlg(pFact->CreateDropDownFieldDialog(*this, pField, bNextButton));
+ ScopedVclPtr<AbstractDropDownFieldDialog> pDlg(pFact->CreateDropDownFieldDialog(*this, pField, bPrevButton, bNextButton));
OSL_ENSURE(pDlg, "Dialog creation failed!");
if(pWindowState && !pWindowState->isEmpty())
pDlg->SetWindowState(*pWindowState);
const short nRet = pDlg->Execute();
if(pWindowState)
*pWindowState = pDlg->GetWindowState();
+
+ if (pPressedButton)
+ {
+ if (pDlg->PrevButtonPressed())
+ *pPressedButton = BTN_PREV;
+ else if (pDlg->NextButtonPressed())
+ *pPressedButton = BTN_NEXT;
+ }
+
pDlg.disposeAndClear();
bool bRet = RET_CANCEL == nRet;
GetWin()->Update();
@@ -387,17 +433,17 @@ void SwWrtShell::ClickToField( const SwField& rField )
const SwInputField* pInputField = dynamic_cast<const SwInputField*>(&rField);
if ( pInputField == nullptr )
{
- StartInputFieldDlg( const_cast<SwField*>(&rField), false );
+ StartInputFieldDlg( const_cast<SwField*>(&rField), false, false );
}
}
break;
case SwFieldIds::SetExp:
if( static_cast<const SwSetExpField&>(rField).GetInputFlag() )
- StartInputFieldDlg( const_cast<SwField*>(&rField), false );
+ StartInputFieldDlg( const_cast<SwField*>(&rField), false, false );
break;
case SwFieldIds::Dropdown :
- StartDropDownFieldDlg( const_cast<SwField*>(&rField), false );
+ StartDropDownFieldDlg( const_cast<SwField*>(&rField), false, false );
break;
default:
SAL_WARN_IF(rField.IsClickable(), "sw", "unhandled clickable field!");
diff --git a/sw/uiconfig/swriter/ui/dropdownfielddialog.ui b/sw/uiconfig/swriter/ui/dropdownfielddialog.ui
index 5feb9343356c..c329ae6b81e4 100644
--- a/sw/uiconfig/swriter/ui/dropdownfielddialog.ui
+++ b/sw/uiconfig/swriter/ui/dropdownfielddialog.ui
@@ -1,7 +1,6 @@
<?xml version="1.0" encoding="UTF-8"?>
-<!-- Generated with glade 3.18.3 -->
<interface domain="sw">
- <requires lib="gtk+" version="3.0"/>
+ <!-- interface-requires gtk+ 3.0 -->
<object class="GtkDialog" id="DropdownFieldDialog">
<property name="can_focus">False</property>
<property name="border_width">6</property>
@@ -26,6 +25,7 @@
<property name="can_default">True</property>
<property name="has_default">True</property>
<property name="receives_default">True</property>
+ <property name="margin_top">3</property>
<property name="use_stock">True</property>
</object>
<packing>
@@ -49,8 +49,8 @@
</packing>
</child>
<child>
- <object class="GtkButton" id="next">
- <property name="label">gtk-media-next</property>
+ <object class="GtkButton" id="prev">
+ <property name="label">gtk-media-previous</property>
<property name="can_focus">True</property>
<property name="receives_default">True</property>
<property name="no_show_all">True</property>
@@ -92,6 +92,20 @@
<property name="secondary">True</property>
</packing>
</child>
+ <child>
+ <object class="GtkButton" id="next">
+ <property name="label">gtk-media-next</property>
+ <property name="can_focus">True</property>
+ <property name="receives_default">True</property>
+ <property name="no_show_all">True</property>
+ <property name="use_stock">True</property>
+ </object>
+ <packing>
+ <property name="expand">False</property>
+ <property name="fill">True</property>
+ <property name="position">5</property>
+ </packing>
+ </child>
</object>
<packing>
<property name="expand">False</property>
@@ -145,6 +159,8 @@
<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>
</object>
@@ -173,9 +189,10 @@
<action-widgets>
<action-widget response="0">ok</action-widget>
<action-widget response="0">cancel</action-widget>
- <action-widget response="0">next</action-widget>
+ <action-widget response="0">prev</action-widget>
<action-widget response="0">help</action-widget>
<action-widget response="0">edit</action-widget>
+ <action-widget response="0">next</action-widget>
</action-widgets>
</object>
</interface>
diff --git a/sw/uiconfig/swriter/ui/inputfielddialog.ui b/sw/uiconfig/swriter/ui/inputfielddialog.ui
index c1901ae0866f..6ccd909c7a11 100644
--- a/sw/uiconfig/swriter/ui/inputfielddialog.ui
+++ b/sw/uiconfig/swriter/ui/inputfielddialog.ui
@@ -1,7 +1,6 @@
<?xml version="1.0" encoding="UTF-8"?>
-<!-- Generated with glade 3.20.0 -->
<interface domain="sw">
- <requires lib="gtk+" version="3.0"/>
+ <!-- interface-requires gtk+ 3.0 -->
<object class="GtkDialog" id="InputFieldDialog">
<property name="can_focus">False</property>
<property name="border_width">6</property>
@@ -47,6 +46,20 @@
</packing>
</child>
<child>
+ <object class="GtkButton" id="prev">
+ <property name="label">gtk-media-previous</property>
+ <property name="can_focus">True</property>
+ <property name="receives_default">True</property>
+ <property name="no_show_all">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="next">
<property name="label">gtk-media-next</property>
<property name="can_focus">True</property>
@@ -57,7 +70,7 @@
<packing>
<property name="expand">False</property>
<property name="fill">True</property>
- <property name="position">2</property>
+ <property name="position">3</property>
</packing>
</child>
<child>
@@ -71,7 +84,7 @@
<packing>
<property name="expand">False</property>
<property name="fill">True</property>
- <property name="position">3</property>
+ <property name="position">4</property>
<property name="secondary">True</property>
</packing>
</child>
@@ -102,6 +115,8 @@
<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>
@@ -117,6 +132,8 @@
<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>
@@ -140,6 +157,7 @@
<property name="left_attach">0</property>
<property name="top_attach">1</property>
<property name="width">2</property>
+ <property name="height">1</property>
</packing>
</child>
</object>
@@ -154,6 +172,7 @@
<action-widgets>
<action-widget response="0">ok</action-widget>
<action-widget response="0">cancel</action-widget>
+ <action-widget response="0">prev</action-widget>
<action-widget response="0">next</action-widget>
<action-widget response="0">help</action-widget>
</action-widgets>