/* -*- C++ -*- */
#ifndef _ConfigurationViewer_MainFrame_H
#define _ConfigurationViewer_MainFrame_H

class ConfigTreeCtrl;
class ValueListCtrl;

enum
{
    // menu items
    QUIT = 1,
    ABOUT,
    FILE_NEW_PERSISTENT_HEAP,
    FILE_NEW_TRANSIENT_HEAP,
    FILE_OPEN_PERSISTENT_HEAP,
    FILE_OPEN_REGISTRY,
    FILE_EXPORT,
    FILE_IMPORT,
    LEFT_SASH,
    FRAME_TREE
};


class MainFrame : public wxFrame
{
public:
  ///////////////////////////////////////////
  // Initializers
  ///////////////////////////////////////////
  MainFrame(const wxString& title, const wxPoint& pos, const wxSize& size);
  virtual ~MainFrame();

  ///////////////////////////////////////////
  // Methods
  ///////////////////////////////////////////
  static MainFrame* Instance();
  void OnQuit(wxCommandEvent& event);
  void OnAbout(wxCommandEvent& event);
  void OnFileNewPersistentHeap(wxCommandEvent& event);
  void OnFileNewTransientHeap(wxCommandEvent& event);
  void OnFileOpenPersistentHeap(wxCommandEvent& event);
  void OnFileOpenRegistry(wxCommandEvent& event);
  void OnFileExport(wxCommandEvent& event);
  void OnFileImport(wxCommandEvent& event);
  void OnSize(wxSizeEvent& event);

  ///////////////////////////////////////////
  // Attribute Accessors
  ///////////////////////////////////////////
  ACE_Configuration* GetpConfig() {return m_pConfig;};
protected:
  // Not Used
  MainFrame(const MainFrame& RHS);
  const MainFrame& operator=(const MainFrame& RHS);

  // Operations
  void SetNewConfig(ACE_Configuration* pConfig);

  // Attributes
  wxSplitterWindow*         m_pSplitter;
  ConfigTreeCtrl*           m_pTreeCtrl;
  ValueListCtrl*            m_pListCtrl;
private:
  DECLARE_EVENT_TABLE()
  ACE_Configuration*        m_pConfig;
  static MainFrame*         m_pInstance;
};

#endif

