diff --git a/harbour/ChangeLog b/harbour/ChangeLog index 847d68eb2b..7f288752bf 100644 --- a/harbour/ChangeLog +++ b/harbour/ChangeLog @@ -17,6 +17,26 @@ past entries belonging to author(s): Viktor Szakats. */ +2010-04-10 16:11 UTC-0800 Pritpal Bedi (pritpal@vouchcac.com) + * contrib/hbide/idedocks.prg + * contrib/hbide/ideenviron.prg + * contrib/hbide/idefindreplace.prg + * contrib/hbide/idemisc.prg + * contrib/hbide/ideprojmanager.prg + * contrib/hbide/ideshortcuts.prg + * contrib/hbide/idesources.prg + * contrib/hbxbp/hbpprocess.prg + + ! Fixed error when double-click on build output was causing GPF + if no editor tab is in focus, i.e., Welcome tabs are visible. + + - Removed some loggings. + + % Reworked how build commands are called. Now only one batch file + is sent to the process engine to fire and rest is contained + into that batch file. It probably may solve *nix issue where + a .sh is not executed or any other command with long list of params. + 2010-04-10 12:04 UTC-0800 Pritpal Bedi (pritpal@vouchcac.com) * contrib/hbxbp/xbpdialog.prg + Added :sysMenu instance variable picked from Shum's example. diff --git a/harbour/contrib/hbide/idedocks.prg b/harbour/contrib/hbide/idedocks.prg index 8370739de7..f8c3d3af1f 100644 --- a/harbour/contrib/hbide/idedocks.prg +++ b/harbour/contrib/hbide/idedocks.prg @@ -852,15 +852,16 @@ METHOD IdeDocks:outputDoubleClicked( lSelected ) cText := QTextBlock():configure( qCursor:block() ):text() IF hbide_parseFNfromStatusMsg( cText, @cSource, @nLine, .T. ) - ::oSM:editSource( cSource, 0, 0, 0, NIL, NIL, .f., .t. ) - qCursor := QTextCursor():configure( ::oIde:qCurEdit:textCursor() ) - nLine := iif( nLine < 1, 0, nLine - 1 ) + IF ::oSM:editSource( cSource, 0, 0, 0, NIL, NIL, .f., .t. ) + qCursor := QTextCursor():configure( ::oIde:qCurEdit:textCursor() ) + nLine := iif( nLine < 1, 0, nLine - 1 ) - qCursor:setPosition( 0 ) - qCursor:movePosition( QTextCursor_Down, QTextCursor_MoveAnchor, nLine ) - ::oIde:qCurEdit:setTextCursor( qCursor ) - ::oIde:qCurEdit:centerCursor() - ::oIde:manageFocusInEditor() + qCursor:setPosition( 0 ) + qCursor:movePosition( QTextCursor_Down, QTextCursor_MoveAnchor, nLine ) + ::oIde:qCurEdit:setTextCursor( qCursor ) + ::oIde:qCurEdit:centerCursor() + ::oIde:manageFocusInEditor() + ENDIF ENDIF ENDIF diff --git a/harbour/contrib/hbide/ideenviron.prg b/harbour/contrib/hbide/ideenviron.prg index 720ea85749..989a668c6d 100644 --- a/harbour/contrib/hbide/ideenviron.prg +++ b/harbour/contrib/hbide/ideenviron.prg @@ -123,11 +123,9 @@ METHOD IdeEnvironments:create( oIDE, cEnvFile ) /*----------------------------------------------------------------------*/ METHOD IdeEnvironments:destroy() -hbide_dbg(" ,,,,,, IdeEnvironments:destroy()", 0 ) + IF !empty( ::oUI ) -hbide_dbg("IdeEnvironments:destroy()", 1 ) ::oUI:destroy() -hbide_dbg("IdeEnvironments:destroy()", 2 ) ENDIF RETURN Self @@ -183,21 +181,18 @@ METHOD IdeEnvironments:parse( cEnvFile ) /*----------------------------------------------------------------------*/ METHOD IdeEnvironments:prepareBatch( cEnvName ) - LOCAL n, s, a_, aCmd - LOCAL cFile := space( 255 ) + LOCAL n, s, a_, aCmd := {} IF ( n := ascan( ::aEnvrns, {|e_| e_[ 1 ] == cEnvName } ) ) > 0 - aCmd := {} FOR EACH a_ IN ::aEnvrns[ n, 2 ] s := a_[ 1 ] IF s == "content" aadd( aCmd, a_[ 2 ] ) ENDIF NEXT - cFile := hbide_getShellCommandsTempFile( aCmd ) ENDIF - RETURN cFile + RETURN hbide_getShellCommandsTempFile( aCmd ) /*----------------------------------------------------------------------*/ diff --git a/harbour/contrib/hbide/idefindreplace.prg b/harbour/contrib/hbide/idefindreplace.prg index 147604dcf0..5883b00965 100644 --- a/harbour/contrib/hbide/idefindreplace.prg +++ b/harbour/contrib/hbide/idefindreplace.prg @@ -142,7 +142,7 @@ METHOD IdeSearchReplace:create( oIde ) ::oUI:q_checkReplace:setEnabled( .f. ) ::oUI:q_frameReplace:hide() -hbide_dbg("========================================================================IdeSearchReplace:create()" ) + RETURN Self /*----------------------------------------------------------------------*/ diff --git a/harbour/contrib/hbide/idemisc.prg b/harbour/contrib/hbide/idemisc.prg index 526fb35b92..03d066cf3f 100644 --- a/harbour/contrib/hbide/idemisc.prg +++ b/harbour/contrib/hbide/idemisc.prg @@ -604,7 +604,7 @@ FUNCTION hbide_isValidText( cSourceFile ) hb_fNameSplit( cSourceFile, , , @cExt ) RETURN ( lower( cExt ) $ ".c,.cpp,.prg,.h,.ch,.txt,.log,.ini,.env,.ppo," + ; - ".cc,.hbc,.hbp,.hbm,.xml,.bat,.sh,.rc,.ui,.bak" ) + ".cc,.hbc,.hbp,.hbm,.xml,.bat,.sh,.rc,.ui,.uic,.bak,.fmg" ) /*----------------------------------------------------------------------*/ @@ -1452,7 +1452,7 @@ FUNCTION hbide_outputLine( cLine, nOccur ) DEFAULT cLine TO "-" DEFAULT nOccur TO 100 - RETURN replicate( cLine, nOccur ) + RETURN "" + replicate( cLine, nOccur ) + "" /*----------------------------------------------------------------------*/ diff --git a/harbour/contrib/hbide/ideprojmanager.prg b/harbour/contrib/hbide/ideprojmanager.prg index 9041ecfed0..4d9e63bbf8 100644 --- a/harbour/contrib/hbide/ideprojmanager.prg +++ b/harbour/contrib/hbide/ideprojmanager.prg @@ -257,6 +257,7 @@ CLASS IdeProjManager INHERIT IdeObject METHOD buildInterface() METHOD pullHbpData( cHbp ) METHOD synchronizeAlienProject( cProjFileName ) + METHOD outputText( cText ) METHOD harbourFlags() METHOD hbmk2Flags() @@ -1136,7 +1137,8 @@ METHOD IdeProjManager:promptForPath( cObjPathName, cTitle, cObjFileName, cObjPat /*----------------------------------------------------------------------*/ METHOD IdeProjManager:buildProject( cProject, lLaunch, lRebuild, lPPO, lViaQt ) - LOCAL cHbpPath, oEdit, cHbpFN, cTmp, cExeHbMk2, aHbp, cCmd, cC, cArg, oSource, cCmdParams + LOCAL cHbpPath, oEdit, cHbpFN, cTmp, cExeHbMk2, aHbp, cCmd, cC, oSource, cCmdParams, cBuf + LOCAL cbRed := "", ceRed := "" aHbp := {} @@ -1220,13 +1222,13 @@ METHOD IdeProjManager:buildProject( cProject, lLaunch, lRebuild, lPPO, lViaQt ) ::oOutputResult:oWidget:append( 'Error saving: ' + cHbpPath ) ELSE - cTmp := hbide_outputLine() + CRLF + ; - "Project [ " + cProject + " ] " + ; + ::oOutputResult:oWidget:append( hbide_outputLine() ) + cTmp := "Project [ " + cProject + " ] " + ; "Launch [ " + iif( lLaunch , 'Yes', 'No' ) + " ] " + ; "Rebuild [ " + iif( lRebuild, 'Yes', 'No' ) + " ] " + ; - "Started [ " + time() + " ]" + CRLF + ; - hbide_outputLine() + CRLF + "Started [ " + time() + " ]" ::oOutputResult:oWidget:append( cTmp ) + ::oOutputResult:oWidget:append( hbide_outputLine() ) ::oIDE:oEV := IdeEnvironments():new():create( ::oIDE, hbide_pathFile( ::aINI[ INI_HBIDE, PathEnv ], "hbide.env" ) ) ::cBatch := ::oEV:prepareBatch( ::cWrkEnvironment ) @@ -1241,16 +1243,23 @@ METHOD IdeProjManager:buildProject( cProject, lLaunch, lRebuild, lPPO, lViaQt ) ::oProcess:finished := {|nEC , nES, oHbp| ::finished( nEC ,nES,oHbp ) } ::oProcess:workingPath := hbide_pathToOSPath( ::oProject:location ) // - cCmd := hbide_getShellCommand() - cC := iif( hbide_getOS() == "nix", "", "/C " ) - cArg := iif( empty( ::cBatch ), cC, cC + ::cBatch + " && " ) + cC := iif( hbide_getOS() == "nix", "-c ", "/C " ) + + IF hb_fileExists( ::cBatch ) + cBuf := memoread( ::cBatch ) + cBuf += hb_osNewLine() + cExeHbMk2 + " " + cHbpPath + cCmdParams + hb_osNewLine() + hb_memowrit( ::cBatch, cBuf ) + ENDIF // - ::oOutputResult:oWidget:append( ::cBatch + iif( hb_fileExists( ::cBatch ), " : Exists", " : Do Not Exists" ) ) - ::oOutputResult:oWidget:append( cArg + cExeHbMk2 + " " + cHbpPath + cCmdParams ) - ::oOutputResult:oWidget:append( hbide_outputLine() ) + ::outputText( cbRed + "Batch File " + iif( hb_fileExists( ::cBatch ), " Exists", " : doesn't Exist" ) + " => " + ceRed + trim( ::cBatch ) ) + ::outputText( cbRed + "Batch File Contents => " + ceRed ) + ::outputText( memoread( ::cBatch ) ) + ::outputText( cbRed + "Command => " + ceRed + cCmd ) + ::outputText( cbRed + "Arguments => " + ceRed + cC + ::cBatch ) + ::outputText( hbide_outputLine() ) // - ::oProcess:addArg( cArg + cExeHbMk2 + " " + cHbpPath + cCmdParams ) + ::oProcess:addArg( cC + ::cBatch ) ::oProcess:start( cCmd ) ENDIF @@ -1273,12 +1282,11 @@ METHOD IdeProjManager:finished( nExitCode, nExitStatus, oProcess ) hbide_justACall( oProcess ) - cTmp := hbide_outputLine() + CRLF - cTmp += "Exit Code [ " + hb_ntos( nExitCode ) + " ] Exit Status [ " + hb_ntos( nExitStatus ) + " ] " +; - "Finished at [ " + time() + " ] Done in [ " + hb_ntos( seconds() - oProcess:started ) +" Secs ]" + CRLF - cTmp += hbide_outputLine() + CRLF - - ::oOutputResult:oWidget:append( cTmp ) + ::outputText( hbide_outputLine() ) + cTmp := "Exit Code [ " + hb_ntos( nExitCode ) + " ] Exit Status [ " + hb_ntos( nExitStatus ) + " ] " +; + "Finished at [ " + time() + " ] Done in [ " + hb_ntos( seconds() - oProcess:started ) +" Secs ]" + ::outputText( cTmp ) + ::outputText( hbide_outputLine() ) ferase( ::cBatch ) @@ -1291,7 +1299,6 @@ METHOD IdeProjManager:finished( nExitCode, nExitStatus, oProcess ) cT := ".exe" // Chr( 13 ) n1 := hb_at( cT, cTmp, n + len( cTkn ) ) cExe := substr( cTmp, n + len( cTkn ), n1 - n - len( cTkn ) + len( cT ) ) -HB_TRACE( HB_TR_ALWAYS, 1, cTkn, cExe ) ENDIF ENDIF IF empty( cExe ) @@ -1300,14 +1307,32 @@ HB_TRACE( HB_TR_ALWAYS, 1, cTkn, cExe ) cT := ".exe" // Chr( 13 ) n1 := hb_at( cT, cTmp, n + len( cTkn ) ) cExe := substr( cTmp, n + len( cTkn ), n1 - n - len( cTkn ) + len( cT ) ) -HB_TRACE( HB_TR_ALWAYS, 2, cTkn, cExe ) ENDIF ENDIF + IF empty( cExe ) + cTkn := "hbmk2: Linker command:" + IF ( n := at( cTkn, cTmp ) ) > 0 + cTmp := alltrim( substr( cTmp, n + len( cTkn ) ) ) + IF ( n := at( "-o", cTmp ) ) > 0 + IF ( n1 := hb_at( " ", cTmp, n ) ) > 0 + cExe := alltrim( substr( cTmp, n + 2, n1 - n - 2 ) ) + ENDIF + ENDIF + ENDIF + ENDIF + + ::outputText( " " ) + IF empty( cExe ) + ::outputText( "" + "Executable could not been detected from linker output!" + "" ) + ELSE + ::outputText( "" + "Detected exeutable => " + cExe + "" ) + ENDIF + ::outputText( " " ) IF nExitCode == 0 ::launchProject( ::cProjectInProcess, cExe ) ELSE - ::oOutputResult:oWidget:append( "Sorry, cannot launch project because of errors..." ) + ::outputText( "Sorry, cannot launch project because of errors..." ) ENDIF ENDIF IF ::lPPO .AND. hb_FileExists( ::cPPO ) @@ -1345,6 +1370,9 @@ METHOD IdeProjManager:launchProject( cProject, cExe ) cTargetFN += '.exe' ENDIF #endif + IF !hb_FileExists( cTargetFN ) + cTargetFN := oProject:launchProgram + ENDIF ENDIF IF !hb_FileExists( cTargetFN ) @@ -1384,6 +1412,14 @@ METHOD IdeProjManager:launchProject( cProject, cExe ) /*----------------------------------------------------------------------*/ +METHOD IdeProjManager:outputText( cText ) + + ::oOutputResult:oWidget:append( cText ) + + RETURN Self + +/*----------------------------------------------------------------------*/ + METHOD IdeProjManager:harbourFlags() LOCAL a_:= {} diff --git a/harbour/contrib/hbide/ideshortcuts.prg b/harbour/contrib/hbide/ideshortcuts.prg index ebaaaf08c1..f21c8490a5 100644 --- a/harbour/contrib/hbide/ideshortcuts.prg +++ b/harbour/contrib/hbide/ideshortcuts.prg @@ -89,6 +89,14 @@ CLASS IdeShortcuts INHERIT IdeObject DATA aDftSCuts INIT {} DATA aDftSCutsItms INIT {} + DATA cName + DATA cKey + DATA cAlt + DATA cCtrl + DATA cShift + DATA cMenu + DATA cBlock + METHOD new( oIde ) METHOD create( oIde ) METHOD destroy() @@ -113,6 +121,12 @@ CLASS IdeShortcuts INHERIT IdeObject METHOD populateDftSCuts() METHOD populateKeys() METHOD populateMethods() + METHOD checkDuplicate( cKey, cAlt, cCtrl, cShift, nRow ) + METHOD controls2vrbls() + METHOD vrbls2controls( nRow ) + METHOD array2controls( nRow ) + METHOD array2table( nRow, a_ ) + METHOD vrbls2array( nRow ) ENDCLASS @@ -183,31 +197,32 @@ METHOD IdeShortcuts:show() /*----------------------------------------------------------------------*/ METHOD IdeShortcuts:execEvent( nMode, p ) - LOCAL nRow, nKey, cKey + LOCAL nRow SWITCH nMode CASE buttonNew_clicked - + IF .t. + ::controls2vrbls() + IF !( ::checkDuplicate( ::cKey, ::cAlt, ::cCtrl, ::cShift ) ) + aadd( ::aDftSCuts, { ::cName, ::cKey, ::cAlt, ::cCtrl, ::cShift, ::cMenu, ::cBlock } ) + aadd( ::aDftSCutsItms, array( 5 ) ) + ::oUI:q_tableMacros:setRowCount( ::oUI:q_tableMacros:rowCount() + 1 ) + ::array2table( len( ::aDftSCuts ), { ::cName, ::cKey, ::cAlt, ::cCtrl, ::cShift, ::cMenu, ::cBlock } ) + ELSE + MsgBox( "Current shortcut is already defined!" ) + ENDIF + ENDIF EXIT CASE buttonSet_clicked nRow := ::oUI:q_tableMacros:currentRow() IF nRow >= 0 .AND. nRow < len( ::aDftSCuts ) nRow++ - ::aDftSCuts[ nRow, 1 ] := ::oUI:q_editName:text() - ::aDftSCuts[ nRow, 2 ] := ::aKeys[ ::oUI:q_comboKey:currentIndex() + 1, 2 ] - ::aDftSCuts[ nRow, 3 ] := iif( ::oUI:q_checkAlt :isChecked(), "YES", "NO" ) - ::aDftSCuts[ nRow, 4 ] := iif( ::oUI:q_checkCtrl :isChecked(), "YES", "NO" ) - ::aDftSCuts[ nRow, 5 ] := iif( ::oUI:q_checkShift:isChecked(), "YES", "NO" ) - ::aDftSCuts[ nRow, 6 ] := ::oUI:q_editMenu:text() - ::aDftSCuts[ nRow, 7 ] := ::oUI:q_plainBlock:toPlainText() - - ::aDftSCutsItms[ nRow, 1 ]:setText( ::aDftSCuts[ nRow, 1 ] ) - ::aDftSCutsItms[ nRow, 2 ]:setText( ::aDftSCuts[ nRow, 2 ] ) - ::aDftSCutsItms[ nRow, 3 ]:setIcon( hbide_image( iif( ::aDftSCuts[ nRow, 3 ] == "YES", "check", "" ) ) ) - ::aDftSCutsItms[ nRow, 4 ]:setIcon( hbide_image( iif( ::aDftSCuts[ nRow, 4 ] == "YES", "check", "" ) ) ) - ::aDftSCutsItms[ nRow, 5 ]:setIcon( hbide_image( iif( ::aDftSCuts[ nRow, 5 ] == "YES", "check", "" ) ) ) - + ::controls2vrbls() + IF !( ::checkDuplicate( ::cKey, ::cAlt, ::cCtrl, ::cShift, nRow ) ) + ::vrbls2array( nRow ) + ::vrbls2controls( nRow ) + ENDIF ENDIF EXIT CASE tableMacros_itemDoubleClicked @@ -217,21 +232,7 @@ METHOD IdeShortcuts:execEvent( nMode, p ) nRow := ::oUI:q_tableMacros:currentRow() IF nRow >= 0 .AND. nRow < len( ::aDftSCuts ) nRow++ - - ::oUI:q_editName:setText( ::aDftSCuts[ nRow, 1 ] ) - - cKey := ::aDftSCuts[ nRow, 2 ] - IF ( nKey := ascan( ::aKeys, {|e_| e_[ 2 ] == cKey } ) ) > 0 - ::oUI:q_comboKey:setCurrentIndex( nKey - 1 ) - ENDIF - - ::oUI:q_checkAlt :setChecked( ::aDftSCuts[ nRow, 3 ] == "YES" ) - ::oUI:q_checkCtrl :setChecked( ::aDftSCuts[ nRow, 4 ] == "YES" ) - ::oUI:q_checkShift:setChecked( ::aDftSCuts[ nRow, 5 ] == "YES" ) - - ::oUI:q_editMenu:setText( ::aDftSCuts[ nRow, 6 ] ) - - ::oUI:q_plainBlock:setPlainText( ::aDftSCuts[ nRow, 7 ] ) + ::array2controls( nRow ) ENDIF EXIT CASE listMethods_itemDoubleClicked @@ -247,6 +248,132 @@ METHOD IdeShortcuts:execEvent( nMode, p ) /*----------------------------------------------------------------------*/ +METHOD IdeShortcuts:array2controls( nRow ) + LOCAL cKey, nKey + + ::oUI:q_editName:setText( ::aDftSCuts[ nRow, 1 ] ) + + cKey := ::aDftSCuts[ nRow, 2 ] + IF ( nKey := ascan( ::aKeys, {|e_| e_[ 2 ] == cKey } ) ) > 0 + ::oUI:q_comboKey:setCurrentIndex( nKey - 1 ) + ENDIF + + ::oUI:q_checkAlt :setChecked( ::aDftSCuts[ nRow, 3 ] == "YES" ) + ::oUI:q_checkCtrl :setChecked( ::aDftSCuts[ nRow, 4 ] == "YES" ) + ::oUI:q_checkShift:setChecked( ::aDftSCuts[ nRow, 5 ] == "YES" ) + + ::oUI:q_editMenu:setText( ::aDftSCuts[ nRow, 6 ] ) + + ::oUI:q_plainBlock:setPlainText( ::aDftSCuts[ nRow, 7 ] ) + + RETURN Self + +/*----------------------------------------------------------------------*/ + +METHOD IdeShortcuts:vrbls2array( nRow ) + + IF nRow == NIL + aadd( ::aDftSCuts, array( 7 ) ) + nRow := len( ::aDftSCuts ) + ENDIF + + ::aDftSCuts[ nRow, 1 ] := ::cName + ::aDftSCuts[ nRow, 2 ] := ::cKey + ::aDftSCuts[ nRow, 3 ] := ::cAlt + ::aDftSCuts[ nRow, 4 ] := ::cCtrl + ::aDftSCuts[ nRow, 5 ] := ::cShift + ::aDftSCuts[ nRow, 6 ] := ::cMenu + ::aDftSCuts[ nRow, 7 ] := ::cBlock + + RETURN Self + +/*----------------------------------------------------------------------*/ + +METHOD IdeShortcuts:vrbls2controls( nRow ) + + ::aDftSCutsItms[ nRow, 1 ]:setText( ::cName ) + ::aDftSCutsItms[ nRow, 2 ]:setText( ::cKey ) + ::aDftSCutsItms[ nRow, 3 ]:setIcon( hbide_image( iif( ::cAlt == "YES", "check", "" ) ) ) + ::aDftSCutsItms[ nRow, 4 ]:setIcon( hbide_image( iif( ::cCtrl == "YES", "check", "" ) ) ) + ::aDftSCutsItms[ nRow, 5 ]:setIcon( hbide_image( iif( ::cShift == "YES", "check", "" ) ) ) + + RETURN Self + +/*----------------------------------------------------------------------*/ + +METHOD IdeShortcuts:array2table( nRow, a_ ) + LOCAL q1, q2, q3, q4, q5 + LOCAL oTbl := ::oUI:q_tableMacros + LOCAL n := nRow - 1 + + q1 := QTableWidgetItem():new() + q1:setText( a_[ 1 ] ) + oTbl:setItem( n, 0, q1 ) + + q2 := QTableWidgetItem():new() + q2:setText( a_[ 2 ] ) + oTbl:setItem( n, 1, q2 ) + + q3 := QTableWidgetItem():new() + q3:setIcon( iif( a_[ 3 ] == "YES", hbide_image( "check" ), "" ) ) + oTbl:setItem( n, 2, q3 ) + + q4 := QTableWidgetItem():new() + q4:setIcon( iif( a_[ 4 ] == "YES", hbide_image( "check" ), "" ) ) + oTbl:setItem( n, 3, q4 ) + + q5 := QTableWidgetItem():new() + q5:setIcon( iif( a_[ 5 ] == "YES", hbide_image( "check" ), "" ) ) + oTbl:setItem( n, 4, q5 ) + + oTbl:setRowHeight( n, 16 ) + + ::aDftSCutsItms[ nRow, 1 ] := q1 + ::aDftSCutsItms[ nRow, 2 ] := q2 + ::aDftSCutsItms[ nRow, 3 ] := q3 + ::aDftSCutsItms[ nRow, 4 ] := q4 + ::aDftSCutsItms[ nRow, 5 ] := q5 + + RETURN Self + +/*----------------------------------------------------------------------*/ + +METHOD IdeShortcuts:controls2vrbls() + + ::cName := ::oUI:q_editName:text() + ::cKey := ::aKeys[ ::oUI:q_comboKey:currentIndex() + 1, 2 ] + ::cAlt := iif( ::oUI:q_checkAlt :isChecked(), "YES", "NO" ) + ::cCtrl := iif( ::oUI:q_checkCtrl :isChecked(), "YES", "NO" ) + ::cShift := iif( ::oUI:q_checkShift:isChecked(), "YES", "NO" ) + ::cMenu := ::oUI:q_editMenu:text() + ::cBlock := ::oUI:q_plainBlock:toPlainText() + + RETURN Self + +/*----------------------------------------------------------------------*/ + +METHOD IdeShortcuts:checkDuplicate( cKey, cAlt, cCtrl, cShift, nRow ) + LOCAL lYes, e_ + + IF empty( nRow ) + lYes := ascan( ::aDftSCuts, {|e_| e_[ 2 ] == cKey .AND. e_[ 3 ] == cAlt .AND. ; + e_[ 4 ] == cCtrl .AND. e_[ 5 ] == cShift } ) > 0 + ELSE + lYes := .f. + FOR EACH e_ IN ::aDftSCuts + IF e_:__enumIndex() != nRow + IF e_[ 2 ] == cKey .AND. e_[ 3 ] == cAlt .AND. e_[ 4 ] == cCtrl .AND. e_[ 5 ] == cShift + lYes := .t. + EXIT + ENDIF + ENDIF + NEXT + ENDIF + + RETURN lYes + +/*----------------------------------------------------------------------*/ + METHOD IdeShortcuts:buildUI() LOCAL oTbl, n, qItm LOCAL hdr_:= { { "Name", 190 }, { "Key", 50 }, { "Alt", 30 }, { "Ctrl", 30 }, { "Shift", 30 } } @@ -306,37 +433,17 @@ METHOD IdeShortcuts:populateData( nMode ) /*----------------------------------------------------------------------*/ METHOD IdeShortcuts:populateDftSCuts() - LOCAL a_, q1,q2,q3,q4,q5, n + LOCAL a_, nRow LOCAL oTbl := ::oUI:q_tableMacros oTbl:setRowCount( len( ::aDftSCuts ) ) - n := 0 + nRow := 0 FOR EACH a_ IN ::aDftSCuts - q1 := QTableWidgetItem():new() - q1:setText( a_[ 1 ] ) - oTbl:setItem( n, 0, q1 ) - - q2 := QTableWidgetItem():new() - q2:setText( a_[ 2 ] ) - oTbl:setItem( n, 1, q2 ) - - q3 := QTableWidgetItem():new() - q3:setIcon( iif( a_[ 3 ] == "YES", hbide_image( "check" ), "" ) ) - oTbl:setItem( n, 2, q3 ) - - q4 := QTableWidgetItem():new() - q4:setIcon( iif( a_[ 4 ] == "YES", hbide_image( "check" ), "" ) ) - oTbl:setItem( n, 3, q4 ) - - q5 := QTableWidgetItem():new() - q5:setIcon( iif( a_[ 5 ] == "YES", hbide_image( "check" ), "" ) ) - oTbl:setItem( n, 4, q5 ) - - oTbl:setRowHeight( n, 16 ) + nRow++ + aadd( ::aDftSCutsItms, array( 5 ) ) + ::array2table( nRow, a_ ) QApplication():processEvents() - aadd( ::aDftSCutsItms, { q1, q2, q3, q4, q5 } ) - n++ NEXT RETURN Self diff --git a/harbour/contrib/hbide/idesources.prg b/harbour/contrib/hbide/idesources.prg index b169167153..dc4a8f69cd 100644 --- a/harbour/contrib/hbide/idesources.prg +++ b/harbour/contrib/hbide/idesources.prg @@ -239,10 +239,10 @@ METHOD IdeSourcesManager:editSource( cSourceFile, nPos, nHPos, nVPos, cTheme, cV IF !Empty( cSourceFile ) IF !( hbide_isValidText( cSourceFile ) ) MsgBox( 'File type unknown or unsupported: ' + cSourceFile ) - RETURN Self + RETURN .f. ELSEIF !hb_FileExists( cSourceFile ) MsgBox( 'File not found: ' + cSourceFile ) - RETURN Self + RETURN .f. ENDIF IF ::oEM:isOpen( cSourceFile ) IF lAlert @@ -252,7 +252,7 @@ METHOD IdeSourcesManager:editSource( cSourceFile, nPos, nHPos, nVPos, cTheme, cV ENDIF ENDIF ::oEM:setSourceVisible( cSourceFile ) - RETURN Self + RETURN .t. ENDIF ENDIF @@ -269,7 +269,7 @@ METHOD IdeSourcesManager:editSource( cSourceFile, nPos, nHPos, nVPos, cTheme, cV hbide_mnuAddFileToMRU( Self, cSourceFile, INI_RECENTFILES ) ENDIF - RETURN Self + RETURN .t. /*----------------------------------------------------------------------*/ diff --git a/harbour/contrib/hbxbp/hbpprocess.prg b/harbour/contrib/hbxbp/hbpprocess.prg index 8c4e404491..8ae94c6347 100644 --- a/harbour/contrib/hbxbp/hbpprocess.prg +++ b/harbour/contrib/hbxbp/hbpprocess.prg @@ -244,8 +244,8 @@ METHOD HbpProcess:read( nMode, i, ii ) DO CASE CASE nMode == CHN_BGN - ::outputMe( "Starting in: " + CurDir() + " : " + ::qProcess:workingDirectory() ) - + ::outputMe( "CurDir() => " + CurDir() + " Starting in => " + ::qProcess:workingDirectory() ) + CASE nMode == CHN_OUT ::qProcess:setReadChannel( 0 ) cLine := space( nSize )