From dee1085796139f9fd8071b72652b8e2625c8a05e Mon Sep 17 00:00:00 2001 From: Pritpal Bedi Date: Sat, 23 Jan 2010 22:57:04 +0000 Subject: [PATCH] 2010-01-23 13:32 UTC-0800 Pritpal Bedi (pritpal@vouchcac.com) * contrib/hbide/idefindreplace.prg ! Fixed: error when find operation was unsuccessful. * contrib/hbxbp/xbp.ch + Added HBXBP_DBG( HB_TR_ALWAYS,... ) * contrib/hbxbp/xbppushbutton.prg + Behavior: if focus is set on the object, then its property is changed to autodefault() which means the button will be highlighted with additional border to indicate that it can be activated with "Return" press. However this property does not work in buttons if XbpDialog() is the parent. * contrib/hbxbp/xbpgeneric.prg * contrib/hbxbp/xbpwindow.prg * contrib/hbxbp/xbpdialog.prg + Implemented: XbpDialog():maxButton, :minButton QUESTION: which instance variable controls the resizing behavior? * contrib/hbxbp/xbpsle.prg + Added: callback slot :returnPressed. oSle1:returnPressed := {|| SetAppFocus( oSle2 ) } This facilitates the TAB behavior which navigating the SLE's. This effectively also means you can control the SLE's like ReadModal(). Just validate the SLE (oGet) and move to another SLE or any other part. Angel, your observation will matter. --- harbour/ChangeLog | 30 ++++++ harbour/contrib/hbide/idefindreplace.prg | 2 +- harbour/contrib/hbxbp/xbp.ch | 1 + harbour/contrib/hbxbp/xbpdialog.prg | 30 ++++++ harbour/contrib/hbxbp/xbpgeneric.prg | 12 ++- harbour/contrib/hbxbp/xbppushbutton.prg | 34 ++++-- harbour/contrib/hbxbp/xbpsle.prg | 15 ++- harbour/contrib/hbxbp/xbpwindow.prg | 129 +++++++---------------- 8 files changed, 153 insertions(+), 100 deletions(-) diff --git a/harbour/ChangeLog b/harbour/ChangeLog index 065ae692c5..82afd9ad2b 100644 --- a/harbour/ChangeLog +++ b/harbour/ChangeLog @@ -17,6 +17,36 @@ past entries belonging to author(s): Viktor Szakats. */ +2010-01-23 13:32 UTC-0800 Pritpal Bedi (pritpal@vouchcac.com) + * contrib/hbide/idefindreplace.prg + ! Fixed: error when find operation was unsuccessful. + + * contrib/hbxbp/xbp.ch + + Added HBXBP_DBG( HB_TR_ALWAYS,... ) + + * contrib/hbxbp/xbppushbutton.prg + + Behavior: if focus is set on the object, then its property is + changed to autodefault() which means the button will be highlighted + with additional border to indicate that it can be activated + with "Return" press. However this property does not work in + buttons if XbpDialog() is the parent. + + * contrib/hbxbp/xbpgeneric.prg + * contrib/hbxbp/xbpwindow.prg + * contrib/hbxbp/xbpdialog.prg + + Implemented: XbpDialog():maxButton, :minButton + QUESTION: which instance variable controls the resizing behavior? + + * contrib/hbxbp/xbpsle.prg + + Added: callback slot :returnPressed. + oSle1:returnPressed := {|| SetAppFocus( oSle2 ) } + This facilitates the TAB behavior which navigating the SLE's. + This effectively also means you can control the SLE's like + ReadModal(). Just validate the SLE (oGet) and move to + another SLE or any other part. + + Angel, your observation will matter. + 2010-01-23 14:05 UTC+0100 Viktor Szakats (harbour.01 syenar.hu) * contrib/hbwin/hbwapi.h * contrib/hbwin/wapi_alloc.c diff --git a/harbour/contrib/hbide/idefindreplace.prg b/harbour/contrib/hbide/idefindreplace.prg index b5808e4c59..904667b590 100644 --- a/harbour/contrib/hbide/idefindreplace.prg +++ b/harbour/contrib/hbide/idefindreplace.prg @@ -236,7 +236,7 @@ METHOD IdeFindReplace:onClickFind() qCursor:setPosition( 0 ) ::qCurEdit:setTextCursor( qCursor ) IF !( lFound := ::find() ) - ::qCursor:setPosition( nPos ) + qCursor:setPosition( nPos ) ::qCurEdit:setTextCursor( qCursor ) ENDIF ELSE diff --git a/harbour/contrib/hbxbp/xbp.ch b/harbour/contrib/hbxbp/xbp.ch index 256e627862..3b10b6efb7 100644 --- a/harbour/contrib/hbxbp/xbp.ch +++ b/harbour/contrib/hbxbp/xbp.ch @@ -9,6 +9,7 @@ #include "hbtrace.ch" #xtranslate HBXBP_DEBUG( [] ) => HB_TRACE( HB_TR_DEBUG, ) +#xtranslate HBXBP_DBG( [] ) => HB_TRACE( HB_TR_ALWAYS, ) /*----------------------------------------------------------------------*/ diff --git a/harbour/contrib/hbxbp/xbpdialog.prg b/harbour/contrib/hbxbp/xbpdialog.prg index 8d8b606928..625a76b25a 100644 --- a/harbour/contrib/hbxbp/xbpdialog.prg +++ b/harbour/contrib/hbxbp/xbpdialog.prg @@ -80,6 +80,8 @@ CLASS XbpDialog FROM XbpWindow DATA oMenu DATA aRect + DATA maxbutton INIT .t. + DATA minbutton INIT .t. DATA drawingArea DATA tasklist INIT .t. DATA oEventLoop @@ -119,6 +121,7 @@ METHOD XbpDialog:new( oParent, oOwner, aPos, aSize, aPresParams, lVisible ) /*----------------------------------------------------------------------*/ METHOD XbpDialog:create( oParent, oOwner, aPos, aSize, aPresParams, lVisible ) + LOCAL nFlags, nnFlags ::xbpWindow:create( oParent, oOwner, aPos, aSize, aPresParams, lVisible ) @@ -159,6 +162,31 @@ METHOD XbpDialog:create( oParent, oOwner, aPos, aSize, aPresParams, lVisible ) ::oWidget:setCentralWidget( ::drawingArea:oWidget ) ENDIF + nFlags := ::oWidget:windowFlags() + nnFlags := nFlags + IF !( ::maxButton ) + IF hb_bitAnd( nFlags, Qt_WindowMaximizeButtonHint ) == Qt_WindowMaximizeButtonHint + nFlags -= Qt_WindowMaximizeButtonHint + ENDIF + ENDIF + IF !( ::minButton ) + IF hb_bitAnd( nFlags, Qt_WindowMinimizeButtonHint ) == Qt_WindowMinimizeButtonHint + nFlags -= Qt_WindowMinimizeButtonHint + ENDIF + ENDIF + #if 0 + IF !( ::taskList ) + IF hb_bitAnd( nFlags, Qt_Window ) == Qt_Window + nFlags -= Qt_Window + ENDIF + /* This hides the taskbar entry but title bar is not visible */ + nFlags += Qt_ToolTip + Qt_WindowTitleHint + ENDIF + #endif + IF nnFlags != nFlags + ::oWidget:setWindowFlags( nFlags ) + ENDIF + //::setQtProperty() ::setPosAndSize() IF ::visible @@ -237,6 +265,8 @@ METHOD XbpDialog:showModal() ::hide() ::oWidget:setWindowModality( 2 ) ::show() + ::is_hidden := .f. + ::lHasInputFocus := .t. RETURN .t. diff --git a/harbour/contrib/hbxbp/xbpgeneric.prg b/harbour/contrib/hbxbp/xbpgeneric.prg index 4e7fa6f2a2..b103838bb8 100644 --- a/harbour/contrib/hbxbp/xbpgeneric.prg +++ b/harbour/contrib/hbxbp/xbpgeneric.prg @@ -175,9 +175,19 @@ FUNCTION hbxbp_SetEventLoop( oELoop ) /*----------------------------------------------------------------------*/ FUNCTION PostAppEvent( nEvent, mp1, mp2, oXbp ) + LOCAL qEvent + + HB_SYMBOL_UNUSED( mp2 ) SetAppEvent( nEvent, mp1, mp2, oXbp ) + IF nEvent == xbeP_Keyboard + IF mp1 == xbeK_TAB + qEvent := QEvent():new( QEvent_KeyPress ) + s_oApp:postEvent( oXbp:oWidget, qEvent ) + ENDIF + ENDIF + RETURN .T. /*----------------------------------------------------------------------*/ @@ -251,7 +261,7 @@ FUNCTION SetAppFocus( oXbp ) IF hb_isObject( oXbp ) t_oXbpInFocus := oXbp - oXbp:oWidget:setFocus() + oXbp:setFocus() ENDIF RETURN oldXbpInFocus diff --git a/harbour/contrib/hbxbp/xbppushbutton.prg b/harbour/contrib/hbxbp/xbppushbutton.prg index df15437d0e..e302845b80 100644 --- a/harbour/contrib/hbxbp/xbppushbutton.prg +++ b/harbour/contrib/hbxbp/xbppushbutton.prg @@ -92,9 +92,11 @@ CLASS XbpPushButton INHERIT XbpWindow METHOD configure( oParent, oOwner, aPos, aSize, aPresParams, lVisible ) METHOD destroy() METHOD handleEvent( nEvent, mp1, mp2 ) - METHOD exeBlock() + METHOD exeBlock( nMode, p ) METHOD setStyle() VIRTUAL + METHOD setFocus() + METHOD setCaption( xCaption, cDll ) METHOD activate( xParam ) SETGET @@ -117,6 +119,7 @@ METHOD XbpPushButton:create( oParent, oOwner, aPos, aSize, aPresParams, lVisible ::xbpWindow:create( oParent, oOwner, aPos, aSize, aPresParams, lVisible ) ::oWidget := QPushButton():new( ::oParent:oWidget ) + ::oWidget:setFocusPolicy( Qt_StrongFocus ) ::setPosAndSize() IF ::visible @@ -129,7 +132,8 @@ METHOD XbpPushButton:create( oParent, oOwner, aPos, aSize, aPresParams, lVisible ::oWidget:setDefault( .t. ) ENDIF - ::Connect( ::pWidget, "clicked()", {|| ::exeBlock() } ) + ::Connect( ::pWidget, "clicked()", {|| ::exeBlock( 1 ) } ) + ::Connect( ::pWidget, "pressed()", {|| ::exeBlock( 1 ) } ) ::oParent:AddChild( SELF ) RETURN Self @@ -166,11 +170,18 @@ METHOD XbpPushButton:hbCreateFromQtPtr( oParent, oOwner, aPos, aSize, aPresParam /*----------------------------------------------------------------------*/ -METHOD XbpPushButton:exeBlock() +METHOD XbpPushButton:exeBlock( nMode, p ) - IF hb_isBlock( ::sl_lbClick ) - eval( ::sl_lbClick, NIL, NIL, self ) - ENDIF + DO CASE + CASE nMode == 1 + IF hb_isBlock( ::sl_lbClick ) + eval( ::sl_lbClick, NIL, NIL, self ) + ENDIF + CASE nMode == 201 /* QEvent_KeyPressed */ + IF XbpQKeyEventToAppEvent( p ) == xbeK_ENTER + ::oWidget:click() + ENDIF + ENDCASE RETURN nil @@ -202,6 +213,17 @@ METHOD XbpPushButton:configure( oParent, oOwner, aPos, aSize, aPresParams, lVisi /*----------------------------------------------------------------------*/ +METHOD XbpPushButton:setFocus() + + IF !( ::oWidget:isDefault() ) + ::oWidget:setDefault( .t. ) + ENDIF + ::oWidget:setFocus_1() + + RETURN Self + +/*----------------------------------------------------------------------*/ + METHOD XbpPushButton:setCaption( xCaption, cDll ) HB_SYMBOL_UNUSED( cDll ) diff --git a/harbour/contrib/hbxbp/xbpsle.prg b/harbour/contrib/hbxbp/xbpsle.prg index 571bd04f1d..885678f322 100644 --- a/harbour/contrib/hbxbp/xbpsle.prg +++ b/harbour/contrib/hbxbp/xbpsle.prg @@ -115,6 +115,11 @@ CLASS XbpSLE INHERIT XbpWindow, XbpDataRef ACCESS typeOut INLINE ::sl_typeOut ASSIGN typeOut( bBlock ) INLINE ::sl_typeOut := bBlock + /* Harbour Extension */ + DATA sl_returnPressed + ACCESS returnPressed INLINE ::sl_returnPressed + ASSIGN returnPressed( bBlock ) INLINE ::sl_returnPressed := bBlock + ENDCLASS /*----------------------------------------------------------------------*/ @@ -133,6 +138,7 @@ METHOD XbpSLE:create( oParent, oOwner, aPos, aSize, aPresParams, lVisible ) ::xbpWindow:create( oParent, oOwner, aPos, aSize, aPresParams, lVisible ) ::oWidget := QLineEdit():new( ::pParent ) + ::oWidget:setFocusPolicy( Qt_StrongFocus ) ::oWidget:setAlignment( es_[ ::align ] ) IF !::editable @@ -155,7 +161,7 @@ METHOD XbpSLE:create( oParent, oOwner, aPos, aSize, aPresParams, lVisible ) ::connect( ::pWidget, "cursorPositionChanged(int,int)" , {|o,i,ii| ::exeBlock( 1, i, ii, o ) } ) // ::connect( ::pWidget, "editingFinished()" , {| | ::exeBlock( 2 ) } ) - // ::connect( ::pWidget, "returnPressed()" , {| | ::exeBlock( 3 ) } ) + ::connect( ::pWidget, "returnPressed()" , {| | ::exeBlock( 3 ) } ) // ::connect( ::pWidget, "selectionChanged()" , {| | ::exeBlock( 4 ) } ) ::connect( ::pWidget, "textChanged(QString)" , {|o,s | ::exeBlock( 5, s, o ) } ) ::connect( ::pWidget, "textEdited(QString)" , {|o,s | ::exeBlock( 6, s, o ) } ) @@ -209,6 +215,13 @@ METHOD XbpSLE:exeBlock( nMsg, p1, p2 ) CASE nMsg == 3 // "returnPressed()" ::sl_editBuffer := ::oWidget:text() + #if 0 + PostAppEvent( xbeP_Keyboard, xbeK_TAB, , Self ) + #else + IF hb_isBlock( ::sl_returnPressed ) + eval( ::sl_returnPressed, NIL, NIL, Self ) + ENDIF + #endif CASE nMsg == 4 // "selectionChanged()" diff --git a/harbour/contrib/hbxbp/xbpwindow.prg b/harbour/contrib/hbxbp/xbpwindow.prg index c76b8d2771..ada2a8e57e 100644 --- a/harbour/contrib/hbxbp/xbpwindow.prg +++ b/harbour/contrib/hbxbp/xbpwindow.prg @@ -130,9 +130,39 @@ CLASS XbpWindow INHERIT XbpPartHandler METHOD dragMotion( xParam ) SETGET METHOD dragLeave( xParam ) SETGET METHOD dragDrop( xParam, xParam1 ) SETGET + METHOD hbContextMenu( xParam ) SETGET METHOD Initialize( oParent, oOwner, aPos, aSize, aPresParams, lVisible ) + METHOD isEnabled() INLINE ::is_enabled + METHOD isVisible() INLINE !( ::is_hidden ) + + METHOD hbCreateFromQtPtr() VIRTUAL + METHOD destroy() + METHOD disable() + METHOD enable() + METHOD hide() + METHOD lockPS() + METHOD lockUpdate() + METHOD show() + METHOD toBack() + METHOD toFront() + METHOD unlockPS() + METHOD winDevice() + METHOD setColorBG( nRGB ) + METHOD setColorFG( nRGB ) + METHOD currentPos() + METHOD currentSize() + METHOD getHWND() + METHOD getModalState() + METHOD hasInputFocus() + + METHOD setFocus() + METHOD sendMessage() + METHOD connectWindowEvents() + METHOD disConnect() + METHOD clearSlots() + CLASSDATA nProperty INIT 0 DATA qtProperty INIT "" DATA qtObject @@ -201,7 +231,7 @@ CLASS XbpWindow INHERIT XbpPartHandler DATA title INIT " " DATA icon INIT 0 DATA closable INIT .T. - DATA resizable INIT .t. + DATA resizable INIT .T. DATA resizeMode INIT 0 DATA lModal INIT .f. DATA hWnd @@ -234,89 +264,7 @@ CLASS XbpWindow INHERIT XbpPartHandler ACCESS pSlots INLINE hbxbp_getSlotsPtr() ACCESS pEvents INLINE hbxbp_GetEventsPtr() - METHOD isEnabled() INLINE ::is_enabled - METHOD isVisible() INLINE !( ::is_hidden ) - -* METHOD init() -* METHOD create() - METHOD hbCreateFromQtPtr() VIRTUAL -* METHOD configure() - METHOD destroy() -* METHOD captureMouse() - METHOD disable() - METHOD enable() - METHOD hide() -* METHOD invalidateRect() - METHOD lockPS() - METHOD lockUpdate() -* METHOD setModalState() -* METHOD setPointer() -* METHOD setTrackPointer() -* METHOD setPos() -* METHOD setPosAndSize() -* METHOD setSize() - METHOD show() - METHOD toBack() - METHOD toFront() - METHOD unlockPS() - METHOD winDevice() - METHOD setColorBG( nRGB ) - METHOD setColorFG( nRGB ) -* METHOD setFont() -* METHOD setFontCompoundName() -* METHOD setPresParam() - METHOD currentPos() - METHOD currentSize() - METHOD getHWND() - METHOD getModalState() - METHOD hasInputFocus() - - -* METHOD enter() SETGET -* METHOD leave() SETGET -* METHOD lbClick() SETGET -* METHOD lbDblClick() SETGET -* METHOD lbDown() SETGET -* METHOD lbUp() SETGET -* METHOD mbClick() SETGET -* METHOD mbDblClick() SETGET -* METHOD mbDown() SETGET -* METHOD mbUp() SETGET -* METHOD motion() SETGET -* METHOD rbClick() SETGET -* METHOD rbDblClick() SETGET -* METHOD rbDown() SETGET -* METHOD rbUp() SETGET -* METHOD wheel() SETGET -* METHOD helpRequest() SETGET -* METHOD keyboard() SETGET -* METHOD killInputFocus() SETGET -* METHOD move() SETGET -* METHOD paint() SETGET -* METHOD quit() SETGET -* METHOD resize() SETGET -* METHOD setInputFocus() SETGET -* METHOD dragEnter() SETGET -* METHOD dragMotion() SETGET -* METHOD dragLeave() SETGET -* METHOD dragDrop() SETGET -* METHOD close() SETGET -* METHOD setDisplayFocus() SETGET -* METHOD killDisplayFocus() SETGET - METHOD hbContextMenu( xParam ) SETGET - METHOD setFocus() - METHOD sendMessage() -* METHOD Initialize() -* METHOD handleEvent() -* METHOD grabEvent() -* METHOD isDerivedFrom() -* METHOD connect() -* METHOD connectEvent() - METHOD connectWindowEvents() - METHOD disConnect() - METHOD clearSlots() - - + METHOD className() INLINE __objGetClsName( Self ) ENDCLASS /*----------------------------------------------------------------------*/ @@ -457,6 +405,9 @@ METHOD XbpWindow:connectEvent( pWidget, nEvent, bBlock ) IF ( lSuccess := Qt_Events_Connect( ::pEvents, pWidget, nEvent, bBlock ) ) aadd( ::aEConnections, { pWidget, nEvent } ) + // HBXBP_DBG( "XbpWindow:connectEvent", nEvent, "Succeeded" ) + ELSE + HBXBP_DBG( "XbpWindow:connectEvent", nEvent, "Failed" ) ENDIF RETURN lSuccess @@ -1301,7 +1252,7 @@ METHOD XbpWindow:show() METHOD XbpWindow:toBack() - // TODO: + ::oWidget:lower() RETURN self @@ -1309,7 +1260,7 @@ METHOD XbpWindow:toBack() METHOD XbpWindow:toFront() - // TODO: + ::oWidget:raise() RETURN self @@ -1333,9 +1284,6 @@ METHOD XbpWindow:winDevice() METHOD XbpWindow:setPresParam( aPPNew ) LOCAL i - //LOCAL aPP - - //aPP := aclone( ::aPresParams ) IF hb_isArray( aPPNew ) FOR i := 1 TO len( aPPNew ) @@ -1343,7 +1291,6 @@ METHOD XbpWindow:setPresParam( aPPNew ) NEXT ENDIF - //RETURN aPP RETURN ::aPresParams /*----------------------------------------------------------------------*/ @@ -1894,7 +1841,7 @@ METHOD XbpWindow:Initialize( oParent, oOwner, aPos, aSize, aPresParams, lVisible METHOD XbpWindow:setFocus() - ::oWidget:setFocus() + ::oWidget:setFocus_1() RETURN Self