2010-04-16 07:49 UTC-0800 Pritpal Bedi (pritpal@vouchcac.com)

* contrib/hbqt/qth/QApplication.qth
  * contrib/hbqt/qth/QLayout.qth
    
  * contrib/hbqt/generator/hbqtgen.prg
  * contrib/hbqt/hbqt_hbslots.cpp

  * contrib/hbxbp/hbpprocess.prg
  * contrib/hbxbp/xbpgeneric.prg
  * contrib/hbxbp/xbprtf.prg
  * contrib/hbxbp/xbpstatic.prg

  * contrib/hbide/hbide.prg
  * contrib/hbide/idedocks.prg
  * contrib/hbide/ideeditor.prg
  * contrib/hbide/idefindreplace.prg
  * contrib/hbide/idefunctions.prg
  * contrib/hbide/idemisc.prg
  * contrib/hbide/ideprojmanager.prg
  * contrib/hbide/ideshortcuts.prg
  * contrib/hbide/idetools.prg

    + This commit includes Francesco Perillo's patch, after applying some 
      formatting and leaving what did not worked.
    + Includes Istvan's concept of child detachment, but not made active still.
    - Deleted many objects which were created in early days of hbIDE development.
    + Changed the way QApplication's init/exit procedures were implemented.
      Now the behavior is accurate.
    + Applied some more control over object destruction placement.
    + Plus a lot of optimizations I cannot jot down exactly.

    Basically, this commit aims at locating the GPF at exit. Now instead of 
    GPF, we receive two RTE's at the end, if exiting hbIDE at the quick 
    succession. But if you have worked into it for few seconds, it exits 
    normally. Please test.

    David, the QPixmap bug in hbXBP on OS2 was a bug in hbXBP and is fixed.
    You can test it again to verify if I am correct.
This commit is contained in:
Pritpal Bedi
2010-04-16 15:04:28 +00:00
parent 0a890614e5
commit f4e7033a0c
18 changed files with 296 additions and 216 deletions

View File

@@ -17,6 +17,45 @@
past entries belonging to author(s): Viktor Szakats.
*/
2010-04-16 07:49 UTC-0800 Pritpal Bedi (pritpal@vouchcac.com)
* contrib/hbqt/qth/QApplication.qth
* contrib/hbqt/qth/QLayout.qth
* contrib/hbqt/generator/hbqtgen.prg
* contrib/hbqt/hbqt_hbslots.cpp
* contrib/hbxbp/hbpprocess.prg
* contrib/hbxbp/xbpgeneric.prg
* contrib/hbxbp/xbprtf.prg
* contrib/hbxbp/xbpstatic.prg
* contrib/hbide/hbide.prg
* contrib/hbide/idedocks.prg
* contrib/hbide/ideeditor.prg
* contrib/hbide/idefindreplace.prg
* contrib/hbide/idefunctions.prg
* contrib/hbide/idemisc.prg
* contrib/hbide/ideprojmanager.prg
* contrib/hbide/ideshortcuts.prg
* contrib/hbide/idetools.prg
+ This commit includes Francesco Perillo's patch, after applying some
formatting and leaving what did not worked.
+ Includes Istvan's concept of child detachment, but not made active still.
- Deleted many objects which were created in early days of hbIDE development.
+ Changed the way QApplication's init/exit procedures were implemented.
Now the behavior is accurate.
+ Applied some more control over object destruction placement.
+ Plus a lot of optimizations I cannot jot down exactly.
Basically, this commit aims at locating the GPF at exit. Now instead of
GPF, we receive two RTE's at the end, if exiting hbIDE at the quick
succession. But if you have worked into it for few seconds, it exits
normally. Please test.
David, the QPixmap bug in hbXBP on OS2 was a bug in hbXBP and is fixed.
You can test it again to verify if I am correct.
2010-04-16 07:28 UTC-0800 Pritpal Bedi (pritpal@vouchcac.com)
* contrib/hbqt/qtcore/*.cpp
* contrib/hbqt/qtgui/*.cpp

View File

@@ -160,7 +160,6 @@ CLASS HbIde
DATA qFindDlg
DATA qCursor
DATA qFontWrkProject
DATA qBrushWrkProject
DATA qProcess
@@ -332,7 +331,7 @@ HB_TRACE( HB_TR_ALWAYS, "HbIde:create( cProjIni )", "#Params=" )
qSplash:setPixmap( qPixmap )
qSplash:show()
::showApplicationCursor( Qt_BusyCursor )
QApplication():processEvents()
QApplication():new():processEvents()
/* Initiate the place holders */
::aINI := array( INI_SECTIONS_COUNT )
@@ -433,10 +432,6 @@ HB_TRACE( HB_TR_ALWAYS, "HbIde:create( cProjIni )", "#Params=" )
/* Home Implementation */
::oHM := IdeHome():new():create( Self )
/* Just to spare some GC calls */
::qCursor := QTextCursor():new()
::qBrushWrkProject := QBrush():new( "QColor", QColor():new( 255,0,0 ) )
/* Fill various elements of the IDE */
::cWrkProject := ::aINI[ INI_HBIDE, CurrentProject ]
::oPM:populate()
@@ -452,10 +447,6 @@ HB_TRACE( HB_TR_ALWAYS, "HbIde:create( cProjIni )", "#Params=" )
/* Set some last settings */
::oPM:setCurrentProject( ::cWrkProject, .f. )
/* Set components Sizes */
* ::setSizeByIni( ::oProjTree:oWidget, ProjectTreeGeometry )
* ::setSizeByIni( ::oEditTree:oWidget, ProjectTreeGeometry )
/* Restore Settings */
hbide_restSettings( Self )
/* Again to be displayed in Statusbar */
@@ -485,7 +476,7 @@ HB_TRACE( HB_TR_ALWAYS, "HbIde:create( cProjIni )", "#Params=" )
IF seconds() > n + 10
EXIT
ENDIF
QApplication():processEvents()
QApplication():new():processEvents()
ENDDO
#endif
@@ -505,7 +496,6 @@ HB_TRACE( HB_TR_ALWAYS, "HbIde:create( cProjIni )", "#Params=" )
::showApplicationCursor()
qSplash:close()
//qSplash := NIL
/* Load tags last tagged projects */
::oFN:loadTags( ::aINI[ INI_TAGGEDPROJECTS ] )
@@ -587,8 +577,8 @@ HB_TRACE( HB_TR_ALWAYS, "HbIde:create( cProjIni )", "#Params=" )
::oDlg:destroy()
::oAC:destroy()
::qCursor := NIL
::oFont := NIL
::oFont := NIL
qSplash := NIL
HB_TRACE( HB_TR_ALWAYS, " " )
HB_TRACE( HB_TR_ALWAYS, "After ::oDlg:destroy()", memory( 1001 ) )
@@ -642,13 +632,13 @@ METHOD HbIde:parseParams()
METHOD HbIde:showApplicationCursor( nCursor )
STATIC qCrs
LOCAL qCrs
IF empty( nCursor )
QApplication():restoreOverrideCursor()
QApplication():new():restoreOverrideCursor()
ELSE
qCrs := QCursor():new( nCursor )
QApplication():setOverrideCursor( qCrs )
QApplication():new():setOverrideCursor( qCrs )
ENDIF
RETURN Self

View File

@@ -152,6 +152,9 @@ METHOD IdeDocks:create( oIde )
METHOD IdeDocks:destroy()
LOCAL qTBtn
::oIde:oProjRoot := NIL
::oIde:oOpenedSources := NIL
::disconnect( ::oOutputResult:oWidget , "copyAvailable(bool)" )
::disconnect( ::oEnvironDock:oWidget , "visibilityChanged(bool)" )
@@ -470,10 +473,7 @@ METHOD IdeDocks:buildSearchReplaceWidget()
METHOD IdeDocks:buildToolBarPanels()
LOCAL s, qTBtn, a_, aBtns, qAct
STATIC qSize
qSize := QSize():new( 20,20 )
LOCAL qSize := QSize():new( 20,20 )
/* Toolbar Panels */

View File

@@ -220,6 +220,8 @@ METHOD IdeEditsManager:destroy()
LOCAL a_
::disconnect( ::qCompleter, "activated(QString)" )
::oIde:qCompModel := NIL
::oIde:qProtoList := NIL
::oIde:qCompleter := NIL
FOR EACH a_ IN ::aActions
@@ -978,11 +980,9 @@ CLASS IdeEditor INHERIT IdeObject
DATA qHLayout
DATA qLabel
DATA nnRow INIT -99
DATA qPoint INIT QPoint():new()
DATA qEvents
DATA qSlots
DATA qMarkLayoutOld
// DATA qSlots
METHOD new( oIde, cSourceFile, nPos, nHPos, nVPos, cTheme, cView )
METHOD create( oIde, cSourceFile, nPos, nHPos, nVPos, cTheme, cView )
@@ -1028,7 +1028,7 @@ METHOD IdeEditor:new( oIde, cSourceFile, nPos, nHPos, nVPos, cTheme, cView )
METHOD IdeEditor:create( oIde, cSourceFile, nPos, nHPos, nVPos, cTheme, cView )
LOCAL cFileTemp
::qSlots := HBSlots():new()
//::qSlots := HBSlots():new()
DEFAULT oIde TO ::oIde
DEFAULT cSourceFile TO ::sourceFile
@@ -1390,23 +1390,11 @@ CLASS IdeEdit INHERIT IdeObject
DATA nMaxDigits INIT 5 // Tobe
DATA nMaxRows INIT 100
DATA nLastLine INIT -99
DATA qBlockFormat INIT QTextBlockFormat():new()
DATA nCurLineNo INIT 0
DATA nPrevLineNo INIT -1
DATA qPoint INIT QPoint():new( 0,0 )
DATA qBrushCL INIT QBrush():new( "QColor", QColor():new( 240,240,240 ) )
DATA qBrushNR INIT QBrush():new( "QColor", QColor():new( 255,255,255 ) )
DATA qBrushMark INIT QBrush():new( "QColor", QColor():new( 0,255,255 ) )
DATA qActionTab
DATA qLastCursor INIT QTextCursor():new()
DATA qSelColor INIT QColor():new( 255,0,255 )
DATA qCursorMark
DATA qMarkUData INIT HBQTextBlockUserData():new()
DATA aBookMarks INIT {}
DATA qSlots
DATA lModified INIT .F.
DATA lIndentIt INIT .f.
DATA lUpdatePrevWord INIT .f.

View File

@@ -610,8 +610,6 @@ METHOD IdeFindInFiles:destroy()
LOCAL qItem
IF !empty( ::oUI )
::disconnect( ::oUI:oWidget, "rejected()" )
FOR EACH qItem IN ::aItems
qItem := NIL
NEXT
@@ -1216,7 +1214,7 @@ METHOD IdeFindInFiles:showLog( nType, cMsg, aLines )
qCursor:movePosition( QTextCursor_Down )
::oUI:q_editResults:setTextCursor( qCursor )
QApplication():processEvents()
QApplication():new():processEvents()
RETURN Self
/*----------------------------------------------------------------------*/

View File

@@ -194,8 +194,9 @@ METHOD IdeFunctions:execEvent( nMode, p )
CASE nMode == tableFuncList_itemSelectionChanged
n := ::oUI:q_tableFuncList:currentRow()
::oUI:q_editSyntax:setText( ::aList[ n + 1, 2 ] )
IF n >= 0
::oUI:q_editSyntax:setText( ::aList[ n + 1, 2 ] )
ENDIF
ENDCASE
RETURN Self
@@ -462,7 +463,7 @@ METHOD IdeFunctions:loadTags( aProjects )
ENDIF
ENDIF
QApplication():processEvents()
QApplication():new():processEvents()
NEXT
IF lPopulate
@@ -532,7 +533,7 @@ METHOD IdeFunctions:tagProject( cProjectTitle )
ENDIF
ENDIF
QApplication():processEvents()
QApplication():new():processEvents()
NEXT
FOR EACH a_ IN aCTags
@@ -607,7 +608,7 @@ METHOD IdeFunctions:populateTable()
oTbl:setItem( n, 0, qItm )
oTbl:setRowHeight( n, 16 )
QApplication():processEvents()
QApplication():new():processEvents()
aadd( ::aItems, qItm )
n++

View File

@@ -1627,11 +1627,13 @@ FUNCTION hbide_fetchSubPaths( aPaths, cRootPath, lSubs )
/*----------------------------------------------------------------------*/
FUNCTION hbide_image( cName )
DEFAULT cName TO ""
RETURN hbide_pathToOsPath( hb_DirBase() + "resources" + "/" + cName + ".png" )
/*----------------------------------------------------------------------*/
FUNCTION hbide_uic( cName )
DEFAULT cName TO ""
RETURN hbide_pathToOsPath( hb_DirBase() + "resources" + "/" + cName + ".uic" )
/*----------------------------------------------------------------------*/

View File

@@ -896,7 +896,8 @@ METHOD IdeProjManager:setCurrentProject( cProjectName )
/* Set New Color */
IF !empty( ::cWrkProject )
IF !empty( oItem := hbide_findProjTreeItem( ::oIDE, ::cWrkProject, "Project Name" ) )
oItem:oWidget:setForeground( 0, ::qBrushWrkProject )
//oItem:oWidget:setForeground( 0, ::qBrushWrkProject )
oItem:oWidget:setForeground( 0, QBrush():new( "QColor", QColor():new( 255,0,0 ) ) )
//oItem:oWidget:setBackground( 0, ::qBrushWrkProject )
//hbide_expandChildren( ::oIDE, oItem )
::oProjTree:oWidget:setCurrentItem( oItem:oWidget )
@@ -1312,7 +1313,7 @@ METHOD IdeProjManager:finished( nExitCode, nExitStatus, oProcess )
::outputText( "<font color=red>" + "Executable could not been detected from linker output!" + "</font>" )
ELSE
cExe := alltrim( cExe )
::outputText( "<font color=blue>" + "Detected exeutable => " + cExe + " " + hb_ntos( len( cExe ) ) + "</font>" )
::outputText( "<font color=blue>" + "Detected exeutable => " + cExe + "</font>" )
ENDIF
::outputText( " " )
@@ -1334,7 +1335,8 @@ METHOD IdeProjManager:finished( nExitCode, nExitStatus, oProcess )
* 03/01/2010 - 09:24:50
*/
METHOD IdeProjManager:launchProject( cProject, cExe )
LOCAL cTargetFN, cTmp, oProject, qProcess, qStr
LOCAL cTargetFN, cTmp, oProject
LOCAL qProcess, qStr
IF empty( cProject )
cProject := ::oPM:getCurrentProject()
@@ -1384,18 +1386,23 @@ METHOD IdeProjManager:launchProject( cProject, cExe )
ELSEIF oProject:type == "Executable"
cTmp := "Launching application [ " + cTargetFN + " ]"
qProcess := QProcess():new()
qProcess:setWorkingDirectory( hbide_pathToOSPath( oProject:wrkDirectory ) )
IF !empty( oProject:launchParams )
qStr := QStringList():new()
qStr:append( oProject:launchParams )
qProcess:startDetached_1( cTargetFN, qStr )
ELSE
qProcess:startDetached_2( cTargetFN )
ENDIF
qProcess:waitForStarted()
qProcess := NIL
if .t.
qProcess := QProcess():new()
qProcess:setWorkingDirectory( hbide_pathToOSPath( oProject:wrkDirectory ) )
IF !empty( oProject:launchParams )
qStr := QStringList():new()
qStr:append( oProject:launchParams )
qProcess:startDetached_1( cTargetFN, qStr )
ELSE
qProcess:startDetached_2( cTargetFN )
ENDIF
qProcess:waitForStarted()
qProcess := NIL
else
hb_processRun( cTargetFN, , , , .t. )
endif
ELSE
cTmp := "Launching application [ " + cTargetFN + " ] ( not applicable )."

View File

@@ -257,6 +257,9 @@ METHOD IdeShortcuts:execEvent( nMode, p )
::clearDftSCuts()
::populateDftSCuts()
ENDIF
IF nRow <= len( ::aDftSCuts )
::oUI:q_tableMacros:setCurrentCell( nRow - 1, 0 )
ENDIF
ENDIF
EXIT
CASE buttonTest_clicked
@@ -297,10 +300,10 @@ METHOD IdeShortcuts:execEvent( nMode, p )
::controls2vrbls()
IF !empty( ::cName )
IF !( ::checkDuplicate( ::cKey, ::cAlt, ::cCtrl, ::cShift ) )
aadd( ::aDftSCuts, { ::cName, ::cKey, ::cAlt, ::cCtrl, ::cShift, ::cMenu, ::cBlock } )
aadd( ::aDftSCutsItms, array( 5 ) )
aadd( ::aDftSCuts, { ::cName, ::cKey, ::cAlt, ::cCtrl, ::cShift, ::cMenu, ::cBlock, ::cIcon } )
aadd( ::aDftSCutsItms, array( 6 ) )
::oUI:q_tableMacros:setRowCount( ::oUI:q_tableMacros:rowCount() + 1 )
::array2table( len( ::aDftSCuts ), { ::cName, ::cKey, ::cAlt, ::cCtrl, ::cShift, ::cMenu, ::cBlock } )
::array2table( len( ::aDftSCuts ), { ::cName, ::cKey, ::cAlt, ::cCtrl, ::cShift, ::cMenu, ::cBlock, ::cIcon } )
ELSE
MsgBox( "Current shortcut is already defined!" )
ENDIF
@@ -582,7 +585,7 @@ METHOD IdeShortcuts:populateDftSCuts()
nRow++
aadd( ::aDftSCutsItms, array( 6 ) )
::array2table( nRow, a_ )
QApplication():processEvents()
QApplication():new():processEvents()
NEXT
oTbl:setCurrentCell( 0,0 )
@@ -661,7 +664,7 @@ METHOD IdeShortcuts:test( cString, lWarn )
MsgBox( "Script compiles fine!", "Syntax checking", , , , bBlock )
ENDIF
RECOVER USING oErr
MsgBox( "Wrongly defined script, syntax is |v| ::method( v )" + oErr:description )
MsgBox( "Wrongly defined script, try: |v| ::method( v )", oErr:description )
ENDSEQUENCE
ErrorBlock( bError )

View File

@@ -146,11 +146,16 @@ METHOD IdeToolsManager:destroy()
::disconnect( qAct, "triggered(bool)" )
qAct := NIL
NEXT
FOR EACH qAct IN ::aPanelsAct
::disconnect( qAct, "triggered(bool)" )
qAct := NIL
NEXT
::disconnect( ::qToolsButton, "clicked()" )
::qToolsButton := NIL
::clearList()
::disconnect( ::qPanelsButton, "clicked()" )
::disconnect( ::oUI:q_buttonAdd , "clicked()" )
::disconnect( ::oUI:q_buttonDelete, "clicked()" )
::disconnect( ::oUI:q_buttonUp , "clicked()" )

View File

@@ -410,6 +410,8 @@ STATIC FUNCTION GenSource( cProFile, cPathIn, cPathOut, cPathDoc )
s_isObject := ascan( cls_, {|e_| lower( e_[ 1 ] ) == "qobject" .and. lower( e_[ 2 ] ) == "no"} ) == 0
/* Body */
lList := ascan( cls_, {|e_| lower( e_[ 1 ] ) == "list" .AND. lower( e_[ 2 ] ) == "yes" } ) > 0
FOR EACH s IN protos_
cOrg := s
@@ -441,7 +443,7 @@ STATIC FUNCTION GenSource( cProFile, cPathIn, cPathOut, cPathDoc )
LOOP
ENDIF
IF ParseProto( s, cWidget, @txt_, @doc_, enum_, func_ )
IF ParseProto( s, cWidget, @txt_, @doc_, enum_, func_, lList )
nCnvrtd++
ELSE
aadd( dummy_, cOrg )
@@ -530,63 +532,82 @@ STATIC FUNCTION GenSource( cProFile, cPathIn, cPathOut, cPathDoc )
lDestructor := ascan( cls_, {|e_| lower( e_[ 1 ] ) == "destructor" .AND. lower( e_[ 2 ] ) == "no" } ) == 0
lObject := ascan( cls_, {|e_| lower( e_[ 1 ] ) == "qobject" .AND. lower( e_[ 2 ] ) == "no" } ) == 0
IF ( lNewGCtoQT )
lConst := .f.
FOR i := 3 TO len( new_ ) - 1
IF left( ltrim( new_[ i ] ), 2 ) != "//"
IF "hb_retptr(" $ new_[ i ]
lConst := .t.
EXIT
ENDIF
lConst := .f.
FOR i := 3 TO len( new_ ) - 1
IF left( ltrim( new_[ i ] ), 2 ) != "//"
IF "hb_retptr(" $ new_[ i ]
lConst := .t.
EXIT
ENDIF
NEXT
aadd( cpp_, "typedef struct" )
aadd( cpp_, "{" )
aadd( cpp_, " void * ph;" )
aadd( cpp_, " bool bNew;" )
aadd( cpp_, " QT_G_FUNC_PTR func;" )
IF lObject
aadd( cpp_, " QPointer< "+ cWidget +" > pq;" )
ENDIF
aadd( cpp_, "} QGC_POINTER_" + cWidget + ";" )
aadd( cpp_, " " )
NEXT
aadd( cpp_, "QT_G_FUNC( hbqt_gcRelease_" + cWidget + " )" )
aadd( cpp_, "{" )
IF ( lDestructor ) .AND. ( lConst )
IF lObject
aadd( cpp_, " QGC_POINTER_" + cWidget + " * p = ( QGC_POINTER_" + cWidget + " * ) Cargo; " )
aadd( cpp_, " " )
aadd( cpp_, " if( p && p->bNew )" )
aadd( cpp_, " {" )
aadd( cpp_, " if( p->ph && p->pq )" )
aadd( cpp_, " {" )
aadd( cpp_, " const QMetaObject * m = ( ( QObject * ) p->ph )->metaObject();" )
aadd( cpp_, ' if( ( QString ) m->className() != ( QString ) "QObject" )' )
aadd( cpp_, " {" )
aadd( cpp_, ' HB_TRACE( ' + s_trMode + ', ( "ph=%p YES_rel_' + cWidget + ' /.\\ pq=%p", p->ph, (void *)(p->pq) ) );')
aadd( cpp_, " delete ( ( " + cWidget + IF( lList, "< void * >", "" ) + " * ) p->ph ); " )
aadd( cpp_, ' HB_TRACE( ' + s_trMode + ', ( "ph=%p YES_rel_' + cWidget + ' \\./ pq=%p", p->ph, (void *)(p->pq) ) );')
aadd( cpp_, " p->ph = NULL;" )
aadd( cpp_, " }" )
aadd( cpp_, " else" )
aadd( cpp_, " {" )
aadd( cpp_, ' HB_TRACE( ' + s_trMode + ', ( "ph=%p NO__rel_' + cWidget + ' pq=%p", p->ph, (void *)(p->pq) ) );')
aadd( cpp_, " p->ph = NULL;" )
aadd( cpp_, " }" )
ELSE
aadd( cpp_, " QGC_POINTER * p = ( QGC_POINTER * ) Cargo;" )
aadd( cpp_, " " )
aadd( cpp_, " if( p && p->bNew )" )
aadd( cpp_, " {" )
aadd( cpp_, " if( p->ph )" )
aadd( cpp_, " {" )
aadd( cpp_, ' HB_TRACE( ' + s_trMode + ', ( "ph=%p _rel_' + cWidget + ' /.\\", p->ph ) );' )
aadd( cpp_, " delete ( ( " + cWidget + IF( lList, "< void * >", "" ) + " * ) p->ph ); " )
aadd( cpp_, ' HB_TRACE( ' + s_trMode + ', ( "ph=%p YES_rel_' + cWidget + ' \\./", p->ph ) );' )
aadd( cpp_, " p->ph = NULL;" )
ENDIF
aadd( cpp_, "typedef struct" )
aadd( cpp_, "{" )
IF lObject
aadd( cpp_, " QPointer< "+ cWidget +" > ph;" )
ELSE
IF lList
aadd( cpp_, " " + cWidget + "< void * > * ph;" )
ELSE
aadd( cpp_, " " + cWidget + " * ph;" )
ENDIF
ENDIF
aadd( cpp_, " bool bNew;" )
aadd( cpp_, " QT_G_FUNC_PTR func;" )
aadd( cpp_, "} QGC_POINTER_" + cWidget + ";" )
aadd( cpp_, " " )
aadd( cpp_, "QT_G_FUNC( hbqt_gcRelease_" + cWidget + " )" )
aadd( cpp_, "{" )
IF ( lDestructor ) .AND. ( lConst )
IF lObject
aadd( cpp_, " " + cWidget + " " + iif( lList, "< void * >", "" )+" * ph = NULL ;" )
aadd( cpp_, " QGC_POINTER_" + cWidget + " * p = ( QGC_POINTER_" + cWidget + " * ) Cargo; " )
aadd( cpp_, " " )
aadd( cpp_, " if( p && p->bNew && p->ph )" )
aadd( cpp_, " {" )
aadd( cpp_, " ph = p->ph; " )
aadd( cpp_, " if( ph )" )
aadd( cpp_, " {" )
aadd( cpp_, " const QMetaObject * m = ( ph )->metaObject();" )
aadd( cpp_, ' if( ( QString ) m->className() != ( QString ) "QObject" )' )
aadd( cpp_, " {" )
aadd( cpp_, ' HB_TRACE( ' + s_trMode + ', ( "ph=%p %p YES_rel_' + cWidget + ' /.\\ ", (void*) ph, (void*) p->ph ) );' )
aadd( cpp_, " delete ( p->ph ); " )
* aadd( cpp_, ' HB_TRACE( ' + s_trMode + ', ( "ph=%p %p YES_rel_' + cWidget + ' ==== ", (void*) ph, (void*) p->ph ) );' )
* aadd( cpp_, " delete ( ph ); " )
aadd( cpp_, ' HB_TRACE( ' + s_trMode + ', ( "ph=%p %p YES_rel_' + cWidget + ' \\./ ", (void*) ph, (void*) p->ph ) );' )
aadd( cpp_, " p->ph = NULL;" )
aadd( cpp_, " }" )
aadd( cpp_, " else" )
aadd( cpp_, " {" )
aadd( cpp_, ' HB_TRACE( ' + s_trMode + ', ( "ph=%p NO__rel_' + cWidget + ' ", ph ) );')
aadd( cpp_, " p->ph = NULL;" )
aadd( cpp_, " }" )
aadd( cpp_, " }" )
aadd( cpp_, " else" )
aadd( cpp_, " {" )
aadd( cpp_, ' HB_TRACE( ' + s_trMode + ', ( "ph=%p DEL_rel_' + cWidget + ' : Object already deleted!", ph ) );' )
aadd( cpp_, " p->ph = NULL;" )
aadd( cpp_, " }" )
aadd( cpp_, " }" )
aadd( cpp_, " else" )
aadd( cpp_, " {" )
aadd( cpp_, ' HB_TRACE( ' + s_trMode + ', ( "ph=%p PTR_rel_' + cWidget + ' : Object not created with new=true", ph ) );' )
aadd( cpp_, " p->ph = NULL;" )
aadd( cpp_, " }" )
ELSE
aadd( cpp_, " QGC_POINTER * p = ( QGC_POINTER * ) Cargo;" )
aadd( cpp_, " " )
aadd( cpp_, " if( p && p->bNew )" )
aadd( cpp_, " {" )
aadd( cpp_, " if( p->ph )" )
aadd( cpp_, " {" )
aadd( cpp_, ' HB_TRACE( ' + s_trMode + ', ( "ph=%p _rel_' + cWidget + ' /.\\", p->ph ) );' )
aadd( cpp_, " delete ( ( " + cWidget + IF( lList, "< void * >", "" ) + " * ) p->ph ); " )
aadd( cpp_, ' HB_TRACE( ' + s_trMode + ', ( "ph=%p YES_rel_' + cWidget + ' \\./", p->ph ) );' )
aadd( cpp_, " p->ph = NULL;" )
aadd( cpp_, " }" )
aadd( cpp_, " else" )
aadd( cpp_, " {" )
@@ -599,89 +620,79 @@ STATIC FUNCTION GenSource( cProFile, cPathIn, cPathOut, cPathDoc )
aadd( cpp_, ' HB_TRACE( ' + s_trMode + ', ( "ph=%p PTR_rel_' + cWidget + ' : Object not created with new=true", p->ph ) );' )
aadd( cpp_, " p->ph = NULL;" )
aadd( cpp_, " }" )
ELSE
aadd( cpp_, " HB_SYMBOL_UNUSED( Cargo );" )
aadd( cpp_, " QGC_POINTER * p = ( QGC_POINTER * ) Cargo;" )
aadd( cpp_, " " )
aadd( cpp_, " if( p && p->bNew )" )
aadd( cpp_, " {" )
aadd( cpp_, " p->ph = NULL;" )
aadd( cpp_, " }" )
ENDIF
aadd( cpp_, "}" )
aadd( cpp_, "" )
ELSE
aadd( cpp_, " HB_SYMBOL_UNUSED( Cargo );" )
aadd( cpp_, " QGC_POINTER * p = ( QGC_POINTER * ) Cargo;" )
aadd( cpp_, " " )
aadd( cpp_, " if( p && p->bNew )" )
aadd( cpp_, " {" )
aadd( cpp_, " p->ph = NULL;" )
aadd( cpp_, " }" )
ENDIF
aadd( cpp_, "}" )
aadd( cpp_, "" )
/* Insert CONSTRUCTOR - if defined */
lConst := .f.
FOR i := 3 TO len( new_ ) - 1
IF left( ltrim( new_[ i ] ), 2 ) != "//"
IF "hb_retptr(" $ new_[ i ]
lConst := .t.
EXIT
ENDIF
ENDIF
NEXT
IF ( lNewGCtoQT )
aadd( cpp_, "void * hbqt_gcAllocate_" + cWidget + "( void * pObj, bool bNew )" )
aadd( cpp_, "{ " )
IF lObject
aadd( cpp_, " QGC_POINTER_" + cWidget + " * p = ( QGC_POINTER_" + cWidget + " * ) hb_gcAllocate( sizeof( QGC_POINTER_" + cWidget + " ), hbqt_gcFuncs() );" )
ELSE
aadd( cpp_, " QGC_POINTER * p = ( QGC_POINTER * ) hb_gcAllocate( sizeof( QGC_POINTER ), hbqt_gcFuncs() );" )
ENDIF
aadd( cpp_, "" )
aadd( cpp_, " p->ph = pObj;" )
aadd( cpp_, " p->bNew = bNew;" )
aadd( cpp_, " p->func = hbqt_gcRelease_" + cWidget + ";" )
aadd( cpp_, "" )
aadd( cpp_, " if( bNew )" )
aadd( cpp_, " {" )
IF lObject
aadd( cpp_, " new( & p->pq ) QPointer< "+ cWidget +" >( ( " + cWidget + " * ) pObj );" )
ENDIF
aadd( cpp_, ' HB_TRACE( ' + s_trMode + ', ( "ph=%p _new_' + cWidget + iif( lObject, ' under p->pq', '' ) + '", pObj ) );' )
aadd( cpp_, " }" )
aadd( cpp_, " else" )
aadd( cpp_, " {" )
aadd( cpp_, ' HB_TRACE( ' + s_trMode + ', ( "ph=%p NOT_new_' + cWidget + '", pObj ) );' )
aadd( cpp_, " }" )
aadd( cpp_, " return p;" )
aadd( cpp_, "}" )
aadd( cpp_, "" )
aadd( cpp_, "void * hbqt_gcAllocate_" + cWidget + "( void * pObj, bool bNew )" )
aadd( cpp_, "{ " )
IF lObject
aadd( cpp_, " QGC_POINTER_" + cWidget + " * p = ( QGC_POINTER_" + cWidget + " * ) hb_gcAllocate( sizeof( QGC_POINTER_" + cWidget + " ), hbqt_gcFuncs() );" )
ELSE
aadd( cpp_, " QGC_POINTER * p = ( QGC_POINTER * ) hb_gcAllocate( sizeof( QGC_POINTER ), hbqt_gcFuncs() );" )
ENDIF
aadd( cpp_, "" )
IF lObject
aadd( cpp_, " new( & p->ph ) QPointer< "+ cWidget +" >( ( " + cWidget + " * ) pObj );" )
ELSE
aadd( cpp_, " p->ph = ( " + cWidget + iif( lList, "< void * >", "" ) + " * ) pObj;" )
ENDIF
aadd( cpp_, " p->bNew = bNew;" )
aadd( cpp_, " p->func = hbqt_gcRelease_" + cWidget + ";" )
aadd( cpp_, "" )
aadd( cpp_, " if( bNew )" )
aadd( cpp_, " {" )
aadd( cpp_, ' HB_TRACE( ' + s_trMode + ', ( "ph=%p _new_' + cWidget + iif( lObject, ' under p->pq', '' ) + '", pObj ) );' )
aadd( cpp_, " }" )
aadd( cpp_, " else" )
aadd( cpp_, " {" )
aadd( cpp_, ' HB_TRACE( ' + s_trMode + ', ( "ph=%p NOT_new_' + cWidget + '", pObj ) );' )
aadd( cpp_, " }" )
aadd( cpp_, " return p;" )
aadd( cpp_, "}" )
aadd( cpp_, "" )
aadd( cpp_, new_[ 1 ] ) // Func definition
aadd( cpp_, new_[ 2 ] ) // {
IF lConst
aadd( cpp_, " void * pObj = NULL;" )
aadd( cpp_, " " )
FOR i := 3 TO len( new_ ) - 1
IF left( ltrim( new_[ i ] ), 2 ) != "//"
IF "hb_retptr(" $ new_[ i ]
s := trim( strtran( new_[ i ], "hb_retptr(", "pObj =" ) )
s := strtran( s, ");", ";" )
aadd( cpp_, s )
ELSE
aadd( cpp_, new_[ i ] )
ENDIF
aadd( cpp_, new_[ 1 ] ) // Func definition
aadd( cpp_, new_[ 2 ] ) // {
IF lConst
if ( lList )
aadd( cpp_, " " + cWidget + "< void * > * pObj = NULL;" )
else
aadd( cpp_, " " + cWidget + " * pObj = NULL;" )
endif
aadd( cpp_, " " )
FOR i := 3 TO len( new_ ) - 1
IF left( ltrim( new_[ i ] ), 2 ) != "//"
IF "hb_retptr(" $ new_[ i ]
s := new_[ i ]
s := trim( strtran( s, "hb_retptr(", "pObj =" ) )
s := strtran( s, ");", ";" )
s := strtran( s, "( "+ cWidget + "* )", "" )
aadd( cpp_, s )
ELSE
aadd( cpp_, new_[ i ] )
ENDIF
NEXT
aadd( cpp_, " " )
aadd( cpp_, " hb_retptrGC( hbqt_gcAllocate_" + cWidget + "( pObj, true ) );" )
#if 0
IF lDestructor
aadd( cpp_, " hb_retptrGC( hbqt_gcAllocate_" + cWidget + "( pObj, true ) );" )
ELSE
aadd( cpp_, " hb_retptr( pObj );" )
ENDIF
#endif
ENDIF
aadd( cpp_, new_[ len( new_ ) ] ) // }
aadd( cpp_, "" )
NEXT
aadd( cpp_, " " )
aadd( cpp_, " hb_retptrGC( hbqt_gcAllocate_" + cWidget + "( ( void * ) pObj, true ) );" )
ELSE
FOR i := 3 TO len( new_ ) - 1
aadd( cpp_, new_[ i ] )
NEXT
ENDIF
aadd( cpp_, new_[ len( new_ ) ] ) // }
aadd( cpp_, "" )
/* Insert Functions */
aeval( txt_, {|e| aadd( cpp_, strtran( e, chr( 13 ), '' ) ) } )
@@ -751,12 +762,11 @@ FUNCTION GetSourcePathByLib( cWidget, cPathOut, cExt, cPre )
#define THIS_PROPER( s ) ( upper( left( s,1 ) ) + substr( s,2 ) )
STATIC FUNCTION ParseProto( cProto, cWidget, txt_, doc_, aEnum, func_ )
STATIC FUNCTION ParseProto( cProto, cWidget, txt_, doc_, aEnum, func_, lList )
LOCAL aRet, aA, aArgus, aArg, aPar, aPre, n, nn, nHBIdx
LOCAL cPre, cPar, cRet, cFun, cParas, cDocs, cCmd, cPas, s, ss, cFirstParamCast
LOCAL cWdg, cCmn, cPrgRet, cHBFunc, cHBIdx, cDocNM
LOCAL lSuccess
* LOCAL cInt := 'int,qint16,quint16,QChar,short,ushort'
LOCAL lSuccess, FP
LOCAL cInt := 'int,qint16,quint16,short,ushort'
LOCAL cIntLong := 'qint32,quint32,QRgb'
LOCAL cIntLongLong := 'qint64,quint64,qlonglong,qulonglong'
@@ -1197,9 +1207,9 @@ STATIC FUNCTION ParseProto( cProto, cWidget, txt_, doc_, aEnum, func_ )
aadd( txt_, "/*" )
aadd( txt_, " * " + strtran( cProto, chr(13), '' ) )
aadd( txt_, " */" )
aadd( txt_, "HB_FUNC( QT_" + upper( cWidget ) + "_" + upper( cHBFunc ) + " )" )
aadd( txt_, "{" )
aadd( txt_, " " + cWidget + iif( lList, "< void *>", "" ) + " * p = hbqt_par_" + cWidget + "( 1 );" )
/* Insert parameters by reference */
IF ! empty( aPre )
@@ -1210,7 +1220,13 @@ STATIC FUNCTION ParseProto( cProto, cWidget, txt_, doc_, aEnum, func_ )
ENDIF
/* One line function body */
aadd( txt_, " "+ cCmd )
FP = strtran( cCmd, "hbqt_par_" + cWidget + "( 1 )", "( p )" )
aadd( txt_, " if( p )" )
aadd( txt_, " " + FP )
aadd( txt_, " else" )
aadd( txt_, " {" )
aadd( txt_, ' HB_TRACE( ' + s_trMode + ', ( "............................... F=QT_' + upper( cWidget ) + '_' + upper( cHBFunc) + ' FP=' + FP + ' p is NULL" ) );')
aadd( txt_, " }" )
/* Return values back to PRG */
IF ! empty( aPre )

View File

@@ -752,6 +752,7 @@ HBSlots::~HBSlots()
{
if( listBlock[ i ] != NULL )
{
HB_TRACE( HB_TR_ALWAYS, ( "......HBSlots::~HBSlots()...... [ Un-disConnected Slot ]" ) );
hb_itemRelease( listBlock.at( i ) );
listBlock[ i ] = NULL;
}
@@ -1036,6 +1037,7 @@ HB_FUNC( QT_SLOTS_CONNECT )
if( t_slots )
{
HB_TRACE( HB_TR_DEBUG, ( "QT_SLOTS_CONNECT( %s )", hb_parcx( 3 ) ) );
QObject * object = ( QObject * ) hbqt_pPtrFromObj( 2 ); /* get sender */
if( object )
{
@@ -1052,6 +1054,7 @@ HB_FUNC( QT_SLOTS_CONNECT )
bRet = HB_TRUE;
}
}
HB_TRACE( HB_TR_DEBUG, ( "QT_SLOTS_CONNECT( %s ) %s", hb_parcx( 3 ), bRet ? "Connected" : "not-connected" ) );
}
}
hb_retl( bRet );
@@ -1067,6 +1070,7 @@ HB_FUNC( QT_SLOTS_DISCONNECT )
if( t_slots )
{
HB_TRACE( HB_TR_DEBUG, ( "QT_SLOTS_DISCONNECT( %s )", hb_parcx( 3 ) ) );
QObject * object = ( QObject* ) hbqt_pPtrFromObj( 2 );
if( object )
{
@@ -1085,6 +1089,7 @@ HB_FUNC( QT_SLOTS_DISCONNECT )
HB_TRACE( HB_TR_DEBUG, ( " QT_SLOTS_DISCONNECT: %s %s", bRet ? "YES" : "NO", slot ) );
}
HB_TRACE( HB_TR_DEBUG, ( "QT_SLOTS_DISCONNECT( %s ) %s", hb_parcx( 3 ), bRet ? "disConnected" : "not-disConnected" ) );
}
}
hb_retl( bRet );

View File

@@ -97,15 +97,16 @@ HB_FUNC( HB_QT ) {;}
HB_FUNC( QT_QAPPLICATION )
{
hb_retptr( ( QApplication * ) s_app );
//hb_retptr( ( QApplication * ) s_app );
hb_retptr ( s_app );
}
static void hbqt_Exit( void * cargo )
{
HB_SYMBOL_UNUSED( cargo );
s_app->quit();
s_app = NULL;
//s_app->quit();
//s_app = NULL;
}
static void hbqt_Init( void * cargo )

View File

@@ -71,6 +71,30 @@ HB_FUNC( QT_QLAYOUT )
{
}
/*
* virtual void addItem ( QLayoutItem * item ) = 0
*/
/*
HB_FUNC( QT_QLAYOUT_ADDITEM )
{
QGC_POINTER * p;
QGC_POINTER * q;
HB_TRACE( HB_TR_DEBUG, ( "Entering function QT_QLAYOUT_ADDITEM()" ) );
q = ( QGC_POINTER * ) hb_parptrGC( hbqt_gcFuncs(), 1 );
p = ( QGC_POINTER * ) hb_parptrGC( hbqt_gcFuncs(), 2 );
if( p && p->ph && q && q->ph )
{
HB_TRACE( HB_TR_DEBUG, ( "QT_QLAYOUT_ADDITEM() Qt oject: %p is attached to: %p", p->ph, q->ph ) );
p->bNew = HB_FALSE;
}
hbqt_par_QLayout( 1 )->addItem( hbqt_par_QLayoutItem( 2 ) );
}
*/
</CODE>
<ENUMS>

View File

@@ -245,7 +245,7 @@ METHOD HbpProcess:read( nMode, i, ii )
DO CASE
CASE nMode == CHN_BGN
::outputMe( "CurDir() => " + CurDir() + " Starting in => " + ::qProcess:workingDirectory() )
CASE nMode == CHN_OUT
::qProcess:setReadChannel( 0 )
cLine := space( nSize )
@@ -301,8 +301,8 @@ METHOD HbpProcess:finish()
::qProcess:kill()
//
::qProcess:pPtr := NIL
::qProcess := NIL
::qStrList := NIL
RETURN Self

View File

@@ -78,7 +78,6 @@
/*----------------------------------------------------------------------*/
STATIC s_oDeskTop
STATIC s_oApp
STATIC s_hLastEvent := {=>}
THREAD STATIC t_events
@@ -101,8 +100,6 @@ INIT PROCEDURE hbxbp_Start()
hbqt_errorsys()
s_oApp := QApplication():new()
RETURN
/*----------------------------------------------------------------------*/
@@ -113,12 +110,11 @@ EXIT PROCEDURE hbxbp_End()
t_oAppWindow := NIL
IF hb_isObject( s_oDeskTop )
s_oDeskTop:oWidget:pPtr := NIL
endif
s_oDeskTop:oWidget := NIL
ENDIF
/* These must never be called from here as QApplication.cpp's EXIT routine does it */
//s_oApp:quit()
//s_oApp := NIL
t_qtEvents := NIL
t_qtSlots := NIL
HB_TRACE( HB_TR_ALWAYS, "................................... EXIT PROCEDURE hbxbp_End() end " )
RETURN
@@ -191,7 +187,8 @@ FUNCTION PostAppEvent( nEvent, mp1, mp2, oXbp )
IF nEvent == xbeP_Keyboard
IF mp1 == xbeK_TAB
qEvent := QEvent():new( QEvent_KeyPress )
s_oApp:postEvent( oXbp:oWidget, qEvent )
//s_oApp:postEvent( oXbp:oWidget, qEvent )
QApplication():new():postEvent( oXbp:oWidget, qEvent )
ENDIF
ENDIF

View File

@@ -243,6 +243,10 @@ METHOD XbpRtf:destroy()
::xbpWindow:destroy()
::oTextDocument := NIL
::oTextCursor := NIL
::oTextCharFormat := NIL
RETURN Self
/*----------------------------------------------------------------------*/

View File

@@ -364,7 +364,7 @@ METHOD XbpStatic:setCaption( xCaption, cDll )
IF ::options == XBPSTATIC_BITMAP_SCALED
::oWidget:setScaledContents( .t. )
ENDIF
::oWidget:setPixmap( QPixmap():fromImage( ::caption:oWidget ) )
::oWidget:setPixmap( QPixmap():new():fromImage( ::caption:oWidget ) )
ELSEIF hb_isChar( ::caption ) /* $HARBOUR$ */
IF ::options == XBPSTATIC_BITMAP_SCALED
@@ -381,7 +381,7 @@ METHOD XbpStatic:setCaption( xCaption, cDll )
oPixmap := QPixmap()
oIcon := QIcon()
oStyle := QStyle()
oStyle:pPtr := QApplication():style()
oStyle:pPtr := QApplication():new():style()
DO CASE
CASE ::caption == XBPSTATIC_SYSICON_ICONINFORMATION