tdf#104833 update check: Start using vcl::Window more directly

UpdateHandler implements a dialog that is created
and was so far updated using UNO API.

Start using the underlying vcl::Window objects
and methods more directly.
Start with the 3 edit controls.

This reduces the use of UNO API and having access to the
underlying vcl::Window objects will also allow setting
the mnemonic widgets (and therefore accessible relations)
for labels in an upcoming commit, for which no UNO
API exists.

Ideally, this dialog should be converted to use
the standard approach of defining its widgets
in a .ui file and then using the weld::Widget
abstraction. Switching to that approach should also be
easier with this commit in place.

Change-Id: I8e41fb68d5b5e4c3e892803e4139c30f14019f3c
Reviewed-on: https://gerrit.libreoffice.org/c/core/+/191073
Tested-by: Jenkins
Reviewed-by: Michael Weghorn <m.weghorn@posteo.de>
This commit is contained in:
Michael Weghorn
2025-09-17 14:31:12 +02:00
parent 1a75463c79
commit 04b5cdcca0
3 changed files with 60 additions and 28 deletions
+1
View File
@@ -28,6 +28,7 @@ $(eval $(call gb_Library_use_libraries,updchk,\
cppu \
sal \
salhelper \
tk \
utl \
vcl \
))
+52 -28
View File
@@ -61,7 +61,9 @@
#include <strings.hrc>
#include <unotools/resmgr.hxx>
#include <toolkit/helper/vclunohelper.hxx>
#include <tools/urlobj.hxx>
#include <vcl/svapp.hxx>
#include <vcl/vclenum.hxx>
#include <comphelper/diagnose_ex.hxx>
@@ -126,7 +128,8 @@ void UpdateHandler::enableControls( short nCtrlState )
if ( ( nCurStateVal & 0x01 ) != ( nOldStateVal & 0x01 ) )
{
bool bEnableControl = ( ( nCurStateVal & 0x01 ) == 0x01 );
setControlProperty( msButtonIDs[i], u"Enabled"_ustr, uno::Any( bEnableControl ) );
vcl::Window* pWin = getWindow(msButtonIDs[i]);
pWin->Enable(bEnableControl);
}
}
@@ -145,8 +148,10 @@ void UpdateHandler::setDownloadBtnLabel( bool bAppendDots )
if ( bAppendDots )
aLabel += "...";
setControlProperty( msButtonIDs[DOWNLOAD_BUTTON], u"Label"_ustr, uno::Any( aLabel ) );
setControlProperty( msButtonIDs[DOWNLOAD_BUTTON], u"HelpURL"_ustr, uno::Any(OUString( INET_HID_SCHEME + HID_CHECK_FOR_UPD_DOWNLOAD2 )) );
vcl::Window* pButton = getWindow(msButtonIDs[DOWNLOAD_BUTTON]);
assert(pButton);
pButton->SetText(aLabel);
pButton->SetHelpId(OUString(INET_HID_SCHEME + HID_CHECK_FOR_UPD_DOWNLOAD2));
mbDownloadBtnHasDots = bAppendDots;
}
@@ -233,14 +238,14 @@ void UpdateHandler::setProgress( sal_Int32 nPercent )
mnPercent = nPercent;
setControlProperty( CTRL_PROGRESS, u"ProgressValue"_ustr, uno::Any( nPercent ) );
setControlProperty( TEXT_PERCENT, u"Text"_ustr, uno::Any( substVariables(msPercent) ) );
m_pPercentEdit->SetText(substVariables(msPercent));
}
}
void UpdateHandler::setErrorMessage( const OUString& rErrorMsg )
{
setControlProperty( TEXT_DESCRIPTION, u"Text"_ustr, uno::Any( rErrorMsg ) );
m_pDescriptionEdit->SetText(rErrorMsg);
}
@@ -421,7 +426,7 @@ void SAL_CALL UpdateHandler::handle( uno::Reference< task::XInteractionRequest >
beans::Optional< OUString > aErrorText = xStrResolver->getStringFromInformationalRequest( rRequest );
if ( aErrorText.IsPresent )
{
setControlProperty( TEXT_DESCRIPTION, u"Text"_ustr, uno::Any( aErrorText.Value ) );
m_pDescriptionEdit->SetText(aErrorText.Value);
uno::Sequence< uno::Reference< task::XInteractionContinuation > > xContinuations = rRequest->getContinuations();
if ( xContinuations.getLength() == 1 )
@@ -484,6 +489,8 @@ void UpdateHandler::updateState( UpdateState eState )
if ( meLastState == eState )
return;
SolarMutexGuard g;
OUString sText;
switch ( eState )
@@ -491,25 +498,25 @@ void UpdateHandler::updateState( UpdateState eState )
case UPDATESTATE_CHECKING:
showControls( (1<<CANCEL_BUTTON) + (1<<THROBBER_CTRL) );
enableControls( 1<<CANCEL_BUTTON );
setControlProperty( TEXT_STATUS, u"Text"_ustr, uno::Any( substVariables(msChecking) ) );
setControlProperty( TEXT_DESCRIPTION, u"Text"_ustr, uno::Any( OUString() ) );
m_pStatusEdit->SetText(substVariables(msChecking));
m_pDescriptionEdit->SetText(OUString());
focusControl( CANCEL_BUTTON );
break;
case UPDATESTATE_ERROR_CHECKING:
showControls( 0 );
enableControls( 1 << CLOSE_BUTTON );
setControlProperty( TEXT_STATUS, u"Text"_ustr, uno::Any( substVariables(msCheckingError) ) );
m_pStatusEdit->SetText(substVariables(msCheckingError));
focusControl( CLOSE_BUTTON );
break;
case UPDATESTATE_UPDATE_AVAIL:
showControls( 0 );
enableControls( ( 1 << CLOSE_BUTTON ) + ( 1 << DOWNLOAD_BUTTON ) );
setControlProperty( TEXT_STATUS, u"Text"_ustr, uno::Any( substVariables(msUpdFound) ) );
m_pStatusEdit->SetText(substVariables(msUpdFound));
sText = substVariables(msDownloadWarning);
if ( !msDescriptionMsg.isEmpty() )
sText += "\n\n" + msDescriptionMsg;
setControlProperty( TEXT_DESCRIPTION, u"Text"_ustr, uno::Any( sText ) );
m_pDescriptionEdit->SetText(sText);
setDownloadBtnLabel( false );
focusControl( DOWNLOAD_BUTTON );
@@ -517,12 +524,12 @@ void UpdateHandler::updateState( UpdateState eState )
case UPDATESTATE_UPDATE_NO_DOWNLOAD:
showControls( 0 );
enableControls( ( 1 << CLOSE_BUTTON ) + ( 1 << DOWNLOAD_BUTTON ) );
setControlProperty( TEXT_STATUS, u"Text"_ustr, uno::Any( substVariables(msUpdFound) ) );
m_pStatusEdit->SetText(substVariables(msUpdFound));
sText = substVariables(msDownloadNotAvail);
if ( !msDescriptionMsg.isEmpty() )
sText += "\n\n" + msDescriptionMsg;
setControlProperty( TEXT_DESCRIPTION, u"Text"_ustr, uno::Any( sText ) );
m_pDescriptionEdit->SetText(sText );
setDownloadBtnLabel( true );
focusControl( DOWNLOAD_BUTTON );
@@ -531,38 +538,38 @@ void UpdateHandler::updateState( UpdateState eState )
case UPDATESTATE_EXT_UPD_AVAIL: // will only be set, when there are no office updates avail
showControls( 0 );
enableControls( 1 << CLOSE_BUTTON );
setControlProperty( TEXT_STATUS, u"Text"_ustr, uno::Any( substVariables(msNoUpdFound) ) );
setControlProperty( TEXT_DESCRIPTION, u"Text"_ustr, uno::Any( OUString() ) );
m_pStatusEdit->SetText(substVariables(msNoUpdFound));
m_pDescriptionEdit->SetText(OUString());
focusControl( CLOSE_BUTTON );
break;
case UPDATESTATE_DOWNLOADING:
showControls( (1<<PROGRESS_CTRL) + (1<<CANCEL_BUTTON) + (1<<PAUSE_BUTTON) + (1<<RESUME_BUTTON) );
enableControls( (1<<CLOSE_BUTTON) + (1<<CANCEL_BUTTON) + (1<<PAUSE_BUTTON) );
setControlProperty( TEXT_STATUS, u"Text"_ustr, uno::Any( substVariables(msDownloading) ) );
setControlProperty( TEXT_PERCENT, u"Text"_ustr, uno::Any( substVariables(msPercent) ) );
setControlProperty( TEXT_DESCRIPTION, u"Text"_ustr, uno::Any( substVariables(msDownloadWarning) ) );
m_pStatusEdit->SetText(substVariables(msDownloading));
m_pPercentEdit->SetText(substVariables(msPercent));
m_pDescriptionEdit->SetText(substVariables(msDownloadWarning));
setControlProperty( CTRL_PROGRESS, u"ProgressValue"_ustr, uno::Any( mnPercent ) );
focusControl( CLOSE_BUTTON );
break;
case UPDATESTATE_DOWNLOAD_PAUSED:
showControls( (1<<PROGRESS_CTRL) + (1<<CANCEL_BUTTON) + (1<<PAUSE_BUTTON) + (1<<RESUME_BUTTON) );
enableControls( (1<<CLOSE_BUTTON) + (1<<CANCEL_BUTTON) + (1<<RESUME_BUTTON) );
setControlProperty( TEXT_STATUS, u"Text"_ustr, uno::Any( substVariables(msDownloadPause) ) );
setControlProperty( TEXT_PERCENT, u"Text"_ustr, uno::Any( substVariables(msPercent) ) );
setControlProperty( TEXT_DESCRIPTION, u"Text"_ustr, uno::Any( substVariables(msDownloadWarning) ) );
m_pStatusEdit->SetText(substVariables(msDownloadPause));
m_pPercentEdit->SetText(substVariables(msPercent));
m_pDescriptionEdit->SetText(substVariables(msDownloadWarning));
setControlProperty( CTRL_PROGRESS, u"ProgressValue"_ustr, uno::Any( mnPercent ) );
focusControl( CLOSE_BUTTON );
break;
case UPDATESTATE_ERROR_DOWNLOADING:
showControls( (1<<PROGRESS_CTRL) + (1<<CANCEL_BUTTON) + (1<<PAUSE_BUTTON) + (1<<RESUME_BUTTON) );
enableControls( (1<<CLOSE_BUTTON) + (1<<CANCEL_BUTTON) );
setControlProperty( TEXT_STATUS, u"Text"_ustr, uno::Any( substVariables(msDownloadError) ) );
m_pStatusEdit->SetText(substVariables(msDownloadError));
focusControl( CLOSE_BUTTON );
break;
case UPDATESTATE_DOWNLOAD_AVAIL:
showControls( 0 );
setControlProperty( TEXT_STATUS, u"Text"_ustr, uno::Any( substVariables(msReady2Install) ) );
setControlProperty( TEXT_DESCRIPTION, u"Text"_ustr, uno::Any( substVariables(msDownloadDescr) ) );
m_pStatusEdit->SetText(substVariables(msReady2Install));
m_pDescriptionEdit->SetText(substVariables(msDownloadDescr));
break;
case UPDATESTATE_AUTO_START:
case UPDATESTATES_COUNT:
@@ -972,15 +979,15 @@ void UpdateHandler::showControls( short nControls )
// Status text needs to be smaller, when there are buttons at the right side of the dialog
if ( ( nControls & ( (1<<CANCEL_BUTTON) + (1<<PAUSE_BUTTON) + (1<<RESUME_BUTTON) ) ) != 0 )
setControlProperty( TEXT_STATUS, u"Width"_ustr, uno::Any( sal_Int32(EDIT_WIDTH - BUTTON_WIDTH - 2*INNER_BORDER - TEXT_OFFSET ) ) );
m_pStatusEdit->set_width_request(EDIT_WIDTH - BUTTON_WIDTH - 2 * INNER_BORDER - TEXT_OFFSET);
else
setControlProperty( TEXT_STATUS, u"Width"_ustr, uno::Any( sal_Int32(EDIT_WIDTH - 2*TEXT_OFFSET ) ) );
m_pStatusEdit->set_width_request(EDIT_WIDTH - 2*TEXT_OFFSET);
// Status text needs to be taller, when we show the progress bar
if ( ( nControls & ( 1<<PROGRESS_CTRL ) ) != 0 )
setControlProperty( TEXT_STATUS, u"Height"_ustr, uno::Any( sal_Int32(LABEL_HEIGHT) ) );
m_pStatusEdit->set_height_request(LABEL_HEIGHT);
else
setControlProperty( TEXT_STATUS, u"Height"_ustr, uno::Any( sal_Int32(BOX_HEIGHT1 - 4*TEXT_OFFSET - LABEL_HEIGHT ) ) );
m_pStatusEdit->set_height_request(BOX_HEIGHT1 - 4*TEXT_OFFSET - LABEL_HEIGHT);
}
@@ -1245,6 +1252,23 @@ void UpdateHandler::createDialog()
mxUpdDlg.set( xControl, uno::UNO_QUERY_THROW );
mnLastCtrlState = -1;
m_pStatusEdit = getWindow(TEXT_STATUS);
m_pDescriptionEdit = getWindow(TEXT_DESCRIPTION);
m_pPercentEdit = getWindow(TEXT_PERCENT);
}
vcl::Window* UpdateHandler::getWindow(const OUString& rControlName)
{
assert(mxUpdDlg.is() && "Dialog not set.");
uno::Reference<awt::XControlContainer> xControlContainer(mxUpdDlg, uno::UNO_QUERY_THROW);
uno::Reference<awt::XControl> xControl(xControlContainer->getControl(rControlName),
uno::UNO_SET_THROW);
uno::Reference<awt::XWindow> xWindow(xControl, uno::UNO_QUERY_THROW);
vcl::Window* pWin = VCLUnoHelper::GetWindow(xControl->getPeer());
assert(pWin);
return pWin;
}
/* vim:set shiftwidth=4 softtabstop=4 expandtab: */
@@ -38,6 +38,7 @@
#include <cppuhelper/implbase.hxx>
#include <unotools/resmgr.hxx>
#include <rtl/ref.hxx>
#include <vcl/window.hxx>
#include "actionlistener.hxx"
@@ -77,6 +78,11 @@ class UpdateHandler : public cppu::WeakImplHelper< css::awt::XActionListener,
private:
css::uno::Reference< css::uno::XComponentContext > mxContext;
css::uno::Reference< css::awt::XDialog > mxUpdDlg;
VclPtr<vcl::Window> m_pStatusEdit;
VclPtr<vcl::Window> m_pDescriptionEdit;
VclPtr<vcl::Window> m_pPercentEdit;
css::uno::Reference< css::task::XInteractionHandler > mxInteractionHdl;
rtl::Reference< IActionListener > mxActionListener;
@@ -127,6 +133,7 @@ private:
OUString msBubbleTitles[ UPDATESTATES_COUNT ];
void createDialog();
vcl::Window* getWindow(const OUString& rControlName);
void updateState( UpdateState eNewState );
void startThrobber( bool bStart = true );
void setControlProperty( const OUString &rCtrlName,