weld EditControl
as used by the LibreLogo toolbar
Change-Id: Ice60d1f5146a58cab5bab44a12a2bdcf4dbd77ec
Reviewed-on: https://gerrit.libreoffice.org/c/core/+/92703
Tested-by: Jenkins
Reviewed-by: Caolán McNamara <caolanm@redhat.com>
diff --git a/framework/inc/uielement/edittoolbarcontroller.hxx b/framework/inc/uielement/edittoolbarcontroller.hxx
index 3344ed1..193af59 100644
--- a/framework/inc/uielement/edittoolbarcontroller.hxx
+++ b/framework/inc/uielement/edittoolbarcontroller.hxx
@@ -51,7 +51,7 @@ class EditToolbarController final : public ComplexToolbarController
void Modify();
void GetFocus();
void LoseFocus();
bool PreNotify( NotifyEvent const & rNEvt );
void Activate();
private:
virtual void executeControlCommand( const css::frame::ControlCommand& rControlCommand ) override;
diff --git a/framework/source/uielement/edittoolbarcontroller.cxx b/framework/source/uielement/edittoolbarcontroller.cxx
index 5b6cd39..52c5164 100644
--- a/framework/source/uielement/edittoolbarcontroller.cxx
+++ b/framework/source/uielement/edittoolbarcontroller.cxx
@@ -20,12 +20,11 @@
#include <uielement/edittoolbarcontroller.hxx>
#include <com/sun/star/beans/PropertyValue.hpp>
#include <svtools/InterimItemWindow.hxx>
#include <svtools/toolboxcontroller.hxx>
#include <vcl/svapp.hxx>
#include <vcl/toolbox.hxx>
#include <vcl/event.hxx>
#include <vcl/edit.hxx>
using namespace ::com::sun::star;
using namespace css::uno;
@@ -41,26 +40,37 @@ namespace framework
// Unfortunaltly the events are notified through virtual methods instead
// of Listeners.
class EditControl : public Edit
class EditControl : public InterimItemWindow
{
public:
EditControl( vcl::Window* pParent, WinBits nStyle, EditToolbarController* pEditToolbarController );
virtual ~EditControl() override;
virtual void dispose() override;
public:
EditControl(vcl::Window* pParent, EditToolbarController* pEditToolbarController);
virtual ~EditControl() override;
virtual void dispose() override;
virtual void Modify() override;
virtual void GetFocus() override;
virtual void LoseFocus() override;
virtual bool PreNotify( NotifyEvent& rNEvt ) override;
OUString get_text() const { return m_xWidget->get_text(); }
void set_text(const OUString& rText) { m_xWidget->set_text(rText); }
private:
EditToolbarController* m_pEditToolbarController;
private:
std::unique_ptr<weld::Entry> m_xWidget;
EditToolbarController* m_pEditToolbarController;
DECL_LINK(FocusInHdl, weld::Widget&, void);
DECL_LINK(FocusOutHdl, weld::Widget&, void);
DECL_LINK(ModifyHdl, weld::Entry&, void);
DECL_LINK(ActivateHdl, weld::Entry&, bool);
};
EditControl::EditControl( vcl::Window* pParent, WinBits nStyle, EditToolbarController* pEditToolbarController ) :
Edit( pParent, nStyle )
, m_pEditToolbarController( pEditToolbarController )
EditControl::EditControl(vcl::Window* pParent, EditToolbarController* pEditToolbarController)
: InterimItemWindow(pParent, "svt/ui/editcontrol.ui", "EditControl")
, m_xWidget(m_xBuilder->weld_entry("entry"))
, m_pEditToolbarController(pEditToolbarController)
{
m_xWidget->connect_focus_in(LINK(this, EditControl, FocusInHdl));
m_xWidget->connect_focus_out(LINK(this, EditControl, FocusOutHdl));
m_xWidget->connect_changed(LINK(this, EditControl, ModifyHdl));
m_xWidget->connect_activate(LINK(this, EditControl, ActivateHdl));
SetSizePixel(get_preferred_size());
}
EditControl::~EditControl()
@@ -71,39 +81,34 @@ EditControl::~EditControl()
void EditControl::dispose()
{
m_pEditToolbarController = nullptr;
Edit::dispose();
m_xWidget.reset();
InterimItemWindow::dispose();
}
void EditControl::Modify()
IMPL_LINK_NOARG(EditControl, ModifyHdl, weld::Entry&, void)
{
Edit::Modify();
if ( m_pEditToolbarController )
if (m_pEditToolbarController)
m_pEditToolbarController->Modify();
}
void EditControl::GetFocus()
IMPL_LINK_NOARG(EditControl, FocusInHdl, weld::Widget&, void)
{
Edit::GetFocus();
if ( m_pEditToolbarController )
if (m_pEditToolbarController)
m_pEditToolbarController->GetFocus();
}
void EditControl::LoseFocus()
IMPL_LINK_NOARG(EditControl, FocusOutHdl, weld::Widget&, void)
{
Edit::LoseFocus();
if ( m_pEditToolbarController )
m_pEditToolbarController->LoseFocus();
}
bool EditControl::PreNotify( NotifyEvent& rNEvt )
{
bool bRet = false;
if ( m_pEditToolbarController )
bRet = m_pEditToolbarController->PreNotify( rNEvt );
if ( !bRet )
bRet = Edit::PreNotify( rNEvt );
return bRet;
IMPL_LINK_NOARG(EditControl, ActivateHdl, weld::Entry&, bool)
{
if (m_pEditToolbarController)
m_pEditToolbarController->Activate();
return true;
}
EditToolbarController::EditToolbarController(
@@ -116,12 +121,12 @@ EditToolbarController::EditToolbarController(
ComplexToolbarController( rxContext, rFrame, pToolbar, nID, aCommand )
, m_pEditControl( nullptr )
{
m_pEditControl = VclPtr<EditControl>::Create( m_xToolbar, WB_BORDER, this );
m_pEditControl = VclPtr<EditControl>::Create(m_xToolbar, this);
if ( nWidth == 0 )
nWidth = 100;
// Calculate height of the edit field according to the application font height
sal_Int32 nHeight = getFontSizePixel( m_pEditControl ) + 6 + 1;
// EditControl ctor has set a suitable height already
auto nHeight = m_pEditControl->GetSizePixel().Height();
m_pEditControl->SetSizePixel( ::Size( nWidth, nHeight ));
m_xToolbar->SetItemWindow( m_nID, m_pEditControl );
@@ -144,7 +149,7 @@ void SAL_CALL EditToolbarController::dispose()
Sequence<PropertyValue> EditToolbarController::getExecuteArgs(sal_Int16 KeyModifier) const
{
Sequence<PropertyValue> aArgs( 2 );
OUString aSelectedText = m_pEditControl->GetText();
OUString aSelectedText = m_pEditControl->get_text();
// Add key modifier to argument list
aArgs[0].Name = "KeyModifier";
@@ -156,7 +161,7 @@ Sequence<PropertyValue> EditToolbarController::getExecuteArgs(sal_Int16 KeyModif
void EditToolbarController::Modify()
{
notifyTextChanged( m_pEditControl->GetText() );
notifyTextChanged(m_pEditControl->get_text());
}
void EditToolbarController::GetFocus()
@@ -169,22 +174,11 @@ void EditToolbarController::LoseFocus()
notifyFocusLost();
}
bool EditToolbarController::PreNotify( NotifyEvent const & rNEvt )
void EditToolbarController::Activate()
{
if( rNEvt.GetType() == MouseNotifyEvent::KEYINPUT )
{
const ::KeyEvent* pKeyEvent = rNEvt.GetKeyEvent();
const vcl::KeyCode& rKeyCode = pKeyEvent->GetKeyCode();
if(( rKeyCode.GetModifier() | rKeyCode.GetCode()) == KEY_RETURN )
{
// Call execute only with non-empty text
if ( !m_pEditControl->GetText().isEmpty() )
execute( rKeyCode.GetModifier() );
return true;
}
}
return false;
// Call execute only with non-empty text
if (!m_pEditControl->get_text().isEmpty())
execute(0);
}
void EditToolbarController::executeControlCommand( const css::frame::ControlCommand& rControlCommand )
@@ -198,7 +192,7 @@ void EditToolbarController::executeControlCommand( const css::frame::ControlComm
{
OUString aText;
rControlCommand.Arguments[i].Value >>= aText;
m_pEditControl->SetText( aText );
m_pEditControl->set_text(aText);
// send notification
notifyTextChanged( aText );
diff --git a/solenv/sanitizers/ui/svt.suppr b/solenv/sanitizers/ui/svt.suppr
index 4b1b491..cf90875 100644
--- a/solenv/sanitizers/ui/svt.suppr
+++ b/solenv/sanitizers/ui/svt.suppr
@@ -1,3 +1,4 @@
svtools/uiconfig/ui/editcontrol.ui://GtkEntry[@id='entry'] no-labelled-by
svtools/uiconfig/ui/graphicexport.ui://GtkSpinButton[@id='compressionjpgnf'] no-labelled-by
svtools/uiconfig/ui/graphicexport.ui://GtkScale[@id='compressionjpgsb'] no-labelled-by
svtools/uiconfig/ui/graphicexport.ui://GtkSpinButton[@id='compressionpngnf'] no-labelled-by
diff --git a/svtools/UIConfig_svt.mk b/svtools/UIConfig_svt.mk
index dd4744f..88078d2 100644
--- a/svtools/UIConfig_svt.mk
+++ b/svtools/UIConfig_svt.mk
@@ -12,6 +12,7 @@ $(eval $(call gb_UIConfig_UIConfig,svt))
$(eval $(call gb_UIConfig_add_uifiles,svt,\
svtools/uiconfig/ui/addresstemplatedialog \
svtools/uiconfig/ui/datewindow \
svtools/uiconfig/ui/editcontrol \
svtools/uiconfig/ui/emptypage \
svtools/uiconfig/ui/fileviewmenu \
svtools/uiconfig/ui/graphicexport \
diff --git a/svtools/uiconfig/ui/editcontrol.ui b/svtools/uiconfig/ui/editcontrol.ui
new file mode 100644
index 0000000..3be2e24
--- /dev/null
+++ b/svtools/uiconfig/ui/editcontrol.ui
@@ -0,0 +1,26 @@
<?xml version="1.0" encoding="UTF-8"?>
<!-- Generated with glade 3.22.1 -->
<interface domain="svt">
<requires lib="gtk+" version="3.18"/>
<object class="GtkBox" id="EditControl">
<property name="visible">True</property>
<property name="can_focus">False</property>
<property name="hexpand">True</property>
<property name="spacing">6</property>
<child>
<object class="GtkEntry" id="entry">
<property name="visible">True</property>
<property name="can_focus">True</property>
<property name="hexpand">True</property>
<property name="vexpand">True</property>
<property name="activates_default">True</property>
<property name="width_chars">1</property>
</object>
<packing>
<property name="expand">False</property>
<property name="fill">True</property>
<property name="position">0</property>
</packing>
</child>
</object>
</interface>