Example #1
0
MainWindow::MainWindow(QWidget *parent) :
    QMainWindow(parent),
    ui(new Ui::MainWindow),m_showChannels(false), m_showIntensity(false),m_inBatch(false),m_OutlineDoneInBatch(false),
    m_batchMakeSurfaceReady(false)
{
    ui->setupUi(this);
    const QString toolButtonStyle("QToolButton {"
                                "border-style: outset;"
                                "border-width: 3px;"
                                "border-radius:7px;"
                                "border-color: darkgray;"
                                "font: bold 12px;"
                                "min-width: 10em;"
                                "padding: 6px;}"
                            "QToolButton:hover {background-color: lightblue;"
                                    " }");
    QWidget *rw = ui->toolBar->widgetForAction(ui->actionRead_WaveFront);
    //igramArea = new IgramArea(ui->tabWidget->widget(0));
    rw->setStyleSheet(toolButtonStyle);
    rw = ui->toolBar->widgetForAction(ui->actionSubtract_wave_front);
    rw->setStyleSheet(toolButtonStyle);


    ui->toolBar->setStyleSheet("QToolBar { spacing: 10px;}");
              ui->toolBar->setStyleSheet("QToolButton {border-style: outset;border-width: 3px;"
                                         "border-color: darkgray;border-radius:10px;}"
                                         "QToolButton:hover {background-color: lightblue;}");
    ui->SelectOutSideOutline->setChecked(true);
    setCentralWidget(ui->tabWidget);
    m_loaderThread = new QThread();
    m_waveFrontLoader = new waveFrontLoader();
    m_waveFrontLoader->moveToThread(m_loaderThread);
    m_colorChannels = new ColorChannelDisplay();
    connect(this, SIGNAL(load(QStringList,SurfaceManager*)), m_waveFrontLoader, SLOT(loadx(QStringList,SurfaceManager*)));
    m_intensityPlot = new igramIntensity(0);


    m_loaderThread->start();
    ui->tabWidget->removeTab(0);
    ui->tabWidget->removeTab(0);

    // setup igram window
    scrollArea = new QScrollArea;
    gscrollArea = scrollArea;
    m_igramArea = new IgramArea(scrollArea, this);
    connect(m_igramArea, SIGNAL(statusBarUpdate(QString)), statusBar(), SLOT(showMessage(QString)));
    connect(m_igramArea, SIGNAL(upateColorChannels(QImage)), this, SLOT(updateChannels(QImage)));
    connect(m_igramArea, SIGNAL(showTab(int)),  ui->tabWidget, SLOT(setCurrentIndex(int)));
    connect(this, SIGNAL(gammaChanged(bool,double)), m_igramArea, SLOT(gammaChanged(bool, double)));
    m_igramArea->setBackgroundRole(QPalette::Base);
    installEventFilter(m_igramArea);
    //scrollArea->setBackgroundRole(QPalette::Dark);
    scrollArea->setWidget(m_igramArea);
    ui->tabWidget->addTab(scrollArea, "igram");

    m_dftTools = new DFTTools(this);
    m_vortexDebugTool = new vortexDebug(this);

    // setup DFT window
    scrollAreaDft = new QScrollArea;
    scrollAreaDft->setBackgroundRole(QPalette::Base);
    m_dftArea = new DFTArea(scrollAreaDft, m_igramArea, m_dftTools, m_vortexDebugTool);
    scrollAreaDft->setWidget(m_dftArea);
    scrollAreaDft->resize(800,800);
    ui->tabWidget->addTab(scrollAreaDft, "Analyze");

    m_contourTools = new ContourTools(this);
    m_outlineHelp = new outlineHelpDocWidget(this);
    m_surfTools = surfaceAnalysisTools::get_Instance(this);

    //DocWindows
    createDockWindows();

    userMapDlg = new userColorMapDlg();

    m_contourView = new contourView(this, m_contourTools);
    connect(m_contourView, SIGNAL(zoomMe(bool)),this, SLOT(zoomContour(bool)));
    m_ogl = new OGLView(0, m_contourTools, m_surfTools);
    connect(m_ogl,SIGNAL(zoomMe(bool)), this, SLOT(zoomOgl(bool)));

    connect(userMapDlg, SIGNAL(colorMapChanged(int)), m_contourView->getPlot(), SLOT(ContourMapColorChanged(int)));
    connect(userMapDlg, SIGNAL(colorMapChanged(int)),m_ogl->m_gl, SLOT(colorMapChanged(int)));
    review = new reviewWindow(this);
    review->s1->addWidget(m_ogl);

    m_profilePlot =  new ProfilePlot(review->s2,m_contourTools);
    m_mirrorDlg = mirrorDlg::get_Instance();
    review->s2->addWidget(m_profilePlot);
    review->s1->addWidget(m_contourView);
    //Surface Manager
    m_surfaceManager = SurfaceManager::get_instance(this,m_surfTools, m_profilePlot, m_contourView->getPlot(),
                                          m_ogl->m_gl, metrics);
    connect(m_surfaceManager, SIGNAL(load(QStringList,SurfaceManager*)), m_waveFrontLoader, SLOT(loadx(QStringList,SurfaceManager*)));
    connect(m_surfaceManager, SIGNAL(showMessage(QString)), this, SLOT(showMessage(QString)));
    connect(m_contourView, SIGNAL(showAllContours()), m_surfaceManager, SLOT(showAllContours()));
    connect(m_dftArea, SIGNAL(newWavefront(cv::Mat,CircleOutline,CircleOutline,QString)),
            m_surfaceManager, SLOT(createSurfaceFromPhaseMap(cv::Mat,CircleOutline,CircleOutline,QString)));
    connect(m_surfaceManager, SIGNAL(diameterChanged(double)),this,SLOT(diameterChanged(double)));
    connect(m_surfaceManager, SIGNAL(showTab(int)), ui->tabWidget, SLOT(setCurrentIndex(int)));
    connect(m_surfTools, SIGNAL(updateSelected()), m_surfaceManager, SLOT(backGroundUpdate()));
    connect(m_ogl, SIGNAL(showAll3d(GLWidget *)), m_surfaceManager, SLOT(showAll3D(GLWidget *)));

    ui->tabWidget->addTab(review, "Results");

    ui->tabWidget->addTab(SimulationsView::getInstance(ui->tabWidget), "Star Test, PSF, MTF");
    ui->tabWidget->addTab(foucaultView::get_Instance(m_surfaceManager), "Ronchi & Foucault");
    scrollArea->setWidgetResizable(true);
    scrollAreaDft->setWidgetResizable(true);
    createActions();

    //Recent Files list
    separatorAct = ui->menuFiles->addSeparator();
    for (int i = 0; i < MaxRecentFiles; ++i)
        ui->menuFiles->addAction(recentFileActs[i]);
    updateRecentFileActions();
    qRegisterMetaType<QVector<int> >();

    connect( m_igramArea, SIGNAL(enableShiftButtons(bool)), this,SLOT(enableShiftButtons(bool)));
    connect(m_dftArea, SIGNAL(dftReady(QImage)), m_igramArea,SLOT(dftReady(QImage)));
    connect(m_igramArea, SIGNAL(dftCenterFilter(double)), m_dftArea, SLOT(dftCenterFilter(double)));
    connect(m_igramArea, SIGNAL(upateColorChannels(QImage)), m_dftArea, SLOT(newIgram(QImage)));
    enableShiftButtons(true);


    connect(m_dftTools,SIGNAL(doDFT()),m_dftArea,SLOT(doDFT()));
    settingsDlg = Settings2::getInstance();
    connect(settingsDlg->m_igram,SIGNAL(igramLinesChanged(int,int,QColor,QColor,double,int, int)),
            m_igramArea,SLOT(igramOutlineParmsChanged(int, int, QColor, QColor, double, int, int)));

    QSettings settings;
    restoreState(settings.value("MainWindow/windowState").toByteArray());
    restoreGeometry(settings.value("geometry").toByteArray());
    connect(m_dftArea,SIGNAL(selectDFTTab()), this, SLOT(selectDftTab()));
    connect(ui->tabWidget,SIGNAL(currentChanged(int)),this, SLOT(mainTabChanged(int)));
    tabifyDockWidget(ui->outlineTools, m_dftTools);
    setTabPosition(Qt::RightDockWidgetArea, QTabWidget::West);
    setTabShape(QTabWidget::Triangular);
    ui->tabWidget->setTabShape(QTabWidget::Triangular);
    tabifyDockWidget(m_dftTools,m_contourTools);
    tabifyDockWidget(m_contourTools,m_surfTools);
    //tabifyDockWidget(m_contourTools,m_vortexTools);
    //tabifyDockWidget(m_vortexDebugTool,m_metrics);
    ui->outlineTools->show();
    ui->outlineTools->raise();

    zernEnables = std::vector<bool>(Z_TERMS, true);

    //disable first 8 enables except for astig
    // enable first 8 nulls except for astig
    for (int i = 0; i < 8; ++ i)
    {
        if (i == 4 || i == 5)
            continue;
        zernEnables[i] = false;
    }
    zernEnableUpdateTime = QDateTime::currentDateTime().toTime_t();

    connect(m_surfaceManager, SIGNAL(rocChanged(double)),this, SLOT(rocChanged(double)));
    connect(m_mirrorDlg, SIGNAL(newPath(QString)),this, SLOT(newMirrorDlgPath(QString)));
    progBar = new QProgressBar(this);
    ui->statusBar->addPermanentWidget(progBar);


}