weld SelectPersonaDialog

Change-Id: Ice5e59bb8c26f007b71ba7844872ce825a5549f8
Reviewed-on: https://gerrit.libreoffice.org/67371
Tested-by: Jenkins
Reviewed-by: Caolán McNamara <caolanm@redhat.com>
Tested-by: Caolán McNamara <caolanm@redhat.com>
This commit is contained in:
Caolán McNamara 2019-02-04 16:53:38 +00:00
parent 930d691d88
commit ad5493c3fc
3 changed files with 87 additions and 97 deletions

View file

@ -29,6 +29,7 @@
#include <vcl/settings.hxx>
#include <vcl/graphicfilter.hxx>
#include <vcl/mnemonic.hxx>
#include <vcl/virdev.hxx>
#include <dialmgr.hxx>
#include <strings.hrc>
@ -162,51 +163,40 @@ void curlDownload(const OString& rURL, const OUString& sFileURL)
}
} //End of anonymous namespace
SelectPersonaDialog::SelectPersonaDialog( vcl::Window *pParent )
: ModalDialog( pParent, "SelectPersonaDialog", "cui/ui/select_persona_dialog.ui" )
SelectPersonaDialog::SelectPersonaDialog(weld::Window *pParent)
: GenericDialogController(pParent, "cui/ui/select_persona_dialog.ui", "SelectPersonaDialog")
, m_xEdit(m_xBuilder->weld_entry("search_term"))
, m_xSearchButton(m_xBuilder->weld_button("search_personas"))
, m_xProgressLabel(m_xBuilder->weld_label("progress_label"))
, m_xCategories(m_xBuilder->weld_combo_box("categoriesCB"))
, m_xOkButton(m_xBuilder->weld_button("ok"))
, m_xCancelButton(m_xBuilder->weld_button("cancel"))
, m_vResultList{ m_xBuilder->weld_button("result1"),
m_xBuilder->weld_button("result2"),
m_xBuilder->weld_button("result3"),
m_xBuilder->weld_button("result4"),
m_xBuilder->weld_button("result5"),
m_xBuilder->weld_button("result6"),
m_xBuilder->weld_button("result7"),
m_xBuilder->weld_button("result8"),
m_xBuilder->weld_button("result9") }
{
get( m_pSearchButton, "search_personas" );
m_pSearchButton->SetClickHdl( LINK( this, SelectPersonaDialog, SearchPersonas ) );
m_xSearchButton->connect_clicked( LINK( this, SelectPersonaDialog, SearchPersonas ) );
m_xCategories->connect_changed( LINK( this, SelectPersonaDialog, SelectCategory ) );
m_xOkButton->connect_clicked( LINK( this, SelectPersonaDialog, ActionOK ) );
m_xCancelButton->connect_clicked( LINK( this, SelectPersonaDialog, ActionCancel ) );
get( m_pEdit, "search_term" );
get( m_pCategories, "categoriesCB" );
m_pCategories->SetSelectHdl( LINK( this, SelectPersonaDialog, SelectCategory ) );
get( m_pProgressLabel, "progress_label" );
get( m_pOkButton, "ok" );
m_pOkButton->SetClickHdl( LINK( this, SelectPersonaDialog, ActionOK ) );
get( m_pCancelButton, "cancel" );
m_pCancelButton->SetClickHdl( LINK( this, SelectPersonaDialog, ActionCancel ) );
get( m_vResultList[0], "result1" );
get( m_vResultList[1], "result2" );
get( m_vResultList[2], "result3" );
get( m_vResultList[3], "result4" );
get( m_vResultList[4], "result5" );
get( m_vResultList[5], "result6" );
get( m_vResultList[6], "result7" );
get( m_vResultList[7], "result8" );
get( m_vResultList[8], "result9" );
for (VclPtr<PushButton> & nIndex : m_vResultList)
for (auto & nIndex : m_vResultList)
{
nIndex->SetClickHdl( LINK( this, SelectPersonaDialog, SelectPersona ) );
nIndex->Disable();
nIndex->connect_clicked( LINK( this, SelectPersonaDialog, SelectPersona ) );
nIndex->set_sensitive(false);
}
m_pCategories->SelectEntry("Featured");
m_pCategories->GetSelectHdl().Call(*m_pCategories);
m_xCategories->set_active_text("Featured");
SelectCategory(*m_xCategories);
}
SelectPersonaDialog::~SelectPersonaDialog()
{
disposeOnce();
}
void SelectPersonaDialog::dispose()
{
if (m_pSearchThread.is())
{
@ -216,16 +206,6 @@ void SelectPersonaDialog::dispose()
SolarMutexReleaser aReleaser;
m_pSearchThread->join();
}
m_pCategories.clear();
m_pEdit.clear();
m_pSearchButton.clear();
m_pProgressLabel.clear();
for (VclPtr<PushButton>& vp : m_vResultList)
vp.clear();
m_pOkButton.clear();
m_pCancelButton.clear();
ModalDialog::dispose();
}
OUString SelectPersonaDialog::GetSelectedPersona() const
@ -236,9 +216,9 @@ OUString SelectPersonaDialog::GetSelectedPersona() const
return OUString();
}
IMPL_LINK_NOARG( SelectPersonaDialog, SearchPersonas, Button*, void )
IMPL_LINK_NOARG( SelectPersonaDialog, SearchPersonas, weld::Button&, void )
{
OUString searchTerm = m_pEdit->GetText();
OUString searchTerm = m_xEdit->get_text();
if( searchTerm.isEmpty( ) )
return;
@ -284,7 +264,7 @@ IMPL_LINK_NOARG( SelectPersonaDialog, SearchPersonas, Button*, void )
m_pSearchThread->launch();
}
IMPL_LINK_NOARG( SelectPersonaDialog, ActionOK, Button*, void )
IMPL_LINK_NOARG( SelectPersonaDialog, ActionOK, weld::Button&, void )
{
OUString aSelectedPersona = GetSelectedPersona();
@ -299,23 +279,23 @@ IMPL_LINK_NOARG( SelectPersonaDialog, ActionOK, Button*, void )
if ( m_pSearchThread.is() )
m_pSearchThread->StopExecution();
EndDialog( RET_OK );
m_xDialog->response(RET_OK);
}
}
IMPL_LINK_NOARG( SelectPersonaDialog, ActionCancel, Button*, void )
IMPL_LINK_NOARG( SelectPersonaDialog, ActionCancel, weld::Button&, void )
{
if( m_pSearchThread.is() )
m_pSearchThread->StopExecution();
if( m_pGetPersonaThread.is() )
m_pGetPersonaThread->StopExecution();
EndDialog();
m_xDialog->response(RET_CANCEL);
}
IMPL_LINK_NOARG( SelectPersonaDialog, SelectCategory, ListBox&, void )
IMPL_LINK_NOARG( SelectPersonaDialog, SelectCategory, weld::ComboBox&, void )
{
OUString searchTerm = *static_cast<OUString*>(m_pCategories->GetSelectedEntryData());
OUString searchTerm = m_xCategories->get_active_id();
OUString rSearchURL;
if (searchTerm.isEmpty())
@ -335,7 +315,7 @@ IMPL_LINK_NOARG( SelectPersonaDialog, SelectCategory, ListBox&, void )
m_pSearchThread->launch();
}
IMPL_LINK( SelectPersonaDialog, SelectPersona, Button*, pButton, void )
IMPL_LINK( SelectPersonaDialog, SelectPersona, weld::Button&, rButton, void )
{
if( m_pSearchThread.is() )
m_pSearchThread->StopExecution();
@ -344,7 +324,7 @@ IMPL_LINK( SelectPersonaDialog, SelectPersona, Button*, pButton, void )
for( sal_Int32 index = 0; index < MAX_RESULTS; index++ )
{
if( pButton == m_vResultList[index] )
if( &rButton == m_vResultList[index].get() )
{
if( !m_vPersonaSettings[index].isEmpty() )
{
@ -374,21 +354,21 @@ const OUString& SelectPersonaDialog::GetAppliedPersonaSetting() const
void SelectPersonaDialog::SetProgress( const OUString& rProgress )
{
if(rProgress.isEmpty())
m_pProgressLabel->Hide();
m_xProgressLabel->hide();
else
{
SolarMutexGuard aGuard;
m_pProgressLabel->Show();
m_pProgressLabel->SetText( rProgress );
setOptimalLayoutSize();
m_xProgressLabel->show();
m_xProgressLabel->set_label( rProgress );
m_xDialog->resize_to_request(); //TODO
}
}
void SelectPersonaDialog::SetImages( const Image& aImage, const OUString& sName, const sal_Int32& nIndex )
void SelectPersonaDialog::SetImages( VirtualDevice& rImage, const OUString& sName, const sal_Int32& nIndex )
{
m_vResultList[nIndex]->Enable();
m_vResultList[nIndex]->SetModeImage( aImage );
m_vResultList[nIndex]->SetQuickHelpText( sName );
m_vResultList[nIndex]->set_sensitive(true);
m_vResultList[nIndex]->set_image(&rImage);
m_vResultList[nIndex]->set_tooltip_text( sName );
}
void SelectPersonaDialog::AddPersonaSetting( OUString const & rPersonaSetting )
@ -402,10 +382,10 @@ void SelectPersonaDialog::ClearSearchResults()
SolarMutexGuard aGuard;
m_vPersonaSettings.clear();
m_aSelectedPersona.clear();
for(VclPtr<PushButton> & nIndex : m_vResultList)
for(auto & nIndex : m_vResultList)
{
nIndex->Disable();
nIndex->SetModeImage(Image());
nIndex->set_sensitive(false);
nIndex->set_image(nullptr);
}
}
@ -655,11 +635,11 @@ void SvxPersonalizationTabPage::LoadExtensionThemes()
IMPL_LINK_NOARG( SvxPersonalizationTabPage, SelectPersona, Button*, void )
{
m_pOwnPersona->Check();
ScopedVclPtrInstance< SelectPersonaDialog > aDialog(nullptr);
SelectPersonaDialog aDialog(GetDialogFrameWeld());
if ( aDialog->Execute() == RET_OK )
if (aDialog.run() == RET_OK)
{
OUString aPersonaSetting( aDialog->GetAppliedPersonaSetting() );
OUString aPersonaSetting(aDialog.GetAppliedPersonaSetting());
if ( !aPersonaSetting.isEmpty() )
{
SetPersonaSettings( aPersonaSetting );
@ -908,8 +888,11 @@ void SearchAndParseThread::execute()
aFilter.ImportGraphic( aGraphic, aURLObj );
BitmapEx aBmp = aGraphic.GetBitmapEx();
m_pPersonaDialog->SetImages( Image( aBmp ), personaInfo.sName, nIndex );
m_pPersonaDialog->setOptimalLayoutSize();
ScopedVclPtr<VirtualDevice> xVirDev(VclPtr<VirtualDevice>::Create());
xVirDev->SetOutputSizePixel(aBmp.GetSizePixel());
xVirDev->DrawBitmapEx(Point(0, 0), aBmp);
m_pPersonaDialog->SetImages(*xVirDev, personaInfo.sName, nIndex );
if (++nIndex >= MAX_RESULTS)
break;
@ -971,8 +954,11 @@ void SearchAndParseThread::execute()
aFilter.ImportGraphic( aGraphic, aURLObj );
BitmapEx aBmp = aGraphic.GetBitmapEx();
m_pPersonaDialog->SetImages( Image( aBmp ), aPersonaInfo.sName, 0 );
m_pPersonaDialog->setOptimalLayoutSize();
ScopedVclPtr<VirtualDevice> xVirDev(VclPtr<VirtualDevice>::Create());
xVirDev->SetOutputSizePixel(aBmp.GetSizePixel());
xVirDev->DrawBitmapEx(Point(0, 0), aBmp);
m_pPersonaDialog->SetImages( *xVirDev, aPersonaInfo.sName, 0 );
}
}
@ -983,7 +969,6 @@ void SearchAndParseThread::execute()
SolarMutexGuard aGuard;
sProgress.clear();
m_pPersonaDialog->SetProgress( sProgress );
m_pPersonaDialog->setOptimalLayoutSize();
}
GetPersonaThread::GetPersonaThread( SelectPersonaDialog* pDialog,
@ -1062,7 +1047,7 @@ void GetPersonaThread::execute()
+ ";" + aTextColor;
m_pPersonaDialog->SetAppliedPersonaSetting( aPersonaSetting );
m_pPersonaDialog->EndDialog( RET_OK );
m_pPersonaDialog->response( RET_OK );
}
/* vim:set shiftwidth=4 softtabstop=4 expandtab: */

View file

@ -94,25 +94,24 @@ private:
};
/** Dialog that will allow the user to choose a Persona to use. */
class SelectPersonaDialog : public ModalDialog
class SelectPersonaDialog : public weld::GenericDialogController
{
private:
VclPtr<Edit> m_pEdit; ///< The input line for the search term
VclPtr<PushButton> m_pSearchButton; ///< The search button
VclPtr<FixedText> m_pProgressLabel; ///< The label for showing progress of search
VclPtr<PushButton> m_vResultList[MAX_RESULTS]; ///< List of buttons to show search results
VclPtr<ListBox> m_pCategories; ///< The list of categories
VclPtr<PushButton> m_pOkButton; ///< The OK button
VclPtr<PushButton> m_pCancelButton; ///< The Cancel button
std::vector<OUString> m_vPersonaSettings;
OUString m_aSelectedPersona;
OUString m_aAppliedPersona;
std::unique_ptr<weld::Entry> m_xEdit; ///< The input line for the search term
std::unique_ptr<weld::Button> m_xSearchButton; ///< The search button
std::unique_ptr<weld::Label> m_xProgressLabel; ///< The label for showing progress of search
std::unique_ptr<weld::ComboBox> m_xCategories; ///< The list of categories
std::unique_ptr<weld::Button> m_xOkButton; ///< The OK button
std::unique_ptr<weld::Button> m_xCancelButton; ///< The Cancel button
std::unique_ptr<weld::Button> m_vResultList[MAX_RESULTS]; ///< List of buttons to show search results
public:
explicit SelectPersonaDialog( vcl::Window *pParent );
explicit SelectPersonaDialog(weld::Window *pParent);
virtual ~SelectPersonaDialog() override;
virtual void dispose() override;
::rtl::Reference< SearchAndParseThread > m_pSearchThread;
::rtl::Reference< GetPersonaThread > m_pGetPersonaThread;
@ -124,7 +123,7 @@ public:
* @param sName Name of the persona
* @param nIndex Index number of the result button
*/
void SetImages(const Image& aPreviewImage, const OUString& sName, const sal_Int32& nIndex );
void SetImages( VirtualDevice& rPreviewImage, const OUString& sName, const sal_Int32& nIndex );
void AddPersonaSetting( OUString const & );
void ClearSearchResults();
void SetAppliedPersonaSetting( OUString const & );
@ -132,19 +131,19 @@ public:
private:
/// Handle the Search button
DECL_LINK( SearchPersonas, Button*, void );
DECL_LINK( SearchPersonas, weld::Button&, void );
/// Handle persona categories list box
DECL_LINK( SelectCategory, ListBox&, void );
DECL_LINK( SelectPersona, Button*, void );
DECL_LINK( ActionOK, Button*, void );
DECL_LINK( ActionCancel, Button*, void );
DECL_LINK( SelectCategory, weld::ComboBox&, void );
DECL_LINK( SelectPersona, weld::Button&, void );
DECL_LINK( ActionOK, weld::Button&, void );
DECL_LINK( ActionCancel, weld::Button&, void );
};
class SearchAndParseThread: public salhelper::Thread
{
private:
VclPtr<SelectPersonaDialog> m_pPersonaDialog;
SelectPersonaDialog* m_pPersonaDialog;
OUString m_aURL;
std::atomic<bool> m_bExecute;
bool m_bDirectURL;
@ -164,7 +163,7 @@ class GetPersonaThread: public salhelper::Thread
{
private:
VclPtr<SelectPersonaDialog> m_pPersonaDialog;
SelectPersonaDialog* m_pPersonaDialog;
OUString m_aSelectedPersona;
std::atomic<bool> m_bExecute;

View file

@ -6,6 +6,9 @@
<property name="can_focus">False</property>
<property name="border_width">6</property>
<property name="title" translatable="yes" context="select_persona_dialog|SelectPersonaDialog">Select Firefox Theme</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/>
@ -68,7 +71,9 @@
<object class="GtkLabel" id="progress_label">
<property name="visible">True</property>
<property name="can_focus">False</property>
<property name="hexpand">True</property>
<property name="ellipsize">end</property>
<property name="width_chars">45</property>
<property name="max_width_chars">45</property>
<property name="xalign">0</property>
</object>
@ -98,6 +103,7 @@
<property name="visible">True</property>
<property name="can_focus">True</property>
<property name="hexpand">True</property>
<property name="activates_default">True</property>
<property name="primary_icon_activatable">False</property>
<property name="secondary_icon_activatable">False</property>
<property name="placeholder_text" translatable="yes" context="select_persona_dialog|search_term">Search term or address</property>
@ -142,7 +148,7 @@
<object class="GtkLabel" id="categories_label">
<property name="visible">True</property>
<property name="can_focus">False</property>
<property name="label" context="select_persona_dialog|categories_label" translatable="yes">Ca_tegory:</property>
<property name="label" translatable="yes" context="select_persona_dialog|categories_label">Ca_tegory:</property>
<property name="use_underline">True</property>
<property name="mnemonic_widget">categoriesCB</property>
</object>