#include "FrameArquivo.h"

//(*InternalHeaders(FrameArquivo)
#include <wx/string.h>
#include <wx/intl.h>
#include <wx/bitmap.h>
#include <wx/image.h>
#include <wx/artprov.h>
//*)

#include <wx/filename.h>
#include <wx/control.h>
#include <wx/sizer.h>
#include <wx/statbox.h>
#include <sstream>
#include <iostream>
#include <iomanip>

#include "Principal.h"
#include "Arquivo.h"
#include "Utils.h"

//(*IdInit(FrameArquivo)
const long FrameArquivo::ID_GRID1 = wxNewId();
const long FrameArquivo::ID_TOOLBARITEM1 = wxNewId();
const long FrameArquivo::ID_TOOLBARITEM6 = wxNewId();
const long FrameArquivo::ID_TOOLBARITEM2 = wxNewId();
const long FrameArquivo::ID_TOOLBARITEM3 = wxNewId();
const long FrameArquivo::ID_TOOLBARITEM4 = wxNewId();
const long FrameArquivo::ID_TOOLBARITEM5 = wxNewId();
const long FrameArquivo::ID_TOOLBAR1 = wxNewId();
//*)

BEGIN_EVENT_TABLE(FrameArquivo,wxFrame)
	//(*EventTable(FrameArquivo)
	//*)
END_EVENT_TABLE()

FrameArquivo::FrameArquivo(wxWindow* parent,wxWindowID id,const wxPoint& pos,const wxSize& size)
{
	BuildContent(parent,id,pos,size);
}

void FrameArquivo::BuildContent(wxWindow* parent,wxWindowID id,const wxPoint& pos,const wxSize& size)
{
	//(*Initialize(FrameArquivo)
	Create(parent, wxID_ANY, _("Simulações"), wxDefaultPosition, wxDefaultSize, wxDEFAULT_FRAME_STYLE, _T("wxID_ANY"));
	SetClientSize(wxSize(1140,400));
	Grid1 = new wxGrid(this, ID_GRID1, wxPoint(160,320), wxSize(976,120), wxRAISED_BORDER, _T("ID_GRID1"));
	Grid1->CreateGrid(0,13);
	Grid1->EnableEditing(true);
	Grid1->EnableGridLines(true);
	Grid1->SetLabelTextColour(wxColour(222,33,33));
	Grid1->SetColLabelValue(0, _("N"));
	Grid1->SetColLabelValue(1, _("X"));
	Grid1->SetColLabelValue(2, _("Y"));
	Grid1->SetColLabelValue(3, _("DS"));
	Grid1->SetColLabelValue(4, _("DSS"));
	Grid1->SetColLabelValue(5, _("US"));
	Grid1->SetColLabelValue(6, _("E1"));
	Grid1->SetColLabelValue(7, _("E2"));
	Grid1->SetColLabelValue(8, _("T1"));
	Grid1->SetColLabelValue(9, _("T2"));
	Grid1->SetColLabelValue(10, _("T3"));
	Grid1->SetColLabelValue(11, _("T4"));
	Grid1->SetColLabelValue(12, _("T5"));
	Grid1->SetDefaultCellFont( Grid1->GetFont() );
	Grid1->SetDefaultCellTextColour( Grid1->GetForegroundColour() );
	ToolBar1 = new wxToolBar(this, ID_TOOLBAR1, wxDefaultPosition, wxDefaultSize, wxTB_HORIZONTAL|wxNO_BORDER, _T("ID_TOOLBAR1"));
	ToolBarItem1 = ToolBar1->AddTool(ID_TOOLBARITEM1, _("Novo"), wxArtProvider::GetBitmap(wxART_MAKE_ART_ID_FROM_STR(_T("wxART_NEW")),wxART_TOOLBAR), wxNullBitmap, wxITEM_NORMAL, _("Novo"), wxEmptyString);
	ToolBarItem6 = ToolBar1->AddTool(ID_TOOLBARITEM6, _("Remover"), wxArtProvider::GetBitmap(wxART_MAKE_ART_ID_FROM_STR(_T("wxART_DELETE")),wxART_TOOLBAR), wxNullBitmap, wxITEM_NORMAL, wxEmptyString, wxEmptyString);
	ToolBarItem2 = ToolBar1->AddTool(ID_TOOLBARITEM2, _("Importar"), wxArtProvider::GetBitmap(wxART_MAKE_ART_ID_FROM_STR(_T("wxART_FILE_OPEN")),wxART_TOOLBAR), wxNullBitmap, wxITEM_NORMAL, _("Importar"), wxEmptyString);
	ToolBarItem3 = ToolBar1->AddTool(ID_TOOLBARITEM3, _("Exportar"), wxArtProvider::GetBitmap(wxART_MAKE_ART_ID_FROM_STR(_T("wxART_FILE_SAVE")),wxART_TOOLBAR), wxNullBitmap, wxITEM_NORMAL, _("Exportar"), wxEmptyString);
	ToolBarItem4 = ToolBar1->AddTool(ID_TOOLBARITEM4, _("Simular"), wxArtProvider::GetBitmap(wxART_MAKE_ART_ID_FROM_STR(_T("wxART_EXECUTABLE_FILE")),wxART_TOOLBAR), wxNullBitmap, wxITEM_NORMAL, _("Simular"), wxEmptyString);
	ToolBar1->AddSeparator();
	ToolBarItem5 = ToolBar1->AddTool(ID_TOOLBARITEM5, _("Sair"), wxArtProvider::GetBitmap(wxART_MAKE_ART_ID_FROM_STR(_T("wxART_QUIT")),wxART_TOOLBAR), wxNullBitmap, wxITEM_NORMAL, _("Sair"), wxEmptyString);
	ToolBar1->Realize();
	SetToolBar(ToolBar1);
	FileDialog1 = new wxFileDialog(this, _("Select file"), wxEmptyString, wxEmptyString, _("*.dat"), wxFD_OPEN|wxFD_FILE_MUST_EXIST|wxFD_CHANGE_DIR, wxDefaultPosition, wxDefaultSize, _T("wxFileDialog"));
	FileDialog2 = new wxFileDialog(this, _("Select file"), wxEmptyString, wxEmptyString, _("*.dat"), wxFD_SAVE|wxFD_OVERWRITE_PROMPT|wxFD_CHANGE_DIR, wxDefaultPosition, wxDefaultSize, _T("wxFileDialog"));

	Connect(wxID_ANY,wxEVT_CLOSE_WINDOW,(wxObjectEventFunction)&FrameArquivo::OnClose);
	//*)

	Connect(ID_TOOLBARITEM1,wxEVT_TOOL,(wxObjectEventFunction)&FrameArquivo::OnToolItem1);
	Connect(ID_TOOLBARITEM6,wxEVT_TOOL,(wxObjectEventFunction)&FrameArquivo::OnToolItem6);
	Connect(ID_TOOLBARITEM2,wxEVT_TOOL,(wxObjectEventFunction)&FrameArquivo::OnToolItem2);
	Connect(ID_TOOLBARITEM3,wxEVT_TOOL,(wxObjectEventFunction)&FrameArquivo::OnToolItem3);
	Connect(ID_TOOLBARITEM4,wxEVT_TOOL,(wxObjectEventFunction)&FrameArquivo::OnToolItem4);
	Connect(ID_TOOLBARITEM5,wxEVT_TOOL,(wxObjectEventFunction)&FrameArquivo::OnClose);

	int i,
        cols=Grid1->GetNumberCols();
    for (i=0; i<cols; ++i) {
        if (i==0)       Grid1->SetColFormatNumber(i);
        else if (i>2)   Grid1->SetColFormatFloat(i,CAMPO,PRECISAO);
    }

}

FrameArquivo::~FrameArquivo()
{
	//(*Destroy(FrameArquivo)
	//*)
}

void FrameArquivo::OnClose(wxCloseEvent& event)
{
    Destroy();
}

// Novo
void FrameArquivo::OnToolItem1(wxCommandEvent& event)
{
    limpaEntrada(Grid1);
    iniciaCelulas(Grid1);
}

// Remover
void FrameArquivo::OnToolItem6(wxCommandEvent& event)
{
    int i;
    wxArrayInt linhas = Grid1->GetSelectedRows();

    for(i=0; i<linhas.size(); ++i)
        Grid1->DeleteRows(linhas[i],1);
}

// Importar
void FrameArquivo::OnToolItem2(wxCommandEvent& event)
{
    int cont, linha, i;
    if(FileDialog1->ShowModal() == wxID_OK) {
        cont = readArq(FileDialog1->GetPath().ToStdString());
        while (cont != LAST and cont != UNIQUE) {
            linha = limpaEntrada(Grid1);
            SetEntrada(Grid1, linha);
            cont = readArq(NEXT);
        }
        linha = limpaEntrada(Grid1);
        SetEntrada(Grid1, linha);
        limpaSaida(Grid1, linha);

        Grid1->AutoSizeRows();
        iniciaCelulas(Grid1);
    }
}

// Exportar
void FrameArquivo::OnToolItem3(wxCommandEvent& event)
{
    string arq;
    int i;

    if(FileDialog2->ShowModal() == wxID_OK) {
        arq = FileDialog2->GetPath().ToStdString();

        GetEntrada(Grid1, 0);
        saveArq(arq, ios_base::trunc);
        for(i=1; i < Grid1->GetNumberRows()-1; ++i) {
            GetEntrada(Grid1, i);
            saveArq(arq);
        }
        GetEntrada(Grid1, i);
        saveArq(arq,ios::app,true);
    }
}

// EXECUTAR
void FrameArquivo::OnToolItem4(wxCommandEvent& event)
{
    int i;
    wxArrayInt linhas = Grid1->GetSelectedRows();

    for(i=0; i<linhas.size(); ++i) {
        limpaSaida(Grid1, linhas[i]);
        GetEntrada(Grid1, linhas[i]);
        principal();
        SetSaida(Grid1, linhas[i]);

        Grid1->AutoSizeRows();
    }
}

