Files
harbour-core/harbour/contrib/gtwvg/menubar.prg
Viktor Szakats c300ba14ee 2012-07-23 17:26 UTC+0200 Viktor Szakats (harbour syenar.net)
+ contrib/gtwvg/3state.prg
  + contrib/gtwvg/activex.prg
  + contrib/gtwvg/bitmap.prg
  + contrib/gtwvg/checkbox.prg
  + contrib/gtwvg/class.prg
  + contrib/gtwvg/combobox.prg
  + contrib/gtwvg/crt.prg
  + contrib/gtwvg/dataref.prg
  + contrib/gtwvg/dialog.prg
  + contrib/gtwvg/drawarea.prg
  + contrib/gtwvg/genrc.prg
  + contrib/gtwvg/htmlview.prg
  + contrib/gtwvg/listbox.prg
  + contrib/gtwvg/menubar.prg
  + contrib/gtwvg/mle.prg
  + contrib/gtwvg/paint.prg
  + contrib/gtwvg/parthdlr.prg
  + contrib/gtwvg/pushbut.prg
  + contrib/gtwvg/radiobut.prg
  + contrib/gtwvg/scrollbr.prg
  + contrib/gtwvg/sle.prg
  + contrib/gtwvg/statbar.prg
  + contrib/gtwvg/static.prg
  + contrib/gtwvg/syswnd.prg
  + contrib/gtwvg/tabpage.prg
  + contrib/gtwvg/toolbar.prg
  + contrib/gtwvg/treeview.prg
  + contrib/gtwvg/wnd.prg
  + contrib/hbxbp/3state.prg
  + contrib/hbxbp/appevent.prg
  + contrib/hbxbp/bitmap.prg
  + contrib/hbxbp/browse.prg
  + contrib/hbxbp/checkbox.prg
  + contrib/hbxbp/clipboard.prg
  + contrib/hbxbp/combobox.prg
  + contrib/hbxbp/crt.prg
  + contrib/hbxbp/dataref.prg
  + contrib/hbxbp/dialog.prg
  + contrib/hbxbp/filedialog.prg
  + contrib/hbxbp/fontdialog.prg
  + contrib/hbxbp/generic.prg
  + contrib/hbxbp/gra.prg
  + contrib/hbxbp/htmlviewer.prg
  + contrib/hbxbp/listbox.prg
  + contrib/hbxbp/menubar.prg
  + contrib/hbxbp/mle.prg
  + contrib/hbxbp/parthandler.prg
  + contrib/hbxbp/presspace.prg
  + contrib/hbxbp/printdialog.prg
  + contrib/hbxbp/printer.prg
  + contrib/hbxbp/pushbutton.prg
  + contrib/hbxbp/radiobutton.prg
  + contrib/hbxbp/rtf.prg
  + contrib/hbxbp/scrollbar.prg
  + contrib/hbxbp/sle.prg
  + contrib/hbxbp/spinbutton.prg
  + contrib/hbxbp/static.prg
  + contrib/hbxbp/statusbar.prg
  + contrib/hbxbp/style.prg
  + contrib/hbxbp/tabpage.prg
  + contrib/hbxbp/toolbar.prg
  + contrib/hbxbp/treeview.prg
  + contrib/hbxbp/window.prg
  - contrib/gtwvg/wvg3stat.prg
  - contrib/gtwvg/wvgax.prg
  - contrib/gtwvg/wvgbitmp.prg
  - contrib/gtwvg/wvgcheck.prg
  - contrib/gtwvg/wvgclass.prg
  - contrib/gtwvg/wvgcombo.prg
  - contrib/gtwvg/wvgcrt.prg
  - contrib/gtwvg/wvgdarea.prg
  - contrib/gtwvg/wvgdatar.prg
  - contrib/gtwvg/wvgdlg.prg
  - contrib/gtwvg/wvggenrc.prg
  - contrib/gtwvg/wvghtmlv.prg
  - contrib/gtwvg/wvglistb.prg
  - contrib/gtwvg/wvgmenub.prg
  - contrib/gtwvg/wvgmle.prg
  - contrib/gtwvg/wvgpaint.prg
  - contrib/gtwvg/wvgphdlr.prg
  - contrib/gtwvg/wvgpushb.prg
  - contrib/gtwvg/wvgradio.prg
  - contrib/gtwvg/wvgscrlb.prg
  - contrib/gtwvg/wvgsle.prg
  - contrib/gtwvg/wvgstatb.prg
  - contrib/gtwvg/wvgstatc.prg
  - contrib/gtwvg/wvgsysw.prg
  - contrib/gtwvg/wvgtabpg.prg
  - contrib/gtwvg/wvgtoolb.prg
  - contrib/gtwvg/wvgtreev.prg
  - contrib/gtwvg/wvgwnd.prg
  - contrib/hbxbp/xbp3state.prg
  - contrib/hbxbp/xbpappevent.prg
  - contrib/hbxbp/xbpbitmap.prg
  - contrib/hbxbp/xbpbrowse.prg
  - contrib/hbxbp/xbpcheckbox.prg
  - contrib/hbxbp/xbpclipboard.prg
  - contrib/hbxbp/xbpcombobox.prg
  - contrib/hbxbp/xbpcrt.prg
  - contrib/hbxbp/xbpdataref.prg
  - contrib/hbxbp/xbpdialog.prg
  - contrib/hbxbp/xbpfiledialog.prg
  - contrib/hbxbp/xbpfontdialog.prg
  - contrib/hbxbp/xbpgeneric.prg
  - contrib/hbxbp/xbpgra.prg
  - contrib/hbxbp/xbphtmlviewer.prg
  - contrib/hbxbp/xbplistbox.prg
  - contrib/hbxbp/xbpmenubar.prg
  - contrib/hbxbp/xbpmle.prg
  - contrib/hbxbp/xbpparthandler.prg
  - contrib/hbxbp/xbppresspace.prg
  - contrib/hbxbp/xbpprintdialog.prg
  - contrib/hbxbp/xbpprinter.prg
  - contrib/hbxbp/xbppushbutton.prg
  - contrib/hbxbp/xbpradiobutton.prg
  - contrib/hbxbp/xbprtf.prg
  - contrib/hbxbp/xbpscrollbar.prg
  - contrib/hbxbp/xbpsle.prg
  - contrib/hbxbp/xbpspinbutton.prg
  - contrib/hbxbp/xbpstatic.prg
  - contrib/hbxbp/xbpstatusbar.prg
  - contrib/hbxbp/xbpstyle.prg
  - contrib/hbxbp/xbptabpage.prg
  - contrib/hbxbp/xbptoolbar.prg
  - contrib/hbxbp/xbptreeview.prg
  - contrib/hbxbp/xbpwindow.prg
  * contrib/gtwvg/gtwvg.hbp
  * contrib/hbxbp/hbxbp.hbp
    % deleted unnecessary prefix from .prg filenames, 
      thus making the much more easily searchable and 
      recognizable and also allowing more room for 
      the real description with much less undecipherable 
      abbreviations.
2012-07-23 15:32:39 +00:00

656 lines
19 KiB
Plaintext

/*
* $Id$
*/
/*
* Harbour Project source code:
* Source file for the Wvg*Classes
*
* Copyright 2008 Pritpal Bedi <pritpal@vouchcac.com>
* http://harbour-project.org
*
* This program is free software; you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation; either version 2, or (at your option)
* any later version.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with this software; see the file COPYING. If not, write to
* the Free Software Foundation, Inc., 59 Temple Place, Suite 330,
* Boston, MA 02111-1307 USA (or visit the web site http://www.gnu.org/).
*
* As a special exception, the Harbour Project gives permission for
* additional uses of the text contained in its release of Harbour.
*
* The exception is that, if you link the Harbour libraries with other
* files to produce an executable, this does not by itself cause the
* resulting executable to be covered by the GNU General Public License.
* Your use of that executable is in no way restricted on account of
* linking the Harbour library code into it.
*
* This exception does not however invalidate any other reasons why
* the executable file might be covered by the GNU General Public License.
*
* This exception applies only to the code released by the Harbour
* Project under the name Harbour. If you copy code from other
* Harbour Project or Free Software Foundation releases into a copy of
* Harbour, as the General Public License permits, the exception does
* not apply to the code that you add in this way. To avoid misleading
* anyone as to the status of such modified files, you must delete
* this exception notice from them.
*
* If you write modifications of your own for Harbour, it is your choice
* whether to permit this exception to apply to your modifications.
* If you do not wish that, delete this exception notice.
*
*/
/*----------------------------------------------------------------------*/
/*----------------------------------------------------------------------*/
/*----------------------------------------------------------------------*/
/*
* EkOnkar
* ( The LORD is ONE )
*
* Xbase++ Compatible xbpMenuBar Class
*
* Pritpal Bedi <pritpal@vouchcac.com>
* 22Nov2008
*/
/*----------------------------------------------------------------------*/
/*----------------------------------------------------------------------*/
/*----------------------------------------------------------------------*/
#include "hbclass.ch"
#include "common.ch"
#include "inkey.ch"
#include "hbgtinfo.ch"
#include "hbgtwvg.ch"
#include "wvtwin.ch"
#include "wvgparts.ch"
/*----------------------------------------------------------------------*/
CLASS wvgMenuBar INHERIT wvgWindow
DATA hMenu
DATA pMenu
/* Event CallBack Slots */
DATA sl_beginMenu
DATA sl_endMenu
DATA sl_itemMarked
DATA sl_itemSelected
DATA sl_drawItem
DATA sl_measureItem
DATA sl_onMenuKey
DATA aMenuItems INIT {}
CLASSVAR nMenuItemID INIT 0
DATA nPass INIT 0
DATA caption INIT ""
DATA nItemID INIT 0
DATA aIds INIT {}
DATA className INIT "MENUBAR"
METHOD numItems() INLINE len( ::aMenuItems )
METHOD new( oParent, aPresParams, lVisible )
METHOD create( oParent, aPresParams, lVisible )
METHOD configure( oParent, aPresParams, lVisible )
METHOD destroy()
METHOD delAllItems()
METHOD delItem( nItemNum )
METHOD addItem( aItem, p2, p3, p4 )
METHOD findMenuItemById( nId )
METHOD findMenuPosById( nId )
METHOD checkItem( nItemNum, lCheck )
METHOD enableItem( nItemNum )
METHOD disableItem( nItemNum )
METHOD getItem( nItemNum )
METHOD insItem( nItemNum, aItem )
METHOD isItemChecked( nItemNum )
METHOD isItemEnabled( nItemNum )
METHOD selectItem( nItemNum )
METHOD setItem( nItemNum, aItem )
/* Event Callback Methods */
METHOD beginMenu( xParam ) SETGET
METHOD endMenu( xParam ) SETGET
METHOD itemMarked( xParam ) SETGET
METHOD itemSelected( xParam ) SETGET
METHOD drawItem( xParam ) SETGET
METHOD measureItem( xParam ) SETGET
METHOD onMenuKey( xParam ) SETGET
PROTECTED:
METHOD putItem( aItem, nPos, lInsert )
ENDCLASS
/*----------------------------------------------------------------------*/
METHOD WvgMenuBar:new( oParent, aPresParams, lVisible )
DEFAULT oParent TO ::oParent
DEFAULT aPresParams TO ::aPresParams
DEFAULT lVisible TO ::visible
::oParent := oParent
::aPresParams := aPresParams
::visible := lVisible
::wvgWindow:new( ::oParent, , , , ::aPresParams, ::visible )
RETURN Self
/*----------------------------------------------------------------------*/
METHOD WvgMenuBar:create( oParent, aPresParams, lVisible )
DEFAULT oParent TO ::oParent
DEFAULT aPresParams TO ::aPresParams
DEFAULT lVisible TO ::visible
::oParent := oParent
::aPresParams := aPresParams
::visible := lVisible
::wvgWindow:create( ::oParent, , , , ::aPresParams, ::visible )
::hMenu := WVG_CreateMenu()
IF ::hMenu != 0
/* check for if the parent already has a menu
we need to destroy that first
TO DO
*/
/* finally set the menu */
#if 0
WVG_SetMenu( ::oParent:getHWND(), ::hMenu )
#endif
/* how to make menu invisible ? */
IF ( ::visible )
#if 0
WVG_ShowWindow( ::oParent:getHWND(), SW_MINIMIZE )
WVG_ShowWindow( ::oParent:getHWND(), SW_NORMAL )
#endif
ENDIF
::oParent:oMenu := Self
::pMenu := WIN_N2P( ::hMenu )
ENDIF
RETURN Self
/*----------------------------------------------------------------------*/
METHOD WvgMenuBar:configure( oParent, aPresParams, lVisible )
DEFAULT oParent TO ::oParent
DEFAULT aPresParams TO ::aPresParams
DEFAULT lVisible TO ::visible
::oParent := oParent
::aPresParams := aPresParams
::visible := lVisible
RETURN Self
/*----------------------------------------------------------------------*/
METHOD WvgMenuBar:destroy()
IF !empty( ::hMenu )
::DelAllItems()
IF !WVG_DestroyMenu( ::hMenu )
#if 0
Throw( ErrorNew( "wvtMenu", 1000, "wvtMenu:Destroy()", "Destroy menu FAILED", {},"wvt.prg" ) )
#endif
ENDIF
::hMenu := 0
ENDIF
RETURN .T.
/*----------------------------------------------------------------------*/
METHOD WvgMenuBar:delAllItems()
LOCAL lResult:= .T., nItems
nItems := ::numItems()
DO WHILE nItems > 0 .AND. lResult
lResult := ::DelItem( nItems )
nItems--
ENDDO
RETURN lResult
/*----------------------------------------------------------------------*/
METHOD WvgMenuBar:delItem( nItemNum )
LOCAL lResult:= .F.
IF nItemNum > 0 .AND. nItemNum <= ::numItems()
IF ::aMenuItems[ nItemNum, WVT_MENU_TYPE ] == MF_POPUP
::aMenuItems[ nItemNum, WVT_MENU_MENUOBJ ]:Destroy()
ENDIF
IF ( lResult := WVG_DeleteMenu( ::hMenu, nItemNum-1, MF_BYPOSITION ) ) /* Remember ZERO base */
ADEL( ::aMenuItems, nItemNum )
ASIZE( ::aMenuItems, LEN( ::aMenuItems ) - 1 )
ELSE
#if 0
Throw( ErrorNew( "wvtMenu", 1000, "wvtMenu:DelItem()", "Delete menu item FAILED", { nItemNum },"wvt.prg" ) )
#endif
ENDIF
ENDIF
RETURN lResult
/*----------------------------------------------------------------------*/
/*
* { xCaption, bAction, nStyle, nAttrb }
*/
METHOD WvgMenuBar:addItem( aItem, p2, p3, p4 )
LOCAL xCaption, bAction, nStyle, nAttrib
IF PCount() == 1 .AND. valtype( aItem ) == "A"
ASize( aItem, 4 )
xCaption := aItem[ 1 ]
bAction := aItem[ 2 ]
nStyle := aItem[ 3 ]
nAttrib := aItem[ 4 ]
ELSE
xCaption := aItem
bAction := p2
nStyle := p3
nAttrib := p4
ENDIF
RETURN ::putItem( { xCaption, bAction, nStyle, nAttrib }, -1, .t. )
/*----------------------------------------------------------------------*/
METHOD WvgMenuBar:putItem( aItem, nPos, lInsert )
LOCAL nItemIndex, cCaption
LOCAL xCaption, bAction, nStyle, nAttrib
DEFAULT lInsert TO .t.
ASize( aItem, 4 )
xCaption := aItem[ 1 ]
bAction := aItem[ 2 ]
nStyle := aItem[ 3 ]
nAttrib := aItem[ 4 ]
/* xCaption : NIL | cPrompt | ncResource | oMenu */
SWITCH valtype( xCaption )
CASE "U" /* Separator */
aItem := { MF_SEPARATOR, 0, 0, NIL, nStyle, nAttrib }
EXIT
CASE "C"
IF left( xCaption,1 ) == "-"
aItem := { MF_SEPARATOR, 0, 0, NIL, nStyle, nAttrib }
ELSE
aItem := { MF_STRING, ++::nMenuItemID, xCaption, bAction, nStyle, nAttrib }
ENDIF
EXIT
CASE "O"
cCaption := iif( bAction == NIL, xCaption:title, bAction )
aItem := { MF_POPUP , xCaption:hMenu , cCaption, xCaption, nStyle, nAttrib }
EXIT
CASE "N" /* Resource ID */
EXIT
ENDSWITCH
IF nPos <= 0
aadd( ::aMenuItems, aItem )
nItemIndex := len( ::aMenuItems )
WVG_AppendMenu( ::hMenu, ;
aItem[ 1 ], ;
aItem[ 2 ], ;
iif( HB_ISSTRING( aItem[ 3 ] ), strtran( aItem[ 3 ], "~", "&" ), aItem[ 3 ] ) )
ELSE
nItemIndex := nPos
IF lInsert
::aMenuItems := hb_AIns( ::aMenuItems, nPos, aItem, .t. )
WVG_InsertMenu( ::hMenu, ;
nItemIndex - 1, ;
aItem[ 1 ] + MF_BYPOSITION, ;
aItem[ 2 ], ;
iif( HB_ISSTRING( aItem[ 3 ] ), strtran( aItem[ 3 ], "~", "&" ), aItem[ 3 ] ) )
ELSE
IF valtype( xCaption ) == "C"
aItem[ 2 ] := ::aMenuItems[ nItemIndex, 2 ]
ENDIF
::aMenuItems[ nItemIndex ] := aItem
WVG_SetMenuItem( ::hMenu, ;
nItemIndex - 1, ;
aItem[ 2 ], ;
iif( HB_ISSTRING( aItem[ 3 ] ), strtran( aItem[ 3 ], "~", "&" ), aItem[ 3 ] ),;
valtype( xCaption ) == "C" )
ENDIF
ENDIF
IF ++::nPass == 1
IF ::oParent:className $ "WVGCRT,WVGDIALOG"
WVG_SetMenu( ::oParent:getHWND(), ::hMenu )
ENDIF
ELSE
IF ::oParent:className $ "WVGCRT,WVGDIALOG"
WVG_DrawMenuBar( ::oParent:getHWND() )
ENDIF
ENDIF
RETURN nItemIndex
/*----------------------------------------------------------------------*/
METHOD WvgMenuBar:findMenuItemById( nId )
LOCAL x, aResult :={}
IF !empty( nId )
x := ::numItems()
DO WHILE x > 0 .AND. empty( aResult )
IF ::aMenuItems[ x, WVT_MENU_TYPE ] == MF_POPUP
aResult:= ::aMenuItems[ x,WVT_MENU_MENUOBJ ]:findMenuItemById( nId )
ELSEIF ::aMenuItems[ x, WVT_MENU_IDENTIFIER ] == nId
aResult := { x, ::aMenuItems[ x, WVT_MENU_ACTION ], ::sl_itemSelected, Self }
ENDIF
x--
ENDDO
ENDIF
RETURN aResult
/*----------------------------------------------------------------------*/
METHOD WvgMenuBar:findMenuPosById( nId )
LOCAL x, nPos
IF !empty( nId )
x := ::numItems()
DO WHILE x > 0 .AND. empty( nPos )
IF ::aMenuItems[ x,WVT_MENU_TYPE ] == MF_POPUP
nPos := ::aMenuItems[ x,WVT_MENU_MENUOBJ ]:findMenuPosById( nId )
ELSEIF ::aMenuItems[ x,WVT_MENU_IDENTIFIER ] == nId
nPos := x
ENDIF
x--
ENDDO
ENDIF
RETURN nPos
/*----------------------------------------------------------------------*/
METHOD WvgMenuBar:checkItem( nItemNum, lCheck )
LOCAL nRet := -1
DEFAULT lCheck TO .T.
IF !empty( ::hMenu ) .AND. HB_ISNUMERIC( nItemNum )
nRet := WVG_CheckMenuItem( ::hMenu, nItemNum-1, MF_BYPOSITION + iif( lCheck, MF_CHECKED, MF_UNCHECKED ) )
ENDIF
RETURN iif( nRet == -1, .F., .T. )
/*----------------------------------------------------------------------*/
METHOD WvgMenuBar:enableItem( nItemNum )
LOCAL lSuccess := .f.
IF !empty( ::hMenu ) .AND. HB_ISNUMERIC( nItemNum )
lSuccess := WVG_EnableMenuItem( ::hMenu, nItemNum-1, MF_BYPOSITION + MF_ENABLED )
ENDIF
RETURN lSuccess
/*----------------------------------------------------------------------*/
METHOD WvgMenuBar:disableItem( nItemNum )
LOCAL lSuccess := .f.
IF !empty( ::hMenu ) .AND. !empty( nItemNum )
lSuccess := WVG_EnableMenuItem( ::hMenu, nItemNum-1, MF_BYPOSITION + MF_GRAYED )
ENDIF
RETURN lSuccess
/*----------------------------------------------------------------------*/
METHOD WvgMenuBar:getItem( nItemNum )
IF HB_ISNUMERIC( nItemNum ) .AND. nItemNum > 0 .AND. nItemNum <= len( ::aMenuItems )
RETURN { ::aMenuItems[ nItemNum, 3 ], ::aMenuItems[ nItemNum, 4 ], ::aMenuItems[ nItemNum, 5 ], ::aMenuItems[ nItemNum, 6 ] }
ENDIF
RETURN NIL
/*----------------------------------------------------------------------*/
METHOD WvgMenuBar:insItem( nItemNum, aItem )
::putItem( aItem, nItemNum, .t. )
RETURN Self
/*----------------------------------------------------------------------*/
METHOD WvgMenuBar:isItemChecked( nItemNum )
RETURN WVG_IsMenuItemChecked( ::hMenu, nItemNum-1 )
/*----------------------------------------------------------------------*/
METHOD WvgMenuBar:isItemEnabled( nItemNum )
RETURN WVG_IsMenuItemEnabled( ::hMenu, nItemNum-1 )
/*----------------------------------------------------------------------*/
METHOD WvgMenuBar:selectItem( nItemNum )
IF HB_ISNUMERIC( nItemNum )
RETURN .f.
ENDIF
RETURN .t.
/*----------------------------------------------------------------------*/
METHOD WvgMenuBar:setItem( nItemNum, aItem )
RETURN ::putItem( aItem, nItemNum, .f. )
/*----------------------------------------------------------------------*/
/* Callback Methods */
/*----------------------------------------------------------------------*/
METHOD WvgMenuBar:beginMenu( xParam )
IF HB_ISBLOCK( xParam ) .or. HB_ISNIL( xParam )
::sl_beginMenu := xParam
RETURN NIL
ENDIF
RETURN Self
/*----------------------------------------------------------------------*/
METHOD WvgMenuBar:endMenu( xParam )
IF HB_ISBLOCK( xParam ) .or. HB_ISNIL( xParam )
::sl_endMenu := xParam
RETURN NIL
ENDIF
RETURN Self
/*----------------------------------------------------------------------*/
METHOD WvgMenuBar:itemMarked( xParam )
IF HB_ISBLOCK( xParam ) .or. HB_ISNIL( xParam )
::sl_itemMarked := xParam
RETURN NIL
ENDIF
RETURN Self
/*----------------------------------------------------------------------*/
METHOD WvgMenuBar:itemSelected( xParam )
IF HB_ISBLOCK( xParam ) .or. HB_ISNIL( xParam )
::sl_itemSelected := xParam
RETURN NIL
ENDIF
RETURN Self
/*----------------------------------------------------------------------*/
METHOD WvgMenuBar:drawItem( xParam )
IF HB_ISBLOCK( xParam ) .or. HB_ISNIL( xParam )
::sl_drawItem := xParam
RETURN NIL
ENDIF
RETURN Self
/*----------------------------------------------------------------------*/
METHOD WvgMenuBar:measureItem( xParam )
IF HB_ISBLOCK( xParam ) .or. HB_ISNIL( xParam )
::sl_measureItem := xParam
RETURN NIL
ENDIF
RETURN Self
/*----------------------------------------------------------------------*/
METHOD WvgMenuBar:onMenuKey( xParam )
IF HB_ISBLOCK( xParam ) .or. HB_ISNIL( xParam )
::sl_onMenuKey := xParam
RETURN NIL
ENDIF
RETURN Self
/*----------------------------------------------------------------------*/
/*----------------------------------------------------------------------*/
/*----------------------------------------------------------------------*/
/*
* Xbase++ compatible xbpMenu class
*/
/*----------------------------------------------------------------------*/
/*----------------------------------------------------------------------*/
/*----------------------------------------------------------------------*/
CLASS wvgMenu INHERIT wvgMenuBar
DATA title INIT ""
METHOD new( oParent, aPresParams, lVisible )
METHOD create( oParent, aPresParams, lVisible )
METHOD getTitle()
METHOD setTitle( cTitle )
METHOD popUp( oXbp, aPos, nDefaultItem, nControl )
ENDCLASS
/*----------------------------------------------------------------------*/
METHOD WvgMenu:new( oParent, aPresParams, lVisible )
DEFAULT oParent TO ::oParent
DEFAULT aPresParams TO ::aPresParams
DEFAULT lVisible TO ::visible
::oParent := oParent
::aPresParams := aPresParams
::visible := lVisible
RETURN Self
/*----------------------------------------------------------------------*/
METHOD WvgMenu:create( oParent, aPresParams, lVisible )
DEFAULT oParent TO ::oParent
DEFAULT aPresParams TO ::aPresParams
DEFAULT lVisible TO ::visible
::oParent := oParent
::aPresParams := aPresParams
::visible := lVisible
::className := "POPUPMENU"
::hMenu := WVG_CreatePopupMenu()
RETURN Self
/*----------------------------------------------------------------------*/
METHOD WvgMenu:getTitle()
RETURN ::title
/*----------------------------------------------------------------------*/
METHOD WvgMenu:setTitle( cTitle )
RETURN ::title := cTitle
/*----------------------------------------------------------------------*/
METHOD WvgMenu:popUp( oXbp, aPos, nDefaultItem, nControl )
LOCAL nCmd, aMenuItem
HB_SYMBOL_UNUSED( nDefaultItem )
HB_SYMBOL_UNUSED( nControl )
nCmd := WVG_TrackPopupMenu( ::hMenu, TPM_LEFTALIGN + TPM_TOPALIGN + TPM_RETURNCMD, aPos[ 1 ], aPos[ 2 ], oXbp:hWnd )
aMenuItem := ::findMenuItemById( nCmd )
IF HB_ISARRAY( aMenuItem ) .and. HB_ISBLOCK( aMenuItem[ 2 ] )
Eval( aMenuItem[ 2 ], aMenuItem[ 1 ], NIL, aMenuItem[ 4 ] )
ENDIF
RETURN 0
/*----------------------------------------------------------------------*/