15.1.344. tablet_qt/menu/whiskertestmenu.h

/*
    Copyright (C) 2012, University of Cambridge, Department of Psychiatry.
    Created by Rudolf Cardinal (rnc1001@cam.ac.uk).

    This file is part of CamCOPS.

    CamCOPS is free software: you can redistribute it and/or modify
    it under the terms of the GNU General Public License as published by
    the Free Software Foundation, either version 3 of the License, or
    (at your option) any later version.

    CamCOPS is distributed in the hope that it will be useful,
    but WITHOUT ANY WARRANTY; without even the implied warranty of
    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
    GNU General Public License for more details.

    You should have received a copy of the GNU General Public License
    along with CamCOPS. If not, see <https://www.gnu.org/licenses/>.
*/

#pragma once
#include <QTextStream>

#include "menulib/menuwindow.h"
class LogBox;
class WhiskerInboundMessage;
class WhiskerManager;

class WhiskerTestMenu : public MenuWindow
{
    Q_OBJECT

public:
    WhiskerTestMenu(CamcopsApp& app);
    virtual QString title() const override;

protected:
    virtual void makeItems() override;
    OpenableWidget* configureWhisker(CamcopsApp& app);
    void connectWhisker();
    void disconnectWhisker();
    void testWhiskerNetworkLatency();
    void runDemoWhiskerTask();
protected slots:
    void demoWhiskerTaskMain();
    void eventReceived(const WhiskerInboundMessage& msg);
    void keyEventReceived(const WhiskerInboundMessage& msg);
    void clientMessageReceived(const WhiskerInboundMessage& msg);
    void otherMessageReceived(const WhiskerInboundMessage& msg);
    void taskCancelled();

protected:
    class StatusStream : public QTextStream
    {
    public:
        StatusStream(WhiskerTestMenu& parent);
        ~StatusStream();

    private:
        QString m_str;
        WhiskerTestMenu& m_parent;
    };

    void ensureWhiskerManager();
    void ensureWhiskerConnected();
    void ensureLogBox();
    void deleteLogBox();
    void status(const QString& msg);
    StatusStream stream();
    QVariant getValue(const QVariant* member) const;
    bool setValue(QVariant* member, const QVariant& value);
    // ... returns: changed?

protected:
    QPointer<WhiskerManager> m_whisker;
    QPointer<LogBox> m_logbox;

    QVariant m_host;
    QVariant m_main_port;

    QVariant m_display_num;
    QVariant m_use_video;
    QVariant m_use_two_videos;
    QVariant m_media_directory;
    QVariant m_bmp_filename_1;
    QVariant m_bmp_filename_2;
    QVariant m_video_filename_1;
    QVariant m_video_filename_2;
    QVariant m_input_line_num;
    QVariant m_output_line_num;
};