blob: 85e81933dd2aa3409b9e11821a8c7bfc87c8619d [file] [log] [blame]
/**************************************************************
*
* Licensed to the Apache Software Foundation (ASF) under one
* or more contributor license agreements. See the NOTICE file
* distributed with this work for additional information
* regarding copyright ownership. The ASF licenses this file
* to you under the Apache License, Version 2.0 (the
* "License"); you may not use this file except in compliance
* with the License. You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing,
* software distributed under the License is distributed on an
* "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
* KIND, either express or implied. See the License for the
* specific language governing permissions and limitations
* under the License.
*
*************************************************************/
#ifndef __com_sun_star_frame_XFrame_idl__
#define __com_sun_star_frame_XFrame_idl__
#ifndef __com_sun_star_lang_XComponent_idl__
#include <com/sun/star/lang/XComponent.idl>
#endif
#ifndef __com_sun_star_awt_XWindow_idl__
#include <com/sun/star/awt/XWindow.idl>
#endif
//=============================================================================
module com { module sun { module star { module frame {
published interface XFrameActionListener;
published interface XController;
published interface XFramesSupplier;
//=============================================================================
/** a frame object can be considered to be an "anchor" object where a component
can be attached to.
<p>
A frame can be (it's not a must!) a part of a frame tree. If not this frame willn't be
accessible by using the api. This mode make sense for previews.
The root node of the tree can be a <type>Desktop</type> implementation.
</p>
@see Desktop
*/
published interface XFrame: com::sun::star::lang::XComponent
{
//-------------------------------------------------------------------------
/** is called to initialize the frame within a window - the container window.
<p>
This window will be used as parent for the component window and to support
some UI relevant features of the frame service.
Note: Re-parenting mustn't supported by a real frame implementation!
It's designed for initializing - not for setting.
</p>
<p>This frame will take over ownership of the window refered from
<var>xWindow</var>. Thus, the previous owner is not allowed to
dispose this window anymore. </p>
@param xWindow
the new container window
@see XFrame::getContainerWindow()
*/
void initialize( [in] com::sun::star::awt::XWindow xWindow );
//-------------------------------------------------------------------------
/** provides access to the container window of the frame.
<p>
Normally this is used as the parent window of the
component window.
</p>
@return
the container window of this frame
@see XFrame::initialize()
*/
com::sun::star::awt::XWindow getContainerWindow();
//-------------------------------------------------------------------------
/** sets the frame container that created this frame.
<p>
Only the creator is allowed to call this method.
But creator doesn't mean the implementation which creates this instance ...
it means the parent frame of the frame hierarchy.
Because; normaly a frame should be created by using the api
and is neccessary for searches inside the tree (e.g. <member>XFrame::findFrame()</member>)
</p>
@param Creator
the creator (parent) of this frame
@see XFrame::getCreator()
*/
[oneway] void setCreator( [in] XFramesSupplier Creator );
//-------------------------------------------------------------------------
/** provides access to the creator (parent) of this frame
@returns
the frame container that created and contains this frame.
@see XFrame::setCreator()
*/
XFramesSupplier getCreator();
//-------------------------------------------------------------------------
/** access to the name property of this frame
@returns
the programmatic name of this frame.
@see XFrame::setName()
*/
string getName();
//-------------------------------------------------------------------------
/** sets the name of the frame.
<p>
Normally the name of the frame is set initially (e.g. by the creator).
The name of a frame will be used for identifying it if a frame search was started.
These searches can be forced by:
<ul>
<li><member>XFrame::findFrame()</member>
<li><member>XDispatchProvider::queryDispatch()</member>
<li><member>XComponentLoader::loadComponentFromURL()</member>
</ul>
Note: Special targets like "_blank", "_self" etc. are not allowed.
That's why frame names shouldn't start with a sign "_".
</p>
@param aName
the new programmatic name of this frame
@see XFrame::findFrame()
@see XFrame::getName()
@see XDispatchProvider
@see XComponentLoader
*/
[oneway] void setName( [in] string aName );
//-------------------------------------------------------------------------
/** searches for a frame with the specified name.
<p>
Frames may contain other frames (e.g., a frameset) and may
be contained in other frames. This hierarchy is searched with
this method.
First some special names are taken into account, i.e. "",
"_self", "_top", "_blank" etc. <var>SearchFlags</var> is ignored when
comparing these names with <var>TargetFrameName</var>; further steps are
controlled by <var>SearchFlags</var>. If allowed, the name of the frame
itself is compared with the desired one, and then ( again if allowed )
the method is called for all children of the frame. Finally may be called
for the siblings and then for parent frame (if allowed).
</p>
<p>
List of special target names:
<table border=1>
<tr><td>""/"_self"</td><td>address the starting frame itself</td></tr>
<tr><td>"_parent"</td><td>address the direct parent frame only</td></tr>
<tr><td>"_top"</td><td>address the top frame of this subtree of the frametree</td></tr>
<tr><td>"_blank"</td><td>creates a new top frame</td></tr>
</table>
</p>
<p>
If no frame with the given name is found, a new top frame is
created; if this is allowed by a special flag <const>FrameSearchFlag::CREATE</const>.
The new frame also gets the desired name.
</p>
@param aTargetFrameName
identify
<ul><li>(a) a special target ("_blank","_self" ...) or</li>
<li>(b) any well known frame</li><ul>
to search it inside the current hierarchy
@param nSearchFlags
optional parameter to regulate search if no special target was used for <var>TargetFrameName</var>
@see FrameSearchFlag
*/
XFrame findFrame(
[in] string aTargetFrameName,
[in] long nSearchFlags);
//-------------------------------------------------------------------------
/** determines if the frame is a top frame.
<p>
In general a top frame is the frame which is a direct child of
a task frame or which does not have a parent. Possible frame searches must
stop the search at such a frame unless the flag <const>FrameSearchFlag::TASKS</const>
is set.
</p>
@return
<TRUE/> if frame supports top frame specification
<br>
<FALSE/> otherwise
*/
boolean isTop();
//-------------------------------------------------------------------------
/** activates this frame and thus the component within.
<p>
At first the frame sets itself as the active frame of its
creator by calling <member>XFramesSupplier::setActiveFrame()</member>,
then it broadcasts an <type>FrameActionEvent</type> with
<const>FrameAction::FRAME_ACTIVATED</const>. The component within
this frame may listen to this event to grab the focus on activation;
for simple components this can be done by the <type>FrameLoader</type>.
</p>
<p>
Finally, most frames may grab the focus to one of its windows
or forward the activation to a sub-frame.
</p>
@see XFrame::deactivate()
@see XFrame::isActive()
*/
[oneway] void activate();
//-------------------------------------------------------------------------
/** is called by the creator frame when another sub-frame gets activated.
<p>
At first the frame deactivates its active sub-frame, if any.
Then broadcasts a <type>FrameActionEvent</type> with
<const>FrameAction::FRAME_DEACTIVATING</const>.
</p>
@see XFrame::activate()
@see XFrame::isActive()
*/
[oneway] void deactivate();
//-------------------------------------------------------------------------
/** determines if the frame is active.
@return
<TRUE/> for active or UI active frames
<br>
<FALSE/> otherwise
@see XFrame::activate()
@see XFrame::deactivate()
*/
boolean isActive();
//-------------------------------------------------------------------------
/** sets a new component into the frame or release an existing one from a frame.
@param xComponentWindow
the window of the new component or <NULL/> for release
<p>
A valid component window should be a child of the frame container window.
</p>
@param xController
the controller of the new component or <NULL/> for release
<p>
Simple components may implement a <type scope="com::sun::star::awt">XWindow</type> only.
In this case no controller must be given here.
</p>
@return
<TRUE/>if setting of new component or release of an existing one was successfully
<br>
<FALSE/> otherwise (especialy, if an existing controller disagree within his
<member>XController::suspend()</member> call)
@see XFrame::getComponentWindow()
@see XFrame::getContainerWindow()
@see XFrame::getController()
*/
boolean setComponent(
[in] com::sun::star::awt::XWindow xComponentWindow,
[in] XController xController);
//-------------------------------------------------------------------------
/** provides access to the component window
<p>
Note: Don't dispose this window - the frame is the owner of it.
</p>
@returns
the current visible component in this frame
<br>
or <NULL/> if no one currently exist
@see XFrame::setComponent()
*/
com::sun::star::awt::XWindow getComponentWindow();
//-------------------------------------------------------------------------
/** provides access to the controller
<p>
Note: Don't dispose it - the frame is the owner of it.
Use <member>XController::getFrame()</member> to dispose
the frame after you the controller agreed with a
<member>XController::suspend()</member> call.
</p>
@returns
the current controller within this frame
<br>
or <NULL/> if no one currently exist
@see XFrame::setComponent()
*/
XController getController();
//-------------------------------------------------------------------------
/** notifies the frame that the context of the controller within this
frame changed (i.e. the selection).
<p>
According to a call to this interface, the frame calls
<method>XFrameEventListener::frameAction</method> with
<const>FrameAction::CONTEXT_CHANGED</const> to all listeners which
are registered using <member>XFrame::addFrameActionListener</member>.
For external controllers this event can be used to requery dispatches.
@see XFrameEventListener
@see FrameAction
@see XFrame::addFrameActionListener()
*/
void contextChanged();
//-------------------------------------------------------------------------
/** registers an event listener, which will be called when certain things
happen to the components within this frame or within sub-frames of this frame.
<p>
E.g., it is possible to determine instantiation/destruction and
activation/deactivation of components.
</p>
@param xListener
specifies the listener which will be informed
@see XFrame::removeFrameActionListener()
*/
[oneway] void addFrameActionListener( [in]XFrameActionListener xListener );
//-------------------------------------------------------------------------
/** unregisters an event listener
@param xListener
specifies the listener which willn't be informed any longer
@see XFrame::addFrameActionListener()
*/
[oneway] void removeFrameActionListener( [in] XFrameActionListener xListener );
};
//=============================================================================
}; }; }; };
#endif