add signal/slot implementation 'framework'

git-svn-id: svn://svn.lyx.org/lyx/lyx-devel/trunk@21781 a592a061-630c-0410-9148-cb99ea01b6c8
This commit is contained in:
André Pönitz 2007-11-25 19:46:22 +00:00
parent 75ac7cb3ad
commit 65f9f3c22b
4 changed files with 173 additions and 0 deletions

View File

@ -77,6 +77,9 @@ liblyxsupport_la_SOURCES = \
strfwd.h \
Systemcall.cpp \
Systemcall.h \
SignalSlot.cpp \
SignalSlot.h \
SignalSlotPrivate.h \
tempname.cpp \
textutils.h \
Translator.h \

View File

@ -0,0 +1,72 @@
// -*- C++ -*-
/**
* \file SignalSlot.cpp
* This file is part of LyX, the document processor.
* Licence details can be found in the file COPYING.
*
* \author André Pönitz
*
* Full author contact details are available in file CREDITS.
*/
#include "SignalSlot.h"
#include "SignalSlotPrivate.h"
namespace lyx {
/////////////////////////////////////////////////////////////////////
//
// Signal
//
/////////////////////////////////////////////////////////////////////
Signal::Signal()
: impl(new SignalImpl)
{}
Signal::~Signal()
{
delete impl;
}
void Signal::fire()
{
impl->fire();
}
/////////////////////////////////////////////////////////////////////
//
// Slot
//
/////////////////////////////////////////////////////////////////////
void SlotImpl::called()
{
owner_.called();
}
Slot::Slot()
: impl(new SlotImpl(*this))
{}
Slot::~Slot()
{
delete impl;
}
/////////////////////////////////////////////////////////////////////
//
// Connect
//
/////////////////////////////////////////////////////////////////////
void connect(Signal & sig, Slot & slot)
{
QObject::connect(sig.impl, SIGNAL(fire()), slot.impl, SLOT(called()));
}
} // namespace lyx

51
src/support/SignalSlot.h Normal file
View File

@ -0,0 +1,51 @@
// -*- C++ -*-
/**
* \file SignalSlot.h
* This file is part of LyX, the document processor.
* Licence details can be found in the file COPYING.
*
* \author André Pönitz
*
* Full author contact details are available in file CREDITS.
*/
#ifndef SIGNALSLOT_H
#define SIGNALSLOT_H
namespace lyx {
class Slot;
class SlotImpl;
class SignalImpl;
class Signal
{
public:
Signal();
~Signal();
void fire();
private:
Signal(Signal const &);
void operator=(Signal const &);
SignalImpl * impl;
friend void connect(Signal & sig, Slot & slot);
};
class Slot
{
public:
Slot();
virtual ~Slot();
virtual void called() {}
private:
Slot(Slot const &);
void operator=(Slot const &);
SlotImpl * impl;
friend void connect(Signal & sig, Slot & slot);
};
void connect(Signal & sig, Slot & slot);
} // namespace lyx
#endif

View File

@ -0,0 +1,47 @@
// -*- C++ -*-
/**
* \file SignalSlotPrivate.h
* This file is part of LyX, the document processor.
* Licence details can be found in the file COPYING.
*
* \author André Pönitz
*
* Full author contact details are available in file CREDITS.
*/
#ifndef SIGNALSLOTPRIVATE_H
#define SIGNALSLOTPRIVATE_H
#include <QObject>
namespace lyx {
class SignalImpl : public QObject
{
Q_OBJECT
public:
SignalImpl() {}
virtual ~SignalImpl() {}
Q_SIGNALS:
void fire();
friend class Signal;
};
class Slot;
class SlotImpl : public QObject
{
Q_OBJECT
public:
SlotImpl(Slot & owner) : owner_(owner) {}
virtual ~SlotImpl() {}
public Q_SLOTS:
void called();
private:
Slot & owner_;
};
} // namespace lyx
#endif // SIGNALSLOTPRIVATE_H