From fda80bb4afbf138f6236187f9248e87730b5df4b Mon Sep 17 00:00:00 2001 From: Pritpal Bedi Date: Sat, 28 May 2011 00:37:47 +0000 Subject: [PATCH] 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. --- harbour/ChangeLog | 8 + harbour/contrib/gtwvg/tests/wvgtbrowser.prg | 397 +++++++++++--------- 2 files changed, 235 insertions(+), 170 deletions(-) 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