File indexing completed on 2024-10-06 04:26:04
0001 /* 0002 SPDX-FileCopyrightText: 1998-2008 Sebastian Trueg <trueg@k3b.org> 0003 0004 Based on the effects in popupMessage.cpp 0005 SPDX-FileCopyrightText: 2005 Max Howell <max.howell@methylblue.com> 0006 SPDX-FileCopyrightText: 2005 Seb Ruiz <me@sebruiz.net> 0007 0008 Dissolve Mask (c) Kicker Authors kickertip.cpp, 2005/08/17 0009 0010 SPDX-License-Identifier: GPL-2.0-or-later 0011 */ 0012 0013 #ifndef _K3B_WIDGET_SHOW_EFFECT_H_ 0014 #define _K3B_WIDGET_SHOW_EFFECT_H_ 0015 0016 #include <QObject> 0017 #include <QBitmap> 0018 0019 0020 class QTimerEvent; 0021 0022 /** 0023 * Helper class to show and hide a widget in a fancy way. 0024 */ 0025 namespace K3b { 0026 class WidgetShowEffect : public QObject 0027 { 0028 Q_OBJECT 0029 0030 public: 0031 // FIXME: add an effect direction 0032 enum Effect { 0033 Dissolve = 1, 0034 Slide 0035 }; 0036 0037 explicit WidgetShowEffect( QWidget* widget, Effect e = Slide ); 0038 ~WidgetShowEffect() override; 0039 0040 void setEffect( Effect e ) { m_effect = e; } 0041 0042 /** 0043 * Using the widget effects the easy way. 0044 * \returns the WidgetShowEffect instance used to show the widget. 0045 * Can be used to connect to signals. 0046 */ 0047 static WidgetShowEffect* showWidget( QWidget* w, Effect ); 0048 0049 /** 0050 * Using the widget effects the easy way. 0051 * \returns the WidgetShowEffect instance used to hide the widget. 0052 * Can be used to connect to signals. 0053 */ 0054 static WidgetShowEffect* hideWidget( QWidget* w, Effect ); 0055 0056 Q_SIGNALS: 0057 void widgetShown( QWidget* ); 0058 void widgetHidden( QWidget* ); 0059 0060 public Q_SLOTS: 0061 /** 0062 * \param effectOnly If true WidgetShowEffect will not call QWidget::show(). 0063 * This is only useful in case onw uses WidgetShowEffect 0064 * to reimplement QWidget::show(). In that case the caller 0065 * has to take care of showing the widget. 0066 */ 0067 void show( bool effectOnly = false ); 0068 0069 /** 0070 * \param effectOnly If true WidgetShowEffect will not call QWidget::hide(). 0071 * This is only useful in case onw uses WidgetShowEffect 0072 * to reimplement QWidget::hide(). In that case the caller 0073 * has to take care of hiding the widget by connecting to 0074 * WidgetShowEffect::widgetHidden() 0075 */ 0076 void hide( bool effectOnly = false ); 0077 0078 private: 0079 void timerEvent( QTimerEvent* ) override; 0080 0081 /** 0082 * @short Gradually show widget by dissolving from background 0083 */ 0084 void dissolveMask(); 0085 0086 /** 0087 * @short animation to slide the widget into view 0088 */ 0089 void slideMask(); 0090 0091 Effect m_effect; 0092 QWidget* m_widget; 0093 0094 QBitmap m_mask; 0095 0096 int m_dissolveSize; 0097 int m_dissolveDelta; 0098 0099 int m_offset; 0100 int m_timerId; 0101 0102 // if true we show, otherwise we hide the widget 0103 bool m_bShow; 0104 0105 bool m_deleteSelf; 0106 bool m_bEffectOnly; 0107 }; 0108 } 0109 0110 #endif