office-gobmx/sd/source/ui/inc/ToolBarManager.hxx

299 lines
12 KiB
C++

/*************************************************************************
*
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
*
* Copyright 2000, 2010 Oracle and/or its affiliates.
*
* OpenOffice.org - a multi-platform office productivity suite
*
* This file is part of OpenOffice.org.
*
* OpenOffice.org is free software: you can redistribute it and/or modify
* it under the terms of the GNU Lesser General Public License version 3
* only, as published by the Free Software Foundation.
*
* OpenOffice.org is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU Lesser General Public License version 3 for more details
* (a copy is included in the LICENSE file that accompanied this code).
*
* You should have received a copy of the GNU Lesser General Public License
* version 3 along with OpenOffice.org. If not, see
* <http://www.openoffice.org/license.html>
* for a copy of the LGPLv3 License.
*
************************************************************************/
#ifndef SD_TOOL_BAR_MANAGER_HXX
#define SD_TOOL_BAR_MANAGER_HXX
#include "ViewShell.hxx"
#include "ShellFactory.hxx"
#include <rtl/ustring.hxx>
#include <com/sun/star/frame/XFrame.hpp>
#include <sal/types.h>
#include <boost/scoped_ptr.hpp>
#include <boost/shared_ptr.hpp>
#include <boost/enable_shared_from_this.hpp>
class SdrView;
namespace sd { namespace tools {
class EventMultiplexer;
} }
namespace sd {
class ViewShellBase;
class ViewShellManager;
/** Manage the set of visible tool bars (and object bars). Usually they
belong to the current view in the center pane.
Tool bars are managed in groups. Each group can be set, reset, or
modified independently of the others. This allows for instance to
replace the toolbars associated with the current function independently
from those assoicated with the main view.
The ToolBarManager has two high level methods which contain the
knowledge about which tool bars to show in a specific context.
When the view in the center pane changes then MainViewShellChanged()
sets up the tool bars for the new view. On changes of the selection the
SelectionHasChanged() method shows the tool bars for the new context.
The update of the actually visible tool bars to the set currently
required by the main view shell and its functions is divided into two
parts, PreUpdate() and PostUpdate(). This are to be called before
respectively after the update of the view shell stack. The reason for
this is to save time by not updating tool bars that will not be visible
in a short time on a view shell switch.
*/
class ToolBarManager
: public ::boost::enable_shared_from_this<ToolBarManager>
{
public:
/** Use this method instead of the constructor to create new objects of
this class.
*/
static ::boost::shared_ptr<ToolBarManager> Create (
ViewShellBase& rBase,
const ::boost::shared_ptr<tools::EventMultiplexer>& rpMultiplexer,
const ::boost::shared_ptr<ViewShellManager>& rpViewShellManager);
~ToolBarManager (void);
/** Call this method prior to the destructor to prevent the
ToolBarManager from accessing the ViewShellManager or the
XLayoutManager when those are possibly not well and alive anymore
(like during the destruction of the ViewShellBase.)
*/
void Shutdown (void);
/** When the view in the center pane changes then this method sets up
the initial set of tool bars for the new view.
The ToolBarManager listenes for view switching itself and then calls
MainViewShellChanged(). Calling this method from the outside should
not be necessary.
@param nShellType
The type of the new main view shell.
*/
void MainViewShellChanged (ViewShell::ShellType nShellType);
void MainViewShellChanged (const ViewShell& rMainViewShell);
/** Call this method when the selection has changed to update the more
temporary tool bars (those in the TBG_FUNCTION group.)
*/
void SelectionHasChanged (
const ViewShell& rViewShell,
const SdrView& rView);
/** The set of tool bars that are handled by this manager class.
*/
const static ::rtl::OUString msToolBar; // RID_DRAW_TOOLBOX, 23011
// RID_GRAPHIC_TOOLBOX, 23025
const static ::rtl::OUString msOptionsToolBar; // RID_DRAW_OPTIONS_TOOLBOX, 23020
// RID_GRAPHIC_OPTIONS_TOOLBOX, 23026
const static ::rtl::OUString msCommonTaskToolBar; // RID_DRAW_COMMONTASK_TOOLBOX, 23021
const static ::rtl::OUString msViewerToolBar; // RID_DRAW_VIEWER_TOOLBOX, 23023
// RID_GRAPHIC_VIEWER_TOOLBOX, 23024
const static ::rtl::OUString msSlideSorterToolBar; // RID_SLIDE_TOOLBOX, 23012
const static ::rtl::OUString msSlideSorterObjectBar; // RID_SLIDE_OBJ_TOOLBOX, 23014
const static ::rtl::OUString msOutlineToolBar; // RID_OUTLINE_TOOLBOX, 23017
const static ::rtl::OUString msMasterViewToolBar; // SID_MASTERPAGE, 27053
const static ::rtl::OUString msDrawingObjectToolBar; // RID_DRAW_OBJ_TOOLBOX, 23013
const static ::rtl::OUString msGluePointsToolBar; // RID_GLUEPOINTS_TOOLBOX, 23019
const static ::rtl::OUString msTextObjectBar; // RID_DRAW_TEXT_TOOLBOX, 23016
// RID_GRAPHIC_TEXT_TOOLBOX, 23028
const static ::rtl::OUString msBezierObjectBar; // RID_BEZIER_TOOLBOX, 23015
const static ::rtl::OUString msGraphicObjectBar; // RID_DRAW_GRAF_TOOLBOX, 23030
const static ::rtl::OUString msMediaObjectBar; // RID_DRAW_MEDIA_TOOLBOX, 23031
const static ::rtl::OUString msTableObjectBar; // RID_DRAW_TABLE_TOOLBOX
/** The set of tool bar groups.
*/
enum ToolBarGroup {
TBG__FIRST,
TBG_PERMANENT = TBG__FIRST,
TBG_FUNCTION,
TBG_MASTER_MODE,
TBG__LAST = TBG_MASTER_MODE
};
/** Only after calls with bValid=<TRUE/> may the tool bar manager use
the frame::XLayoutManager to change the visible tool bars. Call
this method when the controller is attached to or detachted from the
frame. When called with <FALSE/> then ResetAllToolBars() is
executed.
*/
void SetValid (bool bValid);
/** Reset the set of visible object bars in the specified group. Tool
bars in other groups are not affected.
@param rParentShell
When this shell is not the main view then the method returns
immediately.
@param eGroup
Only the tool bars in this group are rest.
*/
void ResetToolBars (ToolBarGroup eGroup);
/** Reset all tool bars, regardless of the group they belong to.
@param rParentShell
When this shell is not the main view then the method returns
immediately.
*/
void ResetAllToolBars (void);
/** Add the tool bar with the given name to the specified group of tool
bars.
@param rParentShell
When this shell is not the main view then the method returns
immediately.
@param eGroup
The new tool bar is added to this group.
@param rsToolBarName
The base name of the tool bar. A proper prefix (like
private:resource/toolbar/) is added. The name may be one of the
ones defined above. Other names are allowed as well.
*/
void AddToolBar (
ToolBarGroup eGroup,
const ::rtl::OUString& rsToolBarName);
/** Add the tool bar shell to the shell stack. This method basically
forwards the call to the ViewShellManager.
For some tool bar shells additional tool bars are made visible.
@param rParentShell
When this shell is not the main view then the method returns
immediately.
@param eGroup
The group is used for the actual tool bars.
@param nToolBarId
Id of the tool bar shell.
*/
void AddToolBarShell (
ToolBarGroup eGroup,
ShellId nToolBarId);
/** Remove the tool bar with the given name from the specified group.
If the tool bar is not visible then nothing happens.
If the tool bar is a member of another group then nothing happens
either.
*/
void RemoveToolBar (
ToolBarGroup eGroup,
const ::rtl::OUString& rsToolBarName);
void RemoveToolBarShell (
ToolBarGroup eGroup,
ShellId nToolBarId);
/** This is basically a shortcut for ResetToolBars(),AddToolBar(). The
main difference is, that all sub shells of the specified parent
shell are deactivated as well.
@param rParentShell
When this shell is not the main view then the method returns
immediately.
@param eGroup
The new tool bar is added to this group.
@param rsToolBarName
The base name of the tool bar. A proper prefix (like
private:resource/toolbar/) is added. The name may be one of the
ones defined above. Other names are allowed as well.
*/
void SetToolBar (
ToolBarGroup eGroup,
const ::rtl::OUString& rsToolBarName);
/** This is basically a shortcut for ResetToolBars(),AddToolBar(). The
main difference is, that all sub shells of the specified parent
shell are deactivated as well.
@param rParentShell
When this shell is not the main view then the method returns
immediately.
@param rParentShell
When this shell is not the main view then the method returns
immediately.
@param eGroup
The group is currently not used.
@param nToolBarId
Id of the tool bar shell.
*/
void SetToolBarShell (
ToolBarGroup eGroup,
ShellId nToolBarId);
void PreUpdate (void);
/** Request an update of the active tool bars. The update is made
asynchronously.
*/
void RequestUpdate (void);
/** This is a hint for the ToolBarManager to improve the performance
when it updates its tool bars when its own lock is released. Taking
control of the release of the update lock of the ViewShellManager
avoids some shell stack modifications and tool bar updates.
*/
void LockViewShellManager (void);
/** Use this class to prevent the visible tool bars from being updated
(and thus causing repaints and GUI rearrangements) when several tool
bar operations are made in a row.
*/
class UpdateLock { public:
UpdateLock(const ::boost::shared_ptr<ToolBarManager>& rpManager)
: mpManager(rpManager) { mpManager->LockUpdate(); }
~UpdateLock(void) { mpManager->UnlockUpdate(); }
private:
::boost::shared_ptr<ToolBarManager> mpManager;
};
friend class UpdateLock;
/** Return whether updates of tool bars are locked.
*/
bool IsUpdateLocked (void) const;
void ToolBarsDestroyed(void);
private:
class Implementation;
::boost::scoped_ptr<Implementation> mpImpl;
/** The ViewShellBase is used to get the XLayoutManager and to determine
the plug in mode.
*/
ToolBarManager (void);
void LockUpdate (void);
void UnlockUpdate (void);
};
} // end of namespace sd
#endif