summaryrefslogtreecommitdiff
path: root/sfx2
diff options
context:
space:
mode:
authorCaolán McNamara <caolanm@redhat.com>2018-10-04 17:06:50 +0100
committerCaolán McNamara <caolanm@redhat.com>2018-10-05 12:20:28 +0200
commitfaf6b466ab510ccee540953eebb790b6a57386e6 (patch)
tree2e6f384d14234aaa1430dac0317eda65eebbd201 /sfx2
parent42b629bc7f700d6f1d1b922e5c6aab119b8edf27 (diff)
weld modeless sfx SearchDialog
Change-Id: I90a9b5dcf8878356b6666f8fe911d5dce9391904 Reviewed-on: https://gerrit.libreoffice.org/61396 Tested-by: Jenkins Reviewed-by: Caolán McNamara <caolanm@redhat.com> Tested-by: Caolán McNamara <caolanm@redhat.com>
Diffstat (limited to 'sfx2')
-rw-r--r--sfx2/inc/srchdlg.hxx42
-rw-r--r--sfx2/source/appl/newhelp.cxx27
-rw-r--r--sfx2/source/appl/newhelp.hxx2
-rw-r--r--sfx2/source/dialog/srchdlg.cxx110
-rw-r--r--sfx2/uiconfig/ui/searchdialog.ui18
5 files changed, 78 insertions, 121 deletions
diff --git a/sfx2/inc/srchdlg.hxx b/sfx2/inc/srchdlg.hxx
index 2dfab6612abc..42941356012b 100644
--- a/sfx2/inc/srchdlg.hxx
+++ b/sfx2/inc/srchdlg.hxx
@@ -32,52 +32,44 @@ namespace sfx2 {
// SearchDialog
-class SearchDialog : public ModelessDialog
+class SearchDialog : public weld::GenericDialogController
{
private:
- VclPtr<ComboBox> m_pSearchEdit;
- VclPtr<CheckBox> m_pWholeWordsBox;
- VclPtr<CheckBox> m_pMatchCaseBox;
- VclPtr<CheckBox> m_pWrapAroundBox;
- VclPtr<CheckBox> m_pBackwardsBox;
- VclPtr<PushButton> m_pFindBtn;
-
Link<SearchDialog&,void> m_aFindHdl;
Link<LinkParamNone*,void> m_aCloseHdl;
OUString m_sConfigName;
- OString m_sWinState;
- bool m_bIsConstructed;
+ std::unique_ptr<weld::ComboBox> m_xSearchEdit;
+ std::unique_ptr<weld::CheckButton> m_xWholeWordsBox;
+ std::unique_ptr<weld::CheckButton> m_xMatchCaseBox;
+ std::unique_ptr<weld::CheckButton> m_xWrapAroundBox;
+ std::unique_ptr<weld::CheckButton> m_xBackwardsBox;
+ std::unique_ptr<weld::Button> m_xFindBtn;
void LoadConfig();
void SaveConfig();
- DECL_LINK(FindHdl, Button *, void);
+ DECL_LINK(FindHdl, weld::Button&, void);
public:
- SearchDialog( vcl::Window* pWindow, const OUString& rConfigName );
+ SearchDialog(weld::Window* pWindow, const OUString& rConfigName);
+ static void runAsync(std::shared_ptr<SearchDialog>& rController);
virtual ~SearchDialog() override;
- virtual void dispose() override;
void SetFindHdl( const Link<SearchDialog&,void>& rLink ) { m_aFindHdl = rLink; }
void SetCloseHdl( const Link<LinkParamNone*,void>& rLink ) { m_aCloseHdl = rLink; }
- OUString GetSearchText() const { return m_pSearchEdit->GetText(); }
- void SetSearchText( const OUString& _rText ) { m_pSearchEdit->SetText( _rText ); }
- bool IsOnlyWholeWords() const { return m_pWholeWordsBox->IsChecked(); }
- bool IsMarchCase() const { return m_pMatchCaseBox->IsChecked(); }
- bool IsWrapAround() const { return m_pWrapAroundBox->IsChecked(); }
- bool IsSearchBackwards() const { return m_pBackwardsBox->IsChecked(); }
-
- void SetFocusOnEdit();
+ OUString GetSearchText() const { return m_xSearchEdit->get_active_text(); }
+ void SetSearchText( const OUString& _rText ) { m_xSearchEdit->set_entry_text( _rText ); }
+ bool IsOnlyWholeWords() const { return m_xWholeWordsBox->get_active(); }
+ bool IsMarchCase() const { return m_xMatchCaseBox->get_active(); }
+ bool IsWrapAround() const { return m_xWrapAroundBox->get_active(); }
+ bool IsSearchBackwards() const { return m_xBackwardsBox->get_active(); }
- virtual bool Close() override;
- virtual void Move() override;
- virtual void StateChanged( StateChangedType nStateChange ) override;
+ void SetFocusOnEdit();
};
-
} // namespace sfx2
diff --git a/sfx2/source/appl/newhelp.cxx b/sfx2/source/appl/newhelp.cxx
index f2a28bb418ed..a7c7404cab32 100644
--- a/sfx2/source/appl/newhelp.cxx
+++ b/sfx2/source/appl/newhelp.cxx
@@ -1863,7 +1863,6 @@ SfxHelpTextWindow_Impl::SfxHelpTextWindow_Impl( SfxHelpWindow_Impl* pParent ) :
aOnStartupText ( SfxResId( RID_HELP_ONSTARTUP_TEXT ) ),
pHelpWin ( pParent ),
pTextWin ( VclPtr<TextWin_Impl>::Create( this ) ),
- pSrchDlg ( nullptr ),
nMinPos ( 0 ),
bIsDebug ( false ),
bIsIndexOn ( false ),
@@ -1924,7 +1923,7 @@ void SfxHelpTextWindow_Impl::dispose()
bIsInClose = true;
SvtMiscOptions().RemoveListenerLink( LINK( this, SfxHelpTextWindow_Impl, NotifyHdl ) );
- pSrchDlg.disposeAndClear();
+ m_xSrchDlg.reset();
aToolBox.disposeAndClear();
aOnStartupCB.disposeAndClear();
pHelpWin.clear();
@@ -2205,7 +2204,7 @@ void SfxHelpTextWindow_Impl::FindHdl(sfx2::SearchDialog* pDlg)
{
bool bWrapAround = ( nullptr == pDlg );
if ( bWrapAround )
- pDlg = pSrchDlg;
+ pDlg = m_xSrchDlg.get();
DBG_ASSERT( pDlg, "invalid search dialog" );
OUString sSearchText = pDlg->GetSearchText();
try
@@ -2265,11 +2264,11 @@ void SfxHelpTextWindow_Impl::FindHdl(sfx2::SearchDialog* pDlg)
}
else
{
- assert(pSrchDlg && "no search dialog");
- std::unique_ptr<weld::MessageDialog> xBox(Application::CreateMessageDialog(pSrchDlg->GetFrameWeld(),
+ assert(m_xSrchDlg && "no search dialog");
+ std::unique_ptr<weld::MessageDialog> xBox(Application::CreateMessageDialog(m_xSrchDlg->getDialog(),
VclMessageType::Info, VclButtonsType::Ok, SfxResId(STR_INFO_NOSEARCHTEXTFOUND)));
xBox->run();
- pSrchDlg->SetFocusOnEdit();
+ m_xSrchDlg->SetFocusOnEdit();
}
}
}
@@ -2280,13 +2279,11 @@ void SfxHelpTextWindow_Impl::FindHdl(sfx2::SearchDialog* pDlg)
}
}
-
IMPL_LINK_NOARG( SfxHelpTextWindow_Impl, CloseHdl, LinkParamNone*, void )
{
- pSrchDlg.clear();
+ m_xSrchDlg.reset();
}
-
IMPL_LINK( SfxHelpTextWindow_Impl, CheckHdl, Button*, pButton, void )
{
CheckBox* pBox = static_cast<CheckBox*>(pButton);
@@ -2571,22 +2568,22 @@ void SfxHelpTextWindow_Impl::CloseFrame()
void SfxHelpTextWindow_Impl::DoSearch()
{
- if ( !pSrchDlg )
+ if (!m_xSrchDlg)
{
// create the search dialog
- pSrchDlg = VclPtr<sfx2::SearchDialog>::Create( pTextWin, "HelpSearchDialog" );
+ m_xSrchDlg.reset(new sfx2::SearchDialog(pTextWin->GetFrameWeld(), "HelpSearchDialog"));
// set handler
- pSrchDlg->SetFindHdl( LINK( this, SfxHelpTextWindow_Impl, FindHdl ) );
- pSrchDlg->SetCloseHdl( LINK( this, SfxHelpTextWindow_Impl, CloseHdl ) );
+ m_xSrchDlg->SetFindHdl( LINK( this, SfxHelpTextWindow_Impl, FindHdl ) );
+ m_xSrchDlg->SetCloseHdl( LINK( this, SfxHelpTextWindow_Impl, CloseHdl ) );
// get selected text of the help page to set it as the search text
Reference< XTextRange > xCursor = getCursor();
if ( xCursor.is() )
{
OUString sText = xCursor->getString();
if ( !sText.isEmpty() )
- pSrchDlg->SetSearchText( sText );
+ m_xSrchDlg->SetSearchText( sText );
}
- pSrchDlg->Show();
+ sfx2::SearchDialog::runAsync(m_xSrchDlg);
}
}
diff --git a/sfx2/source/appl/newhelp.hxx b/sfx2/source/appl/newhelp.hxx
index 133502e6fef8..fa660cd5f01c 100644
--- a/sfx2/source/appl/newhelp.hxx
+++ b/sfx2/source/appl/newhelp.hxx
@@ -433,7 +433,7 @@ private:
VclPtr<SfxHelpWindow_Impl> pHelpWin;
VclPtr<vcl::Window> pTextWin;
- VclPtr<sfx2::SearchDialog> pSrchDlg;
+ std::shared_ptr<sfx2::SearchDialog> m_xSrchDlg;
css::uno::Reference < css::frame::XFrame2 >
xFrame;
css::uno::Reference< css::i18n::XBreakIterator >
diff --git a/sfx2/source/dialog/srchdlg.cxx b/sfx2/source/dialog/srchdlg.cxx
index 66c6dbaae171..fe91d230fb47 100644
--- a/sfx2/source/dialog/srchdlg.cxx
+++ b/sfx2/source/dialog/srchdlg.cxx
@@ -36,42 +36,27 @@ namespace sfx2 {
// SearchDialog
-SearchDialog::SearchDialog(vcl::Window* pWindow, const OUString& rConfigName)
- : ModelessDialog(pWindow, "SearchDialog", "sfx/ui/searchdialog.ui")
+SearchDialog::SearchDialog(weld::Window* pWindow, const OUString& rConfigName)
+ : GenericDialogController(pWindow, "sfx/ui/searchdialog.ui", "SearchDialog")
, m_sConfigName(rConfigName)
- , m_bIsConstructed(false)
-
+ , m_xSearchEdit(m_xBuilder->weld_combo_box("searchterm"))
+ , m_xWholeWordsBox(m_xBuilder->weld_check_button("wholewords"))
+ , m_xMatchCaseBox(m_xBuilder->weld_check_button("matchcase"))
+ , m_xWrapAroundBox(m_xBuilder->weld_check_button("wrap"))
+ , m_xBackwardsBox(m_xBuilder->weld_check_button("backwards"))
+ , m_xFindBtn(m_xBuilder->weld_button("ok"))
{
- get(m_pSearchEdit, "searchterm");
- get(m_pWholeWordsBox, "wholewords");
- get(m_pMatchCaseBox, "matchcase");
- get(m_pWrapAroundBox, "wrap");
- get(m_pBackwardsBox, "backwards");
- get(m_pFindBtn, "search");
-
// set handler
- m_pFindBtn->SetClickHdl( LINK( this, SearchDialog, FindHdl ) );
+ m_xFindBtn->connect_clicked(LINK(this, SearchDialog, FindHdl));
// load config: old search strings and the status of the check boxes
LoadConfig();
// the search edit should have the focus
- m_pSearchEdit->GrabFocus();
+ m_xSearchEdit->grab_focus();
}
SearchDialog::~SearchDialog()
{
- disposeOnce();
-}
-
-void SearchDialog::dispose()
-{
SaveConfig();
- m_pSearchEdit.clear();
- m_pWholeWordsBox.clear();
- m_pMatchCaseBox.clear();
- m_pWrapAroundBox.clear();
- m_pBackwardsBox.clear();
- m_pFindBtn.clear();
- ModelessDialog::dispose();
}
void SearchDialog::LoadConfig()
@@ -79,7 +64,6 @@ void SearchDialog::LoadConfig()
SvtViewOptions aViewOpt( EViewType::Dialog, m_sConfigName );
if ( aViewOpt.Exists() )
{
- m_sWinState = OUStringToOString(aViewOpt.GetWindowState(), RTL_TEXTENCODING_ASCII_US);
Any aUserItem = aViewOpt.GetUserItem( "UserItem" );
OUString sUserData;
if ( aUserItem >>= sUserData )
@@ -87,91 +71,69 @@ void SearchDialog::LoadConfig()
DBG_ASSERT( comphelper::string::getTokenCount(sUserData, ';') == 5, "invalid config data" );
sal_Int32 nIdx = 0;
OUString sSearchText = sUserData.getToken( 0, ';', nIdx );
- m_pWholeWordsBox->Check( sUserData.getToken( 0, ';', nIdx ).toInt32() == 1 );
- m_pMatchCaseBox->Check( sUserData.getToken( 0, ';', nIdx ).toInt32() == 1 );
- m_pWrapAroundBox->Check( sUserData.getToken( 0, ';', nIdx ).toInt32() == 1 );
- m_pBackwardsBox->Check( sUserData.getToken( 0, ';', nIdx ).toInt32() == 1 );
+ m_xWholeWordsBox->set_active( sUserData.getToken( 0, ';', nIdx ).toInt32() == 1 );
+ m_xMatchCaseBox->set_active( sUserData.getToken( 0, ';', nIdx ).toInt32() == 1 );
+ m_xWrapAroundBox->set_active( sUserData.getToken( 0, ';', nIdx ).toInt32() == 1 );
+ m_xBackwardsBox->set_active( sUserData.getToken( 0, ';', nIdx ).toInt32() == 1 );
nIdx = 0;
while ( nIdx != -1 )
- m_pSearchEdit->InsertEntry( sSearchText.getToken( 0, '\t', nIdx ) );
- m_pSearchEdit->SelectEntryPos(0);
+ m_xSearchEdit->append_text(sSearchText.getToken( 0, '\t', nIdx));
+ m_xSearchEdit->set_active(0);
}
}
else
- m_pWrapAroundBox->Check();
+ m_xWrapAroundBox->set_active(true);
}
void SearchDialog::SaveConfig()
{
SvtViewOptions aViewOpt( EViewType::Dialog, m_sConfigName );
- aViewOpt.SetWindowState(OStringToOUString(m_sWinState, RTL_TEXTENCODING_ASCII_US));
OUString sUserData;
- sal_Int32 i = 0, nCount = std::min( m_pSearchEdit->GetEntryCount(), static_cast<sal_Int32>(MAX_SAVE_COUNT) );
+ int i = 0, nCount = std::min(m_xSearchEdit->get_count(), static_cast<int>(MAX_SAVE_COUNT));
for ( ; i < nCount; ++i )
{
- sUserData += m_pSearchEdit->GetEntry(i);
+ sUserData += m_xSearchEdit->get_text(i);
sUserData += "\t";
}
sUserData = comphelper::string::stripStart(sUserData, '\t');
sUserData += ";";
- sUserData += OUString::number( m_pWholeWordsBox->IsChecked() ? 1 : 0 );
+ sUserData += OUString::number( m_xWholeWordsBox->get_active() ? 1 : 0 );
sUserData += ";";
- sUserData += OUString::number( m_pMatchCaseBox->IsChecked() ? 1 : 0 );
+ sUserData += OUString::number( m_xMatchCaseBox->get_active() ? 1 : 0 );
sUserData += ";";
- sUserData += OUString::number( m_pWrapAroundBox->IsChecked() ? 1 : 0 );
+ sUserData += OUString::number( m_xWrapAroundBox->get_active() ? 1 : 0 );
sUserData += ";";
- sUserData += OUString::number( m_pBackwardsBox->IsChecked() ? 1 : 0 );
+ sUserData += OUString::number( m_xBackwardsBox->get_active() ? 1 : 0 );
Any aUserItem = makeAny( sUserData );
aViewOpt.SetUserItem( "UserItem", aUserItem );
}
-IMPL_LINK_NOARG(SearchDialog, FindHdl, Button*, void)
+IMPL_LINK_NOARG(SearchDialog, FindHdl, weld::Button&, void)
{
- OUString sSrchTxt = m_pSearchEdit->GetText();
- sal_Int32 nPos = m_pSearchEdit->GetEntryPos( sSrchTxt );
- if ( nPos > 0 && nPos != COMBOBOX_ENTRY_NOTFOUND )
- m_pSearchEdit->RemoveEntryAt(nPos);
- if ( nPos > 0 )
- m_pSearchEdit->InsertEntry( sSrchTxt, 0 );
+ OUString sSrchTxt = m_xSearchEdit->get_active_text();
+ auto nPos = m_xSearchEdit->find_text(sSrchTxt);
+ if (nPos != 0)
+ {
+ if (nPos != -1)
+ m_xSearchEdit->remove(nPos);
+ m_xSearchEdit->insert_text(0, sSrchTxt);
+ }
m_aFindHdl.Call( *this );
}
void SearchDialog::SetFocusOnEdit()
{
- Selection aSelection( 0, m_pSearchEdit->GetText().getLength() );
- m_pSearchEdit->SetSelection( aSelection );
- m_pSearchEdit->GrabFocus();
+ m_xSearchEdit->select_entry_region(0, -1);
+ m_xSearchEdit->grab_focus();
}
-bool SearchDialog::Close()
+void SearchDialog::runAsync(std::shared_ptr<SearchDialog>& rController)
{
- bool bRet = ModelessDialog::Close();
- m_aCloseHdl.Call( nullptr );
- return bRet;
+ weld::DialogController::runAsync(rController, [=](sal_Int32 /*nResult*/){ rController->m_aCloseHdl.Call(nullptr); });
}
-void SearchDialog::StateChanged( StateChangedType nStateChange )
-{
- if ( nStateChange == StateChangedType::InitShow )
- {
- if (!m_sWinState.isEmpty())
- SetWindowState( m_sWinState );
- m_bIsConstructed = true;
- }
-
- ModelessDialog::StateChanged( nStateChange );
-}
-
-void SearchDialog::Move()
-{
- ModelessDialog::Move();
- if ( m_bIsConstructed && IsReallyVisible() )
- m_sWinState = GetWindowState( WindowStateMask::Pos | WindowStateMask::State );
-}
-
-
} // namespace sfx2
diff --git a/sfx2/uiconfig/ui/searchdialog.ui b/sfx2/uiconfig/ui/searchdialog.ui
index a8468aa1e54f..8445eabb5bc9 100644
--- a/sfx2/uiconfig/ui/searchdialog.ui
+++ b/sfx2/uiconfig/ui/searchdialog.ui
@@ -1,12 +1,17 @@
<?xml version="1.0" encoding="UTF-8"?>
-<!-- Generated with glade 3.18.3 -->
+<!-- Generated with glade 3.22.1 -->
<interface domain="sfx">
<requires lib="gtk+" version="3.18"/>
<object class="GtkDialog" id="SearchDialog">
<property name="can_focus">False</property>
<property name="border_width">6</property>
<property name="title" translatable="yes" context="searchdialog|SearchDialog">Find on this Page</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-vbox3">
<property name="can_focus">False</property>
@@ -17,7 +22,7 @@
<property name="can_focus">False</property>
<property name="layout_style">end</property>
<child>
- <object class="GtkButton" id="search">
+ <object class="GtkButton" id="ok">
<property name="label" translatable="yes" context="searchdialog|search">_Find</property>
<property name="visible">True</property>
<property name="can_focus">True</property>
@@ -68,7 +73,7 @@
<property name="can_focus">False</property>
<property name="row_spacing">6</property>
<child>
- <object class="GtkComboBox" id="searchterm">
+ <object class="GtkComboBoxText" id="searchterm">
<property name="visible">True</property>
<property name="can_focus">False</property>
<property name="valign">center</property>
@@ -76,7 +81,8 @@
<property name="has_entry">True</property>
<child internal-child="entry">
<object class="GtkEntry" id="combobox-entry1">
- <property name="can_focus">False</property>
+ <property name="can_focus">True</property>
+ <property name="activates_default">True</property>
</object>
</child>
</object>
@@ -89,10 +95,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="searchdialog|label1">_Search for:</property>
<property name="use_underline">True</property>
<property name="mnemonic_widget">searchterm</property>
+ <property name="xalign">0</property>
</object>
<packing>
<property name="left_attach">0</property>
@@ -189,7 +195,7 @@
</object>
</child>
<action-widgets>
- <action-widget response="0">search</action-widget>
+ <action-widget response="101">ok</action-widget>
<action-widget response="-7">close</action-widget>
</action-widgets>
</object>