
#ifndef MAINFRAME_HPP
#define MAINFRAME_HPP
#include <wx/wxprec.h>
#ifndef WX_PRECOMP
    #include <wx/wx.h>
#endif
#include <wx/aui/auibook.h>
#include <wx/tooltip.h>

#include <memory>
#include <map>


#include "Controller.hpp"
#include "Plater.hpp"
#include "Dialogs/PresetEditor.hpp"
#include "Settings.hpp"
#include "GUI.hpp"
#include "ProgressStatusBar.hpp"

namespace Slic3r { namespace GUI {

class Plater;

constexpr unsigned int TOOLTIP_TIMER = 32767;

class MainFrame: public wxFrame
{
public:
    MainFrame(const wxString& title, const wxPoint& pos, const wxSize& size);
    ProgressStatusBar* statusbar {new ProgressStatusBar(this, -1)};

    bool has_plater_menu() { return this->plater_menu != nullptr; }
    wxMenu* plater_select_menu {nullptr};
private:
    wxDECLARE_EVENT_TABLE();

    void init_menubar(); //< Routine to intialize all top-level menu items.
    void init_tabpanel(); //< Routine to initialize all of the tabs.

    bool loaded; //< Main frame itself has finished loading.
    // STUB: preset editor tabs storage
    // STUB: Statusbar reference

    wxAuiNotebook* tabpanel;
    Controller* controller;
    Plater* plater;

    wxMenu* plater_menu {nullptr};

    std::map<wxWindowID, PresetEditor*> preset_editor_tabs;

    void on_plater_object_list_changed(bool force) {};
    void on_plater_selection_changed(bool force) {};


};

}} // Namespace Slic3r::GUI
#endif // MAINFRAME_HPP
