From: <ai...@us...> - 2009-03-06 16:40:41
|
Revision: 9679 http://plplot.svn.sourceforge.net/plplot/?rev=9679&view=rev Author: airwin Date: 2009-03-06 16:40:31 +0000 (Fri, 06 Mar 2009) Log Message: ----------- AWI for Alban Rochel. Make the qtwidget device into a plug-in device accessible from libplplot and dynamically loaded by that library. Split the previous rasterqt device into bmpqt, jpgqt, pngqt, ppmqt, and tiffqt devices with corresponding PLD_bmpqt, PLD_jpgqt, etc., control options. Modified Paths: -------------- trunk/cmake/modules/drivers-init.cmake trunk/cmake/modules/qt.cmake trunk/config.h.cmake trunk/drivers/CMakeLists.txt trunk/drivers/qt.cpp trunk/drivers/qt.h trunk/include/drivers.h trunk/include/plDevs.h.cmake trunk/include/plcore.h trunk/plplot_test/plplot-test.sh.cmake Modified: trunk/cmake/modules/drivers-init.cmake =================================================================== --- trunk/cmake/modules/drivers-init.cmake 2009-03-06 01:39:42 UTC (rev 9678) +++ trunk/cmake/modules/drivers-init.cmake 2009-03-06 16:40:31 UTC (rev 9679) @@ -86,7 +86,11 @@ "epsqt:qt:OFF" "pdfqt:qt:OFF" "qtwidget:qt:OFF" -"rasterqt:qt:OFF" +"bmpqt:qt:OFF" +"jpgqt:qt:OFF" +"pngqt:qt:OFF" +"ppmqt:qt:OFF" +"tiffqt:qt:OFF" "svgqt:qt:OFF" "gif:gd:ON" "jpeg:gd:ON" Modified: trunk/cmake/modules/qt.cmake =================================================================== --- trunk/cmake/modules/qt.cmake 2009-03-06 01:39:42 UTC (rev 9678) +++ trunk/cmake/modules/qt.cmake 2009-03-06 16:40:31 UTC (rev 9679) @@ -1,11 +1,15 @@ find_package(Qt4) -if(PLD_rasterqt OR PLD_epsqt OR PLD_pdfqt OR PLD_qtwidget OR PLD_svgqt) +if(PLD_bmpqt OR PLD_jpgqt OR PLD_pngqt OR PLD_ppmqt OR PLD_tiffqt OR PLD_epsqt OR PLD_pdfqt OR PLD_qtwidget OR PLD_svgqt) if(PLD_svgqt AND ${QT_VERSION_MINOR} GREATER 2) set(QT_USE_QTSVG 1) endif(PLD_svgqt AND ${QT_VERSION_MINOR} GREATER 2) include(${QT_USE_FILE}) if(NOT QT4_FOUND) - set(PLD_rasterqt OFF CACHE BOOL "Enable Qt raster device" FORCE) + set(PLD_bmpqt OFF CACHE BOOL "Enable Qt Windows bmp device" FORCE) + set(PLD_jpgqt OFF CACHE BOOL "Enable Qt jpg device" FORCE) + set(PLD_pngqt OFF CACHE BOOL "Enable Qt png device" FORCE) + set(PLD_ppmqt OFF CACHE BOOL "Enable Qt ppm device" FORCE) + set(PLD_tiffqt OFF CACHE BOOL "Enable Qt tiff device" FORCE) set(PLD_epsqt OFF CACHE BOOL "Enable Qt EPS device" FORCE) set(PLD_pdfqt OFF CACHE BOOL "Enable Qt PDF device" FORCE) set(PLD_qtwidget OFF CACHE BOOL "Enable Qt interactive device" FORCE) @@ -19,4 +23,4 @@ set(qt_LINK_FLAGS ${QT_LIBRARIES}) set(DRIVERS_LINK_FLAGS ${DRIVERS_LINK_FLAGS} ${qt_LINK_FLAGS}) endif(NOT QT4_FOUND) -endif(PLD_rasterqt OR PLD_epsqt OR PLD_pdfqt OR PLD_qtwidget OR PLD_svgqt) +endif(PLD_bmpqt OR PLD_jpgqt OR PLD_pngqt OR PLD_ppmqt OR PLD_tiffqt OR PLD_epsqt OR PLD_pdfqt OR PLD_qtwidget OR PLD_svgqt) Modified: trunk/config.h.cmake =================================================================== --- trunk/config.h.cmake 2009-03-06 01:39:42 UTC (rev 9678) +++ trunk/config.h.cmake 2009-03-06 16:40:31 UTC (rev 9679) @@ -338,12 +338,24 @@ /* Define if Qt Widget driver is present */ #cmakedefine PLD_qtwidget -/* Define if raster Qt driver is present */ -#cmakedefine PLD_rasterqt - /* Define if SVG Qt driver is present */ #cmakedefine PLD_svgqt +/* Define if bmp Qt driver is present */ +#cmakedefine PLD_bmpqt + +/* Define if jpg Qt driver is present */ +#cmakedefine PLD_jpgqt + +/* Define if png Qt driver is present */ +#cmakedefine PLD_pngqt + +/* Define if ppm Qt driver is present */ +#cmakedefine PLD_ppmqt + +/* Define if tiff Qt driver is present */ +#cmakedefine PLD_tiffqt + /* Portable definition for PTHREAD_MUTEX_RECURSIVE */ #define PLPLOT_MUTEX_RECURSIVE ${PLPLOT_MUTEX_RECURSIVE} Modified: trunk/drivers/CMakeLists.txt =================================================================== --- trunk/drivers/CMakeLists.txt 2009-03-06 01:39:42 UTC (rev 9678) +++ trunk/drivers/CMakeLists.txt 2009-03-06 16:40:31 UTC (rev 9679) @@ -24,12 +24,13 @@ DESTINATION ${DOC_DIR} ) -if(PLD_rasterqt OR PLD_epsqt OR PLD_pdfqt OR PLD_qtwidget OR PLD_svgqt) +#qt.h only useful if anyone wants to build a Qt application with the Qt widget driver +if(PLD_qtwidget) install( FILES qt.h DESTINATION ${INCLUDE_DIR} ) -endif(PLD_rasterqt OR PLD_epsqt OR PLD_pdfqt OR PLD_qtwidget OR PLD_svgqt) +endif(PLD_qtwidget) if(ENABLE_DYNDRIVERS) set_source_files_properties( Modified: trunk/drivers/qt.cpp =================================================================== --- trunk/drivers/qt.cpp 2009-03-06 01:39:42 UTC (rev 9678) +++ trunk/drivers/qt.cpp 2009-03-06 16:40:31 UTC (rev 9679) @@ -33,30 +33,65 @@ // Drivers declaration PLDLLIMPEXP_DRIVER const char* plD_DEVICE_INFO_qt = -#if defined(PLD_rasterqt) - "rasterqt:Qt Raster driver:0:qt:66:rasterqt\n" +#if defined(PLD_bmpqt) + "bmpqt:Qt Windows bitmap driver:0:qt:66:bmpqt\n" #endif +#if defined(PLD_jpgqt) + "jpgqt:Qt jpg driver:0:qt:67:jpgqt\n" +#endif +#if defined(PLD_pngqt) + "pngqt:Qt png driver:0:qt:68:pngqt\n" +#endif +#if defined(PLD_ppmqt) + "ppmqt:Qt ppm driver:0:qt:69:ppmqt\n" +#endif +#if defined(PLD_tiffqt) + "tiffqt:Qt tiff driver:0:qt:70:tiffqt\n" +#endif #if defined(PLD_svgqt) && QT_VERSION >= 0x040300 - "svgqt:Qt SVG driver:0:qt:67:svgqt\n" + "svgqt:Qt SVG driver:0:qt:71:svgqt\n" #endif #if defined(PLD_qtwidget) - "qtwidget:Qt Widget:0:qt:68:qtwidget\n" + "qtwidget:Qt Widget:1:qt:72:qtwidget\n" #endif #if defined(PLD_epsqt) - "epsqt:Qt EPS driver:0:qt:69:epsqt\n" + "epsqt:Qt EPS driver:0:qt:73:epsqt\n" #endif #if defined(PLD_pdfqt) - "pdfqt:Qt PDF driver:0:qt:70:pdfqt\n" + "pdfqt:Qt PDF driver:0:qt:74:pdfqt\n" #endif ; // Declaration of the driver-specific interface functions -#if defined(PLD_rasterqt) -void plD_dispatch_init_rasterqt(PLDispatchTable *pdt); +#if defined (PLD_bmpqt) || defined(PLD_jpgqt) || defined (PLD_pngqt) || defined(PLD_ppmqt) || defined(PLD_tiffqt) void plD_init_rasterqt(PLStream *); -void plD_eop_rasterqt(PLStream *); #endif +#if defined (PLD_bmpqt) +void plD_dispatch_init_bmpqt(PLDispatchTable *pdt); +void plD_eop_bmpqt(PLStream *); +#endif + +#if defined (PLD_jpgqt) +void plD_dispatch_init_jpgqt(PLDispatchTable *pdt); +void plD_eop_jpgqt(PLStream *); +#endif + +#if defined (PLD_pngqt) +void plD_dispatch_init_pngqt(PLDispatchTable *pdt); +void plD_eop_pngqt(PLStream *); +#endif + +#if defined (PLD_ppmqt) +void plD_dispatch_init_ppmqt(PLDispatchTable *pdt); +void plD_eop_ppmqt(PLStream *); +#endif + +#if defined (PLD_tiffqt) +void plD_dispatch_init_tiffqt(PLDispatchTable *pdt); +void plD_eop_tiffqt(PLStream *); +#endif + #if defined(PLD_svgqt) && QT_VERSION >= 0x040300 void plD_dispatch_init_svgqt(PLDispatchTable *pdt); void plD_init_svgqt(PLStream *); @@ -80,6 +115,7 @@ void plD_dispatch_init_qtwidget(PLDispatchTable *pdt); void plD_init_qtwidget(PLStream *); void plD_eop_qtwidget(PLStream *); +void plD_tidy_qtwidget(PLStream *); #endif // Declaration of the generic interface functions @@ -422,7 +458,7 @@ { QtPLDriver * widget=NULL; // We have to dynamic_cast to make sure the good virtual functions are called -#if defined(PLD_rasterqt) +#if defined (PLD_bmpqt) || defined(PLD_jpgqt) || defined (PLD_pngqt) || defined(PLD_ppmqt) || defined(PLD_tiffqt) if(widget==NULL) widget=dynamic_cast<QtRasterDevice*>((QtPLDriver *) pls->dev); #endif #if defined(PLD_svgqt) && QT_VERSION >= 0x040300 @@ -432,7 +468,7 @@ if(widget==NULL) widget=dynamic_cast<QtEPSDevice*>((QtPLDriver *) pls->dev); #endif #if defined(PLD_qtwidget) - if(widget==NULL) widget=dynamic_cast<QtPLWidget*>((QWidget *) pls->dev); + if(widget==NULL) widget=dynamic_cast<QtPLTabWidget*>((QWidget *) pls->dev); #endif if(widget==NULL) return; @@ -443,7 +479,7 @@ void plD_polyline_qt(PLStream *pls, short *xa, short *ya, PLINT npts) { QtPLDriver * widget=NULL; -#if defined(PLD_rasterqt) +#if defined (PLD_bmpqt) || defined(PLD_jpgqt) || defined (PLD_pngqt) || defined(PLD_ppmqt) || defined(PLD_tiffqt) if(widget==NULL) widget=dynamic_cast<QtRasterDevice*>((QtPLDriver *) pls->dev); #endif #if defined(PLD_svgqt) && QT_VERSION >= 0x040300 @@ -453,7 +489,7 @@ if(widget==NULL) widget=dynamic_cast<QtEPSDevice*>((QtPLDriver *) pls->dev); #endif #if defined(PLD_qtwidget) - if(widget==NULL) widget=dynamic_cast<QtPLWidget*>((QWidget *) pls->dev); + if(widget==NULL) widget=dynamic_cast<QtPLTabWidget*>((QWidget *) pls->dev); #endif if(widget==NULL) return; @@ -466,7 +502,7 @@ short *xa, *ya; PLINT i, j; QtPLDriver * widget=NULL; -#if defined(PLD_rasterqt) +#if defined (PLD_bmpqt) || defined(PLD_jpgqt) || defined (PLD_pngqt) || defined(PLD_ppmqt) || defined(PLD_tiffqt) if(widget==NULL) widget=dynamic_cast<QtRasterDevice*>((QtPLDriver *) pls->dev); #endif #if defined(PLD_svgqt) && QT_VERSION >= 0x040300 @@ -476,7 +512,7 @@ if(widget==NULL) widget=dynamic_cast<QtEPSDevice*>((QtPLDriver *) pls->dev); #endif #if defined(PLD_qtwidget) - if(widget==NULL) widget=dynamic_cast<QtPLWidget*>((QWidget *) pls->dev); + if(widget==NULL) widget=dynamic_cast<QtPLTabWidget*>((QWidget *) pls->dev); #endif if(widget==NULL) return; @@ -512,7 +548,7 @@ void plD_state_qt(PLStream * pls, PLINT op) { QtPLDriver * widget=NULL; -#if defined(PLD_rasterqt) +#if defined (PLD_bmpqt) || defined(PLD_jpgqt) || defined (PLD_pngqt) || defined(PLD_ppmqt) || defined(PLD_tiffqt) if(widget==NULL) widget=dynamic_cast<QtRasterDevice*>((QtPLDriver *) pls->dev); #endif #if defined(PLD_svgqt) && QT_VERSION >= 0x040300 @@ -522,7 +558,7 @@ if(widget==NULL) widget=dynamic_cast<QtEPSDevice*>((QtPLDriver *) pls->dev); #endif #if defined(PLD_qtwidget) - if(widget==NULL) widget=dynamic_cast<QtPLWidget*>((QWidget *) pls->dev); + if(widget==NULL) widget=dynamic_cast<QtPLTabWidget*>((QWidget *) pls->dev); #endif if(widget==NULL) return; @@ -547,7 +583,7 @@ ////////////////// Raster driver-specific definitions: class and interface functions ///////// -#if defined(PLD_rasterqt) +#if defined (PLD_bmpqt) || defined(PLD_jpgqt) || defined (PLD_pngqt) || defined(PLD_ppmqt) || defined(PLD_tiffqt) QtRasterDevice::QtRasterDevice(int i_iWidth, int i_iHeight): QtPLDriver(i_iWidth, i_iHeight), QImage(i_iWidth, i_iHeight, QImage::Format_RGB32) @@ -578,11 +614,11 @@ return res; } -void QtRasterDevice::savePlot(char* fileName) +void QtRasterDevice::savePlot(char* fileName, const char* format) { m_painterP->end(); - save(getFileName(fileName), 0, 85); - + save(getFileName(fileName), format, 85); + ++pageCounter; m_painterP->begin(this); m_painterP->setRenderHint(QPainter::Antialiasing, true); @@ -592,24 +628,6 @@ m_painterP->fillRect(0, 0, width(), height(), QBrush(Qt::black)); } -void plD_dispatch_init_rasterqt(PLDispatchTable *pdt) -{ -#ifndef ENABLE_DYNDRIVERS - pdt->pl_MenuStr = "Qt Raster Driver"; - pdt->pl_DevName = "rasterqt"; -#endif - pdt->pl_type = plDevType_FileOriented; - pdt->pl_seq = 66; - pdt->pl_init = (plD_init_fp) plD_init_rasterqt; - pdt->pl_line = (plD_line_fp) plD_line_qt; - pdt->pl_polyline = (plD_polyline_fp) plD_polyline_qt; - pdt->pl_eop = (plD_eop_fp) plD_eop_rasterqt; - pdt->pl_bop = (plD_bop_fp) plD_bop_qt; - pdt->pl_tidy = (plD_tidy_fp) plD_tidy_qt; - pdt->pl_state = (plD_state_fp) plD_state_qt; - pdt->pl_esc = (plD_esc_fp) plD_esc_qt; -} - void plD_init_rasterqt(PLStream * pls) { /* Stream setup */ @@ -641,18 +659,137 @@ plP_setpxl(DPI/25.4/((QtRasterDevice*)(pls->dev))->downscale, DPI/25.4/((QtRasterDevice*)(pls->dev))->downscale); - printf("The file format will be determined by the file name extension\n"); - printf("Possible extensions are: bmp, jpg, png, ppm, tiff, xbm, xpm\n"); plOpenFile(pls); } -void plD_eop_rasterqt(PLStream *pls) +#endif + +#if defined(PLD_bmpqt) +void plD_dispatch_init_bmpqt(PLDispatchTable *pdt) { - ((QtRasterDevice *)pls->dev)->savePlot(pls->FileName); +#ifndef ENABLE_DYNDRIVERS + pdt->pl_MenuStr = "Qt Windows bitmap Driver"; + pdt->pl_DevName = "bmpqt"; +#endif + pdt->pl_type = plDevType_FileOriented; + pdt->pl_seq = 66; + pdt->pl_init = (plD_init_fp) plD_init_rasterqt; + pdt->pl_line = (plD_line_fp) plD_line_qt; + pdt->pl_polyline = (plD_polyline_fp) plD_polyline_qt; + pdt->pl_eop = (plD_eop_fp) plD_eop_bmpqt; + pdt->pl_bop = (plD_bop_fp) plD_bop_qt; + pdt->pl_tidy = (plD_tidy_fp) plD_tidy_qt; + pdt->pl_state = (plD_state_fp) plD_state_qt; + pdt->pl_esc = (plD_esc_fp) plD_esc_qt; } + +void plD_eop_bmpqt(PLStream *pls) +{ + ((QtRasterDevice *)pls->dev)->savePlot(pls->FileName, "BMP"); +} #endif +#if defined(PLD_jpgqt) +void plD_dispatch_init_jpgqt(PLDispatchTable *pdt) +{ +#ifndef ENABLE_DYNDRIVERS + pdt->pl_MenuStr = "Qt jpg Driver"; + pdt->pl_DevName = "jpgqt"; +#endif + pdt->pl_type = plDevType_FileOriented; + pdt->pl_seq = 67; + pdt->pl_init = (plD_init_fp) plD_init_rasterqt; + pdt->pl_line = (plD_line_fp) plD_line_qt; + pdt->pl_polyline = (plD_polyline_fp) plD_polyline_qt; + pdt->pl_eop = (plD_eop_fp) plD_eop_jpgqt; + pdt->pl_bop = (plD_bop_fp) plD_bop_qt; + pdt->pl_tidy = (plD_tidy_fp) plD_tidy_qt; + pdt->pl_state = (plD_state_fp) plD_state_qt; + pdt->pl_esc = (plD_esc_fp) plD_esc_qt; +} +void plD_eop_jpgqt(PLStream *pls) +{ + ((QtRasterDevice *)pls->dev)->savePlot(pls->FileName, "JPG"); +} +#endif + +#if defined(PLD_pngqt) +void plD_dispatch_init_pngqt(PLDispatchTable *pdt) +{ +#ifndef ENABLE_DYNDRIVERS + pdt->pl_MenuStr = "Qt png Driver"; + pdt->pl_DevName = "pngqt"; +#endif + pdt->pl_type = plDevType_FileOriented; + pdt->pl_seq = 68; + pdt->pl_init = (plD_init_fp) plD_init_rasterqt; + pdt->pl_line = (plD_line_fp) plD_line_qt; + pdt->pl_polyline = (plD_polyline_fp) plD_polyline_qt; + pdt->pl_eop = (plD_eop_fp) plD_eop_pngqt; + pdt->pl_bop = (plD_bop_fp) plD_bop_qt; + pdt->pl_tidy = (plD_tidy_fp) plD_tidy_qt; + pdt->pl_state = (plD_state_fp) plD_state_qt; + pdt->pl_esc = (plD_esc_fp) plD_esc_qt; +} + +void plD_eop_pngqt(PLStream *pls) +{ + ((QtRasterDevice *)pls->dev)->savePlot(pls->FileName, "PNG"); +} +#endif + +#if defined(PLD_ppmqt) +void plD_dispatch_init_ppmqt(PLDispatchTable *pdt) +{ +#ifndef ENABLE_DYNDRIVERS + pdt->pl_MenuStr = "Qt ppm Driver"; + pdt->pl_DevName = "ppmqt"; +#endif + pdt->pl_type = plDevType_FileOriented; + pdt->pl_seq = 69; + pdt->pl_init = (plD_init_fp) plD_init_rasterqt; + pdt->pl_line = (plD_line_fp) plD_line_qt; + pdt->pl_polyline = (plD_polyline_fp) plD_polyline_qt; + pdt->pl_eop = (plD_eop_fp) plD_eop_ppmqt; + pdt->pl_bop = (plD_bop_fp) plD_bop_qt; + pdt->pl_tidy = (plD_tidy_fp) plD_tidy_qt; + pdt->pl_state = (plD_state_fp) plD_state_qt; + pdt->pl_esc = (plD_esc_fp) plD_esc_qt; +} + +void plD_eop_ppmqt(PLStream *pls) +{ + ((QtRasterDevice *)pls->dev)->savePlot(pls->FileName, "PPM"); +} +#endif + +#if defined(PLD_tiffqt) +void plD_dispatch_init_tiffqt(PLDispatchTable *pdt) +{ +#ifndef ENABLE_DYNDRIVERS + pdt->pl_MenuStr = "Qt tiff Driver"; + pdt->pl_DevName = "tiffqt"; +#endif + pdt->pl_type = plDevType_FileOriented; + pdt->pl_seq = 70; + pdt->pl_init = (plD_init_fp) plD_init_rasterqt; + pdt->pl_line = (plD_line_fp) plD_line_qt; + pdt->pl_polyline = (plD_polyline_fp) plD_polyline_qt; + pdt->pl_eop = (plD_eop_fp) plD_eop_tiffqt; + pdt->pl_bop = (plD_bop_fp) plD_bop_qt; + pdt->pl_tidy = (plD_tidy_fp) plD_tidy_qt; + pdt->pl_state = (plD_state_fp) plD_state_qt; + pdt->pl_esc = (plD_esc_fp) plD_esc_qt; +} + +void plD_eop_tiffqt(PLStream *pls) +{ + ((QtRasterDevice *)pls->dev)->savePlot(pls->FileName, "TIFF"); +} +#endif + + #if defined(PLD_svgqt) && QT_VERSION >= 0x040300 QtSVGDevice::QtSVGDevice(int i_iWidth, int i_iHeight): QtPLBufferedDriver(i_iWidth, i_iHeight) @@ -695,7 +832,7 @@ pdt->pl_DevName = "svgqt"; #endif pdt->pl_type = plDevType_FileOriented; - pdt->pl_seq = 67; + pdt->pl_seq = 71; pdt->pl_init = (plD_init_fp) plD_init_svgqt; pdt->pl_line = (plD_line_fp) plD_line_qt; pdt->pl_polyline = (plD_polyline_fp) plD_polyline_qt; @@ -814,7 +951,7 @@ pdt->pl_DevName = "epsqt"; #endif pdt->pl_type = plDevType_FileOriented; - pdt->pl_seq = 69; + pdt->pl_seq = 73; pdt->pl_init = (plD_init_fp) plD_init_epspdfqt; pdt->pl_line = (plD_line_fp) plD_line_qt; pdt->pl_polyline = (plD_polyline_fp) plD_polyline_qt; @@ -834,7 +971,7 @@ pdt->pl_DevName = "pdfqt"; #endif pdt->pl_type = plDevType_FileOriented; - pdt->pl_seq = 70; + pdt->pl_seq = 74; pdt->pl_init = (plD_init_fp) plD_init_epspdfqt; pdt->pl_line = (plD_line_fp) plD_line_qt; pdt->pl_polyline = (plD_polyline_fp) plD_polyline_qt; @@ -1155,7 +1292,17 @@ } } +void QtPLTabWidget::newTab() +{ + QtPLWidget * plotWidget=new QtPLWidget; + plotWidget->downscale=downscale; + plotWidget->m_dWidth=m_dWidth; + plotWidget->m_dHeight=m_dHeight; + addTab(plotWidget, QString("page %1").arg(count()+1)); + currentWidget=plotWidget; +} + void plD_dispatch_init_qtwidget(PLDispatchTable *pdt) { #ifndef ENABLE_DYNDRIVERS @@ -1163,42 +1310,43 @@ pdt->pl_DevName = "qtwidget"; #endif pdt->pl_type = plDevType_Interactive; - pdt->pl_seq = 68; + pdt->pl_seq = 72; pdt->pl_init = (plD_init_fp) plD_init_qtwidget; pdt->pl_line = (plD_line_fp) plD_line_qt; pdt->pl_polyline = (plD_polyline_fp) plD_polyline_qt; pdt->pl_eop = (plD_eop_fp) plD_eop_qtwidget; pdt->pl_bop = (plD_bop_fp) plD_bop_qt; - pdt->pl_tidy = (plD_tidy_fp) plD_tidy_qt; + pdt->pl_tidy = (plD_tidy_fp) plD_tidy_qtwidget; pdt->pl_state = (plD_state_fp) plD_state_qt; pdt->pl_esc = (plD_esc_fp) plD_esc_qt; } -void plsqtdev(QtPLWidget* dev) +// global variables initialised in init(), used in tidy() +QApplication* app; +int argc=1; // argc and argv have to exist when tidy() is used, thus they are made global +char argv[20]; + +void plD_init_qtwidget(PLStream * pls) { - if(dev==NULL) return; - PLINT w, h; - plsc->dev = (void*)dev; - plsc->xlength = dev->m_dWidth; - plsc->ylength = dev->m_dHeight; + argv[0]='\0'; + app=new QApplication(argc, (char**)&argv); + QMainWindow * mw=new QMainWindow; + QtPLTabWidget* tabWidget=new QtPLTabWidget; + + plsc->dev = (void*)tabWidget; + plsc->xlength = tabWidget->m_dWidth; + plsc->ylength = tabWidget->m_dHeight; if (plsc->xlength > plsc->ylength) - dev->downscale = (PLFLT)plsc->xlength/(PLFLT)(PIXELS_X-1); + tabWidget->downscale = (PLFLT)plsc->xlength/(PLFLT)(PIXELS_X-1); else - dev->downscale = (PLFLT)plsc->ylength/(PLFLT)PIXELS_Y; + tabWidget->downscale = (PLFLT)plsc->ylength/(PLFLT)PIXELS_Y; - plP_setphy((PLINT) 0, (PLINT) (plsc->xlength / dev->downscale), (PLINT) 0, (PLINT) (plsc->ylength / dev->downscale)); + plP_setphy((PLINT) 0, (PLINT) (plsc->xlength / tabWidget->downscale), (PLINT) 0, (PLINT) (plsc->ylength / tabWidget->downscale)); - plP_setpxl(DPI/25.4/dev->downscale, DPI/25.4/dev->downscale); -} + plP_setpxl(DPI/25.4/tabWidget->downscale, DPI/25.4/tabWidget->downscale); -void plD_init_qtwidget(PLStream * pls) -{ - if ((pls->phyxma == 0) || (pls->dev == NULL)) { - plexit("Must call plsqtdev first to set user plotting widget!"); - } - pls->color = 1; /* Is a color device */ pls->plbuf_write=0; pls->dev_fill0 = 1; /* Handle solid fills */ @@ -1207,12 +1355,25 @@ pls->dev_flush=1; pls->dev_clear=1; pls->termin=1; + + mw->setCentralWidget(tabWidget); + mw->setVisible(true); + mw->setWindowTitle("plplot"); + mw->resize(plsc->xlength, plsc->ylength); + app->setActiveWindow(mw); + } void plD_eop_qtwidget(PLStream *pls) { - ((QtPLWidget *)pls->dev)->clearWidget(); + QtPLTabWidget* tabWidget=((QtPLTabWidget*)pls->dev); + tabWidget->currentWidget=NULL; } + +void plD_tidy_qtwidget(PLStream *pls) +{ + app->exec(); +} #endif #endif Modified: trunk/drivers/qt.h =================================================================== --- trunk/drivers/qt.h 2009-03-06 01:39:42 UTC (rev 9678) +++ trunk/drivers/qt.h 2009-03-06 16:40:31 UTC (rev 9679) @@ -40,6 +40,8 @@ #include <QApplication> #include <QWidget> #include <QMouseEvent> +#include <QTabWidget> +#include <QMainWindow> #include "plplotP.h" #include "drivers.h" @@ -179,7 +181,7 @@ QLinkedList<BufferElement> m_listBuffer; }; -#if defined (PLD_rasterqt) +#if defined (PLD_bmpqt) || defined(PLD_jpgqt) || defined (PLD_pngqt) || defined(PLD_ppmqt) || defined(PLD_tiffqt) // Driver painting whatever raster format Qt can save class QtRasterDevice: public QtPLDriver, public QImage { @@ -191,7 +193,7 @@ // Saves the plot to the fileName file, possibly appending // _page# to the file name if not the 1st page - void savePlot(char* fileName); + void savePlot(char* fileName, const char* format); protected: // Generates the actual file name, depending on fileName and pageCounter @@ -308,16 +310,76 @@ int m_iOldSize; }; -// This function must be called between plinit to set up the widget -// The widget is created within the Qt Application -// e.g.: -// QtPLWidget*plot=new QtPLWidget(QT_DEFAULT_X, QT_DEFAULT_Y, this); -// plmkstrm(&strm); -// plsqtdev(plot); -// plsdev ("qtwidget"); -// plinit(); -// ... -void plsqtdev(QtPLWidget *plotdev); + +// This widget wraps up various QtPLWidgets as tabs +// The stream plots on currentWidget, which should be changed by eop() +// Actually, setting currentWidget as NULL creates a new page when +// the first plot instructions are issued. So eop() only has to set it as NULL; +class QtPLTabWidget: public QTabWidget, public QtPLDriver +{ + public: + QtPLTabWidget() + { + currentWidget=NULL; + } + + virtual void drawLine(short x1, short y1, short x2, short y2) + { + if(currentWidget==NULL) newTab(); + currentWidget->drawLine(x1, y1, x2, y2); + } + + virtual void drawPolyline(short * x, short * y, PLINT npts) + { + if(currentWidget==NULL) newTab(); + currentWidget->drawPolyline(x, y, npts); + } + + virtual void drawPolygon(short * x, short * y, PLINT npts) + { + if(currentWidget==NULL) newTab(); + currentWidget->drawPolygon(x, y, npts); + } + + virtual void setColor(int r, int g, int b) + { + if(currentWidget==NULL) newTab(); + currentWidget->setColor(r, g, b); + } + + virtual void setWidth(PLINT w) + { + if(currentWidget==NULL) newTab(); + currentWidget->setWidth(w); + } + + virtual void setDashed(PLINT nms, PLINT* mark, PLINT* space) + { + if(currentWidget==NULL) newTab(); + currentWidget->setDashed(nms, mark, space); + } + + // Set pen to draw solid strokes (called after drawing dashed strokes) + virtual void setSolid() + { + if(currentWidget==NULL) newTab(); + currentWidget->setSolid(); + } + + void setSmooth(bool b) + { + if(currentWidget==NULL) newTab(); + currentWidget->setSmooth(b); + } + + virtual void savePlot(char* fileName){} + + QtPLWidget* currentWidget; + + protected: + void newTab(); +}; + #endif #endif Modified: trunk/include/drivers.h =================================================================== --- trunk/include/drivers.h 2009-03-06 01:39:42 UTC (rev 9678) +++ trunk/include/drivers.h 2009-03-06 16:40:31 UTC (rev 9679) @@ -97,7 +97,11 @@ PLDLLIMPEXP_DRIVER void plD_dispatch_init_pngcairo ( PLDispatchTable *pdt ); PLDLLIMPEXP_DRIVER void plD_dispatch_init_memcairo ( PLDispatchTable *pdt ); PLDLLIMPEXP_DRIVER void plD_dispatch_init_extcairo ( PLDispatchTable *pdt ); -PLDLLIMPEXP_DRIVER void plD_dispatch_init_rasterqt ( PLDispatchTable *pdt ); +PLDLLIMPEXP_DRIVER void plD_dispatch_init_bmpqt ( PLDispatchTable *pdt ); +PLDLLIMPEXP_DRIVER void plD_dispatch_init_jpgqt ( PLDispatchTable *pdt ); +PLDLLIMPEXP_DRIVER void plD_dispatch_init_pngqt ( PLDispatchTable *pdt ); +PLDLLIMPEXP_DRIVER void plD_dispatch_init_ppmqt ( PLDispatchTable *pdt ); +PLDLLIMPEXP_DRIVER void plD_dispatch_init_tiffqt ( PLDispatchTable *pdt ); PLDLLIMPEXP_DRIVER void plD_dispatch_init_svgqt ( PLDispatchTable *pdt ); PLDLLIMPEXP_DRIVER void plD_dispatch_init_epsqt ( PLDispatchTable *pdt ); PLDLLIMPEXP_DRIVER void plD_dispatch_init_pdfqt ( PLDispatchTable *pdt ); Modified: trunk/include/plDevs.h.cmake =================================================================== --- trunk/include/plDevs.h.cmake 2009-03-06 01:39:42 UTC (rev 9678) +++ trunk/include/plDevs.h.cmake 2009-03-06 16:40:31 UTC (rev 9679) @@ -85,7 +85,11 @@ #cmakedefine PLD_pngcairo #cmakedefine PLD_memcairo #cmakedefine PLD_extcairo -#cmakedefine PLD_rasterqt +#cmakedefine PLD_bmpqt +#cmakedefine PLD_jpgqt +#cmakedefine PLD_pngqt +#cmakedefine PLD_ppmqt +#cmakedefine PLD_tiffqt #cmakedefine PLD_svgqt #cmakedefine PLD_epsqt #cmakedefine PLD_pdfqt Modified: trunk/include/plcore.h =================================================================== --- trunk/include/plcore.h 2009-03-06 01:39:42 UTC (rev 9678) +++ trunk/include/plcore.h 2009-03-06 16:40:31 UTC (rev 9679) @@ -296,9 +296,21 @@ #if defined(PLD_extcairo) && !defined(ENABLE_DYNDRIVERS) plD_dispatch_init_extcairo, #endif -#if defined(PLD_rasterqt) && !defined(ENABLE_DYNDRIVERS) - plD_dispatch_init_rasterqt, +#if defined(PLD_bmpqt) && !defined(ENABLE_DYNDRIVERS) + plD_dispatch_init_bmpqt, #endif +#if defined(PLD_jpgqt) && !defined(ENABLE_DYNDRIVERS) + plD_dispatch_init_jpgqt, +#endif +#if defined(PLD_pngqt) && !defined(ENABLE_DYNDRIVERS) + plD_dispatch_init_pngqt, +#endif +#if defined(PLD_ppmqt) && !defined(ENABLE_DYNDRIVERS) + plD_dispatch_init_ppmqt, +#endif +#if defined(PLD_tiffqt) && !defined(ENABLE_DYNDRIVERS) + plD_dispatch_init_tiffqt, +#endif #if defined(PLD_svgqt) && !defined(ENABLE_DYNDRIVERS) plD_dispatch_init_svgqt, #endif Modified: trunk/plplot_test/plplot-test.sh.cmake =================================================================== --- trunk/plplot_test/plplot-test.sh.cmake 2009-03-06 01:39:42 UTC (rev 9678) +++ trunk/plplot_test/plplot-test.sh.cmake 2009-03-06 16:40:31 UTC (rev 9679) @@ -198,7 +198,11 @@ PLD_epsqt=@PLD_epsqt@ PLD_pdfqt=@PLD_pdfqt@ #interactive PLD_qtwidget=@PLD_qtwidget@ -PLD_rasterqt=@PLD_rasterqt@ +PLD_bmpqt=@PLD_bmpqt@ +PLD_jpgqt=@PLD_jpgqt@ +PLD_pngqt=@PLD_pngqt@ +PLD_ppmqt=@PLD_ppmqt@ +PLD_tiffqt=@PLD_tiffqt@ PLD_svgqt=@PLD_svgqt@ #interactive PLD_gcw=@PLD_gcw@ PLD_gif=@PLD_gif@ This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |