v0.3.9b:
[mldemos:baraks-mldemos.git] / MLDemos / mldemos.h
1 #ifndef MLDEMOS_H
2 #define MLDEMOS_H
3
4 /*********************************************************************
5 MLDemos: A User-Friendly visualization toolkit for machine learning
6 Copyright (C) 2010  Basilio Noris
7 Contact: mldemos@b4silio.com
8
9 This library is free software; you can redistribute it and/or
10 modify it under the terms of the GNU Lesser General Public License,
11 version 3 as published by the Free Software Foundation.
12
13 This library is distributed in the hope that it will be useful, but
14 WITHOUT ANY WARRANTY; without even the implied warranty of
15 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
16 Lesser General Public License for more details.
17
18 You should have received a copy of the GNU Lesser General Public
19 License along with this library; if not, write to the Free
20 Software Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
21 *********************************************************************/
22 #include <QtGui/QMainWindow>
23 #include <QTime>
24 #include <QResizeEvent>
25 #include <QMutex>
26 #include <QMutexLocker>
27 #include "ui_mldemos.h"
28 #include "ui_viewOptions.h"
29 #include "ui_aboutDialog.h"
30 #include "ui_algorithmOptions.h"
31 #include "ui_optsClassify.h"
32 #include "ui_optsCluster.h"
33 #include "ui_optsRegress.h"
34 #include "ui_optsMaximize.h"
35 #include "ui_optsDynamic.h"
36 #include "ui_optsCompare.h"
37 #include "ui_statisticsDialog.h"
38 #include "ui_drawingTools.h"
39 #include "ui_drawingToolsContext1.h"
40 #include "ui_drawingToolsContext2.h"
41 #include "ui_drawingToolsContext3.h"
42 #include "ui_drawingToolsContext4.h"
43
44 #include "canvas.h"
45 #include "classifier.h"
46 #include "regressor.h"
47 #include "dynamical.h"
48 #include "clusterer.h"
49 #include "interfaces.h"
50 #include "compare.h"
51 #include "widget.h"
52 #include "drawTimer.h"
53 #include "expose.h"
54
55 class MLDemos : public QMainWindow
56 {
57         Q_OBJECT
58
59 private:
60         QAction *actionClassifiers, *actionRegression, *actionDynamical, *actionMaximizers,
61         *actionClustering, *actionDrawSamples, *actionCompare,
62         *actionDisplayOptions, *actionShowStats,
63         *actionClearData, *actionClearModel, *actionScreenshot,
64         *actionNew, *actionSave, *actionLoad;
65
66         QDialog *displayDialog, *about, *statsDialog;
67
68         QWidget *algorithmWidget, *regressWidget, *dynamicWidget, *classifyWidget, *clusterWidget, *maximizeWidget, *compareWidget;
69
70         QNamedWindow *rocWidget, *crossvalidWidget, *infoWidget;
71
72         Ui::MLDemosClass ui;
73         Ui::viewOptionDialog *displayOptions;
74         Ui::aboutDialog *aboutPanel;
75         Ui::statisticsDialog *showStats;
76         Ui::algorithmOptions *algorithmOptions;
77         Ui::optionsClassifyWidget *optionsClassify;
78         Ui::optionsClusterWidget *optionsCluster;
79         Ui::optionsRegressWidget *optionsRegress;
80         Ui::optionsMaximizeWidget *optionsMaximize;
81         Ui::optionsDynamicWidget *optionsDynamic;
82         Ui::optionsCompare *optionsCompare;
83         Ui::DrawingToolbar *drawToolbar;
84         Ui::DrawingToolbarContext1 *drawToolbarContext1;
85         Ui::DrawingToolbarContext2 *drawToolbarContext2;
86         Ui::DrawingToolbarContext3 *drawToolbarContext3;
87         Ui::DrawingToolbarContext4 *drawToolbarContext4;
88         QWidget *drawToolbarWidget;
89         QWidget *drawContext1Widget, *drawContext2Widget, *drawContext3Widget, *drawContext4Widget;
90         QToolBar *toolBar;
91
92         DrawTimer *drawTimer;
93         QTime drawTime;
94         Canvas *canvas;
95     Expose *expose;
96         ipair trajectory;
97         Obstacle obstacle;
98         bool bNewObstacle;
99
100
101         void closeEvent(QCloseEvent *event);
102         bool Train(Classifier *classifier, int positive, float trainRatio=1);
103         void Draw(Classifier *classifier);
104         void Train(Regressor *regressor, float trainRatio=1);
105         void Draw(Regressor *regressor);
106         fvec Train(Dynamical *dynamical);
107         void Draw(Dynamical *dynamical);
108         fvec Test(Dynamical *dynamical, std::vector< std::vector<fvec> > trajectories, ivec labels);
109         void Train(Clusterer *clusterer);
110         void Draw(Clusterer *clusterer);
111         void Train(Maximizer *maximizer);
112         void Draw(Maximizer *maximizer);
113         void Test(Maximizer *maximizer);
114
115         QList<ClassifierInterface *> classifiers;
116         QList<ClustererInterface *> clusterers;
117         QList<RegressorInterface *> regressors;
118         QList<DynamicalInterface *> dynamicals;
119         QList<AvoidanceInterface *> avoiders;
120         QList<MaximizeInterface*> maximizers;
121         QList<InputOutputInterface *> inputoutputs;
122         QList<bool> bInputRunning;
123         QList<QString> compareOptions;
124         QLabel *compareDisplay;
125         CompareAlgorithms *compare;
126         void AddPlugin(ClassifierInterface *iClassifier, const char *method);
127         void AddPlugin(ClustererInterface *iCluster, const char *method);
128         void AddPlugin(RegressorInterface *iRegress, const char *method);
129         void AddPlugin(DynamicalInterface *iDynamical, const char *method);
130         void AddPlugin(AvoidanceInterface *iAvoid, const char *method);
131         void AddPlugin(MaximizeInterface *iMaximize, const char *method);
132         void AddPlugin(InputOutputInterface *iIO);
133
134         void initDialogs();
135         void initToolBars();
136         void initPlugins();
137         void SaveLayoutOptions();
138         void LoadLayoutOptions();
139         void SetTextFontSize();
140         void SaveParams(QString filename);
141         void LoadParams(QString filename);
142         void Load(QString filename);
143         void Save(QString filename);
144
145         void UpdateInfo();
146         void SetCrossValidationInfo();
147         bool bIsRocNew;
148         bool bIsCrossNew;
149 public:
150         MLDemos(QString filename="", QWidget *parent = 0, Qt::WFlags flags = 0);
151         ~MLDemos();
152
153         int tabUsedForTraining;
154         Classifier *classifier;
155         Regressor *regressor;
156         Dynamical *dynamical;
157         Clusterer *clusterer;
158         Maximizer *maximizer;
159         QMutex mutex;
160         void resizeEvent( QResizeEvent *event );
161         void dragEnterEvent(QDragEnterEvent *event);
162         void dropEvent(QDropEvent *event);
163
164 signals:
165         void SendResults(std::vector<fvec> results);
166 public slots:
167         void SetData(std::vector<fvec> samples, ivec labels, std::vector<ipair> trajectories);
168         void SetTimeseries(std::vector<TimeSerie> timeseries);
169         void QueryClassifier(std::vector<fvec> samples);
170         void QueryRegressor(std::vector<fvec> samples);
171         void QueryDynamical(std::vector<fvec> samples);
172         void QueryClusterer(std::vector<fvec> samples);
173         void QueryMaximizer(std::vector<fvec> samples);
174
175 private slots:
176         void ShowAbout();
177         void ShowOptionClass();
178         void ShowOptionRegress();
179         void ShowOptionDynamical();
180         void ShowOptionCluster();
181         void ShowOptionMaximize();
182         void ShowOptionCompare();
183         void ShowSampleDrawing();
184         void ShowOptionDisplay();
185         void ShowStatsDialog();
186         void ShowToolbar();
187         void HideOptionClass();
188         void HideOptionRegress();
189         void HideOptionDynamical();
190         void HideOptionCluster();
191         void HideOptionMaximize();
192         void HideSampleDrawing();
193         void HideOptionDisplay();
194         void HideStatsDialog();
195         void HideToolbar();
196         void AvoidOptionChanged();
197         void DisplayOptionChanged();
198         void ColorMapChanged();
199     void ActivateIO();
200     void ActivateImport();
201     void DisactivateIO(QObject *);
202
203         void Classify();
204         void ClassifyCross();
205         void Regression();
206         void RegressionCross();
207         void Maximize();
208         void MaximizeContinue();
209         void Dynamize();
210         void Cluster();
211         void ClusterIterate();
212         void Avoidance();
213         void Compare();
214         void CompareScreenshot();
215         void Clear();
216         void ClearData();
217         void SetROCInfo();
218
219         void SaveData();
220         void LoadData();
221         void ExportOutput();
222         void ExportAnimation();
223         void ExportSVG();
224         void Screenshot();
225         void ToClipboard();
226
227         void DrawCrosshair();
228         void DrawSingle();
229         void DrawSpray();
230         void DrawLine();
231         void DrawTrajectory();
232         void DrawEllipse();
233         void DrawErase();
234         void DrawObstacle();
235         void DrawPaint();
236         void Drawing(fvec sample, int label);
237         void DrawingStopped();
238
239     void ExposeData();
240         void FitToData();
241         void ZoomChanged(float d);
242         void CanvasMoveEvent();
243         void Navigation(fvec sample);
244         void ResetPositiveClass();
245         void ChangeActiveOptions();
246         void ShowRoc();
247         void ShowCross();
248         void MouseOnRoc(QMouseEvent *event);
249         void StatsChanged();
250         void AlgoChanged();
251         void ChangeInfoFile();
252         void TargetButton();
253         void GaussianButton();
254         void GradientButton();
255         void BenchmarkButton();
256         void CompareAdd();
257         void CompareClear();
258         void CompareRemove();
259     void CanvasTypeChanged();
260     void CanvasZoomChanged();
261
262
263         void ShowContextMenuSpray(const QPoint &point);
264         void ShowContextMenuLine(const QPoint &point);
265         void ShowContextMenuEllipse(const QPoint &point);
266         void ShowContextMenuErase(const QPoint &point);
267         void ShowContextMenuObstacle(const QPoint &point);
268         void ShowContextMenuReward(const QPoint &point);
269         void FocusChanged(QWidget *old, QWidget *now);
270         void HideContextMenus();
271 };
272
273 #endif // MLDEMOS_H