/////////////////////////////////////////////////////////////////////////////////
//
// This file is part of SACAMOS, cable models for EMI simulations in SPICE.
// It was developed by the University of Nottingham and the Netherlands Aerospace
// Centre (NLR) for ESA under contract number 4000112765/14/NL/HK.
//
// Copyright (C) 2015 - 2018 University of Nottingham
//
// SACAMOS is free software: you can redistribute it and/or modify it under the
// terms of the GNU General Public License as published by the Free Software
// Foundation, either version 3 of the License, or (at your option) any later
// version.
//
// SACAMOS is distributed in the hope that it will be useful, but
// WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY
// or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
// for more details.
//
// A copy of the GNU General Public License version 3 can be found in the
// file GNU_GPL_v3 in the root or at <http://www.gnu.org/licenses/>.
//
// wxWidgets is currently licenced under the "wxWindows Library Licence".
// A copy of the wxWindows Library Licence, Version 3.1 can be found in the file
// wxWindows_Library_Licence_v3-1 in the root or at:
// <https://www.wxwidgets.org/about/licence/>
//
//
// The University of Nottingham can be contacted at: ggiemr@nottingham.ac.uk
//
// File Contents:
//
// NAME
//     SW1_GUIMain.cpp
//
// DESCRIPTION
//     Main application GUI for SACAMOS
//
// AUTHOR(S)
//     Steve Greedy
//
/////////////////////////////////////////////////////////////////////////////////

#ifndef SW1_GUIMAIN_H
#define SW1_GUIMAIN_H

//(*Headers(SW1_GUIFrame)
#include <wx/sizer.h>
#include <wx/menu.h>
#include <wx/panel.h>
#include <wx/statbmp.h>
#include <wx/dirdlg.h>
#include <wx/frame.h>
#include <wx/statusbr.h>
//*)

// Additional wxWidgets Includes
#include <wx/dirctrl.h>
#include <wx/msgdlg.h>
#include <wx/dir.h>
#include <wx/dirctrl.h>
#include <wx/treectrl.h>
#include <wx/filename.h>
#include <wx/dcclient.h>

// Application Includes
#include "FileSelectorCtrl.h"
#include "ABOUT.h"
#include "CYLINDRICAL.h"
#include "COAXIAL.h"
#include "TWINAX.h"
#include "UTP.h"
#include "TP.h"
#include "SPACEWIRE.h"
#include "OVERSHIELD.h"
#include "FLEXCABLE.h"
#include "DCONN.h"
#include "BUNDLEBLDR.h"
#include "SPICEMODEL.h"
#include "CABLE_SCHEMATIC.h"
#include "BUNDLE_SCHEMATIC.h"
#include "EXPORT_SPICE.h"
#include "UTILITIES.h"
#include "LOGGER.h"

// Standard Library Header Files
#include <iostream>
#include <fstream>
#include <string>

using namespace std;

class SW1_GUIFrame: public wxFrame
{
    public:

        SW1_GUIFrame(wxWindow* parent,wxWindowID id = -1);
        virtual ~SW1_GUIFrame();

    private:

        void PopulateTheDirectoryTree ( wxString );
        void OnTreeSelectionChanged ( wxTreeEvent& evt );
        void OnTreeSelection ( wxTreeEvent& evt );
        void CreateCable (wxString, wxString, bool);

        void CreateLogFile();

        wxSpecificDirCtrl *tree = NULL; //NULL used to remain consistent with wxWidgets use of the standard NULL macro

        wxString PathToMOD;
        wxString SelectedFile;
        wxString MODname;



        bool Edit;

        //(*Handlers(SW1_GUIFrame)
        void OnQuit(wxCommandEvent& event);
        void OnAbout(wxCommandEvent& event);
        void OnSelectMOD(wxCommandEvent& event);
        void OnCOAXIAL(wxCommandEvent& event);
        void OnPanel1Paint(wxPaintEvent& event);
        void OnPanel2Paint(wxPaintEvent& event);
        void OnCYLINDRICAL(wxCommandEvent& event);
        void OnTWINAX(wxCommandEvent& event);
        void OnUTP(wxCommandEvent& event);
        void OnTP(wxCommandEvent& event);
        void OnSPACEWIRE(wxCommandEvent& event);
        void OnOVERSHIELD(wxCommandEvent& event);
        void OnFLEXCABLE(wxCommandEvent& event);
        void OnNEWBUNDLE(wxCommandEvent& event);
        void OnCREATESPICE(wxCommandEvent& event);
        void OnDSUB(wxCommandEvent& event);
        void OnLicense(wxCommandEvent& event);
        void OnPanel1Resize(wxSizeEvent& event);
        void OnResize(wxSizeEvent& event);
        void OnPanel1RightDClick(wxMouseEvent& event);
        void OnCreateMOD(wxCommandEvent& event);
        void OnEXPORTSPICE(wxCommandEvent& event);
        void OnClose(wxCloseEvent& event);
        //*)

        //(*Identifiers(SW1_GUIFrame)
        static const long ID_PANEL1;
        static const long ID_STATICBITMAP1;
        static const long ID_PANEL2;
        static const long ID_CREATEMOD;
        static const long ID_SELECTMOD;
        static const long ID_MENUITEM1;
        static const long ID_CYLINDRICAL;
        static const long ID_COAX;
        static const long ID_TWINAX;
        static const long ID_UTP;
        static const long ID_TP;
        static const long ID_SPACEWIRE;
        static const long ID_FLEX;
        static const long ID_DSUB;
        static const long ID_OVERSHIELD;
        static const long ID_NEWBUNDLE;
        static const long ID_EDITBUNDLE;
        static const long ID_NEWSPICE;
        static const long ID_MENUITEM2;
        static const long idMenuAbout;
        static const long ID_STATUSBAR1;
        //*)

        //(*Declarations(SW1_GUIFrame)
        wxMenuItem* MenuItem8;
        wxMenuItem* Menu7;
        wxMenuItem* MenuItem7;
        wxMenuItem* MenuItem5;
        wxMenu* Menu3;
        wxStaticBitmap* StaticBitmap1;
        wxMenuItem* MenuItem4;
        wxMenuItem* MenuItem14;
        wxMenuItem* MenuItem11;
        wxPanel* Panel1;
        wxMenuItem* MenuItem13;
        wxMenuItem* MenuItem10;
        wxMenuItem* MenuItem12;
        wxMenuItem* MenuItem3;
        wxStatusBar* StatusBar1;
        wxDirDialog* DirDialog1;
        wxMenuItem* MenuItem6;
        wxMenuItem* Menu6;
        wxPanel* Panel2;
        wxMenuItem* MenuItem16;
        wxMenuItem* MenuItem9;
        wxMenu* Menu5;
        wxMenu* Menu4;
        //*)

        DECLARE_EVENT_TABLE()
};

#endif // SW1_GUIMAIN_H
