diff --git a/clients/tde/src/app/views/Makefile.am b/clients/tde/src/app/views/Makefile.am index fcb1de8..1ab5bf9 100644 --- a/clients/tde/src/app/views/Makefile.am +++ b/clients/tde/src/app/views/Makefile.am @@ -1,5 +1,4 @@ INCLUDES = -I$(top_srcdir)/src/part $(all_includes) $(KDE_INCLUDES)/tde METASOURCES = AUTO noinst_LTLIBRARIES = libinstrumentview.la -libinstrumentview_la_SOURCES = instrumentview.cpp - +libinstrumentview_la_SOURCES = instrumentview.cpp \ No newline at end of file diff --git a/clients/tde/src/app/views/instrumentview.cpp b/clients/tde/src/app/views/instrumentview.cpp index 4a9acf9..e9f3f51 100644 --- a/clients/tde/src/app/views/instrumentview.cpp +++ b/clients/tde/src/app/views/instrumentview.cpp @@ -9,6 +9,7 @@ #include #include #include +#include namespace RemoteLab { @@ -19,6 +20,7 @@ InstrumentView::InstrumentView(const TQString &library, TQWidget *parentWidget, , m_fixedSize( false ) , m_canary( NULL ) { + m_mainForm = dynamic_cast(parentWidget); init(); } @@ -29,6 +31,7 @@ InstrumentView::InstrumentView(const TQString &library, const TQString &caption, , m_fixedSize( false ) , m_canary( NULL ) { + m_mainForm = dynamic_cast(parentWidget); init(); } @@ -47,6 +50,7 @@ void InstrumentView::init() { } else { m_instrumentPart = (InstrumentPart *)factory->create(TQT_TQOBJECT(this), "part", "KParts::RemoteInstrumentPart"); + m_instrumentPart->setMDIMainForm(m_mainForm); setIcon(SmallIcon(m_libraryName)); connect(m_instrumentPart, SIGNAL(statusMessageSet(const TQString&)), this, SLOT(setStatusMessage(const TQString&))); connect(m_instrumentPart, SIGNAL(usingFixedSizeChanged(bool)), this, SLOT(setUsingFixedSize(bool))); diff --git a/clients/tde/src/app/views/instrumentview.h b/clients/tde/src/app/views/instrumentview.h index fa4551a..a866b9d 100644 --- a/clients/tde/src/app/views/instrumentview.h +++ b/clients/tde/src/app/views/instrumentview.h @@ -46,6 +46,7 @@ class InstrumentView : public KMdiChildView private: void init(); + KMdiMainFrm* m_mainForm; TQString m_libraryName; RemoteLab::InstrumentPart *m_instrumentPart; bool m_fixedSize; diff --git a/clients/tde/src/part/fpgaview/Makefile.am b/clients/tde/src/part/fpgaview/Makefile.am index 58c8985..a291ae1 100644 --- a/clients/tde/src/part/fpgaview/Makefile.am +++ b/clients/tde/src/part/fpgaview/Makefile.am @@ -7,5 +7,5 @@ KDE_ICON = libremotelab_fpgaviewer # Part kde_module_LTLIBRARIES = libremotelab_fpgaviewer.la libremotelab_fpgaviewer_la_LIBADD = ../../widgets/libtracewidget.la ../../widgets/libfloatspinbox.la $(LIB_KFILE) $(LIB_KPARTS) $(LIB_TDEUI) $(LIB_QT) -ltdekrbsocket -ltqtrla -libremotelab_fpgaviewer_la_LDFLAGS = $(all_libraries) $(KDE_PLUGIN) $(LIB_TDECORE) $(LIB_TDEUI) -lkio -ltdefx +libremotelab_fpgaviewer_la_LDFLAGS = $(all_libraries) $(KDE_PLUGIN) $(LIB_TDECORE) $(LIB_TDEUI) -lkio -ltdefx -lkmdi libremotelab_fpgaviewer_la_SOURCES = part.cpp layout.ui diff --git a/clients/tde/src/part/fpgaview/part.cpp b/clients/tde/src/part/fpgaview/part.cpp index 0fab034..6498b3d 100644 --- a/clients/tde/src/part/fpgaview/part.cpp +++ b/clients/tde/src/part/fpgaview/part.cpp @@ -28,6 +28,7 @@ #include #include //::start() #include +#include #include #include #include @@ -53,10 +54,7 @@ #include "floatspinbox.h" #include "layout.h" -// RAJA UNCOMMENT ME -//#define SERVER_TIMEOUT_MS 10000 -// RAJA DEBUG ONLY -#define SERVER_TIMEOUT_MS 100000 +#define SERVER_TIMEOUT_MS 10000 #define FPGA_COMM_TIMEOUT_MS 500 #define FPGA_DATA_PROCESSING_TIMEOUT_MS 2500 @@ -553,6 +551,22 @@ void FPGA7Segment::drawSegment(const TQPoint &pos, char segmentNo, TQPainter &p, #undef DARK } +ImageViewerWindow::ImageViewerWindow(TQString caption, TQWidget *parent, const char *name) + : KMdiChildView(caption, parent, name) +{ + TQGridLayout* layout = new TQGridLayout(this); + m_label = new TQLabel(this); + layout->addWidget(m_label, 0, 0); +} + +ImageViewerWindow::~ImageViewerWindow() { + // +} + +void ImageViewerWindow::setPixmap(TQPixmap pixmap) { + m_label->setPixmap(pixmap); +} + namespace RemoteLab { typedef KParts::GenericFactory Factory; @@ -567,7 +581,8 @@ FPGAViewPart::FPGAViewPart(TQWidget *parentWidget, const char *widgetName, TQObj m_commHandlerState(0), m_commHandlerMode(0), m_connectionActiveAndValid(false), m_tickerState(0), m_remoteInputModeEnabled(false), m_4bitInputValue(0), m_4bitOutputValue(0), m_8bitInputValue(0), m_8bitOutputValue(0), m_16bitInputValue(0), m_16bitOutputValue(0), m_7segDigit3OutputValue(0xffffffff), m_7segDigit2OutputValue(0xffffffff), m_7segDigit1OutputValue(0xffffffff), m_7segDigit0OutputValue(0xffffffff), - m_batchOutputFile(NULL), m_dataOutputFile(NULL) + m_batchOutputFile(NULL), m_dataOutputFile(NULL), + m_inputImageViewer(NULL), m_outputImageViewer(NULL) { // Initialize important base class variables m_clientLibraryName = CLIENT_LIBRARY; @@ -718,6 +733,17 @@ FPGAViewPart::FPGAViewPart(TQWidget *parentWidget, const char *widgetName, TQObj } FPGAViewPart::~FPGAViewPart() { + // Close any active image display windows + m_interfaceMode = BasicInterfaceMode; + if (m_inputImageViewer) { + mdiMainForm()->closeWindow(m_inputImageViewer); + m_inputImageViewer = NULL; + } + if (m_outputImageViewer) { + mdiMainForm()->closeWindow(m_outputImageViewer); + m_outputImageViewer = NULL; + } + if (m_connectionMutex->locked()) { printf("[WARNING] Exiting when data transfer still in progress!\n\r"); fflush(stdout); } @@ -877,6 +903,15 @@ void FPGAViewPart::processLockouts() { m_base->groupDataProcessing->hide(); m_base->groupInputImage->hide(); m_base->groupOutputImage->hide(); + + if (m_inputImageViewer) { + mdiMainForm()->closeWindow(m_inputImageViewer); + m_inputImageViewer = NULL; + } + if (m_outputImageViewer) { + mdiMainForm()->closeWindow(m_outputImageViewer); + m_outputImageViewer = NULL; + } } if (m_interfaceMode == IntermediateInterfaceMode) { m_modeBasicEnabled->setChecked(false); @@ -889,6 +924,15 @@ void FPGAViewPart::processLockouts() { m_base->groupDataProcessing->hide(); m_base->groupInputImage->hide(); m_base->groupOutputImage->hide(); + + if (m_inputImageViewer) { + mdiMainForm()->closeWindow(m_inputImageViewer); + m_inputImageViewer = NULL; + } + if (m_outputImageViewer) { + mdiMainForm()->closeWindow(m_outputImageViewer); + m_outputImageViewer = NULL; + } } if (m_interfaceMode == AdvancedInterfaceMode) { m_modeBasicEnabled->setChecked(false); @@ -901,6 +945,17 @@ void FPGAViewPart::processLockouts() { m_base->groupDataProcessing->show(); m_base->groupInputImage->show(); m_base->groupOutputImage->show(); + + if (!m_inputImageViewer) { + m_inputImageViewer = new ImageViewerWindow(i18n("Remote FPGA Input Image")); + mdiMainForm()->addWindow(m_inputImageViewer); + m_inputImageViewer->resize(m_base->ImageInputLabel->size()); + } + if (!m_outputImageViewer) { + m_outputImageViewer = new ImageViewerWindow(i18n("Remote FPGA Output Image")); + mdiMainForm()->addWindow(m_outputImageViewer); + m_outputImageViewer->resize(m_base->ImageOutputLabel->size()); + } } if ((m_base->batchTestInputFile->url() != "") && (m_base->batchTestOutputFile->url() != "") && (m_commHandlerMode == 0) && (m_connectionActiveAndValid == true)) { @@ -1320,6 +1375,7 @@ void FPGAViewPart::updateDisplay() { // Show image in GUI TQPixmap inputImagePixmap(m_dataInputImage); m_base->ImageInputLabel->setPixmap(inputImagePixmap); + m_inputImageViewer->setPixmap(inputImagePixmap); // Populate m_dataByteArray with image data int x; int y; @@ -1388,6 +1444,7 @@ void FPGAViewPart::updateDisplay() { // Write data straight to file m_dataOutputFile->writeBlock(recData); m_base->ImageOutputLabel->setPixmap(TQPixmap()); + m_outputImageViewer->setPixmap(TQPixmap()); } else { // Write data to image, then write image to file @@ -1403,6 +1460,7 @@ void FPGAViewPart::updateDisplay() { } TQPixmap outputImagePixmap(outputImage); m_base->ImageOutputLabel->setPixmap(outputImagePixmap); + m_outputImageViewer->setPixmap(outputImagePixmap); outputImage.save(m_dataOutputFile, "PNG"); } diff --git a/clients/tde/src/part/fpgaview/part.h b/clients/tde/src/part/fpgaview/part.h index 572cadc..fbb5bf2 100644 --- a/clients/tde/src/part/fpgaview/part.h +++ b/clients/tde/src/part/fpgaview/part.h @@ -35,6 +35,8 @@ #include #include +#include + #include class KAboutData; @@ -125,6 +127,21 @@ class Q_EXPORT FPGA7Segment : public TQFrame FPGA7SegmentPrivate *d; }; +class ImageViewerWindow : public KMdiChildView +{ + Q_OBJECT + + public: + ImageViewerWindow(TQString caption, TQWidget* parent=0, const char* name=0); + ~ImageViewerWindow(); + + public: + void setPixmap(TQPixmap); + + private: + TQLabel* m_label; +}; + typedef TQValueList UnsignedIntegerList; namespace RemoteLab @@ -222,6 +239,9 @@ namespace RemoteLab TQImage m_dataInputImage; TQFile* m_dataOutputFile; TQByteArray m_dataByteArray; + + ImageViewerWindow* m_inputImageViewer; + ImageViewerWindow* m_outputImageViewer; }; } diff --git a/lib/libtqtrla/src/tqtrla.cpp b/lib/libtqtrla/src/tqtrla.cpp index 75bae5e..34b78d0 100644 --- a/lib/libtqtrla/src/tqtrla.cpp +++ b/lib/libtqtrla/src/tqtrla.cpp @@ -48,7 +48,7 @@ namespace KParts RemoteInstrumentPart::RemoteInstrumentPart(TQObject *parent, const char *name) : Part( parent, name ), - m_socket(NULL), connToServerConnecting(false), connToServerState(-1), connToServerTimeoutTimer(NULL), m_fixedSize(false) + m_socket(NULL), connToServerConnecting(false), connToServerState(-1), connToServerTimeoutTimer(NULL), m_fixedSize(false), m_mdiMainForm(NULL) { d = new RemoteInstrumentPartPrivate; @@ -309,6 +309,14 @@ namespace KParts } } + void RemoteInstrumentPart::setMDIMainForm(KMdiMainFrm* form) { + m_mdiMainForm = form; + } + + KMdiMainFrm* RemoteInstrumentPart::mdiMainForm() { + return m_mdiMainForm; + } + void RemoteInstrumentPart::connectionFinishedCallback() { // } diff --git a/lib/libtqtrla/src/tqtrla.h b/lib/libtqtrla/src/tqtrla.h index e46e2fc..ad6eef2 100644 --- a/lib/libtqtrla/src/tqtrla.h +++ b/lib/libtqtrla/src/tqtrla.h @@ -40,6 +40,8 @@ typedef TQValueList TQInt16List; // ============================================================================= +class KMdiMainFrm; + namespace KParts { class RemoteInstrumentPartPrivate; @@ -68,6 +70,8 @@ namespace KParts public: int connectToServer(TQString server); void disconnectFromServer(); + void setMDIMainForm(KMdiMainFrm* form); + KMdiMainFrm* mdiMainForm(); private slots: void finishConnectingToServer(); @@ -96,6 +100,7 @@ namespace KParts int connToServerState; TQTimer *connToServerTimeoutTimer; bool m_fixedSize; + KMdiMainFrm* m_mdiMainForm; private: RemoteInstrumentPartPrivate *d;