The Perl Toolchain Summit needs more sponsors. If your company depends on Perl, please support this very important event.
#############################################################################
## Name:        ext/ribbon/XS/RibbonGallery.xsp
## Purpose:     XS++ for Wx::RibbonGallery
## Author:      Mark Dootson
## Modified by:
## Created:     04/03/2012
## RCS-ID:      $Id: $
## Copyright:   (c) 2012 Mattia Barbon
## Licence:     This program is free software; you can redistribute it and/or
##              modify it under the same terms as Perl itself
#############################################################################

%module{Wx};

#if WXPERL_W_VERSION_GE( 2, 9, 3 ) && wxUSE_RIBBON

#include <wx/ribbon/gallery.h>
#include <cpp/ribbongalleryitem.h>

%loadplugin{build::Wx::XSP::Overload};
%loadplugin{build::Wx::XSP::Event};

%Event{%EVT_RIBBONGALLERY_HOVER_CHANGED(id, func)%}
      {wxEVT_COMMAND_RIBBONGALLERY_HOVER_CHANGED};
%Event{%EVT_RIBBONGALLERY_SELECTED(id, func)%}
      {wxEVT_COMMAND_RIBBONGALLERY_SELECTED};
%Event{%EVT_RIBBONGALLERY_CLICKED(id, func)%}
      {wxEVT_COMMAND_RIBBONGALLERY_CLICKED};

%name{Wx::RibbonGallery} class wxRibbonGallery : public %name{Wx::RibbonControl} wxRibbonControl
{
public:
   
    %name{newDefault} wxRibbonGallery() %Overload
        %postcall{% wxPli_create_evthandler( aTHX_ RETVAL, CLASS ); %};

    %name{newFull} wxRibbonGallery(wxWindow* parent,
                  wxWindowID id = wxID_ANY,
                  const wxPoint& pos = wxDefaultPosition,
                  const wxSize& size = wxDefaultSize,
                  long style = 0) %Overload
        %postcall{% wxPli_create_evthandler( aTHX_ RETVAL, CLASS ); %};

    bool Create(wxWindow* parent,
                wxWindowID id = wxID_ANY,
                const wxPoint& pos = wxDefaultPosition,
                const wxSize& size = wxDefaultSize,
                long style = 0);

    void Clear();

    bool IsEmpty() const;

    unsigned int GetCount() const;

    wxRibbonGalleryItem* GetItem(unsigned int n);

    %name{AppendBasic} wxRibbonGalleryItem* Append(const wxBitmap& bitmap, int id) %Overload
          %code{% int useid = ( id == wxID_ANY ) ? wxWindow::NewControlId() : id;
                  RETVAL = THIS->Append( *bitmap, useid ); %};

    %name{AppendClientData} wxRibbonGalleryItem* Append(const wxBitmap& bitmap, int id, Wx_UserDataCD *clientData) %Overload
          %code{% int useid = ( id == wxID_ANY ) ? wxWindow::NewControlId() : id;
                  RETVAL = THIS->Append( *bitmap, useid, clientData ); %};
    
    %name{SetItemClientData} void SetItemClientObject( wxRibbonGalleryItem* item, Wx_UserDataCD* data );
    
    Wx_UserDataCD* GetItemClientData( const wxRibbonGalleryItem* item ) const
      %code{% RETVAL = (Wx_UserDataCD*)THIS->GetItemClientObject( item ); %};   

    void SetSelection(wxRibbonGalleryItem* item);

    wxRibbonGalleryItem* GetSelection() const;

    wxRibbonGalleryItem* GetHoveredItem() const;
    
    wxRibbonGalleryItem* GetActiveItem() const;

    wxRibbonGalleryButtonState GetUpButtonState() const;

    wxRibbonGalleryButtonState GetDownButtonState() const;

    wxRibbonGalleryButtonState GetExtensionButtonState() const;

    bool IsHovered() const;

    virtual bool ScrollLines(int lines);
    
    bool ScrollPixels(int pixels);

    void EnsureVisible(const wxRibbonGalleryItem* item);

    virtual bool IsSizingContinuous() const;
    virtual bool Realize();
    virtual bool Layout();
};

%name{Wx::RibbonGalleryEvent} class wxRibbonGalleryEvent : public %name{Wx::CommandEvent} wxCommandEvent
{
public:
    
    wxRibbonGalleryEvent(wxEventType command_type = wxEVT_NULL,
                         int win_id = 0,
                         wxRibbonGallery* gallery = NULL,
                         wxRibbonGalleryItem* item = NULL);

    wxRibbonGallery* GetGallery();

    wxRibbonGalleryItem* GetGalleryItem();

    void SetGallery(wxRibbonGallery* gallery);
    
    void SetGalleryItem(wxRibbonGalleryItem* item);
    
    wxEvent *Clone();
};

%name{Wx::RibbonGalleryItem} class wxRibbonGalleryItem
{
    
%{
static void
wxRibbonGalleryItem::CLONE()
  CODE:
    wxPli_thread_sv_clone( aTHX_ CLASS, (wxPliCloneSV)wxPli_detach_object );
%}

public:
    
    ~wxRibbonGalleryItem()
        %code%{  wxPli_thread_sv_unregister( aTHX_ "Wx::RibbonGalleryItem", THIS, ST(0) );  %};

    void SetId(int id);
    void SetBitmap(const wxBitmap& bitmap);
    const wxBitmap& GetBitmap() const;
    void SetIsVisible(bool visible);
    void SetPosition(int x, int y, const wxSize& size);
    bool IsVisible() const;
    const wxRect& GetPosition() const;
   
    %name{SetClientData} void SetClientObject( Wx_UserDataCD* data );
    
    Wx_UserDataCD* GetClientData() const
      %code{% RETVAL = (Wx_UserDataCD*)THIS->GetClientObject(); %};
    
};

#endif