summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--include/vcl/roadmapwizard.hxx410
-rw-r--r--include/vcl/wizdlg.hxx521
-rw-r--r--solenv/clang-format/blacklist1
-rw-r--r--svtools/source/uno/wizard/wizardshell.hxx2
-rw-r--r--vcl/source/app/salvtables.cxx2
-rw-r--r--vcl/source/control/roadmapwizard.cxx2
-rw-r--r--vcl/source/control/wizardmachine.cxx2
-rw-r--r--vcl/source/window/builder.cxx2
8 files changed, 415 insertions, 527 deletions
diff --git a/include/vcl/roadmapwizard.hxx b/include/vcl/roadmapwizard.hxx
index bae94ee05c1a..a720cce8b684 100644
--- a/include/vcl/roadmapwizard.hxx
+++ b/include/vcl/roadmapwizard.hxx
@@ -27,16 +27,13 @@
namespace vcl
{
struct RoadmapWizardImpl;
- class RoadmapWizard;
namespace RoadmapWizardTypes
{
typedef sal_Int16 PathId;
typedef ::std::vector< WizardTypes::WizardState > WizardPath;
- typedef VclPtr<TabPage> (* RoadmapPageFactory)( RoadmapWizard& );
};
-
//= RoadmapWizard
/** is - no, not a wizard for a roadmap, but the base class for wizards
@@ -58,392 +55,6 @@ namespace vcl
<code>n2</code>, which share at least the first <code>k</code> states (where <code>k</code>
is at least 1), and an arbitrary number of other states.
*/
- class VCL_DLLPUBLIC RoadmapWizard : public ModalDialog
- {
- private:
- Idle maWizardLayoutIdle;
- Size maPageSize;
- ImplWizPageData* mpFirstPage;
- ImplWizButtonData* mpFirstBtn;
- VclPtr<TabPage> mpCurTabPage;
- VclPtr<PushButton> mpPrevBtn;
- VclPtr<PushButton> mpNextBtn;
- VclPtr<vcl::Window> mpViewWindow;
- sal_uInt16 mnCurLevel;
- WindowAlign meViewAlign;
- Link<RoadmapWizard*,void> maActivateHdl;
- sal_Int16 mnLeftAlignCount;
- bool mbEmptyViewMargin;
-
- DECL_DLLPRIVATE_LINK( ImplHandleWizardLayoutTimerHdl, Timer*, void );
-
- // IMPORTANT:
- // traveling pages should not be done by calling these base class member, some mechanisms of this class
- // here (e.g. committing page data) depend on having full control over page traveling.
- // So use the travelXXX methods if you need to travel
-
- protected:
- long LogicalCoordinateToPixel(int iCoordinate);
- /**sets the number of buttons which should be left-aligned. Normally, buttons are right-aligned.
-
- only to be used during construction, before any layouting happened
- */
- void SetLeftAlignedButtonCount( sal_Int16 _nCount );
- /** declares the view area to have an empty margin
-
- Normally, the view area has a certain margin to the top/left/bottom/right of the
- dialog. By calling this method, you can reduce this margin to 0.
- */
- void SetEmptyViewMargin();
-
- void CalcAndSetSize();
-
- public:
- VclPtr<OKButton> m_pFinish;
- VclPtr<CancelButton> m_pCancel;
- VclPtr<PushButton> m_pNextPage;
- VclPtr<PushButton> m_pPrevPage;
- VclPtr<HelpButton> m_pHelp;
-
- private:
- std::unique_ptr<WizardMachineImplData> m_xWizardImpl;
- // hold members in this structure to allow keeping compatible when members are added
- std::unique_ptr<RoadmapWizardImpl> m_xRoadmapImpl;
-
- public:
- RoadmapWizard(vcl::Window* pParent);
- virtual ~RoadmapWizard( ) override;
- virtual void dispose() override;
-
- virtual void Resize() override;
- virtual void StateChanged( StateChangedType nStateChange ) override;
- virtual bool EventNotify( NotifyEvent& rNEvt ) override;
-
- virtual void ActivatePage();
- virtual bool DeactivatePage();
-
- virtual void queue_resize(StateChangedType eReason = StateChangedType::Layout) override;
-
- bool ShowPrevPage();
- bool ShowNextPage();
- bool ShowPage( sal_uInt16 nLevel );
- bool Finish( long nResult = 0 );
- sal_uInt16 GetCurLevel() const { return mnCurLevel; }
-
- void AddPage( TabPage* pPage );
- void RemovePage( TabPage* pPage );
- void SetPage( sal_uInt16 nLevel, TabPage* pPage );
- TabPage* GetPage( sal_uInt16 nLevel ) const;
-
- void AddButton( Button* pButton, long nOffset = 0 );
- void RemoveButton( Button* pButton );
-
- void SetPrevButton( PushButton* pButton ) { mpPrevBtn = pButton; }
- void SetNextButton( PushButton* pButton ) { mpNextBtn = pButton; }
-
- void SetViewWindow( vcl::Window* pWindow ) { mpViewWindow = pWindow; }
- void SetViewAlign( WindowAlign eAlign ) { meViewAlign = eAlign; }
-
- void SetPageSizePixel( const Size& rSize ) { maPageSize = rSize; }
- const Size& GetPageSizePixel() const { return maPageSize; }
-
- void SetActivatePageHdl( const Link<RoadmapWizard*,void>& rLink ) { maActivateHdl = rLink; }
-
- /// enable (or disable) buttons
- void enableButtons(WizardButtonFlags _nWizardButtonFlags, bool _bEnable);
- /// set the default style for a button
- void defaultButton(WizardButtonFlags _nWizardButtonFlags);
- /// set the default style for a button
- void defaultButton(PushButton* _pNewDefButton);
-
- /// set the base of the title to use - the title of the current page is appended
- void setTitleBase(const OUString& _rTitleBase);
-
- /// determines whether there is a next state to which we can advance
- virtual bool canAdvance() const;
-
- /** updates the user interface which deals with traveling in the wizard
-
- The default implementation simply checks whether both the current page and the wizard
- itself allow to advance to the next state (<code>canAdvance</code>), and enables the "Next"
- button if and only if this is the case.
- */
- virtual void updateTravelUI();
-
- void SetRoadmapHelpId( const OString& _rId );
-
- void SetRoadmapInteractive( bool _bInteractive );
-
- void InsertRoadmapItem(int nIndex, const OUString& rLabel, int nId, bool bEnabled);
- void DeleteRoadmapItems();
- int GetCurrentRoadmapItemID() const;
- void SelectRoadmapItemByID(int nId);
- void SetItemSelectHdl( const Link<LinkParamNone*,void>& _rHdl );
- void ShowRoadmap(bool bShow);
-
- // returns whether a given state is enabled
- bool isStateEnabled( WizardTypes::WizardState _nState ) const;
-
- protected:
-
- /// to override to create new pages
- virtual VclPtr<TabPage> createPage(WizardTypes::WizardState nState);
-
- /// will be called when a new page is about to be displayed
- virtual void enterState(WizardTypes::WizardState _nState);
-
- /** will be called when the current state is about to be left for the given reason
-
- The base implementation in this class will simply call <member>OWizardPage::commitPage</member>
- for the current page, and return whatever this call returns.
-
- @param _eReason
- The reason why the state is to be left.
- @return
- <TRUE/> if and only if the page is allowed to be left
- */
- virtual bool prepareLeaveCurrentState( WizardTypes::CommitPageReason eReason );
-
- /** will be called when the given state is left
-
- This is the very last possibility for derived classes to veto the deactivation
- of a page.
-
- @todo Normally, we would not need the return value here - derived classes now have
- the possibility to veto page deactivations in <member>prepareLeaveCurrentState</member>. However,
- changing this return type is too incompatible at the moment ...
-
- @return
- <TRUE/> if and only if the page is allowed to be left
- */
- virtual bool leaveState(WizardTypes::WizardState _nState);
-
- /** determine the next state to travel from the given one
-
- This method ensures that traveling happens along the active path.
-
- Return WZS_INVALID_STATE to prevent traveling.
-
- @see activatePath
- */
- virtual WizardTypes::WizardState determineNextState(WizardTypes::WizardState nCurrentState) const;
-
- /** called when the finish button is pressed
- <p>By default, only the base class' Finish method (which is not virtual) is called</p>
- */
- virtual bool onFinish();
-
- /// travel to the next state
- bool travelNext();
-
- /// travel to the previous state
- bool travelPrevious();
-
- /** enables the automatic enabled/disabled state of the "Next" button
-
- If this is <TRUE/>, then upon entering a new state, the "Next" button will automatically be
- enabled if and only if determineNextState does not return WZS_INVALID_STATE.
- */
- void enableAutomaticNextButtonState();
- bool isAutomaticNextButtonStateEnabled() const;
-
- /** removes a page from the history. Should be called when the page is being disabled
- */
- void removePageFromHistory(WizardTypes::WizardState nToRemove);
-
- /** skip a state
-
- The method behaves as if from the current state, <arg>_nSteps</arg> <method>travelNext</method>s were
- called, but without actually creating or displaying the \EDntermediate pages. Only the
- (<arg>_nSteps</arg> + 1)th page is created.
-
- The skipped states appear in the state history, so <method>travelPrevious</method> will make use of them.
-
- A very essential precondition for using this method is that your <method>determineNextState</method>
- method is able to determine the next state without actually having the page of the current state.
-
- @see skipUntil
- @see skipBackwardUntil
- */
- void skip();
-
- /** skips one or more states, until a given state is reached
-
- The method behaves as if from the current state, <method>travelNext</method>s were called
- successively, until <arg>_nTargetState</arg> is reached, but without actually creating or
- displaying the \EDntermediate pages.
-
- The skipped states appear in the state history, so <method>travelPrevious</method> will make use of them.
-
- @return
- <TRUE/> if and only if traveling was successful
-
- @see skip
- @see skipBackwardUntil
- */
- bool skipUntil(WizardTypes::WizardState nTargetState);
-
- /** moves back one or more states, until a given state is reached
-
- This method allows traveling backwards more than one state without actually showing the intermediate
- states.
-
- For instance, if you want to travel two steps backward at a time, you could used
- two travelPrevious calls, but this would <em>show</em> both pages, which is not necessary,
- since you're interested in the target page only. Using <member>skipBackwardUntil</member> relieves
- you of this.
-
- @return
- <TRUE/> if and only if traveling was successful
-
- @see skipUntil
- @see skip
- */
- bool skipBackwardUntil(WizardTypes::WizardState nTargetState);
-
- /** returns the current state of the machine
-
- Vulgo, this is the identifier of the current tab page :)
- */
- WizardTypes::WizardState getCurrentState() const { return GetCurLevel(); }
-
- virtual IWizardPageController*
- getPageController( TabPage* _pCurrentPage ) const;
-
- /** retrieves a copy of the state history, i.e. all states we already visited
- */
- void getStateHistory(std::vector<WizardTypes::WizardState>& out_rHistory);
-
- /** declares a valid path in the wizard
-
- The very first path which is declared is automatically activated.
-
- Note that all paths which are declared must have the very first state in
- common. Also note that due to a restriction of the very base class (WizardDialog),
- this common first state must be 0.
-
- You cannot declare new paths once the wizard started, so it's recommended that
- you do all declarations within your derivee's constructor.
-
- @see activatePath
-
- @param _nId
- the unique id you wish to give this path. This id can later on be used
- to refer to the path which you just declared
- */
- void declarePath( RoadmapWizardTypes::PathId _nPathId, const RoadmapWizardTypes::WizardPath& _lWizardStates);
-
- /** activates a path which has previously been declared with <member>declarePath</member>
-
- You can only activate paths which share the first <code>k</code> states with the path
- which is previously active (if any), where <code>k</code> is the index of the
- current state within the current path.
-
- <example>
- Say you have paths, <code>(0,1,2,5)</code> and <code>(0,1,4,5)</code>. This means that after
- step <code>1</code>, you either continue with state <code>2</code> or state <code>4</code>,
- and after this, you finish in state <code>5</code>.<br/>
- Now if the first path is active, and your current state is <code>1</code>, then you can
- easily switch to the second path, since both paths start with <code>(0,1)</code>.<br/>
- However, if your current state is <code>2</code>, then you can not switch to the second
- path anymore.
- </example>
-
- @param _nPathId
- the id of the path. The path must have been declared (under this id) with
- <member>declarePath</member> before it can be activated.
-
- @param _bDecideForIt
- If <TRUE/>, the path will be completely activated, even if it is a conflicting path
- (i.e. there is another path which shares the first <code>k</code> states with
- the to-be-activated path.)<br/>
- If <FALSE/>, then the new path is checked for conflicts with other paths. If such
- conflicts exists, the path is not completely activated, but only up to the point
- where it does <em>not</em> conflict.<br/>
- With the paths in the example above, if you activate the second path (when both are
- already declared), then only steps <code>0</code> and <code>1</code> are activated,
- since they are common to both paths.
- */
- void activatePath( RoadmapWizardTypes::PathId _nPathId, bool _bDecideForIt = false );
-
- /** en- or disables a state
-
- In the wizard's roadmap, states to travel to can be freely chosen. To prevent
- users from selecting a state which is currently not available, you can declare this
- state as being disabled.
-
- A situation where you need this may be when you have a checkbox which, when checked
- by the user, enables a page with additional settings. As long as this checkbox is
- not checked, the respective state would be disabled.
-
- Note that in theory, you can declare multiple paths, instead of disabling states.
- For instance, if you have a path where one state can be potentially disabled, then
- you could declare a second path, which does not contain this state. However, the
- disadvantage is that then, not the complete path would be visible in the roadmap,
- but only all steps up to the point where the both paths diverge.<br/>
- Another disadvantage is that the number of needed paths grows exponentially with
- the number of states which can be potentially disabled.
-
- @see declarePath
- */
- void enableState(WizardTypes::WizardState nState, bool _bEnable = true);
-
- /** returns true if and only if the given state is known in at least one declared path
- */
- bool knowsState(WizardTypes::WizardState nState) const;
-
- /** returns a human readable name for a given state
-
- There is a default implementation for this method, which returns the display name
- as given in a call to describeState. If there is no description for the given state,
- this is worth an assertion in a non-product build, and then an empty string is
- returned.
- */
- virtual OUString getStateDisplayName(WizardTypes::WizardState nState) const;
-
- private:
- DECL_DLLPRIVATE_LINK( OnRoadmapItemSelected, LinkParamNone*, void );
-
- /** updates the roadmap control to show the given path, as far as possible
- (modulo conflicts with other paths)
- */
- VCL_DLLPRIVATE void implUpdateRoadmap( );
-
- VCL_DLLPRIVATE void impl_construct();
-
- public:
- class AccessGuard
- {
- friend class RoadmapWizardTravelSuspension;
- private:
- AccessGuard() { }
- };
-
- void suspendTraveling( AccessGuard );
- void resumeTraveling( AccessGuard );
- bool isTravelingSuspended() const;
-
- protected:
- TabPage* GetOrCreatePage(const WizardTypes::WizardState i_nState);
-
- private:
- VCL_DLLPRIVATE void ImplInitData();
- VCL_DLLPRIVATE void ImplCalcSize( Size& rSize );
- VCL_DLLPRIVATE void ImplPosCtrls();
- VCL_DLLPRIVATE void ImplPosTabPage();
- VCL_DLLPRIVATE void ImplShowTabPage( TabPage* pPage );
- VCL_DLLPRIVATE TabPage* ImplGetPage( sal_uInt16 nLevel ) const;
-
-
- DECL_DLLPRIVATE_LINK(OnNextPage, Button*, void);
- DECL_DLLPRIVATE_LINK(OnPrevPage, Button*, void);
- DECL_DLLPRIVATE_LINK(OnFinish, Button*, void);
-
- VCL_DLLPRIVATE void implResetDefault(vcl::Window const * _pWindow);
- VCL_DLLPRIVATE void implUpdateTitle();
- VCL_DLLPRIVATE void implConstruct( const WizardButtonFlags _nButtonFlags );
- };
-
class VCL_DLLPUBLIC RoadmapWizardMachine : public vcl::WizardMachine
{
private:
@@ -566,27 +177,6 @@ namespace vcl
*/
VCL_DLLPRIVATE void implUpdateRoadmap( );
};
-
- /// helper class to temporarily suspend any traveling in the wizard
- class RoadmapWizardTravelSuspension
- {
- public:
- RoadmapWizardTravelSuspension(RoadmapWizard& rWizard)
- : m_pOWizard(&rWizard)
- {
- m_pOWizard->suspendTraveling(RoadmapWizard::AccessGuard());
- }
-
- ~RoadmapWizardTravelSuspension()
- {
- if (m_pOWizard)
- m_pOWizard->resumeTraveling(RoadmapWizard::AccessGuard());
- }
-
- private:
- VclPtr<RoadmapWizard> m_pOWizard;
- };
-
} // namespace vcl
diff --git a/include/vcl/wizdlg.hxx b/include/vcl/wizdlg.hxx
index 3e87bff37c5b..d2c4520a0191 100644
--- a/include/vcl/wizdlg.hxx
+++ b/include/vcl/wizdlg.hxx
@@ -20,151 +20,448 @@
#ifndef INCLUDED_VCL_WIZDLG_HXX
#define INCLUDED_VCL_WIZDLG_HXX
+#include <memory>
#include <vcl/dllapi.h>
+#include <vcl/roadmapwizard.hxx>
-class TabPage;
+namespace vcl
+{
+ struct RoadmapWizardImpl;
+ class RoadmapWizard;
-/*
+ namespace RoadmapWizardTypes
+ {
+ typedef VclPtr<TabPage> (* RoadmapPageFactory)( RoadmapWizard& );
+ };
-Description
-==========
+ //= RoadmapWizard
-class WizardDialog
+ /** wizard for a roadmap
-This class is the base for WizardDialog. The basic functionality is to
-order the Controls. Besides it's a helper method for switching the TabPages.
-The dialog orders the Controls when their size changed.
+ The basic new concept introduced is a <em>path</em>:<br/>
+ A <em>path</em> is a sequence of states, which are to be executed in a linear order.
+ Elements in the path can be skipped, depending on choices the user makes.
---------------------------------------------------------------------------
+ In the most simple wizards, you will have only one path consisting of <code>n</code> elements,
+ which are to be visited successively.
-SetPageSizePixel() sets the biggest TabPage size. When the dialog
-should be displayed, first the dialog size is calculated and set.
-If there is no size set with SetPageSizePixel(), max size of the
-current TabPage is set as default.
+ In a slightly more complex wizard, you will have one linear path, were certain
+ steps might be skipped due to user input. For instance, the user may decide to not specify
+ certain aspects of the to-be-created object (e.g. by unchecking a check box),
+ and the wizard then will simply disable the step which corresponds to this step.
-ShowPrevPage()/ShowNextPage() shows the previous/next TabPage.
-First the Deactivate-Handler is called by dialog and if the return
-value is sal_True the Active-Handler is called by dialog and the
-corresponding TabPage is showed. Finnish() can only be called
-if the Finnish-Button is activated. Then the Deactivate-Page-Handler
-is called by dialog and by the current TabPage. Now the dialog ends
-(Close() or EndDialog()).
+ In a yet more advanced wizards, you will have several paths of length <code>n1</code> and
+ <code>n2</code>, which share at least the first <code>k</code> states (where <code>k</code>
+ is at least 1), and an arbitrary number of other states.
+ */
+ class VCL_DLLPUBLIC RoadmapWizard : public ModalDialog
+ {
+ private:
+ Idle maWizardLayoutIdle;
+ Size maPageSize;
+ ImplWizPageData* mpFirstPage;
+ ImplWizButtonData* mpFirstBtn;
+ VclPtr<TabPage> mpCurTabPage;
+ VclPtr<PushButton> mpPrevBtn;
+ VclPtr<PushButton> mpNextBtn;
+ VclPtr<vcl::Window> mpViewWindow;
+ sal_uInt16 mnCurLevel;
+ WindowAlign meViewAlign;
+ Link<RoadmapWizard*,void> maActivateHdl;
+ sal_Int16 mnLeftAlignCount;
+ bool mbEmptyViewMargin;
+
+ DECL_DLLPRIVATE_LINK( ImplHandleWizardLayoutTimerHdl, Timer*, void );
+
+ // IMPORTANT:
+ // traveling pages should not be done by calling these base class member, some mechanisms of this class
+ // here (e.g. committing page data) depend on having full control over page traveling.
+ // So use the travelXXX methods if you need to travel
+
+ protected:
+ long LogicalCoordinateToPixel(int iCoordinate);
+ /**sets the number of buttons which should be left-aligned. Normally, buttons are right-aligned.
+
+ only to be used during construction, before any layouting happened
+ */
+ void SetLeftAlignedButtonCount( sal_Int16 _nCount );
+ /** declares the view area to have an empty margin
+
+ Normally, the view area has a certain margin to the top/left/bottom/right of the
+ dialog. By calling this method, you can reduce this margin to 0.
+ */
+ void SetEmptyViewMargin();
+
+ void CalcAndSetSize();
-AddPage()/RemovePage()/SetPage() TabPages are made known to the Wizard.
-The TabPage of the current Level is always shown and if no TabPage is
-available at that level then the TabPage of the highest level is used.
-Because of that the current TabPage always can be swapped under the
-condition that in the Activate-Handler the current TabPage cannot be
-destroyed.
+ public:
+ VclPtr<OKButton> m_pFinish;
+ VclPtr<CancelButton> m_pCancel;
+ VclPtr<PushButton> m_pNextPage;
+ VclPtr<PushButton> m_pPrevPage;
+ VclPtr<HelpButton> m_pHelp;
+
+ private:
+ std::unique_ptr<WizardMachineImplData> m_xWizardImpl;
+ // hold members in this structure to allow keeping compatible when members are added
+ std::unique_ptr<RoadmapWizardImpl> m_xRoadmapImpl;
-SetPrevButton()/SetNextButton() add the Prev-Button and the
-Next-Button to the dialog. In that case the dialog emits the Click-Handler
-of the assigned Button when Ctrl+Tab, Shift-Ctrl-Tab are pressed. The Buttons
-are not disabled by the WizardDialog and such an action must be
-programmed by the user of this Dialog.
+ public:
+ RoadmapWizard(vcl::Window* pParent);
+ virtual ~RoadmapWizard( ) override;
+ virtual void dispose() override;
-AddButton()/RemoveButton() can add Buttons to the Wizard and they're shown
-the order of adding them. The Buttons are ordered independent of their
-visibility state, so that also later a Button can be shown/hidden.
-The Offset is in Pixels and always refers to the following Button. So that
-the distance between the Buttons is the same for all dialogs, there is the
-macro WIZARDDIALOG_BUTTON_STDOFFSET_X to be used as the default offset.
+ virtual void Resize() override;
+ virtual void StateChanged( StateChangedType nStateChange ) override;
+ virtual bool EventNotify( NotifyEvent& rNEvt ) override;
-With SetViewWindow() and SetViewAlign() a Control can be set, which can
-be used as Preview-Window or for displaying of pretty Bitmaps.
+ virtual void ActivatePage();
+ virtual bool DeactivatePage();
---------------------------------------------------------------------------
+ virtual void queue_resize(StateChangedType eReason = StateChangedType::Layout) override;
-The ActivatePage()-Handler is called, if a new TabPage is shown. In that
-handler a new TabPage can be created if it was not created before; the
-handler can be set as a Link. GetCurLevel() returns the current level and
-Level 0 is the first page.
+ bool ShowPrevPage();
+ bool ShowNextPage();
+ bool ShowPage( sal_uInt16 nLevel );
+ bool Finish( long nResult = 0 );
+ sal_uInt16 GetCurLevel() const { return mnCurLevel; }
-The DeactivatePage()-Handler is called if a new TabPage should be shown.
-In that handler has an optional error check and returns sal_False, if the
-switch should not be done. Also the Handler can be set as a Link. The
-default implementation calls the Link and returns the Links value or returns
-sal_True if no Link is set.
+ void AddPage( TabPage* pPage );
+ void RemovePage( TabPage* pPage );
+ void SetPage( sal_uInt16 nLevel, TabPage* pPage );
+ TabPage* GetPage( sal_uInt16 nLevel ) const;
---------------------------------------------------------------------------
+ void AddButton( Button* pButton, long nOffset = 0 );
+ void RemoveButton( Button* pButton );
-Example:
+ void SetPrevButton( PushButton* pButton ) { mpPrevBtn = pButton; }
+ void SetNextButton( PushButton* pButton ) { mpNextBtn = pButton; }
-MyWizardDlg-Ctor
-----------------
+ void SetViewWindow( vcl::Window* pWindow ) { mpViewWindow = pWindow; }
+ void SetViewAlign( WindowAlign eAlign ) { meViewAlign = eAlign; }
-// add buttons
-AddButton( &maHelpBtn, WIZARDDIALOG_BUTTON_STDOFFSET_X );
-AddButton( &maCancelBtn, WIZARDDIALOG_BUTTON_STDOFFSET_X );
-AddButton( &maPrevBtn );
-AddButton( &maNextBtn, WIZARDDIALOG_BUTTON_STDOFFSET_X );
-AddButton( &maFinnishBtn );
-SetPrevButton( &maPrevBtn );
-SetNextButton( &maNextBtn );
+ void SetPageSizePixel( const Size& rSize ) { maPageSize = rSize; }
+ const Size& GetPageSizePixel() const { return maPageSize; }
-// SetHandler
-maPrevBtn.SetClickHdl( LINK( this, MyWizardDlg, ImplPrevHdl ) );
-maNextBtn.SetClickHdl( LINK( this, MyWizardDlg, ImplNextHdl ) );
+ void SetActivatePageHdl( const Link<RoadmapWizard*,void>& rLink ) { maActivateHdl = rLink; }
-// Set PreviewWindow
-SetViewWindow( &maPreview );
+ /// enable (or disable) buttons
+ void enableButtons(WizardButtonFlags _nWizardButtonFlags, bool _bEnable);
+ /// set the default style for a button
+ void defaultButton(WizardButtonFlags _nWizardButtonFlags);
+ /// set the default style for a button
+ void defaultButton(PushButton* _pNewDefButton);
-// Call ActivatePage, because the first page should be created an activated
-ActivatePage();
+ /// set the base of the title to use - the title of the current page is appended
+ void setTitleBase(const OUString& _rTitleBase);
+ /// determines whether there is a next state to which we can advance
+ virtual bool canAdvance() const;
-MyWizardDlg-ActivatePage-Handler
---------------------------------
+ /** updates the user interface which deals with traveling in the wizard
-void MyWizardDlg::ActivatePage()
-{
- WizardDialog::ActivatePage();
+ The default implementation simply checks whether both the current page and the wizard
+ itself allow to advance to the next state (<code>canAdvance</code>), and enables the "Next"
+ button if and only if this is the case.
+ */
+ virtual void updateTravelUI();
- // Test, if Page is created already
- if ( !GetPage( GetCurLevel() ) )
- {
- // Create and add new page
- TabPage* pNewTabPage;
- switch ( GetCurLevel() )
- {
- case 0:
- pNewTabPage = CreateIntroPage();
- break;
- case 1:
- pNewTabPage = CreateSecondPage();
- break;
- case 2:
- pNewTabPage = CreateThirdPage();
- break;
- case 3:
- pNewTabPage = CreateFinnishedPage();
- break;
+ void SetRoadmapHelpId( const OString& _rId );
- }
- AddPage( pNewTabPage );
- }
-}
+ void SetRoadmapInteractive( bool _bInteractive );
+ void InsertRoadmapItem(int nIndex, const OUString& rLabel, int nId, bool bEnabled);
+ void DeleteRoadmapItems();
+ int GetCurrentRoadmapItemID() const;
+ void SelectRoadmapItemByID(int nId);
+ void SetItemSelectHdl( const Link<LinkParamNone*,void>& _rHdl );
+ void ShowRoadmap(bool bShow);
-MyWizardDlg-Prev/Next-Handler
------------------------------
+ // returns whether a given state is enabled
+ bool isStateEnabled( WizardTypes::WizardState _nState ) const;
-IMPL_LINK( MyWizardDlg, ImplPrevHdl, PushButton*, pBtn, void )
-{
- ShowPrevPage();
- if ( !GetCurLevel() )
- pBtn->Disable();
-}
+ protected:
-IMPL_LINK( MyWizardDlg, ImplNextHdl, PushButton*, pBtn, void )
-{
- ShowNextPage();
- if ( GetCurLevel() < 3 )
- pBtn->Disable();
-}
+ /// to override to create new pages
+ virtual VclPtr<TabPage> createPage(WizardTypes::WizardState nState);
+
+ /// will be called when a new page is about to be displayed
+ virtual void enterState(WizardTypes::WizardState _nState);
+
+ /** will be called when the current state is about to be left for the given reason
+
+ The base implementation in this class will simply call <member>OWizardPage::commitPage</member>
+ for the current page, and return whatever this call returns.
+
+ @param _eReason
+ The reason why the state is to be left.
+ @return
+ <TRUE/> if and only if the page is allowed to be left
+ */
+ virtual bool prepareLeaveCurrentState( WizardTypes::CommitPageReason eReason );
+
+ /** will be called when the given state is left
+
+ This is the very last possibility for derived classes to veto the deactivation
+ of a page.
+
+ @todo Normally, we would not need the return value here - derived classes now have
+ the possibility to veto page deactivations in <member>prepareLeaveCurrentState</member>. However,
+ changing this return type is too incompatible at the moment ...
+
+ @return
+ <TRUE/> if and only if the page is allowed to be left
+ */
+ virtual bool leaveState(WizardTypes::WizardState _nState);
+
+ /** determine the next state to travel from the given one
+
+ This method ensures that traveling happens along the active path.
+
+ Return WZS_INVALID_STATE to prevent traveling.
+
+ @see activatePath
+ */
+ virtual WizardTypes::WizardState determineNextState(WizardTypes::WizardState nCurrentState) const;
+
+ /** called when the finish button is pressed
+ <p>By default, only the base class' Finish method (which is not virtual) is called</p>
+ */
+ virtual bool onFinish();
+
+ /// travel to the next state
+ bool travelNext();
+
+ /// travel to the previous state
+ bool travelPrevious();
+
+ /** enables the automatic enabled/disabled state of the "Next" button
+
+ If this is <TRUE/>, then upon entering a new state, the "Next" button will automatically be
+ enabled if and only if determineNextState does not return WZS_INVALID_STATE.
+ */
+ void enableAutomaticNextButtonState();
+ bool isAutomaticNextButtonStateEnabled() const;
+
+ /** removes a page from the history. Should be called when the page is being disabled
+ */
+ void removePageFromHistory(WizardTypes::WizardState nToRemove);
+
+ /** skip a state
+
+ The method behaves as if from the current state, <arg>_nSteps</arg> <method>travelNext</method>s were
+ called, but without actually creating or displaying the \EDntermediate pages. Only the
+ (<arg>_nSteps</arg> + 1)th page is created.
+
+ The skipped states appear in the state history, so <method>travelPrevious</method> will make use of them.
+
+ A very essential precondition for using this method is that your <method>determineNextState</method>
+ method is able to determine the next state without actually having the page of the current state.
+
+ @see skipUntil
+ @see skipBackwardUntil
+ */
+ void skip();
+
+ /** skips one or more states, until a given state is reached
+
+ The method behaves as if from the current state, <method>travelNext</method>s were called
+ successively, until <arg>_nTargetState</arg> is reached, but without actually creating or
+ displaying the \EDntermediate pages.
+
+ The skipped states appear in the state history, so <method>travelPrevious</method> will make use of them.
+
+ @return
+ <TRUE/> if and only if traveling was successful
+
+ @see skip
+ @see skipBackwardUntil
+ */
+ bool skipUntil(WizardTypes::WizardState nTargetState);
+
+ /** moves back one or more states, until a given state is reached
+
+ This method allows traveling backwards more than one state without actually showing the intermediate
+ states.
+
+ For instance, if you want to travel two steps backward at a time, you could used
+ two travelPrevious calls, but this would <em>show</em> both pages, which is not necessary,
+ since you're interested in the target page only. Using <member>skipBackwardUntil</member> relieves
+ you of this.
+
+ @return
+ <TRUE/> if and only if traveling was successful
+
+ @see skipUntil
+ @see skip
+ */
+ bool skipBackwardUntil(WizardTypes::WizardState nTargetState);
+
+ /** returns the current state of the machine
+
+ Vulgo, this is the identifier of the current tab page :)
+ */
+ WizardTypes::WizardState getCurrentState() const { return GetCurLevel(); }
+
+ virtual IWizardPageController*
+ getPageController( TabPage* _pCurrentPage ) const;
+
+ /** retrieves a copy of the state history, i.e. all states we already visited
+ */
+ void getStateHistory(std::vector<WizardTypes::WizardState>& out_rHistory);
+
+ /** declares a valid path in the wizard
+
+ The very first path which is declared is automatically activated.
+
+ Note that all paths which are declared must have the very first state in
+ common. Also note that due to a restriction of the very base class (WizardDialog),
+ this common first state must be 0.
+
+ You cannot declare new paths once the wizard started, so it's recommended that
+ you do all declarations within your derivee's constructor.
+
+ @see activatePath
+
+ @param _nId
+ the unique id you wish to give this path. This id can later on be used
+ to refer to the path which you just declared
+ */
+ void declarePath( RoadmapWizardTypes::PathId _nPathId, const RoadmapWizardTypes::WizardPath& _lWizardStates);
+
+ /** activates a path which has previously been declared with <member>declarePath</member>
+
+ You can only activate paths which share the first <code>k</code> states with the path
+ which is previously active (if any), where <code>k</code> is the index of the
+ current state within the current path.
+
+ <example>
+ Say you have paths, <code>(0,1,2,5)</code> and <code>(0,1,4,5)</code>. This means that after
+ step <code>1</code>, you either continue with state <code>2</code> or state <code>4</code>,
+ and after this, you finish in state <code>5</code>.<br/>
+ Now if the first path is active, and your current state is <code>1</code>, then you can
+ easily switch to the second path, since both paths start with <code>(0,1)</code>.<br/>
+ However, if your current state is <code>2</code>, then you can not switch to the second
+ path anymore.
+ </example>
+
+ @param _nPathId
+ the id of the path. The path must have been declared (under this id) with
+ <member>declarePath</member> before it can be activated.
+
+ @param _bDecideForIt
+ If <TRUE/>, the path will be completely activated, even if it is a conflicting path
+ (i.e. there is another path which shares the first <code>k</code> states with
+ the to-be-activated path.)<br/>
+ If <FALSE/>, then the new path is checked for conflicts with other paths. If such
+ conflicts exists, the path is not completely activated, but only up to the point
+ where it does <em>not</em> conflict.<br/>
+ With the paths in the example above, if you activate the second path (when both are
+ already declared), then only steps <code>0</code> and <code>1</code> are activated,
+ since they are common to both paths.
+ */
+ void activatePath( RoadmapWizardTypes::PathId _nPathId, bool _bDecideForIt = false );
+
+ /** en- or disables a state
+
+ In the wizard's roadmap, states to travel to can be freely chosen. To prevent
+ users from selecting a state which is currently not available, you can declare this
+ state as being disabled.
+
+ A situation where you need this may be when you have a checkbox which, when checked
+ by the user, enables a page with additional settings. As long as this checkbox is
+ not checked, the respective state would be disabled.
+
+ Note that in theory, you can declare multiple paths, instead of disabling states.
+ For instance, if you have a path where one state can be potentially disabled, then
+ you could declare a second path, which does not contain this state. However, the
+ disadvantage is that then, not the complete path would be visible in the roadmap,
+ but only all steps up to the point where the both paths diverge.<br/>
+ Another disadvantage is that the number of needed paths grows exponentially with
+ the number of states which can be potentially disabled.
+
+ @see declarePath
+ */
+ void enableState(WizardTypes::WizardState nState, bool _bEnable = true);
+
+ /** returns true if and only if the given state is known in at least one declared path
+ */
+ bool knowsState(WizardTypes::WizardState nState) const;
+
+ /** returns a human readable name for a given state
+
+ There is a default implementation for this method, which returns the display name
+ as given in a call to describeState. If there is no description for the given state,
+ this is worth an assertion in a non-product build, and then an empty string is
+ returned.
+ */
+ virtual OUString getStateDisplayName(WizardTypes::WizardState nState) const;
+
+ private:
+ DECL_DLLPRIVATE_LINK( OnRoadmapItemSelected, LinkParamNone*, void );
+
+ /** updates the roadmap control to show the given path, as far as possible
+ (modulo conflicts with other paths)
+ */
+ VCL_DLLPRIVATE void implUpdateRoadmap( );
+
+ VCL_DLLPRIVATE void impl_construct();
+
+ public:
+ class AccessGuard
+ {
+ friend class RoadmapWizardTravelSuspension;
+ private:
+ AccessGuard() { }
+ };
+
+ void suspendTraveling( AccessGuard );
+ void resumeTraveling( AccessGuard );
+ bool isTravelingSuspended() const;
+
+ protected:
+ TabPage* GetOrCreatePage(const WizardTypes::WizardState i_nState);
+
+ private:
+ VCL_DLLPRIVATE void ImplInitData();
+ VCL_DLLPRIVATE void ImplCalcSize( Size& rSize );
+ VCL_DLLPRIVATE void ImplPosCtrls();
+ VCL_DLLPRIVATE void ImplPosTabPage();
+ VCL_DLLPRIVATE void ImplShowTabPage( TabPage* pPage );
+ VCL_DLLPRIVATE TabPage* ImplGetPage( sal_uInt16 nLevel ) const;
+
+
+ DECL_DLLPRIVATE_LINK(OnNextPage, Button*, void);
+ DECL_DLLPRIVATE_LINK(OnPrevPage, Button*, void);
+ DECL_DLLPRIVATE_LINK(OnFinish, Button*, void);
+
+ VCL_DLLPRIVATE void implResetDefault(vcl::Window const * _pWindow);
+ VCL_DLLPRIVATE void implUpdateTitle();
+ VCL_DLLPRIVATE void implConstruct( const WizardButtonFlags _nButtonFlags );
+ };
+
+ /// helper class to temporarily suspend any traveling in the wizard
+ class RoadmapWizardTravelSuspension
+ {
+ public:
+ RoadmapWizardTravelSuspension(RoadmapWizard& rWizard)
+ : m_pOWizard(&rWizard)
+ {
+ m_pOWizard->suspendTraveling(RoadmapWizard::AccessGuard());
+ }
+
+ ~RoadmapWizardTravelSuspension()
+ {
+ if (m_pOWizard)
+ m_pOWizard->resumeTraveling(RoadmapWizard::AccessGuard());
+ }
+
+ private:
+ VclPtr<RoadmapWizard> m_pOWizard;
+ };
-*/
+} // namespace vcl
-#endif // INCLUDED_VCL_WIZDLG_HXX
+#endif
/* vim:set shiftwidth=4 softtabstop=4 expandtab: */
diff --git a/solenv/clang-format/blacklist b/solenv/clang-format/blacklist
index 510fdc225b1b..fcf6e3c6ed84 100644
--- a/solenv/clang-format/blacklist
+++ b/solenv/clang-format/blacklist
@@ -7946,6 +7946,7 @@ include/vcl/waitobj.hxx
include/vcl/wall.hxx
include/vcl/window.hxx
include/vcl/wizardmachine.hxx
+include/vcl/wizdlg.hxx
include/vcl/wmf.hxx
include/vcl/wmfexternal.hxx
include/vcl/wrkwin.hxx
diff --git a/svtools/source/uno/wizard/wizardshell.hxx b/svtools/source/uno/wizard/wizardshell.hxx
index 6217f5822770..f56451397d25 100644
--- a/svtools/source/uno/wizard/wizardshell.hxx
+++ b/svtools/source/uno/wizard/wizardshell.hxx
@@ -22,7 +22,7 @@
#include <com/sun/star/ui/dialogs/XWizardController.hpp>
#include <com/sun/star/ui/dialogs/XWizard.hpp>
-#include <vcl/roadmapwizard.hxx>
+#include <vcl/wizdlg.hxx>
#include <map>
#include <memory>
diff --git a/vcl/source/app/salvtables.cxx b/vcl/source/app/salvtables.cxx
index f4bc9708018b..2efef7a22f48 100644
--- a/vcl/source/app/salvtables.cxx
+++ b/vcl/source/app/salvtables.cxx
@@ -49,7 +49,7 @@
#include <vcl/menubtn.hxx>
#include <vcl/prgsbar.hxx>
#include <vcl/ptrstyle.hxx>
-#include <vcl/roadmapwizard.hxx>
+#include <vcl/wizdlg.hxx>
#include <vcl/slider.hxx>
#include <vcl/sysdata.hxx>
#include <vcl/svimpbox.hxx>
diff --git a/vcl/source/control/roadmapwizard.cxx b/vcl/source/control/roadmapwizard.cxx
index 2e66d2ed4027..94f12e0dcfdf 100644
--- a/vcl/source/control/roadmapwizard.cxx
+++ b/vcl/source/control/roadmapwizard.cxx
@@ -18,7 +18,7 @@
*/
-#include <vcl/roadmapwizard.hxx>
+#include <vcl/wizdlg.hxx>
#include <vcl/toolkit/roadmap.hxx>
#include <tools/debug.hxx>
#include <osl/diagnose.h>
diff --git a/vcl/source/control/wizardmachine.cxx b/vcl/source/control/wizardmachine.cxx
index f8f6753074cd..35a432200c2c 100644
--- a/vcl/source/control/wizardmachine.cxx
+++ b/vcl/source/control/wizardmachine.cxx
@@ -19,7 +19,7 @@
#include <vcl/event.hxx>
#include <vcl/svapp.hxx>
-#include <vcl/roadmapwizard.hxx>
+#include <vcl/wizdlg.hxx>
#include <tools/debug.hxx>
#include <tools/diagnose_ex.h>
#include <strings.hrc>
diff --git a/vcl/source/window/builder.cxx b/vcl/source/window/builder.cxx
index f27665c40be5..cc7dac554b0c 100644
--- a/vcl/source/window/builder.cxx
+++ b/vcl/source/window/builder.cxx
@@ -35,7 +35,6 @@
#include <vcl/menubtn.hxx>
#include <vcl/mnemonic.hxx>
#include <vcl/prgsbar.hxx>
-#include <vcl/roadmapwizard.hxx>
#include <vcl/scrbar.hxx>
#include <vcl/svapp.hxx>
#include <vcl/svtabbx.hxx>
@@ -49,6 +48,7 @@
#include <vcl/slider.hxx>
#include <vcl/listctrl.hxx>
#include <vcl/weld.hxx>
+#include <vcl/wizdlg.hxx>
#include <vcl/commandinfoprovider.hxx>
#include <svdata.hxx>
#include <bitmaps.hlst>