From 5b348b1a8ca3c5ba1049aacba1ac2e3c43ed26b7 Mon Sep 17 00:00:00 2001 From: Samuel Mehrbrodt Date: Tue, 20 Mar 2018 11:36:00 +0100 Subject: tdf#83877 Move SignatureLineDialog to svx To prepare using from Calc Change-Id: I102ecf2c956922dd1458c99bd7cd7be30f6f5ec4 Reviewed-on: https://gerrit.libreoffice.org/51726 Tested-by: Jenkins Reviewed-by: Samuel Mehrbrodt --- include/svx/SignatureLineDialog.hxx | 44 +++ include/svx/svxids.hrc | 6 +- .../org/openoffice/Office/UI/GenericCommands.xcu | 16 + .../org/openoffice/Office/UI/WriterCommands.xcu | 16 - svx/Library_svx.mk | 1 + svx/UIConfig_svx.mk | 1 + svx/sdi/svx.sdi | 36 ++- svx/source/dialog/SignatureLineDialog.cxx | 354 ++++++++++++++++++++ svx/uiconfig/ui/signatureline.ui | 312 ++++++++++++++++++ sw/Library_sw.mk | 1 - sw/UIConfig_swriter.mk | 1 - sw/inc/cmdid.h | 2 - sw/inc/swabstdlg.hxx | 5 +- sw/sdi/swriter.sdi | 34 -- sw/sdi/viewsh.sdi | 4 +- sw/source/ui/dialog/swdlgfact.cxx | 11 +- sw/source/ui/dialog/swdlgfact.hxx | 4 +- sw/source/ui/dialog/swuiexp.cxx | 2 +- sw/source/uibase/dialog/SignatureLineDialog.cxx | 355 --------------------- sw/source/uibase/inc/SignatureLineDialog.hxx | 45 --- sw/source/uibase/uiview/viewdlg2.cxx | 12 +- sw/source/uibase/uiview/viewstat.cxx | 4 +- sw/uiconfig/swriter/ui/signatureline.ui | 312 ------------------ 23 files changed, 797 insertions(+), 781 deletions(-) create mode 100644 include/svx/SignatureLineDialog.hxx create mode 100644 svx/source/dialog/SignatureLineDialog.cxx create mode 100644 svx/uiconfig/ui/signatureline.ui delete mode 100644 sw/source/uibase/dialog/SignatureLineDialog.cxx delete mode 100644 sw/source/uibase/inc/SignatureLineDialog.hxx delete mode 100644 sw/uiconfig/swriter/ui/signatureline.ui diff --git a/include/svx/SignatureLineDialog.hxx b/include/svx/SignatureLineDialog.hxx new file mode 100644 index 000000000000..fce677ea3368 --- /dev/null +++ b/include/svx/SignatureLineDialog.hxx @@ -0,0 +1,44 @@ +/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4; fill-column: 100 -*- */ +/* + * This file is part of the LibreOffice project. + * + * This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. + */ +#ifndef INCLUDED_SW_INC_SIGNATURELINEDIALOG_HXX +#define INCLUDED_SW_INC_SIGNATURELINEDIALOG_HXX + +#include +#include + +#include +#include + +class SVX_DLLPUBLIC SignatureLineDialog : public weld::GenericDialogController +{ +public: + SignatureLineDialog(weld::Widget* pParent, css::uno::Reference xModel, + bool bEditExisting); + + short execute(); + +private: + std::unique_ptr m_xEditName; + std::unique_ptr m_xEditTitle; + std::unique_ptr m_xEditEmail; + std::unique_ptr m_xEditInstructions; + std::unique_ptr m_xCheckboxCanAddComments; + std::unique_ptr m_xCheckboxShowSignDate; + + css::uno::Reference m_xModel; + css::uno::Reference m_xExistingShapeProperties; + OUString m_aSignatureLineId; + + OUString getSignatureImage(); + void Apply(); +}; + +#endif + +/* vim:set shiftwidth=4 softtabstop=4 expandtab cinoptions=b1,g0,N-s cinkeys+=0=break: */ diff --git a/include/svx/svxids.hrc b/include/svx/svxids.hrc index e568f24e535b..bd3e28f3b1b4 100644 --- a/include/svx/svxids.hrc +++ b/include/svx/svxids.hrc @@ -964,8 +964,12 @@ class SfxStringItem; #define SID_CLASSIFICATION_DIALOG ( SID_SVX_START + 1171 ) #define SID_ANCHOR_MENU ( SID_SVX_START + 1172 ) +#define SID_INSERT_SIGNATURELINE ( SID_SVX_START + 1173 ) +#define SID_EDIT_SIGNATURELINE ( SID_SVX_START + 1174 ) + + // IMPORTANT NOTE: adjust SID_SVX_FIRSTFREE, when adding new slot id -#define SID_SVX_FIRSTFREE ( SID_ANCHOR_MENU + 1 ) +#define SID_SVX_FIRSTFREE ( SID_EDIT_SIGNATURELINE + 1 ) // Overflow check for slot IDs #if SID_SVX_FIRSTFREE > SID_SVX_END diff --git a/officecfg/registry/data/org/openoffice/Office/UI/GenericCommands.xcu b/officecfg/registry/data/org/openoffice/Office/UI/GenericCommands.xcu index 2120254bedcf..706007ea8d1e 100644 --- a/officecfg/registry/data/org/openoffice/Office/UI/GenericCommands.xcu +++ b/officecfg/registry/data/org/openoffice/Office/UI/GenericCommands.xcu @@ -6513,6 +6513,22 @@ More Breaks + + + Signatu~re Line + + + 1 + + + + + Edit Signature ~Line... + + + 1 + + diff --git a/officecfg/registry/data/org/openoffice/Office/UI/WriterCommands.xcu b/officecfg/registry/data/org/openoffice/Office/UI/WriterCommands.xcu index c2b5999576a3..aec4ef1ed90b 100644 --- a/officecfg/registry/data/org/openoffice/Office/UI/WriterCommands.xcu +++ b/officecfg/registry/data/org/openoffice/Office/UI/WriterCommands.xcu @@ -834,22 +834,6 @@ 1 - - - Signatu~re Line - - - 1 - - - - - Edit Signature ~Line... - - - 1 - - Appl~y diff --git a/svx/Library_svx.mk b/svx/Library_svx.mk index 3c374744b314..00406f2e4605 100644 --- a/svx/Library_svx.mk +++ b/svx/Library_svx.mk @@ -149,6 +149,7 @@ $(eval $(call gb_Library_add_exception_objects,svx,\ svx/source/dialog/rulritem \ svx/source/dialog/SafeModeDialog \ svx/source/dialog/SafeModeUI \ + svx/source/dialog/SignatureLineDialog \ svx/source/dialog/SpellDialogChildWindow \ svx/source/dialog/srchctrl \ svx/source/dialog/srchdlg \ diff --git a/svx/UIConfig_svx.mk b/svx/UIConfig_svx.mk index 831e1d20a27c..449dae71bca3 100644 --- a/svx/UIConfig_svx.mk +++ b/svx/UIConfig_svx.mk @@ -90,6 +90,7 @@ $(eval $(call gb_UIConfig_add_uifiles,svx,\ svx/uiconfig/ui/sidebarpossize \ svx/uiconfig/ui/sidebarstylespanel \ svx/uiconfig/ui/sidebartextpanel \ + svx/uiconfig/ui/signatureline \ svx/uiconfig/ui/stylemenu \ svx/uiconfig/ui/textcharacterspacingcontrol \ svx/uiconfig/ui/textcontrolchardialog \ diff --git a/svx/sdi/svx.sdi b/svx/sdi/svx.sdi index e0eb906b5e8e..02b7f4c9d3fe 100644 --- a/svx/sdi/svx.sdi +++ b/svx/sdi/svx.sdi @@ -11943,4 +11943,38 @@ SfxVoidItem AnchorMenu SID_ANCHOR_MENU MenuConfig = TRUE, ToolBoxConfig = TRUE, GroupId = SfxGroupId::Format; -] \ No newline at end of file +] + +SfxVoidItem InsertSignatureLine SID_INSERT_SIGNATURELINE +() +[ + AutoUpdate = FALSE, + FastCall = FALSE, + ReadOnlyDoc = FALSE, + Toggle = FALSE, + Container = FALSE, + RecordAbsolute = FALSE, + RecordPerSet; + + AccelConfig = TRUE, + MenuConfig = TRUE, + ToolBoxConfig = TRUE, + GroupId = SfxGroupId::Insert; +] + +SfxVoidItem EditSignatureLine SID_EDIT_SIGNATURELINE +() +[ + AutoUpdate = FALSE, + FastCall = FALSE, + ReadOnlyDoc = FALSE, + Toggle = FALSE, + Container = FALSE, + RecordAbsolute = FALSE, + RecordPerSet; + + AccelConfig = TRUE, + MenuConfig = TRUE, + ToolBoxConfig = TRUE, + GroupId = SfxGroupId::Edit; +] diff --git a/svx/source/dialog/SignatureLineDialog.cxx b/svx/source/dialog/SignatureLineDialog.cxx new file mode 100644 index 000000000000..41fe582714a9 --- /dev/null +++ b/svx/source/dialog/SignatureLineDialog.cxx @@ -0,0 +1,354 @@ +/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4; fill-column: 100 -*- */ +/* + * This file is part of the LibreOffice project. + * + * This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. + */ + +#include + +#include +#include +#include +#include +#include + +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include + +using namespace css; +using namespace css::uno; +using namespace css::beans; +using namespace css::frame; +using namespace css::io; +using namespace css::lang; +using namespace css::frame; +using namespace css::text; +using namespace css::drawing; +using namespace css::graphic; + +SignatureLineDialog::SignatureLineDialog(weld::Widget* pParent, Reference xModel, + bool bEditExisting) + : GenericDialogController(pParent, "svx/ui/signatureline.ui", "SignatureLineDialog") + , m_xEditName(m_xBuilder->weld_entry("edit_name")) + , m_xEditTitle(m_xBuilder->weld_entry("edit_title")) + , m_xEditEmail(m_xBuilder->weld_entry("edit_email")) + , m_xEditInstructions(m_xBuilder->weld_text_view("edit_instructions")) + , m_xCheckboxCanAddComments(m_xBuilder->weld_check_button("checkbox_can_add_comments")) + , m_xCheckboxShowSignDate(m_xBuilder->weld_check_button("checkbox_show_sign_date")) + , m_xModel(xModel) +{ + m_xEditInstructions->set_size_request(m_xEditInstructions->get_approximate_digit_width() * 48, + m_xEditInstructions->get_text_height() * 5); + + // No signature line selected - start with empty dialog and generate a new one + if (!bEditExisting) + return; + + Reference xIndexAccess(m_xModel->getCurrentSelection(), + UNO_QUERY_THROW); + Reference xProps(xIndexAccess->getByIndex(0), UNO_QUERY_THROW); + + // Read properties from selected signature line + xProps->getPropertyValue("SignatureLineId") >>= m_aSignatureLineId; + OUString aSuggestedSignerName; + xProps->getPropertyValue("SignatureLineSuggestedSignerName") >>= aSuggestedSignerName; + m_xEditName->set_text(aSuggestedSignerName); + OUString aSuggestedSignerTitle; + xProps->getPropertyValue("SignatureLineSuggestedSignerTitle") >>= aSuggestedSignerTitle; + m_xEditTitle->set_text(aSuggestedSignerTitle); + OUString aSuggestedSignerEmail; + xProps->getPropertyValue("SignatureLineSuggestedSignerEmail") >>= aSuggestedSignerEmail; + m_xEditEmail->set_text(aSuggestedSignerEmail); + OUString aSigningInstructions; + xProps->getPropertyValue("SignatureLineSigningInstructions") >>= aSigningInstructions; + m_xEditInstructions->set_text(aSigningInstructions); + bool bCanAddComments = false; + xProps->getPropertyValue("SignatureLineCanAddComment") >>= bCanAddComments; + m_xCheckboxCanAddComments->set_active(bCanAddComments); + bool bShowSignDate = false; + xProps->getPropertyValue("SignatureLineShowSignDate") >>= bShowSignDate; + m_xCheckboxShowSignDate->set_active(bShowSignDate); + + // Mark this as existing shape + m_xExistingShapeProperties = xProps; +} + +short SignatureLineDialog::execute() +{ + short nRet = run(); + if (nRet == RET_OK) + Apply(); + return nRet; +} + +void SignatureLineDialog::Apply() +{ + if (m_aSignatureLineId.isEmpty()) + m_aSignatureLineId + = OStringToOUString(comphelper::xml::generateGUIDString(), RTL_TEXTENCODING_ASCII_US); + OUString aSignerName(m_xEditName->get_text()); + OUString aSignerTitle(m_xEditTitle->get_text()); + OUString aSignerEmail(m_xEditEmail->get_text()); + OUString aSigningInstructions(m_xEditInstructions->get_text()); + bool bCanAddComments(m_xCheckboxCanAddComments->get_active()); + bool bShowSignDate(m_xCheckboxShowSignDate->get_active()); + + // Read svg and replace placeholder texts + OUString aSvgImage(getSignatureImage()); + aSvgImage = aSvgImage.replaceAll("[SIGNER_NAME]", aSignerName); + aSvgImage = aSvgImage.replaceAll("[SIGNER_TITLE]", aSignerTitle); + + // These are only filled if the signature line is signed. + aSvgImage = aSvgImage.replaceAll("[SIGNATURE]", ""); + aSvgImage = aSvgImage.replaceAll("[SIGNED_BY]", ""); + aSvgImage = aSvgImage.replaceAll("[INVALID_SIGNATURE]", ""); + aSvgImage = aSvgImage.replaceAll("[DATE]", ""); + + // Insert/Update graphic + SvMemoryStream aSvgStream(4096, 4096); + aSvgStream.WriteOString(OUStringToOString(aSvgImage, RTL_TEXTENCODING_UTF8)); + Reference xInputStream(new utl::OSeekableInputStreamWrapper(aSvgStream)); + Reference xContext(comphelper::getProcessComponentContext()); + Reference xProvider = css::graphic::GraphicProvider::create(xContext); + + Sequence aMediaProperties(1); + aMediaProperties[0].Name = "InputStream"; + aMediaProperties[0].Value <<= xInputStream; + Reference xGraphic(xProvider->queryGraphic(aMediaProperties)); + + bool bIsExistingSignatureLine = m_xExistingShapeProperties.is(); + Reference xShapeProps; + if (bIsExistingSignatureLine) + xShapeProps = m_xExistingShapeProperties; + else + xShapeProps.set(Reference(m_xModel, UNO_QUERY) + ->createInstance("com.sun.star.drawing.GraphicObjectShape"), + UNO_QUERY); + + xShapeProps->setPropertyValue("Graphic", Any(xGraphic)); + + // Set signature line properties + xShapeProps->setPropertyValue("IsSignatureLine", Any(true)); + xShapeProps->setPropertyValue("SignatureLineId", Any(m_aSignatureLineId)); + if (!aSignerName.isEmpty()) + xShapeProps->setPropertyValue("SignatureLineSuggestedSignerName", Any(aSignerName)); + if (!aSignerTitle.isEmpty()) + xShapeProps->setPropertyValue("SignatureLineSuggestedSignerTitle", Any(aSignerTitle)); + if (!aSignerEmail.isEmpty()) + xShapeProps->setPropertyValue("SignatureLineSuggestedSignerEmail", Any(aSignerEmail)); + if (!aSigningInstructions.isEmpty()) + xShapeProps->setPropertyValue("SignatureLineSigningInstructions", + Any(aSigningInstructions)); + xShapeProps->setPropertyValue("SignatureLineShowSignDate", Any(bShowSignDate)); + xShapeProps->setPropertyValue("SignatureLineCanAddComment", Any(bCanAddComments)); + + if (!bIsExistingSignatureLine) + { + // Default size + Reference xShape(xShapeProps, UNO_QUERY); + awt::Size aShapeSize; + aShapeSize.Height = 3000; + aShapeSize.Width = 6000; + xShape->setSize(aShapeSize); + + // Default anchoring + xShapeProps->setPropertyValue("AnchorType", Any(TextContentAnchorType_AT_PARAGRAPH)); + + // Insert into document + Reference const xEnd + = Reference(m_xModel, UNO_QUERY)->getText()->getEnd(); + Reference const xShapeContent(xShapeProps, UNO_QUERY); + xShapeContent->attach(xEnd); + } +} + +OUString SignatureLineDialog::getSignatureImage() +{ + OUString const svg( + "image/svg+xml150139132512: " + "XPATHSTROKE_SEQ_BEGIN132133109512: XPATHSTROKE_SEQ_END140150139133132111140150512: " + "XTEXT_PAINTSHAPE_BEGIN138136135134113type: Text; content: " + "[SIGNATURE]; [SIGNATURE]512: XTEXT_EOC512: XTEXT_EOC512: XTEXT_EOW512: XTEXT_EOC512: XTEXT_EOC512: XTEXT_EOC512: XTEXT_EOC512: XTEXT_EOC512: XTEXT_EOC512: XTEXT_EOC512: XTEXT_EOC512: XTEXT_EOC512: XTEXT_EOW512: XTEXT_EOL512: XTEXT_EOP512: XTEXT_PAINTSHAPE_END150512: " + "XTEXT_PAINTSHAPE_BEGIN138136135134113type: Text; content: " + "[SIGNER_NAME]; [SIGNER_NAME]512: XTEXT_EOC512: XTEXT_EOC512: XTEXT_EOW512: XTEXT_EOC512: XTEXT_EOC512: XTEXT_EOC512: XTEXT_EOC512: XTEXT_EOC512: XTEXT_EOC512: XTEXT_EOC512: XTEXT_EOC512: XTEXT_EOC512: XTEXT_EOC512: XTEXT_EOC512: XTEXT_EOW512: XTEXT_EOL512: XTEXT_EOP512: XTEXT_PAINTSHAPE_END150512: " + "XTEXT_PAINTSHAPE_BEGIN138136135134113type: Text; content: " + "[SIGNER_TITLE]; [SIGNER_TITLE]512: XTEXT_EOC512: XTEXT_EOC512: XTEXT_EOW512: XTEXT_EOC512: XTEXT_EOC512: XTEXT_EOC512: XTEXT_EOC512: XTEXT_EOC512: XTEXT_EOC512: XTEXT_EOC512: XTEXT_EOC512: XTEXT_EOC512: XTEXT_EOC512: XTEXT_EOC512: XTEXT_EOC512: XTEXT_EOW512: XTEXT_EOL512: XTEXT_EOP512: " + "XTEXT_PAINTSHAPE_END150512: " + "XTEXT_PAINTSHAPE_BEGIN138136135134113type: Text; content: " + "[SIGNED_BY]; [SIGNED_BY]512: XTEXT_EOC512: XTEXT_EOC512: XTEXT_EOW512: XTEXT_EOC512: XTEXT_EOC512: XTEXT_EOC512: XTEXT_EOC512: XTEXT_EOC512: XTEXT_EOC512: XTEXT_EOC512: XTEXT_EOC512: XTEXT_EOC512: XTEXT_EOW512: XTEXT_EOL512: XTEXT_EOP512: XTEXT_PAINTSHAPE_END150512: " + "XTEXT_PAINTSHAPE_BEGIN138136135134113type: Text; content: " + "[DATE]; [DATE]512: XTEXT_EOC512: XTEXT_EOC512: XTEXT_EOW512: XTEXT_EOC512: XTEXT_EOC512: XTEXT_EOC512: XTEXT_EOC512: XTEXT_EOW512: XTEXT_EOL512: XTEXT_EOP512: XTEXT_PAINTSHAPE_END150512: " + "XTEXT_PAINTSHAPE_BEGIN138136135134113type: Text; content: " + "[INVALID_SIGNATURE]; [INVALID_SIGNATURE]512: " + "XTEXT_EOC512: XTEXT_EOC512: " + "XTEXT_EOW512: XTEXT_EOC512: " + "XTEXT_EOC512: XTEXT_EOC512: " + "XTEXT_EOC512: XTEXT_EOC512: " + "XTEXT_EOC512: XTEXT_EOC512: " + "XTEXT_EOC512: XTEXT_EOC512: " + "XTEXT_EOC512: XTEXT_EOC512: " + "XTEXT_EOC512: XTEXT_EOC512: " + "XTEXT_EOC512: XTEXT_EOC512: " + "XTEXT_EOC512: XTEXT_EOC512: " + "XTEXT_EOW512: XTEXT_EOL512: " + "XTEXT_EOP512: " + "XTEXT_PAINTSHAPE_END"); + return svg; +} + +/* vim:set shiftwidth=4 softtabstop=4 expandtab cinoptions=b1,g0,N-s cinkeys+=0=break: */ diff --git a/svx/uiconfig/ui/signatureline.ui b/svx/uiconfig/ui/signatureline.ui new file mode 100644 index 000000000000..95293de73979 --- /dev/null +++ b/svx/uiconfig/ui/signatureline.ui @@ -0,0 +1,312 @@ + + + + + + False + 6 + Signature Line + True + 0 + 0 + dialog + + + False + vertical + 2 + + + False + end + + + gtk-cancel + True + True + True + True + + + True + True + 0 + + + + + gtk-ok + True + True + True + True + True + True + + + True + True + 1 + + + + + False + False + 1 + + + + + True + False + 6 + 6 + 6 + 6 + True + True + 6 + 6 + + + True + False + True + 0 + none + + + True + False + 6 + 12 + + + True + False + 6 + 12 + + + True + True + True + True + John Doe + + + 1 + 0 + + + + + True + True + True + True + Director + + + 1 + 1 + + + + + True + True + True + True + john.doe@example.org + + + 1 + 2 + + + + + True + False + start + Name: + True + edit_name + + + 0 + 0 + + + + + True + False + start + Title: + True + edit_title + + + 0 + 1 + + + + + True + False + start + Email: + True + edit_email + + + 0 + 2 + + + + + + + + + True + False + Suggested Signer + + + + + + + + 0 + 0 + + + + + True + False + True + True + 0 + none + + + True + False + 6 + 12 + + + True + False + 6 + 12 + + + Signer can add comments + True + True + False + start + True + + + 0 + 0 + + + + + Show sign date in signature line + True + True + False + start + True + + + 0 + 1 + + + + + True + False + start + Instructions to the signer: + True + edit_instructions + + + 0 + 2 + + + + + True + True + True + True + in + + + 60 + True + True + True + True + + + + + 0 + 3 + + + + + + + + + True + False + More + + + + + + + + 0 + 1 + + + + + False + True + 0 + + + + + + cancel + ok + + + + + + diff --git a/sw/Library_sw.mk b/sw/Library_sw.mk index 4056c57deb27..7ca75085cc74 100644 --- a/sw/Library_sw.mk +++ b/sw/Library_sw.mk @@ -588,7 +588,6 @@ $(eval $(call gb_Library_add_exception_objects,sw,\ sw/source/uibase/config/uinums \ sw/source/uibase/config/usrpref \ sw/source/uibase/config/viewopt \ - sw/source/uibase/dialog/SignatureLineDialog \ sw/source/uibase/dialog/SwSpellDialogChildWindow \ sw/source/uibase/dialog/regionsw \ sw/source/uibase/dialog/swabstdlg \ diff --git a/sw/UIConfig_swriter.mk b/sw/UIConfig_swriter.mk index c518b76d8234..0ef338bb2792 100644 --- a/sw/UIConfig_swriter.mk +++ b/sw/UIConfig_swriter.mk @@ -246,7 +246,6 @@ $(eval $(call gb_UIConfig_add_uifiles,modules/swriter,\ sw/uiconfig/swriter/ui/selectindexdialog \ sw/uiconfig/swriter/ui/selecttabledialog \ sw/uiconfig/swriter/ui/sidebarpage \ - sw/uiconfig/swriter/ui/signatureline \ sw/uiconfig/swriter/ui/pageformatpanel \ sw/uiconfig/swriter/ui/pagestylespanel \ sw/uiconfig/swriter/ui/pageheaderpanel \ diff --git a/sw/inc/cmdid.h b/sw/inc/cmdid.h index c561ec7f4837..4604eee0c4e1 100644 --- a/sw/inc/cmdid.h +++ b/sw/inc/cmdid.h @@ -142,7 +142,6 @@ #define FN_REDLINE_PREV_CHANGE (FN_EDIT2 + 42) /* Go to the previous change */ #define FN_REDLINE_ACCEPT_ALL (FN_EDIT2 + 43) /* Redlining Accept All*/ #define FN_REDLINE_REJECT_ALL (FN_EDIT2 + 44) /* Redlining Reject All*/ -#define FN_EDIT_SIGNATURELINE (FN_EDIT2 + 45) /* Edit signature line */ // Region: Edit #define FN_REFRESH_VIEW (FN_VIEW + 1) /* Refresh/Redraw */ @@ -210,7 +209,6 @@ #define FN_INSERT_IDX_ENTRY_DLG (FN_INSERT + 35) /* insert index entry */ #define FN_INSERT_FRAME_INTERACT_NOCOL (FN_INSERT + 36) /*insert interactive non column frame*/ -#define FN_INSERT_SIGNATURELINE (FN_INSERT + 37) /*insert signature line*/ #define FN_TOOL_ANCHOR_PAGE (FN_INSERT + 50) /* anchor Draw object to page */ #define FN_TOOL_ANCHOR_PARAGRAPH (FN_INSERT + 51) /* anchor Draw object to paragraph */ diff --git a/sw/inc/swabstdlg.hxx b/sw/inc/swabstdlg.hxx index c0c1c232c20c..9e604f66ce68 100644 --- a/sw/inc/swabstdlg.hxx +++ b/sw/inc/swabstdlg.hxx @@ -394,7 +394,10 @@ public: SwCharDlgMode nDialogMode, const OUString* pFormatStr = nullptr) = 0; virtual VclPtr CreateSwConvertTableDlg(SwView& rView, bool bToTable) = 0; virtual VclPtr CreateSwCaptionDialog ( vcl::Window *pParent, SwView &rV) = 0; - virtual VclPtr CreateSignatureLineDialog(SwView& rView) = 0; + virtual VclPtr + CreateSignatureLineDialog(SwView& rView, css::uno::Reference xModel, + bool bEditExisting) + = 0; virtual VclPtr CreateSwInsertDBColAutoPilot(SwView& rView, css::uno::Reference< css::sdbc::XDataSource> rxSource, diff --git a/sw/sdi/swriter.sdi b/sw/sdi/swriter.sdi index 85047fbf39fc..cc560ff1b0ac 100644 --- a/sw/sdi/swriter.sdi +++ b/sw/sdi/swriter.sdi @@ -3314,40 +3314,6 @@ SfxVoidItem InsertTopicField FN_INSERT_FLD_TOPIC GroupId = SfxGroupId::Insert; ] -SfxVoidItem InsertSignatureLine FN_INSERT_SIGNATURELINE -() -[ - AutoUpdate = FALSE, - FastCall = FALSE, - ReadOnlyDoc = FALSE, - Toggle = FALSE, - Container = FALSE, - RecordAbsolute = FALSE, - RecordPerSet; - - AccelConfig = TRUE, - MenuConfig = TRUE, - ToolBoxConfig = TRUE, - GroupId = SfxGroupId::Insert; -] - -SfxVoidItem EditSignatureLine FN_EDIT_SIGNATURELINE -() -[ - AutoUpdate = FALSE, - FastCall = FALSE, - ReadOnlyDoc = FALSE, - Toggle = FALSE, - Container = FALSE, - RecordAbsolute = FALSE, - RecordPerSet; - - AccelConfig = TRUE, - MenuConfig = TRUE, - ToolBoxConfig = TRUE, - GroupId = SfxGroupId::Edit; -] - SfxVoidItem JumpDownThisLevel FN_NUM_BULLET_NEXT () [ diff --git a/sw/sdi/viewsh.sdi b/sw/sdi/viewsh.sdi index c6d718457daa..f0c2a5b2ce3a 100644 --- a/sw/sdi/viewsh.sdi +++ b/sw/sdi/viewsh.sdi @@ -36,13 +36,13 @@ interface TextEditView : BaseTextEditView StateMethod = GetState ; DisableFlags="SfxDisableFlags::SwOnProtectedCursor"; ] - FN_INSERT_SIGNATURELINE // status() + SID_INSERT_SIGNATURELINE // status() [ ExecMethod = ExecDlgExt ; StateMethod = GetState ; DisableFlags="SfxDisableFlags::SwOnProtectedCursor"; ] - FN_EDIT_SIGNATURELINE // status() + SID_EDIT_SIGNATURELINE // status() [ ExecMethod = ExecDlgExt ; StateMethod = GetState ; diff --git a/sw/source/ui/dialog/swdlgfact.cxx b/sw/source/ui/dialog/swdlgfact.cxx index 9000ad0380e1..2d1da118cd18 100644 --- a/sw/source/ui/dialog/swdlgfact.cxx +++ b/sw/source/ui/dialog/swdlgfact.cxx @@ -83,9 +83,11 @@ #include #include #include -#include +#include using namespace ::com::sun::star; +using namespace css::frame; +using namespace css::uno; IMPL_ABSTDLG_BASE(AbstractSwWordCountFloatDlg_Impl); IMPL_ABSTDLG_BASE(AbstractSwInsertAbstractDlg_Impl); @@ -728,9 +730,12 @@ VclPtr SwAbstractDialogFactory_Impl::CreateSwCaptionDialog ( return VclPtr::Create( pDlg ); } -VclPtr SwAbstractDialogFactory_Impl::CreateSignatureLineDialog(SwView& rV) +VclPtr +SwAbstractDialogFactory_Impl::CreateSignatureLineDialog(SwView& rV, Reference xModel, + bool bEditExisting) { - return VclPtr::Create(new SignatureLineDialog(rV)); + return VclPtr::Create( + new SignatureLineDialog(rV.GetFrameWeld(), xModel, bEditExisting)); } VclPtr SwAbstractDialogFactory_Impl::CreateSwInsertDBColAutoPilot( SwView& rView, diff --git a/sw/source/ui/dialog/swdlgfact.hxx b/sw/source/ui/dialog/swdlgfact.hxx index 018a2710f36d..cf2343bb9e66 100644 --- a/sw/source/ui/dialog/swdlgfact.hxx +++ b/sw/source/ui/dialog/swdlgfact.hxx @@ -451,7 +451,9 @@ public: SwCharDlgMode nDialogMode, const OUString* pFormatStr = nullptr) override; virtual VclPtr CreateSwConvertTableDlg(SwView& rView, bool bToTable) override; virtual VclPtr CreateSwCaptionDialog ( vcl::Window *pParent, SwView &rV) override; - virtual VclPtr CreateSignatureLineDialog(SwView& rView) override; + virtual VclPtr + CreateSignatureLineDialog(SwView& rView, css::uno::Reference xModel, + bool bEditExisting) override; virtual VclPtr CreateSwInsertDBColAutoPilot(SwView& rView, css::uno::Reference< css::sdbc::XDataSource> rxSource, diff --git a/sw/source/ui/dialog/swuiexp.cxx b/sw/source/ui/dialog/swuiexp.cxx index f938df0b3ff0..336a779100b8 100644 --- a/sw/source/ui/dialog/swuiexp.cxx +++ b/sw/source/ui/dialog/swuiexp.cxx @@ -39,7 +39,7 @@ #include #include #include -#include +#include #include #include #include diff --git a/sw/source/uibase/dialog/SignatureLineDialog.cxx b/sw/source/uibase/dialog/SignatureLineDialog.cxx deleted file mode 100644 index bc2db9a9dab1..000000000000 --- a/sw/source/uibase/dialog/SignatureLineDialog.cxx +++ /dev/null @@ -1,355 +0,0 @@ -/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4; fill-column: 100 -*- */ -/* - * This file is part of the LibreOffice project. - * - * This Source Code Form is subject to the terms of the Mozilla Public - * License, v. 2.0. If a copy of the MPL was not distributed with this - * file, You can obtain one at http://mozilla.org/MPL/2.0/. - */ - -#include - -#include -#include -#include -#include -#include - -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include - -using namespace css; -using namespace css::uno; -using namespace css::beans; -using namespace css::io; -using namespace css::lang; -using namespace css::frame; -using namespace css::text; -using namespace css::view; -using namespace css::drawing; -using namespace css::graphic; - -SignatureLineDialog::SignatureLineDialog(SwView& rView) - : GenericDialogController(rView.GetFrameWeld(), "modules/swriter/ui/signatureline.ui", - "SignatureLineDialog") - , m_xEditName(m_xBuilder->weld_entry("edit_name")) - , m_xEditTitle(m_xBuilder->weld_entry("edit_title")) - , m_xEditEmail(m_xBuilder->weld_entry("edit_email")) - , m_xEditInstructions(m_xBuilder->weld_text_view("edit_instructions")) - , m_xCheckboxCanAddComments(m_xBuilder->weld_check_button("checkbox_can_add_comments")) - , m_xCheckboxShowSignDate(m_xBuilder->weld_check_button("checkbox_show_sign_date")) - , mrView(rView) -{ - m_xEditInstructions->set_size_request(m_xEditInstructions->get_approximate_digit_width() * 48, - m_xEditInstructions->get_text_height() * 5); - - // No signature line selected - start with empty dialog and generate a new one - if (!rView.isSignatureLineSelected()) - return; - - Reference const xModel(rView.GetCurrentDocument()); - Reference xIndexAccess(xModel->getCurrentSelection(), UNO_QUERY_THROW); - Reference xProps(xIndexAccess->getByIndex(0), UNO_QUERY_THROW); - - // Read properties from selected signature line - xProps->getPropertyValue("SignatureLineId") >>= m_aSignatureLineId; - OUString aSuggestedSignerName; - xProps->getPropertyValue("SignatureLineSuggestedSignerName") >>= aSuggestedSignerName; - m_xEditName->set_text(aSuggestedSignerName); - OUString aSuggestedSignerTitle; - xProps->getPropertyValue("SignatureLineSuggestedSignerTitle") >>= aSuggestedSignerTitle; - m_xEditTitle->set_text(aSuggestedSignerTitle); - OUString aSuggestedSignerEmail; - xProps->getPropertyValue("SignatureLineSuggestedSignerEmail") >>= aSuggestedSignerEmail; - m_xEditEmail->set_text(aSuggestedSignerEmail); - OUString aSigningInstructions; - xProps->getPropertyValue("SignatureLineSigningInstructions") >>= aSigningInstructions; - m_xEditInstructions->set_text(aSigningInstructions); - bool bCanAddComments = false; - xProps->getPropertyValue("SignatureLineCanAddComment") >>= bCanAddComments; - m_xCheckboxCanAddComments->set_active(bCanAddComments); - bool bShowSignDate = false; - xProps->getPropertyValue("SignatureLineShowSignDate") >>= bShowSignDate; - m_xCheckboxShowSignDate->set_active(bShowSignDate); - - // Mark this as existing shape - m_xExistingShapeProperties = xProps; -} - -short SignatureLineDialog::execute() -{ - short nRet = run(); - if (nRet == RET_OK) - Apply(); - return nRet; -} - -void SignatureLineDialog::Apply() -{ - if (m_aSignatureLineId.isEmpty()) - m_aSignatureLineId - = OStringToOUString(comphelper::xml::generateGUIDString(), RTL_TEXTENCODING_ASCII_US); - OUString aSignerName(m_xEditName->get_text()); - OUString aSignerTitle(m_xEditTitle->get_text()); - OUString aSignerEmail(m_xEditEmail->get_text()); - OUString aSigningInstructions(m_xEditInstructions->get_text()); - bool bCanAddComments(m_xCheckboxCanAddComments->get_active()); - bool bShowSignDate(m_xCheckboxShowSignDate->get_active()); - - // Read svg and replace placeholder texts - OUString aSvgImage(getSignatureImage()); - aSvgImage = aSvgImage.replaceAll("[SIGNER_NAME]", aSignerName); - aSvgImage = aSvgImage.replaceAll("[SIGNER_TITLE]", aSignerTitle); - - // These are only filled if the signature line is signed. - aSvgImage = aSvgImage.replaceAll("[SIGNATURE]", ""); - aSvgImage = aSvgImage.replaceAll("[SIGNED_BY]", ""); - aSvgImage = aSvgImage.replaceAll("[INVALID_SIGNATURE]", ""); - aSvgImage = aSvgImage.replaceAll("[DATE]", ""); - - // Insert/Update graphic - SvMemoryStream aSvgStream(4096, 4096); - aSvgStream.WriteOString(OUStringToOString(aSvgImage, RTL_TEXTENCODING_UTF8)); - Reference xInputStream(new utl::OSeekableInputStreamWrapper(aSvgStream)); - Reference xContext(comphelper::getProcessComponentContext()); - Reference xProvider = css::graphic::GraphicProvider::create(xContext); - - Sequence aMediaProperties(1); - aMediaProperties[0].Name = "InputStream"; - aMediaProperties[0].Value <<= xInputStream; - Reference xGraphic(xProvider->queryGraphic(aMediaProperties)); - - Reference const xModel(mrView.GetCurrentDocument()); - bool bIsExistingSignatureLine = m_xExistingShapeProperties.is(); - Reference xShapeProps; - if (bIsExistingSignatureLine) - xShapeProps = m_xExistingShapeProperties; - else - xShapeProps.set(Reference(xModel, UNO_QUERY) - ->createInstance("com.sun.star.drawing.GraphicObjectShape"), - UNO_QUERY); - - xShapeProps->setPropertyValue("Graphic", Any(xGraphic)); - - // Set signature line properties - xShapeProps->setPropertyValue("IsSignatureLine", Any(true)); - xShapeProps->setPropertyValue("SignatureLineId", Any(m_aSignatureLineId)); - if (!aSignerName.isEmpty()) - xShapeProps->setPropertyValue("SignatureLineSuggestedSignerName", Any(aSignerName)); - if (!aSignerTitle.isEmpty()) - xShapeProps->setPropertyValue("SignatureLineSuggestedSignerTitle", Any(aSignerTitle)); - if (!aSignerEmail.isEmpty()) - xShapeProps->setPropertyValue("SignatureLineSuggestedSignerEmail", Any(aSignerEmail)); - if (!aSigningInstructions.isEmpty()) - xShapeProps->setPropertyValue("SignatureLineSigningInstructions", - Any(aSigningInstructions)); - xShapeProps->setPropertyValue("SignatureLineShowSignDate", Any(bShowSignDate)); - xShapeProps->setPropertyValue("SignatureLineCanAddComment", Any(bCanAddComments)); - - if (!bIsExistingSignatureLine) - { - // Default size - Reference xShape(xShapeProps, UNO_QUERY); - awt::Size aShapeSize; - aShapeSize.Height = 3000; - aShapeSize.Width = 6000; - xShape->setSize(aShapeSize); - - // Default anchoring - xShapeProps->setPropertyValue("AnchorType", Any(TextContentAnchorType_AT_PARAGRAPH)); - - // Insert into document - Reference const xEnd - = Reference(xModel, UNO_QUERY)->getText()->getEnd(); - Reference const xShapeContent(xShapeProps, UNO_QUERY); - xShapeContent->attach(xEnd); - } -} - -OUString SignatureLineDialog::getSignatureImage() -{ - OUString const svg( - "image/svg+xml150139132512: " - "XPATHSTROKE_SEQ_BEGIN132133109512: XPATHSTROKE_SEQ_END140150139133132111140150512: " - "XTEXT_PAINTSHAPE_BEGIN138136135134113type: Text; content: " - "[SIGNATURE]; [SIGNATURE]512: XTEXT_EOC512: XTEXT_EOC512: XTEXT_EOW512: XTEXT_EOC512: XTEXT_EOC512: XTEXT_EOC512: XTEXT_EOC512: XTEXT_EOC512: XTEXT_EOC512: XTEXT_EOC512: XTEXT_EOC512: XTEXT_EOC512: XTEXT_EOW512: XTEXT_EOL512: XTEXT_EOP512: XTEXT_PAINTSHAPE_END150512: " - "XTEXT_PAINTSHAPE_BEGIN138136135134113type: Text; content: " - "[SIGNER_NAME]; [SIGNER_NAME]512: XTEXT_EOC512: XTEXT_EOC512: XTEXT_EOW512: XTEXT_EOC512: XTEXT_EOC512: XTEXT_EOC512: XTEXT_EOC512: XTEXT_EOC512: XTEXT_EOC512: XTEXT_EOC512: XTEXT_EOC512: XTEXT_EOC512: XTEXT_EOC512: XTEXT_EOC512: XTEXT_EOW512: XTEXT_EOL512: XTEXT_EOP512: XTEXT_PAINTSHAPE_END150512: " - "XTEXT_PAINTSHAPE_BEGIN138136135134113type: Text; content: " - "[SIGNER_TITLE]; [SIGNER_TITLE]512: XTEXT_EOC512: XTEXT_EOC512: XTEXT_EOW512: XTEXT_EOC512: XTEXT_EOC512: XTEXT_EOC512: XTEXT_EOC512: XTEXT_EOC512: XTEXT_EOC512: XTEXT_EOC512: XTEXT_EOC512: XTEXT_EOC512: XTEXT_EOC512: XTEXT_EOC512: XTEXT_EOC512: XTEXT_EOW512: XTEXT_EOL512: XTEXT_EOP512: " - "XTEXT_PAINTSHAPE_END150512: " - "XTEXT_PAINTSHAPE_BEGIN138136135134113type: Text; content: " - "[SIGNED_BY]; [SIGNED_BY]512: XTEXT_EOC512: XTEXT_EOC512: XTEXT_EOW512: XTEXT_EOC512: XTEXT_EOC512: XTEXT_EOC512: XTEXT_EOC512: XTEXT_EOC512: XTEXT_EOC512: XTEXT_EOC512: XTEXT_EOC512: XTEXT_EOC512: XTEXT_EOW512: XTEXT_EOL512: XTEXT_EOP512: XTEXT_PAINTSHAPE_END150512: " - "XTEXT_PAINTSHAPE_BEGIN138136135134113type: Text; content: " - "[DATE]; [DATE]512: XTEXT_EOC512: XTEXT_EOC512: XTEXT_EOW512: XTEXT_EOC512: XTEXT_EOC512: XTEXT_EOC512: XTEXT_EOC512: XTEXT_EOW512: XTEXT_EOL512: XTEXT_EOP512: XTEXT_PAINTSHAPE_END150512: " - "XTEXT_PAINTSHAPE_BEGIN138136135134113type: Text; content: " - "[INVALID_SIGNATURE]; [INVALID_SIGNATURE]512: " - "XTEXT_EOC512: XTEXT_EOC512: " - "XTEXT_EOW512: XTEXT_EOC512: " - "XTEXT_EOC512: XTEXT_EOC512: " - "XTEXT_EOC512: XTEXT_EOC512: " - "XTEXT_EOC512: XTEXT_EOC512: " - "XTEXT_EOC512: XTEXT_EOC512: " - "XTEXT_EOC512: XTEXT_EOC512: " - "XTEXT_EOC512: XTEXT_EOC512: " - "XTEXT_EOC512: XTEXT_EOC512: " - "XTEXT_EOC512: XTEXT_EOC512: " - "XTEXT_EOW512: XTEXT_EOL512: " - "XTEXT_EOP512: " - "XTEXT_PAINTSHAPE_END"); - return svg; -} - -/* vim:set shiftwidth=4 softtabstop=4 expandtab cinoptions=b1,g0,N-s cinkeys+=0=break: */ diff --git a/sw/source/uibase/inc/SignatureLineDialog.hxx b/sw/source/uibase/inc/SignatureLineDialog.hxx deleted file mode 100644 index 80d7cf87289d..000000000000 --- a/sw/source/uibase/inc/SignatureLineDialog.hxx +++ /dev/null @@ -1,45 +0,0 @@ -/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4; fill-column: 100 -*- */ -/* - * This file is part of the LibreOffice project. - * - * This Source Code Form is subject to the terms of the Mozilla Public - * License, v. 2.0. If a copy of the MPL was not distributed with this - * file, You can obtain one at http://mozilla.org/MPL/2.0/. - */ -#ifndef INCLUDED_SW_INC_SIGNATURELINEDIALOG_HXX -#define INCLUDED_SW_INC_SIGNATURELINEDIALOG_HXX - -#include -#include -#include - -#include -#include - -class SwView; - -class SW_DLLPUBLIC SignatureLineDialog : public weld::GenericDialogController -{ -public: - SignatureLineDialog(SwView& rView); - - short execute(); - -private: - std::unique_ptr m_xEditName; - std::unique_ptr m_xEditTitle; - std::unique_ptr m_xEditEmail; - std::unique_ptr m_xEditInstructions; - std::unique_ptr m_xCheckboxCanAddComments; - std::unique_ptr m_xCheckboxShowSignDate; - SwView& mrView; - css::uno::Reference m_xExistingShapeProperties; - OUString m_aSignatureLineId; - - OUString getSignatureImage(); - void Apply(); -}; - -#endif - -/* vim:set shiftwidth=4 softtabstop=4 expandtab cinoptions=b1,g0,N-s cinkeys+=0=break: */ diff --git a/sw/source/uibase/uiview/viewdlg2.cxx b/sw/source/uibase/uiview/viewdlg2.cxx index 35a1409dd78b..554555c5b0fb 100644 --- a/sw/source/uibase/uiview/viewdlg2.cxx +++ b/sw/source/uibase/uiview/viewdlg2.cxx @@ -21,6 +21,7 @@ #include #include #include +#include #include #include #include @@ -42,6 +43,8 @@ #include +using namespace css; + void SwView::ExecDlgExt(SfxRequest const &rReq) { vcl::Window& rMDI = GetViewFrame()->GetWindow(); @@ -61,14 +64,17 @@ void SwView::ExecDlgExt(SfxRequest const &rReq) } break; } - case FN_INSERT_SIGNATURELINE: - case FN_EDIT_SIGNATURELINE: + case SID_INSERT_SIGNATURELINE: + case SID_EDIT_SIGNATURELINE: { SwAbstractDialogFactory* pFact = SwAbstractDialogFactory::Create(); assert(pFact && "SwAbstractDialogFactory fail!"); - ScopedVclPtr pDialog(pFact->CreateSignatureLineDialog(*this)); + const uno::Reference xModel(GetCurrentDocument()); + ScopedVclPtr pDialog( + pFact->CreateSignatureLineDialog(*this, xModel, rReq.GetSlot() == SID_EDIT_SIGNATURELINE)); assert(pDialog && "Dialog creation failed!"); + if (pDialog) pDialog->Execute(); break; diff --git a/sw/source/uibase/uiview/viewstat.cxx b/sw/source/uibase/uiview/viewstat.cxx index 9d9dd105be6d..d194793aa089 100644 --- a/sw/source/uibase/uiview/viewstat.cxx +++ b/sw/source/uibase/uiview/viewstat.cxx @@ -97,13 +97,13 @@ void SwView::GetState(SfxItemSet &rSet) break; case SID_INSERT_GRAPHIC: - case FN_INSERT_SIGNATURELINE: + case SID_INSERT_SIGNATURELINE: if( m_pWrtShell->CursorInsideInputField() ) { rSet.DisableItem(nWhich); } break; - case FN_EDIT_SIGNATURELINE: + case SID_EDIT_SIGNATURELINE: if (!isSignatureLineSelected()) rSet.DisableItem(nWhich); break; diff --git a/sw/uiconfig/swriter/ui/signatureline.ui b/sw/uiconfig/swriter/ui/signatureline.ui deleted file mode 100644 index 95293de73979..000000000000 --- a/sw/uiconfig/swriter/ui/signatureline.ui +++ /dev/null @@ -1,312 +0,0 @@ - - - - - - False - 6 - Signature Line - True - 0 - 0 - dialog - - - False - vertical - 2 - - - False - end - - - gtk-cancel - True - True - True - True - - - True - True - 0 - - - - - gtk-ok - True - True - True - True - True - True - - - True - True - 1 - - - - - False - False - 1 - - - - - True - False - 6 - 6 - 6 - 6 - True - True - 6 - 6 - - - True - False - True - 0 - none - - - True - False - 6 - 12 - - - True - False - 6 - 12 - - - True - True - True - True - John Doe - - - 1 - 0 - - - - - True - True - True - True - Director - - - 1 - 1 - - - - - True - True - True - True - john.doe@example.org - - - 1 - 2 - - - - - True - False - start - Name: - True - edit_name - - - 0 - 0 - - - - - True - False - start - Title: - True - edit_title - - - 0 - 1 - - - - - True - False - start - Email: - True - edit_email - - - 0 - 2 - - - - - - - - - True - False - Suggested Signer - - - - - - - - 0 - 0 - - - - - True - False - True - True - 0 - none - - - True - False - 6 - 12 - - - True - False - 6 - 12 - - - Signer can add comments - True - True - False - start - True - - - 0 - 0 - - - - - Show sign date in signature line - True - True - False - start - True - - - 0 - 1 - - - - - True - False - start - Instructions to the signer: - True - edit_instructions - - - 0 - 2 - - - - - True - True - True - True - in - - - 60 - True - True - True - True - - - - - 0 - 3 - - - - - - - - - True - False - More - - - - - - - - 0 - 1 - - - - - False - True - 0 - - - - - - cancel - ok - - - - - - -- cgit v1.2.3