2006/04/21 10:01:33 af 1.5.116.6: #i61115# Initial revision. 2006/04/18 15:35:43 af 1.5.116.5: #i61115# Replaced SetTemplateIndexForToken with SetPreviewProviderForToken. 2006/04/12 15:18:18 af 1.5.116.4: #i61359# Fixed some compiler problems. 2006/03/24 12:13:25 af 1.5.116.3: #i61115# Update of documentation. Added event types. 2006/02/22 09:47:02 af 1.5.116.2: #i61359# Major restructuring of MasterPageContainer and MasterPagesSelector. 2006/02/17 13:25:33 af 1.5.116.1: #i61359# Major restructuring of MasterPageContainer and MasterPagesSelector.
243 lines
8.4 KiB
C++
243 lines
8.4 KiB
C++
/*************************************************************************
|
|
*
|
|
* OpenOffice.org - a multi-platform office productivity suite
|
|
*
|
|
* $RCSfile: MasterPageContainer.hxx,v $
|
|
*
|
|
* $Revision: 1.6 $
|
|
*
|
|
* last change: $Author: kz $ $Date: 2006-04-26 20:48:29 $
|
|
*
|
|
* The Contents of this file are made available subject to
|
|
* the terms of GNU Lesser General Public License Version 2.1.
|
|
*
|
|
*
|
|
* GNU Lesser General Public License Version 2.1
|
|
* =============================================
|
|
* Copyright 2005 by Sun Microsystems, Inc.
|
|
* 901 San Antonio Road, Palo Alto, CA 94303, USA
|
|
*
|
|
* This library is free software; you can redistribute it and/or
|
|
* modify it under the terms of the GNU Lesser General Public
|
|
* License version 2.1, as published by the Free Software Foundation.
|
|
*
|
|
* This library 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 for more details.
|
|
*
|
|
* You should have received a copy of the GNU Lesser General Public
|
|
* License along with this library; if not, write to the Free Software
|
|
* Foundation, Inc., 59 Temple Place, Suite 330, Boston,
|
|
* MA 02111-1307 USA
|
|
*
|
|
************************************************************************/
|
|
|
|
#ifndef SD_TOOLPANEL_CONTROLS_MASTER_PAGE_CONTAINER_HXX
|
|
#define SD_TOOLPANEL_CONTROLS_MASTER_PAGE_CONTAINER_HXX
|
|
|
|
#include "MasterPageContainerProviders.hxx"
|
|
|
|
#include <osl/mutex.hxx>
|
|
#include <tools/string.hxx>
|
|
#include <vcl/image.hxx>
|
|
#include <memory>
|
|
#include "PreviewRenderer.hxx"
|
|
#ifndef _COM_SUN_STAR_FRAME_XMODEL_HPP_
|
|
#include <com/sun/star/frame/XModel.hpp>
|
|
#endif
|
|
#ifndef _SV_TIMER_HXX
|
|
#include <vcl/timer.hxx>
|
|
#endif
|
|
#include "tools/SdGlobalResourceContainer.hxx"
|
|
|
|
#include <boost/shared_ptr.hpp>
|
|
|
|
class SdPage;
|
|
class SdDrawDocument;
|
|
class SfxObjectShellLock;
|
|
|
|
namespace sd {
|
|
class DrawDocShell;
|
|
}
|
|
|
|
namespace sd { namespace toolpanel { namespace controls {
|
|
|
|
class MasterPageDescriptor;
|
|
|
|
/** This container manages the master pages used by the MasterPagesSelector
|
|
controls. It uses internally a singleton implementation object.
|
|
Therefore, all MasterPageContainer object operator on the same set of
|
|
master pages. Each MasterPageContainer, however, has its own
|
|
PreviewSize value and thus can independantly switch between large and
|
|
small previews.
|
|
|
|
The container maintains its own document to store master page objects.
|
|
|
|
For each master page container stores its URL, preview bitmap, page
|
|
name, and, if available, the page object.
|
|
|
|
Entries are accessed via a Token, which is mostly a numerical index but
|
|
whose values do not neccessarily have to be consecutive.
|
|
*/
|
|
class MasterPageContainer
|
|
{
|
|
public:
|
|
typedef int Token;
|
|
static const Token NIL_TOKEN = -1;
|
|
|
|
MasterPageContainer (void);
|
|
virtual ~MasterPageContainer (void);
|
|
|
|
void AddChangeListener (const Link& rLink);
|
|
void RemoveChangeListener (const Link& rLink);
|
|
|
|
enum PreviewSize { SMALL, LARGE };
|
|
/** There are two different preview sizes, a small one and a large one.
|
|
Which one is used by the called container can be changed with this
|
|
method.
|
|
When the preview size is changed then all change listeners are
|
|
notified of this.
|
|
*/
|
|
void SetPreviewSize (PreviewSize eSize);
|
|
|
|
/** Returns the preview size.
|
|
*/
|
|
PreviewSize GetPreviewSize (void) const;
|
|
|
|
/** Return the preview size in pixels.
|
|
*/
|
|
Size GetPreviewSizePixel (void) const;
|
|
|
|
enum PreviewState { PS_AVAILABLE, PS_CREATABLE, PS_PREPARING, PS_NOT_AVAILABLE };
|
|
PreviewState GetPreviewState (Token aToken);
|
|
|
|
/** This method is typically called for entries in the container for
|
|
which GetPreviewState() returns OS_CREATABLE. The creation of the
|
|
preview is then scheduled to be executed asynchronously at a later
|
|
point in time. When the preview is available the change listeners
|
|
will be notified.
|
|
*/
|
|
bool RequestPreview (Token aToken);
|
|
|
|
/** Each entry of the container is either the first page of a template
|
|
document or is a master page of an Impress document.
|
|
*/
|
|
enum Origin {
|
|
MASTERPAGE, // Master page of a document.
|
|
TEMPLATE, // First page of a template file.
|
|
DEFAULT, // Empty master page with default style.
|
|
UNKNOWN
|
|
};
|
|
|
|
/** Put the master page identified and described by the given parameters
|
|
into the container. When there already is a master page with the
|
|
given URL, page name, or object pointer (when that is not NULL) then
|
|
the existing entry is replaced/updated by the given one. Otherwise
|
|
a new entry is inserted.
|
|
*/
|
|
Token PutMasterPage (const ::boost::shared_ptr<MasterPageDescriptor>& rDescriptor);
|
|
void AcquireToken (Token aToken);
|
|
void ReleaseToken (Token aToken);
|
|
|
|
/** This and the GetTokenForIndex() methods can be used to iterate over
|
|
all members of the container.
|
|
*/
|
|
int GetTokenCount (void) const;
|
|
|
|
/** Determine whether the container has a member for the given token.
|
|
*/
|
|
bool HasToken (Token aToken) const;
|
|
|
|
/** Return a token for an index in the range
|
|
0 <= index < GetTokenCount().
|
|
*/
|
|
Token GetTokenForIndex (int nIndex);
|
|
|
|
Token GetTokenForURL (const String& sURL);
|
|
Token GetTokenForPageName (const String& sPageName);
|
|
Token GetTokenForStyleName (const String& sStyleName);
|
|
Token GetTokenForPageObject (const SdPage* pPage);
|
|
|
|
String GetURLForToken (Token aToken);
|
|
String GetPageNameForToken (Token aToken);
|
|
String GetStyleNameForToken (Token aToken);
|
|
SdPage* GetSlideForToken (Token aToken, bool bLoad=true);
|
|
SdPage* GetPageObjectForToken (Token aToken, bool bLoad=true);
|
|
Origin GetOriginForToken (Token aToken);
|
|
sal_Int32 GetTemplateIndexForToken (Token aToken);
|
|
::boost::shared_ptr<MasterPageDescriptor> GetDescriptorForToken (Token aToken);
|
|
bool UpdateDescriptor (
|
|
const ::boost::shared_ptr<MasterPageDescriptor>& rpDescriptor,
|
|
bool bForcePageObject,
|
|
bool bForcePreview,
|
|
bool bSendEvents);
|
|
|
|
void SetPreviewProviderForToken (Token aToken,
|
|
const ::boost::shared_ptr<PreviewProvider>& rpPreviewProvider);
|
|
|
|
void InvalidatePreview (Token aToken);
|
|
|
|
/** Return a preview for the specified token. When the preview is not
|
|
present then the PreviewProvider associated with the token is
|
|
executed only when that is not expensive. It is the responsibility
|
|
of the caller to call RequestPreview() to do the same
|
|
(asynchronously) for expensive PreviewProviders.
|
|
Call GetPreviewState() to find out if that is necessary.
|
|
@param aToken
|
|
This token specifies for which master page to return the prview.
|
|
Tokens are returned for example by the GetTokenFor...() methods.
|
|
@return
|
|
The returned image is the requested preview or a substitution.
|
|
*/
|
|
Image GetPreviewForToken (Token aToken);
|
|
|
|
private:
|
|
class Implementation;
|
|
::boost::shared_ptr<Implementation> mpImpl;
|
|
PreviewSize mePreviewSize;
|
|
|
|
/** Retrieve the preview of the document specified by the given URL.
|
|
*/
|
|
static BitmapEx LoadPreviewFromURL (const ::rtl::OUString& aURL);
|
|
};
|
|
|
|
|
|
|
|
|
|
/** For some changes to the set of master pages in a MasterPageContainer or
|
|
to the data stored for each master page one or more events are sent to
|
|
registered listeners.
|
|
Each event has an event type and a token that tells the listener where
|
|
the change took place.
|
|
*/
|
|
class MasterPageContainerChangeEvent
|
|
{
|
|
public:
|
|
enum EventType {
|
|
// A master page was added to the container.
|
|
CHILD_ADDED,
|
|
// A master page was removed from the container.
|
|
CHILD_REMOVED,
|
|
// The preview of a master page has changed.
|
|
PREVIEW_CHANGED,
|
|
// The size of a preview has changed.
|
|
SIZE_CHANGED,
|
|
// Some of the data stored for a master page has changed.
|
|
DATA_CHANGED,
|
|
// The TemplateIndex of a master page has changed.
|
|
INDEX_CHANGED,
|
|
// More than one entries changed their TemplateIndex
|
|
INDEXES_CHANGED
|
|
} meEventType;
|
|
|
|
// Token of the container entry whose data changed or which was added or
|
|
// removed.
|
|
MasterPageContainer::Token maChildToken;
|
|
};
|
|
|
|
|
|
} } } // end of namespace ::sd::toolpanel::controls
|
|
|
|
#endif
|