diff --git a/src/kalgebra.h b/src/kalgebra.h --- a/src/kalgebra.h +++ b/src/kalgebra.h @@ -54,16 +54,14 @@ QTabWidget* m_tabs; //consoleeWidget - QMenu* c_menu; KRecentFilesAction* c_recentScripts; Analitza::ExpressionEdit *c_exp; ConsoleHtml *c_results; QTreeView *c_variables; QDockWidget *c_dock_vars; Analitza::VariablesModel* c_varsModel; //graf 2d - QMenu* b_menu; Analitza::PlotsModel* b_funcsModel; QTreeView *b_funcs; QTabWidget *b_tools; @@ -73,7 +71,6 @@ Analitza::VariablesModel* b_varsModel; //graph 3d - QMenu* t_menu; Analitza::ExpressionEdit *t_exp; Analitza::PlotsView3DES *m_graph3d; Analitza::PlotsModel* t_model3d; @@ -110,12 +107,14 @@ void set_res_vfine(); void valueChanged(); void varsContextMenu(const QPoint&); + void resetView(); void new_func3d(); void set_dots(); void set_lines(); void set_solid(); void save3DGraph(); + void smartSaveGraph(); void saveGraph(); void functools ( int ); diff --git a/src/kalgebra.cpp b/src/kalgebra.cpp --- a/src/kalgebra.cpp +++ b/src/kalgebra.cpp @@ -126,7 +126,6 @@ m_status = new QLabel(this); statusBar()->insertWidget(0, m_status); - menuBar()->addAction(QStringLiteral("|"))->setEnabled(false); ///////Console QWidget *console = new QWidget(m_tabs); @@ -155,43 +154,27 @@ m_tabs->addTab(console, i18n("&Calculator")); console->setLayout(c_layo); c_layo->addWidget(c_results); - c_layo->addWidget(c_exp); - + + auto layout = new QBoxLayout(QBoxLayout::RightToLeft); + + QPushButton* enter = new QPushButton("&Enter", this); + QPushButton* clear = new QPushButton("&Clear", this); + + layout->addWidget(clear); + layout->addWidget(enter); + layout->addWidget(c_exp); + + c_layo->addLayout(layout); + + connect(clear, &QPushButton::clicked, c_results, &ConsoleHtml::clear); + connect(enter, &QPushButton::clicked, this, &KAlgebra::operate); connect(c_exp, &Analitza::ExpressionEdit::returnPressed, this, &KAlgebra::operate); connect(c_results, &ConsoleHtml::status, this, &KAlgebra::changeStatusBar); connect(c_results, &ConsoleHtml::changed, this, &KAlgebra::updateInformation); connect(c_results, SIGNAL(changed()), c_exp, SLOT(updateCompleter())); connect(c_results, SIGNAL(paste(QString)), c_exp, SLOT(insertText(QString))); connect(c_variables, &QAbstractItemView::clicked, this, &KAlgebra::edit_var); - ////////menu - c_menu = menuBar()->addMenu(i18n("C&alculator")); - - c_menu->addAction(QIcon::fromTheme(QStringLiteral("document-open")), i18nc("@item:inmenu", "&Load Script..."), - this, SLOT(loadScript()), Qt::CTRL+Qt::Key_L); - c_recentScripts=new KRecentFilesAction(QIcon::fromTheme(QStringLiteral("document-open-recent")), i18n("Recent Scripts"), this); - connect(c_recentScripts, SIGNAL(urlSelected(QUrl)), this, SLOT(loadScript(QUrl))); - c_menu->addAction(c_recentScripts); - - c_menu->addAction(QIcon::fromTheme(QStringLiteral("document-save")), i18nc("@item:inmenu", "&Save Script..."), - this, SLOT(saveScript()), Qt::CTRL+Qt::Key_G); - c_menu->addAction(QIcon::fromTheme(QStringLiteral("document-save")), i18nc("@item:inmenu", "&Export Log..."), - this, SLOT(saveLog()), QKeySequence::Save); - c_menu->addSeparator()->setText(i18n("Execution Mode")); - QActionGroup *execGroup = new QActionGroup(c_menu); - QAction* calc = c_menu->addAction(i18nc("@item:inmenu", "Calculate"), this, SLOT(consoleCalculate())); - QAction* eval = c_menu->addAction(i18nc("@item:inmenu", "Evaluate"), this, SLOT(consoleEvaluate())); - - calc->setCheckable(true); - eval->setCheckable(true); - eval->setChecked(true); - execGroup->addAction(calc); - execGroup->addAction(eval); - c_menu->addSeparator(); - c_menu->addAction(KStandardAction::clear(c_results, SLOT(clear()), this)); - initializeRecentScripts(); - //////////// - //////EOConsola - + //////2D Graph b_funcsModel=new Analitza::PlotsModel(this); @@ -248,44 +231,6 @@ connect(b_viewport, SIGNAL(viewportChange(QRectF)), m_graph2d, SLOT(changeViewport(QRectF))); connect(b_varsView, &QWidget::customContextMenuRequested, this, &KAlgebra::varsContextMenu); - ////////menu - b_menu = menuBar()->addMenu(i18n("2&D Graph")); - QAction* b_actions[6]; - b_actions[0] = b_menu->addAction(i18n("&Grid"), this, SLOT(toggleSquares())); - b_actions[1] = b_menu->addAction(i18n("&Keep Aspect Ratio"), this, SLOT(toggleKeepAspect())); - b_menu->addAction(KStandardAction::save(this, SLOT(saveGraph()), this)); - b_menu->addSeparator(); - b_menu->addAction(KStandardAction::zoomIn(m_graph2d, SLOT(zoomIn()), this)); - b_menu->addAction(KStandardAction::zoomOut(m_graph2d, SLOT(zoomOut()), this)); - QAction* ac=KStandardAction::actualSize(m_graph2d, SLOT(resetViewport()), this); - ac->setShortcut(Qt::ControlModifier + Qt::Key_0); - b_menu->addAction(ac); - b_menu->addSeparator()->setText(i18n("Resolution")); - b_actions[2] = b_menu->addAction(i18nc("@item:inmenu", "Poor"), this, SLOT(set_res_low())); - b_actions[3] = b_menu->addAction(i18nc("@item:inmenu", "Normal"), this, SLOT(set_res_std())); - b_actions[4] = b_menu->addAction(i18nc("@item:inmenu", "Fine"), this, SLOT(set_res_fine())); - b_actions[5] = b_menu->addAction(i18nc("@item:inmenu", "Very Fine"), this, SLOT(set_res_vfine())); - m_graph2d->setContextMenuPolicy(Qt::ActionsContextMenu); - m_graph2d->addActions(b_menu->actions()); - - QActionGroup *res = new QActionGroup(b_menu); - res->addAction(b_actions[2]); - res->addAction(b_actions[3]); - res->addAction(b_actions[4]); - res->addAction(b_actions[5]); - - b_actions[0]->setCheckable(true); - b_actions[0]->setChecked(true); - b_actions[1]->setCheckable(true); - b_actions[1]->setChecked(true); - b_actions[2]->setCheckable(true); - b_actions[3]->setCheckable(true); - b_actions[3]->setChecked(true); - b_actions[4]->setCheckable(true); - b_actions[5]->setCheckable(true); - set_res_std(); - //////EO2D Graph - /////3DGraph QWidget *tridim = new QWidget(m_tabs); QVBoxLayout *t_layo = new QVBoxLayout(tridim); @@ -305,30 +250,6 @@ connect(t_exp, &Analitza::ExpressionEdit::returnPressed, this, &KAlgebra::new_func3d); c_results->addOptionsObserver(new Add3DOption(this)); - ////////menu - t_menu = menuBar()->addMenu(i18n("3D &Graph")); - QAction* t_actions[5]; - t_menu->addAction(KStandardAction::save(this, SLOT(save3DGraph()), this)); - t_menu->addAction(QIcon::fromTheme(QStringLiteral("zoom-original")), i18n("&Reset View"), m_graph3d, [this]() { m_graph3d->resetViewport(); }); - t_menu->addSeparator(); - t_actions[2] = t_menu->addAction(i18n("Dots"), this, SLOT(set_dots())); - t_actions[3] = t_menu->addAction(i18n("Lines"), this, SLOT(set_lines())); - t_actions[4] = t_menu->addAction(i18n("Solid"), this, SLOT(set_solid())); - - QActionGroup *t_type = new QActionGroup(t_menu); - t_type->addAction(t_actions[2]); - t_type->addAction(t_actions[3]); - t_type->addAction(t_actions[4]); - - t_actions[2]->setCheckable(true); - t_actions[3]->setCheckable(true); - t_actions[4]->setCheckable(true); - t_actions[4]->setChecked(true); - - //////////// - //////EO3D Graph - menuBar()->addAction(QStringLiteral("|"))->setEnabled(false); - //Dictionary tab d_dock = new QDockWidget(i18n("Operations"), this); d_dock->setFeatures(QDockWidget::DockWidgetFloatable | QDockWidget::DockWidgetMovable); @@ -352,7 +273,89 @@ connect(d_list->selectionModel(), &QItemSelectionModel::currentChanged, dic, &Dictionary::activated); - + + //files + QMenu* fileMenu = new QMenu(); + fileMenu = menuBar()->addMenu(tr("&File")); + + fileMenu->addAction(KStandardAction::save(this, SLOT(smartSaveGraph()), this)); + + fileMenu->addSeparator()->setText(i18n("Calculator")); + fileMenu->addAction(QIcon::fromTheme(QStringLiteral("document-open")), i18nc("@item:inmenu", "&Load Script..."), + this, SLOT(loadScript()), Qt::CTRL+Qt::Key_L); + c_recentScripts=new KRecentFilesAction(QIcon::fromTheme(QStringLiteral("document-open-recent")), i18n("Recent Scripts"), this); + connect(c_recentScripts, SIGNAL(urlSelected(QUrl)), this, SLOT(loadScript(QUrl))); + fileMenu->addAction(c_recentScripts); + + fileMenu->addAction(QIcon::fromTheme(QStringLiteral("document-save")), i18nc("@item:inmenu", "&Save Script..."), + this, SLOT(saveScript()), Qt::CTRL+Qt::Key_G); + + //settings + QMenu* settingsMenu = new QMenu(); + settingsMenu = menuBar()->addMenu(tr("&Settings")); + settingsMenu->addAction(i18n("Reset View"), this, SLOT(resetView()),Qt::CTRL+Qt::Key_R); + + QActionGroup *execGroup = new QActionGroup(settingsMenu); + + settingsMenu->addSeparator()->setText(i18n("Calculator")); + QAction* calc = settingsMenu->addAction(i18nc("@item:inmenu", "Calculate"), this, SLOT(consoleCalculate())); + QAction* eval = settingsMenu->addAction(i18nc("@item:inmenu", "Evaluate"), this, SLOT(consoleEvaluate())); + + calc->setCheckable(true); + eval->setCheckable(true); + eval->setChecked(true); + execGroup->addAction(calc); + execGroup->addAction(eval); + + settingsMenu->addSeparator()->setText(i18n("2D Graph")); + + QAction* kactions[6]; + kactions[0] = settingsMenu->addAction(i18n("&Grid"), this, SLOT(toggleSquares())); + kactions[1] = settingsMenu->addAction(i18n("&Keep Aspect Ratio"), this, SLOT(toggleKeepAspect())); + settingsMenu->addSeparator()->setText(i18n("Resolution")); + kactions[2] = settingsMenu->addAction(i18nc("@item:inmenu", "Poor"), this, SLOT(set_res_low())); + kactions[3] = settingsMenu->addAction(i18nc("@item:inmenu", "Normal"), this, SLOT(set_res_std())); + kactions[4] = settingsMenu->addAction(i18nc("@item:inmenu", "Fine"), this, SLOT(set_res_fine())); + kactions[5] = settingsMenu->addAction(i18nc("@item:inmenu", "Very Fine"), this, SLOT(set_res_vfine())); + + QActionGroup *resolution = new QActionGroup(settingsMenu); + + resolution->addAction(kactions[2]); + resolution->addAction(kactions[3]); + resolution->addAction(kactions[4]); + resolution->addAction(kactions[5]); + + kactions[0]->setCheckable(true); + kactions[0]->setChecked(true); + kactions[1]->setCheckable(true); + kactions[1]->setChecked(true); + kactions[2]->setCheckable(true); + kactions[3]->setCheckable(true); + kactions[3]->setChecked(true); + kactions[4]->setCheckable(true); + kactions[5]->setCheckable(true); + set_res_std(); + + settingsMenu->addSeparator()->setText(i18n("3D Graph")); + + QAction* jactions[3]; + + jactions[0] = settingsMenu->addAction(i18n("Dots"), this, SLOT(set_dots())); + jactions[1] = settingsMenu->addAction(i18n("Lines"), this, SLOT(set_lines())); + jactions[2] = settingsMenu->addAction(i18n("Solid"), this, SLOT(set_solid())); + + jactions[2]->setCheckable(true); + jactions[2]->setChecked(true); + + QActionGroup *plotType = new QActionGroup(settingsMenu); + plotType->addAction(jactions[0]); + plotType->addAction(jactions[1]); + plotType->addAction(jactions[2]); + + jactions[0]->setCheckable(true); + jactions[1]->setCheckable(true); + jactions[2]->setCheckable(true); + //EODictionary //Ego's reminder KHelpMenu* help = new KHelpMenu(this); @@ -363,6 +366,7 @@ // c_results, SLOT(modifyVariable(QString,Analitza::Expression))); // connect(b_funcsModel, SIGNAL(functionRemoved(QString)), // c_results, SLOT(removeVariable(QString))); + connect(m_tabs, &QTabWidget::currentChanged, this, &KAlgebra::tabChanged); tabChanged(0); @@ -379,6 +383,17 @@ config.writeEntry("recent", urls); } +void KAlgebra::resetView(){ + switch(m_tabs->currentIndex()){ + case 1: + m_graph2d->resetViewport(); + break; + case 2: + m_graph3d->resetViewport(); + break; + } +} + void KAlgebra::initializeRecentScripts() { KConfig conf(QStringLiteral("kalgebrarc")); @@ -493,6 +508,22 @@ m_status->setText(msg); } +void KAlgebra::smartSaveGraph(){ + switch (m_tabs->currentIndex()){ + case 0: + saveLog(); + break; + + case 1: + saveGraph(); + break; + + case 2: + save3DGraph(); + break; + } +} + void KAlgebra::loadScript() { QUrl path = QFileDialog::getOpenFileUrl(this, i18n("Choose a script"), QUrl(), i18n("Script (*.kal)")); @@ -605,10 +636,6 @@ c_dock_vars->hide(); b_dock_funcs->hide(); d_dock->hide(); - - menuEnabledHelper(c_menu, n==0); - menuEnabledHelper(b_menu, n==1); - menuEnabledHelper(t_menu, n==2); m_status->clear();