tdf#43369 Refactor PosgresSQL connection setup

+ Moved static strings to ui file, handled by Glade
+ added extended tips to widgets
+ deleted references to strings in the controller.

Change-Id: I0acb444eff37adbfc0225656669af9d5650b7bd0
Reviewed-on: https://gerrit.libreoffice.org/c/core/+/153127
Tested-by: Jenkins
Reviewed-by: Olivier Hallot <olivier.hallot@libreoffice.org>
diff --git a/dbaccess/inc/strings.hrc b/dbaccess/inc/strings.hrc
index 9683fb6..2db9ce7 100644
--- a/dbaccess/inc/strings.hrc
+++ b/dbaccess/inc/strings.hrc
@@ -398,9 +398,6 @@
#define STR_SPREADSHEET_HELPTEXT                    NC_("STR_SPREADSHEET_HELPTEXT", "Click 'Browse...' to select a %PRODUCTNAME spreadsheet or Microsoft Excel workbook.\n%PRODUCTNAME will open this file in read-only mode." )
#define STR_SPREADSHEETPATH                         NC_("STR_SPREADSHEETPATH", "~Location and file name" )

#define STR_POSTGRES_HEADERTEXT                     NC_("STR_POSTGRES_HEADERTEXT", "Set up a connection to a PostgreSQL database" )
#define STR_POSTGRES_HELPTEXT                       NC_("STR_POSTGRES_HELPTEXT", "Please enter the required information to connect to a PostgreSQL database, either by entering the host name, port number and server, or by entering the connection string.\nPlease contact your system administrator if you are unsure about the following settings.")
#define STR_POSTGRES_DEFAULT                        NC_("STR_POSTGRES_DEFAULT", "Default: 5432")
#define STR_COMMAND_EXECUTED_SUCCESSFULLY           NC_("STR_COMMAND_EXECUTED_SUCCESSFULLY", "Command successfully executed." )
#define STR_DIRECTSQL_CONNECTIONLOST                NC_("STR_DIRECTSQL_CONNECTIONLOST", "The connection to the database has been lost. This dialog will be closed.")

diff --git a/dbaccess/source/ui/dlg/DBSetupConnectionPages.cxx b/dbaccess/source/ui/dlg/DBSetupConnectionPages.cxx
index 2c18464..5f9e9fe 100644
--- a/dbaccess/source/ui/dlg/DBSetupConnectionPages.cxx
+++ b/dbaccess/source/ui/dlg/DBSetupConnectionPages.cxx
@@ -503,29 +503,14 @@ using namespace ::com::sun::star;
    }

    // OPostgresConnectionPageSetup
    OPostgresConnectionPageSetup::OPostgresConnectionPageSetup( weld::Container* pPage, weld::DialogController* pController, const SfxItemSet& _rCoreAttrs ,sal_uInt16 _nPortId, TranslateId pDefaultPortResId, TranslateId pHelpTextResId, TranslateId pHeaderTextResId, TranslateId pConnectionTextResId)
    OPostgresConnectionPageSetup::OPostgresConnectionPageSetup( weld::Container* pPage, weld::DialogController* pController, const SfxItemSet& _rCoreAttrs , sal_uInt16 _nPortId )
        : OGenericAdministrationPage(pPage, pController, "dbaccess/ui/postgrespage.ui", "SpecialPostgresPage", _rCoreAttrs)
        , m_nPortId(_nPortId)
        , m_xHeaderText(m_xBuilder->weld_label("header"))
        , m_xFTHelpText(m_xBuilder->weld_label("helpLabel"))
        , m_xFTDatabasename(m_xBuilder->weld_label("dbNameLabel"))
        , m_xETDatabasename(m_xBuilder->weld_entry("dbNameEntry"))
        , m_xFTHostname(m_xBuilder->weld_label("hostNameLabel"))
        , m_xETHostname(m_xBuilder->weld_entry("hostNameEntry"))
        , m_xFTPortNumber(m_xBuilder->weld_label("portNumLabel"))
        , m_xFTDefaultPortNumber(m_xBuilder->weld_label("portNumDefLabel"))
        , m_xNFPortNumber(m_xBuilder->weld_spin_button("portNumEntry"))
        , m_xFTConnection(m_xBuilder->weld_label("connectionStringLabel"))
        , m_xConnectionURL(new OConnectionURLEdit(m_xBuilder->weld_entry("browseurl"), m_xBuilder->weld_label("browselabel")))
        // , m_pCollection(nullptr)
    {
        m_xFTConnection->set_label(DBA_RES(pConnectionTextResId));
        m_xFTDefaultPortNumber->set_label(DBA_RES(pDefaultPortResId));
        OUString sHelpText = DBA_RES(pHelpTextResId);
        m_xFTHelpText->set_label(sHelpText);
        //TODO this code snippet is redundant
        m_xHeaderText->set_label(DBA_RES(pHeaderTextResId));

        m_xETDatabasename->connect_changed(LINK(this, OGenericAdministrationPage, OnControlEntryModifyHdl));
        m_xETHostname->connect_changed(LINK(this, OGenericAdministrationPage, OnControlEntryModifyHdl));
        m_xNFPortNumber->connect_value_changed(LINK(this, OGenericAdministrationPage, OnControlSpinButtonModifyHdl));
@@ -546,11 +531,7 @@ using namespace ::com::sun::star;
    {
        return std::make_unique<OPostgresConnectionPageSetup>(pPage, pController,
                                                          _rAttrSet,
                                                          DSID_POSTGRES_PORTNUMBER,
                                                          STR_POSTGRES_DEFAULT,
                                                          STR_POSTGRES_HELPTEXT,
                                                          STR_POSTGRES_HEADERTEXT,
                                                          STR_COMMONURL);
                                                          DSID_POSTGRES_PORTNUMBER);
    }

    void OPostgresConnectionPageSetup::fillControls(std::vector< std::unique_ptr<ISaveValueWrapper> >& _rControlList)
@@ -571,14 +552,8 @@ using namespace ::com::sun::star;
        return bChangedSomething;
    }

    void OPostgresConnectionPageSetup::fillWindows(std::vector< std::unique_ptr<ISaveValueWrapper> >& _rControlList)
    void OPostgresConnectionPageSetup::fillWindows(std::vector< std::unique_ptr<ISaveValueWrapper> >& /*_rControlList*/)
    {
        _rControlList.emplace_back(new ODisableWidgetWrapper<weld::Label>(m_xFTHelpText.get()));
        _rControlList.emplace_back(new ODisableWidgetWrapper<weld::Label>(m_xFTDatabasename.get()));
        _rControlList.emplace_back(new ODisableWidgetWrapper<weld::Label>(m_xFTHostname.get()));
        _rControlList.emplace_back(new ODisableWidgetWrapper<weld::Label>(m_xFTPortNumber.get()));
        _rControlList.emplace_back(new ODisableWidgetWrapper<weld::Label>(m_xFTDefaultPortNumber.get()));
        _rControlList.emplace_back(new ODisableWidgetWrapper<weld::Label>(m_xFTConnection.get()));
    }

    void OPostgresConnectionPageSetup::implInitControls(const SfxItemSet& _rSet, bool _bSaveValue)
@@ -588,7 +563,6 @@ using namespace ::com::sun::star;
        bool bValid, bReadonly;
        getFlags(_rSet, bValid, bReadonly);

        m_xFTConnection->show();
        m_xConnectionURL->show();
        m_xConnectionURL->ShowPrefix( false);

diff --git a/dbaccess/source/ui/dlg/DBSetupConnectionPages.hxx b/dbaccess/source/ui/dlg/DBSetupConnectionPages.hxx
index 9f47fff..543bd3e 100644
--- a/dbaccess/source/ui/dlg/DBSetupConnectionPages.hxx
+++ b/dbaccess/source/ui/dlg/DBSetupConnectionPages.hxx
@@ -222,11 +222,7 @@ namespace dbaui
    public:
        OPostgresConnectionPageSetup(weld::Container* pPage, weld::DialogController* pController
                                        , const SfxItemSet& _rCoreAttrs
                                        , sal_uInt16 _nPortId
                                        , TranslateId pDefaultPortResId
                                        , TranslateId pHelpTextResId
                                        , TranslateId pHeaderTextResId
                                        , TranslateId pConnectionTextResId );
                                        , sal_uInt16 _nPortId );
    virtual ~OPostgresConnectionPageSetup() override;
    static std::unique_ptr<OGenericAdministrationPage> CreatePostgresTabPage( weld::Container* pPage, weld::DialogController* pController, const SfxItemSet& _rAttrSet );
    ::dbaccess::ODsnTypeCollection* m_pCollection;
@@ -241,16 +237,9 @@ namespace dbaui
        TypedWhichId<SfxInt32Item> m_nPortId;

        std::unique_ptr<weld::Label> m_xHeaderText;
        std::unique_ptr<weld::Label> m_xFTHelpText;
        std::unique_ptr<weld::Label> m_xFTDatabasename;
        std::unique_ptr<weld::Entry> m_xETDatabasename;
        std::unique_ptr<weld::Label> m_xFTHostname;
        std::unique_ptr<weld::Entry> m_xETHostname;
        std::unique_ptr<weld::Label> m_xFTPortNumber;
        std::unique_ptr<weld::Label> m_xFTDefaultPortNumber;
        std::unique_ptr<weld::SpinButton> m_xNFPortNumber;

        std::unique_ptr<weld::Label> m_xFTConnection;
        std::unique_ptr<OConnectionURLEdit> m_xConnectionURL;

        /** used for the connection URL
diff --git a/dbaccess/uiconfig/ui/postgrespage.ui b/dbaccess/uiconfig/ui/postgrespage.ui
index ce814a4..e5867ec 100644
--- a/dbaccess/uiconfig/ui/postgrespage.ui
+++ b/dbaccess/uiconfig/ui/postgrespage.ui
@@ -1,35 +1,36 @@
<?xml version="1.0" encoding="UTF-8"?>
<!-- Generated with glade 3.22.1 -->
<!-- Generated with glade 3.40.0 -->
<interface domain="dba">
  <requires lib="gtk+" version="3.20"/>
  <object class="GtkAdjustment" id="adjustment1">
    <property name="upper">1000000000000</property>
    <property name="step_increment">1</property>
    <property name="page_increment">10</property>
    <property name="step-increment">1</property>
    <property name="page-increment">10</property>
  </object>
  <object class="GtkBox" id="SpecialPostgresPage">
    <property name="visible">True</property>
    <property name="can_focus">False</property>
    <property name="can-focus">False</property>
    <property name="hexpand">True</property>
    <property name="vexpand">True</property>
    <property name="border_width">6</property>
    <property name="border-width">6</property>
    <property name="orientation">vertical</property>
    <property name="spacing">12</property>
    <child>
      <object class="GtkLabel" id="header">
        <property name="visible">True</property>
        <property name="can_focus">False</property>
        <property name="can-focus">False</property>
        <property name="halign">start</property>
        <property name="margin_bottom">6</property>
        <property name="margin-bottom">6</property>
        <property name="label" translatable="yes" context="postgrespage|header">Set up a connection to a PostgreSQL database</property>
        <attributes>
          <attribute name="weight" value="bold"/>
        </attributes>
        <child internal-child="accessible">
          <object class="AtkObject">
          <object class="AtkObject" id="header-atkobject">
            <property name="AtkObject::accessible-description" translatable="yes" context="specialpostgrespage|header">Set up connection to a PostgreSQL database</property>
            <property name="AtkObject::accessible-role">static</property>
          </object>
        </child>
        <attributes>
          <attribute name="weight" value="bold"/>
        </attributes>
      </object>
      <packing>
        <property name="expand">False</property>
@@ -40,17 +41,18 @@
    <child>
      <object class="GtkLabel" id="helpLabel">
        <property name="visible">True</property>
        <property name="can_focus">False</property>
        <property name="can-focus">False</property>
        <property name="label" translatable="yes" context="postgrespage|helpLabel">Please enter the required information to connect to a PostgreSQL database, either by entering the host name, port number and server, or by entering the connection string.</property>
        <property name="wrap">True</property>
        <property name="width-chars">72</property>
        <property name="max-width-chars">72</property>
        <property name="xalign">0</property>
        <child internal-child="accessible">
          <object class="AtkObject">
          <object class="AtkObject" id="helpLabel-atkobject">
            <property name="AtkObject::accessible-description" translatable="yes" context="specialpostgrespage|helpLabel">Please enter the required information to connect to a PostgreSQL database. Please contact your system administrator if you are unsure about the following settings. </property>
            <property name="AtkObject::accessible-role">static</property>
          </object>
        </child>
        <property name="wrap">True</property>
        <property name="width_chars">72</property>
        <property name="max_width_chars">72</property>
        <property name="xalign">0</property>
      </object>
      <packing>
        <property name="expand">False</property>
@@ -59,96 +61,124 @@
      </packing>
    </child>
    <child>
      <!-- n-columns=1 n-rows=1 -->
      <object class="GtkLabel" id="helpSupport">
        <property name="visible">True</property>
        <property name="can-focus">False</property>
        <property name="label" translatable="yes" context="postgrespage|helpSupport">Please contact your system administrator if you are unsure</property>
        <property name="xalign">0</property>
      </object>
      <packing>
        <property name="expand">False</property>
        <property name="fill">True</property>
        <property name="position">2</property>
      </packing>
    </child>
    <child>
      <!-- n-columns=2 n-rows=3 -->
      <object class="GtkGrid" id="grid1">
        <property name="visible">True</property>
        <property name="can_focus">False</property>
        <property name="can-focus">False</property>
        <property name="hexpand">True</property>
        <property name="vexpand">True</property>
        <property name="row_spacing">6</property>
        <property name="column_spacing">12</property>
        <property name="row-spacing">6</property>
        <property name="column-spacing">12</property>
        <child>
          <object class="GtkLabel" id="dbNameLabel">
            <property name="visible">True</property>
            <property name="can_focus">False</property>
            <property name="can-focus">False</property>
            <property name="label" translatable="yes" context="specialpostgrespage|dbNameLabel">_Database name:</property>
            <property name="use_underline">True</property>
            <property name="mnemonic_widget">dbNameEntry</property>
            <property name="use-underline">True</property>
            <property name="mnemonic-widget">dbNameEntry</property>
            <property name="xalign">1</property>
          </object>
          <packing>
            <property name="left_attach">0</property>
            <property name="top_attach">0</property>
            <property name="left-attach">0</property>
            <property name="top-attach">0</property>
          </packing>
        </child>
        <child>
          <object class="GtkLabel" id="hostNameLabel">
            <property name="visible">True</property>
            <property name="can_focus">False</property>
            <property name="can-focus">False</property>
            <property name="label" translatable="yes" context="specialpostgrespage|hostNameLabel">_Server:</property>
            <property name="use_underline">True</property>
            <property name="mnemonic_widget">hostNameEntry</property>
            <property name="use-underline">True</property>
            <property name="mnemonic-widget">hostNameEntry</property>
            <property name="xalign">1</property>
          </object>
          <packing>
            <property name="left_attach">0</property>
            <property name="top_attach">1</property>
            <property name="left-attach">0</property>
            <property name="top-attach">1</property>
          </packing>
        </child>
        <child>
          <object class="GtkLabel" id="portNumLabel">
            <property name="visible">True</property>
            <property name="can_focus">False</property>
            <property name="can-focus">False</property>
            <property name="label" translatable="yes" context="specialpostgrespage|portNumLabel">_Port number:</property>
            <property name="use_underline">True</property>
            <property name="mnemonic_widget">portNumEntry</property>
            <property name="use-underline">True</property>
            <property name="mnemonic-widget">portNumEntry</property>
            <property name="xalign">1</property>
          </object>
          <packing>
            <property name="left_attach">0</property>
            <property name="top_attach">2</property>
            <property name="left-attach">0</property>
            <property name="top-attach">2</property>
          </packing>
        </child>
        <child>
          <object class="GtkEntry" id="dbNameEntry">
            <property name="visible">True</property>
            <property name="can_focus">True</property>
            <property name="can-focus">True</property>
            <property name="hexpand">True</property>
            <property name="activates-default">True</property>
            <property name="truncate-multiline">True</property>
            <property name="activates_default">True</property>
            <child internal-child="accessible">
              <object class="AtkObject" id="dbNameEntry-atkobject">
                <property name="AtkObject::accessible-description" translatable="yes" context="postgrespage|extended_tip|dbNameEntry">Enter the name of the database.</property>
              </object>
            </child>
          </object>
          <packing>
            <property name="left_attach">1</property>
            <property name="top_attach">0</property>
            <property name="left-attach">1</property>
            <property name="top-attach">0</property>
          </packing>
        </child>
        <child>
          <object class="GtkEntry" id="hostNameEntry">
            <property name="visible">True</property>
            <property name="can_focus">True</property>
            <property name="can-focus">True</property>
            <property name="hexpand">True</property>
            <property name="activates-default">True</property>
            <property name="truncate-multiline">True</property>
            <property name="activates_default">True</property>
            <child internal-child="accessible">
              <object class="AtkObject" id="hostNameEntry-atkobject">
                <property name="AtkObject::accessible-description" translatable="yes" context="postgrespage|extended_tip|hostNameEntry">Enter the server url of the database. </property>
              </object>
            </child>
          </object>
          <packing>
            <property name="left_attach">1</property>
            <property name="top_attach">1</property>
            <property name="left-attach">1</property>
            <property name="top-attach">1</property>
          </packing>
        </child>
        <child>
          <object class="GtkBox" id="box1">
            <property name="visible">True</property>
            <property name="can_focus">False</property>
            <property name="can-focus">False</property>
            <property name="hexpand">True</property>
            <property name="spacing">12</property>
            <child>
              <object class="GtkSpinButton" id="portNumEntry">
                <property name="visible">True</property>
                <property name="can_focus">True</property>
                <property name="can-focus">True</property>
                <property name="hexpand">True</property>
                <property name="activates_default">True</property>
                <property name="activates-default">True</property>
                <property name="truncate-multiline">True</property>
                <property name="adjustment">adjustment1</property>
                <child internal-child="accessible">
                  <object class="AtkObject" id="portNumEntry-atkobject">
                    <property name="AtkObject::accessible-description" translatable="yes" context="postgrespage|extended_tip|portNumEntry">Enter the port number of the DBMS service. Default for PostgreSQL is 5432.</property>
                  </object>
                </child>
              </object>
              <packing>
                <property name="expand">False</property>
@@ -159,7 +189,7 @@
            <child>
              <object class="GtkLabel" id="portNumDefLabel">
                <property name="visible">True</property>
                <property name="can_focus">False</property>
                <property name="can-focus">False</property>
                <property name="label" translatable="yes" context="specialpostgrespage|portNumDefLabel">Default: 5432</property>
              </object>
              <packing>
@@ -170,43 +200,43 @@
            </child>
          </object>
          <packing>
            <property name="left_attach">1</property>
            <property name="top_attach">2</property>
            <property name="left-attach">1</property>
            <property name="top-attach">2</property>
          </packing>
        </child>
      </object>
      <packing>
        <property name="expand">False</property>
        <property name="fill">True</property>
        <property name="position">2</property>
        <property name="position">3</property>
      </packing>
    </child>
    <child>
      <!-- n-columns=2 n-rows=1 -->
      <!-- n-columns=1 n-rows=2 -->
      <object class="GtkGrid" id="grid2">
        <property name="visible">True</property>
        <property name="can_focus">False</property>
        <property name="can-focus">False</property>
        <property name="hexpand">True</property>
        <property name="vexpand">True</property>
        <property name="row_spacing">6</property>
        <property name="column_spacing">12</property>
        <property name="row-spacing">6</property>
        <property name="column-spacing">12</property>
        <child>
          <object class="GtkLabel" id="connectionStringLabel">
            <property name="visible">True</property>
            <property name="can_focus">False</property>
            <property name="can-focus">False</property>
            <property name="halign">start</property>
            <property name="label" translatable="yes" context="specialpostgrespage|connectionStringLabel">And/OR Enter the DBMS/driver-specific connection string here</property>
            <property name="use_underline">True</property>
            <property name="mnemonic_widget">browseurl</property>
            <property name="label" translatable="yes" context="specialpostgrespage|connectionStringLabel">Alternatively, enter the driver-specific connection string here</property>
            <property name="use-underline">True</property>
            <property name="mnemonic-widget">browseurl</property>
          </object>
          <packing>
            <property name="left_attach">0</property>
            <property name="top_attach">0</property>
            <property name="left-attach">0</property>
            <property name="top-attach">0</property>
          </packing>
        </child>
        <child>
          <!-- n-columns=2 n-rows=1 -->
          <object class="GtkGrid" id ="grid3">
          <object class="GtkGrid" id="grid3">
            <property name="visible">True</property>
            <property name="can-focus">False</property>
            <property name="hexpand">True</property>
@@ -217,6 +247,11 @@
                <property name="hexpand">True</property>
                <property name="activates-default">True</property>
                <property name="truncate-multiline">True</property>
                <child internal-child="accessible">
                  <object class="AtkObject" id="browseurl-atkobject">
                    <property name="AtkObject::accessible-description" translatable="yes" context="postgrespage|extended_tip|browseurl">Enter the complete connector URL to access the PostGreSQL DBMS service. The connector URL is in the form "postgresql://myHost:port/MyDatabase".</property>
                  </object>
                </child>
              </object>
              <packing>
                <property name="left-attach">1</property>
@@ -235,18 +270,15 @@
            </child>
          </object>
          <packing>
            <property name="left_attach">0</property>
            <property name="top_attach">1</property>
            <property name="left-attach">0</property>
            <property name="top-attach">1</property>
          </packing>
        </child>
        <child>
          <placeholder/>
        </child>
      </object>
      <packing>
        <property name="expand">False</property>
        <property name="fill">True</property>
        <property name="position">3</property>
        <property name="position">4</property>
      </packing>
    </child>
  </object>