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.
This commit is contained in:
Pritpal Bedi
2011-05-28 00:37:47 +00:00
parent 52952d0073
commit fda80bb4af
2 changed files with 235 additions and 170 deletions

View File

@@ -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

View File

@@ -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( '<F3 Modal Window> <F4 Maximize> <F11 Transp++> <F12 Transp--> <Thread'+str(Hb_ThreadID(),3)+'>',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( '<F3 Modal Window> <F4 Maximize> <F11 Transp++> <F12 Transp--> <Thread'+str(Hb_ThreadID(),3)+'>',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( '<F3 Modal Window> <F4 Maximize> <F11 Transp++> <F12 Transp--> <Thread'+str(Hb_ThreadID(),3)+'>',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