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