#pragma once



// ----------------------------------------------------------------
// forward definition using a typedef
// the actual structure 

// typedef struct MENUBAROBJECT  MENUBAROBJECT;
// ----------------------------------------------------------------
// do NOT alter the following
// It is overlaid on a SOBDATA structure so they MUST be the same

typedef struct MENUBAROBJECT
{
    GENERICSOB
} MENUBAROBJECT;

// ----------------------------------------------------------------
// forward definition using a typedef for
// OBJECT (in this case MENUBAR) specific functional prototypes
// that operate on an  OBJECT

typedef myUInt MENUBARFNC_SHAKE(MENUBAROBJECT*);

typedef TCHAR* MENUBARFNC_GETTEXT(MENUBAROBJECT*);
typedef myUInt MENUBARFNC_SETTEXT(MENUBAROBJECT*, TCHAR*);

typedef myUInt MENUBARFNC_SETVALUE(MENUBAROBJECT*, myUInt);
typedef myUInt MENUBARFNC_SETEVENTHANDLER(MENUBAROBJECT*, EVENTHANDLER);

typedef MENUBAROBJECT* MENUBARFNC_CREATE( );


//typedef MENUBAROBJECT* MENUBARFNC_GETOBJECT(TCHAR*);   // some CREATORs only need the new objects "title"
//typedef MENUBAROBJECT* MENUBARFNC_GETOBJECT(TCHAR* , int nbr; // some need a integer usually to help define the objects height

// ----------------------------------------------------------------

typedef struct MENUBARCVTBL_ {

    // ---------------------------------
    // must haves:
    MENUBARFNC_CREATE* Create;
    MENUBARFNC_SHAKE* Delete;

    MENUBARFNC_SETVALUE* SetShow;

    // ---------------------------------
    // helpfuls:

    MENUBARFNC_GETTEXT* GetType;

    MENUBARFNC_GETTEXT* GetTitle;
    MENUBARFNC_SETTEXT* SetTitle;

    MENUBARFNC_SETEVENTHANDLER* SetEventHandler;

    // ---------------------------------
    // object specifics:
    MENUBARFNC_SETVALUE* SetRGB;

    // MENUBARFNC_SETVALUE* SetState;
    // MENUBARFNC_SHAKE* ToggleState;
    // MENUBARFNC_SHAKE* GetState;

} MENUBARCVTBLDEAD;






// extern MENUBARCVTBL MENUBART;



typedef struct PVTBL_MENUBAR_ {
    CONTAINERINFORM * AddChild;
    GENERICCONTAINERVTPL
    CONTAINERCREATE* Create;
}  PVTBL_MENUBAR ;




// ----------------------------------------------------------------
// functional prototype for the  "external" methods of this OBJECT



  extern PVTBL_MENUBAR   MENUBAR;




