summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorCaolán McNamara <caolanm@redhat.com>2019-03-03 20:23:08 +0000
committerCaolán McNamara <caolanm@redhat.com>2019-03-05 09:52:09 +0100
commit69e890b1691b6705520f407e4bbf5b579356f3e7 (patch)
tree1e739da8b14ccdc5c686cee5d10190a45616a98a
parent4a88213bc5f3c7a49e1704b9954b517f4e1b1d27 (diff)
weld ODatasourceSelectDialog
Change-Id: I33a45f6d68c4a6cba63301dbb6c94ea661365a9a Reviewed-on: https://gerrit.libreoffice.org/68651 Tested-by: Jenkins Reviewed-by: Caolán McNamara <caolanm@redhat.com> Tested-by: Caolán McNamara <caolanm@redhat.com>
-rw-r--r--dbaccess/source/ui/dlg/ConnectionHelper.cxx10
-rw-r--r--dbaccess/source/ui/dlg/adminpages.cxx8
-rw-r--r--dbaccess/source/ui/dlg/dsselect.cxx100
-rw-r--r--dbaccess/source/ui/dlg/dsselect.hxx33
-rw-r--r--dbaccess/source/ui/dlg/odbcconfig.cxx37
-rw-r--r--dbaccess/source/ui/dlg/odbcconfig.hxx4
-rw-r--r--dbaccess/uiconfig/ui/choosedatasourcedialog.ui54
7 files changed, 150 insertions, 96 deletions
diff --git a/dbaccess/source/ui/dlg/ConnectionHelper.cxx b/dbaccess/source/ui/dlg/ConnectionHelper.cxx
index 1288ff708241..48605ccf84ea 100644
--- a/dbaccess/source/ui/dlg/ConnectionHelper.cxx
+++ b/dbaccess/source/ui/dlg/ConnectionHelper.cxx
@@ -310,16 +310,16 @@ namespace dbaui
aProfiles.insert(pArray[index]);
// execute the select dialog
- ScopedVclPtrInstance< ODatasourceSelectDialog > aSelector(GetParent(), aProfiles);
+ ODatasourceSelectDialog aSelector(GetFrameWeld(), aProfiles);
OUString sOldProfile=getURLNoPrefix();
if (!sOldProfile.isEmpty())
- aSelector->Select(sOldProfile);
+ aSelector.Select(sOldProfile);
else
- aSelector->Select(xMozillaBootstrap->getDefaultProfile(profileType));
+ aSelector.Select(xMozillaBootstrap->getDefaultProfile(profileType));
- if ( RET_OK == aSelector->Execute() )
- setURLNoPrefix(aSelector->GetSelected());
+ if (RET_OK == aSelector.run())
+ setURLNoPrefix(aSelector.GetSelected());
break;
}
case ::dbaccess::DST_FIREBIRD:
diff --git a/dbaccess/source/ui/dlg/adminpages.cxx b/dbaccess/source/ui/dlg/adminpages.cxx
index af7b586e8cff..213c3e821527 100644
--- a/dbaccess/source/ui/dlg/adminpages.cxx
+++ b/dbaccess/source/ui/dlg/adminpages.cxx
@@ -168,11 +168,11 @@ namespace dbaui
{
aEnumeration.getDatasourceNames(aOdbcDatasources);
// execute the select dialog
- ScopedVclPtrInstance< ODatasourceSelectDialog > aSelector(GetParent(), aOdbcDatasources);
+ ODatasourceSelectDialog aSelector(GetFrameWeld(), aOdbcDatasources);
if (!_sCurr.isEmpty())
- aSelector->Select(_sCurr);
- if ( RET_OK == aSelector->Execute() )
- _sReturn = aSelector->GetSelected();
+ aSelector.Select(_sCurr);
+ if (RET_OK == aSelector.run())
+ _sReturn = aSelector.GetSelected();
}
return true;
}
diff --git a/dbaccess/source/ui/dlg/dsselect.cxx b/dbaccess/source/ui/dlg/dsselect.cxx
index d6fce6351bf7..c7eee5b6fba5 100644
--- a/dbaccess/source/ui/dlg/dsselect.cxx
+++ b/dbaccess/source/ui/dlg/dsselect.cxx
@@ -42,115 +42,101 @@ using namespace ::com::sun::star::sdbcx;
using namespace ::com::sun::star::ui::dialogs;
using namespace ::comphelper;
-ODatasourceSelectDialog::ODatasourceSelectDialog(vcl::Window* _pParent, const std::set<OUString>& _rDatasources)
- : ModalDialog(_pParent, "ChooseDataSourceDialog",
- "dbaccess/ui/choosedatasourcedialog.ui")
+ODatasourceSelectDialog::ODatasourceSelectDialog(weld::Window* _pParent, const std::set<OUString>& _rDatasources)
+ : GenericDialogController(_pParent, "dbaccess/ui/choosedatasourcedialog.ui", "ChooseDataSourceDialog")
+ , m_xDatasource(m_xBuilder->weld_tree_view("treeview"))
+ , m_xOk(m_xBuilder->weld_button("ok"))
+ , m_xCancel(m_xBuilder->weld_button("cancel"))
+ , m_xManageDatasources(m_xBuilder->weld_button("organize"))
{
- get(m_pDatasource, "treeview");
- m_pDatasource->set_height_request(m_pDatasource->GetTextHeight() * 6);
- get(m_pOk, "ok");
- get(m_pCancel, "cancel");
+ m_xDatasource->set_size_request(-1, m_xDatasource->get_height_rows(6));
fillListBox(_rDatasources);
#ifdef HAVE_ODBC_ADMINISTRATION
- get(m_pManageDatasources, "organize");
- m_pManageDatasources->Show();
-
// allow ODBC datasource management
- m_pManageDatasources->Show();
- m_pManageDatasources->Enable();
- m_pManageDatasources->SetClickHdl(LINK(this,ODatasourceSelectDialog,ManageClickHdl));
+ m_xManageDatasources->show();
+ m_xManageDatasources->set_sensitive(true);
+ m_xManageDatasources->connect_clicked(LINK(this,ODatasourceSelectDialog,ManageClickHdl));
#endif
- m_pDatasource->SetDoubleClickHdl(LINK(this,ODatasourceSelectDialog,ListDblClickHdl));
+ m_xDatasource->connect_row_activated(LINK(this,ODatasourceSelectDialog,ListDblClickHdl));
}
ODatasourceSelectDialog::~ODatasourceSelectDialog()
{
- disposeOnce();
-}
-
-void ODatasourceSelectDialog::dispose()
-{
- m_pDatasource.clear();
- m_pOk.clear();
- m_pCancel.clear();
-#if defined HAVE_ODBC_ADMINISTRATION
- m_pManageDatasources.clear();
-#endif
- ModalDialog::dispose();
}
-
-IMPL_LINK( ODatasourceSelectDialog, ListDblClickHdl, ListBox&, rListBox, void )
+IMPL_LINK(ODatasourceSelectDialog, ListDblClickHdl, weld::TreeView&, rListBox, void)
{
- if (rListBox.GetSelectedEntryCount())
- EndDialog(RET_OK);
+ if (rListBox.n_children())
+ m_xDialog->response(RET_OK);
}
-bool ODatasourceSelectDialog::Close()
+short ODatasourceSelectDialog::run()
{
+ short nRet = GenericDialogController::run();
#ifdef HAVE_ODBC_ADMINISTRATION
- if ( m_pODBCManagement.get() && m_pODBCManagement->isRunning() )
- return false;
+ if (m_xODBCManagement.get())
+ m_xODBCManagement->disableCallback();
#endif
-
- return ModalDialog::Close();
+ return nRet;
}
#ifdef HAVE_ODBC_ADMINISTRATION
-IMPL_LINK_NOARG(ODatasourceSelectDialog, ManageClickHdl, Button*, void)
+IMPL_LINK_NOARG(ODatasourceSelectDialog, ManageClickHdl, weld::Button&, void)
{
- if ( !m_pODBCManagement.get() )
- m_pODBCManagement.reset( new OOdbcManagement( LINK( this, ODatasourceSelectDialog, ManageProcessFinished ) ) );
+ if ( !m_xODBCManagement.get() )
+ m_xODBCManagement.reset( new OOdbcManagement( LINK( this, ODatasourceSelectDialog, ManageProcessFinished ) ) );
- if ( !m_pODBCManagement->manageDataSources_async() )
+ if ( !m_xODBCManagement->manageDataSources_async() )
{
// TODO: error message
- m_pDatasource->GrabFocus();
- m_pManageDatasources->Disable();
+ m_xDatasource->grab_focus();
+ m_xManageDatasources->set_sensitive(false);
return;
}
- m_pDatasource->Disable();
- m_pOk->Disable();
- m_pCancel->Disable();
- m_pManageDatasources->Disable();
+ m_xDatasource->set_sensitive(false);
+ m_xOk->set_sensitive(false);
+ m_xCancel->set_sensitive(false);
+ m_xManageDatasources->set_sensitive(false);
- SAL_WARN_IF( !m_pODBCManagement->isRunning(), "dbaccess.ui", "ODatasourceSelectDialog::ManageClickHdl: success, but not running - you were *fast*!" );
+ SAL_WARN_IF( !m_xODBCManagement->isRunning(), "dbaccess.ui", "ODatasourceSelectDialog::ManageClickHdl: success, but not running - you were *fast*!" );
}
IMPL_LINK_NOARG( ODatasourceSelectDialog, ManageProcessFinished, void*, void )
{
+ m_xODBCManagement->receivedCallback();
+
std::set<OUString> aOdbcDatasources;
OOdbcEnumeration aEnumeration;
aEnumeration.getDatasourceNames( aOdbcDatasources );
fillListBox( aOdbcDatasources );
- m_pDatasource->Enable();
- m_pOk->Enable();
- m_pCancel->Enable();
- m_pManageDatasources->Enable();
+ m_xDatasource->set_sensitive(true);
+ m_xOk->set_sensitive(true);
+ m_xCancel->set_sensitive(true);
+ m_xManageDatasources->set_sensitive(true);
}
#endif
void ODatasourceSelectDialog::fillListBox(const std::set<OUString>& _rDatasources)
{
OUString sSelected;
- if (m_pDatasource->GetEntryCount())
- sSelected = m_pDatasource->GetSelectedEntry();
- m_pDatasource->Clear();
+ if (m_xDatasource->n_children())
+ sSelected = m_xDatasource->get_selected_text();
+ m_xDatasource->clear();
// fill the list
for (auto const& datasource : _rDatasources)
{
- m_pDatasource->InsertEntry(datasource);
+ m_xDatasource->append_text(datasource);
}
- if (m_pDatasource->GetEntryCount())
+ if (m_xDatasource->n_children())
{
if (!sSelected.isEmpty())
- m_pDatasource->SelectEntry(sSelected);
+ m_xDatasource->select_text(sSelected);
else // select the first entry
- m_pDatasource->SelectEntryPos(0);
+ m_xDatasource->select(0);
}
}
diff --git a/dbaccess/source/ui/dlg/dsselect.hxx b/dbaccess/source/ui/dlg/dsselect.hxx
index 944d59fbcd10..b27693a70c18 100644
--- a/dbaccess/source/ui/dlg/dsselect.hxx
+++ b/dbaccess/source/ui/dlg/dsselect.hxx
@@ -24,11 +24,8 @@
#include "odbcconfig.hxx"
#include <commontypes.hxx>
-#include <vcl/dialog.hxx>
-#include <vcl/lstbox.hxx>
-#include <vcl/button.hxx>
-#include <vcl/fixed.hxx>
#include <rtl/ustring.hxx>
+#include <vcl/weld.hxx>
#include <memory>
@@ -37,35 +34,33 @@ namespace dbaui
{
// ODatasourceSelector
-class ODatasourceSelectDialog final : public ModalDialog
+class ODatasourceSelectDialog final : public weld::GenericDialogController
{
- VclPtr<ListBox> m_pDatasource;
- VclPtr<OKButton> m_pOk;
- VclPtr<CancelButton> m_pCancel;
+ std::unique_ptr<weld::TreeView> m_xDatasource;
+ std::unique_ptr<weld::Button> m_xOk;
+ std::unique_ptr<weld::Button> m_xCancel;
+ std::unique_ptr<weld::Button> m_xManageDatasources;
#ifdef HAVE_ODBC_ADMINISTRATION
- VclPtr<PushButton> m_pManageDatasources;
- std::unique_ptr< OOdbcManagement >
- m_pODBCManagement;
+ std::unique_ptr<OOdbcManagement> m_xODBCManagement;
#endif
public:
- ODatasourceSelectDialog( vcl::Window* _pParent, const std::set<OUString>& _rDatasources );
+ ODatasourceSelectDialog(weld::Window* pParent, const std::set<OUString>& rDatasources);
virtual ~ODatasourceSelectDialog() override;
- virtual void dispose() override;
OUString GetSelected() const {
- return m_pDatasource->GetSelectedEntry();
+ return m_xDatasource->get_selected_text();
}
void Select( const OUString& _rEntry ) {
- m_pDatasource->SelectEntry(_rEntry);
+ m_xDatasource->select_text(_rEntry);
}
- virtual bool Close() override;
+ virtual short run() override;
private:
- DECL_LINK( ListDblClickHdl, ListBox&, void );
+ DECL_LINK( ListDblClickHdl, weld::TreeView&, void );
#ifdef HAVE_ODBC_ADMINISTRATION
- DECL_LINK(ManageClickHdl, Button*, void);
- DECL_LINK( ManageProcessFinished, void*, void );
+ DECL_LINK(ManageClickHdl, weld::Button&, void);
+ DECL_LINK(ManageProcessFinished, void*, void);
#endif
void fillListBox(const std::set<OUString>& _rDatasources);
};
diff --git a/dbaccess/source/ui/dlg/odbcconfig.cxx b/dbaccess/source/ui/dlg/odbcconfig.cxx
index 136a4d9adcc9..f4e831439591 100644
--- a/dbaccess/source/ui/dlg/odbcconfig.cxx
+++ b/dbaccess/source/ui/dlg/odbcconfig.cxx
@@ -233,14 +233,33 @@ class ProcessTerminationWait : public ::osl::Thread
{
oslProcess m_hProcessHandle;
Link<void*,void> m_aFinishHdl;
+ ImplSVEvent* m_nEventId;
public:
ProcessTerminationWait( oslProcess _hProcessHandle, const Link<void*,void>& _rFinishHdl )
- :m_hProcessHandle( _hProcessHandle )
- ,m_aFinishHdl( _rFinishHdl )
+ : m_hProcessHandle( _hProcessHandle )
+ , m_aFinishHdl( _rFinishHdl )
+ , m_nEventId(nullptr)
{
}
+ void disableCallback()
+ {
+ // if finished event not posted yet, disable by turning it to a no-op Link
+ m_aFinishHdl = Link<void*, void>();
+ if (m_nEventId)
+ {
+ // already posted, remove it
+ Application::RemoveUserEvent(m_nEventId);
+ m_nEventId = nullptr;
+ }
+ }
+
+ void receivedCallback()
+ {
+ m_nEventId = nullptr;
+ }
+
protected:
virtual void SAL_CALL run() override
{
@@ -248,7 +267,7 @@ protected:
osl_joinProcess( m_hProcessHandle );
osl_freeProcessHandle( m_hProcessHandle );
- Application::PostUserEvent( m_aFinishHdl );
+ m_nEventId = Application::PostUserEvent( m_aFinishHdl );
}
};
@@ -285,6 +304,18 @@ bool OOdbcManagement::manageDataSources_async()
return true;
}
+void OOdbcManagement::disableCallback()
+{
+ if (m_pProcessWait.get())
+ m_pProcessWait->disableCallback();
+}
+
+void OOdbcManagement::receivedCallback()
+{
+ if (m_pProcessWait.get())
+ m_pProcessWait->receivedCallback();
+}
+
bool OOdbcManagement::isRunning() const
{
return ( m_pProcessWait.get() && m_pProcessWait->isRunning() );
diff --git a/dbaccess/source/ui/dlg/odbcconfig.hxx b/dbaccess/source/ui/dlg/odbcconfig.hxx
index 6ed5b6b5b93d..aa409d69d1e3 100644
--- a/dbaccess/source/ui/dlg/odbcconfig.hxx
+++ b/dbaccess/source/ui/dlg/odbcconfig.hxx
@@ -90,7 +90,7 @@ class ProcessTerminationWait;
class OOdbcManagement
{
std::unique_ptr< ProcessTerminationWait > m_pProcessWait;
- Link<void*,void> m_aAsyncFinishCallback;
+ Link<void*,void> m_aAsyncFinishCallback;
public:
explicit OOdbcManagement( const Link<void*,void>& _rAsyncFinishCallback );
@@ -98,6 +98,8 @@ public:
bool manageDataSources_async();
bool isRunning() const;
+ void disableCallback();
+ void receivedCallback();
};
#endif
diff --git a/dbaccess/uiconfig/ui/choosedatasourcedialog.ui b/dbaccess/uiconfig/ui/choosedatasourcedialog.ui
index b0e3db84ec8d..23ad6cfafbfb 100644
--- a/dbaccess/uiconfig/ui/choosedatasourcedialog.ui
+++ b/dbaccess/uiconfig/ui/choosedatasourcedialog.ui
@@ -1,13 +1,27 @@
<?xml version="1.0" encoding="UTF-8"?>
-<!-- Generated with glade 3.18.3 -->
+<!-- Generated with glade 3.22.1 -->
<interface domain="dba">
<requires lib="gtk+" version="3.18"/>
+ <object class="GtkTreeStore" id="liststore2">
+ <columns>
+ <!-- column-name text -->
+ <column type="gchararray"/>
+ <!-- column-name id -->
+ <column type="gchararray"/>
+ </columns>
+ </object>
<object class="GtkDialog" id="ChooseDataSourceDialog">
<property name="can_focus">False</property>
<property name="border_width">6</property>
<property name="title" translatable="yes" context="choosedatasourcedialog|ChooseDataSourceDialog">Data Source</property>
<property name="resizable">False</property>
+ <property name="modal">True</property>
+ <property name="default_width">0</property>
+ <property name="default_height">0</property>
<property name="type_hint">dialog</property>
+ <child>
+ <placeholder/>
+ </child>
<child internal-child="vbox">
<object class="GtkBox" id="dialog-vbox1">
<property name="can_focus">False</property>
@@ -96,10 +110,10 @@
<object class="GtkLabel" id="label1">
<property name="visible">True</property>
<property name="can_focus">False</property>
- <property name="xalign">0</property>
<property name="label" translatable="yes" context="choosedatasourcedialog|label1">Choose a data source:</property>
<property name="use_underline">True</property>
- <property name="mnemonic_widget">treeview:border</property>
+ <property name="mnemonic_widget">treeview</property>
+ <property name="xalign">0</property>
</object>
<packing>
<property name="left_attach">0</property>
@@ -107,14 +121,39 @@
</packing>
</child>
<child>
- <object class="GtkTreeView" id="treeview:border">
+ <object class="GtkScrolledWindow">
<property name="visible">True</property>
<property name="can_focus">True</property>
<property name="hexpand">True</property>
<property name="vexpand">True</property>
- <property name="show_expanders">False</property>
- <child internal-child="selection">
- <object class="GtkTreeSelection" id="treeview-selection1"/>
+ <property name="shadow_type">in</property>
+ <child>
+ <object class="GtkTreeView" id="treeview">
+ <property name="visible">True</property>
+ <property name="can_focus">True</property>
+ <property name="receives_default">True</property>
+ <property name="hexpand">True</property>
+ <property name="vexpand">True</property>
+ <property name="model">liststore2</property>
+ <property name="headers_visible">False</property>
+ <property name="search_column">1</property>
+ <property name="show_expanders">False</property>
+ <child internal-child="selection">
+ <object class="GtkTreeSelection" id="Macro Library List-selection2"/>
+ </child>
+ <child>
+ <object class="GtkTreeViewColumn" id="treeviewcolumn5">
+ <property name="resizable">True</property>
+ <property name="spacing">6</property>
+ <child>
+ <object class="GtkCellRendererText" id="cellrenderer4"/>
+ <attributes>
+ <attribute name="text">0</attribute>
+ </attributes>
+ </child>
+ </object>
+ </child>
+ </object>
</child>
</object>
<packing>
@@ -135,6 +174,7 @@
<action-widget response="-5">ok</action-widget>
<action-widget response="-6">cancel</action-widget>
<action-widget response="-11">help</action-widget>
+ <action-widget response="101">organize</action-widget>
</action-widgets>
</object>
</interface>