diff --git a/harbour/ChangeLog b/harbour/ChangeLog index f3b971db24..87e81a2ba3 100644 --- a/harbour/ChangeLog +++ b/harbour/ChangeLog @@ -16,6 +16,14 @@ The license applies to all entries newer than 2009-04-28. */ +2011-05-27 17:32 UTC-0800 Pritpal Bedi (bedipritpal@hotmail.com) + * contrib/gtwvg/tests/wvgtbrowser.prg + ! Reworked: scrollbars of TBrowse. Now these are WvgScrollbar()s + instead of WvtScrollbar()s. WvtScrollbar() are best suited + for WvtCrt() protocol not for WvgCrt() protocol. Now these + are smooth. This concept is pulled from my applications and + slightly adjusted for demowvg. + 2011-05-27 23:42 UTC+0200 Viktor Szakats (harbour.01 syenar.hu) * examples/hbdoc2/gentxt.prg * examples/hbdoc2/genxml.prg diff --git a/harbour/contrib/gtwvg/tests/wvgtbrowser.prg b/harbour/contrib/gtwvg/tests/wvgtbrowser.prg index 26cf0f2215..7cc781677b 100644 --- a/harbour/contrib/gtwvg/tests/wvgtbrowser.prg +++ b/harbour/contrib/gtwvg/tests/wvgtbrowser.prg @@ -22,6 +22,8 @@ /*----------------------------------------------------------------------*/ +#define K_MOVING 1001 + #define K_SBLINEUP 1051 #define K_SBLINEDOWN 1052 #define K_SBPAGEUP 1053 @@ -139,7 +141,7 @@ FUNCTION ExecBrowser( oCrt ) aAdd( aBlocks, {|| Wvt_DrawGridHorz( oBrowse:nTop+3, oBrowse:nLeft, oBrowse:nRight, oBrowse:nBottom - oBrowse:nTop - 2 ) } ) aAdd( aBlocks, {|| Wvt_DrawGridVert( oBrowse:nTop, oBrowse:nBottom, oBrowse:aColumnsSep, len( oBrowse:aColumnsSep ) ) } ) - BuildScrollBars( oBrowse, @aBlocks, @oVBar, @oHBar ) + Vou_BrwAddScrollBars( oCrt, oBrowse, @oVBar, @oHBar ) aLastPaint := WvtSetBlocks( aBlocks ) @@ -147,14 +149,22 @@ FUNCTION ExecBrowser( oCrt ) DispOutAt( oBrowse:nTop-2, oBrowse:nleft, padc( cFileDbf, oBrowse:nRight-oBrowse:nLeft+1 ), "W+/W" ) DispOutAt( maxrow(), 0, padc( ' ',maxcol()+1), 'B/W' ) - oTBar:buttonClick := {|oBtn| IF( oBtn:caption=='Show',__keyboard( chr( K_DOWN ) ),nil ) } + oTBar:buttonClick := {|oBtn| Vou_ExecTBarAction( oBtn ) } - While !lEnd - oBrowse:ForceStable() + WHILE ! lEnd + dispbegin() + DO WHILE ( ( nKey := inkey( , INKEY_ALL + HB_INKEY_GTEVENT ) ) == 0 .or. nKey == K_MOVING ) .and. ! oBrowse:stabilize() + ENDDO + dispend() + + IF nKey == 0 + oVBar:setData( OrdKeyNo() ) + oHBar:setData( oBrowse:colPos ) + DO WHILE ( ( nKey := inkey( , INKEY_ALL + HB_INKEY_GTEVENT ) ) == 0 .or. nKey == K_MOVING ) + ENDDO + ENDIF - nKey := InKey( 0, INKEY_ALL + HB_INKEY_GTEVENT ) - - do case + do CASE case nKey == K_F12 nFactor-- hb_gtInfo( HB_GTI_SPEC, HB_GTS_FACTOR, nFactor ) @@ -169,23 +179,6 @@ FUNCTION ExecBrowser( oCrt ) case nKey == K_F7 hb_gtInfo( HB_GTI_RESIZABLE, .t. ) - case ( oVBar:HandleEvent( nKey ) .or. oHBar:HandleEvent( nKey ) ) - oBrowse:forceStable() - - case BrwHandleKey( oBrowse, nKey, @lEnd, oVBar, oHBar ) - - case nKey == HB_K_RESIZE - oBrowse:nBottom := maxrow() - 3 - oBrowse:nRight := maxcol() - 5 - - oVBar:configure( oBrowse:nTop, oBrowse:nRight+1, oBrowse:nBottom, oBrowse:nRight+2 ) - oHBar:configure( oBrowse:nBottom+1, oBrowse:nLeft, oBrowse:nBottom+1, oBrowse:nRight ) - - DispBox( 0, 0, maxrow(), maxcol(), " ", "N/W" ) - DispOutAt( oBrowse:nTop-2, oBrowse:nleft, padc( cFileDbf, oBrowse:nRight - oBrowse:nLeft + 1 ), "W+/W" ) - DispOutAt( maxrow(), 0, padc( ' ',maxcol()+1), 'B/W' ) - oBrowse:configure() - case nKey == K_F2 nIndex := IndexOrd() nIndex++ @@ -194,13 +187,27 @@ FUNCTION ExecBrowser( oCrt ) endif Set Order To ( nIndex ) oBrowse:RefreshAll() - + oBrowse:ForceStable() + case nKey == K_F3 DoModalWindow() case nKey == K_F4 hb_gtInfo( HB_GTI_SPEC, HB_GTS_WNDSTATE, HB_GTS_WS_MAXIMIZED ) + case BrwHandleKey( oBrowse, nKey, @lEnd ) + + case nKey == HB_K_RESIZE + oBrowse:nBottom := maxrow() - 3 + oBrowse:nRight := maxcol() - 5 + + Vou_BrwResetScrollBars( oBrowse, oVBar, oHBar ) + + DispBox( 0, 0, maxrow(), maxcol(), " ", "N/W" ) + DispOutAt( oBrowse:nTop-2, oBrowse:nleft, padc( cFileDbf, oBrowse:nRight - oBrowse:nLeft + 1 ), "W+/W" ) + DispOutAt( maxrow(), 0, padc( ' ',maxcol()+1), 'B/W' ) + oBrowse:configure() + endcase end @@ -223,6 +230,95 @@ FUNCTION ExecBrowser( oCrt ) //-------------------------------------------------------------------// +STATIC FUNCTION BrwHandleKey( oBrowse, nKey, lEnd ) + LOCAL lVMove := .f. + LOCAL lHMove := .f. + LOCAL lRet := .t. + + do case + case nKey == K_ESC + lEnd := .t. + + case nKey == K_ENTER + lEnd := .t. + + case nKey == K_DOWN + lVMove := .t. + oBrowse:Down() + + case nKey == K_UP + lVMove := .t. + oBrowse:Up() + + case nKey == K_PGDN + lVMove := .t. + oBrowse:pageDown() + + case nKey == K_PGUP + lVMove := .t. + oBrowse:pageUp() + + case nKey == K_CTRL_PGUP + lVMove := .t. + oBrowse:goTop() + + case nKey == K_CTRL_PGDN + lVMove := .t. + oBrowse:goBottom() + + case nKey == K_LEFT + lHMove := .t. + oBrowse:Left() + + case nKey == K_RIGHT + lHMove := .t. + oBrowse:Right() + + case nKey == K_HOME + lHMove := .t. + oBrowse:home() + + case nKey == K_END + lHMove := .t. + oBrowse:end() + + case nKey == K_CTRL_LEFT + lHMove := .t. + oBrowse:panLeft() + + case nKey == K_CTRL_RIGHT + lHMove := .t. + oBrowse:panRight() + + case nKey == K_CTRL_HOME + lHMove := .t. + oBrowse:panHome() + + case nKey == K_CTRL_END + lHMove := .t. + oBrowse:panEnd() + + case nKey == K_MWBACKWARD + lVMove := .t. + oBrowse:down() + + case nKey == K_MWFORWARD + lVMove := .t. + oBrowse:up() + + otherwise + lRet := .f. + + endcase + + IF lHMove .or. lVMove + oBrowse:forceStable() + ENDIF + + RETURN lRet + +/*----------------------------------------------------------------------*/ + STATIC FUNCTION DbSkipBlock( n ) LOCAL nSkipped := 0 @@ -279,151 +375,112 @@ STATIC FUNCTION TBPrev() //-------------------------------------------------------------------// STATIC FUNCTION VouBlockField( i ) - RETURN {|| fieldget( i ) } -//-------------------------------------------------------------------// - -STATIC FUNCTION BrwHandleKey( oBrowse, nKey, lEnd, oVBar, oHBar ) - LOCAL lRet := .t. - - do case - case nKey == K_ESC - lEnd := .t. - - case nKey == K_ENTER - lEnd := .t. - - case nKey == K_DOWN - oBrowse:Down() - - case nKey == K_UP - oBrowse:Up() - - case nKey == K_LEFT - oBrowse:Left() - - case nKey == K_RIGHT - oBrowse:Right() - - case nKey == K_PGDN - oBrowse:pageDown() - - case nKey == K_PGUP - oBrowse:pageUp() - - case nKey == K_CTRL_PGUP - oBrowse:goTop() - - case nKey == K_CTRL_PGDN - oBrowse:goBottom() - - case nKey == K_HOME - oBrowse:home() - - case nKey == K_END - oBrowse:end() - - case nKey == K_CTRL_LEFT - oBrowse:panLeft() - - case nKey == K_CTRL_RIGHT - oBrowse:panRight() - - case nKey == K_CTRL_HOME - oBrowse:panHome() - - case nKey == K_CTRL_END - oBrowse:panEnd() - - case nKey == K_MWBACKWARD - oBrowse:down() - - case nKey == K_MWFORWARD - oBrowse:up() - - case nKey == K_SBTHUMBTRACKVERT - OrdKeyGoTo( oVBar:GetPos() ) - oBrowse:refreshAll() - oBrowse:forceStable() - lRet := .f. - - case nKey == K_SBTHUMBTRACKHORZ - oBrowse:ColPos := oHBar:GetPos() - oBrowse:refreshAll() - oBrowse:forceStable() - lRet := .f. - - case nKey == K_SBLINEUP - oBrowse:up() - - case nKey == K_SBLINEDOWN - oBrowse:down() - - case nKey == K_SBPAGEUP - oBrowse:PageUp() - - case nKey == K_SBPAGEDOWN - oBrowse:PageDown() - - case nKey == K_SBLINELEFT - oBrowse:Left() - - case nKey == K_SBLINERIGHT - oBrowse:Right() - - case nKey == K_SBPAGELEFT - oBrowse:Left() - - case nKey == K_SBPAGERIGHT - oBrowse:right() - - otherwise - lRet := .f. - - endcase - - IF lRet - oVBar:SetPos( OrdKeyCount(), OrdKeyNo() ) - oHBar:SetPos( oBrowse:ColCount, oBrowse:ColPos ) - ENDIF - - RETURN lRet - /*----------------------------------------------------------------------*/ - -STATIC FUNCTION BuildScrollbars( oBrw, aPaint, oVBar, oHBar ) - oVBar := WvtScrollBar():New( oBrw, 999991, oBrw:nTop, oBrw:nRight+1, oBrw:nBottom, oBrw:nRight+2 ) - oVBar:nBarType := WVT_SCROLLBAR_VERT - oVBar:bTotal := {|| OrdKeyCount() } - oVBar:bCurrent := {|| OrdKeyNo() } - oVBar:aPxlBtnTop := { -2,2,0,0 } - oVBar:aPxlBtnBtm := { 0,2,2,0 } - oVBar:aPxlScroll := { 0,2,0,0 } - oVBar:Create() - - aadd( aPaint, oVBar:bBtnLeftTop ) - aadd( aPaint, oVBar:bBtnRightBottom ) - aadd( aPaint, oVBar:bBtnScroll ) - - oHBar := WvtScrollBar():New( oBrw, 999990, oBrw:nBottom+1, oBrw:nLeft, oBrw:nBottom+1, oBrw:nRight ) - oHBar:nBarType := 2 - oHBar:bTotal := {|| oBrw:ColCount } - oHBar:bCurrent := {|| oBrw:ColPos } - oHBar:aPxlBtnLft := { 2,-2,0,0 } - oHBar:aPxlBtnRgt := { 2, 0,0,2 } - oHBar:aPxlScroll := { 2, 0,0,0 } - oHBar:Create() - - aadd( aPaint, oHBar:bBtnLeftTop ) - aadd( aPaint, oHBar:bBtnRightBottom ) - aadd( aPaint, oHBar:bBtnScroll ) +STATIC FUNCTION Vou_ExecTBarAction( oBtn ) + SWITCH oBtn:caption + CASE "New" + Wvt_Keyboard( K_DOWN ); EXIT + CASE "Select" + Wvt_Keyboard( K_UP ); EXIT + CASE "Calendar" + Wvt_Keyboard( K_RIGHT ); EXIT + CASE "Tools" + Wvt_Keyboard( K_LEFT ); EXIT + CASE "Index" + Wvt_Keyboard( K_PGDN ); EXIT + CASE "Show" + Wvt_Keyboard( K_PGUP ); EXIT + CASE "Hide" + Wvt_Keyboard( K_CTRL_HOME ); EXIT + ENDSWITCH + RETURN NIL /*----------------------------------------------------------------------*/ + +#include 'wvgparts.ch' + +FUNCTION Vou_BrwAddScrollBars( oCrt, oBrowse, oVBar, oHBar ) + LOCAL aXY, aXY1 + + aXY := Wvt_GetXYFromRowCol( oBrowse:nBottom+1, oBrowse:nLeft ) + aXY1 := Wvt_GetXYFromRowCol( oBrowse:nBottom+2, oBrowse:nRight+1 ) + // + oHBar := WvgScrollBar():new( oCrt, , { aXY[ 1 ], aXY[ 2 ]+2 }, { aXY1[ 1 ]-aXY[ 1 ], aXY1[ 2 ]-aXY[ 2 ]-2 }, , .t. ) + oHBar:range := { 1, oBrowse:colCount } + oHBar:type := WVGSCROLL_HORIZONTAL + oHBar:create() + oHBar:scroll := {|mp1| oBrowse:colPos := mp1[ 1 ], oBrowse:refreshAll(), oBrowse:forceStable() } + + aXY := Wvt_GetXYFromRowCol( oBrowse:nTop , oBrowse:nRight+1 ) + aXY1 := Wvt_GetXYFromRowCol( oBrowse:nBottom+1, oBrowse:nRight+3 ) + // + oVBar := WvgScrollBar():new( oCrt, , { aXY[ 1 ]+2,aXY[ 2 ] }, { aXY1[ 1 ]-aXY[ 1 ]-2, aXY1[ 2 ]-aXY[ 2 ] }, , .t. ) + oVBar:range := { 1, LastRec() } + oVBar:type := WVGSCROLL_VERTICAL + oVBar:create() + oVBar:scroll := {|mp1| Vou_BrwSetVScroll( mp1, oBrowse ) } + + RETURN nil + /*----------------------------------------------------------------------*/ + +FUNCTION Vou_BrwResetScrollBars( oBrowse, oVBar, oHBar ) + LOCAL aXY, aXY1 + + aXY := Wvt_GetXYFromRowCol( oBrowse:nBottom+1, oBrowse:nLeft ) + aXY1 := Wvt_GetXYFromRowCol( oBrowse:nBottom+2, oBrowse:nRight+1 ) + oHBar:setPosAndSize( {aXY[1],aXY[2]+2}, { aXY1[1]-aXY[1], aXY1[2]-aXY[2]-2 }, .t. ) + + aXY := Wvt_GetXYFromRowCol( oBrowse:nTop , oBrowse:nRight+1 ) + aXY1 := Wvt_GetXYFromRowCol( oBrowse:nBottom+1, oBrowse:nRight+3 ) + oVBar:setPosAndSize( {aXY[1]+2,aXY[2]}, { aXY1[1]-aXY[1]-2, aXY1[2]-aXY[2] }, .t. ) + + RETURN nil + +/*----------------------------------------------------------------------*/ + +FUNCTION Vou_BrwSetVScroll( mp1, oBrowse ) + LOCAL nCmd, nPos + + nCmd := mp1[ 2 ] + nPos := mp1[ 1 ] + + SWITCH nCmd + + CASE WVGSB_NEXTPOS + oBrowse:down() + EXIT + + CASE WVGSB_PREVPOS + oBrowse:up() + EXIT + + CASE WVGSB_NEXTPAGE + oBrowse:pageDown() + EXIT + + CASE WVGSB_PREVPAGE + oBrowse:pageUp() + EXIT + + CASE WVGSB_SLIDERTRACK + OrdKeyGoTo( nPos ) + oBrowse:refreshAll() + EXIT + + ENDSWITCH + + oBrowse:forceStable() + + RETURN nil + +/*----------------------------------------------------------------------*/ +/* For brosers inside WvtDialog() */ /*----------------------------------------------------------------------*/ STATIC FUNCTION BrwOnEvent( oWvtBrw, cPaintID, oBrowse, nKey ) @@ -498,19 +555,19 @@ STATIC FUNCTION BrwOnEvent( oWvtBrw, cPaintID, oBrowse, nKey ) oBrowse:down() case nKey == K_SBPAGEUP - oBrowse:PageUp() + oBrowse:pageUp() case nKey == K_SBPAGEDOWN - oBrowse:PageDown() + oBrowse:pageDown() case nKey == K_SBLINELEFT - oBrowse:Left() + oBrowse:left() case nKey == K_SBLINERIGHT - oBrowse:Right() + oBrowse:right() case nKey == K_SBPAGELEFT - oBrowse:Left() + oBrowse:left() case nKey == K_SBPAGERIGHT oBrowse:right() @@ -522,12 +579,12 @@ STATIC FUNCTION BrwOnEvent( oWvtBrw, cPaintID, oBrowse, nKey ) if lRet if lRefAll - oBrowse:RefreshAll() + oBrowse:refreshAll() endif - oBrowse:ForceStable() + oBrowse:forceStable() - oWvtBrw:oVBar:SetPos( OrdKeyCount(),OrdKeyNo() ) - oWvtBrw:oHBar:SetPos( oBrowse:ColCount, oBrowse:ColPos ) + oWvtBrw:oVBar:setPos( OrdKeyCount(),OrdKeyNo() ) + oWvtBrw:oHBar:setPos( oBrowse:ColCount, oBrowse:ColPos ) endif RETURN lRet