Milán Major

netscape-revival

1 branch
Code

sun-java/awt.bad/win/awt_menu.h

#ifndef AWT_MENU_H
#define AWT_MENU_H

#include "awt_defs.h"
#include "awt_object.h"
#include "awt_resource.h"
#include "awt_event.h"
#include "awt_wcompstr.h"


#define MENU_ITEMS          10

class AwtFrame;

#define MENU_PTR(_qp) \
    ((AwtMenu*) ((char*) (_qp) - offsetof(AwtMenu,m_link)))

//
// Declare the Java peer class
//
DECLARE_SUN_AWT_WINDOWS_PEER(WMenuBarPeer);
DECLARE_SUN_AWT_WINDOWS_PEER(WMenuPeer);
DECLARE_SUN_AWT_WINDOWS_PEER(WMenuItemPeer);
DECLARE_SUN_AWT_WINDOWS_PEER(WCheckboxMenuItemPeer);

class AwtMenu : public AwtObject
{

public:

    //
    // Enumeration of the methods which are accessable on the "main GUI thread"
    // via the CallMethod(...) mechanism...
    //
    enum {
        CREATEMENU       = 0x0101,
        CREATEPOPUP
    };

public:
                            AwtMenu(JHandle* peer);
                            AwtMenu(HWMenuPeer* peer);

    virtual                 ~AwtMenu();

    virtual BOOL            CallMethod(AwtMethodInfo *info);

    virtual void            CreateMenu(HWND hFrameWnd) {}
    virtual void            CreateMenu(AwtMenu* owner, Hjava_lang_String* menuName);

    virtual UINT            AddMenu(Hjava_lang_String* menuRefName, HWMenuItemPeer* peer, AwtMenu* menu = 0);

            void            Enable(long state);
            void            EnableItem(UINT position, long state, UINT cFlag = 0);
            void            SetItemState(UINT position, long state);

            void            Modify(Hjava_lang_String* itemName);
            void            ModifyItem(UINT position, Hjava_lang_String* itemName);
            void            Remove();
            void            RemoveItem(UINT position, UINT cFlag = 0);

            long            GetState(UINT position);

    operator HMENU          () { return m_hMenu; }

    virtual void            UpdateMenu();

    virtual UINT            AddPeer(HWMenuItemPeer* itemPeer);
    virtual void            RemovePeer(UINT position);

            AwtCList&       GetListEl() {return m_link;}
            void            UpdatePositions(UINT pos);

            UINT            GetPosition() { return m_cIDs;}
            void            SetPosition(UINT pos) {m_cIDs = pos;}

protected:

    // the list element
    AwtCList                m_link;

    // keep the submenus in a list. This is a sort of list head
    AwtCList                m_OwnerLink;

    HMENU                   m_hMenu;
    AwtMenu*                m_Owner;

    UINT                    m_cIDs;
    UINT                    m_cPositions;

#ifdef INTLUNICODE
    WinMenuCompStrList      m_stringList;
#endif

};


class AwtMenuBar : public AwtMenu {

public:
                            AwtMenuBar(HWMenuBarPeer* peer);

    virtual                 ~AwtMenuBar();

    virtual void            CreateMenu(HWND hFrameWnd);

    virtual UINT            AddMenu(Hjava_lang_String* menuRefName, HWMenuItemPeer* peer, AwtMenu* menu = 0);

    virtual BOOL            OnSelect(UINT id);

    virtual void            UpdateMenu();

    virtual UINT            AddPeer(HWMenuItemPeer* itemPeer);
    virtual void            RemovePeer(UINT position);
protected:

    HWMenuItemPeer**        m_PeerCollection;
    size_t                  m_currentSize;

    HWND                    m_hWnd;

    AwtMenu*                m_HelpMenu; // help menu, so it will keep the last position

};

#endif