diff options
author | Bernhard Widl <bernhard.widl@cib.de> | 2017-09-15 17:39:48 +0200 |
---|---|---|
committer | Thorsten Behrens <Thorsten.Behrens@CIB.de> | 2017-09-19 01:11:25 +0200 |
commit | 7d5245848c28f5786258476cd7aa2a4523645de3 (patch) | |
tree | dc57a024f062b9d18bf647710652b67206c3b0d7 | |
parent | c686dc4f33c7461a28df95603d06591a3a0171cd (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.hxx | 18 | ||||
-rw-r--r-- | sw/source/ui/dialog/swdlgfact.cxx | 28 | ||||
-rw-r--r-- | sw/source/ui/dialog/swdlgfact.hxx | 18 | ||||
-rw-r--r-- | sw/source/ui/fldui/DropDownFieldDialog.cxx | 48 | ||||
-rw-r--r-- | sw/source/ui/fldui/inpdlg.cxx | 31 | ||||
-rw-r--r-- | sw/source/uibase/docvw/edtwin.cxx | 2 | ||||
-rw-r--r-- | sw/source/uibase/inc/DropDownFieldDialog.hxx | 15 | ||||
-rw-r--r-- | sw/source/uibase/inc/inpdlg.hxx | 10 | ||||
-rw-r--r-- | sw/source/uibase/inc/wrtsh.hxx | 6 | ||||
-rw-r--r-- | sw/source/uibase/shells/textfld.cxx | 2 | ||||
-rw-r--r-- | sw/source/uibase/wrtsh/wrtsh2.cxx | 76 | ||||
-rw-r--r-- | sw/uiconfig/swriter/ui/dropdownfielddialog.ui | 27 | ||||
-rw-r--r-- | sw/uiconfig/swriter/ui/inputfielddialog.ui | 27 |
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> |