2010-06-28 19:04 UTC-0800 Pritpal Bedi (bedipritpal@hotmail.com)

* contrib/hbxbp/xbpbrowse.prg
    % Rearrangement of code. Was calculating rows console based.

  * contrib/hbide/idedocks.prg
    % Minor.

  * contrib/hbide/idebrowse.prg
    + Implemented: browse and corresponding form view of a table,
                   wrapped inside splitters.
                   Multiple tables are presented in vertical splitters
                   and form view is presented in horizontal splitter.
      ; NOTE: still work in progress. But proof of concept is 
              already working.
This commit is contained in:
Pritpal Bedi
2010-06-29 02:09:39 +00:00
parent e41a36f2bf
commit bf251d5bd7
4 changed files with 157 additions and 86 deletions

View File

@@ -16,6 +16,21 @@
The license applies to all entries newer than 2009-04-28.
*/
2010-06-28 19:04 UTC-0800 Pritpal Bedi (bedipritpal@hotmail.com)
* contrib/hbxbp/xbpbrowse.prg
% Rearrangement of code. Was calculating rows console based.
* contrib/hbide/idedocks.prg
% Minor.
* contrib/hbide/idebrowse.prg
+ Implemented: browse and corresponding form view of a table,
wrapped inside splitters.
Multiple tables are presented in vertical splitters
and form view is presented in horizontal splitter.
; NOTE: still work in progress. But proof of concept is
already working.
2010-06-28 21:37 UTC+0200 Viktor Szakats (harbour.01 syenar.hu)
* utils/hbformat/Makefile
* utils/hbi18n/Makefile

View File

@@ -95,6 +95,7 @@ CLASS IdeBrowseManager INHERIT IdeObject
DATA aItems INIT {}
DATA oPanel
DATA qLayout
DATA qVSplitter
METHOD new( oIde )
METHOD create( oIde )
@@ -128,6 +129,10 @@ METHOD IdeBrowseManager:create( oIde )
::qLayout:setContentsMargins( 0,0,0,0 )
::qLayout:setSpacing( 2 )
::qVSplitter := QSplitter():new()
::qVSplitter:setOrientation( Qt_Vertical )
::qLayout:addWidget( ::qVSplitter )
RETURN Self
/*----------------------------------------------------------------------*/
@@ -169,7 +174,7 @@ METHOD IdeBrowseManager:addTable( cFileDBF, cAlias, nRow, nCol )
oBrw:cAlias := cAlias
oBrw:create()
::qLayout:addWidget( oBrw:oWnd:oWidget )
::qVSplitter:addWidget( oBrw:oWnd:oWidget )
aadd( ::aItems, oBrw )
@@ -186,6 +191,10 @@ CLASS IdeBrowse INHERIT IdeObject
DATA oWnd
DATA oBrw
DATA qLayout
DATA qForm
DATA qFLayout
DATA qSplitter
DATA aForm INIT {}
DATA nType INIT BRW_TYPE_DBF
DATA cAlias INIT ""
@@ -217,6 +226,7 @@ CLASS IdeBrowse INHERIT IdeObject
METHOD next()
METHOD previous()
METHOD activated()
METHOD buildForm()
ENDCLASS
@@ -287,6 +297,10 @@ METHOD IdeBrowse:create( oIde )
::buildBrowser()
::buildColumns()
::buildForm()
::oBrw:configure()
::oBrw:forceStable()
RETURN Self
@@ -294,6 +308,7 @@ METHOD IdeBrowse:create( oIde )
METHOD IdeBrowse:activated()
HB_TRACE( HB_TR_ALWAYS, "ACTIVATED" )
::oQScintillaDock:oWidget:setWindowTitle( ::cTable )
RETURN Self
@@ -305,18 +320,24 @@ METHOD IdeBrowse:buildBrowser()
oWnd := XbpWindow():new()
oWnd:oWidget := QWidget():new()
//oWnd:oWidget:resize( 600,300 )
//oWnd:oWidget:setWindowFlags( Qt_Sheet )
qLayout := QVBoxLayout():new()
qLayout := QHBoxLayout():new()
oWnd:oWidget:setLayout( qLayout )
qLayout:setContentsMargins( 0,0,0,0 )
qLayout:setSpacing( 2 )
::qSplitter := QSplitter():new()
::qSplitter:setOrientation( Qt_Horizontal )
qLayout:addWidget( ::qSplitter )
/* Browse View */
oXbpBrowse := XbpBrowse():new():create( oWnd, , { 0,0 }, oWnd:currentSize() )
oXbpBrowse:setFontCompoundName( "10.Courier" )
qLayout:addWidget( oXbpBrowse:oWidget )
::qSplitter:addWidget( oXbpBrowse:oWidget )
//qLayout:addWidget( oXbpBrowse:oWidget )
oXbpBrowse:cursorMode := ::nCursorType
@@ -331,9 +352,15 @@ METHOD IdeBrowse:buildBrowser()
oXbpBrowse:goPosBlock := {|n| ::goto( n ) }
oXbpBrowse:phyPosBlock := {| | ::recNo() }
//oXbpBrowse:connectEvent( oXbpBrowse:oWidget, QEvent_FocusIn, {|| ::execE} )
oXbpBrowse:setInputFocus := {|| ::activated() }
/* Form View */
::qForm := QWidget():new()
::qFLayout := QFormLayout():new()
::qForm:setLayout( ::qFLayout )
::qSplitter:addWidget( ::qForm )
::qLayout := qLayout
::oWnd := oWnd
::oBrw := oXbpBrowse
@@ -342,6 +369,25 @@ METHOD IdeBrowse:buildBrowser()
/*----------------------------------------------------------------------*/
METHOD IdeBrowse:buildForm()
LOCAL a_, qLbl, qEdit
IF ::nType == BRW_TYPE_DBF
FOR EACH a_ IN ::aStruct
qLbl := QLabel():new()
qLbl:setText( a_[ 1 ] )
qEdit := QLineEdit():new()
::qFLayout:addRow( qLbl, qEdit )
aadd( ::aForm, { qLbl, qEdit } )
NEXT
ELSE
ENDIF
RETURN Self
/*----------------------------------------------------------------------*/
METHOD IdeBrowse:dataLink( nField )
LOCAL bBlock

View File

@@ -231,7 +231,6 @@ METHOD IdeDocks:buildDialog()
::oIde:oDlg := XbpDialog():new()
::oDlg:icon := hbide_image( "hbide" )
::oDlg:title := "Harbour IDE"
// ::oDlg:qtObject := HbQtUI():new( hbide_uic( "mainwindow" ) ):build()
::oDlg:qtObject := hbide_getUI( "mainwindow" )
::oDlg:create( , , , , , .f. )

View File

@@ -436,6 +436,7 @@ EXPORTED:
DATA nRightFrozen INIT 0
METHOD destroy()
METHOD countRows()
ENDCLASS
@@ -556,6 +557,7 @@ METHOD XbpBrowse:buildRightFreeze()
/*----------------------------------------------------------------------*/
METHOD XbpBrowse:create( oParent, oOwner, aPos, aSize, aPresParams, lVisible )
LOCAL qRect
::xbpWindow:create( oParent, oOwner, aPos, aSize, aPresParams, lVisible )
@@ -660,10 +662,16 @@ METHOD XbpBrowse:create( oParent, oOwner, aPos, aSize, aPresParams, lVisible )
ENDIF
::oParent:AddChild( SELF )
::oFooterView:hide()
/* Viewport */
::oViewport:configure( ::oTableView:viewport() )
::oFooterView:hide()
::oWidget:installEventFilter( ::pEvents )
::connectEvent( ::oWidget, QEvent_Resize, {|| ::execSlot( 2001 ) } )
qRect := QRect():from( ::oWidget:geometry() )
::oWidget:setGeometry( qRect )
RETURN Self
@@ -898,6 +906,12 @@ METHOD XbpBrowse:execSlot( nEvent, p1, p2, p3 )
CASE nEvent == 122 /* Footer Section Resized */
::oHeaderView:resizeSection( p1, p3 )
CASE nEvent == 2001
::oHeaderView:resizeSection( 0, ::oHeaderView:sectionSize( 0 )+1 )
::oHeaderView:resizeSection( 0, ::oHeaderView:sectionSize( 0 )-1 )
::nConfigure := 9
::doConfigure()
ENDCASE
RETURN Self
@@ -1341,6 +1355,37 @@ METHOD XbpBrowse:setLeftFrozen( aColFrozens )
/*----------------------------------------------------------------------*/
METHOD countRows() CLASS XbpBrowse
LOCAL nHHdr, nHFtr, nHCell, nHView, nHAvl
nHHdr := nHFtr := nHCell := 0
HB_TRACE( HB_TR_ALWAYS, 0, ::nRowsInView )
IF .t.
nHView := ::oViewport:height()
IF ::oHeaderView:isVisible()
aeval( ::columns, {|o| nHHdr := max( nHHdr, o:hHeight ) } )
ENDIF
IF ::oFooterView:isVisible()
aeval( ::columns, {|o| nHFtr := max( nHFtr, o:fHeight ) } )
ENDIF
/* Data Rows */
aeval( ::columns, {|o| nHCell := max( nHCell, o:dHeight ) } )
nHAvl := nHView - nHHdr - nHFtr
::nRowsInView := Int( nHAvl / nHCell )
IF ( nHAvl % nHCell ) > ( nHCell / 2 )
::nRowsInView++
ENDIF
ENDIF
HB_TRACE( HB_TR_ALWAYS, 1, ::nRowsInView )
RETURN ::nRowsInView
/*----------------------------------------------------------------------*/
METHOD doConfigure() CLASS XbpBrowse
LOCAL oCol
LOCAL aCol, aVal, aValA
@@ -1378,28 +1423,6 @@ METHOD doConfigure() CLASS XbpBrowse
nWidth := 256
ENDIF
#if 0
cColSep := oCol:colSep
IF cColSep == NIL
cColSep := ::cColSep
ENDIF
cHeadSep := oCol:headSep
IF !ISCHARACTER( cHeadSep ) .OR. cHeadSep == ""
cHeadSep := ::cHeadSep
IF !ISCHARACTER( cHeadSep )
cHeadSep := ""
ENDIF
ENDIF
cFootSep := oCol:footSep
IF !ISCHARACTER( cFootSep ) .OR. cFootSep == ""
cFootSep := ::cFootSep
IF !ISCHARACTER( cFootSep )
cFootSep := ""
ENDIF
ENDIF
#endif
cColSep := ""
cHeadSep := ""
cFootSep := ""
@@ -1500,62 +1523,6 @@ METHOD doConfigure() CLASS XbpBrowse
ENDIF
NEXT
nRowCount := ::rowCount
IF nRowCount == 0
_GENLIMITRTE()
ENDIF
/* create new record buffer */
ASize( ::aCellStatus , nRowCount )
ASize( ::aDispStatus , nRowCount )
ASize( ::aCellValues , nRowCount )
ASize( ::aCellValuesA, nRowCount )
ASize( ::aCellColors , nRowCount )
AFill( ::aCellStatus , .F. )
AFill( ::aDispStatus , .T. )
FOR EACH aVal, aValA, aCol IN ::aCellValues, ::aCellValuesA, ::aCellColors
IF aVal == NIL
aVal := Array( nColCount )
ELSE
ASize( aVal, nColCount )
ENDIF
IF aValA == NIL
aValA := Array( nColCount )
ELSE
ASize( aValA, nColCount )
ENDIF
IF aCol == NIL
aCol := Array( nColCount )
ELSE
ASize( aCol, nColCount )
ENDIF
NEXT
::lStable := .F.
::lFrames := .T.
/* Clipper does not set refreshAll flag in Configure */
/* ::lRefresh := .T. */
::nLastRow := nRowCount
::nLastScroll := 0
/* CA-Cl*pper update visible columns here but without
* colPos repositioning. [druzus]
*/
#if 0
_SETVISIBLE( ::aColData, _TBR_COORD( ::n_Right ) - _TBR_COORD( ::n_Left ) + 1, ;
@::nFrozen, @::nLeftVisible, @::nRightVisible )
#endif
::nLastPos := 0
IF ::nRowPos > nRowCount
::nRowPos := nRowCount
ELSEIF ::nRowPos < 1
::nRowPos := 1
ENDIF
/* Qt Specifics follows */
//
IF !( ::lHScroll )
@@ -1691,6 +1658,50 @@ METHOD doConfigure() CLASS XbpBrowse
ENDIF
NEXT
nRowCount := ::rowCount
IF nRowCount == 0
_GENLIMITRTE()
ENDIF
/* create new record buffer */
ASize( ::aCellStatus , nRowCount )
ASize( ::aDispStatus , nRowCount )
ASize( ::aCellValues , nRowCount )
ASize( ::aCellValuesA, nRowCount )
ASize( ::aCellColors , nRowCount )
AFill( ::aCellStatus , .F. )
AFill( ::aDispStatus , .T. )
FOR EACH aVal, aValA, aCol IN ::aCellValues, ::aCellValuesA, ::aCellColors
IF aVal == NIL
aVal := Array( nColCount )
ELSE
ASize( aVal, nColCount )
ENDIF
IF aValA == NIL
aValA := Array( nColCount )
ELSE
ASize( aValA, nColCount )
ENDIF
IF aCol == NIL
aCol := Array( nColCount )
ELSE
ASize( aCol, nColCount )
ENDIF
NEXT
::lStable := .F.
::lFrames := .T.
::nLastRow := nRowCount
::nLastScroll := 0
::nLastPos := 0
IF ::nRowPos > nRowCount
::nRowPos := nRowCount
ELSEIF ::nRowPos < 1
::nRowPos := 1
ENDIF
::setHorzScrollBarRange()
/* Inform Qt about number of rows and columns browser implements */