/* +------------------------------------------------------------------------+
   |                     Mobile Robot Programming Toolkit (MRPT)            |
   |                          https://www.mrpt.org/                         |
   |                                                                        |
   | Copyright (c) 2005-2024, Individual contributors, see AUTHORS file     |
   | See: https://www.mrpt.org/Authors - All rights reserved.               |
   | Released under BSD License. See: https://www.mrpt.org/License          |
   +------------------------------------------------------------------------+ */

#ifndef gridmapSimulMAIN_H
#define gridmapSimulMAIN_H

//(*Headers(gridmapSimulFrame)
#include <wx/button.h>
#include <wx/checkbox.h>
#include <wx/frame.h>
#include <wx/menu.h>
#include <wx/panel.h>
#include <wx/sizer.h>
#include <wx/spinctrl.h>
#include <wx/splitter.h>
#include <wx/stattext.h>
#include <wx/textctrl.h>
#include <wx/timer.h>
//*)
#include <mrpt/gui/WxUtils.h>

class CMyGLCanvas;

#define GRIDMAPSIMUL_VERSION "1.0"

class gridmapSimulFrame : public wxFrame
{
 public:
  gridmapSimulFrame(wxWindow* parent, wxWindowID id = -1);
  ~gridmapSimulFrame() override;

 private:
  //(*Handlers(gridmapSimulFrame)
  void OnbtnQuitClick(wxCommandEvent& event);
  void OntimRunTrigger(wxTimerEvent& event);
  void OnbtnStartClick(wxCommandEvent& event);
  void OnbtnEndClick(wxCommandEvent& event);
  void OnbtnExploreClick(wxCommandEvent& event);
  void OnbtnSetLaserClick(wxCommandEvent& event);
  void OnAbout(wxCommandEvent& event);
  void OnbtnResimulateClick(wxCommandEvent& event);
  //*)
  void OnMenuLoadMap(wxCommandEvent& event);

  void update_grid_map_3d();

  //(*Identifiers(gridmapSimulFrame)
  static const long ID_STATICTEXT1;
  static const long ID_TEXTCTRL1;
  static const long ID_STATICTEXT2;
  static const long ID_TEXTCTRL2;
  static const long ID_STATICTEXT3;
  static const long ID_TEXTCTRL3;
  static const long ID_STATICTEXT8;
  static const long ID_TEXTCTRL5;
  static const long ID_BUTTON5;
  static const long ID_STATICTEXT16;
  static const long ID_SPINCTRL1;
  static const long ID_STATICTEXT9;
  static const long ID_TEXTCTRL6;
  static const long ID_STATICTEXT13;
  static const long ID_TEXTCTRL7;
  static const long ID_STATICTEXT10;
  static const long ID_TEXTCTRL8;
  static const long ID_STATICTEXT11;
  static const long ID_TEXTCTRL9;
  static const long ID_STATICTEXT12;
  static const long ID_TEXTCTRL10;
  static const long ID_STATICTEXT14;
  static const long ID_TEXTCTRL11;
  static const long ID_STATICTEXT4;
  static const long ID_BUTTON4;
  static const long ID_CHECKBOX1;
  static const long ID_CHECKBOX_RAWLOG_FORMAT;
  static const long ID_STATICTEXT6;
  static const long ID_STATICTEXT7;
  static const long ID_BUTTON6;
  static const long ID_PANEL3;
  static const long ID_BUTTON1;
  static const long ID_BUTTON2;
  static const long ID_STATICTEXT5;
  static const long ID_TEXTCTRL4;
  static const long ID_BUTTON3;
  static const long ID_STATICTEXT15;
  static const long ID_TEXTCTRL12;
  static const long ID_PANEL6;
  static const long ID_PANEL4;
  static const long ID_PANEL2;
  static const long ID_PANEL1;
  static const long ID_PANEL5;
  static const long ID_SPLITTERWINDOW1;
  static const long ID_TIMER1;
  static const long ID_MENUITEM1;
  static const long ID_MENUITEM_LOADMAP;
  static const long ID_MENUITEM2;
  static const long ID_MENUITEM3;
  //*)
  static const long ID_TEXTCTRL_INPUT;

  //(*Declarations(gridmapSimulFrame)
  wxTextCtrl* edSpan;
  wxMenuItem* MenuItem1;
  wxMenuItem* MenuItemLoadMap;
  wxTextCtrl* edOutGT;
  wxButton* btnExplore;
  wxSpinCtrl* edDecimate;
  wxPanel* Panel1;
  wxStaticText* StaticText13;
  wxStaticText* StaticText14;
  wxStaticText* StaticText15;
  wxMenu* Menu1;
  wxButton* btnSetLaser;
  wxCheckBox* cbJoy;
  wxCheckBox* cbRawlogSFformat;
  wxTextCtrl* edAys;
  wxStaticText* StaticText1;
  wxStaticText* StaticText10;
  wxStaticText* StaticText16;
  wxPanel* Panel2;
  wxSplitterWindow* SplitterWindow1;
  wxStaticText* StaticText3;
  wxPanel* Panel4;
  wxButton* btnExit;
  wxTextCtrl* edAyb;
  wxTextCtrl* edStdNoiseAng;
  wxButton* btnResimulate;
  wxPanel* Panel5;
  wxStaticText* StaticText8;
  wxTextCtrl* edOutFile;
  wxStaticText* StaticText12;
  wxTextCtrl* edCount;
  wxTimer timRun;
  wxPanel* Panel3;
  wxStaticText* StaticText7;
  wxTextCtrl* edStdNoise;
  wxStaticText* StaticText4;
  wxTextCtrl* edAxb;
  wxButton* btnEnd;
  wxStaticText* StaticText5;
  wxMenuBar* MenuBar1;
  wxStaticText* StaticText2;
  wxTextCtrl* edApb;
  wxPanel* panelGL;
  wxStaticText* StaticText6;
  wxMenu* Menu2;
  wxTextCtrl* edAps;
  wxTextCtrl* edAxs;
  wxButton* btnStart;
  wxStaticText* StaticText9;
  wxStaticText* StaticText11;
  //*)

  DECLARE_EVENT_TABLE()

  CMyGLCanvas* m_canvas;
};

#endif  // gridmapSimulMAIN_H
