28 # include <analitzagui//plotsview3d.h>
31 #include <analitzagui/operatorsmodel.h>
32 #include <analitzagui/expressionedit.h>
33 #include <analitzagui/variablesmodel.h>
34 #include <analitzagui/plotsview2d.h>
35 #include <analitzaplot/plotsmodel.h>
36 #include <analitzaplot/functiongraph.h>
37 #include <analitzaplot/planecurve.h>
38 #include <analitza/variables.h>
39 #include <analitza/value.h>
41 #include <QVBoxLayout>
42 #include <QHeaderView>
43 #include <QDockWidget>
49 #include <KFileDialog>
54 #include <KStandardAction>
56 #include <KRecentFilesAction>
57 #include <KApplication>
58 #include <KToggleFullScreenAction>
59 #include <kabstractfilewidget.h>
60 #include <analitzaplot/plotsfactory.h>
69 virtual QString
id()
const {
return "add2d"; }
70 virtual bool matchesExpression(
const Analitza::Expression& exp,
const Analitza::ExpressionType& functype)
const {
71 return Analitza::PlotsFactory::self()->requestPlot(exp, Analitza::Dim2D).canDraw();
74 virtual QString
caption()
const {
return i18n(
"Plot 2D"); }
76 virtual void triggerOption(
const Analitza::Expression& exp) { m_kalgebra->add2D(exp); }
90 virtual QString
id()
const {
return "add3d"; }
91 virtual bool matchesExpression(
const Analitza::Expression& exp,
const Analitza::ExpressionType& functype)
const
93 return Analitza::PlotsFactory::self()->requestPlot(exp, Analitza::Dim3D).canDraw();
96 virtual QString
caption()
const {
return i18n(
"Plot 3D"); }
98 virtual void triggerOption(
const Analitza::Expression& exp) { m_kalgebra->add3D(exp); }
111 m_tabs =
new QTabWidget;
112 setCentralWidget(m_tabs);
114 setStatusBar(
new KStatusBar(
this));
115 setMenuBar(
new KMenuBar(
this));
117 KToggleFullScreenAction* fullScreenAction = KStandardAction::fullScreen(
this, SLOT(fullScreen(
bool)),
this,
this);
119 QMenu* g_menu = menuBar()->addMenu(i18n(
"Session"));
120 g_menu->addAction(KStandardAction::openNew(
this, SLOT(newInstance()),
this));
121 g_menu->addAction(fullScreenAction);
122 g_menu->addAction(KStandardAction::quit(
this, SLOT(close()),
this));
124 QToolButton* fullScreenButton =
new QToolButton(
this);
125 fullScreenButton->setDefaultAction(fullScreenAction);
126 m_tabs->setCornerWidget(fullScreenButton);
128 m_status =
new QLabel(
this);
129 statusBar()->insertWidget(0, m_status);
130 menuBar()->addMenu(
"|")->setEnabled(
false);
134 QVBoxLayout *c_layo =
new QVBoxLayout(console);
136 c_results->setFocusPolicy(Qt::NoFocus);
137 c_dock_vars =
new QDockWidget(i18n(
"Variables"),
this);
138 c_dock_vars->setFeatures(QDockWidget::DockWidgetFloatable|QDockWidget::DockWidgetMovable);
139 addDockWidget(Qt::RightDockWidgetArea, c_dock_vars);
141 c_varsModel=
new Analitza::VariablesModel(c_results->
analitza()->variables());
142 c_varsModel->setEditable(
false);
144 c_variables =
new QTreeView(c_dock_vars);
145 c_variables->setModel(c_varsModel);
146 c_variables->setRootIsDecorated(
false);
147 c_variables->header()->setStretchLastSection(
true);
148 c_variables->setSelectionBehavior(QAbstractItemView::SelectRows);
149 c_variables->setSelectionMode(QAbstractItemView::SingleSelection);
151 c_exp =
new Analitza::ExpressionEdit(console);
152 c_exp->setAnalitza(c_results->
analitza());
153 c_exp->setExamples(QStringList() <<
"square:=x->x**2" <<
"fib:=n->piecewise { eq(n,0)?0, eq(n,1)?1, ?fib(n-1)+fib(n-2) }");
154 c_dock_vars->setWidget(c_variables);
156 m_tabs->addTab(console, i18n(
"&Console"));
157 console->setLayout(c_layo);
158 c_layo->addWidget(c_results);
159 c_layo->addWidget(c_exp);
161 connect(c_exp, SIGNAL(returnPressed()),
this, SLOT(operate()));
162 connect(c_results, SIGNAL(status(QString)),
this, SLOT(changeStatusBar(QString)));
163 connect(c_results, SIGNAL(changed()),
this, SLOT(updateInformation()));
164 connect(c_results, SIGNAL(changed()), c_exp, SLOT(updateCompleter()));
165 connect(c_results, SIGNAL(paste(QString)), c_exp, SLOT(insertText(QString)));
166 connect(c_variables, SIGNAL(clicked(QModelIndex)),
this, SLOT(edit_var(QModelIndex)));
168 c_menu = menuBar()->addMenu(i18n(
"C&onsole"));
170 c_menu->addAction(KIcon(
"document-open"), i18nc(
"@item:inmenu",
"&Load Script..."),
171 this, SLOT(loadScript()), Qt::CTRL+Qt::Key_L);
172 c_recentScripts=
new KRecentFilesAction(KIcon(
"document-open-recent"), i18n(
"Recent Scripts"),
this);
173 connect(c_recentScripts, SIGNAL(urlSelected(KUrl)),
this, SLOT(loadScript(KUrl)));
174 c_menu->addAction(c_recentScripts);
176 c_menu->addAction(KIcon(
"document-save"), i18nc(
"@item:inmenu",
"&Save Script..."),
177 this, SLOT(saveScript()), Qt::CTRL+Qt::Key_G);
178 c_menu->addAction(KIcon(
"document-save"), i18nc(
"@item:inmenu",
"&Export Log..."),
179 this, SLOT(saveLog()), QKeySequence::Save);
180 c_menu->addSeparator()->setText(i18n(
"Execution Mode"));
181 QActionGroup *execGroup =
new QActionGroup(c_menu);
182 QAction* calc = c_menu->addAction(i18nc(
"@item:inmenu",
"Calculate"),
this, SLOT(consoleCalculate()));
183 QAction* eval = c_menu->addAction(i18nc(
"@item:inmenu",
"Evaluate"),
this, SLOT(consoleEvaluate()));
185 calc->setCheckable(
true);
186 eval->setCheckable(
true);
187 eval->setChecked(
true);
188 execGroup->addAction(calc);
189 execGroup->addAction(eval);
190 c_menu->addSeparator();
191 c_menu->addAction(KStandardAction::clear(c_results, SLOT(clear()),
this));
192 initializeRecentScripts();
197 b_funcsModel=
new Analitza::PlotsModel(
this);
199 m_graph2d =
new Analitza::PlotsView2D(m_tabs);
200 m_graph2d->setTicksShown(0);
201 m_graph2d->setModel(b_funcsModel);
203 b_dock_funcs =
new QDockWidget(i18n(
"Functions"),
this);
204 b_tools =
new QTabWidget(b_dock_funcs);
205 b_tools->setTabPosition(QTabWidget::South);
206 addDockWidget(Qt::RightDockWidgetArea, b_dock_funcs);
208 b_funcs =
new QTreeView(b_tools);
209 b_funcs->setRootIsDecorated(
false);
210 b_funcs->setModel(b_funcsModel);
211 b_funcs->header()->resizeSections(QHeaderView::ResizeToContents);
212 b_funcs->setSelectionMode(QAbstractItemView::SingleSelection);
213 m_graph2d->setSelectionModel(b_funcs->selectionModel());
215 b_tools->addTab(b_funcs, i18n(
"List"));
219 connect(b_funced, SIGNAL(accept()),
this, SLOT(new_func()));
220 connect(b_funced, SIGNAL(removeEditingPlot()),
this, SLOT(remove_func()));
221 b_tools->addTab(b_funced, KIcon(
"list-add"), i18n(
"&Add"));
223 QTableView* b_varsView=
new QTableView(b_tools);
224 b_varsModel=
new Analitza::VariablesModel(b_funced->
variables());
225 b_varsView->setModel(b_varsModel);
226 b_varsView->setShowGrid(
false);
227 b_varsView->verticalHeader()->hide();
228 b_varsView->horizontalHeader()->setStretchLastSection(
true);
229 b_varsView->setSelectionBehavior(QAbstractItemView::SelectRows);
230 b_varsView->setContextMenuPolicy(Qt::CustomContextMenu);
232 b_varsView->setItemDelegate(delegate);
233 b_tools->addTab(b_varsView, i18n(
"Variables"));
236 b_viewport->
setViewport(m_graph2d->definedViewport());
237 b_tools->addTab(b_viewport, i18n(
"Viewport"));
239 b_dock_funcs->setWidget(b_tools);
240 b_dock_funcs->setFeatures(QDockWidget::DockWidgetFloatable | QDockWidget::DockWidgetMovable);
241 m_tabs->addTab(m_graph2d, i18n(
"&2D Graph"));
244 connect(b_varsModel, SIGNAL(dataChanged(QModelIndex,QModelIndex)), SLOT(valueChanged()));
245 connect(b_funcs, SIGNAL(doubleClicked(QModelIndex)),
this, SLOT(edit_func(QModelIndex)));
246 connect(b_tools, SIGNAL(currentChanged(
int)),
this, SLOT(functools(
int)));
247 connect(m_graph2d, SIGNAL(status(QString)),
this, SLOT(changeStatusBar(QString)));
248 connect(m_graph2d, SIGNAL(viewportChanged(QRectF)), b_viewport, SLOT(setViewport(QRectF)));
249 connect(b_viewport, SIGNAL(viewportChange(QRectF)), m_graph2d, SLOT(changeViewport(QRectF)));
250 connect(b_varsView, SIGNAL(customContextMenuRequested(QPoint)),
this, SLOT(varsContextMenu(QPoint)));
253 b_menu = menuBar()->addMenu(i18n(
"2&D Graph"));
254 QAction* b_actions[6];
255 b_actions[0] = b_menu->addAction(i18n(
"&Grid"),
this, SLOT(toggleSquares()));
256 b_actions[1] = b_menu->addAction(i18n(
"&Keep Aspect Ratio"),
this, SLOT(toggleKeepAspect()));
257 b_menu->addAction(KStandardAction::save(
this, SLOT(saveGraph()),
this));
258 b_menu->addSeparator();
259 b_menu->addAction(KStandardAction::zoomIn(m_graph2d, SLOT(zoomIn()),
this));
260 b_menu->addAction(KStandardAction::zoomOut(m_graph2d, SLOT(zoomOut()),
this));
261 KAction* ac=KStandardAction::actualSize(m_graph2d, SLOT(resetViewport()),
this);
262 ac->setShortcut(Qt::ControlModifier + Qt::Key_0);
263 b_menu->addAction(ac);
264 b_menu->addSeparator()->setText(i18n(
"Resolution"));
265 b_actions[2] = b_menu->addAction(i18nc(
"@item:inmenu",
"Poor"),
this, SLOT(set_res_low()));
266 b_actions[3] = b_menu->addAction(i18nc(
"@item:inmenu",
"Normal"),
this, SLOT(set_res_std()));
267 b_actions[4] = b_menu->addAction(i18nc(
"@item:inmenu",
"Fine"),
this, SLOT(set_res_fine()));
268 b_actions[5] = b_menu->addAction(i18nc(
"@item:inmenu",
"Very Fine"),
this, SLOT(set_res_vfine()));
269 m_graph2d->setContextMenuPolicy(Qt::ActionsContextMenu);
270 m_graph2d->addActions(b_menu->actions());
272 QActionGroup *res =
new QActionGroup(b_menu);
273 res->addAction(b_actions[2]);
274 res->addAction(b_actions[3]);
275 res->addAction(b_actions[4]);
276 res->addAction(b_actions[5]);
278 b_actions[0]->setCheckable(
true);
279 b_actions[0]->setChecked(
true);
280 b_actions[1]->setCheckable(
true);
281 b_actions[1]->setChecked(
true);
282 b_actions[2]->setCheckable(
true);
283 b_actions[3]->setCheckable(
true);
284 b_actions[3]->setChecked(
true);
285 b_actions[4]->setCheckable(
true);
286 b_actions[5]->setCheckable(
true);
293 QVBoxLayout *t_layo =
new QVBoxLayout(tridim);
294 t_exp =
new Analitza::ExpressionEdit(tridim);
295 t_exp->setExamples(QStringList() <<
"sin x+sin y" <<
"(x,y)->x" <<
"x*y");
297 t_model3d =
new Analitza::PlotsModel(
this);
298 m_graph3d =
new Analitza::PlotsView3D(tridim);
299 m_graph3d->setModel(t_model3d);
300 m_graph3d->setUseSimpleRotation(
true);
302 tridim->setLayout(t_layo);
303 m_tabs->addTab(tridim, i18n(
"&3D Graph"));
304 t_layo->addWidget(m_graph3d);
305 t_layo->addWidget(t_exp);
307 connect(t_exp, SIGNAL(returnPressed()),
this, SLOT(new_func3d()));
311 t_menu = menuBar()->addMenu(i18n(
"3D &Graph"));
312 QAction* t_actions[5];
313 t_menu->addAction(KStandardAction::save(
this, SLOT(save3DGraph()),
this));
314 t_menu->addAction(KIcon(
"zoom-original"), i18n(
"&Reset View"), m_graph3d, SLOT(resetView()));
315 t_menu->addSeparator();
316 t_actions[2] = t_menu->addAction(i18n(
"Dots"),
this, SLOT(set_dots()));
317 t_actions[3] = t_menu->addAction(i18n(
"Lines"),
this, SLOT(set_lines()));
318 t_actions[4] = t_menu->addAction(i18n(
"Solid"),
this, SLOT(set_solid()));
320 QActionGroup *t_type =
new QActionGroup(t_menu);
321 t_type->addAction(t_actions[2]);
322 t_type->addAction(t_actions[3]);
323 t_type->addAction(t_actions[4]);
325 t_actions[2]->setCheckable(
true);
326 t_actions[3]->setCheckable(
true);
327 t_actions[4]->setCheckable(
true);
328 t_actions[4]->setChecked(
true);
330 menuBar()->addMenu(
"|")->setEnabled(
false);
335 d_dock =
new QDockWidget(i18n(
"Operations"),
this);
336 d_dock->setFeatures(QDockWidget::DockWidgetFloatable | QDockWidget::DockWidgetMovable);
337 addDockWidget(Qt::RightDockWidgetArea, d_dock);
339 m_tabs->addTab(dic, i18n(
"&Dictionary"));
342 QLayout *leftLayo=
new QVBoxLayout(w);
343 d_filter=
new KLineEdit(w);
344 d_filter->setClearButtonShown(
true);
345 d_filter->setSizePolicy(QSizePolicy(QSizePolicy::Minimum, QSizePolicy::Fixed));
346 connect(d_filter, SIGNAL(textChanged(QString)), dic, SLOT(setFilter(QString)));
347 connect(d_filter, SIGNAL(textChanged(QString)),
this, SLOT(dictionaryFilterChanged(QString)));
348 d_list =
new QListView(w);
349 d_list->setModel(dic->
model());
350 d_list->setSizePolicy(QSizePolicy(QSizePolicy::Fixed, QSizePolicy::Expanding));
351 leftLayo->addWidget(
new QLabel(i18n(
"Look for:"), d_dock));
352 leftLayo->addWidget(d_filter);
353 leftLayo->addWidget(d_list);
354 d_dock->setWidget(w);
356 connect(d_list->selectionModel(), SIGNAL(currentChanged(QModelIndex,QModelIndex)),
357 dic, SLOT(activated(QModelIndex,QModelIndex)));
361 KHelpMenu* help =
new KHelpMenu(
this, KGlobal::mainComponent().aboutData());
362 menuBar()->addMenu(help->menu());
365 #warning TODO: Port to PlotsModel
372 connect(m_tabs, SIGNAL(currentChanged(
int)),
this, SLOT(tabChanged(
int)));
378 KConfig conf(
"kalgebrarc");
379 KConfigGroup config(&conf,
"Default");
381 foreach(
const KUrl& url, c_recentScripts->urls())
382 urls += url.prettyUrl();
384 config.writeEntry(
"recent", urls);
387 void KAlgebra::initializeRecentScripts()
389 KConfig conf(
"kalgebrarc");
390 KConfigGroup config(&conf,
"Default");
392 QStringList urls=config.readEntry(
"recent", QStringList());
393 foreach(
const QString& url, urls) {
394 c_recentScripts->addUrl(KUrl(url));
398 void KAlgebra::newInstance()
400 KProcess::startDetached(QApplication::applicationFilePath());
405 qDebug() <<
"adding" << exp.toString();
407 Analitza::PlotBuilder req = Analitza::PlotsFactory::self()->requestPlot(exp, Analitza::Dim2D, c_results->
analitza()->variables());
409 b_funcsModel->addPlot(curve);
411 m_tabs->setCurrentIndex(1);
414 void KAlgebra::new_func()
419 QModelIndex idx = b_funcsModel->indexForName(f->name());
420 b_funcsModel->updatePlot(idx.row(), f);
422 b_funcsModel->addPlot(f);
427 b_tools->setCurrentIndex(0);
428 b_funcs->setCurrentIndex(b_funcsModel->indexForName(f->name()));
429 m_graph2d->setFocus();
432 void KAlgebra::remove_func()
435 b_funcsModel->removeRow(b_funcs->currentIndex().row());
439 b_tools->setCurrentIndex(0);
440 b_funcs->setCurrentIndex(QModelIndex());
441 m_graph2d->setFocus();
444 void KAlgebra::edit_func(
const QModelIndex &idx)
446 b_tools->setTabText(1, i18n(
"&Editing"));
447 b_tools->setCurrentIndex(1);
448 b_funced->
setName(b_funcsModel->data(idx.sibling(idx.row(), 0)).toString());
449 b_funced->
setFunction(b_funcsModel->data(idx.sibling(idx.row(), 1)).toString());
451 b_funced->setFocus();
454 void KAlgebra::functools(
int i)
457 b_tools->setTabText(1, i18n(
"&Add"));
459 b_funced->
setName(b_funcsModel->freeId());
462 b_funced->setFocus();
466 void KAlgebra::edit_var(
const QModelIndex &idx)
468 if(idx.column()==0) {
469 c_exp->insertText(idx.data().toString());
471 QModelIndex idxName=idx.sibling(idx.row(), 0);
473 QPointer<VarEdit> e(
new VarEdit(
this,
false));
474 QString var = c_variables->model()->data(idxName, Qt::DisplayRole).toString();
476 e->setAnalitza(c_results->
analitza());
479 if(e->exec() == QDialog::Accepted) {
480 QString str=var+
" := "+e->val().toString();
481 c_results->
addOperation(Analitza::Expression(str,
false), str);
487 void KAlgebra::operate()
489 if(!c_exp->text().isEmpty()){
490 c_exp->setCorrect(c_results->
addOperation(c_exp->expression(), c_exp->toPlainText()));
495 void KAlgebra::changeStatusBar(
const QString& msg)
498 m_status->setText(msg);
501 void KAlgebra::loadScript()
503 KUrl path = KFileDialog::getOpenUrl(KUrl(),
"*.kal|"+i18n(
"Script (*.kal)"),
this, i18n(
"Choose a script"));
509 void KAlgebra::loadScript(
const KUrl& path)
514 c_recentScripts->addUrl(path);
517 void KAlgebra::saveScript()
519 KUrl path = KFileDialog::getSaveUrl(KUrl(),
"*.kal|"+i18n(
"Script (*.kal)"),
this, QString(), KFileDialog::ConfirmOverwrite);
525 c_recentScripts->addUrl(path);
528 void KAlgebra::saveLog()
530 KUrl path = KFileDialog::getSaveUrl(KUrl(),
"*.html|"+i18n(
"HTML File (*.html)"),
this, QString(), KFileDialog::ConfirmOverwrite);
535 void KAlgebra::set_res_low() { b_funcsModel->setResolution(416); }
536 void KAlgebra::set_res_std() { b_funcsModel->setResolution(832); }
537 void KAlgebra::set_res_fine() { b_funcsModel->setResolution(1664);}
538 void KAlgebra::set_res_vfine() { b_funcsModel->setResolution(3328);}
540 void KAlgebra::new_func3d()
543 Analitza::Expression exp = t_exp->expression();
544 Analitza::PlotBuilder plot = Analitza::PlotsFactory::self()->requestPlot(exp, Analitza::Dim3D, c_results->
analitza()->variables());
547 t_model3d->addPlot(plot.create(Qt::yellow,
"func3d"));
549 changeStatusBar(i18n(
"Errors: %1", plot.errors().join(i18n(
", "))));
553 void KAlgebra::set_dots()
556 m_graph3d->setPlotStyle(Analitza::Dots);
560 void KAlgebra::set_lines()
563 m_graph3d->setPlotStyle(Analitza::Wired);
567 void KAlgebra::set_solid()
570 m_graph3d->setPlotStyle(Analitza::Solid);
574 void KAlgebra::save3DGraph()
577 QString path = KFileDialog::getSaveFileName(KUrl(), i18n(
"*.png|PNG File\n*.pdf|PDF Document"),
this, QString(), KFileDialog::ConfirmOverwrite);
578 if(!path.isEmpty()) {
579 QPixmap px = m_graph3d->renderPixmap();
580 if(path.endsWith(
".pdf")) {
582 printer.setOutputFormat(QPrinter::PdfFormat);
583 printer.setOutputFileName(path);
584 printer.setPaperSize(px.size(), QPrinter::DevicePixel);
585 printer.setPageMargins(0,0,0,0, QPrinter::DevicePixel);
587 painter.begin(&printer);
588 painter.drawPixmap(QPoint(0,0), px);
597 void KAlgebra::toggleSquares()
599 m_graph2d->setSquares(!m_graph2d->squares());
602 void KAlgebra::toggleKeepAspect()
604 m_graph2d->setKeepAspectRatio(!m_graph2d->keepAspectRatio());
607 void KAlgebra::saveGraph()
609 QPointer<KFileDialog> dialog=
new KFileDialog(KUrl(), i18n(
"*.png|Image File\n*.svg|SVG File"),
this);
610 dialog->setOperationMode(KFileDialog::Saving);
611 dialog->setConfirmOverwrite(
true);
614 QString filter = dialog->fileWidget()->currentFilter();
615 QString filename = dialog->selectedFile();
617 bool isSvg = filename.endsWith(
".svg") || (!filename.endsWith(
".png") && filter.mid(2, 3)==
"svg");
618 Analitza::PlotsView2D::Format f = isSvg ? Analitza::PlotsView2D::PNG : Analitza::PlotsView2D::SVG;
619 m_graph2d->toImage(filename, f);
626 m->setEnabled(enabled);
627 foreach(QAction* action, m->actions()) {
628 action->setEnabled(enabled);
632 void KAlgebra::tabChanged(
int n)
635 b_dock_funcs->hide();
648 c_dock_vars->raise();
652 b_dock_funcs->show();
653 b_dock_funcs->raise();
655 if(b_funcsModel->rowCount()==0)
656 b_tools->setCurrentIndex(1);
665 d_filter->setFocus();
671 changeStatusBar(i18nc(
"@info:status",
"Ready"));
674 void KAlgebra::select(
const QModelIndex & idx)
676 b_funcs->selectionModel()->setCurrentIndex(idx, QItemSelectionModel::ClearAndSelect);
679 void KAlgebra::updateInformation()
681 c_varsModel->updateInformation();
682 c_variables->header()->resizeSections(QHeaderView::ResizeToContents);
685 void KAlgebra::consoleCalculate()
690 void KAlgebra::consoleEvaluate()
695 void KAlgebra::valueChanged()
698 if(b_funcsModel->rowCount()>0)
699 m_graph2d->updateFunctions(QModelIndex(), 0, b_funcsModel->rowCount()-1);
702 void KAlgebra::varsContextMenu(
const QPoint& p)
704 QPointer<QMenu> m=
new QMenu;
705 m->addAction(i18n(
"Add variable"));
706 QAction* ac=m->exec(b_dock_funcs->widget()->mapToGlobal(p));
709 QPointer<AskName> a=
new AskName(i18n(
"Enter a name for the new variable"), 0);
711 if(a->exec()==QDialog::Accepted)
712 b_varsModel->insertVariable(a->name(), Analitza::Expression(Analitza::Cn(0)));
722 t_model3d->addPlot(Analitza::PlotsFactory::self()->requestPlot(exp, Analitza::Dim3D, c_results->
analitza()->variables())
723 .create(Qt::yellow,
"func3d_console"));
724 m_tabs->setCurrentIndex(2);
728 void KAlgebra::dictionaryFilterChanged(
const QString&)
730 if(d_list->model()->rowCount()==1)
731 d_list->setCurrentIndex(d_list->model()->index(0,0));
734 void KAlgebra::fullScreen(
bool isFull)
736 m_tabs->setDocumentMode(isFull);
737 m_tabs->setTabEnabled(3, !isFull);
740 m_tabs->setParent(0);
742 m_tabs->showFullScreen();
744 setCentralWidget(m_tabs);
QColor randomFunctionColor()
void add3D(const Analitza::Expression &exp)
virtual QString id() const =0
The VarEdit provides a dialog to allow users to edit/create a variable.
Analitza::Analyzer * analitza()
Retrieves a pointer to the Analitza calculator associated.
bool addOperation(const Analitza::Expression &e, const QString &input)
Adds the operation defined by the expression e.
void addOptionsObserver(InlineOptions *opt)
QSortFilterProxyModel * model() const
The Console widget is able to receive an operation, solve it and show the value.
void setEditing(bool m)
Sets whether we are editing or adding a function.
void menuEnabledHelper(QMenu *m, bool enabled)
void clear()
Clears the dialog.
void setMode(ConsoleMode newMode)
Sets a newMode console mode.
void add2D(const Analitza::Expression &exp)
virtual bool matchesExpression(const Analitza::Expression &exp, const Analitza::ExpressionType &functype) const =0
bool loadScript(const KUrl &path)
Loads a script from path.
bool saveLog(const KUrl &path) const
Saves a log to path.
bool saveScript(const KUrl &path) const
Save a script yo path.
The FunctionEdit dialog provides a way to specify functions.
virtual QString caption() const =0
void setName(const QString &name)
Sets a name to the function.
KAlgebra(QWidget *parent=0)
Analitza::Variables * variables() const
virtual void triggerOption(const Analitza::Expression &exp)=0
void setVariables(Analitza::Variables *v)
Sets the variables class to be used with the graph functions.
Calculates everything, if it finds a not defined variable shows an error.
void setFunction(const QString &newText)
Sets an expression text to the ExpressionEdit widget.
Analitza::PlaneCurve * createFunction() const
void setColor(const QColor &newColor)
Sets the selected color for the function.
bool editing() const
Returns whether we are editing or adding a function.
Simplifies the expression, tries to simplify when sees a variable not defined.