00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021
00022
00023
00024
00025
00026
00027
00028
00029 #ifndef QTDISPLAYPANELGUI_H
00030 #define QTDISPLAYPANELGUI_H
00031
00032 #include <casa/aips.h>
00033 #include <graphics/X11/X_enter.h>
00034 # include <QtCore>
00035 # include <QtGui>
00036 #include <QTextEdit>
00037 #include <QHash>
00038 #include <QFont>
00039
00040
00041
00042
00043 #include <graphics/X11/X_exit.h>
00044 #include <casaqt/QtUtilities/QtPanelBase.qo.h>
00045 #include <display/QtViewer/QtDisplayPanel.qo.h>
00046 #include <display/QtViewer/DisplayDataHolder.h>
00047 #include <display/region/QtRegionDock.qo.h>
00048 #include <display/Utilities/Lowlevel.h>
00049 #include <display/DisplayDatas/DisplayDataOptions.h>
00050 #include <display/Utilities/ImageProperties.h>
00051 #include <display/Utilities/StatusSink.h>
00052
00053 namespace casa {
00054
00055 namespace viewer {
00056 class Preferences;
00057 class CleanGui;
00058 }
00059
00060 class String;
00061 class QtViewer;
00062 class QtViewerPrintGui;
00063 class QtMouseToolBar;
00064 class QtCanvasManager;
00065 class QtAnnotatorGui;
00066 class MakeMask;
00067 class FileBox;
00068 class MakeRegion;
00069 class QtProfile;
00070 class QtDisplayData;
00071 class TrackBox;
00072 class QtRegionManager;
00073 class QtRegionShapeManager;
00074 class QtDataManager;
00075 class QtExportManager;
00076 class QtDataOptionsPanel;
00077 class AnimatorHolder;
00078 class BinPlotWidget;
00079 class HistogramMain;
00080 class Fit2DTool;
00081 class SlicerMainWindow;
00082 class ColorHistogram;
00083 class ImageManagerDialog;
00084 class QtDisplayPanelGui;
00085 class CursorTrackingHolder;
00086 class AboutDialogViewer;
00087
00088 template <class T> class ImageInterface;
00089
00090 class LinkedCursorEH : public QObject, public WCRefreshEH {
00091 Q_OBJECT
00092 public:
00093 LinkedCursorEH( QtDisplayPanelGui *dpg );
00094 virtual ~LinkedCursorEH( );
00095 void operator ()(const WCRefreshEvent &ev);
00096 void addSource( QtDisplayPanelGui *src, QColor color );
00097 void removeSource( QtDisplayPanelGui *src );
00098 private slots:
00099 void boundary(QtDisplayPanel::CursorBoundaryCondition);
00100 void position(viewer::Position);
00101 private:
00102 struct cursor_info_t {
00103 cursor_info_t(QColor c) : color(c) { }
00104 QColor color;
00105 viewer::Position pos;
00106 };
00107 typedef std::map<QtDisplayPanelGui*,cursor_info_t> sources_list_t;
00108 sources_list_t cursor_sources;
00109 QtDisplayPanelGui *dpg_;
00110 };
00111
00112
00113
00114
00115
00116
00117 class QtDisplayPanelGui : public QtPanelBase, public viewer::StatusSink {
00118
00119 Q_OBJECT;
00120
00121
00122
00123 protected:
00124 friend class QtViewer;
00125 QtDisplayPanelGui( QtViewer *v, QWidget *parent=0, std::string rcstr="dpg",
00126 const std::list<std::string> &args = std::list<std::string>( ) );
00127 QtDisplayPanelGui( const QtDisplayPanelGui *other, QWidget *parent=0, std::string rcstr="dpg",
00128 const std::list<std::string> &args = std::list<std::string>( ) );
00129
00130 public:
00131 enum SCRIPTING_OPTION { INTERACT, SETOPTIONS };
00132
00133 ~QtDisplayPanelGui();
00134
00135
00136 QtViewer *viewer( ) const {
00137 return v_;
00138 }
00139 int buttonToolState(const std::string &tool) const;
00140
00141
00142 LogIO &logIO( ) {
00143 return logger;
00144 }
00145
00146
00147 void status( const std::string &s, const std::string &type="info" );
00148
00149
00150 QtDisplayPanel* displayPanel() { return qdp_; }
00151 const QtDisplayPanel* displayPanel() const { return qdp_; }
00152
00153 typedef std::list<viewer::Region*> region_list_t;
00154 region_list_t regions( ) {
00155 return regionDock_ ? regionDock_->regions( ) : std::list<viewer::Region*>( );
00156 }
00157
00158 void revokeRegion( viewer::Region *r ) {
00159
00160 if ( qdp_ ) qdp_->revokeRegion(r);
00161 }
00162
00163
00164
00165 QToolBar* customToolBar;
00166 QToolBar* customToolBar2;
00167
00168 virtual void setStatsPrint(Bool printStats=True) {
00169 qdp_->printStats = printStats;
00170 }
00171
00172 virtual void setUseRegion(Bool useRegion=True) {
00173 qdp_->useRegion = useRegion;
00174 }
00175
00176 virtual bool supports( SCRIPTING_OPTION option ) const;
00177 virtual QVariant start_interact( const QVariant &input, int id );
00178 virtual QVariant setoptions( const QMap<QString,QVariant> &input, int id);
00179
00180
00181
00182
00183 Bool colorBarsVertical() {
00184 return colorBarsVertical_;
00185 }
00186
00187
00188
00189
00190
00191
00192
00193
00194
00195
00196
00197 QtDisplayData* createDD( String path, String dataType, String displayType,
00198 Bool autoRegister=True, int insertPosition = -1,
00199 bool masterCoordinate = false, bool masterSaturation = false,
00200 bool masterHue = false,
00201 const viewer::DisplayDataOptions &ddo=viewer::DisplayDataOptions(),
00202 const viewer::ImageProperties &props=viewer::ImageProperties( ));
00203
00204
00205
00206 virtual Bool removeDD(QtDisplayData*& qdd);
00207
00208
00209
00210 DisplayDataHolder::DisplayDataIterator beginDD() const;
00211 DisplayDataHolder::DisplayDataIterator endDD() const;
00212 Bool isEmptyDD() const;
00213
00214
00215
00216
00217
00218
00219
00220 List<QtDisplayData*> unregisteredDDs();
00221
00222
00223 QtDisplayData* dd(const std::string& name);
00224
00225 QtDisplayData* dd( );
00226
00227
00228
00229 Bool ddExists(QtDisplayData* qdd);
00230
00231
00232
00233
00234 virtual String errMsg() {
00235 return errMsg_;
00236 }
00237
00238
00239
00240
00241
00242
00243
00244
00245
00246
00247 virtual void addedData( QString type, QtDisplayData * );
00248
00249 QtDataManager* dataMgr() {
00250 return qdm_;
00251 }
00252
00253
00254 virtual std::string rcid( ) const {
00255 return rcid_;
00256 }
00257
00258 viewer::QtRegionDock *regionDock( ) {
00259 return regionDock_;
00260 }
00261 int numFrames( );
00262
00263
00264 void loadRegions( const std::string &path, const std::string &datatype );
00265
00266 std::string outputRegions( std::list<viewer::QtRegionState*> regions, std::string file, std::string format, std::string ds9_csys="pixel" );
00267
00268 bool useNewRegions( ) const {
00269 return use_new_regions;
00270 }
00271
00272
00273 void activate( bool );
00274
00275
00276 void updateCursorInfo( WorldCanvas *wc, Quantity x, Quantity y );
00277 typedef std::pair<QString, SHARED_PTR<ImageInterface<float> > > OverplotInterface;
00278
00279 public slots:
00280
00281
00282
00283
00284 virtual void setColorBarOrientation(Bool vertical);
00285
00286 virtual QtDisplayPanelGui *createNewPanel( );
00287
00288 virtual void showDataManager();
00289 virtual void hideDataManager();
00290
00291 virtual void showExportManager();
00292 virtual void hideExportManager();
00293
00294 virtual void showDataOptionsPanel();
00295 virtual void hideDataOptionsPanel();
00296
00297 virtual void showPreferences( );
00298
00299 virtual void removeAllDDs();
00300
00301
00302
00303 virtual void showPrintManager();
00304 virtual void hidePrintManager();
00305
00306 virtual void showCanvasManager();
00307 virtual void hideCanvasManager();
00308
00309 virtual void showRegionManager();
00310 virtual void hideRegionManager();
00311
00312 virtual void showShapeManager();
00313 virtual void hideShapeManager();
00314
00315 virtual void showAnnotatorPanel();
00316 virtual void hideAnnotatorPanel();
00317
00318 virtual void showFileBoxPanel();
00319 virtual void hideFileBoxPanel();
00320
00321 virtual void showMakeRegionPanel();
00322 virtual void hideMakeRegionPanel();
00323
00324 virtual void showImageProfile();
00325 virtual void hideImageProfile();
00326 virtual void refreshImageProfile();
00327 void resetImageProfile();
00328
00329 virtual void hideAllSubwindows();
00330 virtual void hideImageMenus();
00331
00332
00333
00334 void movieChannels( int startChannel, int endChannel );
00335 void movieChannels( int channel, bool forward, int stepSize, int channelStart, int channelEnd );
00336 void movieStop();
00337 void registerAllDDs();
00338 void unregisterAllDDs();
00339 virtual void showStats(const String&);
00340 virtual void hideStats();
00341
00342
00343
00344 virtual QtDisplayData* addDD(String path, String dataType, String displayType, Bool autoRegister=True, Bool tmpDtata=False, SHARED_PTR<ImageInterface<Float> > img = SHARED_PTR<ImageInterface<Float> >());
00345
00346 virtual void doSelectChannel(int channelIndex);
00347
00348
00349 virtual Bool restorePanelState(String filename);
00350
00351 virtual void trackingMoved(Qt::DockWidgetArea);
00352 virtual void animatorMoved(Qt::DockWidgetArea);
00353 virtual void regionMoved(Qt::DockWidgetArea);
00354 virtual void mousetoolbarMoved(bool);
00355
00356
00357
00358 std::string getrc( const std::string &key );
00359 void putrc( const std::string &key, const std::string &val );
00360 void showMomentsCollapseImageProfile();
00361 void showSpecFitImageProfile();
00362 void disconnectHistogram();
00363 void ddClose( QtDisplayData*& removeDD);
00364 void ddOpen( const String& path, const String& dataType,
00365 const String& displayType, int insertPosition = -1,
00366 bool register = true, bool masterCoordinate = false,
00367 bool masterSaturation = false, bool masterHue = false);
00368
00369
00370 std::string id( ) const {
00371 return id_;
00372 }
00373
00374 void unlinkCursorTracking(QtDisplayPanelGui*);
00375 void linkCursorTracking(QtDisplayPanelGui*,QColor);
00376
00377 signals:
00378
00379 void regionChange( viewer::Region *, std::string );
00380
00381 void axisToolUpdate( QtDisplayData *controlling_dd );
00382
00383 void colorBarOrientationChange();
00384
00385
00386 void frameChanged( int );
00387
00388
00389 void overlay(QList<OverplotInterface>);
00390
00391 void createDDFailed(String errMsg, String path, String dataType,
00392 String displayType);
00393
00394
00395
00396
00397
00398 void ddCreated(QtDisplayData*, Bool autoRegister, int insertPosition, Bool csMaster);
00399
00400
00401
00402
00403
00404
00405
00406 void closed( const QtDisplayPanelGui * );
00407
00408 void cursorBoundary( QtDisplayPanel::CursorBoundaryCondition );
00409 void cursorPosition( viewer::Position );
00410
00411 protected slots:
00412
00413 virtual void close( );
00414
00415 virtual void quit( );
00416
00417
00418
00419 void hideEvent(QHideEvent* ev) {
00420
00421
00422
00423
00424
00425
00426 if(!isVisible()) hideAllSubwindows();
00427
00428 QMainWindow::hideEvent(ev);
00429 }
00430
00431
00432
00433
00434
00435
00436
00437
00438
00439
00440
00441 virtual void ddRegChange_();
00442
00443
00444
00445 virtual void ddRegClicked_();
00446 virtual void ddUnregClicked_();
00447 virtual void ddCloseClicked_();
00448
00449
00450
00451 virtual void updateAnimUi_();
00452
00453
00454
00455
00456 virtual void fwdPlayChannelMovie_( ) {
00457 if(qdp_->animating()>0) qdp_->stopChannelMovie( );
00458 else qdp_->fwdPlayChannelMovie( );
00459 }
00460 virtual void fwdPlayImageMovie_( ) {
00461 if(qdp_->animating()>0) qdp_->stopImageMovie( );
00462 else qdp_->fwdPlayImageMovie( );
00463 }
00464
00465 virtual void revPlayChannelMovie_( ) {
00466 if(qdp_->animating()<0) qdp_->stopChannelMovie( );
00467 else qdp_->revPlayChannelMovie( );
00468 }
00469 virtual void revPlayImageMovie_() {
00470 if(qdp_->animating()<0) qdp_->stopImageMovie( );
00471 else qdp_->revPlayImageMovie();
00472 }
00473
00474
00475
00476
00477 virtual void displayTrackingData_(Record trackingRec);
00478
00479
00480
00481
00482
00483
00484 virtual void arrangeTrackBoxes_();
00485
00486
00487
00488
00489 virtual void deleteTrackBox_(QtDisplayData* qdd);
00490
00491
00492
00493
00494
00495 virtual void savePanelState_();
00496
00497
00498
00499 virtual void restorePanelState_();
00500
00501
00502
00503
00504
00505 virtual void addGuiState_(QDomDocument*);
00506
00507
00508
00509 virtual void restoreGuiState_(QDomDocument*);
00510
00511 protected:
00512
00513 LogIO logger;
00514 static bool logger_did_region_warning;
00515
00516
00517
00518 DisplayDataHolder* displayDataHolder;
00519 String errMsg_;
00520
00521
00522 QtDataManager* qdm_;
00523 QtExportManager* qem_;
00524 QtDataOptionsPanel* qdo_;
00525
00526
00527
00528 virtual Bool syncDataDir_(String filename);
00529
00530 virtual void updateDDMenus_(Bool doCloseMenu = True);
00531
00532
00533
00534
00535 void closeEvent(QCloseEvent *event);
00536
00537
00538
00539
00540
00541
00542 Bool colorBarsVertical_;
00543
00544 QtViewer* v_;
00545 QtDisplayPanel* qdp_;
00546 QtViewerPrintGui* qpm_;
00547 QtCanvasManager* qcm_;
00548
00549 MakeMask* qap_;
00550 FileBox* qfb_;
00551 MakeRegion* qmr_;
00552 QtRegionManager* qrm_;
00553 QtRegionShapeManager* qsm_;
00554 QTextEdit* qst_;
00555
00556
00557 QtProfile* profile_;
00558 String savedTool_;
00559 QtDisplayData* profileDD_;
00560
00561
00562
00563
00564 QMenu *dpMenu_, *ddMenu_, *ddCloseMenu_, *tlMenu_, *vwMenu_, *helpMenu_;
00565
00566 QAction *dpNewAct_, *printAct_, *dpOptsAct_, *dpCloseAct_, *dpQuitAct_,
00567 *ddOpenAct_, *ddSaveAct_, *ddAdjAct_, *unzoomAct_,
00568 *zoomInAct_, *zoomOutAct_, *annotAct_, *mkRgnAct_, *fboxAct_, *ddPreferencesAct_,
00569 *profileAct_, *momentsCollapseAct_, *histogramAct_, *fitAct_,
00570 *cleanAct_, *rgnMgrAct_, *shpMgrAct_, *dpSaveAct_, *dpRstrAct_, *manageImagesAct_,
00571 *aboutAct_;
00572
00573 QToolBar* mainToolBar_;
00574 QToolButton *ddRegBtn_, *ddCloseBtn_;
00575
00576 QtMouseToolBar* mouseToolBar_;
00577
00578
00579 Casarc &rc;
00580
00581 std::string rcid_;
00582
00583 private:
00587 void construct_( QtDisplayPanel *newpanel, const std::list<std::string> &args );
00588
00589 void animationModeChanged( bool modeZ, bool channelCubes);
00590
00591 bool use_new_regions;
00592
00593
00594 int movieChannel;
00595 int movieChannelEnd;
00596 int movieLast;
00597 int movieStart;
00598 int movieStep;
00599
00600 QTimer movieTimer;
00601 void setAnimationRate();
00602 int getBoundedChannel( int channelNumber ) const;
00603 void updateViewedImage();
00604 void profiledImageChange();
00605 void generateSliceRegionUpdates();
00606 void generateHistogramRegionUpdates();
00607
00608 void clearTools();
00609 unsigned int showdataoptionspanel_enter_count;
00610 QtDisplayPanelGui() : rc(viewer::getrc()), linkedCursorHandler(0) { }
00611 QtDisplayData* processDD( String path, String dataType,
00612 String displayType, Bool autoRegister, int insertPosition,
00613 bool masterCoordinate, bool masterSaturation, bool masterHue,
00614 QtDisplayData* qdd, const viewer::DisplayDataOptions &ddo=viewer::DisplayDataOptions() );
00615 void connectRegionSignals(PanelDisplay* ppd);
00616 void notifyDDRemoval( QtDisplayData* qdd );
00617
00618 QtDisplayData* lookForExistingController();
00619
00620
00621
00622
00623
00624
00625 void updateFrameInformation();
00626 void updateFrameInformationChannel();
00627 void updateFrameInformationImage();
00628
00629 void updateSliceCorners( int id, const QList<double>& worldX,
00630 const QList<double>& worldY );
00631 void initAnimationHolder();
00632 void initHistogramHolder();
00633 void hideHistogram();
00634 void initFit2DTool();
00635 void hideFit2DTool();
00636 void resetHistogram( viewer::Region* qtRegion );
00637 viewer::Region* findRegion( int id );
00638
00639 viewer::Preferences *preferences;
00640
00641 AnimatorHolder* animationHolder;
00642 bool adjust_channel_animator;
00643 bool adjust_image_animator;
00644 int animationImageIndex;
00645
00646 HistogramMain* histogrammer;
00647 ColorHistogram* colorHistogram;
00648 Fit2DTool* fitTool;
00649 SlicerMainWindow* sliceTool;
00650 ImageManagerDialog* imageManagerDialog;
00651 AboutDialogViewer* aboutDialog;
00652
00653
00654 void initCleanTool( );
00655 viewer::CleanGui *clean_tool;
00656
00657
00658
00659 string addAnimationDockWidget();
00660
00661 QDockWidget* histogramDockWidget_;
00662 viewer::QtRegionDock *regionDock_;
00663 CursorTrackingHolder *trkgDockWidget_;
00664
00665 QTimer *status_bar_timer;
00666 QString status_bar_state;
00667 QString status_bar_stylesheet;
00668
00669 LinkedCursorEH *linkedCursorHandler;
00670
00671 std::string id_;
00672 static std::string idGen( );
00673
00674 private slots:
00675 void to_image_mode( bool channelCubes );
00676 void to_channel_mode( );
00677 void loadRegions( const QString &path, const QString &type );
00678 void incrementMovieChannel();
00679 void clear_status_bar( );
00680 void reset_status_bar( );
00681 void controlling_dd_axis_change(String, String, String, std::vector<int> );
00682 void initializeProfile( );
00683 void showHistogram();
00684 void showAboutDialog();
00685 void showSlicer();
00686 void resetListenerImage();
00687 void histogramRegionChange( int, viewer::region::RegionChanges change = viewer::region::RegionChangeLabel );
00688 void showFitInteractive();
00689 void showCleanTool( );
00690 void addSkyComponentOverlay(String path, const QString& colorName);
00691 void removeSkyComponentOverlay( String path );
00692 void add2DFitOverlay( QList<RegionShape*> fitMarkers );
00693 void remove2DFitOverlay( QList<RegionShape*> fitMarkers );
00694 void addResidualFitImage( String path );
00695 virtual void addDDSlot(String path, String dataType, String displayType,
00696 Bool autoRegister=True, Bool tmpData=False,
00697 SHARED_PTR<ImageInterface<Float> > img = SHARED_PTR<ImageInterface<Float> >());
00698 void sliceChanged( int regionId, viewer::region::RegionChanges change,
00699 const QList<double> & worldX, const QList<double> & worldY,
00700 const QList<int> &pixelX, const QList<int> & pixelY );
00701 void addSlice( int id, const QString& shape, const QString&, const QList<double>& worldX,
00702 const QList<double>& worldY, const QList<int>& pixelX, const QList<int>& pixelY,
00703 const QString&, const QString&, const QString&, int, int);
00704 void showColorHistogram(QtDisplayData* displayData);
00705 void globalColorSettingsChanged( bool global );
00706 void globalOptionsChanged( QtDisplayData* originator, Record opts );
00707 void updateColorHistogram( const QString& ddName );
00708 void showImageManager();
00709 void sliceMarkerVisibilityChanged(int regionId, bool visible);
00710 void sliceMarkerPositionChanged(int regionId, int segmentIndex, float percentage);
00711 void updateMultiSpectralFitLocation( Record trackingRec);
00723 void animationImageChanged( int index );
00724
00725 void registerDD( QtDisplayData* dd, int position );
00726 void unregisterDD( QtDisplayData* dd );
00727
00728 void replaceControllingDD( QtDisplayData* oldControllingDD, QtDisplayData* newControllingDD);
00729
00730
00731
00732 void setAnimatedImage( int index );
00733 void createRGBImage( QtDisplayData* coordinateMaster,
00734 QtDisplayData* redImage, QtDisplayData* greenImage,
00735 QtDisplayData* blueImage );
00736
00737
00738 public:
00739
00740
00741
00742
00743
00744
00745 Bool autoDDOptionsShow;
00746
00747
00748
00749
00750 String selectedDMDir;
00751
00752 };
00753
00754
00755 namespace viewer {
00756 namespace hidden {
00757
00758
00759 class display_panel_gui_status : public QStatusBar {
00760 Q_OBJECT;
00761 public:
00762 display_panel_gui_status( QWidget *parent = 0 ) : QStatusBar(parent) { }
00763 ~display_panel_gui_status( ) { }
00764 signals:
00765 void enter( );
00766 void leave( );
00767
00768 protected:
00769 void enterEvent( QEvent* );
00770 void leaveEvent( QEvent* );
00771 };
00772 }
00773 }
00774
00775
00776 }
00777
00778 #endif