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.
297 lines
8.4 KiB
297 lines
8.4 KiB
/****************************************************************************
|
|
|
|
KHotKeys
|
|
|
|
Copyright (C) 1999-2001 Lubos Lunak <l.lunak@kde.org>
|
|
|
|
Distributed under the terms of the GNU General Public License version 2.
|
|
|
|
****************************************************************************/
|
|
|
|
#ifndef _CONDITIONS_H_
|
|
#define _CONDITIONS_H_
|
|
|
|
#include <qobject.h>
|
|
#include <qptrlist.h>
|
|
#include <qstring.h>
|
|
|
|
#include "khotkeysglobal.h"
|
|
#include "windows.h"
|
|
|
|
#include <X11/Xlib.h>
|
|
#include <fixx11h.h>
|
|
|
|
class KConfig;
|
|
|
|
namespace KHotKeys
|
|
{
|
|
|
|
class Action_data_base;
|
|
class Action_data;
|
|
class Condition_list_base;
|
|
|
|
class KDE_EXPORT Condition
|
|
{
|
|
public:
|
|
Condition( Condition_list_base* parent_P );
|
|
Condition( KConfig& cfg_P, Condition_list_base* parent_P );
|
|
virtual ~Condition();
|
|
virtual bool match() const = 0;
|
|
virtual void updated() const; // called when the condition changes
|
|
virtual void cfg_write( KConfig& cfg_P ) const = 0;
|
|
virtual const QString description() const = 0;
|
|
virtual Condition* copy( Condition_list_base* parent_P ) const = 0;
|
|
const Condition_list_base* parent() const;
|
|
Condition_list_base* parent();
|
|
static Condition* create_cfg_read( KConfig& cfg_P, Condition_list_base* parent_P );
|
|
protected:
|
|
Condition_list_base* const _parent;
|
|
KHOTKEYS_DISABLE_COPY( Condition );
|
|
};
|
|
|
|
class KDE_EXPORT Condition_list_base
|
|
: public Condition, public QPtrList< Condition > // inheritance ?
|
|
{
|
|
typedef Condition base;
|
|
public:
|
|
Condition_list_base( Condition_list_base* parent_P );
|
|
Condition_list_base( const QPtrList< Condition >& children_P,
|
|
Condition_list_base* parent_P );
|
|
Condition_list_base( KConfig& cfg_P, Condition_list_base* parent_P );
|
|
virtual ~Condition_list_base();
|
|
virtual void cfg_write( KConfig& cfg_P ) const;
|
|
virtual bool accepts_children() const;
|
|
typedef QPtrListIterator< Condition > Iterator;
|
|
};
|
|
|
|
class KDE_EXPORT Condition_list
|
|
: public Condition_list_base
|
|
{
|
|
typedef Condition_list_base base;
|
|
public:
|
|
Condition_list( const QString& comment_P, Action_data_base* data_P );
|
|
Condition_list( KConfig& cfg_P, Action_data_base* data_P );
|
|
void cfg_write( KConfig& cfg_P ) const;
|
|
Condition_list* copy( Action_data_base* data_P ) const;
|
|
virtual bool match() const;
|
|
const QString& comment() const;
|
|
void set_data( Action_data_base* data_P );
|
|
virtual void updated() const;
|
|
virtual Condition_list* copy( Condition_list_base* parent_P ) const;
|
|
virtual const QString description() const;
|
|
private:
|
|
QString _comment;
|
|
Action_data_base* data;
|
|
};
|
|
|
|
class KDE_EXPORT Active_window_condition
|
|
: public QObject, public Condition
|
|
{
|
|
Q_OBJECT
|
|
typedef Condition base;
|
|
public:
|
|
Active_window_condition( Windowdef_list* window_P, Condition_list_base* parent_P );
|
|
Active_window_condition( KConfig& cfg_P, Condition_list_base* parent_P );
|
|
virtual ~Active_window_condition();
|
|
virtual bool match() const;
|
|
virtual void cfg_write( KConfig& cfg_P ) const;
|
|
const Windowdef_list* window() const;
|
|
#ifndef COVARIANT_RETURN_BROKEN
|
|
virtual Active_window_condition* copy( Condition_list_base* parent_P ) const;
|
|
#else
|
|
virtual Condition* copy( Condition_list_base* parent_P ) const;
|
|
#endif
|
|
virtual const QString description() const;
|
|
public slots:
|
|
void active_window_changed( WId );
|
|
private:
|
|
void init();
|
|
void set_match();
|
|
Windowdef_list* _window;
|
|
bool is_match;
|
|
};
|
|
|
|
class KDE_EXPORT Existing_window_condition
|
|
: public QObject, public Condition
|
|
{
|
|
Q_OBJECT
|
|
typedef Condition base;
|
|
public:
|
|
Existing_window_condition( Windowdef_list* window_P, Condition_list_base* parent_P );
|
|
Existing_window_condition( KConfig& cfg_P, Condition_list_base* parent_P );
|
|
virtual ~Existing_window_condition();
|
|
virtual bool match() const;
|
|
virtual void cfg_write( KConfig& cfg_P ) const;
|
|
const Windowdef_list* window() const;
|
|
#ifndef COVARIANT_RETURN_BROKEN
|
|
virtual Existing_window_condition* copy( Condition_list_base* parent_P ) const;
|
|
#else
|
|
virtual Condition* copy( Condition_list_base* parent_P ) const;
|
|
#endif
|
|
virtual const QString description() const;
|
|
public slots:
|
|
void window_added( WId w_P );
|
|
void window_removed( WId w_P );
|
|
private:
|
|
void init();
|
|
void set_match( WId w_P = None );
|
|
Windowdef_list* _window;
|
|
bool is_match;
|
|
};
|
|
|
|
class KDE_EXPORT Not_condition
|
|
: public Condition_list_base
|
|
{
|
|
typedef Condition_list_base base;
|
|
public:
|
|
Not_condition( Condition_list_base* parent_P );
|
|
Not_condition( KConfig& cfg_P, Condition_list_base* parent_P );
|
|
virtual bool match() const;
|
|
virtual void cfg_write( KConfig& cfg_P ) const;
|
|
virtual Not_condition* copy( Condition_list_base* parent_P ) const;
|
|
virtual const QString description() const;
|
|
const Condition* condition() const;
|
|
virtual bool accepts_children() const;
|
|
};
|
|
|
|
class KDE_EXPORT And_condition
|
|
: public Condition_list_base
|
|
{
|
|
typedef Condition_list_base base;
|
|
public:
|
|
And_condition( Condition_list_base* parent_P );
|
|
And_condition( KConfig& cfg_P, Condition_list_base* parent_P );
|
|
virtual bool match() const;
|
|
virtual void cfg_write( KConfig& cfg_P ) const;
|
|
virtual And_condition* copy( Condition_list_base* parent_P ) const;
|
|
virtual const QString description() const;
|
|
};
|
|
|
|
class KDE_EXPORT Or_condition
|
|
: public Condition_list_base
|
|
{
|
|
typedef Condition_list_base base;
|
|
public:
|
|
Or_condition( Condition_list_base* parent_P );
|
|
Or_condition( KConfig& cfg_P, Condition_list_base* parent_P );
|
|
virtual bool match() const;
|
|
virtual void cfg_write( KConfig& cfg_P ) const;
|
|
virtual Or_condition* copy( Condition_list_base* parent_P ) const;
|
|
virtual const QString description() const;
|
|
};
|
|
|
|
//***************************************************************************
|
|
// Inline
|
|
//***************************************************************************
|
|
|
|
// Condition
|
|
|
|
inline
|
|
const Condition_list_base* Condition::parent() const
|
|
{
|
|
return _parent;
|
|
}
|
|
|
|
inline
|
|
Condition_list_base* Condition::parent()
|
|
{
|
|
return _parent;
|
|
}
|
|
|
|
// Condition_list_base
|
|
|
|
inline
|
|
Condition_list_base::Condition_list_base( Condition_list_base* parent_P )
|
|
: Condition( parent_P ), QPtrList< Condition >()
|
|
{
|
|
}
|
|
|
|
inline
|
|
Condition_list_base::Condition_list_base( const QPtrList< Condition >& children_P,
|
|
Condition_list_base* parent_P )
|
|
: Condition( parent_P ), QPtrList< Condition >( children_P )
|
|
{
|
|
}
|
|
|
|
// Condition_list
|
|
|
|
inline
|
|
Condition_list::Condition_list( const QString& comment_P, Action_data_base* data_P )
|
|
: Condition_list_base( NULL ), _comment( comment_P ), data( data_P )
|
|
{
|
|
}
|
|
|
|
inline
|
|
const QString& Condition_list::comment() const
|
|
{
|
|
return _comment;
|
|
}
|
|
|
|
// Active_window_condition
|
|
|
|
inline
|
|
Active_window_condition::Active_window_condition( Windowdef_list* window_P,
|
|
Condition_list_base* parent_P )
|
|
: Condition( parent_P ), _window( window_P )
|
|
{
|
|
init();
|
|
set_match();
|
|
}
|
|
|
|
inline
|
|
const Windowdef_list* Active_window_condition::window() const
|
|
{
|
|
return _window;
|
|
}
|
|
|
|
// Existing_window_condition
|
|
|
|
inline
|
|
Existing_window_condition::Existing_window_condition( Windowdef_list* window_P,
|
|
Condition_list_base* parent_P )
|
|
: Condition( parent_P ), _window( window_P ), is_match( false )
|
|
{
|
|
init();
|
|
set_match();
|
|
}
|
|
|
|
inline
|
|
const Windowdef_list* Existing_window_condition::window() const
|
|
{
|
|
return _window;
|
|
}
|
|
|
|
// Not_condition
|
|
|
|
inline
|
|
Not_condition::Not_condition( Condition_list_base* parent_P )
|
|
: Condition_list_base( parent_P )
|
|
{
|
|
}
|
|
|
|
inline
|
|
const Condition* Not_condition::condition() const
|
|
{
|
|
return getFirst();
|
|
}
|
|
|
|
// And_condition
|
|
|
|
inline
|
|
And_condition::And_condition( Condition_list_base* parent_P )
|
|
: Condition_list_base( parent_P )
|
|
{
|
|
}
|
|
|
|
// Or_condition
|
|
|
|
inline
|
|
Or_condition::Or_condition( Condition_list_base* parent_P )
|
|
: Condition_list_base( parent_P )
|
|
{
|
|
}
|
|
|
|
} // namespace KHotKeys
|
|
|
|
#endif
|