/* GNUPLOT - QtGnuplotEvent.cpp */
/*[
* Copyright 2009 Jrme Lodewyck
*
* Permission to use, copy, and distribute this software and its
* documentation for any purpose with or without fee is hereby granted,
* provided that the above copyright notice appear in all copies and
* that both that copyright notice and this permission notice appear
* in supporting documentation.
*
* Permission to modify the software is granted, but not the right to
* distribute the complete modified source code. Modifications are to
* be distributed as patches to the released version. Permission to
* distribute binaries produced by compiling modified sources is granted,
* provided you
* 1. distribute the corresponding source modifications from the
* released version in the form of a patch file along with the binaries,
* 2. add special version identification to distinguish your version
* in addition to the base release version number,
* 3. provide your name and address as the primary contact for the
* support of your modified version, and
* 4. retain our contact information in regard to use of the base
* software.
* Permission to distribute the released version of the source code along
* with corresponding source modifications in the form of a patch file is
* granted with same provisions 2 through 4 for binary distributions.
*
* This software is provided "as is" without express or implied warranty
* to the extent permitted by applicable law.
*
*
* Alternatively, the contents of this file may be used under the terms of the
* GNU General Public License Version 2 or later (the "GPL"), in which case the
* provisions of GPL are applicable instead of those above. If you wish to allow
* use of your version of this file only under the terms of the GPL and not
* to allow others to use your version of this file under the above gnuplot
* license, indicate your decision by deleting the provisions above and replace
* them with the notice and other provisions required by the GPL. If you do not
* delete the provisions above, a recipient may use your version of this file
* under either the GPL or the gnuplot license.
]*/
#include "QtGnuplotEvent.h"
#include "QtGnuplotWidget.h"
extern "C" {
#include "../mousecmn.h"
}
#include
QString QtGnuplotEventReceiver::serverName()
{
if (m_eventHandler)
return m_eventHandler->serverName();
return QString();
}
QtGnuplotEventHandler::QtGnuplotEventHandler(QObject* parent, const QString& socket)
: QObject(parent)
{
m_blockSize = 0;
m_socket = 0;
m_server = new QLocalServer(this);
if (!m_server->listen(socket))
qDebug() serverName();
}
void QtGnuplotEventHandler::newConnection()
{
m_socket = m_server->nextPendingConnection();
connect(m_socket, SIGNAL(readyRead()), this, SLOT(readEvent()));
connect(m_socket, SIGNAL(disconnected()), this, SLOT(connectionClosed()));
emit(connected());
}
void QtGnuplotEventHandler::connectionClosed()
{
emit(disconnected());
}
void QtGnuplotEventHandler::readEvent()
{
QDataStream in(m_socket);
in.setVersion(QDataStream::Qt_4_4);
QtGnuplotEventReceiver* receiver = dynamic_cast(parent());
if (!receiver)
{
qDebug() bytesAvailable() < (int)sizeof(qint32))
return;
in >> m_blockSize;
}
// Break if the message is not entirely received yet
if (m_socket->bytesAvailable() < m_blockSize)
return;
// Process the message
int remaining = m_socket->bytesAvailable() - m_blockSize;
while (m_socket->bytesAvailable() > remaining)
{
int type;
in >> type;
if ((type < 1000) || (type > GEDone))
{
// FIXME EAM - At this point the program cannot recover and
// if we try to continue it will eventually become a zombie.
// Better to just exit explicitly right now.
qDebug() processEvent(QtGnuplotEventType(type), in);
}
m_blockSize = 0;
}
}
bool QtGnuplotEventHandler::postTermEvent(int type, int mx, int my, int par1, int par2, QtGnuplotWidget* widget)
{
if ((m_socket == 0) || (m_socket->state() != QLocalSocket::ConnectedState))
return false;
if (widget && !widget->isActive()) {
if (type == GE_buttonrelease) {
// qDebug()