]> git.lyx.org Git - features.git/commitdiff
add signal/slot implementation 'framework'
authorAndré Pönitz <poenitz@gmx.net>
Sun, 25 Nov 2007 19:46:22 +0000 (19:46 +0000)
committerAndré Pönitz <poenitz@gmx.net>
Sun, 25 Nov 2007 19:46:22 +0000 (19:46 +0000)
git-svn-id: svn://svn.lyx.org/lyx/lyx-devel/trunk@21781 a592a061-630c-0410-9148-cb99ea01b6c8

src/support/Makefile.am
src/support/SignalSlot.cpp [new file with mode: 0644]
src/support/SignalSlot.h [new file with mode: 0644]
src/support/SignalSlotPrivate.h [new file with mode: 0644]

index 0d506dfaec781b567c5aa097c608b1b1cb4700b8..2e9a663725607827ecb1e8ac2a2732e88ff97bd5 100644 (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 \
diff --git a/src/support/SignalSlot.cpp b/src/support/SignalSlot.cpp
new file mode 100644 (file)
index 0000000..27a62d2
--- /dev/null
@@ -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
diff --git a/src/support/SignalSlot.h b/src/support/SignalSlot.h
new file mode 100644 (file)
index 0000000..4290a40
--- /dev/null
@@ -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
diff --git a/src/support/SignalSlotPrivate.h b/src/support/SignalSlotPrivate.h
new file mode 100644 (file)
index 0000000..5550054
--- /dev/null
@@ -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