1 /***************************************************************************
2  *   Copyright (C) 2021 by Abderrahman Taha                                *
3  *                                                                         *
4  *                                                                         *
5  *   This program is free software; you can redistribute it and/or modify  *
6  *   it under the terms of the GNU General Public License as published by  *
7  *   the Free Software Foundation; either version 2 of the License, or     *
8  *   (at your option) any later version.                                   *
9  *                                                                         *
10  *   This program is distributed in the hope that it will be useful,       *
11  *   but WITHOUT ANY WARRANTY; without even the implied warranty of        *
12  *   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the         *
13  *   GNU General Public License for more details.                          *
14  *                                                                         *
15  *   You should have received a copy of the GNU General Public License     *
16  *   along with this program; if not, write to the                         *
17  *   Free Software Foundation, Inc.,                                       *
18  *   51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA            *
19  ***************************************************************************/
20 
21 #ifndef DRAWINGOPTIONS_H
22 #define DRAWINGOPTIONS_H
23 
24 #include "../screenshot/video.h"
25 #include "about.h"
26 #include "addparam.h"
27 #include "colorsoptions.h"
28 #include "editor.h"
29 #include "mathmod.h"
30 #include "parametersoptions.h"
31 #include "selectoptions.h"
32 #include "sliderparam.h"
33 #include "ui_drawingoptions.h"
34 #include <QMainWindow>
35 
36 enum OptionnalParScriptFIELD { PAR_VECT, PAR_GRID, PAR_CND, PAR_CONST, PAR_FUNCT };
37 
38 enum OptionnalIsoScriptFIELD { ISO_VECT, ISO_GRID, ISO_CND, ISO_CONST, ISO_FUNCT };
39 
40 enum MandatoryIsoField
41 {
42     ISO_FXYZ,
43     ISO_XMIN,
44     ISO_XMAX,
45     ISO_YMIN,
46     ISO_YMAX,
47     ISO_ZMIN,
48     ISO_ZMAX,
49     ISO_COMP,
50     ISO_NAME
51 };
52 
53 enum MandatoryParField
54 {
55     PAR_FX,
56     PAR_FY,
57     PAR_FZ,
58     PAR_FW,
59     PAR_UMIN,
60     PAR_UMAX,
61     PAR_VMIN,
62     PAR_VMAX,
63     PAR_COMP,
64     PAR_NAME
65 };
66 
67 struct SliderStruct
68 {
69     QScrollBar *SliderScrollBar;
70     QLabel *SliderLabel;
71     QLabel *SliderLabelMin;
72     QLabel *SliderLabelMax;
73     QGroupBox *SliderGroupeBox;
74 };
75 
76 class DrawingOptions : public QMainWindow
77 {
78     Q_OBJECT
79 
80 public:
81     DrawingOptions(QWidget *parent = nullptr);
82     ~DrawingOptions();
83     MathMod *MathmodRef;
84     About ab;
85     std::vector<QString> MandatoryParmetric3DFields={"Fx", "Fy","Fz", "Umin", "Umax", "Vmin", "Vmax", "Component", "Name"};
86     std::vector<QString> MandatoryParmetric4DFields={"Fx", "Fy","Fz", "Fw", "Umin", "Umax", "Vmin", "Vmax", "Component", "Name"};
87     std::vector<QString> MandatoryIsosurfaceFields={"Fxyz", "Xmin", "Xmax", "Ymin", "Ymax", "Zmin", "Zmax", "Component", "Name"};
88     std::vector<QString> OptionalFields={"Grid", "Cnd","Const", "Funct", "Vect"};
89     SlidersForm sliderconf;
90     AddParamForm addnewparam;
91     QTreeWidgetItem *IsolistItemRef;
92     Parametersoptions *Parameters;
93     SelectOptions select;
94     Ui::DrawingOptions ui;
95     QJsonObject JSONMathModels;
96     SliderStruct *SliderArray;
97     ScriptErrorType scriptErrorType;
98     int evalErrorType;
99     std::vector<OptionnalIsoScriptFIELD> OptIsoFields;
100     std::vector<OptionnalParScriptFIELD> OptParFields;
101     std::vector<MandatoryIsoField> MandIsoFields;
102     std::vector<MandatoryParField> MandParFields;
103     bool ShowCurrentObjectTree = false;
104 public slots:
105     void removeat(int, QJsonObject&, QString);
106     void removeat2(int, QJsonObject&, QString);
107     void appendall(QJsonObject&, QString, QTableWidget*);
108     void replaceat(int, QJsonObject&, QString, QTextEdit*);
109     void insertat(int, QJsonObject&, QString, QTextEdit*);
110     void appednew(QJsonObject&, QString, QTextEdit*);
111     void AddListModels(bool b = false);
112     void Run_JsonObject_activeted();
113     void CIndextoolButton_clicked(int);
114     void BuildAllVect();
115     void ShowErrorMessage(QJsonParseError &, QString &);
116     void OptionalIsoScriptFieldprocess(const QJsonObject &,
117                                        OptionnalIsoScriptFIELD);
118     void OptionalParScriptFieldprocess(const QJsonObject &,
119                                        OptionnalParScriptFIELD);
120     void MandatoryIsoFieldprocess(const QJsonObject &, const MandatoryIsoField &);
121     void MandatoryParFieldprocess(const QJsonObject &, const MandatoryParField &,
122                                   const ModelType &mod = PAR_TYPE);
123     void LoadMandatoryAndOptionnalFields(const QJsonObject &, const ModelType &,
124                                          bool, const QJsonObject &, bool,
125                                          const QJsonObject &);
126     void LoadTexture(const QJsonObject &, const ModelType &);
127     void LoadPigment(const QJsonObject &, const ModelType &);
128     void updateCurrentTreestruct();
129     void ErrorMsg() const;
130     void MemoryErrorMsg(int) const;
131     void SaveSlidersRef(int n = 20);
132     void editorwin();
133     void videoplay();
134     void colorsoptions();
135     void on_xyzg_valueChanged(int);
136     void on_ChangeGrid_clicked();
137     int on_choice_activated(const QString &);
138     void LoadK3DSurfScript(QString, int);
139     void slot_comboBox18_3_activated(const QString &);
140     void slot_checkBox_clicked();
141     void on_pushButton_clicked();
142     void on_action_Exit_triggered();
143     void on_actionTriangles_triggered();
144     void on_actionInfos_triggered();
145     void on_actionFill_triggered();
146     void on_ObjectClasse_clicked(const QModelIndex &);
147     void UpdateScriptEditorAndTreeObject();
148     void UpdatePar3DModelDetailsPage(TreeStruct &);
149     void UpdatePar4DModelDetailsPage(TreeStruct &);
150     void UpdateIsoModelDetailsPage(TreeStruct &);
151     void UpdateTreeObject();
152     void on_updateButton_clicked();
153     void on_updateJObject(QJsonObject &);
154     void RunUpdatedJObject(QJsonObject &);
155     void slot_pushButton_2_clicked();
156     void slot_unselect_clicked();
157     void slot_XYZscrollBar_valueChanged(int);
158     void UpdateDescription(int, ModelType, TreeStruct &);
159     void oncolor_2activated(int index);
160     void onred_2valueChanged(int);
161     void ongreen_2valueChanged(int);
162     void onblue_2valueChanged(int);
163     void on_updateParam_clicked();
164     void on_actionPolygonWavefront_obj_triggered();
165     void on_actionColorPolygonWavefront_obj_triggered();
166     void on_linecolumn_2_valueChanged(int);
167     int JSON_choice_activated(const QString &);
168     void ShowJsonModel(const QJsonObject &, int textureIndex = -1);
169     void DrawJsonModel(const QJsonObject &, int textureIndex = -1,
170                        bool Inspect = true);
171     bool VerifiedJsonModel(const QJsonObject &, bool Inspect = true);
172     bool VerifiedIsoJsonModel(const QJsonObject &);
173     bool VerifyParEmptySpace(const QJsonObject &);
174     bool VerifyIsoEmptySpace(const QJsonObject &);
175     bool VerifyParFieldEmptySpace(const QJsonObject &, const MandatoryParField &);
176     QString MandatoryParFieldToQString(const MandatoryParField &);
177     bool VerifyIsoFieldEmptySpace(const QJsonObject &, const MandatoryIsoField &);
178     QString MandatoryIsoFieldToQString(const MandatoryIsoField &);
179     bool VerifiedParJsonModel(const QJsonObject &);
180     void AddObjectToMySelectionTree();
181     void AddIsoObjectToTree(QTreeWidgetItem *, TreeStruct &);
182     void AddParObjectToTree(QTreeWidgetItem *, TreeStruct &);
183     void ObjArrayToString(QJsonArray &, QString &);
184     void AddParametersToTree(QTreeWidgetItem *, TreeStruct &);
185     void on_IsoComponent_activated(int);
186     void on_ParamComponent_activated(int);
187     void on_xycheckBox_clicked();
188     void on_xyhorizontalScrollBar_valueChanged(int);
189     void on_xzcheckBox_clicked();
190     void on_xzhorizontalScrollBar_valueChanged(int);
191     void on_yzcheckBox_clicked();
192     void on_yzhorizontalScrollBar_valueChanged(int);
193     void on_xwcheckBox_clicked();
194     void on_xwhorizontalScrollBar_valueChanged(int);
195     void on_ywcheckBox_clicked();
196     void on_ywhorizontalScrollBar_valueChanged(int);
197     void on_zwcheckBox_clicked();
198     void on_zwhorizontalScrollBar_valueChanged(int);
199     void on_linecolumn_3_valueChanged(int);
200     void oncolor_4activated(int);
201     void on_uv4D_clicked();
202     void on_uv_clicked();
203     void on_InitMatrix_clicked();
204     void on_ActivateCND_clicked(bool);
205     void on_TBordercheckBox_clicked(bool);
206     void on_TCNDcheckBox_clicked(bool);
207     void on_FCNDcheckBox_clicked(bool);
208     void on_TNCNDcheckBox_clicked(bool);
209     void on_FNCNDcheckBox_clicked(bool);
210     void on_actionMesh_triggered();
211     void on_calculate_clicked();
212     void on_actionAbout_2_triggered();
213     void LoadNewFileModels(bool upd = false);
214     void on_actionLoad_json_script_triggered();
215     void on_red_ParIso_valueChanged(int);
216     void on_green_ParIso_valueChanged(int);
217     void on_blue_ParIso_valueChanged(int);
218     void Multiplier(int, int, int, QJsonObject &, int index = 0);
219     void UpdateGui(int);
220     void UpdateGuiMaxgrid();
221     void ShowSliders(const QJsonObject &);
222     void on_actionScreenshot_triggered();
223     void on_actionEditor_triggered();
224     void on_actionColors_triggered();
225     void update_slider_param();
226     void add_new_param();
227     void update_infos_param(int);
228     void SearchListModels();
229     void ParseItemTree(QTreeWidgetItem *, QList<bool> &, bool view = false);
230     QTreeWidgetItem *ChildItemTreeProperty(QTreeWidgetItem *item,
231                                            QString proprty);
232 private slots:
233     void on_Infos_clicked();
234     void on_Mesh_clicked();
235     void on_Fill_clicked();
236     void on_Trian_clicked();
237     void on_actionOpenGL_triggered();
238     void on_cut_clicked();
239     void on_actionConvert_K3DS_script_triggered();
240     void on_actionConfiguration_triggered();
241     void on_actionColors_2_triggered();
242     void on_Load_clicked();
243     void on_ParamComponent_2_activated(int);
244     void on_updateParam_2_clicked();
245     void on_Multiplier_clicked();
246     void on_TimeStepScrollBar_valueChanged(int);
247     void on_InitTButton_clicked();
248     void on_pushButton_2_clicked();
249     void on_xyhorizontalScrollBar2_valueChanged(int);
250     void on_xzhorizontalScrollBar2_valueChanged(int);
251     void on_yzhorizontalScrollBar2_valueChanged(int);
252     void on_xycheckBox2_clicked();
253     void on_xzcheckBox2_clicked();
254     void on_yzcheckBox2_clicked();
255     void on_InitMatrix_2_clicked();
256     void on_xyzcheckBox2_clicked();
257     void on_pushButton_3_clicked();
258     void on_cut_2_clicked();
259     void on_pushButton_4_clicked();
260     void on_color_5_activated(int);
261     void on_transparent_ParIso_valueChanged(int);
262     void on_comboBoxTexture_activated(int);
263     void on_comboBoxPigment_activated(int);
264     void on_actionTrianglesWavefront_obj_triggered();
265     void on_actionColorTrianglesWavefront_obj_triggered();
266     void on_ShowtextureScript_clicked();
267     void on_pushButton_5_clicked();
268     void on_C1ScrollBar_valueChanged(int);
269     void on_C2ScrollBar_valueChanged(int);
270     void on_C3ScrollBar_valueChanged(int);
271     void on_C4ScrollBar_valueChanged(int);
272     void on_C5ScrollBar_valueChanged(int);
273     void on_PredefinedSets_activated(int);
274     void on_C6ScrollBar_valueChanged(int);
275     void on_C7ScrollBar_valueChanged(int);
276     void on_C8ScrollBar_valueChanged(int);
277     void on_C9ScrollBar_valueChanged(int);
278     void on_C10ScrollBar_valueChanged(int);
279     void on_C11ScrollBar_valueChanged(int);
280     void on_C12ScrollBar_valueChanged(int);
281     void on_C13ScrollBar_valueChanged(int);
282     void on_C14ScrollBar_valueChanged(int);
283     void on_C15ScrollBar_valueChanged(int);
284     void on_C16ScrollBar_valueChanged(int);
285     void on_C17ScrollBar_valueChanged(int);
286     void on_C18ScrollBar_valueChanged(int);
287     void on_C19ScrollBar_valueChanged(int);
288     void on_C20ScrollBar_valueChanged(int);
289     void CScrollBar_valueChanged(int, int);
290     void on_C20toolButton_clicked();
291     void on_C19toolButton_clicked();
292     void on_C18toolButton_clicked();
293     void on_C17toolButton_clicked();
294     void on_C16toolButton_clicked();
295     void on_C15toolButton_clicked();
296     void on_C14toolButton_clicked();
297     void on_C13toolButton_clicked();
298     void on_C12toolButton_clicked();
299     void on_C11toolButton_clicked();
300     void on_C10toolButton_clicked();
301     void on_C9toolButton_clicked();
302     void on_C8toolButton_clicked();
303     void on_C7toolButton_clicked();
304     void on_C6toolButton_clicked();
305     void on_C5toolButton_clicked();
306     void on_C4toolButton_clicked();
307     void on_C3toolButton_clicked();
308     void on_C2toolButton_clicked();
309     void on_C1toolButton_clicked();
310     void on_AddSetButton_clicked();
311     void on_CutSetButton_clicked();
312     void HideSliders();
313     void on_AddParam_clicked();
314     void on_CutParam_clicked();
315     void on_actionFrames_triggered();
316     void on_red_Specular_valueChanged(int);
317     void SetSpecularValues(int *);
318     void SetAmbientValues(int *);
319     void SetDiffuseValues(int *);
320     void SetglFrontFacingSupport();
321     void SetShininessValue(int);
322     void SetThreadValues(int *);
323     void on_green_Specular_valueChanged(int);
324     void on_blue_Specular_valueChanged(int);
325     void on_transparent_Specular_valueChanged(int);
326     void on_ShininessScrollBar_valueChanged(int);
327     void on_ThreadNumberScrollBar_valueChanged(int);
328     void on_StopCalculationsButton_clicked();
329     void on_stopButton_clicked();
330     void on_lineScrollBar_valueChanged(int);
331     void on_coloneScrollBar_valueChanged(int);
332     void on_actionScripts_selection_triggered();
333     void on_actionBoundingBox_clicked();
334     void on_actionAnimation_Rotation_triggered();
335     void on_actionMorph_use_t_parameter_triggered();
336     void on_TreeViewButton_clicked();
337     void ApplypushButton_clicked();
338     void on_ObjectClasseCurrent_clicked(const QModelIndex &index);
339     void on_parisocomboBox_currentIndexChanged(int index);
340     void on_ApplypushButton_clicked();
341     void on_ApplypushButton_2_clicked();
342     void on_ApplypushButton_3_clicked();
343     void updateParametricGridSliders(int);
344     void on_actionDocumentation_triggered();
345     void on_ScaleButton_clicked();
346     void on_ShowIsoComp_clicked();
347     void updateShowIsoCmp(int);
348     void updateShowParComp(int);
349     void on_ShowParComp_clicked();
350     void on_actionAxe_triggered();
351     void on_actionPlan_triggered();
352     void on_actionDetach_WinInfos_triggered();
353     void on_red_Ambient_valueChanged(int value);
354     void on_green_Ambient_valueChanged(int value);
355     void on_blue_Ambient_valueChanged(int value);
356     void on_transparent_Ambient_valueChanged(int value);
357     void on_red_Diffuse_valueChanged(int value);
358     void on_green_Diffuse_valueChanged(int value);
359     void on_blue_Diffuse_valueChanged(int value);
360     void on_transparent_Diffuse_valueChanged(int value);
361     void on_GLFrontSurfaceSupport_clicked();
362 };
363 #endif
364