PopupEditorWidget::PopupEditorWidget(QWidget * par) : QWidget(par) { m_bSaving = false; QGridLayout * l = new QGridLayout(this); QSplitter * spl = new QSplitter(Qt::Horizontal, this); spl->setObjectName("popupeditor_horizontal_splitter"); spl->setChildrenCollapsible(false); l->addWidget(spl, 0, 0); KviTalVBox * box = new KviTalVBox(spl); m_pTreeWidget = new QTreeWidget(box); m_pTreeWidget->setHeaderLabel(__tr2qs_ctx("Popup", "editor")); m_pTreeWidget->setSelectionMode(QAbstractItemView::ExtendedSelection); m_pTreeWidget->header()->setSortIndicatorShown(true); QPushButton * pb = new QPushButton(__tr2qs_ctx("&Export All to...", "editor"), box); connect(pb, SIGNAL(clicked()), this, SLOT(exportAll())); QPushButton * gn = new QPushButton(__tr2qs_ctx("&Export Selected to...", "editor"), box); connect(gn, SIGNAL(clicked()), this, SLOT(exportSelected())); m_pEditor = new SinglePopupEditor(spl); m_bOneTimeSetupDone = false; m_pLastEditedItem = nullptr; m_pContextPopup = new QMenu(this); m_pEmptyContextPopup = new QMenu(this); spl->setStretchFactor(0, 20); spl->setStretchFactor(1, 80); currentItemChanged(nullptr, nullptr); }
MStatus atomExport::writer( const MFileObject& file, const MString& options, FileAccessMode mode) { MStatus status = MS::kFailure; MString fileName = file.fullName(); #if defined (OSMac_) char fname[MAXPATHLEN]; strcpy (fname, fileName.asChar()); ofstream animFile(fname); #else ofstream animFile(fileName.asChar()); #endif // Defaults. // MString copyFlags("copyKey -cb api -fea 1 "); int precision = kDefaultPrecision; bool statics = false; bool includeChildren = false; std::set<std::string> attrStrings; // Parse the options. The options syntax is in the form of // "flag=val;flag1=val;flag2=val" // bool useSpecifiedRange = false; bool useTemplate = false; bool cached = false; bool constraint = false; bool sdk = false; bool animLayers = true; MString templateName; MString viewName; MTime startTime = MAnimControl::animationStartTime(); MTime endTime = MAnimControl::animationEndTime(); MString exportEditsFile; MString exportFlags; if (options.length() > 0) { const MString flagPrecision("precision"); const MString flagStatics("statics"); const MString flagConstraint("constraint"); const MString flagSDK("sdk"); const MString flagAnimLayers("animLayers"); const MString flagCopyKeyCmd("copyKeyCmd"); const MString flagSelected("selected"); const MString flagTemplate("template"); const MString flagView("view"); const MString optionChildrenToo("childrenToo"); const MString optionTemplate("template"); const MString flagAttr("at"); const MString flagWhichRange("whichRange"); const MString flagRange("range"); const MString flagExportEdits("exportEdits"); const MString flagCached("baked"); // Start parsing. // MStringArray optionList; MStringArray theOption; options.split(';', optionList); unsigned nOptions = optionList.length(); for (unsigned i = 0; i < nOptions; i++) { theOption.clear(); optionList[i].split('=', theOption); if (theOption.length() < 1) { continue; } if (theOption[0] == flagPrecision && theOption.length() > 1) { if (theOption[1].isInt()) { precision = theOption[1].asInt(); } } else if( theOption[0] == flagTemplate && theOption.length() > 1) { templateName = theOption[1]; } else if( theOption[0] == flagView && theOption.length() > 1) { viewName = theOption[1]; } else if ( theOption[0] == flagWhichRange && theOption.length() > 1) { if (theOption[1].isInt()) useSpecifiedRange = (theOption[1].asInt() ==1) ? false : true; } else if ( theOption[0] == flagRange && theOption.length() > 1) { MStringArray rangeArray; theOption[1].split(':',rangeArray); if(rangeArray.length()==2) { if(rangeArray[0].isDouble()) { double val = rangeArray[0].asDouble(); startTime = MTime(val,MTime::uiUnit()); } else if(rangeArray[0].isInt()) { double val = (double)rangeArray[0].asInt(); startTime = MTime(val,MTime::uiUnit()); } if(rangeArray[1].isDouble()) { double val = rangeArray[1].asDouble(); endTime = MTime(val,MTime::uiUnit()); } else if(rangeArray[1].isInt()) { double val = (double)rangeArray[1].asInt(); endTime = MTime(val,MTime::uiUnit()); } } } else if ( theOption[0] == flagStatics && theOption.length() > 1) { if (theOption[1].isInt()) { statics = (theOption[1].asInt()) ? true : false; } } else if ( theOption[0] == flagSDK && theOption.length() > 1) { if (theOption[1].isInt()) { sdk = (theOption[1].asInt()) ? true : false; } } else if ( theOption[0] == flagConstraint && theOption.length() > 1) { if (theOption[1].isInt()) { constraint = (theOption[1].asInt()) ? true : false; } } else if ( theOption[0] == flagAnimLayers && theOption.length() > 1) { if (theOption[1].isInt()) { animLayers = (theOption[1].asInt()) ? true : false; } } else if ( theOption[0] == flagCached && theOption.length() > 1) { if (theOption[1].isInt()) { cached = (theOption[1].asInt()) ? true : false; } } else if (theOption[0] == flagSelected && theOption.length() > 1) { includeChildren = (theOption[1] == optionChildrenToo) ? true : false; if(theOption[1] == optionTemplate) useTemplate = true; } else if (theOption[0] == flagAttr && theOption.length() > 1) { std::string str(theOption[1].asChar()); attrStrings.insert(str); } else if ( theOption[0] == flagCopyKeyCmd && theOption.length() > 1) { // Replace any '>' characters with '"'. This is needed // since the file translator option boxes do not handle // escaped quotation marks. // const char *optStr = theOption[1].asChar(); size_t nChars = strlen(optStr); char *copyStr = new char[nChars+1]; copyStr = strcpy(copyStr, optStr); for (size_t j = 0; j < nChars; j++) { if (copyStr[j] == '>') { copyStr[j] = '"'; } } copyFlags += copyStr; delete [] copyStr; } else if (theOption[0] == flagExportEdits && theOption.length() > 1) { exportEditsFile = theOption[1]; } } } // Set the precision of the ofstream. // animFile.precision(precision); atomTemplateReader templateReader; if(useTemplate == true) { includeChildren = false; templateReader.setTemplate(templateName,viewName); templateReader.selectNodes(); //make the template nodes be the selection } status = exportSelected(animFile, copyFlags, attrStrings, includeChildren, useSpecifiedRange, startTime, endTime, statics, cached,sdk,constraint, animLayers, exportEditsFile,templateReader); animFile.flush(); animFile.close(); return status; }
MStatus animExport::writer( const MFileObject& file, const MString& options, FileAccessMode mode) { MStatus status = MS::kFailure; MString fileName = file.fullName(); #if defined (OSMac_) char fname[MAXPATHLEN]; strcpy (fname, fileName.asChar()); ofstream animFile(fname); #else ofstream animFile(fileName.asChar()); #endif // Defaults. // MString copyFlags("copyKey -cb api -fea 1 "); int precision = kDefaultPrecision; bool nodeNames = true; bool verboseUnits = false; // Parse the options. The options syntax is in the form of // "flag=val;flag1=val;flag2=val" // MString exportFlags; if (options.length() > 0) { const MString flagPrecision("precision"); const MString flagNodeNames("nodeNames"); const MString flagVerboseUnits("verboseUnits"); const MString flagCopyKeyCmd("copyKeyCmd"); // Start parsing. // MStringArray optionList; MStringArray theOption; options.split(';', optionList); unsigned nOptions = optionList.length(); for (unsigned i = 0; i < nOptions; i++) { theOption.clear(); optionList[i].split('=', theOption); if (theOption.length() < 1) { continue; } if (theOption[0] == flagPrecision && theOption.length() > 1) { if (theOption[1].isInt()) { precision = theOption[1].asInt(); } } else if ( theOption[0] == flagNodeNames && theOption.length() > 1) { if (theOption[1].isInt()) { nodeNames = (theOption[1].asInt()) ? true : false; } } else if ( theOption[0] == flagVerboseUnits && theOption.length() > 1) { if (theOption[1].isInt()) { verboseUnits = (theOption[1].asInt()) ? true : false; } } else if ( theOption[0] == flagCopyKeyCmd && theOption.length() > 1) { // Replace any '>' characters with '"'. This is needed // since the file translator option boxes do not handle // escaped quotation marks. // const char *optStr = theOption[1].asChar(); size_t nChars = strlen(optStr); char *copyStr = new char[nChars+1]; copyStr = strcpy(copyStr, optStr); for (size_t j = 0; j < nChars; j++) { if (copyStr[j] == '>') { copyStr[j] = '"'; } } copyFlags += copyStr; delete [] copyStr; } } } // Set the precision of the ofstream. // animFile.precision(precision); status = exportSelected(animFile, copyFlags, nodeNames, verboseUnits); animFile.flush(); animFile.close(); return status; }
MainWindow::MainWindow(QWidget *parent) : QMainWindow(parent), ui(new Ui::MainWindow) { _log = NULL; _tableModel = NULL; _currentOptionsWidget = NULL; _currentAnalysis = NULL; _optionsForm = NULL; _package = new DataSetPackage(); _package->isModifiedChanged.connect(boost::bind(&MainWindow::packageChanged, this, _1)); QShortcut *saveShortcut = new QShortcut(QKeySequence("Ctrl+S"), this); QObject::connect(saveShortcut, SIGNAL(activated()), this, SLOT(saveKeysSelected())); QShortcut *openShortcut = new QShortcut(QKeySequence("Ctrl+O"), this); QObject::connect(openShortcut, SIGNAL(activated()), this, SLOT(openKeysSelected())); ui->setupUi(this); int initalTableWidth = 530; QList<int> sizes = QList<int>(); sizes.append(initalTableWidth); ui->splitter->setSizes(sizes); ui->tabBar->setFocusPolicy(Qt::NoFocus); ui->tabBar->addTab("File"); #ifdef QT_DEBUG ui->tabBar->addTab("Variables"); // variables view #endif ui->tabBar->addTab("Common"); #ifndef __linux__ ui->tabBar->addOptionsTab(); // no SEM under linux for now #endif ui->tabBar->addHelpTab(); connect(ui->tabBar, SIGNAL(currentChanged(int)), this, SLOT(tabChanged(int))); connect(ui->tabBar, SIGNAL(helpToggled(bool)), this, SLOT(helpToggled(bool))); ui->ribbonAnalysis->setDataSetLoaded(false); ui->ribbonSEM->setDataSetLoaded(false); ui->ribbonR11tLearn->setDataSetLoaded(false); #ifdef QT_DEBUG ui->webViewResults->page()->settings()->setAttribute(QWebSettings::DeveloperExtrasEnabled, true); ui->webViewHelp->page()->settings()->setAttribute(QWebSettings::DeveloperExtrasEnabled, true); #else ui->webViewResults->setContextMenuPolicy(Qt::NoContextMenu); ui->webViewHelp->setContextMenuPolicy(Qt::NoContextMenu); #endif tempfiles_init(ProcessInfo::currentPID()); // needed here so that the LRNAM can be passed the session directory _odm = new OnlineDataManager(this); QVariant osfUsernameV = _settings.value("OSFUsername"); QVariant osfPasswordV = _settings.value("OSFPassword", ""); if (osfUsernameV.canConvert(QMetaType::QString) && osfPasswordV.canConvert(QMetaType::QString)) { QString username = osfUsernameV.toString(); QString password = osfPasswordV.toString(); _odm->setAuthentication(OnlineDataManager::OSF, username, password); } _loader.setOnlineDataManager(_odm); ui->backStage->setOnlineDataManager(_odm); // the LRNAM adds mime types to local resources; important for SVGs ui->webViewResults->page()->setNetworkAccessManager(new LRNAM(tq(tempfiles_sessionDirName()), this)); ui->webViewResults->setUrl(QUrl(QString("qrc:///core/index.html"))); connect(ui->webViewResults, SIGNAL(loadFinished(bool)), this, SLOT(resultsPageLoaded(bool))); connect(ui->webViewResults, SIGNAL(scrollValueChanged()), this, SLOT(scrollValueChangedHandle())); _tableModel = new DataSetTableModel(); ui->tableView->setModel(_tableModel); #ifdef QT_DEBUG // variables view ui->tabBar->setCurrentIndex(2); #else ui->tabBar->setCurrentIndex(1); #endif ui->tableView->setVerticalScrollMode(QTableView::ScrollPerPixel); ui->tableView->setHorizontalScrollMode(QTableView::ScrollPerPixel); _analyses = new Analyses(); _engineSync = new EngineSync(_analyses, this); connect(_engineSync, SIGNAL(engineTerminated()), this, SLOT(fatalError())); connect(_analyses, SIGNAL(analysisResultsChanged(Analysis*)), this, SLOT(analysisResultsChangedHandler(Analysis*))); connect(_analyses, SIGNAL(analysisUserDataLoaded(Analysis*)), this, SLOT(analysisUserDataLoadedHandler(Analysis*))); connect(ui->ribbonAnalysis, SIGNAL(itemSelected(QString)), this, SLOT(itemSelected(QString))); connect(ui->ribbonSEM, SIGNAL(itemSelected(QString)), this, SLOT(itemSelected(QString))); connect(ui->ribbonR11tLearn, SIGNAL(itemSelected(QString)), this, SLOT(itemSelected(QString))); connect(ui->backStage, SIGNAL(dataSetIORequest(FileEvent*)), this, SLOT(dataSetIORequest(FileEvent*))); connect(ui->backStage, SIGNAL(exportSelected(QString)), this, SLOT(exportSelected(QString))); _progressIndicator = new ProgressWidget(ui->tableView); _progressIndicator->setAutoFillBackground(true); _progressIndicator->resize(400, 100); _progressIndicator->move(100, 80); _progressIndicator->hide(); connect(&_loader, SIGNAL(progress(QString,int)), _progressIndicator, SLOT(setStatus(QString,int))); connect(this, SIGNAL(analysisSelected(int)), this, SLOT(analysisSelectedHandler(int))); connect(this, SIGNAL(analysisUnselected()), this, SLOT(analysisUnselectedHandler())); connect(this, SIGNAL(saveTempImage(int, QString, QByteArray)), this, SLOT(saveTempImageHandler(int, QString, QByteArray))); connect(this, SIGNAL(displayMessageFromResults(QString)), this, SLOT(displayMessageFromResultsHandler(QString))); connect(this, SIGNAL(pushToClipboard(QString, QString, QString)), this, SLOT(pushToClipboardHandler(QString, QString, QString))); connect(this, SIGNAL(pushImageToClipboard(QByteArray, QString)), this, SLOT(pushImageToClipboardHandler(QByteArray, QString))); connect(this, SIGNAL(saveTextToFile(QString, QString)), this, SLOT(saveTextToFileHandler(QString, QString))); connect(this, SIGNAL(analysisChangedDownstream(int, QString)), this, SLOT(analysisChangedDownstreamHandler(int, QString))); connect(this, SIGNAL(showAnalysesMenu(QString)), this, SLOT(showAnalysesMenuHandler(QString))); connect(this, SIGNAL(removeAnalysisRequest(int)), this, SLOT(removeAnalysisRequestHandler(int))); connect(this, SIGNAL(updateUserData(int, QString)), this, SLOT(updateUserDataHandler(int, QString))); connect(this, SIGNAL(simulatedMouseClick(int, int, int)), this, SLOT(simulatedMouseClickHandler(int, int, int))); connect(this, SIGNAL(resultsDocumentChanged()), this, SLOT(resultsDocumentChangedHandler())); #ifdef __APPLE__ _scrollbarWidth = 3; #else _scrollbarWidth = qApp->style()->pixelMetric(QStyle::PM_ScrollBarExtent); #endif _buttonPanel = new QWidget(ui->panelMid); _buttonPanelLayout = new QVBoxLayout(_buttonPanel); _buttonPanelLayout->setSpacing(6); _buttonPanelLayout->setContentsMargins(0, _buttonPanelLayout->contentsMargins().top(), _buttonPanelLayout->contentsMargins().right(), 0); _buttonPanel->setLayout(_buttonPanelLayout); _okButton = new QPushButton(QString("OK"), _buttonPanel); _okButton->setDefault(true); _runButton = new QPushButton(QString("Run"), _buttonPanel); _menuButton = new QPushButton(QString("..."), _buttonPanel); QMenu *menu = new QMenu(_menuButton); menu->addAction("Remove Analysis", this, SLOT(analysisRemoved())); _menuButton->setMenu(menu); _buttonPanelLayout->addWidget(_okButton); _buttonPanelLayout->addWidget(_runButton); _buttonPanelLayout->addWidget(_menuButton); _buttonPanelLayout->addStretch(); _buttonPanel->resize(_buttonPanel->sizeHint()); _buttonPanel->move(ui->panelMid->width() - _buttonPanel->width() - _scrollbarWidth, 0); connect(_okButton, SIGNAL(clicked()), this, SLOT(analysisOKed())); connect(_runButton, SIGNAL(clicked()), this, SLOT(analysisRunned())); connect(ui->splitter, SIGNAL(splitterMoved(int,int)), this, SLOT(splitterMovedHandler(int,int))); _analysisMenu = new QMenu(this); connect(_analysisMenu, SIGNAL(aboutToHide()), this, SLOT(menuHidding())); updateUIFromOptions(); _tableViewWidthBeforeOptionsMadeVisible = -1; QUrl userGuide = QUrl::fromLocalFile(AppDirs::help() + "/index.html"); ui->webViewHelp->setUrl(userGuide); connect(ui->webViewHelp, SIGNAL(loadFinished(bool)), this, SLOT(helpFirstLoaded(bool))); ui->panelHelp->hide(); setAcceptDrops(true); #ifdef __WIN32__ QApplication::setFont(ui->tableView->font()); #endif setupOptionPanelSize(); ui->panelMid->hide(); }
MainWindow::MainWindow(QWidget *parent) : QMainWindow(parent), ui(new Ui::MainWindow) { _inited = false; _dataSet = NULL; _tableModel = NULL; _currentOptionsWidget = NULL; _currentAnalysis = NULL; _optionsForm = NULL; ui->setupUi(this); ui->pageOptions->hide(); QList<int> sizes = QList<int>(); sizes.append(590); ui->splitter->setSizes(sizes); ui->tabBar->setFocusPolicy(Qt::NoFocus); ui->tabBar->addTab("File"); ui->tabBar->addTab("Common"); ui->tabBar->addLastTab("Options"); connect(ui->tabBar, SIGNAL(currentChanged(int)), this, SLOT(tabChanged(int))); #ifdef __WIN32__ QFont font = ui->tabBar->font(); font.setPointSize(10); ui->tabBar->setFont(font); #endif ui->ribbonAnalysis->setEnabled(false); ui->ribbonSEM->setEnabled(false); #ifdef QT_DEBUG ui->webViewResults->page()->settings()->setAttribute(QWebSettings::DeveloperExtrasEnabled, true); #else ui->webViewResults->setContextMenuPolicy(Qt::NoContextMenu); #endif ui->webViewResults->setUrl(QUrl(QString("qrc:///core/index.html"))); _tableModel = new DataSetTableModel(); ui->tableView->setModel(_tableModel); ui->tabBar->setCurrentIndex(1); ui->tableView->setVerticalScrollMode(QTableView::ScrollPerPixel); ui->tableView->setHorizontalScrollMode(QTableView::ScrollPerPixel); _analyses = new Analyses(); _engineSync = new EngineSync(_analyses, this); connect(_engineSync, SIGNAL(engineTerminated()), this, SLOT(engineCrashed())); _analyses->analysisResultsChanged.connect(boost::bind(&MainWindow::analysisResultsChangedHandler, this, _1)); connect(ui->ribbonAnalysis, SIGNAL(itemSelected(QString)), this, SLOT(itemSelected(QString))); connect(ui->ribbonSEM, SIGNAL(itemSelected(QString)), this, SLOT(itemSelected(QString))); connect(ui->backStage, SIGNAL(dataSetSelected(QString)), this, SLOT(dataSetSelected(QString))); connect(ui->backStage, SIGNAL(closeDataSetSelected()), this, SLOT(dataSetCloseRequested())); connect(ui->backStage, SIGNAL(exportSelected(QString)), this, SLOT(exportSelected(QString))); _alert = new ProgressWidget(ui->tableView); _alert->setAutoFillBackground(true); _alert->resize(400, 100); _alert->move(100, 80); _alert->hide(); connect(&_loader, SIGNAL(complete(DataSet*)), this, SLOT(dataSetLoaded(DataSet*))); connect(&_loader, SIGNAL(progress(QString,int)), _alert, SLOT(setStatus(QString,int))); connect(&_loader, SIGNAL(fail(QString)), this, SLOT(dataSetLoadFailed(QString))); connect(this, SIGNAL(analysisSelected(int)), this, SLOT(analysisSelectedHandler(int))); connect(this, SIGNAL(analysisUnselected()), this, SLOT(analysisUnselectedHandler())); connect(this, SIGNAL(pushToClipboard(QString)), this, SLOT(pushToClipboardHandler(QString))); connect(this, SIGNAL(analysisChangedDownstream(int, QString)), this, SLOT(analysisChangedDownstreamHandler(int, QString))); _buttonPanel = new QWidget(ui->pageOptions); _buttonPanelLayout = new QVBoxLayout(_buttonPanel); _buttonPanelLayout->setSpacing(6); _buttonPanelLayout->setContentsMargins(0, 12, 24, 0); _buttonPanel->setLayout(_buttonPanelLayout); _okButton = new QPushButton(QString("OK"), _buttonPanel); _removeButton = new QPushButton(QString("Remove"), _buttonPanel); _buttonPanelLayout->addWidget(_okButton); _buttonPanelLayout->addWidget(_removeButton); _buttonPanel->resize(_buttonPanel->sizeHint()); QTimer::singleShot(0, this, SLOT(repositionButtonPanel())); connect(_okButton, SIGNAL(clicked()), this, SLOT(analysisOKed())); connect(_removeButton, SIGNAL(clicked()), this, SLOT(analysisRemoved())); connect(ui->splitter, SIGNAL(splitterMoved(int,int)), this, SLOT(splitterMovedHandler(int,int))); updateUIFromOptions(); }
MainWindow::MainWindow(QWidget *parent) : QMainWindow(parent), ui(new Ui::MainWindow) { _inited = false; _tableModel = NULL; _currentOptionsWidget = NULL; _currentAnalysis = NULL; _optionsForm = NULL; _package = new DataSetPackage(); _package->isModifiedChanged.connect(boost::bind(&MainWindow::packageChanged, this, _1)); QShortcut *saveShortcut = new QShortcut(QKeySequence("Ctrl+S"), this); QObject::connect(saveShortcut, SIGNAL(activated()), this, SLOT(saveKeysSelected())); QShortcut *openShortcut = new QShortcut(QKeySequence("Ctrl+O"), this); QObject::connect(openShortcut, SIGNAL(activated()), this, SLOT(openKeysSelected())); ui->setupUi(this); QList<int> sizes = QList<int>(); sizes.append(590); ui->splitter->setSizes(sizes); ui->tabBar->setFocusPolicy(Qt::NoFocus); ui->tabBar->addTab("File"); ui->tabBar->addTab("Common"); ui->tabBar->addOptionsTab(); ui->tabBar->addHelpTab(); connect(ui->tabBar, SIGNAL(currentChanged(int)), this, SLOT(tabChanged(int))); connect(ui->tabBar, SIGNAL(helpToggled(bool)), this, SLOT(helpToggled(bool))); #ifdef __WIN32__ QFont font = ui->tabBar->font(); font.setPointSize(10); ui->tabBar->setFont(font); #endif ui->ribbonAnalysis->setEnabled(false); ui->ribbonSEM->setEnabled(false); ui->ribbonR11tLearn->setEnabled(false); #ifdef QT_DEBUG ui->webViewResults->page()->settings()->setAttribute(QWebSettings::DeveloperExtrasEnabled, true); ui->webViewHelp->page()->settings()->setAttribute(QWebSettings::DeveloperExtrasEnabled, true); #else ui->webViewResults->setContextMenuPolicy(Qt::NoContextMenu); ui->webViewHelp->setContextMenuPolicy(Qt::NoContextMenu); #endif tempfiles_init(ProcessInfo::currentPID()); // needed here so that the LRNAM can be passed the session directory // the LRNAM adds mime types to local resources; important for SVGs ui->webViewResults->page()->setNetworkAccessManager(new LRNAM(tq(tempfiles_sessionDirName()), this)); ui->webViewResults->setUrl(QUrl(QString("qrc:///core/index.html"))); connect(ui->webViewResults, SIGNAL(loadFinished(bool)), this, SLOT(resultsPageLoaded(bool))); _tableModel = new DataSetTableModel(); ui->tableView->setModel(_tableModel); ui->tabBar->setCurrentIndex(1); ui->tableView->setVerticalScrollMode(QTableView::ScrollPerPixel); ui->tableView->setHorizontalScrollMode(QTableView::ScrollPerPixel); _analyses = new Analyses(); _engineSync = new EngineSync(_analyses, this); connect(_engineSync, SIGNAL(engineTerminated()), this, SLOT(fatalError())); connect(_analyses, SIGNAL(analysisResultsChanged(Analysis*)), this, SLOT(analysisResultsChangedHandler(Analysis*))); connect(ui->ribbonAnalysis, SIGNAL(itemSelected(QString)), this, SLOT(itemSelected(QString))); connect(ui->ribbonSEM, SIGNAL(itemSelected(QString)), this, SLOT(itemSelected(QString))); connect(ui->ribbonR11tLearn, SIGNAL(itemSelected(QString)), this, SLOT(itemSelected(QString))); connect(ui->backStage, SIGNAL(dataSetSelected(QString)), this, SLOT(dataSetSelected(QString))); connect(ui->backStage, SIGNAL(closeDataSetSelected()), this, SLOT(dataSetCloseRequested())); connect(ui->backStage, SIGNAL(exportSelected(QString)), this, SLOT(exportSelected(QString))); connect(ui->backStage, SIGNAL(saveSelected(QString)), this, SLOT(saveSelected(QString))); _alert = new ProgressWidget(ui->tableView); _alert->setAutoFillBackground(true); _alert->resize(400, 100); _alert->move(100, 80); _alert->hide(); connect(&_loader, SIGNAL(complete(const QString&, DataSetPackage*, const QString&)), this, SLOT(dataSetLoaded(const QString&, DataSetPackage*, const QString&))); connect(&_loader, SIGNAL(saveComplete(const QString&)), this, SLOT(saveComplete(const QString&))); connect(&_loader, SIGNAL(progress(QString,int)), _alert, SLOT(setStatus(QString,int))); connect(&_loader, SIGNAL(fail(QString)), this, SLOT(dataSetLoadFailed(QString))); connect(&_loader, SIGNAL(saveFail(QString)), this, SLOT(saveFailed(QString))); connect(this, SIGNAL(analysisSelected(int)), this, SLOT(analysisSelectedHandler(int))); connect(this, SIGNAL(analysisUnselected()), this, SLOT(analysisUnselectedHandler())); connect(this, SIGNAL(pushToClipboard(QString, QString)), this, SLOT(pushToClipboardHandler(QString, QString))); connect(this, SIGNAL(analysisChangedDownstream(int, QString)), this, SLOT(analysisChangedDownstreamHandler(int, QString))); _buttonPanel = new QWidget(ui->pageOptions); _buttonPanelLayout = new QVBoxLayout(_buttonPanel); _buttonPanelLayout->setSpacing(6); _buttonPanelLayout->setContentsMargins(0, 12, 24, 0); _buttonPanel->setLayout(_buttonPanelLayout); _okButton = new QPushButton(QString("OK"), _buttonPanel); _okButton->setDefault(true); _runButton = new QPushButton(QString("Run"), _buttonPanel); _menuButton = new QPushButton(QString("..."), _buttonPanel); QMenu *menu = new QMenu(_menuButton); menu->addAction("Remove Analysis", this, SLOT(analysisRemoved())); _menuButton->setMenu(menu); _buttonPanelLayout->addWidget(_okButton); _buttonPanelLayout->addWidget(_runButton); _buttonPanelLayout->addWidget(_menuButton); _buttonPanelLayout->addStretch(); _buttonPanel->resize(_buttonPanel->sizeHint()); _buttonPanel->move(ui->panelMid->minimumWidth() - _buttonPanel->width(), 0); connect(_okButton, SIGNAL(clicked()), this, SLOT(analysisOKed())); connect(_runButton, SIGNAL(clicked()), this, SLOT(analysisRunned())); connect(ui->splitter, SIGNAL(splitterMoved(int,int)), this, SLOT(splitterMovedHandler(int,int))); updateUIFromOptions(); ui->panelMid->hide(); _tableViewWidthBeforeOptionsMadeVisible = -1; QUrl userGuide = QUrl::fromLocalFile(AppDirs::help() + "/index.html"); ui->webViewHelp->setUrl(userGuide); connect(ui->webViewHelp, SIGNAL(loadFinished(bool)), this, SLOT(helpFirstLoaded(bool))); ui->panelHelp->hide(); try { _log = new ActivityLog(); _log->log("Application Start"); ui->backStage->setLog(_log); _engineSync->setLog(_log); _log->flushLogToServer(); QTimer *timer = new QTimer(this); timer->setInterval(30000); connect(timer, SIGNAL(timeout()), _log, SLOT(flushLogToServer())); timer->start(); } catch (std::runtime_error &e) { _log = NULL; _fatalError = tq(e.what()); QTimer::singleShot(0, this, SLOT(fatalError())); } setAcceptDrops(true); }