sw/inc/IMark.hxx                              |   30 ++++----------------------
 sw/inc/swabstdlg.hxx                          |    4 +--
 sw/qa/extras/globalfilter/globalfilter.cxx    |    4 +--
 sw/qa/extras/ooxmlexport/ooxmlexport19.cxx    |    8 +++---
 sw/qa/extras/ooxmlexport/ooxmlfieldexport.cxx |   12 +++++-----
 sw/qa/extras/uiwriter/uiwriter5.cxx           |    6 ++---
 sw/source/filter/ww8/docxattributeoutput.cxx  |    2 -
 sw/source/ui/dialog/swdlgfact.cxx             |    2 -
 sw/source/ui/dialog/swdlgfact.hxx             |    2 -
 sw/source/ui/fldui/DateFormFieldDialog.cxx    |    4 +--
 sw/source/ui/vba/vbaformfield.cxx             |    8 +++---
 sw/source/uibase/inc/DateFormFieldDialog.hxx  |    6 ++---
 12 files changed, 34 insertions(+), 54 deletions(-)

New commits:
commit 5f5afe4cb08f4aa23c5f68630281098d5626ba61
Author:     Noel Grandin <noel.gran...@collabora.co.uk>
AuthorDate: Sun Aug 4 16:00:18 2024 +0200
Commit:     Noel Grandin <noel.gran...@collabora.co.uk>
CommitDate: Sun Aug 4 20:37:49 2024 +0200

    simplify IMark hierarchy (4)
    
    merge IDateFieldmark into DateFieldmark
    
    Change-Id: Ibb77ee4e1a65f6e3edde63b98c7a67f11507ca51
    Reviewed-on: https://gerrit.libreoffice.org/c/core/+/171462
    Tested-by: Jenkins
    Reviewed-by: Noel Grandin <noel.gran...@collabora.co.uk>

diff --git a/sw/inc/IMark.hxx b/sw/inc/IMark.hxx
index 75af34ca0e14..1e8eccaa9a76 100644
--- a/sw/inc/IMark.hxx
+++ b/sw/inc/IMark.hxx
@@ -108,25 +108,6 @@ namespace sw::mark
             IFieldmark &operator =(IFieldmark const&) = delete;
     };
 
-    class SW_DLLPUBLIC IDateFieldmark
-        : virtual public IFieldmark
-    {
-        protected:
-            IDateFieldmark() = default;
-
-        public:
-            virtual OUString GetContent() const override = 0;
-            virtual void ReplaceContent(const OUString& sNewContent) override 
= 0;
-
-            virtual std::pair<bool, double> GetCurrentDate() const = 0;
-            virtual void SetCurrentDate(double fDate) = 0;
-            virtual OUString GetDateInStandardDateFormat(double fDate) const = 
0;
-
-    private:
-            IDateFieldmark(IDateFieldmark const &) = delete;
-            IDateFieldmark &operator =(IDateFieldmark const&) = delete;
-    };
-
     OUString ExpandFieldmark(IFieldmark* pBM);
 
     class SW_DLLPUBLIC MarkBase
@@ -406,9 +387,8 @@ namespace sw::mark
     /// as a fieldmark; as it cannot contain paragraph breaks, must be
     /// well-formed XML element, and does not have field separator, it
     /// should be a nesting text attribute similar to SwTextMeta.
-    class DateFieldmark final
-        : virtual public IDateFieldmark
-        , public FieldmarkWithDropDownButton
+    class SW_DLLPUBLIC DateFieldmark final
+        : public FieldmarkWithDropDownButton
     {
     public:
         DateFieldmark(const SwPaM& rPaM);
@@ -425,9 +405,9 @@ namespace sw::mark
         OUString GetContent() const override;
         void ReplaceContent(const OUString& sNewContent) override;
 
-        std::pair<bool, double> GetCurrentDate() const override;
-        void SetCurrentDate(double fDate) override;
-        OUString GetDateInStandardDateFormat(double fDate) const override;
+        std::pair<bool, double> GetCurrentDate() const;
+        void SetCurrentDate(double fDate);
+        OUString GetDateInStandardDateFormat(double fDate) const;
 
     private:
         OUString GetDateInCurrentDateFormat(double fDate) const;
diff --git a/sw/inc/swabstdlg.hxx b/sw/inc/swabstdlg.hxx
index 2b0293a11ce6..d184fbb4291b 100644
--- a/sw/inc/swabstdlg.hxx
+++ b/sw/inc/swabstdlg.hxx
@@ -80,7 +80,7 @@ namespace com::sun::star{
 }
 
 
-namespace sw::mark { class IFieldmark; class IDateFieldmark; }
+namespace sw::mark { class IFieldmark; class DateFieldmark; }
 
 typedef   void (*SwLabDlgMethod) (css::uno::Reference< css::frame::XModel> 
const & xModel, const SwLabItem& rItem);
 
@@ -509,7 +509,7 @@ public:
         SwField* pField, bool bPrevButton, bool bNextButton) = 0;
     virtual VclPtr<AbstractDropDownFormFieldDialog> 
CreateDropDownFormFieldDialog(weld::Widget* pParent, sw::mark::IFieldmark* 
pDropDownField) = 0;
 
-    virtual VclPtr<AbstractDateFormFieldDialog> 
CreateDateFormFieldDialog(weld::Widget* pParent, sw::mark::IDateFieldmark* 
pDateField, SwDoc& rDoc) = 0;
+    virtual VclPtr<AbstractDateFormFieldDialog> 
CreateDateFormFieldDialog(weld::Widget* pParent, sw::mark::DateFieldmark* 
pDateField, SwDoc& rDoc) = 0;
 
     virtual VclPtr<SfxAbstractTabDialog> CreateSwEnvDlg(weld::Window* pParent, 
const SfxItemSet& rSet, SwWrtShell* pWrtSh, Printer* pPrt, bool bInsert) = 0;
 
diff --git a/sw/qa/extras/globalfilter/globalfilter.cxx 
b/sw/qa/extras/globalfilter/globalfilter.cxx
index bd4f0f4498c8..b9a357a82f76 100644
--- a/sw/qa/extras/globalfilter/globalfilter.cxx
+++ b/sw/qa/extras/globalfilter/globalfilter.cxx
@@ -1995,7 +1995,7 @@ void Test::testDateFormField()
             int nIndex = 0;
             for(auto aIter = pMarkAccess->getAllMarksBegin(); aIter != 
pMarkAccess->getAllMarksEnd(); ++aIter)
             {
-                ::sw::mark::IDateFieldmark* pFieldmark = 
dynamic_cast<::sw::mark::IDateFieldmark*>(*aIter);
+                ::sw::mark::DateFieldmark* pFieldmark = 
dynamic_cast<::sw::mark::DateFieldmark*>(*aIter);
                 CPPUNIT_ASSERT_MESSAGE(sFailedMessage.getStr(), pFieldmark);
                 CPPUNIT_ASSERT_EQUAL_MESSAGE(sFailedMessage.getStr(), 
ODF_FORMDATE, pFieldmark->GetFieldname());
 
@@ -2174,7 +2174,7 @@ void Test::testDateFormFieldCharacterFormatting()
 
             // Check that we have the field at the right place
             CPPUNIT_ASSERT_EQUAL_MESSAGE(sFailedMessage.getStr(), 
sal_Int32(1), pMarkAccess->getAllMarksCount());
-            ::sw::mark::IDateFieldmark* pFieldmark = 
dynamic_cast<::sw::mark::IDateFieldmark*>(*pMarkAccess->getAllMarksBegin());
+            ::sw::mark::DateFieldmark* pFieldmark = 
dynamic_cast<::sw::mark::DateFieldmark*>(*pMarkAccess->getAllMarksBegin());
             CPPUNIT_ASSERT_MESSAGE(sFailedMessage.getStr(), pFieldmark);
             CPPUNIT_ASSERT_EQUAL_MESSAGE(sFailedMessage.getStr(), 
ODF_FORMDATE, pFieldmark->GetFieldname());
             CPPUNIT_ASSERT_EQUAL_MESSAGE(sFailedMessage.getStr(), 
sal_Int32(0), pFieldmark->GetMarkStart().GetContentIndex());
diff --git a/sw/qa/extras/ooxmlexport/ooxmlexport19.cxx 
b/sw/qa/extras/ooxmlexport/ooxmlexport19.cxx
index a7686d3cc000..6c82f503fd9c 100644
--- a/sw/qa/extras/ooxmlexport/ooxmlexport19.cxx
+++ b/sw/qa/extras/ooxmlexport/ooxmlexport19.cxx
@@ -973,8 +973,8 @@ DECLARE_OOXMLEXPORT_TEST(testTdf138093, "tdf138093.docx")
         IDocumentMarkAccess* pMarkAccess = pDoc->getIDocumentMarkAccess();
         CPPUNIT_ASSERT_EQUAL(sal_Int32(2), pMarkAccess->getAllMarksCount());
 
-        ::sw::mark::IDateFieldmark* pFieldmark
-            = 
dynamic_cast<::sw::mark::IDateFieldmark*>(*pMarkAccess->getAllMarksBegin());
+        ::sw::mark::DateFieldmark* pFieldmark
+            = 
dynamic_cast<::sw::mark::DateFieldmark*>(*pMarkAccess->getAllMarksBegin());
         CPPUNIT_ASSERT(pFieldmark);
         CPPUNIT_ASSERT_EQUAL(ODF_FORMDATE, pFieldmark->GetFieldname());
         CPPUNIT_ASSERT_EQUAL(u"2017"_ustr, pFieldmark->GetContent());
@@ -1066,8 +1066,8 @@ DECLARE_OOXMLEXPORT_TEST(testTdf131722, "tdf131722.docx")
         for (auto aIter = pMarkAccess->getFieldmarksBegin();
              aIter != pMarkAccess->getFieldmarksEnd(); ++aIter)
         {
-            ::sw::mark::IDateFieldmark* pFieldmark
-                = dynamic_cast<::sw::mark::IDateFieldmark*>(*aIter);
+            ::sw::mark::DateFieldmark* pFieldmark
+                = dynamic_cast<::sw::mark::DateFieldmark*>(*aIter);
             CPPUNIT_ASSERT(pFieldmark);
             CPPUNIT_ASSERT_EQUAL(ODF_FORMDATE, pFieldmark->GetFieldname());
             CPPUNIT_ASSERT_EQUAL(u"Enter a date here!"_ustr, 
pFieldmark->GetContent());
diff --git a/sw/qa/extras/ooxmlexport/ooxmlfieldexport.cxx 
b/sw/qa/extras/ooxmlexport/ooxmlfieldexport.cxx
index 5b5010ecb750..ceb1e8afc7d4 100644
--- a/sw/qa/extras/ooxmlexport/ooxmlfieldexport.cxx
+++ b/sw/qa/extras/ooxmlexport/ooxmlfieldexport.cxx
@@ -594,8 +594,8 @@ DECLARE_OOXMLEXPORT_TEST(testSdtDateDuplicate, 
"sdt-date-duplicate.docx")
         IDocumentMarkAccess* pMarkAccess = pDoc->getIDocumentMarkAccess();
         CPPUNIT_ASSERT_EQUAL(sal_Int32(2), pMarkAccess->getAllMarksCount());
 
-        ::sw::mark::IDateFieldmark* pFieldmark
-            = 
dynamic_cast<::sw::mark::IDateFieldmark*>(*pMarkAccess->getAllMarksBegin());
+        ::sw::mark::DateFieldmark* pFieldmark
+            = 
dynamic_cast<::sw::mark::DateFieldmark*>(*pMarkAccess->getAllMarksBegin());
         CPPUNIT_ASSERT(pFieldmark);
         CPPUNIT_ASSERT_EQUAL(ODF_FORMDATE, pFieldmark->GetFieldname());
         CPPUNIT_ASSERT_EQUAL(u"4/26/2012"_ustr, pFieldmark->GetContent());
@@ -795,8 +795,8 @@ DECLARE_OOXMLEXPORT_TEST( testDateFieldInShape, 
"date_field_in_shape.docx" )
         IDocumentMarkAccess* pMarkAccess = pDoc->getIDocumentMarkAccess();
         CPPUNIT_ASSERT_EQUAL(sal_Int32(2), pMarkAccess->getAllMarksCount());
 
-        ::sw::mark::IDateFieldmark* pFieldmark
-            = 
dynamic_cast<::sw::mark::IDateFieldmark*>(*pMarkAccess->getAllMarksBegin());
+        ::sw::mark::DateFieldmark* pFieldmark
+            = 
dynamic_cast<::sw::mark::DateFieldmark*>(*pMarkAccess->getAllMarksBegin());
         CPPUNIT_ASSERT(pFieldmark);
         CPPUNIT_ASSERT_EQUAL(ODF_FORMDATE, pFieldmark->GetFieldname());
         CPPUNIT_ASSERT_EQUAL(u"Click here to enter a date."_ustr, 
pFieldmark->GetContent());
@@ -831,8 +831,8 @@ DECLARE_OOXMLEXPORT_TEST( testDateFieldAtEndOfParagraph, 
"date_field_at_end_of_p
         IDocumentMarkAccess* pMarkAccess = pDoc->getIDocumentMarkAccess();
         CPPUNIT_ASSERT_EQUAL(sal_Int32(2), pMarkAccess->getAllMarksCount());
 
-        ::sw::mark::IDateFieldmark* pFieldmark
-            = 
dynamic_cast<::sw::mark::IDateFieldmark*>(*pMarkAccess->getAllMarksBegin());
+        ::sw::mark::DateFieldmark* pFieldmark
+            = 
dynamic_cast<::sw::mark::DateFieldmark*>(*pMarkAccess->getAllMarksBegin());
         CPPUNIT_ASSERT(pFieldmark);
         CPPUNIT_ASSERT_EQUAL(ODF_FORMDATE, pFieldmark->GetFieldname());
         CPPUNIT_ASSERT_EQUAL(u"Click here to enter a date."_ustr, 
pFieldmark->GetContent());
diff --git a/sw/qa/extras/uiwriter/uiwriter5.cxx 
b/sw/qa/extras/uiwriter/uiwriter5.cxx
index 7e28047ce99d..87394213dba9 100644
--- a/sw/qa/extras/uiwriter/uiwriter5.cxx
+++ b/sw/qa/extras/uiwriter/uiwriter5.cxx
@@ -1552,7 +1552,7 @@ CPPUNIT_TEST_FIXTURE(SwUiWriterTest5, 
testDateFormFieldContentOperations)
     // Check whether the fieldmark is created
     auto aIter = pMarkAccess->getAllMarksBegin();
     CPPUNIT_ASSERT(aIter != pMarkAccess->getAllMarksEnd());
-    ::sw::mark::IDateFieldmark* pFieldmark = 
dynamic_cast<::sw::mark::IDateFieldmark*>(*aIter);
+    ::sw::mark::DateFieldmark* pFieldmark = 
dynamic_cast<::sw::mark::DateFieldmark*>(*aIter);
     CPPUNIT_ASSERT(pFieldmark);
     CPPUNIT_ASSERT_EQUAL(ODF_FORMDATE, pFieldmark->GetFieldname());
 
@@ -1585,7 +1585,7 @@ CPPUNIT_TEST_FIXTURE(SwUiWriterTest5, 
testDateFormFieldCurrentDateHandling)
     // Check whether the fieldmark is created
     auto aIter = pMarkAccess->getAllMarksBegin();
     CPPUNIT_ASSERT(aIter != pMarkAccess->getAllMarksEnd());
-    ::sw::mark::IDateFieldmark* pFieldmark = 
dynamic_cast<::sw::mark::IDateFieldmark*>(*aIter);
+    ::sw::mark::DateFieldmark* pFieldmark = 
dynamic_cast<::sw::mark::DateFieldmark*>(*aIter);
     CPPUNIT_ASSERT(pFieldmark);
     CPPUNIT_ASSERT_EQUAL(ODF_FORMDATE, pFieldmark->GetFieldname());
 
@@ -1639,7 +1639,7 @@ CPPUNIT_TEST_FIXTURE(SwUiWriterTest5, 
testDateFormFieldCurrentDateInvalidation)
     // Check whether the fieldmark is created
     auto aIter = pMarkAccess->getAllMarksBegin();
     CPPUNIT_ASSERT(aIter != pMarkAccess->getAllMarksEnd());
-    ::sw::mark::IDateFieldmark* pFieldmark = 
dynamic_cast<::sw::mark::IDateFieldmark*>(*aIter);
+    ::sw::mark::DateFieldmark* pFieldmark = 
dynamic_cast<::sw::mark::DateFieldmark*>(*aIter);
     CPPUNIT_ASSERT(pFieldmark);
     CPPUNIT_ASSERT_EQUAL(ODF_FORMDATE, pFieldmark->GetFieldname());
 
diff --git a/sw/source/filter/ww8/docxattributeoutput.cxx 
b/sw/source/filter/ww8/docxattributeoutput.cxx
index 745997557f31..4ce101ef27e9 100644
--- a/sw/source/filter/ww8/docxattributeoutput.cxx
+++ b/sw/source/filter/ww8/docxattributeoutput.cxx
@@ -2886,7 +2886,7 @@ void DocxAttributeOutput::StartField_Impl( const 
SwTextNode* pNode, sal_Int32 nP
     }
     else if ( rInfos.eType == ww::eFORMDATE )
     {
-        const sw::mark::IDateFieldmark& rFieldmark = dynamic_cast<const 
sw::mark::IDateFieldmark&>(*rInfos.pFieldmark);
+        const sw::mark::DateFieldmark& rFieldmark = dynamic_cast<const 
sw::mark::DateFieldmark&>(*rInfos.pFieldmark);
         FieldMarkParamsHelper params(rFieldmark);
 
         OUString sFullDate;
diff --git a/sw/source/ui/dialog/swdlgfact.cxx 
b/sw/source/ui/dialog/swdlgfact.cxx
index 1c042afd38f0..3207919b917d 100644
--- a/sw/source/ui/dialog/swdlgfact.cxx
+++ b/sw/source/ui/dialog/swdlgfact.cxx
@@ -1149,7 +1149,7 @@ VclPtr<AbstractDropDownFormFieldDialog> 
SwAbstractDialogFactory_Impl::CreateDrop
     return 
VclPtr<AbstractDropDownFormFieldDialog_Impl>::Create(std::make_unique<sw::DropDownFormFieldDialog>(pParent,
 pDropDownField));
 }
 
-VclPtr<AbstractDateFormFieldDialog> 
SwAbstractDialogFactory_Impl::CreateDateFormFieldDialog(weld::Widget *pParent, 
sw::mark::IDateFieldmark* pDateField, SwDoc& rDoc)
+VclPtr<AbstractDateFormFieldDialog> 
SwAbstractDialogFactory_Impl::CreateDateFormFieldDialog(weld::Widget *pParent, 
sw::mark::DateFieldmark* pDateField, SwDoc& rDoc)
 {
     return 
VclPtr<AbstractDateFormFieldDialog_Impl>::Create(std::make_unique<sw::DateFormFieldDialog>(pParent,
 pDateField, rDoc));
 }
diff --git a/sw/source/ui/dialog/swdlgfact.hxx 
b/sw/source/ui/dialog/swdlgfact.hxx
index 902c7ea22b48..ca2d24d067a5 100644
--- a/sw/source/ui/dialog/swdlgfact.hxx
+++ b/sw/source/ui/dialog/swdlgfact.hxx
@@ -806,7 +806,7 @@ public:
     virtual VclPtr<AbstractDropDownFieldDialog> 
CreateDropDownFieldDialog(weld::Widget* pParent, SwWrtShell &rSh,
         SwField* pField, bool bPrevButton, bool bNextButton) override;
     virtual VclPtr<AbstractDropDownFormFieldDialog> 
CreateDropDownFormFieldDialog(weld::Widget* pParent, sw::mark::IFieldmark* 
pDropDownField) override;
-    virtual VclPtr<AbstractDateFormFieldDialog> 
CreateDateFormFieldDialog(weld::Widget* pParent, sw::mark::IDateFieldmark* 
pDateField, SwDoc& rDoc) override;
+    virtual VclPtr<AbstractDateFormFieldDialog> 
CreateDateFormFieldDialog(weld::Widget* pParent, sw::mark::DateFieldmark* 
pDateField, SwDoc& rDoc) override;
 
     virtual VclPtr<SfxAbstractTabDialog> CreateSwEnvDlg(weld::Window* pParent, 
const SfxItemSet& rSet, SwWrtShell* pWrtSh, Printer* pPrt, bool bInsert) 
override;
     virtual VclPtr<AbstractSwLabDlg> CreateSwLabDlg(weld::Window* pParent, 
const SfxItemSet& rSet,
diff --git a/sw/source/ui/fldui/DateFormFieldDialog.cxx 
b/sw/source/ui/fldui/DateFormFieldDialog.cxx
index 85baf0ed62f5..2b7532528de2 100644
--- a/sw/source/ui/fldui/DateFormFieldDialog.cxx
+++ b/sw/source/ui/fldui/DateFormFieldDialog.cxx
@@ -17,8 +17,8 @@
 
 namespace sw
 {
-DateFormFieldDialog::DateFormFieldDialog(weld::Widget* pParent,
-                                         sw::mark::IDateFieldmark* pDateField, 
SwDoc& rDoc)
+DateFormFieldDialog::DateFormFieldDialog(weld::Widget* pParent, 
sw::mark::DateFieldmark* pDateField,
+                                         SwDoc& rDoc)
     : GenericDialogController(pParent, 
u"modules/swriter/ui/dateformfielddialog.ui"_ustr,
                               u"DateFormFieldDialog"_ustr)
     , m_pDateField(pDateField)
diff --git a/sw/source/ui/vba/vbaformfield.cxx 
b/sw/source/ui/vba/vbaformfield.cxx
index 2efb092b8712..882773d17b2b 100644
--- a/sw/source/ui/vba/vbaformfield.cxx
+++ b/sw/source/ui/vba/vbaformfield.cxx
@@ -75,11 +75,11 @@ uno::Any SwVbaFormField::Previous()
                                                                        
/*bLoop=*/false);
 
     // DateFields are a LO specialty, and do not exist natively in MS 
documents. Ignore if added...
-    auto pDateField = dynamic_cast<sw::mark::IDateFieldmark*>(pFieldMark);
+    auto pDateField = dynamic_cast<sw::mark::DateFieldmark*>(pFieldMark);
     while (pDateField)
     {
         pFieldMark = pMarkAccess->getFieldmarkBefore(pDateField->GetMarkPos(), 
/*bLoop=*/false);
-        pDateField = dynamic_cast<sw::mark::IDateFieldmark*>(pFieldMark);
+        pDateField = dynamic_cast<sw::mark::DateFieldmark*>(pFieldMark);
     }
 
     if (!pFieldMark)
@@ -103,11 +103,11 @@ uno::Any SwVbaFormField::Next()
                                                                       
/*bLoop=*/false);
 
     // DateFields are a LO specialty, and do not exist natively in MS 
documents. Ignore if added...
-    auto pDateField = dynamic_cast<sw::mark::IDateFieldmark*>(pFieldMark);
+    auto pDateField = dynamic_cast<sw::mark::DateFieldmark*>(pFieldMark);
     while (pDateField)
     {
         pFieldMark = pMarkAccess->getFieldmarkAfter(pDateField->GetMarkPos(), 
/*bLoop=*/false);
-        pDateField = dynamic_cast<sw::mark::IDateFieldmark*>(pFieldMark);
+        pDateField = dynamic_cast<sw::mark::DateFieldmark*>(pFieldMark);
     }
 
     if (!pFieldMark)
diff --git a/sw/source/uibase/inc/DateFormFieldDialog.hxx 
b/sw/source/uibase/inc/DateFormFieldDialog.hxx
index 81a0b790831c..78c415f994b3 100644
--- a/sw/source/uibase/inc/DateFormFieldDialog.hxx
+++ b/sw/source/uibase/inc/DateFormFieldDialog.hxx
@@ -17,7 +17,7 @@ class SvNumberFormatter;
 class SwDoc;
 namespace sw::mark
 {
-class IDateFieldmark;
+class DateFieldmark;
 }
 
 /// Dialog to specify the properties of date form field
@@ -26,7 +26,7 @@ namespace sw
 class DateFormFieldDialog final : public weld::GenericDialogController
 {
 private:
-    sw::mark::IDateFieldmark* m_pDateField;
+    sw::mark::DateFieldmark* m_pDateField;
     SvNumberFormatter* m_pNumberFormatter;
 
     std::unique_ptr<SwNumFormatTreeView> m_xFormatLB;
@@ -34,7 +34,7 @@ private:
     void InitControls();
 
 public:
-    DateFormFieldDialog(weld::Widget* pParent, sw::mark::IDateFieldmark* 
pDateField, SwDoc& rDoc);
+    DateFormFieldDialog(weld::Widget* pParent, sw::mark::DateFieldmark* 
pDateField, SwDoc& rDoc);
     virtual ~DateFormFieldDialog() override;
 
     void Apply();

Reply via email to