#############################################################################
## Name:        XS/Menu.xs
## Purpose:     XS for Wx::Menu, Wx::MenuBar, Wx::MenuItem
## Author:      Mattia Barbon
## Modified by:
## Created:     29/10/2000
## RCS-ID:      $Id: Menu.xs 3532 2015-03-11 01:27:54Z mdootson $
## Copyright:   (c) 2000-2004, 2006-2008, 2010 Mattia Barbon
## Licence:     This program is free software; you can redistribute it and/or
##              modify it under the same terms as Perl itself
#############################################################################

#include <wx/menu.h>

MODULE=Wx PACKAGE=Wx::Menu

wxMenu*
wxMenu::new( title = wxEmptyString, style = 0)
    wxString title
    long style

#if WXPERL_W_VERSION_GE( 2, 7, 0 )

wxMenuItem*
wxMenu::AppendSubMenu( submenu, text, help = wxEmptyString )
    wxMenu* submenu
    wxString text
    wxString help

#endif

void
wxMenu::AppendString( id, item = wxEmptyString, help = wxEmptyString, kind = wxITEM_NORMAL )
    int id
    wxString item
    wxString help
    wxItemKind kind
  PPCODE:
#if WXPERL_W_VERSION_GE( 2, 5, 1 )
    XPUSHs( wxPli_object_2_sv( aTHX_ sv_newmortal(),
            THIS->Append( id, item, help, kind ) ) );
#else
    THIS->Append( id, item, help, kind );
#endif

void
wxMenu::AppendSubMenu_( id, item, subMenu, helpString = wxEmptyString )
    int id
    wxString item
    wxMenu* subMenu
    wxString helpString
  PPCODE:
#if WXPERL_W_VERSION_GE( 2, 5, 1 )
    XPUSHs( wxPli_object_2_sv( aTHX_ sv_newmortal(),
            THIS->Append( id, item, subMenu, helpString ) ) );
#else
    THIS->Append( id, item, subMenu, helpString );
#endif

void
wxMenu::AppendItem( menuItem )
    wxMenuItem* menuItem
  PPCODE:
#if WXPERL_W_VERSION_GE( 2, 5, 1 )
    XPUSHs( wxPli_object_2_sv( aTHX_ sv_newmortal(),
            THIS->Append( menuItem ) ) );
#else
    THIS->Append( menuItem );
#endif

void
wxMenu::AppendCheckItem( id, item, helpString = wxEmptyString )
    int id
    wxString item
    wxString helpString
  PPCODE:
#if WXPERL_W_VERSION_GE( 2, 5, 1 )
    XPUSHs( wxPli_object_2_sv( aTHX_ sv_newmortal(),
            THIS->AppendCheckItem( id, item, helpString ) ) );
#else
    THIS->AppendCheckItem( id, item, helpString );
#endif

void
wxMenu::AppendRadioItem( id, item, helpString = wxEmptyString )
    int id
    wxString item
    wxString helpString
  PPCODE:
#if WXPERL_W_VERSION_GE( 2, 5, 1 )
    XPUSHs( wxPli_object_2_sv( aTHX_ sv_newmortal(),
            THIS->AppendRadioItem( id, item, helpString ) ) );
#else
    THIS->AppendRadioItem( id, item, helpString );
#endif

void
wxMenu::AppendSeparator()
  PPCODE:
#if WXPERL_W_VERSION_GE( 2, 5, 1 )
    XPUSHs( wxPli_object_2_sv( aTHX_ sv_newmortal(),
            THIS->AppendSeparator() ) );
#else
    THIS->AppendSeparator();
#endif

void
wxMenu::Break()

void
wxMenu::Check( id, check )
    int id
    bool check

void
wxMenu::DeleteId( id )
    int id
  CODE:
    THIS->Delete( id );

void
wxMenu::DeleteItem( item )
    wxMenuItem* item
  CODE:
    THIS->Delete( item );

void
wxMenu::DestroyMenu()
  CODE:
    delete THIS;

void
wxMenu::DestroyId( id )
    int id
  CODE:
    THIS->Destroy( id );

void
wxMenu::DestroyItem( item )
    wxMenuItem* item
  CODE:
    THIS->Destroy( item );

void
wxMenu::Enable( id, enable )
    int id
    bool enable

#if WXPERL_W_VERSION_GE( 2, 5, 1 )

wxMenuItem*
wxMenu::FindItemByPosition( pos )
    size_t pos

#endif

void
wxMenu::FindItem( item )
    SV* item
  PPCODE:
    if( looks_like_number( item ) ) {
      int id = SvIV( item );
      wxMenu* submenu;
      wxMenuItem* ret;

      ret = THIS->FindItem( id, &submenu );

      SV* mi = sv_newmortal();

      if( GIMME_V == G_ARRAY ) {
        EXTEND( SP, 2 );
        SV* sm = sv_newmortal();

        PUSHs( wxPli_object_2_sv( aTHX_ mi, ret ) );
        PUSHs( wxPli_object_2_sv( aTHX_ sm, submenu ) );
      }
      else {
        EXTEND( SP, 1 );
        PUSHs( wxPli_object_2_sv( aTHX_ mi, ret ) );
      }
    }
    else {
      wxString string;
      WXSTRING_INPUT( string, const char*, item );
      int id = THIS->FindItem( string );

      EXTEND( SP, 1 );
      PUSHs( sv_2mortal( newSViv( id ) ) );
    }

wxString
wxMenu::GetHelpString( id )
    int id

wxString
wxMenu::GetLabel( id )
    int id

#if WXPERL_W_VERSION_GE( 2, 8, 5 )

wxString
wxMenu::GetLabelText( id )
    int id

#endif

int
wxMenu::GetMenuItemCount()

void
wxMenu::GetMenuItems()
  PPCODE:
    wxMenuItemList& data = THIS->GetMenuItems();
    wxMenuItemList::compatibility_iterator node;
 
    EXTEND( SP, (IV) data.GetCount() );
    for( node = data.GetFirst(); node; node = node->GetNext() )
    {
      PUSHs( wxPli_object_2_sv( aTHX_ sv_newmortal(), node->GetData() ) );
    }

wxString
wxMenu::GetTitle()

void
wxMenu::InsertItem( pos, item )
    int pos
    wxMenuItem* item
  PPCODE:
#if WXPERL_W_VERSION_GE( 2, 5, 1 )
    XPUSHs( wxPli_object_2_sv( aTHX_ sv_newmortal(),
            THIS->Insert( pos, item ) ) );
#else
    XPUSHs( THIS->Insert( pos, item ) ? &PL_sv_yes : &PL_sv_no );
#endif

void
wxMenu::InsertString( pos, id, item = wxEmptyString, helpString = wxEmptyString, kind = wxITEM_NORMAL )
    int pos
    int id
    wxString item
    wxString helpString
    wxItemKind kind
  PPCODE:
#if WXPERL_W_VERSION_GE( 2, 5, 1 )
    XPUSHs( wxPli_object_2_sv( aTHX_ sv_newmortal(),
            THIS->Insert( pos, id, item, helpString, kind ) ) );
#else
    THIS->Insert( pos, id, item, helpString, kind );
#endif

void
wxMenu::InsertSubMenu( pos, id, text, submenu, help = wxEmptyString )
    int pos
    int id
    wxString text
    wxMenu* submenu
    wxString help
  PPCODE:
#if WXPERL_W_VERSION_GE( 2, 5, 1 )
    XPUSHs( wxPli_object_2_sv( aTHX_ sv_newmortal(),
            THIS->Insert( pos, id, text, submenu, help ) ) );
#else
    THIS->Insert( pos, id, text, submenu, help );
#endif

void
wxMenu::InsertCheckItem( pos, id, item, helpString )
     size_t pos
     int id
     wxString item
     wxString helpString
  PPCODE:
#if WXPERL_W_VERSION_GE( 2, 5, 1 )
    XPUSHs( wxPli_object_2_sv( aTHX_ sv_newmortal(),
            THIS->InsertCheckItem( pos, id, item, helpString ) ) );
#else
    THIS->InsertCheckItem( pos, id, item, helpString );
#endif

void
wxMenu::InsertRadioItem( pos, id, item, helpString )
     size_t pos
     int id
     wxString item
     wxString helpString
  PPCODE:
#if WXPERL_W_VERSION_GE( 2, 5, 1 )
    XPUSHs( wxPli_object_2_sv( aTHX_ sv_newmortal(),
            THIS->InsertRadioItem( pos, id, item, helpString ) ) );
#else
    THIS->InsertRadioItem( pos, id, item, helpString );
#endif

void
wxMenu::InsertSeparator( pos )
    size_t pos
  PPCODE:
#if WXPERL_W_VERSION_GE( 2, 5, 1 )
    XPUSHs( wxPli_object_2_sv( aTHX_ sv_newmortal(),
            THIS->InsertSeparator( pos ) ) );
#else
    THIS->InsertSeparator( pos );
#endif

bool
wxMenu::IsChecked( id )
    int id

bool
wxMenu::IsEnabled( id )
    int id

void
wxMenu::PrependString( id, item = wxEmptyString, help = wxEmptyString, kind = wxITEM_NORMAL )
    int id
    wxString item
    wxString help
    wxItemKind kind
  PPCODE:
#if WXPERL_W_VERSION_GE( 2, 5, 1 )
    XPUSHs( wxPli_object_2_sv( aTHX_ sv_newmortal(),
            THIS->Prepend( id, item, help, kind ) ) );
#else
    THIS->Prepend( id, item, help, kind );
#endif

void
wxMenu::PrependItem( menuItem )
    wxMenuItem* menuItem
  CODE:
#if WXPERL_W_VERSION_GE( 2, 5, 1 )
    XPUSHs( wxPli_object_2_sv( aTHX_ sv_newmortal(),
            THIS->Prepend( menuItem ) ) );
#else
    THIS->Prepend( menuItem );
#endif

void
wxMenu::PrependSubMenu( id, item, subMenu, helpString = wxEmptyString )
    int id
    wxString item
    wxMenu* subMenu
    wxString helpString
  CODE:
#if WXPERL_W_VERSION_GE( 2, 5, 1 )
    XPUSHs( wxPli_object_2_sv( aTHX_ sv_newmortal(),
            THIS->Prepend( id, item, subMenu, helpString ) ) );
#else
    THIS->Prepend( id, item, subMenu, helpString );
#endif

void
wxMenu::PrependCheckItem( id, item, helpString = wxEmptyString )
    int id
    wxString item
    wxString helpString
  PPCODE:
#if WXPERL_W_VERSION_GE( 2, 5, 1 )
    XPUSHs( wxPli_object_2_sv( aTHX_ sv_newmortal(),
            THIS->PrependCheckItem( id, item, helpString ) ) );
#else
   THIS->PrependCheckItem( id, item, helpString );
#endif

void
wxMenu::PrependRadioItem( id, item, helpString = wxEmptyString )
    int id
    wxString item
    wxString helpString
  PPCODE:
#if WXPERL_W_VERSION_GE( 2, 5, 1 )
    XPUSHs( wxPli_object_2_sv( aTHX_ sv_newmortal(),
            THIS->PrependRadioItem( id, item, helpString ) ) );
#else
    THIS->PrependRadioItem( id, item, helpString );
#endif

void
wxMenu::PrependSeparator()
  PPCODE:
#if WXPERL_W_VERSION_GE( 2, 5, 1 )
    XPUSHs( wxPli_object_2_sv( aTHX_ sv_newmortal(),
            THIS->PrependSeparator() ) );
#else
    THIS->PrependSeparator();
#endif

wxMenuItem*
wxMenu::RemoveId( id )
    int id
  CODE:
    RETVAL = THIS->Remove( id );
  OUTPUT:
    RETVAL

wxMenuItem*
wxMenu::RemoveItem( item )
    wxMenuItem* item
  CODE:
    RETVAL = THIS->Remove( item );
  OUTPUT:
    RETVAL

void
wxMenu::SetHelpString( id, helpString )
    int id
    wxString helpString

void
wxMenu::SetLabel( id, label )
    int id
    wxString label

void
wxMenu::SetTitle( title )
    wxString title

void
wxMenu::UpdateUI( source = 0 )
    wxEvtHandler* source

#if defined(__WXGTK__) && WXPERL_W_VERSION_GE( 2, 7, 1 )

wxLayoutDirection
wxMenu::GetLayoutDirection()

void
wxMenu::SetLayoutDirection( direction )
    wxLayoutDirection direction

#endif

MODULE=Wx PACKAGE=Wx::MenuBar

wxMenuBar*
wxMenuBar::new( style = 0 )
    long style

bool
wxMenuBar::Append( menu, title )
    wxMenu* menu
    wxString title

void
wxMenuBar::Check( id, check )
    int id
    bool check

void
wxMenuBar::Enable( id, enable )
    int id
    bool enable

void
wxMenuBar::EnableTop( pos, enable )
    int pos
    bool enable

void
wxMenuBar::FindItem( id )
    int id
  PPCODE:
    wxMenu* submenu;
    wxMenuItem* ret;

    ret = THIS->FindItem( id, &submenu );

    SV* mi = sv_newmortal();

    if( GIMME_V == G_ARRAY ) {
      EXTEND( SP, 2 );
      SV* sm = sv_newmortal();

      PUSHs( wxPli_object_2_sv( aTHX_ mi, ret ) );
      PUSHs( wxPli_object_2_sv( aTHX_ sm, submenu ) );
    }
    else {
      EXTEND( SP, 1 );
      PUSHs( wxPli_object_2_sv( aTHX_ mi, ret ) );
    }

int
wxMenuBar::FindMenu( title )
    wxString title

int
wxMenuBar::FindMenuItem( menuString, itemString )
    wxString menuString
    wxString itemString

wxString
wxMenuBar::GetHelpString( id )
    int id

wxString
wxMenuBar::GetLabel( id )
    int id

#if !WXPERL_W_VERSION_GE( 2, 9, 0 ) || WXWIN_COMPATIBILITY_2_8

wxString
wxMenuBar::GetLabelTop( id )
    int id

#endif

#if WXPERL_W_VERSION_GE( 2, 8, 5 )

wxString
wxMenuBar::GetMenuLabel( id )
    int id

wxString
wxMenuBar::GetMenuLabelText( id )
    int id

#endif

wxMenu*
wxMenuBar::GetMenu( index )
    int index

int
wxMenuBar::GetMenuCount()

bool
wxMenuBar::Insert( pos, menu, title )
    int pos
    wxMenu* menu
    wxString title

bool
wxMenuBar::IsChecked( id )
    int id

bool
wxMenuBar::IsEnabled( id )
    int id

void
wxMenuBar::Refresh()

wxMenu*
wxMenuBar::Remove( pos )
    int pos

wxMenu*
wxMenuBar::Replace( pos, menu, title )
    int pos
    wxMenu* menu
    wxString title

void
wxMenuBar::SetHelpString( id, helpString )
    int id
    wxString helpString

void
wxMenuBar::SetLabel( id, label )
    int id
    wxString label

#if !WXPERL_W_VERSION_GE( 2, 9, 0 ) || WXWIN_COMPATIBILITY_2_8

void
wxMenuBar::SetLabelTop( pos, label )
    int pos
    wxString label

#endif

#if WXPERL_W_VERSION_GE( 2, 8, 5 )

void
wxMenuBar::SetMenuLabel( pos, label )
    int pos
    wxString label

#endif

bool
wxMenuBar::IsEnabledTop( id )
    int id
    
#if defined(__WXGTK__) && WXPERL_W_VERSION_GE( 2, 7, 1 )

wxLayoutDirection
wxMenuBar::GetLayoutDirection()

void
wxMenuBar::SetLayoutDirection( direction )
    wxLayoutDirection direction

#endif


#if defined( __WXMAC__ )

void 
wxMenuBar::MacInstallMenuBar()

wxMenuBar* 
MacGetInstalledMenuBar()
  CODE:
    RETVAL = wxMenuBar::MacGetInstalledMenuBar();
  OUTPUT: RETVAL

void
MacSetCommonMenuBar( menubar )
    wxMenuBar* menubar
  CODE:
    wxMenuBar::MacSetCommonMenuBar( menubar );

wxMenuBar* 
MacGetCommonMenuBar()
  CODE:
    RETVAL = wxMenuBar::MacGetCommonMenuBar();
  OUTPUT: RETVAL
	  

#endif


MODULE=Wx PACKAGE=Wx::MenuItem

wxMenuItem*
wxMenuItem::new( parentMenu = 0, id = wxID_ANY, text = wxEmptyString, helpString = wxEmptyString, itemType = wxITEM_NORMAL, subMenu = 0 )
     wxMenu* parentMenu
     int id
     wxString text
     wxString helpString
     wxItemKind itemType
     wxMenu* subMenu

void
wxMenuItem::Check( check )
    bool check

# void
# wxMenuItem::DeleteSubMenu()

void
wxMenuItem::Enable( enable )
    bool enable

#if defined( __WXMSW__ ) && !defined( __WXWINCE__ )

wxColour*
wxMenuItem::GetBackgroundColour()
  CODE:
    RETVAL = new wxColour( THIS->GetBackgroundColour() );
  OUTPUT:
   RETVAL

wxFont*
wxMenuItem::GetFont()
  CODE:
    RETVAL = new wxFont( THIS->GetFont() );
  OUTPUT:
    RETVAL

#endif

#if ( defined( __WXMSW__ ) && !defined( __WXWINCE__ ) ) || \
    defined( __WXGTK__ )

wxBitmap*
wxMenuItem::GetBitmap()
  CODE:
    RETVAL = new wxBitmap( THIS->GetBitmap() );
  OUTPUT:
    RETVAL

#endif

wxString
wxMenuItem::GetHelp()

#if WXPERL_W_VERSION_LT( 2, 9, 0 ) && !defined(__WXMSW__)

wxString
wxMenuItem::GetName()

#endif

int
wxMenuItem::GetId()

wxItemKind
wxMenuItem::GetKind()

#if !WXPERL_W_VERSION_GE( 2, 9, 0 ) || WXWIN_COMPATIBILITY_2_8

wxString
wxMenuItem::GetLabel()

wxString
GetLabelFromText( text )
    wxString text
  CODE:
    RETVAL = wxMenuItem::GetLabelFromText( text );
  OUTPUT:
    RETVAL

#endif

#if WXPERL_W_VERSION_GE( 2, 9, 0 )

wxString
wxMenuItem::GetItemLabel()

wxString
wxMenuItem::GetItemLabelText()

wxString
GetLabelText( text )
    wxString text
  CODE:
    RETVAL = wxMenuItem::GetLabelText( text );
  OUTPUT:
    RETVAL

#endif

wxMenu*
wxMenuItem::GetMenu()

#if defined( __WXMSW__ ) && !defined( __WXWINCE__ )

int
wxMenuItem::GetMarginWidth()

#endif

#if !WXPERL_W_VERSION_GE( 2, 9, 0 ) || WXWIN_COMPATIBILITY_2_8

wxString
wxMenuItem::GetText()

#endif

wxMenu*
wxMenuItem::GetSubMenu()

#if defined( __WXMSW__ ) && !defined( __WXWINCE__ )

wxColour*
wxMenuItem::GetTextColour()
  CODE:
    RETVAL = new wxColour( THIS->GetTextColour() );
  OUTPUT:
    RETVAL

#endif 

bool
wxMenuItem::IsCheckable()

bool
wxMenuItem::IsChecked()

bool
wxMenuItem::IsEnabled()

bool
wxMenuItem::IsSeparator()

bool 
wxMenuItem::IsSubMenu()

#if defined( __WXMSW__ ) && !defined( __WXWINCE__ )

void
wxMenuItem::SetBackgroundColour( colour )
    wxColour* colour
  CODE:
    THIS->SetBackgroundColour( *colour );

void
wxMenuItem::SetFont( font )
    wxFont* font
  CODE:
    THIS->SetFont( *font );

#endif

void
wxMenuItem::SetHelp( helpString )
    wxString helpString

void 
wxMenuItem::SetMenu( menu )
    wxMenu* menu

void 
wxMenuItem::SetSubMenu( menu )
    wxMenu* menu

#if !WXPERL_W_VERSION_GE( 2, 9, 0 ) || WXWIN_COMPATIBILITY_2_8

void
wxMenuItem::SetText( text )
    wxString text

#endif

#if WXPERL_W_VERSION_GE( 2, 9, 0 )

void
wxMenuItem::SetItemLabel( label )
    wxString label

#endif

#if defined( __WXMSW__ ) && !defined( __WXWINCE__ )

void
wxMenuItem::SetMarginWidth( width )
    int width

# void
# wxMenuItem::SetName( text )
#     wxString text

void
wxMenuItem::SetTextColour( colour )
    wxColour* colour
  CODE:
    THIS->SetTextColour( *colour );

void
wxMenuItem::SetBitmaps( checked, unchecked = (wxBitmap*)&wxNullBitmap )
    wxBitmap* checked
    wxBitmap* unchecked
  CODE:
    THIS->SetBitmaps( *checked, *unchecked );

#endif

#if !defined( __WXWINCE__ )

void
wxMenuItem::SetBitmap( bitmap )
    wxBitmap* bitmap
  CODE:
    THIS->SetBitmap( *bitmap );

#endif
