2012-06-11 12:56 UTC-0800 Pritpal Bedi (bedipritpal@hotmail.com)
+ contrib/hbqt/tests/dbfbrowser.prg
+ contrib/hbqt/tests/dbfbrowserclass.prg
+ Added: Table browser demo code by Bacco, thank you.
This code works absolutely flawless both with current and
__HBQT_REVAMP__ protocols.
This commit is contained in:
@@ -16,6 +16,13 @@
|
||||
The license applies to all entries newer than 2009-04-28.
|
||||
*/
|
||||
|
||||
2012-06-11 12:56 UTC-0800 Pritpal Bedi (bedipritpal@hotmail.com)
|
||||
+ contrib/hbqt/tests/dbfbrowser.prg
|
||||
+ contrib/hbqt/tests/dbfbrowserclass.prg
|
||||
+ Added: Table browser demo code by Bacco, thank you.
|
||||
This code works absolutely flawless both with current and
|
||||
__HBQT_REVAMP__ protocols.
|
||||
|
||||
2012-06-11 21:06 UTC+0200 Viktor Szakats (harbour syenar.net)
|
||||
* contrib/hbtpathy/telepath.prg
|
||||
* using hb_default() instead of rolling it manually
|
||||
|
||||
89
harbour/contrib/hbqt/tests/dbfbrowser.prg
Normal file
89
harbour/contrib/hbqt/tests/dbfbrowser.prg
Normal file
@@ -0,0 +1,89 @@
|
||||
/*
|
||||
* $Id$
|
||||
*/
|
||||
|
||||
/*
|
||||
* Harbour Project source code:
|
||||
*
|
||||
* Copyright 2012 Carlos Bacco <carlosbacco at gmail.com>
|
||||
* www - http://harbour-project.org
|
||||
*
|
||||
*/
|
||||
|
||||
#include "hbqtgui.ch"
|
||||
#include "dbfbrowserclass.prg"
|
||||
|
||||
|
||||
PROCEDURE Main()
|
||||
LOCAL oWid
|
||||
LOCAL oButton1
|
||||
LOCAL oButton2
|
||||
LOCAL oTable1
|
||||
LOCAL oLay1
|
||||
LOCAL oLay2
|
||||
|
||||
Set( _SET_EXACT, .T. )
|
||||
|
||||
oWid := QWidget()
|
||||
oWid:setWindowTitle( "DBF Browser" )
|
||||
|
||||
oTable1 := QDBFBrowser()
|
||||
|
||||
// NOTE: QDBFBrowser inherits QTableView, so we can use the methods below.
|
||||
oTable1:setAlternatingRowColors( .T. )
|
||||
oTable1:setShowGrid( .F. )
|
||||
oTable1:setTabKeyNavigation( .F. )
|
||||
oTable1:verticalHeader():setSelectionBehavior( QAbstractItemView_SelectRows )
|
||||
oTable1:verticalHeader():setSelectionMode( QAbstractItemView_SingleSelection )
|
||||
// ENDNOTE
|
||||
|
||||
oButton1 := QPushButton()
|
||||
oButton1:setText( "Open DBF" )
|
||||
oButton1:connect( "clicked()", {|| OpenDBF( oWid, oTable1 ) } )
|
||||
|
||||
oButton2 := QPushButton()
|
||||
oButton2:setText( "Close DBF" )
|
||||
oButton2:connect( "clicked()", {|| CloseDBF( oTable1 ) } )
|
||||
|
||||
|
||||
oLay1 := QVBoxLayout( oWid )
|
||||
oLay1:addWidget( oTable1 )
|
||||
olay1:addLayout( oLay2 := QHBoxLayout() )
|
||||
oLay2:addWidget( oButton1 )
|
||||
oLay2:addWidget( oButton2 )
|
||||
|
||||
oWid:Show()
|
||||
QApplication():exec()
|
||||
RETURN
|
||||
|
||||
|
||||
PROCEDURE OpenDBF( oWid, oTable )
|
||||
STATIC cDir := "."
|
||||
LOCAL cFile
|
||||
|
||||
cFile := QFileDialog():getOpenFileName( oWid, "Open file", cDir, "DBF files (*.dbf);;All files (*.*)" )
|
||||
|
||||
IF cFile == ""
|
||||
RETURN
|
||||
END
|
||||
|
||||
cDir := hb_FNameDir( cFile ) // To remember last used dir
|
||||
|
||||
CloseDBF( oTable )
|
||||
BEGIN SEQUENCE WITH {||.F.}
|
||||
DBUseArea( .T., NIL, cFile, NIL, .F., .F. )
|
||||
END SEQUENCE
|
||||
|
||||
If Used()
|
||||
oTable:attach()
|
||||
End
|
||||
RETURN
|
||||
|
||||
PROCEDURE CloseDBF( oTable )
|
||||
oTable:detach()
|
||||
DBCloseArea()
|
||||
RETURN
|
||||
|
||||
|
||||
#include "dbfbrowserclass.prg"
|
||||
|
||||
185
harbour/contrib/hbqt/tests/dbfbrowserclass.prg
Normal file
185
harbour/contrib/hbqt/tests/dbfbrowserclass.prg
Normal file
@@ -0,0 +1,185 @@
|
||||
/*
|
||||
* $Id$
|
||||
*/
|
||||
|
||||
/*
|
||||
* Harbour Project source code:
|
||||
*
|
||||
* Copyright 2012 Carlos Bacco <carlosbacco at gmail.com>
|
||||
* www - http://harbour-project.org
|
||||
*
|
||||
*/
|
||||
|
||||
#ifndef HB_QDBFBROWSER_CH_
|
||||
#define HB_QDBFBROWSER_CH_
|
||||
|
||||
#include "hbclass.ch"
|
||||
|
||||
|
||||
FUNCTION QDBFBrowser( ... )
|
||||
RETURN B2_QDBFBrowser():new( ... ):init()
|
||||
|
||||
CREATE CLASS B2QDBFBrowser INHERIT HB_QTableView FUNCTION B2_QDBFBrowser
|
||||
METHOD init()
|
||||
METHOD attach()
|
||||
METHOD detach()
|
||||
|
||||
VAR oModel
|
||||
VAR nArea INIT 0
|
||||
VAR aStru
|
||||
|
||||
VAR oHack1
|
||||
ENDCLASS
|
||||
|
||||
METHOD init()
|
||||
::oModel := HBQAbstractItemModel( {| t, r, x, y| B2_QDBFBrowse( Self, t, r, x, y ) } )
|
||||
Self:setModel( ::oModel )
|
||||
RETURN Self
|
||||
|
||||
METHOD B2QDBFBrowser:attach()
|
||||
If ( ::nArea := Select() ) > 0
|
||||
::aStru := DBStruct()
|
||||
::oModel:reset()
|
||||
::oHack1 := ::itemDelegate() // Intermediate variable needed to avoid destroying the :connect()
|
||||
::oHack1:connect( "commitData(QWidget*)", {|oWidget| B2_QDBFCommit( Self, oWidget ) } )
|
||||
End
|
||||
RETURN NIL
|
||||
|
||||
METHOD B2QDBFBrowser:detach()
|
||||
::oHack1 := ::itemDelegate() // Intermediate variable needed to avoid destroying the :connect()
|
||||
::oHack1:disconnect( "commitData(QWidget*)" )
|
||||
::nArea := 0
|
||||
::oModel:reset()
|
||||
RETURN NIL
|
||||
|
||||
|
||||
PROCEDURE B2_QDBFCommit( o, oWidget )
|
||||
LOCAL oIndex := o:currentIndex()
|
||||
LOCAL nCX := oIndex:column()
|
||||
LOCAL nCY := oIndex:row()
|
||||
Local nOldArea := Select()
|
||||
LOCAL cData := oWidget:property( "text" ):toString()
|
||||
|
||||
DBSelectArea( o:nArea )
|
||||
DBGoto( nCY + 1 )
|
||||
|
||||
SWITCH o:aStru[ nCX + 1, 2 ]
|
||||
CASE "C"
|
||||
FieldPut( nCX + 1, AllTrim( cData ) )
|
||||
EXIT
|
||||
CASE "N"
|
||||
FieldPut( nCX + 1, Val( cData ) )
|
||||
EXIT
|
||||
CASE "L"
|
||||
FieldPut( nCX + 1, Left( cData, 1 ) $ "YyTt" )
|
||||
EXIT
|
||||
CASE "D"
|
||||
FieldPut( nCX + 1, CToD( cData ) )
|
||||
EXIT
|
||||
ENDSWITCH
|
||||
|
||||
DBSelectArea( nOldArea )
|
||||
RETURN
|
||||
|
||||
|
||||
FUNCTION B2_QDBFBrowse( o, nT, nRole, nX, nY )
|
||||
LOCAL xRet
|
||||
LOCAL nOldArea := Select()
|
||||
|
||||
If o:nArea == 0
|
||||
RETURN NIL
|
||||
END
|
||||
|
||||
SWITCH nT
|
||||
CASE HBQT_QAIM_flags
|
||||
RETURN Qt_ItemIsEnabled + Qt_ItemIsSelectable + Qt_ItemIsEditable;
|
||||
|
||||
CASE HBQT_QAIM_data
|
||||
|
||||
SWITCH nRole
|
||||
CASE Qt_DisplayRole
|
||||
DBSelectArea( o:nArea )
|
||||
DBGoto( nY + 1 )
|
||||
|
||||
xRet := "?"
|
||||
SWITCH o:aStru[ nX + 1, 2 ]
|
||||
CASE "C"
|
||||
xRet := AllTrim( FieldGet( nX + 1 ) )
|
||||
EXIT
|
||||
CASE "N"
|
||||
xRet := hb_NToS( FieldGet( nX + 1 ) )
|
||||
EXIT
|
||||
CASE "L"
|
||||
xRet := IIf( FieldGet( nX + 1 ), "Yes", "No" )
|
||||
EXIT
|
||||
CASE "D"
|
||||
xRet := DToC( FieldGet( nX + 1 ) )
|
||||
EXIT
|
||||
ENDSWITCH
|
||||
|
||||
DBSelectArea( nOldArea )
|
||||
RETURN xRet
|
||||
|
||||
CASE Qt_EditRole /* Here we can specify different formats for editing*/
|
||||
DBSelectArea( o:nArea )
|
||||
DBGoto( nY + 1 )
|
||||
|
||||
xRet := ""
|
||||
SWITCH o:aStru[ nX + 1, 2 ]
|
||||
CASE "C"
|
||||
xRet := AllTrim( FieldGet( nX + 1 ) )
|
||||
EXIT
|
||||
CASE "N"
|
||||
xRet := hb_NToS( FieldGet( nX + 1 ) )
|
||||
EXIT
|
||||
CASE "L"
|
||||
xRet := IIf( FieldGet( nX + 1 ), "Y", "N" )
|
||||
EXIT
|
||||
CASE "D"
|
||||
xRet := DToC( FieldGet( nX + 1 ) )
|
||||
EXIT
|
||||
ENDSWITCH
|
||||
|
||||
DBSelectArea( nOldArea )
|
||||
RETURN xRet
|
||||
|
||||
CASE Qt_TextAlignmentRole
|
||||
SWITCH o:aStru[ nX + 1, 2 ]
|
||||
CASE "C"
|
||||
RETURN Qt_AlignVCenter + Qt_AlignLeft
|
||||
CASE "N"
|
||||
RETURN Qt_AlignVCenter + Qt_AlignRight
|
||||
ENDSWITCH
|
||||
RETURN Qt_AlignCenter
|
||||
ENDSWITCH
|
||||
RETURN NIL
|
||||
|
||||
CASE HBQT_QAIM_headerData
|
||||
SWITCH nRole
|
||||
CASE Qt_DisplayRole
|
||||
IF nX == Qt_Horizontal
|
||||
RETURN o:aStru[ nY + 1, 1 ]
|
||||
ELSE
|
||||
RETURN hb_NToS( nY + 1 )
|
||||
ENDIF
|
||||
|
||||
CASE Qt_TextAlignmentRole
|
||||
IF nX == Qt_Horizontal
|
||||
RETURN Qt_AlignCenter
|
||||
ELSE
|
||||
RETURN Qt_AlignVCenter + Qt_AlignRight
|
||||
ENDIF
|
||||
|
||||
ENDSWITCH
|
||||
RETURN NIL
|
||||
|
||||
CASE HBQT_QAIM_rowCount
|
||||
RETURN LastRec()
|
||||
|
||||
CASE HBQT_QAIM_columnCount
|
||||
RETURN Len( o:aStru )
|
||||
ENDSWITCH
|
||||
|
||||
RETURN NIL
|
||||
|
||||
#endif /* HB_QDBFBROWSER_CH_ */
|
||||
Reference in New Issue
Block a user