From f4e7033a0c7c2d9ce7cfb9af952a8edefb79892f Mon Sep 17 00:00:00 2001 From: Pritpal Bedi Date: Fri, 16 Apr 2010 15:04:28 +0000 Subject: [PATCH] 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. --- harbour/ChangeLog | 39 +++ harbour/contrib/hbide/hbide.prg | 24 +- harbour/contrib/hbide/idedocks.prg | 8 +- harbour/contrib/hbide/ideeditor.prg | 20 +- harbour/contrib/hbide/idefindreplace.prg | 4 +- harbour/contrib/hbide/idefunctions.prg | 11 +- harbour/contrib/hbide/idemisc.prg | 2 + harbour/contrib/hbide/ideprojmanager.prg | 35 ++- harbour/contrib/hbide/ideshortcuts.prg | 13 +- harbour/contrib/hbide/idetools.prg | 7 +- harbour/contrib/hbqt/generator/hbqtgen.prg | 286 +++++++++++---------- harbour/contrib/hbqt/hbqt_hbslots.cpp | 5 + harbour/contrib/hbqt/qth/QApplication.qth | 7 +- harbour/contrib/hbqt/qth/QLayout.qth | 24 ++ harbour/contrib/hbxbp/hbpprocess.prg | 4 +- harbour/contrib/hbxbp/xbpgeneric.prg | 15 +- harbour/contrib/hbxbp/xbprtf.prg | 4 + harbour/contrib/hbxbp/xbpstatic.prg | 4 +- 18 files changed, 296 insertions(+), 216 deletions(-) diff --git a/harbour/ChangeLog b/harbour/ChangeLog index 04daab9a04..7522af095b 100644 --- a/harbour/ChangeLog +++ b/harbour/ChangeLog @@ -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 diff --git a/harbour/contrib/hbide/hbide.prg b/harbour/contrib/hbide/hbide.prg index 66290dd8b1..a2a4139bb3 100644 --- a/harbour/contrib/hbide/hbide.prg +++ b/harbour/contrib/hbide/hbide.prg @@ -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 diff --git a/harbour/contrib/hbide/idedocks.prg b/harbour/contrib/hbide/idedocks.prg index f8c3d3af1f..a094dc4186 100644 --- a/harbour/contrib/hbide/idedocks.prg +++ b/harbour/contrib/hbide/idedocks.prg @@ -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 */ diff --git a/harbour/contrib/hbide/ideeditor.prg b/harbour/contrib/hbide/ideeditor.prg index 7804965708..b76bc0430b 100644 --- a/harbour/contrib/hbide/ideeditor.prg +++ b/harbour/contrib/hbide/ideeditor.prg @@ -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. diff --git a/harbour/contrib/hbide/idefindreplace.prg b/harbour/contrib/hbide/idefindreplace.prg index 5351d4e71b..5cce53fc7f 100644 --- a/harbour/contrib/hbide/idefindreplace.prg +++ b/harbour/contrib/hbide/idefindreplace.prg @@ -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 /*----------------------------------------------------------------------*/ diff --git a/harbour/contrib/hbide/idefunctions.prg b/harbour/contrib/hbide/idefunctions.prg index 25cf1fa046..d8b0391c5a 100644 --- a/harbour/contrib/hbide/idefunctions.prg +++ b/harbour/contrib/hbide/idefunctions.prg @@ -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++ diff --git a/harbour/contrib/hbide/idemisc.prg b/harbour/contrib/hbide/idemisc.prg index 277ff98422..aa288c11cf 100644 --- a/harbour/contrib/hbide/idemisc.prg +++ b/harbour/contrib/hbide/idemisc.prg @@ -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" ) /*----------------------------------------------------------------------*/ diff --git a/harbour/contrib/hbide/ideprojmanager.prg b/harbour/contrib/hbide/ideprojmanager.prg index c680c62f2b..1d49d1eed7 100644 --- a/harbour/contrib/hbide/ideprojmanager.prg +++ b/harbour/contrib/hbide/ideprojmanager.prg @@ -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( "" + "Executable could not been detected from linker output!" + "" ) ELSE cExe := alltrim( cExe ) - ::outputText( "" + "Detected exeutable => " + cExe + " " + hb_ntos( len( cExe ) ) + "" ) + ::outputText( "" + "Detected exeutable => " + cExe + "" ) 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 )." diff --git a/harbour/contrib/hbide/ideshortcuts.prg b/harbour/contrib/hbide/ideshortcuts.prg index 0ca897a72f..514207de43 100644 --- a/harbour/contrib/hbide/ideshortcuts.prg +++ b/harbour/contrib/hbide/ideshortcuts.prg @@ -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 ) diff --git a/harbour/contrib/hbide/idetools.prg b/harbour/contrib/hbide/idetools.prg index cea9c0bc64..dc331c598e 100644 --- a/harbour/contrib/hbide/idetools.prg +++ b/harbour/contrib/hbide/idetools.prg @@ -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()" ) diff --git a/harbour/contrib/hbqt/generator/hbqtgen.prg b/harbour/contrib/hbqt/generator/hbqtgen.prg index 84303a1355..5f00a70151 100644 --- a/harbour/contrib/hbqt/generator/hbqtgen.prg +++ b/harbour/contrib/hbqt/generator/hbqtgen.prg @@ -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 ) diff --git a/harbour/contrib/hbqt/hbqt_hbslots.cpp b/harbour/contrib/hbqt/hbqt_hbslots.cpp index b72460ce9d..4b0dbb55e0 100644 --- a/harbour/contrib/hbqt/hbqt_hbslots.cpp +++ b/harbour/contrib/hbqt/hbqt_hbslots.cpp @@ -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 ); diff --git a/harbour/contrib/hbqt/qth/QApplication.qth b/harbour/contrib/hbqt/qth/QApplication.qth index 613f1ccfdc..2c377944ec 100644 --- a/harbour/contrib/hbqt/qth/QApplication.qth +++ b/harbour/contrib/hbqt/qth/QApplication.qth @@ -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 ) diff --git a/harbour/contrib/hbqt/qth/QLayout.qth b/harbour/contrib/hbqt/qth/QLayout.qth index dfcb1d52b2..c2ca42b6d5 100644 --- a/harbour/contrib/hbqt/qth/QLayout.qth +++ b/harbour/contrib/hbqt/qth/QLayout.qth @@ -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 ) ); +} +*/ diff --git a/harbour/contrib/hbxbp/hbpprocess.prg b/harbour/contrib/hbxbp/hbpprocess.prg index 8ae94c6347..4dc927fdf7 100644 --- a/harbour/contrib/hbxbp/hbpprocess.prg +++ b/harbour/contrib/hbxbp/hbpprocess.prg @@ -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 diff --git a/harbour/contrib/hbxbp/xbpgeneric.prg b/harbour/contrib/hbxbp/xbpgeneric.prg index 2fc07037b7..588bd5879a 100644 --- a/harbour/contrib/hbxbp/xbpgeneric.prg +++ b/harbour/contrib/hbxbp/xbpgeneric.prg @@ -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 diff --git a/harbour/contrib/hbxbp/xbprtf.prg b/harbour/contrib/hbxbp/xbprtf.prg index eb9dcd75d0..3a55c61cef 100644 --- a/harbour/contrib/hbxbp/xbprtf.prg +++ b/harbour/contrib/hbxbp/xbprtf.prg @@ -243,6 +243,10 @@ METHOD XbpRtf:destroy() ::xbpWindow:destroy() + ::oTextDocument := NIL + ::oTextCursor := NIL + ::oTextCharFormat := NIL + RETURN Self /*----------------------------------------------------------------------*/ diff --git a/harbour/contrib/hbxbp/xbpstatic.prg b/harbour/contrib/hbxbp/xbpstatic.prg index 5281763dcd..8fdff56f7f 100644 --- a/harbour/contrib/hbxbp/xbpstatic.prg +++ b/harbour/contrib/hbxbp/xbpstatic.prg @@ -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