/**********
 hellowx.cc
 **********/ 

#include "hellowx.h"

IMPLEMENT_APP(HelloApp);

bool HelloApp::OnInit()
{
  HelloFrame *ptr_main = new HelloFrame();
  SetTopWindow(ptr_main);
  ptr_main->Show(TRUE);
  return TRUE;
}

BEGIN_EVENT_TABLE(HelloFrame, wxFrame) 
  EVT_MENU(OPEN_EVT_ID, HelloFrame::OnOpen) 
  EVT_MENU(SAVE_EVT_ID, HelloFrame::OnSave) 
  EVT_MENU(QUIT_EVT_ID, HelloFrame::OnQuit) 
  EVT_MENU(ABOUT_EVT_ID, HelloFrame::OnAbout) 
END_EVENT_TABLE()

HelloFrame::HelloFrame()
  :wxFrame(static_cast<wxFrame*>(NULL), -1, "Hello wxWindows")
{
  m_ptrMenBar = new wxMenuBar();
  m_ptrFileMenu = new wxMenu();
  m_ptrFileMenu->Append(OPEN_EVT_ID, "&Oeffnen");
  m_ptrFileMenu->Append(SAVE_EVT_ID, "&Speichern");
  m_ptrFileMenu->Append(QUIT_EVT_ID, "&Beenden");
  m_ptrMenBar->Append(m_ptrFileMenu, "&Datei");

  m_ptrHelpMenu = new wxMenu();
  m_ptrHelpMenu->Append(ABOUT_EVT_ID, "&About");
  m_ptrMenBar->Append(m_ptrHelpMenu, "&Hilfe");

  SetMenuBar(m_ptrMenBar);
  m_ptrText = new wxTextCtrl(this, -1, "",
    wxDefaultPosition, wxDefaultSize, wxTE_MULTILINE);
}

void HelloFrame::OnSave(wxCommandEvent &event)
{
  wxFileDialog saveDialog(static_cast<wxWindow*>(NULL),
    "Save", "", "", "*.txt", wxSAVE);
  if(saveDialog.ShowModal() == wxID_OK) {
    m_ptrText->SaveFile(saveDialog.GetPath());
  }
}

void HelloFrame::OnOpen(wxCommandEvent &event)
{
  wxFileDialog openDialog(static_cast<wxWindow*>(NULL),
    "Open", "", "", "*.txt", wxOPEN);
  if(openDialog.ShowModal() == wxID_OK) {
    m_ptrText->LoadFile(openDialog.GetPath());
  }
}

void HelloFrame::OnQuit(wxCommandEvent &event)
{
  if(!m_ptrText->IsModified()) {
    Close(TRUE);
    return;
  }

  wxMessageDialog msgDialog(static_cast<wxWindow*>(NULL),
    "Datei wurde geaendert. Wirklich beenden?",
    "Wirklich beenden?",
    wxOK | wxCANCEL | wxICON_QUESTION);
  if(msgDialog.ShowModal() == wxID_OK) {
    Close(TRUE);
  }
}

void HelloFrame::OnAbout(wxCommandEvent &event)
{
  AboutDialog aboutdlg;
  aboutdlg.ShowModal();
}

AboutDialog::AboutDialog()
  :wxDialog(static_cast<wxWindow*>(NULL), -1, "About")
{
  wxButton *ok_button = new wxButton(this, wxID_OK, "OK");

  wxTextCtrl *about_txt = new wxTextCtrl(this, -1, 
    "Nur eine nichtssagende Aboutbox :-)",
    wxDefaultPosition, wxSize(200, 100),
    wxTE_MULTILINE | wxTE_READONLY);

  wxBoxSizer *ptr_sizer = new wxBoxSizer(wxVERTICAL);
  ptr_sizer->Add(about_txt, 0, wxALL, 5);
  ptr_sizer->Add(ok_button, 0, wxALIGN_CENTER, 10);
  SetSizer(ptr_sizer);
  ptr_sizer->SetSizeHints(this);
}
