route wizards child queue_resize requests to preexisting layout

As an interim measure, until wizards can only be constructed from .ui and then
always contain layout widgets, implement listening for layout widget children
announcing layout change requests and route that to pre-existing original
positioning code. That allows e.g. the mail merge output page in writer to
show/hide the alternative descriptions on selecting letter/email.

Change-Id: I086921f4d46b29756cf4f4fccdf3bdf632ea70b8
This commit is contained in:
Caolán McNamara
2013-09-28 12:17:33 +02:00
parent 63a8964ac6
commit 35a16a88eb
2 changed files with 40 additions and 11 deletions

View File

@@ -210,6 +210,7 @@ IMPL_LINK( MyWizardDlg, ImplNextHdl, PushButton*, pBtn )
class SVT_DLLPUBLIC WizardDialog : public ModalDialog
{
private:
Timer maWizardLayoutTimer;
Size maPageSize;
ImplWizPageData* mpFirstPage;
ImplWizButtonData* mpFirstBtn;
@@ -225,6 +226,9 @@ private:
sal_Int16 mnLeftAlignCount;
bool mbEmptyViewMargin;
DECL_DLLPRIVATE_LINK( ImplHandleWizardLayoutTimerHdl, void* );
bool hasWizardPendingLayout() const;
protected:
long LogicalCoordinateToPixel(int iCoordinate);
/**sets the number of buttons which should be left-aligned. Normally, buttons are right-aligned.
@@ -248,9 +252,9 @@ private:
SVT_DLLPRIVATE TabPage* ImplGetPage( sal_uInt16 nLevel ) const;
public:
WizardDialog( Window* pParent, WinBits nStyle = WB_STDTABDIALOG );
WizardDialog( Window* pParent, const ResId& rResId );
~WizardDialog();
WizardDialog( Window* pParent, WinBits nStyle = WB_STDTABDIALOG );
WizardDialog( Window* pParent, const ResId& rResId );
~WizardDialog();
virtual void Resize();
virtual void StateChanged( StateChangedType nStateChange );
@@ -259,11 +263,13 @@ public:
virtual void ActivatePage();
virtual long DeactivatePage();
sal_Bool ShowPrevPage();
sal_Bool ShowNextPage();
sal_Bool ShowPage( sal_uInt16 nLevel );
sal_Bool Finnish( long nResult = 0 );
sal_uInt16 GetCurLevel() const { return mnCurLevel; }
virtual void queue_layout();
sal_Bool ShowPrevPage();
sal_Bool ShowNextPage();
sal_Bool ShowPage( sal_uInt16 nLevel );
sal_Bool Finnish( long nResult = 0 );
sal_uInt16 GetCurLevel() const { return mnCurLevel; }
void AddPage( TabPage* pPage );
void RemovePage( TabPage* pPage );

View File

@@ -61,6 +61,9 @@ void WizardDialog::ImplInitData()
meViewAlign = WINDOWALIGN_LEFT;
mbEmptyViewMargin = false;
mnLeftAlignCount = 0;
maWizardLayoutTimer.SetTimeout(50);
maWizardLayoutTimer.SetTimeoutHdl( LINK( this, WizardDialog, ImplHandleWizardLayoutTimerHdl ) );
}
// -----------------------------------------------------------------------
@@ -111,7 +114,26 @@ void WizardDialog::ImplCalcSize( Size& rSize )
}
}
// -----------------------------------------------------------------------
bool WizardDialog::hasWizardPendingLayout() const
{
return maWizardLayoutTimer.IsActive();
}
void WizardDialog::queue_layout()
{
if (hasWizardPendingLayout())
return;
if (IsInClose())
return;
maWizardLayoutTimer.Start();
}
IMPL_LINK( WizardDialog, ImplHandleWizardLayoutTimerHdl, void*, EMPTYARG )
{
ImplPosCtrls();
ImplPosTabPage();
return 0;
}
void WizardDialog::ImplPosCtrls()
{
@@ -357,8 +379,9 @@ WizardDialog::WizardDialog( Window* pParent, const ResId& rResId ) :
WizardDialog::~WizardDialog()
{
if ( mpFixedLine )
delete mpFixedLine;
maWizardLayoutTimer.Stop();
delete mpFixedLine;
// Remove all buttons
while ( mpFirstBtn )