You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
tdetoys/amor/amor.h

167 lines
5.0 KiB

/* amor.h
**
** Copyright (c) 1999 Martin R. Jones <mjones@kde.org>
**
*/
/*
** This program is free software; you can redistribute it and/or modify
** it under the terms of the GNU General Public License as published by
** the Free Software Foundation; either version 2 of the License, or
** (at your option) any later version.
**
** This program 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 General Public License for more details.
**
** You should have received a copy of the GNU General Public License
** along with this program in a file called COPYING; if not, write to
** the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
** MA 02110-1301, USA.
*/
/*
** Bug reports and questions can be sent to kde-devel@kde.org
*/
#ifndef AMOR_H
#define AMOR_H
#ifdef HAVE_CONFIG_H
#include <config.h>
#endif
#include <tqwidget.h>
#include <tqptrqueue.h>
#include "amoranim.h"
#include "amortips.h"
#include "amorconfig.h"
#include "AmorIface.h"
class AmorDialog;
class AmorBubble;
class AmorWidget;
class TQTimer;
class KWinModule;
class KPopupMenu;
class QueueItem {
public:
enum itemType { Talk , Tip };
QueueItem(itemType ty, TQString te, int ti = -1);
itemType type() { return iType; }
TQString text() { return iText; };
int time() { return iTime; };
void setTime(int newTime) { if (iTime > 0) iTime = newTime; };
private:
itemType iType;
TQString iText;
int iTime;
};
//---------------------------------------------------------------------------
//
// Amor handles window manager input and animation selection and updates.
//
class Amor : public TQObject, virtual public AmorIface
{
Q_OBJECT
TQ_OBJECT
public:
Amor();
virtual ~Amor();
virtual void showTip(TQString tip);
virtual void showMessage(TQString message);
virtual void showMessage(TQString message, int msec);
virtual void screenSaverStopped();
virtual void screenSaverStarted();
void reset();
public slots:
void slotWindowActivate(WId);
void slotWindowRemove(WId);
void slotStackingChanged();
void slotWindowChange(WId, const unsigned long * properties);
void slotDesktopChange(int);
protected slots:
void slotMouseClicked(const TQPoint &pos);
void slotTimeout();
void slotCursorTimeout();
void slotConfigure();
void slotConfigChanged();
void slotOffsetChanged(int);
void slotAbout();
void slotWidgetDragged( const TQPoint &delta, bool release );
void restack();
void hideBubble(bool forceDequeue = false);
void slotBubbleTimeout();
protected:
enum State { Focus, Blur, Normal, Sleeping, Waking, Destroy };
bool readConfig();
void readGroupConfig(KConfigBase &config, TQPtrList<AmorAnim> &animList,
const char *seq);
void showBubble();
AmorAnim *randomAnimation(TQPtrList<AmorAnim> &animList);
void selectAnimation(State state=Normal);
void active();
private:
KWinModule *mWin;
WId mTargetWin; // The window that the animations sits on
TQRect mTargetRect; // The goemetry of the target window
WId mNextTarget; // The window that will become the target
AmorWidget *mAmor; // The widget displaying the animation
AmorThemeManager mTheme; // Animations used by current theme
AmorAnim *mBaseAnim; // The base animation
AmorAnim *mCurrAnim; // The currently running animation
int mPosition; // The position of the animation
State mState; // The current state of the animation
TQTimer *mTimer; // Frame timer
TQTimer *mCursorTimer;// Cursor timer
TQTimer *mStackTimer; // Restacking timer
TQTimer *mBubbleTimer;// Bubble tip timer (GP: I didn't create this one, it had no use when I found it)
AmorDialog *mAmorDialog; // Setup dialog
KPopupMenu *mMenu; // Our menu
time_t mActiveTime; // The time an active event occurred
TQPoint mCursPos; // The last recorded position of the pointer
TQString mTipText; // Text to display in a bubble when possible
AmorBubble *mBubble; // Text bubble
AmorTips mTips; // Tips to display in the bubble
bool mInDesktopBottom; // the animation is not on top of the
// title bar, but at the bottom of the desktop
AmorConfig mConfig; // Configuration parameters
bool mForceHideAmorWidget;
TQPtrQueue<QueueItem> mTipsQueue; // GP: tips queue
};
//---------------------------------------------------------------------------
class AmorSessionWidget : public TQWidget
{
Q_OBJECT
TQ_OBJECT
public:
AmorSessionWidget();
~AmorSessionWidget() {};
public slots:
void wm_saveyourself();
};
#endif // AMOR_H