- Integrated the file import into the main interface (not as a plugin anymore)
[mldemos: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_optsProject.h"
37 #include "ui_optsCompare.h"
38 #include "ui_statisticsDialog.h"
39 #include "ui_drawingTools.h"
40 #include "ui_drawingToolsContext1.h"
41 #include "ui_drawingToolsContext2.h"
42 #include "ui_drawingToolsContext3.h"
43 #include "ui_drawingToolsContext4.h"
44 #include "ui_manualSelection.h"
45 #include "ui_inputDimensions.h"
46
47 #include "canvas.h"
48 #include "classifier.h"
49 #include "regressor.h"
50 #include "dynamical.h"
51 #include "clusterer.h"
52 #include "interfaces.h"
53 #include "compare.h"
54 #include "widget.h"
55 #include "drawTimer.h"
56 #include "expose.h"
57 #include "dataImporter.h"
58
59 class MLDemos : public QMainWindow
60 {
61         Q_OBJECT
62
63 private:
64     QAction *actionAlgorithms, *actionDrawSamples, *actionCompare,
65         *actionDisplayOptions, *actionShowStats,
66         *actionClearData, *actionClearModel, *actionScreenshot,
67         *actionNew, *actionSave, *actionLoad;
68
69     QDialog *displayDialog, *about, *statsDialog, *manualSelectDialog, *inputDimensionsDialog;
70
71     QWidget *algorithmWidget, *regressWidget, *dynamicWidget, *classifyWidget, *clusterWidget, *maximizeWidget, *compareWidget, *projectWidget;
72
73         QNamedWindow *rocWidget, *crossvalidWidget, *infoWidget;
74
75         Ui::MLDemosClass ui;
76         Ui::viewOptionDialog *displayOptions;
77         Ui::aboutDialog *aboutPanel;
78         Ui::statisticsDialog *showStats;
79         Ui::algorithmOptions *algorithmOptions;
80         Ui::optionsClassifyWidget *optionsClassify;
81         Ui::optionsClusterWidget *optionsCluster;
82         Ui::optionsRegressWidget *optionsRegress;
83         Ui::optionsMaximizeWidget *optionsMaximize;
84         Ui::optionsDynamicWidget *optionsDynamic;
85     Ui::optionsProjectWidget *optionsProject;
86         Ui::optionsCompare *optionsCompare;
87         Ui::DrawingToolbar *drawToolbar;
88         Ui::DrawingToolbarContext1 *drawToolbarContext1;
89         Ui::DrawingToolbarContext2 *drawToolbarContext2;
90         Ui::DrawingToolbarContext3 *drawToolbarContext3;
91         Ui::DrawingToolbarContext4 *drawToolbarContext4;
92     Ui::ManualSelection* manualSelection;
93     Ui::InputDimensions* inputDimensions;
94     QWidget *drawToolbarWidget;
95         QWidget *drawContext1Widget, *drawContext2Widget, *drawContext3Widget, *drawContext4Widget;
96         QToolBar *toolBar;
97
98         DrawTimer *drawTimer;
99         QTime drawTime;
100         Canvas *canvas;
101     Expose *expose;
102     DataImporter *import;
103         ipair trajectory;
104         Obstacle obstacle;
105         bool bNewObstacle;
106     QString lastTrainingInfo;
107
108         void closeEvent(QCloseEvent *event);
109     bool Train(Classifier *classifier, int positive, float trainRatio=1, bvec trainList = bvec());
110     void Train(Regressor *regressor, int outputDim=-1, float trainRatio=1, bvec trainList = bvec());
111         fvec Train(Dynamical *dynamical);
112     void Train(Clusterer *clusterer, bvec trainList = bvec());
113         void Train(Maximizer *maximizer);
114     void Train(Projector *projector, bvec trainList = bvec());
115     fvec Test(Dynamical *dynamical, std::vector< std::vector<fvec> > trajectories, ivec labels);
116     void Test(Maximizer *maximizer);
117
118         QList<ClassifierInterface *> classifiers;
119         QList<ClustererInterface *> clusterers;
120         QList<RegressorInterface *> regressors;
121         QList<DynamicalInterface *> dynamicals;
122         QList<AvoidanceInterface *> avoiders;
123     QList<MaximizeInterface*> maximizers;
124     QList<ProjectorInterface*> projectors;
125     QList<InputOutputInterface *> inputoutputs;
126         QList<bool> bInputRunning;
127         QList<QString> compareOptions;
128         QLabel *compareDisplay;
129         CompareAlgorithms *compare;
130         void AddPlugin(ClassifierInterface *iClassifier, const char *method);
131         void AddPlugin(ClustererInterface *iCluster, const char *method);
132         void AddPlugin(RegressorInterface *iRegress, const char *method);
133         void AddPlugin(DynamicalInterface *iDynamical, const char *method);
134         void AddPlugin(AvoidanceInterface *iAvoid, const char *method);
135     void AddPlugin(MaximizeInterface *iMaximize, const char *method);
136     void AddPlugin(ProjectorInterface *iProject, const char *method);
137     void AddPlugin(InputOutputInterface *iIO);
138
139         void initDialogs();
140         void initToolBars();
141         void initPlugins();
142         void SaveLayoutOptions();
143         void LoadLayoutOptions();
144         void SetTextFontSize();
145         void SaveParams(QString filename);
146         void LoadParams(QString filename);
147         void Load(QString filename);
148         void Save(QString filename);
149     void ImportData(QString filename);
150
151     std::vector<bool> GetManualSelection();
152     ivec GetInputDimensions();
153     void UpdateInfo();
154         void SetCrossValidationInfo();
155         bool bIsRocNew;
156         bool bIsCrossNew;
157 public:
158         MLDemos(QString filename="", QWidget *parent = 0, Qt::WFlags flags = 0);
159         ~MLDemos();
160
161         int tabUsedForTraining;
162         Classifier *classifier;
163         Regressor *regressor;
164         Dynamical *dynamical;
165         Clusterer *clusterer;
166     Maximizer *maximizer;
167     Projector *projector;
168     std::vector<fvec> sourceData;
169     std::vector<fvec> projectedData;
170     ivec sourceLabels;
171
172     QMutex mutex;
173         void resizeEvent( QResizeEvent *event );
174         void dragEnterEvent(QDragEnterEvent *event);
175         void dropEvent(QDropEvent *event);
176
177 signals:
178         void SendResults(std::vector<fvec> results);
179 public slots:
180     void SetData(std::vector<fvec> samples, ivec labels, std::vector<ipair> trajectories, bool bProjected);
181         void SetTimeseries(std::vector<TimeSerie> timeseries);
182     void SetDimensionNames(QStringList headers);
183         void QueryClassifier(std::vector<fvec> samples);
184         void QueryRegressor(std::vector<fvec> samples);
185         void QueryDynamical(std::vector<fvec> samples);
186         void QueryClusterer(std::vector<fvec> samples);
187         void QueryMaximizer(std::vector<fvec> samples);
188     void QueryProjector(std::vector<fvec> samples);
189
190 private slots:
191         void ShowAbout();
192         void ShowAlgorithmOptions();
193         void ShowOptionCompare();
194         void ShowSampleDrawing();
195         void ShowOptionDisplay();
196         void ShowStatsDialog();
197         void ShowToolbar();
198         void HideSampleDrawing();
199         void HideOptionDisplay();
200         void HideStatsDialog();
201         void HideToolbar();
202         void AvoidOptionChanged();
203         void DisplayOptionChanged();
204         void ColorMapChanged();
205     void ActivateIO();
206     void ActivateImport();
207     void DisactivateIO(QObject *);
208
209         void Classify();
210         void ClassifyCross();
211         void Regression();
212         void RegressionCross();
213         void Maximize();
214         void MaximizeContinue();
215         void Dynamize();
216         void Cluster();
217         void ClusterIterate();
218     void ClusterOptimize();
219     void Project();
220     void ProjectRevert();
221     void ProjectReproject();
222     void Avoidance();
223         void Compare();
224         void CompareScreenshot();
225         void Clear();
226         void ClearData();
227         void SetROCInfo();
228
229         void SaveData();
230         void LoadData();
231     void ImportData();
232         void ExportOutput();
233         void ExportAnimation();
234         void ExportSVG();
235         void Screenshot();
236         void ToClipboard();
237
238         void DrawCrosshair();
239         void DrawSingle();
240         void DrawSpray();
241         void DrawLine();
242         void DrawTrajectory();
243         void DrawEllipse();
244         void DrawErase();
245         void DrawObstacle();
246         void DrawPaint();
247         void Drawing(fvec sample, int label);
248         void DrawingStopped();
249
250
251     void ManualSelection();
252     void InputDimensions();
253     void ExposeData();
254         void FitToData();
255         void ZoomChanged(float d);
256     void UpdateLearnedModel();
257         void CanvasMoveEvent();
258         void Navigation(fvec sample);
259         void ResetPositiveClass();
260         void ChangeActiveOptions();
261         void ShowRoc();
262         void ShowCross();
263         void MouseOnRoc(QMouseEvent *event);
264         void StatsChanged();
265         void AlgoChanged();
266         void ChangeInfoFile();
267     void ManualSelectionUpdated();
268     void ManualSelectionChanged();
269     void ManualSelectionClear();
270     void ManualSelectionInvert();
271     void ManualSelectionRemove();
272     void ManualSelectionRandom();
273     void InputDimensionsUpdated();
274     void InputDimensionsChanged();
275     void InputDimensionsClear();
276     void InputDimensionsInvert();
277     void InputDimensionsRandom();
278     void TargetButton();
279         void GaussianButton();
280         void GradientButton();
281         void BenchmarkButton();
282         void CompareAdd();
283         void CompareClear();
284         void CompareRemove();
285     void CanvasTypeChanged();
286     void CanvasOptionsChanged();
287
288
289         void ShowContextMenuSpray(const QPoint &point);
290         void ShowContextMenuLine(const QPoint &point);
291         void ShowContextMenuEllipse(const QPoint &point);
292         void ShowContextMenuErase(const QPoint &point);
293         void ShowContextMenuObstacle(const QPoint &point);
294         void ShowContextMenuReward(const QPoint &point);
295         void FocusChanged(QWidget *old, QWidget *now);
296         void HideContextMenus();
297 };
298
299 #endif // MLDEMOS_H