summaryrefslogtreecommitdiffstats
path: root/src/kernel/qstyle.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'src/kernel/qstyle.cpp')
-rw-r--r--src/kernel/qstyle.cpp530
1 files changed, 488 insertions, 42 deletions
diff --git a/src/kernel/qstyle.cpp b/src/kernel/qstyle.cpp
index 25c9b180..26fbf0cb 100644
--- a/src/kernel/qstyle.cpp
+++ b/src/kernel/qstyle.cpp
@@ -44,6 +44,10 @@
#include "ntqpainter.h"
#include "ntqbitmap.h"
#include "ntqpixmapcache.h"
+#include "ntqframe.h"
+#include "ntqlayout.h"
+#include "ntqobjectlist.h"
+#include "ntqwidgetlist.h"
#include <limits.h>
@@ -394,6 +398,10 @@ public:
*/
TQStyle::TQStyle()
{
+ m_eventHandlerInstallationHook = NULL;
+ m_eventHandlerRemovalHook = NULL;
+ m_widgetActionRequestHook = NULL;
+ conditionalAcceleratorsEnabled = false;
d = new TQStylePrivate;
}
@@ -414,8 +422,6 @@ TQStyle::~TQStyle()
style. Current supported values are TQt::WindowsStyle and TQt::MotifStyle.
*/
-
-
/*!
Initializes the appearance of a widget.
@@ -439,8 +445,9 @@ TQStyle::~TQStyle()
\sa unPolish()
*/
-void TQStyle::polish( TQWidget*)
-{
+void TQStyle::polish( TQWidget *widget ) {
+ TQStyleControlElementData ceData = populateControlElementDataFromWidget(widget, TQStyleOption());
+ polish(ceData, getControlElementFlagsForObject(widget, ceData.widgetObjectTypes, TQStyleOption()), widget);
}
/*!
@@ -453,10 +460,62 @@ void TQStyle::polish( TQWidget*)
\sa polish()
*/
-void TQStyle::unPolish( TQWidget*)
-{
+void TQStyle::unPolish( TQWidget *widget ) {
+ TQStyleControlElementData ceData = populateControlElementDataFromWidget(widget, TQStyleOption());
+ unPolish(ceData, getControlElementFlagsForObject(widget, ceData.widgetObjectTypes, TQStyleOption()), widget);
+}
+
+/*!
+ Initializes the appearance of a widget.
+
+ This function is called for every widget at some point after it
+ has been fully created but just \e before it is shown the very
+ first time.
+
+ Reasonable actions in this function might be to install a widget
+ event handler for the style. An example of highly unreasonable
+ use would be setting the geometry! With TQt 3.0's style engine
+ you will rarely need to write your own polish(); instead reimplement
+ drawItem(), drawPrimitive(), etc.
+
+ The \a objectTypes object may provide enough information to
+ allow class-specific customizations. But be careful not to
+ hard-code things too much because new TQStyle subclasses are
+ expected to work reasonably with all current and \e future
+ widgets.
+
+ You may specify either a TQWidget pointer or a custom pointer.
+ If a custom pointer is specified, you must be careful to intercept any event
+ handler installation/removal calls via setEventHandlerInstallationHook and
+ setEventHandlerRemovalHook.
+
+ \sa unPolish()
+*/
+void TQStyle::polish( TQStyleControlElementData ceData, ControlElementFlags, void *ptr ) {
+ if (ceData.widgetObjectTypes.contains("TQWidget")) {
+ // Enable dynamic hide/show of accelerator shortcuts
+ TQWidget* widget = reinterpret_cast<TQWidget*>(ptr);
+ widget->installEventFilter(this);
+ }
}
+/*!
+ Undoes the initialization of a widget's appearance.
+
+ This function is the counterpart to polish. It is called for every
+ polished widget when the style is dynamically changed. The former
+ style has to unpolish its settings before the new style can polish
+ them again.
+
+ \sa polish()
+*/
+void TQStyle::unPolish( TQStyleControlElementData ceData, ControlElementFlags, void *ptr ) {
+ if (ceData.widgetObjectTypes.contains("TQWidget")) {
+ // Disable dynamic hide/show of accelerator shortcuts
+ TQWidget* widget = reinterpret_cast<TQWidget*>(ptr);
+ widget->installEventFilter(this);
+ }
+}
/*!
\overload
@@ -464,8 +523,10 @@ void TQStyle::unPolish( TQWidget*)
\sa unPolish()
*/
-void TQStyle::polish( TQApplication*)
-{
+void TQStyle::polish( TQApplication *app ) {
+ TQStyleControlElementData ceData;
+ ceData.widgetObjectTypes = getObjectTypeListForObject(app);
+ applicationPolish(ceData, getControlElementFlagsForObject(app, ceData.widgetObjectTypes, TQStyleOption()), app);
}
/*!
@@ -475,8 +536,41 @@ void TQStyle::polish( TQApplication*)
\sa polish()
*/
-void TQStyle::unPolish( TQApplication*)
-{
+void TQStyle::unPolish( TQApplication *app ) {
+ TQStyleControlElementData ceData;
+ ceData.widgetObjectTypes = getObjectTypeListForObject(app);
+ applicationUnPolish(ceData, getControlElementFlagsForObject(app, ceData.widgetObjectTypes, TQStyleOption()), app);
+}
+
+/*!
+ \overload
+ Late initialization of the TQApplication object or other global application object.
+
+ You may specify either a TQApplication pointer or a custom pointer.
+ If a custom pointer is specified, you must be careful to intercept any event
+ handler installation/removal calls via setEventHandlerInstallationHook and
+ setEventHandlerRemovalHook.
+
+ \sa unPolish()
+*/
+void TQStyle::applicationPolish( TQStyleControlElementData, ControlElementFlags, void * ) {
+ //
+}
+
+/*!
+ \overload
+
+ Undoes the application polish.
+
+ You may specify either a TQApplication pointer or a custom pointer.
+ If a custom pointer is specified, you must be careful to intercept any event
+ handler installation/removal calls via setEventHandlerInstallationHook and
+ setEventHandlerRemovalHook.
+
+ \sa polish()
+*/
+void TQStyle::applicationUnPolish( TQStyleControlElementData, ControlElementFlags, void * ) {
+ //
}
/*!
@@ -802,11 +896,14 @@ void TQStyle::drawItem( TQPainter *p, const TQRect &r,
*/
/*!
- \fn void TQStyle::drawPrimitive( PrimitiveElement pe, TQPainter *p, const TQRect &r, const TQColorGroup &cg, SFlags flags, const TQStyleOption& opt) const
+ \fn void TQStyle::drawPrimitive( PrimitiveElement pe, TQPainter *p, TQStyleControlElementData ceData, ControlElementFlags elementFlags, const TQRect &r, const TQColorGroup &cg, SFlags flags, const TQStyleOption& opt) const
Draws the style PrimitiveElement \a pe using the painter \a p in
the area \a r. Colors are used from the color group \a cg.
+ \a ceData and \a elementFlags provide additional information about
+ the widget for which the PrimitiveElement is being drawn.
+
The rect \a r should be in screen coordinates.
The \a flags argument is used to control how the PrimitiveElement
@@ -932,20 +1029,25 @@ void TQStyle::drawItem( TQPainter *p, const TQRect &r,
*/
/*!
- \fn void TQStyle::drawControl( ControlElement element, TQPainter *p, const TQWidget *widget, const TQRect &r, const TQColorGroup &cg, SFlags how, const TQStyleOption& opt) const
+ \fn void TQStyle::drawControl( ControlElement element, TQPainter *p, TQStyleControlElementData ceData, ControlElementFlags elementFlags, const TQRect &r, const TQColorGroup &cg, SFlags how, const TQStyleOption& opt, const TQWidget *widget) const
Draws the ControlElement \a element using the painter \a p in the
area \a r. Colors are used from the color group \a cg.
The rect \a r should be in screen coordinates.
+ \a ceData and \a elementFlags provide additional information about
+ the widget for which the PrimitiveElement is being drawn.
+
The \a how argument is used to control how the ControlElement is
drawn. Multiple flags can be OR'ed together. See the table below
for an explanation of which flags are used with the various
ControlElements.
The \a widget argument is a pointer to a TQWidget or one of its
- subclasses. The widget can be cast to the appropriate type based
+ subclasses. Note that usage of the widget argument is deprecated
+ in favor of specifying widget parameters via \a ceData and \a elementFlags.
+ The widget can be cast to the appropriate type based
on the value of \a element. The \a opt argument can be used to
pass extra information required when drawing the ControlElement.
Note that \a opt may be the default value even for ControlElements
@@ -1086,14 +1188,19 @@ void TQStyle::drawItem( TQPainter *p, const TQRect &r,
*/
/*!
- \fn void TQStyle::drawControlMask( ControlElement element, TQPainter *p, const TQWidget *widget, const TQRect &r, const TQStyleOption& opt) const
+ \fn void TQStyle::drawControlMask( ControlElement element, TQPainter *p, TQStyleControlElementData ceData, ControlElementFlags elementFlags, const TQRect &r, const TQStyleOption& opt, const TQWidget *widget) const
Draw a bitmask for the ControlElement \a element using the painter
\a p in the area \a r. See drawControl() for an explanation of the
use of the \a widget and \a opt arguments.
+ \a ceData and \a elementFlags provide additional information about
+ the widget for which the PrimitiveElement is being drawn.
+
The rect \a r should be in screen coordinates.
+ \a widget is deprecated and should not be used.
+
\sa drawControl(), ControlElement
*/
@@ -1154,15 +1261,19 @@ void TQStyle::drawItem( TQPainter *p, const TQRect &r,
*/
/*!
- \fn TQRect TQStyle::subRect( SubRect subrect, const TQWidget *widget ) const;
+ \fn TQRect TQStyle::subRect( SubRect subrect, const TQStyleControlElementData ceData, const ControlElementFlags elementFlags, const TQWidget *widget ) const;
Returns the sub-area \a subrect for the \a widget in logical
coordinates.
+ \a ceData and \a elementFlags provide additional information about
+ the widget for which the PrimitiveElement is being drawn.
+
The \a widget argument is a pointer to a TQWidget or one of its
- subclasses. The widget can be cast to the appropriate type based
- on the value of \a subrect. See the table below for the
- appropriate \a widget casts:
+ subclasses. Note that usage of \a widget is deprecated in favor
+ of \a ceData and \a elementFlags. The widget can be cast to the
+ appropriate type based on the value of \a subrect. See the table
+ below for the appropriate \a widget casts:
\table
\header \i SubRect \i Widget Cast
@@ -1282,7 +1393,7 @@ void TQStyle::drawItem( TQPainter *p, const TQRect &r,
*/
/*!
- \fn void TQStyle::drawComplexControl( ComplexControl control, TQPainter *p, const TQWidget *widget, const TQRect &r, const TQColorGroup &cg, SFlags how, SCFlags sub, SCFlags subActive, const TQStyleOption& opt ) const
+ \fn void TQStyle::drawComplexControl( ComplexControl control, TQPainter *p, TQStyleControlElementData ceData, ControlElementFlags elementFlags, const TQRect &r, const TQColorGroup &cg, SFlags how, SCFlags sub, SCFlags subActive, const TQStyleOption& opt, const TQWidget *widget ) const
Draws the ComplexControl \a control using the painter \a p in the
area \a r. Colors are used from the color group \a cg. The \a sub
@@ -1295,6 +1406,9 @@ void TQStyle::drawItem( TQPainter *p, const TQRect &r,
coordinates into screen coordinates when using drawPrimitive() and
drawControl().
+ \a ceData and \a elementFlags provide additional information about
+ the widget for which the PrimitiveElement is being drawn.
+
The \a how argument is used to control how the ComplexControl is
drawn. Multiple flags can OR'ed together. See the table below for
an explanation of which flags are used with the various
@@ -1302,11 +1416,13 @@ void TQStyle::drawItem( TQPainter *p, const TQRect &r,
The \a widget argument is a pointer to a TQWidget or one of its
subclasses. The widget can be cast to the appropriate type based
- on the value of \a control. The \a opt argument can be used to
- pass extra information required when drawing the ComplexControl.
- Note that \a opt may be the default value even for ComplexControls
- that can make use of the extra options. See the table below for
- the appropriate \a widget and \a opt usage:
+ on the value of \a control. Note that usage of \a widget is
+ deprecated in favor of \a ceData and \a elementFlags. The \a opt
+ argument can be used to pass extra information required when
+ drawing the ComplexControl. Note that \a opt may be the default
+ value even for ComplexControls that can make use of the extra
+ options. See the table below for the appropriate \a widget and
+ \a opt usage:
\table
\header \i ComplexControl<br>\& Widget Cast
@@ -1375,26 +1491,34 @@ void TQStyle::drawItem( TQPainter *p, const TQRect &r,
*/
/*!
- \fn void TQStyle::drawComplexControlMask( ComplexControl control, TQPainter *p, const TQWidget *widget, const TQRect &r, const TQStyleOption& opt) const
+ \fn void TQStyle::drawComplexControlMask( ComplexControl control, TQPainter *p, const TQStyleControlElementData ceData, const ControlElementFlags elementFlags, const TQRect &r, const TQStyleOption& opt, const TQWidget *widget) const
Draw a bitmask for the ComplexControl \a control using the painter
\a p in the area \a r. See drawComplexControl() for an explanation
of the use of the \a widget and \a opt arguments.
+ \a ceData and \a elementFlags provide additional information about
+ the widget for which the PrimitiveElement is being drawn.
+
The rect \a r should be in logical coordinates. Reimplementations
of this function should use visualRect() to change the logical
corrdinates into screen coordinates when using drawPrimitive() and
drawControl().
+ Note that usage of \a widget is deprecated in favor of \a ceData and \a elementFlags.
+
\sa drawComplexControl() ComplexControl
*/
/*!
- \fn TQRect TQStyle::querySubControlMetrics( ComplexControl control, const TQWidget *widget, SubControl subcontrol, const TQStyleOption& opt = TQStyleOption::Default ) const;
+ \fn TQRect TQStyle::querySubControlMetrics( ComplexControl control, TQStyleControlElementData ceData, ControlElementFlags elementFlags, SubControl subcontrol, const TQStyleOption& opt = TQStyleOption::Default, const TQWidget *widget = 0 ) const;
Returns the rect for the SubControl \a subcontrol for \a widget in
logical coordinates.
+ \a ceData and \a elementFlags provide additional information about
+ the widget for which the PrimitiveElement is being drawn.
+
The \a widget argument is a pointer to a TQWidget or one of its
subclasses. The widget can be cast to the appropriate type based
on the value of \a control. The \a opt argument can be used to
@@ -1403,11 +1527,13 @@ void TQStyle::drawItem( TQPainter *p, const TQRect &r,
that can make use of the extra options. See drawComplexControl()
for an explanation of the \a widget and \a opt arguments.
+ Note that usage of \a widget is deprecated in favor of \a ceData and \a elementFlags.
+
\sa drawComplexControl(), ComplexControl, SubControl
*/
/*!
- \fn SubControl TQStyle::querySubControl( ComplexControl control, const TQWidget *widget, const TQPoint &pos, const TQStyleOption& opt = TQStyleOption::Default ) const;
+ \fn SubControl TQStyle::querySubControl( ComplexControl control, TQStyleControlElementData ceData, ControlElementFlags elementFlags, const TQPoint &pos, const TQStyleOption& opt = TQStyleOption::Default, const TQWidget *widget = 0 ) const;
Returns the SubControl for \a widget at the point \a pos. The \a
widget argument is a pointer to a TQWidget or one of its
@@ -1418,11 +1544,16 @@ void TQStyle::drawItem( TQPainter *p, const TQRect &r,
that can make use of the extra options. See drawComplexControl()
for an explanation of the \a widget and \a opt arguments.
+ \a ceData and \a elementFlags provide additional information about
+ the widget for which the PrimitiveElement is being drawn.
+
Note that \a pos is passed in screen coordinates. When using
querySubControlMetrics() to check for hits and misses, use
visualRect() to change the logical coordinates into screen
coordinates.
+ Note that usage of \a widget is deprecated in favor of \a ceData and \a elementFlags.
+
\sa drawComplexControl(), ComplexControl, SubControl, querySubControlMetrics()
*/
@@ -1528,14 +1659,20 @@ void TQStyle::drawItem( TQPainter *p, const TQRect &r,
*/
/*!
- \fn int TQStyle::pixelMetric( PixelMetric metric, const TQWidget *widget = 0 ) const;
+ \fn int TQStyle::pixelMetric( PixelMetric metric, TQStyleControlElementData ceData, ControlElementFlags elementFlags, const TQWidget *widget = 0 ) const;
+
+ Returns the pixel metric for \a metric.
+
+ \a ceData and \a elementFlags provide additional information about
+ the widget for which the PrimitiveElement is being drawn.
- Returns the pixel metric for \a metric. The \a widget argument is
- a pointer to a TQWidget or one of its subclasses. The widget can be
- cast to the appropriate type based on the value of \a metric. Note
- that \a widget may be zero even for PixelMetrics that can make use
- of \a widget. See the table below for the appropriate \a widget
- casts:
+ The \a widget argument is a pointer to a TQWidget or one of its
+ subclasses. The widget can be cast to the appropriate type based
+ on the value of \a metric. Note that \a widget may be zero even
+ for PixelMetrics that can make use of \a widget. Note also that
+ usage of \a widget is deprecated in favor of \a ceData and
+ \a elementFlags. See the table below for the appropriate
+ \a widget casts:
\table
\header \i PixelMetric \i Widget Cast
@@ -1584,18 +1721,22 @@ void TQStyle::drawItem( TQPainter *p, const TQRect &r,
*/
/*!
- \fn TQSize TQStyle::sizeFromContents( ContentsType contents, const TQWidget *widget, const TQSize &contentsSize, const TQStyleOption& opt = TQStyleOption::Default ) const;
+ \fn TQSize TQStyle::sizeFromContents( ContentsType contents, TQStyleControlElementData ceData, ControlElementFlags elementFlags, const TQSize &contentsSize, const TQStyleOption& opt = TQStyleOption::Default, const TQWidget *widget = 0 ) const;
Returns the size of \a widget based on the contents size \a
contentsSize.
+ \a ceData and \a elementFlags provide additional information about
+ the widget for which the PrimitiveElement is being drawn.
+
The \a widget argument is a pointer to a TQWidget or one of its
subclasses. The widget can be cast to the appropriate type based
on the value of \a contents. The \a opt argument can be used to
pass extra information required when calculating the size. Note
that \a opt may be the default value even for ContentsTypes that
- can make use of the extra options. See the table below for the
- appropriate \a widget and \a opt usage:
+ can make use of the extra options. Note that usage of \a widget
+ is deprecated in favor of \a ceData and \a elementFlags. See the
+ table below for the appropriate \a widget and \a opt usage:
\table
\header \i ContentsType \i Widget Cast \i Options \i Notes
@@ -1770,12 +1911,18 @@ void TQStyle::drawItem( TQPainter *p, const TQRect &r,
*/
/*!
- \fn int TQStyle::styleHint( StyleHint stylehint, const TQWidget *widget = 0, const TQStyleOption &opt = TQStyleOption::Default, TQStyleHintReturn *returnData = 0 ) const;
+ \fn int TQStyle::styleHint( StyleHint stylehint, TQStyleControlElementData ceData, ControlElementFlags elementFlags, const TQStyleOption &opt = TQStyleOption::Default, TQStyleHintReturn *returnData = 0, const TQWidget *widget = 0 ) const;
Returns the style hint \a stylehint for \a widget. Currently, \a
widget, \a opt, and \a returnData are unused; they're included to
allow for future enhancements.
+ \a ceData and \a elementFlags provide additional information about
+ the widget for which the PrimitiveElement is being drawn.
+
+ Note that usage of \a widget is deprecated in favor of \a ceData
+ and \a elementFlags.
+
For an explanation of the return value see \l StyleHint.
*/
@@ -1811,10 +1958,13 @@ void TQStyle::drawItem( TQPainter *p, const TQRect &r,
*/
/*!
- \fn TQPixmap TQStyle::stylePixmap( StylePixmap stylepixmap, const TQWidget *widget = 0, const TQStyleOption& opt = TQStyleOption::Default ) const;
+ \fn TQPixmap TQStyle::stylePixmap( StylePixmap stylepixmap, TQStyleControlElementData ceData, ControlElementFlags elementFlags, const TQStyleOption& opt = TQStyleOption::Default, const TQWidget *widget = 0 ) const;
Returns a pixmap for \a stylepixmap.
+ \a ceData and \a elementFlags provide additional information about
+ the widget for which the PrimitiveElement is being drawn.
+
The \a opt argument can be used to pass extra information required
when drawing the ControlElement. Note that \a opt may be the
default value even for StylePixmaps that can make use of the extra
@@ -1822,8 +1972,9 @@ void TQStyle::drawItem( TQPainter *p, const TQRect &r,
The \a widget argument is a pointer to a TQWidget or one of its
subclasses. The widget can be cast to the appropriate type based
- on the value of \a stylepixmap. See the table below for the
- appropriate \a widget casts:
+ on the value of \a stylepixmap. Note that usage of \a widget is
+ deprecated in favor of \a ceData and \a elementFlags.See the table
+ below for the appropriate \a widget casts:
\table
\header \i StylePixmap \i Widget Cast
@@ -1847,11 +1998,33 @@ void TQStyle::drawItem( TQPainter *p, const TQRect &r,
function is provided to aid style implementors in supporting
right-to-left mode.
+ Note that this function is deprecated in favor of visualRect( const TQRect &logical, const TQStyleControlElementData ceData, const ControlElementFlags elementFlags );
+
\sa TQApplication::reverseLayout()
*/
TQRect TQStyle::visualRect( const TQRect &logical, const TQWidget *w )
{
- TQRect boundingRect = w->rect();
+ TQStyleControlElementData ceData;
+ ceData.rect = w->rect();
+ return visualRect(logical, ceData, CEF_None);
+}
+
+/*!
+ \fn TQRect TQStyle::visualRect( const TQRect &logical, const TQStyleControlElementData ceData, const ControlElementFlags elementFlags );
+
+ Returns the rect \a logical in screen coordinates. The bounding
+ rect for the widget described by \a ceData and \a elementFlags
+ is used to perform the translation. This function is provided to
+ aid style implementors in supporting
+ right-to-left mode.
+
+ \sa TQApplication::reverseLayout()
+*/
+TQRect TQStyle::visualRect( const TQRect &logical, const TQStyleControlElementData ceData, const ControlElementFlags elementFlags )
+{
+ Q_UNUSED(elementFlags)
+
+ TQRect boundingRect = ceData.rect;
TQRect r = logical;
if ( TQApplication::reverseLayout() )
r.moveBy( 2*(boundingRect.right() - logical.right()) +
@@ -1879,6 +2052,279 @@ TQRect TQStyle::visualRect( const TQRect &logical, const TQRect &boundingRect )
}
/*!
+ \fn void TQStyle::installObjectEventHandler( TQStyleControlElementData ceData, ControlElementFlags elementFlags, void* source, TQStyle* handler );
+
+ Intercepts events generated by \a source and sends them to \a handler via
+ the bool TQStyle::objectEventHandler( TQStyleControlElementData ceData, ControlElementFlags elementFlags, void* source, TQEvent *e ) virtual method.
+
+ \sa void TQStyle::removeObjectEventHandler( TQObject* source, TQStyle* handler )
+ \sa bool TQStyle::objectEventHandler( TQStyleControlElementData ceData, ControlElementFlags elementFlags, void* source, TQEvent *e )
+*/
+void TQStyle::installObjectEventHandler( TQStyleControlElementData ceData, ControlElementFlags elementFlags, void* source, TQStyle* handler ) {
+ bool cbret = false;
+ if (m_eventHandlerInstallationHook) {
+ cbret = (*m_eventHandlerInstallationHook)(ceData, elementFlags, source, handler);
+ }
+ if (!cbret) {
+ if (ceData.widgetObjectTypes.contains("TQObject")) {
+ TQObject* o = reinterpret_cast<TQObject*>(source);
+ o->installEventFilter(this);
+ m_objectEventSourceToHandlerMap[source] = handler;
+ m_objectEventSourceDataToHandlerMap[source] = ceData;
+ m_objectEventSourceFlagsToHandlerMap[source] = elementFlags;
+ }
+ }
+}
+
+/*!
+ \fn void TQStyle::removeObjectEventHandler( TQStyleControlElementData ceData, ControlElementFlags elementFlags, void* source, TQStyle* handler );
+
+ Stops intercepting events generated by \a source.
+
+ \sa void TQStyle::installObjectEventHandler( TQStyleControlElementData ceData, ControlElementFlags elementFlags, void* source, TQStyle* handler )
+*/
+void TQStyle::removeObjectEventHandler( TQStyleControlElementData ceData, ControlElementFlags elementFlags, void* source, TQStyle* handler ) {
+ bool cbret = false;
+ if (m_eventHandlerRemovalHook) {
+ cbret = (*m_eventHandlerRemovalHook)(ceData, elementFlags, source, handler);
+ }
+ if (!cbret) {
+ if (ceData.widgetObjectTypes.contains("TQObject")) {
+ TQObject* o = reinterpret_cast<TQObject*>(source);
+ m_objectEventSourceToHandlerMap.remove(source);
+ m_objectEventSourceDataToHandlerMap.remove(source);
+ m_objectEventSourceFlagsToHandlerMap.remove(source);
+ o->removeEventFilter(this);
+ }
+ }
+}
+
+/*!
+ \fn void TQStyle::setEventHandlerInstallationHook( EventHandlerInstallationHook hook );
+
+ Sets a callback function \a hook which will be called whenever a new intercept request
+ is made via the TQStyle::installObjectEventHandler method. The callback function must
+ use this definition: bool callbackFunction( TQStyleControlElementData ceData, ControlElementFlags elementFlags, void* source, TQStyle* handler ).
+
+ \sa void TQStyle::installObjectEventHandler( TQStyleControlElementData ceData, ControlElementFlags elementFlags, void* source, TQStyle* handler )
+*/
+void TQStyle::setEventHandlerInstallationHook( EventHandlerInstallationHook hook ) {
+ m_eventHandlerInstallationHook = hook;
+}
+
+/*!
+ \fn void TQStyle::setEventHandlerRemovalHook( EventHandlerRemovalHook hook );
+
+ Sets a callback function \a hook which will be called whenever a new intercept deactivation request
+ is made via the TQStyle::removeObjectEventHandler method. The callback function must
+ use this definition: bool callbackFunction( TQStyleControlElementData ceData, ControlElementFlags elementFlags, void* source, TQStyle* handler ).
+
+ \sa void TQStyle::removeObjectEventHandler( TQStyleControlElementData ceData, ControlElementFlags elementFlags, void* source, TQStyle* handler )
+*/
+void TQStyle::setEventHandlerRemovalHook( EventHandlerRemovalHook hook ) {
+ m_eventHandlerRemovalHook = hook;
+}
+
+/*!
+ \fn bool TQStyle::objectEventHandler( TQStyleControlElementData ceData, ControlElementFlags elementFlags, void* source, TQEvent *e );
+
+ Override this virtual function to intercept events requested by a previous call to
+ TQStyle::installObjectEventHandler.
+
+ \sa void TQStyle::installObjectEventHandler( TQStyleControlElementData ceData, ControlElementFlags elementFlags, void* source, TQStyle* handler )
+ \sa void TQStyle::removeObjectEventHandler( TQStyleControlElementData ceData, ControlElementFlags elementFlags, void* source, TQStyle* handler )
+*/
+bool TQStyle::objectEventHandler( TQStyleControlElementData ceData, ControlElementFlags elementFlags, void* source, TQEvent *e ) {
+ Q_UNUSED(ceData);
+ Q_UNUSED(elementFlags);
+ Q_UNUSED(source);
+ Q_UNUSED(e);
+ return false;
+}
+
+/*!
+ \fn bool TQStyle::eventFilter(TQObject *o, TQEvent *e);
+ \internal
+*/
+bool TQStyle::eventFilter(TQObject *o, TQEvent *e) {
+ acceleratorKeypressEventMonitor(o, e);
+
+ if (m_objectEventSourceToHandlerMap.contains(o)) {
+ TQStyle* handler = m_objectEventSourceToHandlerMap[o];
+ TQStyleControlElementData ceData = m_objectEventSourceDataToHandlerMap[o];
+ ControlElementFlags elementFlags = m_objectEventSourceFlagsToHandlerMap[o];
+ bool ret = handler->objectEventHandler(ceData, elementFlags, o, e);
+ if (ret) {
+ return ret;
+ }
+ else {
+ return TQObject::eventFilter(o, e);
+ }
+ }
+ else {
+ return TQObject::eventFilter(o, e);
+ }
+}
+
+/*!
+ \fn void TQStyle::setWidgetActionRequestHook( WidgetActionRequestHook hook );
+
+ Sets a callback function \a hook which will be called whenever a new widget action request
+ is made via the TQStyle::installObjectEventHandler method. The callback function must
+ use this definition: bool callbackFunction( TQStyleControlElementData ceData, ControlElementFlags elementFlags, void* source, TQStyle* handler ).
+
+ \sa void TQStyle::installObjectEventHandler( TQStyleControlElementData ceData, ControlElementFlags elementFlags, void* source, TQStyle* handler )
+*/
+void TQStyle::setWidgetActionRequestHook( WidgetActionRequestHook hook ) {
+ m_widgetActionRequestHook = hook;
+}
+
+/*!
+ \fn bool widgetActionRequestHandler( TQStyleControlElementData ceData, ControlElementFlags elementFlags, void* source, WidgetActionRequest request );
+
+ Handles widget action requests. Return FALSE to continue processing in base classes, TRUE to eat the request and halt processing.
+*/
+bool TQStyle::widgetActionRequest( TQStyleControlElementData ceData, ControlElementFlags elementFlags, void* source, WidgetActionRequest request, TQStyleWidgetActionRequestData requestData ) {
+ bool cbret = false;
+ if (m_widgetActionRequestHook) {
+ cbret = (*m_widgetActionRequestHook)(ceData, elementFlags, source, request, requestData);
+ }
+ if (!cbret) {
+ if (ceData.widgetObjectTypes.contains("TQWidget")) {
+ TQWidget* widget = reinterpret_cast<TQWidget*>(source);
+ if (request == WAR_Repaint) {
+ widget->repaint(FALSE);
+ }
+ else if (request == WAR_RepaintRect) {
+ widget->repaint(requestData.rect, FALSE);
+ }
+ else if (request == WAR_EnableMouseTracking) {
+ widget->setMouseTracking(TRUE);
+ }
+ else if (request == WAR_DisableMouseTracking) {
+ widget->setMouseTracking(FALSE);
+ }
+ else if (request == WAR_FrameSetStyle) {
+ TQFrame* frame = dynamic_cast<TQFrame*>(widget);
+ if (frame) {
+ frame->setFrameStyle(requestData.metric1);
+ }
+ }
+ else if (request == WAR_FrameSetLineWidth) {
+ TQFrame* frame = dynamic_cast<TQFrame*>(widget);
+ if (frame) {
+ frame->setLineWidth(requestData.metric1);
+ }
+ }
+ else if (request == WAR_SetLayoutMargin) {
+ TQLayout* layout = widget->layout();
+ if (layout) {
+ layout->setMargin(requestData.metric1);
+ }
+ }
+ else if (request == WAR_SetPalette) {
+ widget->setPalette(requestData.palette);
+ }
+ else if (request == WAR_SetBackgroundMode) {
+ widget->setBackgroundMode((TQt::BackgroundMode)requestData.metric1);
+ }
+ else if (request == WAR_SetFont) {
+ widget->setFont(requestData.font);
+ }
+ else if (request == WAR_RepaintAllAccelerators) {
+ TQWidgetList *list = TQApplication::topLevelWidgets();
+ TQWidgetListIt it( *list );
+ TQWidget * widget;
+ while ((widget=it.current()) != 0) {
+ ++it;
+
+ TQObjectList *l = widget->queryList("TQWidget");
+ TQObjectListIt it2( *l );
+ TQWidget *w;
+ while ( (w = (TQWidget*)it2.current()) != 0 ) {
+ ++it2;
+ if (w->isTopLevel() || !w->isVisible() || w->style().styleHint(SH_UnderlineAccelerator, TQStyleControlElementData(), CEF_None, w)) {
+ l->removeRef(w);
+ }
+ }
+
+ // Repaint all relevant widgets
+ it2.toFirst();
+ while ( (w = (TQWidget*)it2.current()) != 0 ) {
+ ++it2;
+ w->repaint(FALSE);
+ }
+ delete l;
+ }
+ delete list;
+ }
+ return true;
+ }
+ }
+ return true;
+}
+
+void TQStyle::acceleratorKeypressEventMonitor( TQObject *o, TQEvent *e ) {
+ if (styleHint(SH_HideUnderlineAcceleratorWhenAltUp, TQStyleControlElementData(), CEF_None, TQStyleOption::Default, NULL, NULL) != 0) {
+ TQWidget *widget = dynamic_cast<TQWidget*>(o);
+ if (widget) {
+ switch(e->type()) {
+ case TQEvent::KeyPress:
+ if (((TQKeyEvent*)e)->key() == Key_Alt) {
+ conditionalAcceleratorsEnabled = true;
+ widgetActionRequest(TQStyleControlElementData(), CEF_None, o, WAR_RepaintAllAccelerators);
+ }
+ break;
+ case TQEvent::KeyRelease:
+ if (((TQKeyEvent*)e)->key() == Key_Alt) {
+ conditionalAcceleratorsEnabled = false;
+ widgetActionRequest(TQStyleControlElementData(), CEF_None, o, WAR_RepaintAllAccelerators);
+ }
+ break;
+ default:
+ break;
+ }
+ }
+ }
+ else {
+ conditionalAcceleratorsEnabled = false;
+ }
+}
+
+bool TQStyle::acceleratorsShown() const {
+ if (styleHint(SH_HideUnderlineAcceleratorWhenAltUp, TQStyleControlElementData(), CEF_None, TQStyleOption::Default, NULL, NULL) != 0) {
+ return conditionalAcceleratorsEnabled;
+ }
+ else {
+ return true;
+ }
+}
+
+TQStyleWidgetActionRequestData::TQStyleWidgetActionRequestData() {
+ //
+}
+TQStyleWidgetActionRequestData::TQStyleWidgetActionRequestData(int param1, int param2) {
+ metric1 = param1;
+ metric2 = param2;
+}
+
+TQStyleWidgetActionRequestData::TQStyleWidgetActionRequestData(TQPalette param) {
+ palette = param;
+}
+
+TQStyleWidgetActionRequestData::TQStyleWidgetActionRequestData(TQFont param) {
+ font = param;
+}
+
+TQStyleWidgetActionRequestData::TQStyleWidgetActionRequestData(TQRect param) {
+ rect = param;
+}
+
+TQStyleWidgetActionRequestData::~TQStyleWidgetActionRequestData() {
+ //
+}
+
+/*!
\fn int TQStyle::defaultFrameWidth() const
\obsolete
*/