#############################################################################
## Name:        typemap
## Purpose:     typemap
## Author:      Mattia Barbon
## Modified by:
## Created:     29/10/2000
## RCS-ID:      
## Copyright:   (c) 2000-2003 Mattia Barbon
## Licence:     This program is free software; you can redistribute it and/or
##              modify it under the same terms as Perl itself
#############################################################################

TYPEMAP
wxEdge                  T_IV
wxRelationship          T_IV
wxWindowID              T_WINDOWID
wxStockCursor           T_IV
wxEventType             T_IV
wxBitmapType            T_IV
const char *            T_PV
wxCoord                 T_IV
float                   T_NV
wxFontEncoding          T_IV
wxRegionContain         T_IV
wxSashEdgePosition      T_IV
wxSashDragStatus        T_IV
wxListColumnFormat      T_IV
off_t                   T_IV
WXCOLORREF              T_IV
EntryType               T_IV
wxKillError             T_IV
wxSignal                T_IV
wxItemKind              T_IV

wxFindReplaceDialogStyles T_IV
wxFindReplaceFlags      T_IV

wxLogTraceMask          T_UV 
wxLogLevel              T_UV 
wxTraceMask             T_UV
wxTreeItemIdValue       T_UV
wxTreeItemIcon          T_UV

Wx_KeyCode              T_KEYCODE
wxKeyCode               T_KEYCODE

Wx_UserDataCD *         O_USERDATACD
wxPliUserDataCD *       O_USERDATACD

Wx_UserDataO *          O_USERDATAO
wxPliUserDataO *        O_USERDATAO

SV_null *               T_SV_NULL

Wx_ClassInfo *          O_NON_WXOBJECT
wxClassInfo *           O_NON_WXOBJECT

Wx_Object *             O_WXOBJECT
wxObject *              O_WXOBJECT

Wx_App *                O_WXOBJECT
wxApp *                 O_WXOBJECT
Wx_Window *             O_WXOBJECT
wxWindow *              O_WXOBJECT
Wx_Frame *              O_WXOBJECT
wxFrame *               O_WXOBJECT
Wx_EvtHandler *         O_WXOBJECT
wxEvtHandler *          O_WXOBJECT
Wx_MiniFrame *          O_WXOBJECT
wxMiniFrame *           O_WXOBJECT

Wx_MenuBar *            O_WXOBJECT
wxMenuBar *             O_WXOBJECT
Wx_Menu *               O_WXOBJECT
wxMenu *                O_WXOBJECT
Wx_MenuItem *           O_WXOBJECT
wxMenuItem *            O_WXOBJECT

Wx_StatusBar *          O_WXOBJECT
wxStatusBar *           O_WXOBJECT
Wx_ToolBar *            O_WXOBJECT
wxToolBar *             O_WXOBJECT
Wx_ToolBarBase *        O_WXOBJECT
wxToolBarBase *         O_WXOBJECT
Wx_Panel *              O_WXOBJECT
wxPanel *               O_WXOBJECT
Wx_Dialog *             O_WXOBJECT
wxDialog *              O_WXOBJECT
Wx_Control *            O_WXOBJECT
wxControl *             O_WXOBJECT
Wx_Button *             O_WXOBJECT
wxButton *              O_WXOBJECT
Wx_StaticText *         O_WXOBJECT
wxStaticText *          O_WXOBJECT
Wx_StaticLine *         O_WXOBJECT
wxStaticLine *          O_WXOBJECT
Wx_TextCtrl *           O_WXOBJECT
wxTextCtrl *            O_WXOBJECT
Wx_PlValidator *        O_WXOBJECT
wxPlValidator *         O_WXOBJECT
Wx_Validator *          O_WXOBJECT
wxValidataor *          O_WXOBJECT
Wx_CheckBox *           O_WXOBJECT
wxChackBox *            O_WXOBJECT
Wx_Choice *             O_WXOBJECT
wxChoice *              O_WXOBJECT
Wx_ComboBox *           O_WXOBJECT
wxComboBox *            O_WXOBJECT
Wx_ControlWithItems *   O_WXOBJECT
wxControlWithItems *    O_WXOBJECT
Wx_ListBox *            O_WXOBJECT
wxListBox *             O_WXOBJECT
Wx_StaticBox *          O_WXOBJECT
wxStaticBox *           O_WXOBJECT
Wx_RadioButton *        O_WXOBJECT
wxRadioButton *         O_WXOBJECT
Wx_RadioBox *           O_WXOBJECT
wxRadioBox *            O_WXOBJECT
Wx_ScrollBar *          O_WXOBJECT
wxScrollBar *           O_WXOBJECT
Wx_Notebook *           O_WXOBJECT
wxNotebook *            O_WXOBJECT
Wx_CheckListBox *       O_WXOBJECT
wxCheckListBox *        O_WXOBJECT
Wx_Gauge *              O_WXOBJECT
wxGauge *               O_WXOBJECT
Wx_BitmapButton *       O_WXOBJECT
wxBitmapButton *        O_WXOBJECT
Wx_TreeCtrl *           O_WXOBJECT
wxTreeCtrl *            O_WXOBJECT
Wx_ListCtrl *           O_WXOBJECT
wxListCtrl *            O_WXOBJECT
Wx_ListView *           O_WXOBJECT
wxListView *            O_WXOBJECT
Wx_StaticBitmap *       O_WXOBJECT
wxStaticBitmap *        O_WXOBJECT
Wx_SpinButton *         O_WXOBJECT
wxSpinButton *          O_WXOBJECT
Wx_SpinCtrl *           O_WXOBJECT
wxSpinCtrl *            O_WXOBJECT
Wx_Slider *             O_WXOBJECT
wxSlider *              O_WXOBJECT
Wx_ScrolledWindow *     O_WXOBJECT
wxScrolledWindow *      O_WXOBJECT
Wx_SplitterWindow *     O_WXOBJECT
wxSplitterWindow *      O_WXOBJECT
Wx_SashWindow *         O_WXOBJECT
wxSashWindow *          O_WXOBJECT
Wx_ToggleButton *       O_WXOBJECT
wxToggleButton *        O_WXOBJECT
Wx_SplashScreen *       O_WXOBJECT
wxSplashScreen *        O_WXOBJECT

wxWizard *              O_WXOBJECT
wxWizardPage *          O_WXOBJECT
wxWizardPageSimple *    O_WXOBJECT

Wx_ColourDialog *       O_WXOBJECT
wxColourDialog *        O_WXOBJECT
Wx_FileDialog *         O_WXOBJECT
wxFileDialog *          O_WXOBJECT
Wx_DirDialog *          O_NON_WXOBJECT
wxDirDialog *           O_NON_WXOBJECT
Wx_MultiChoiceDialog *  O_WXOBJECT
wxMultiChoiceDialog *   O_WXOBJECT
Wx_SingleChoiceDialog * O_WXOBJECT
wxSingleChoiceDialog *  O_WXOBJECT
Wx_MultipleChoiceDialog* O_WXOBJECT
wxMultipleChoiceDialog* O_WXOBJECT
Wx_TextEntryDialog *    O_WXOBJECT
wxTextEntryDialog *     O_WXOBJECT
Wx_FontDialog *         O_WXOBJECT
wxFontDialog *          O_WXOBJECT
Wx_PageSetupDialog *    O_WXOBJECT
wxPageSetupDialog *     O_WXOBJECT
Wx_PrintDialog *        O_WXOBJECT
wxPrintDialog *         O_WXOBJECT
Wx_MessageDialog *      O_WXOBJECT
wxMessageDialog *       O_WXOBJECT
Wx_ProgressDialog *     O_WXOBJECT
wxProgressDialog *      O_WXOBJECT
Wx_FindReplaceDialog *  O_WXOBJECT
wxFindReplaceDialog *   O_WXOBJECT

Wx_FindReplaceData *    O_NON_WXOBJECT
wxFindReplaceData *     O_NON_WXOBJECT
Wx_ColourData *         O_WXOBJECT
wxColourData *          O_WXOBJECT
Wx_FontData *           O_WXOBJECT
wxFontData *            O_WXOBJECT

Wx_Sizer *              O_WXOBJECT
wxSizer *               O_WXOBJECT
Wx_PlSizer *            O_WXOBJECT
wxPlSizer *             O_WXOBJECT
Wx_BoxSizer *           O_WXOBJECT
wxBoxSizer *            O_WXOBJECT
Wx_StaticBoxSizer *     O_WXOBJECT
wxStaticBoxSizer *      O_WXOBJECT
Wx_NotebookSizer *      O_WXOBJECT
wxNotebookSizer *       O_WXOBJECT
Wx_GridSizer *          O_WXOBJECT
wxGridSizer *           O_WXOBJECT
Wx_FlexGridSizer *      O_WXOBJECT
wxFlexGridSizer *       O_WXOBJECT
Wx_SizerItem*           O_WXOBJECT
wxSizerItem *           O_WXOBJECT

Wx_DC *                 O_WXOBJECT
wxDC *                  O_WXOBJECT
Wx_MemoryDC *           O_WXOBJECT
wxMemoryDC *            O_WXOBJECT
Wx_WindowDC *           O_WXOBJECT
wxWindowDC *            O_WXOBJECT
Wx_ClientDC *           O_WXOBJECT
wxClientDC *            O_WXOBJECT
Wx_PaintDC *            O_WXOBJECT
wxPaintDC *             O_WXOBJECT
Wx_ScreenDC *           O_WXOBJECT
wxScreenDC *            O_WXOBJECT

Wx_TaskBarIcon *        O_WXOBJECT
wxTaskBarIcon *         O_WXOBJECT

Wx_TextAttr *           O_NON_WXOBJECT
wxTextAttr *            O_NON_WXOBJECT

Wx_Log *                O_NON_WXOBJECT
wxLog *                 O_NON_WXOBJECT
Wx_LogTextCtrl *        O_NON_WXOBJECT
wxLogTextCtrl *         O_NON_WXOBJECT
Wx_LogNull *            O_NON_WXOBJECT
wxLogNull *             O_NON_WXOBJECT
Wx_LogGui *             O_NON_WXOBJECT
wxLogGui *              O_NON_WXOBJECT
Wx_LogWindow *          O_NON_WXOBJECT
wxLogWindow *           O_NON_WXOBJECT
wxLogChain *            O_NON_WXOBJECT
wxLogPassThrough *      O_NON_WXOBJECT
wxPlLog *               O_NON_WXOBJECT
wxPlLogPassThrough *    O_NON_WXOBJECT

Wx_Locale *             O_NON_WXOBJECT
wxLocale *              O_NON_WXOBJECT
Wx_LanguageInfo *       O_NON_WXOBJECT
wxLanguageInfo *        O_NON_WXOBJECT

Wx_StopWatch *          O_NON_WXOBJECT
wxStopWatch *           O_NON_WXOBJECT

Wx_Point                O_POINT
wxPoint                 O_POINT
Wx_Size                 O_SIZE
wxSize                  O_SIZE
Wx_Colour               O_COLOUR
wxColour                O_COLOUR
Wx_Point &              O_POINT
wxPoint &               O_POINT
Wx_Size &               O_SIZE
wxSize &                O_SIZE
Wx_Colour &             O_COLOUR
wxColour &              O_COLOUR

Wx_Process *            O_WXOBJECT
wxProcess *             O_WXOBJECT

Wx_TipProvider *        O_NON_WXOBJECT
wxTipProvider *         O_NON_WXOBJECT

Wx_DrawObject *         O_NON_WXOBJECT
wxDrawObject *          O_NON_WXOBJECT
Wx_Size *               O_NON_WXOBJECT
wxSize *                O_NON_WXOBJECT
Wx_Point *              O_NON_WXOBJECT
wxPoint *               O_NON_WXOBJECT
Wx_Rect *               O_NON_WXOBJECT
wxRect *                O_NON_WXOBJECT
Wx_Colour *             O_NON_WXOBJECT
wxColour *              O_NON_WXOBJECT
Wx_Caret *              O_NON_WXOBJECT
wxCaret *               O_NON_WXOBJECT
Wx_CaretSuspend *       O_NON_WXOBJECT
wxCaretSuspend *        O_NON_WXOBJECT
Wx_WindowDisabler *     O_NON_WXOBJECT
wxWindowDisabler *      O_NON_WXOBJECT
Wx_BusyCursor *         O_NON_WXOBJECT
wxBusyCursor *          O_NON_WXOBJECT
Wx_BusyInfo *           O_NON_WXOBJECT
wxBusyInfo *            O_NON_WXOBJECT

Wx_LayoutConstraints *  O_WXOBJECT
wxLayoutConstraints *   O_WXOBJECT
Wx_IndividualLayoutConstraint * O_WXOBJECT
wxIndividualLayoutConstraint * O_WXOBJECT

Wx_DropTarget *         O_NON_WXOBJECT
wxDropTarget *          O_NON_WXOBJECT
Wx_ListItem *           O_NON_WXOBJECT
wxListItem *            O_NON_WXOBJECT
Wx_ListItemAttr *       O_NON_WXOBJECT
wxListItemAttr *        O_NON_WXOBJECT
Wx_TreeItemData *       O_NON_WXOBJECT
wxPliTreeItemData *     O_NON_WXOBJECT
Wx_TreeItemId *         O_NON_WXOBJECT
wxTreeItemId *          O_NON_WXOBJECT

wxFontMapper *          O_NON_WXOBJECT
wxFontEnumerator *      O_NON_WXOBJECT
Wx_NativeFontInfo *     O_NON_WXOBJECT
wxNativeFontInfo *      O_NON_WXOBJECT
Wx_Font *               O_WXOBJECT
wxFont *                O_WXOBJECT
Wx_Region *             O_WXOBJECT
wxRagion *              O_WXOBJECT
Wx_Icon *               O_WXOBJECT
wxIcon *                O_WXOBJECT
wxIconBundle *          O_NON_WXOBJECT
Wx_Bitmap *             O_WXOBJECT
wxBitmap *              O_WXOBJECT
Wx_Cursor *             O_WXOBJECT
wxCursor *              O_WXOBJECT
Wx_ToolTip *            O_NON_WXOBJECT
wxToolTip *             O_NON_WXOBJECT
Wx_Pen *                O_WXOBJECT
wxPen *                 O_WXOBJECT
Wx_Mask *               O_WXOBJECT
wxMask *                O_WXOBJECT
Wx_Brush *              O_WXOBJECT
wxBrush *               O_WXOBJECT
Wx_BitmapHandler *      O_WXOBJECT
wxBitmapHand;er *       O_WXOBJECT
Wx_Palette *            O_WXOBJECT
wxPalette *             O_WXOBJECT

Wx_Image *              O_WXOBJECT
wxImage *               O_WXOBJECT
Wx_ImageHandler *       O_WXOBJECT
wxImageHandler *        O_WXOBJECT
Wx_BMPHandler *         O_WXOBJECT
wxBMPHandler *          O_WXOBJECT
Wx_GIFHandler *         O_WXOBJECT
Wx_PCXHandler *         O_WXOBJECT
Wx_PNMHandler *         O_WXOBJECT
Wx_TIFFHandler *        O_WXOBJECT
Wx_JPEGHandler *        O_WXOBJECT
Wx_PNGHandler *         O_WXOBJECT
Wx_XPMHandler *         O_WXOBJECT
Wx_IFFHandler *         O_WXOBJECT
Wx_ICOHandler *         O_WXOBJECT
Wx_CURHandler *         O_WXOBJECT
Wx_ANIHandler *         O_WXOBJECT

Wx_ImageList *          O_WXOBJECT
wxImageList *           O_WXOBJECT

Wx_ToolBarToolBase *    O_NON_WXOBJECT
wxToolBarToolBase *     O_NON_WXOBJECT

Wx_AcceleratorEntry *   O_NON_WXOBJECT
wxAcceleratorEntry *    O_NON_WXOBJECT
Wx_AcceleratorTable *   O_WXOBJECT
wxAcceleratorTable *    O_WXOBJECT

Wx_Timer *              O_WXOBJECT
wxTimer *               O_WXOBJECT

Wx_SingleInstanceChecker * O_NON_WXOBJECT
wxSingleInstanceChecker * O_NON_WXOBJECT

wxWave *                O_NON_WXOBJECT

# events
Wx_Event *              O_WXOBJECT
Wx_ActivateEvent *      O_WXOBJECT
Wx_CloseEvent *         O_WXOBJECT
Wx_CommandEvent *       O_WXOBJECT
Wx_EraseEvent *         O_WXOBJECT
Wx_FindDialogEvent *    O_WXOBJECT
Wx_FocusEvent *         O_WXOBJECT
Wx_KeyEvent *           O_WXOBJECT
Wx_HelpEvent *          O_WXOBJECT
Wx_IconizeEvent *       O_WXOBJECT
Wx_IdleEvent *          O_WXOBJECT
Wx_InitDialogEvent *    O_WXOBJECT
Wx_JoystickEvent *      O_WXOBJECT
Wx_ListEvent *          O_WXOBJECT
Wx_MenuEvent *          O_WXOBJECT
Wx_MouseEvent *         O_WXOBJECT
Wx_MoveEvent *          O_WXOBJECT
Wx_NotebookEvent *      O_WXOBJECT
Wx_NotifyEvent *        O_WXOBJECT
Wx_PaintEvent *         O_WXOBJECT
Wx_QueryLayoutInfo *    O_WXOBJECT
Wx_SashEvent *          O_WXOBJECT
Wx_SizeEvent *          O_WXOBJECT
wxScrollEvent *         O_WXOBJECT
Wx_ScrollWinEvent *     O_WXOBJECT
Wx_SpinEvent *          O_WXOBJECT
Wx_SplitterEvent *      O_WXOBJECT
Wx_SysColourChangedEvent * O_WXOBJECT
Wx_TimerEvent *         O_WXOBJECT
Wx_TreeEvent *          O_WXOBJECT
Wx_UpdateUIEvent *      O_WXOBJECT
Wx_TextUrlEvent *       O_WXOBJECT
Wx_ProcessEvent *       O_WXOBJECT
wxWizardEvent *         O_WXOBJECT

Wx_PlEvent*             O_WXOBJECT
Wx_PlCommandEvent*      O_WXOBJECT
Wx_PlThreadEvent*       O_WXOBJECT

Wx_ConfigBase *         O_NON_WXOBJECT
wxConfigBase *          O_NON_WXOBJECT
Wx_Config *             O_NON_WXOBJECT
wxConfig *              O_NON_WXOBJECT

OUTPUT
O_WXOBJECT
    wxPli_object_2_sv( aTHX_ $arg, $var );

O_NON_WXOBJECT
    wxPli_non_object_2_sv( aTHX_ $arg, $var, ${(my $ntt=$ntype)=~s/^(?:Wx_|wx)(.*)Ptr$/$1/g;$ntt=q{"Wx::}.$ntt.q{"};\$ntt} );

T_KEYCODE
    sv_setiv( $arg, $var );

T_UV
    sv_setuv( $arg, (UV)$var );

INPUT
O_WXOBJECT
    $var = ($type) wxPli_sv_2_object( aTHX_ $arg, ${(my $ntt=$ntype)=~s/^(?:Wx_|wx)(.*)Ptr$/$1/g;$ntt=q{\"Wx::}.$ntt.q{\"};\$ntt} );

O_NON_WXOBJECT
    $var = ($type) wxPli_sv_2_object( aTHX_ $arg, ${(my $ntt=$ntype)=~s/^(?:Wx_|wx)(.*)Ptr$/$1/g;$ntt=q{\"Wx::}.$ntt.q{\"};\$ntt} );

O_POINT
    $var = wxPli_sv_2_wxpoint( aTHX_ $arg );

O_SIZE
    $var = wxPli_sv_2_wxsize( aTHX_ $arg );

O_COLOUR
    $var = *($type *) wxPli_sv_2_object( aTHX_ $arg, ${(my $ntt=$ntype)=~s/^(?:Wx_|wx)(.*)(?:Ptr)?$/$1/g;$ntt=q{\"Wx::}.$ntt.q{\"};\$ntt} );

T_KEYCODE
    $var = wxPli_sv_2_keycode( aTHX_ $arg );

T_UV
    $var = ($type)SvUV( $arg );

#
# Wx_UserData*
#

INPUT
O_USERDATACD
    if( SvOK( $arg ) )
    {
        $var = new wxPliUserDataCD( $arg );
    }
    else
        $var = 0;

O_USERDATAO
    if( SvOK( $arg ) )
    {
        $var = new wxPliUserDataO( $arg );
    }
    else
        $var = 0;

OUTPUT
O_USERDATACD
    $arg = ( $var == 0 ) ? &PL_sv_undef : $var->m_data;
    SvREFCNT_inc( $arg ); // xsubpp mortalizes it...

O_USERDATAO
    $arg = ( $var == 0 ) ? &PL_sv_undef : $var->m_data;
    SvREFCNT_inc( $arg ); // xsubpp mortalizes it...

#
# SV_null
#

INPUT
T_SV_NULL
    $var = SvOK( $arg ) ? $arg : 0;

OUTPUT
T_SV_NULL
    $arg = ( $var == 0 ) ? &PL_sv_undef : $var;
    SvREFCNT_inc( $arg ); // xsubpp mortalizes it...

#
# streams
#
TYPEMAP
wxPliInputStream        S_PL_ISTREAM
wxPliOutputStream       S_PL_OSTREAM
wxInputStream *         S_WX_ISTREAM
wxOutputStream *        S_WX_OSTREAM
Wx_InputStream *        O_NON_WXOBJECT
Wx_OutputStream *       O_NON_WXOBJECT

INPUT
S_PL_ISTREAM
    wxPli_sv_2_istream( aTHX_ $arg, $var );

S_PL_OSTREAM
    wxPli_sv_2_ostream( aTHX_ $arg, $var );


OUTPUT
S_WX_ISTREAM
    wxPli_stream_2_sv( aTHX_ $arg, $var, "Wx::InputStream" );

S_WX_OSTREAM
    wxPli_stream_2_sv( aTHX_ $arg, $var, "Wx::OutputStream" );

# Unicode support
TYPEMAP
wxChar *                T_WXCHAR
const wxChar*           T_WXCHAR
wxString                T_WXSTRING

INPUT
T_WXCHAR
    WXCHAR_INPUT( $var, $type, $arg );

T_WXSTRING
    WXSTRING_INPUT( $var, $type, $arg );

OUTPUT
T_WXCHAR
    WXCHAR_OUTPUT( $var, $arg );

T_WXSTRING
    WXSTRING_OUTPUT( $var, $arg );

# typemap for window ID
INPUT
T_WINDOWID
    $var = wxPli_get_wxwindowid( aTHX_ $arg );

OUTPUT
T_WINDOWID
    sv_setiv($arg, (IV)$var);
