ExpressionEditorWindow::ExpressionEditorWindow( const Project& project, ParamArray& settings, const QString& widget_name, const string& expression, QWidget* parent) : WindowBase(parent, "expression_editor_window") , m_ui(new Ui::ExpressionEditorWindow()) , m_project(project) , m_settings(settings) , m_widget_name(widget_name) , m_show_examples(false) { m_ui->setupUi(this); setAttribute(Qt::WA_DeleteOnClose); setWindowFlags(Qt::Tool); QHBoxLayout* root_layout = new QHBoxLayout(m_ui->scrollarea); QVBoxLayout* left_layout = new QVBoxLayout(); QVBoxLayout* right_layout = new QVBoxLayout(); root_layout->addLayout(left_layout); root_layout->addLayout(right_layout); // Expression controls. SeExprEdControlCollection* controls = new SeExprEdControlCollection(); QScrollArea* controls_scrollarea = new QScrollArea(this); controls_scrollarea->setObjectName("expression_controls"); controls_scrollarea->setMinimumHeight(200); controls_scrollarea->setWidgetResizable(true); controls_scrollarea->setWidget(controls); left_layout->addWidget(controls_scrollarea); // Clear button. QShortcut* clear_shortcut = new QShortcut(QKeySequence("Ctrl+N"), this); connect(clear_shortcut, SIGNAL(activated()), SLOT(slot_clear_expression())); QPushButton* clear_button = new QPushButton("Clear"); clear_button->setToolTip(clear_shortcut->key().toString(QKeySequence::NativeText)); connect(clear_button, SIGNAL(clicked()), SLOT(slot_clear_expression())); // Save button. QShortcut* save_shortcut = new QShortcut(QKeySequence("Ctrl+S"), this); connect(save_shortcut, SIGNAL(activated()), SLOT(slot_save_script())); QPushButton* save_button = new QPushButton("Save"); save_button->setToolTip(save_shortcut->key().toString(QKeySequence::NativeText)); connect(save_button, SIGNAL(clicked()), SLOT(slot_save_script())); // Load button. QShortcut* load_shortcut = new QShortcut(QKeySequence("Ctrl+O"), this); connect(load_shortcut, SIGNAL(activated()), SLOT(slot_load_script())); QPushButton* load_button = new QPushButton("Load"); load_button->setToolTip(load_shortcut->key().toString(QKeySequence::NativeText)); connect(load_button, SIGNAL(clicked()), SLOT(slot_load_script())); // Help button. QPushButton* help_button = new QPushButton("Help"); connect(help_button, SIGNAL(clicked()), SLOT(slot_show_help())); // Examples button. QPushButton* examples_button = new QPushButton("Examples"); connect(examples_button, SIGNAL(clicked()), SLOT(slot_show_examples())); QHBoxLayout* file_buttonbox = new QHBoxLayout(); file_buttonbox->addWidget(clear_button); file_buttonbox->addWidget(load_button); file_buttonbox->addWidget(save_button); file_buttonbox->addWidget(help_button); file_buttonbox->addWidget(examples_button); left_layout->addLayout(file_buttonbox); m_editor = new SeExprEditor(this, controls); QTextEdit* text_edit = m_editor->findChild<QTextEdit*>(""); text_edit->setObjectName("expression_editor"); m_editor->setExpr(expression, true); left_layout->addWidget(m_editor); m_error = new QLabel("Expression has errors. Check log for details."); m_error->setObjectName("error"); m_error->hide(); left_layout->addWidget(m_error); // Expression browser. m_browser = new SeExprEdBrowser(nullptr, m_editor); const bf::path root_path(Application::get_root_path()); const string scripts_path = (root_path / "seexpr").string(); m_browser->addPath("Examples", scripts_path); m_browser->update(); m_browser->hide(); right_layout->addWidget(m_browser); m_ui->buttonbox_layout->addStretch(1); m_ui->buttonbox_layout->setStretch(0, 1); m_ui->buttonbox_layout->setStretch(1, 0); connect(m_ui->buttonbox, SIGNAL(accepted()), SLOT(slot_accept())); connect(m_ui->buttonbox, SIGNAL(rejected()), SLOT(slot_cancel())); connect( m_ui->buttonbox->button(QDialogButtonBox::Apply), SIGNAL(clicked()), SLOT(slot_apply())); connect( create_window_local_shortcut(this, Qt::Key_Escape), SIGNAL(activated()), SLOT(close())); WindowBase::load_settings(); }
MainWindow::MainWindow(QWidget *parent) : QMainWindow(parent), ui(new Ui::MainWindow) { textChanged=false; current_filename="./scripts/default.txt"; ui->setupUi(this); for(int i=0; i<NBColorMode; i++) { ui->cb__color_mode->addItem(ColorMode_str[i]); } for(int i=0; i<NB_Gradients; i++) { ui->cb_gradient_preset->addItem(ColorGradients_str[i]); } //Menu algo_group=new QActionGroup(NULL); QMenu * menu=new QMenu; for(int i=0; i<NBSolveMode; i++) { QAction * new_action=new QAction(QString(SolveMode_str[i]),this); new_action->setShortcut(QString("Ctrl+F%1").arg(i+1)); new_action->setCheckable(true); menu->addAction(new_action); algo_group->addAction(new_action); } ui->actionAlgorithms->setMenu(menu); QList<QAction*> list=algo_group->actions(); list[0]->setChecked(true); //Display output_1d=new Viewer1D(); output_2d=new Viewer2D(); output_3d=new Viewer3D(); tab_plots=new QTabWidget(); tab_plots->addTab(output_1d,"Plot 1D"); tab_plots->addTab(output_2d,"Plot 2D"); tab_plots->addTab(output_3d,"Plot 3D"); tab_plots->setWindowTitle("2D/3D Plots"); //System sys=new System(); ui->tabSystem->addTab(sys->getParamHandler(),QString("Parameters")); qRegisterMetaType< Box >("Box"); qRegisterMetaType< std::vector<double> >("std::vector<double>"); qRegisterMetaType< std::vector<std::vector<double>> >("std::vector<std::vector<double>>"); qRegisterMetaType< std::vector<std::vector<std::vector<double>>> >("std::vector<std::vector<std::vector<double>>"); connect(ui->actionMinimize,SIGNAL(triggered()),this,SLOT(slot_run_script())); connect(ui->actionSave,SIGNAL(triggered()),this,SLOT(slot_direct_save_script())); connect(ui->actionSaveUnder,SIGNAL(triggered()),this,SLOT(slot_save_script())); connect(ui->actionOpen,SIGNAL(triggered()),this,SLOT(slot_load_script())); connect(ui->te_script,SIGNAL(textChanged()),this,SLOT(slot_text_changed())); connect(ui->actionQuit,SIGNAL(triggered(bool)),this,SLOT(close())); connect(ui->pb_calculate_conv,SIGNAL(clicked()),this,SLOT(slot_conv())); connect(ui->pb_calculate_func,SIGNAL(clicked()),this,SLOT(slot_func())); connect(ui->pb_save_conv_setting,SIGNAL(clicked()),this,SLOT(slot_save_conv_setting())); connect(ui->pb_load_conv_setting,SIGNAL(clicked()),this,SLOT(slot_load_conv_setting())); connect(ui->rb_1D,SIGNAL(clicked()),this,SLOT(update_button_names_1d())); connect(ui->rb_2D,SIGNAL(clicked()),this,SLOT(update_button_names_2d())); connect(ui->rb_3D,SIGNAL(clicked()),this,SLOT(update_button_names_3d())); connect(output_2d,SIGNAL(pick(double,double)),this,SLOT(pick(double,double))); connect(sys,SIGNAL(progress(int)),ui->progressBar,SLOT(setValue(int))); connect(ui->a_tiles,SIGNAL(triggered()),ui->mdiArea,SLOT(tileSubWindows())); connect(ui->cb_param1,SIGNAL(currentIndexChanged(int)),this,SLOT(id1_changed(int))); connect(ui->cb_param2,SIGNAL(currentIndexChanged(int)),this,SLOT(id2_changed(int))); connect(ui->cb_param3,SIGNAL(currentIndexChanged(int)),this,SLOT(id3_changed(int))); connect(ui->cb_gradient_preset,SIGNAL(currentIndexChanged(int)),output_3d,SLOT(setGradient(int))); connect(ui->cb_gradient_preset,SIGNAL(currentIndexChanged(int)),output_2d,SLOT(setGradient(int))); connect(&worker,SIGNAL(sig_solve()),this,SLOT(slot_solve_over())); connect(&worker,SIGNAL(sig_output_1d(std::vector<double>,Box)),output_1d,SLOT(slot_set_data(std::vector<double>,Box))); connect(&worker,SIGNAL(sig_output_2d(std::vector<std::vector<double>>,Box)),output_2d,SLOT(slot_set_data(std::vector<std::vector<double>>,Box))); connect(&worker,SIGNAL(sig_output_3d(std::vector<std::vector<std::vector<double>>>,Box)),output_3d,SLOT(slot_set_data(std::vector<std::vector<std::vector<double>>>,Box))); setStyle(this,"./style.qss"); setStyle(sys,"./style.qss"); setStyle(output_2d,"./style.qss"); setStyle(output_3d,"./style.qss"); ui->mdiArea->addSubWindow(sys,Qt::CustomizeWindowHint | Qt::WindowMinMaxButtonsHint); ui->mdiArea->addSubWindow(tab_plots,Qt::CustomizeWindowHint | Qt::WindowMinMaxButtonsHint); ui->mdiArea->addSubWindow(ui->tabSystem,Qt::CustomizeWindowHint | Qt::WindowMinMaxButtonsHint); id1_changed(ui->cb_param1->currentIndex()); id2_changed(ui->cb_param2->currentIndex()); id3_changed(ui->cb_param3->currentIndex()); QTimer::singleShot(500, ui->mdiArea, SLOT(tileSubWindows())); }