[ Web Proxy ]
URL:
Viewing: https://raw.githubusercontent.com/gnuplot/gnuplot/5.5/src/qtterminal/QtGnuplotEvent.cpp [Back]  [Original]

/* 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() 

Web Proxy Viewer  |  New URL  |  Original Page