From 1f55bf7cb27b5dadd691c66d56f41e6ba437b56a Mon Sep 17 00:00:00 2001 From: Pritpal Bedi Date: Tue, 13 Apr 2010 06:27:51 +0000 Subject: [PATCH] 2010-04-12 23:25 UTC-0800 Pritpal Bedi (pritpal@vouchcac.com) * contrib/hbqt/hbqt_hbqplaintextedit.cpp ! Little formatting. * contrib/hbxbp/xbpdialog.prg + Added :removeEventFilter() on destruction. * contrib/hbide/resources/environments.ui * contrib/hbide/resources/environments.uic * contrib/hbide/resources/projectpropertiesex.ui * contrib/hbide/resources/projectpropertiesex.uic * contrib/hbide/resources/shortcuts.ui * contrib/hbide/resources/shortcuts.uic * contrib/hbide/hbide.ch * contrib/hbide/hbide.prg * contrib/hbide/ideactions.prg * contrib/hbide/ideeditor.prg * contrib/hbide/idefindreplace.prg * contrib/hbide/idehome.prg * contrib/hbide/ideobject.prg * contrib/hbide/ideprojmanager.prg * contrib/hbide/idesaveload.prg * contrib/hbide/ideshortcuts.prg ! Removed keyboard shortcuts from menu items. ! Attempted fix on nixes when project folder is not created before definition is saved. ! Dialog control labels: Exit => Close. ! More fixes to detect the executable from linker output ( still not perfect ). ! Changed the way project is launched. hope it will be useful for *nixes. + Implemented user-defined keyboard macros with following functionality: New : whatever definition is typed-in the relevant fields is validated with existing ones and if unique is appended at the end of list. The macro is also validated for compilation. Set : current hilighted macro is redefined from values from fields after duplicate validation. The macro is also validated for compilation. Test : Attempts to compile the macro as a block and reports back if successful or not. It just compiles but not evaluates. delete : deletes the highlighted macro after confirmation. Load : loads macros from a disk-file and merges them with existing ones. In case of duplicacy, last loaded macro is retained. Save : Saves the macros in hbide.scu disk-file in hb_serialize()d form. Save As: Saves the macros in a disk-file with any name but with .scu extension. Any change is visible instantly, Unless is clicked, current loaded macros are not saved on disk. This allows to use temporary created macros for current session. More info at http://hbide.vouch.info/ ( Topic: Keyboard Mappings ) --- harbour/ChangeLog | 52 ++ harbour/contrib/hbide/hbide.ch | 4 +- harbour/contrib/hbide/hbide.prg | 13 +- harbour/contrib/hbide/ideactions.prg | 30 +- harbour/contrib/hbide/ideeditor.prg | 52 +- harbour/contrib/hbide/idefindreplace.prg | 2 - harbour/contrib/hbide/idehome.prg | 6 +- harbour/contrib/hbide/ideobject.prg | 2 + harbour/contrib/hbide/ideprojmanager.prg | 39 +- harbour/contrib/hbide/idesaveload.prg | 60 +- harbour/contrib/hbide/ideshortcuts.prg | 706 +++++++++++++++--- .../contrib/hbide/resources/environments.ui | 2 +- .../contrib/hbide/resources/environments.uic | 4 +- .../hbide/resources/projectpropertiesex.ui | 2 +- .../hbide/resources/projectpropertiesex.uic | 6 +- harbour/contrib/hbide/resources/shortcuts.ui | 265 ++++--- harbour/contrib/hbide/resources/shortcuts.uic | 98 ++- .../contrib/hbqt/hbqt_hbqplaintextedit.cpp | 4 +- harbour/contrib/hbxbp/xbpdialog.prg | 2 + 19 files changed, 1027 insertions(+), 322 deletions(-) diff --git a/harbour/ChangeLog b/harbour/ChangeLog index 0f1f36e843..8559acf261 100644 --- a/harbour/ChangeLog +++ b/harbour/ChangeLog @@ -17,6 +17,58 @@ past entries belonging to author(s): Viktor Szakats. */ +2010-04-12 23:25 UTC-0800 Pritpal Bedi (pritpal@vouchcac.com) + * contrib/hbqt/hbqt_hbqplaintextedit.cpp + ! Little formatting. + + * contrib/hbxbp/xbpdialog.prg + + Added :removeEventFilter() on destruction. + + * contrib/hbide/resources/environments.ui + * contrib/hbide/resources/environments.uic + * contrib/hbide/resources/projectpropertiesex.ui + * contrib/hbide/resources/projectpropertiesex.uic + * contrib/hbide/resources/shortcuts.ui + * contrib/hbide/resources/shortcuts.uic + + * contrib/hbide/hbide.ch + * contrib/hbide/hbide.prg + * contrib/hbide/ideactions.prg + * contrib/hbide/ideeditor.prg + * contrib/hbide/idefindreplace.prg + * contrib/hbide/idehome.prg + * contrib/hbide/ideobject.prg + * contrib/hbide/ideprojmanager.prg + * contrib/hbide/idesaveload.prg + * contrib/hbide/ideshortcuts.prg + + ! Removed keyboard shortcuts from menu items. + ! Attempted fix on nixes when project folder is not created before + definition is saved. + ! Dialog control labels: Exit => Close. + ! More fixes to detect the executable from linker output ( still not perfect ). + ! Changed the way project is launched. hope it will be useful for *nixes. + + + Implemented user-defined keyboard macros with following functionality: + New : whatever definition is typed-in the relevant fields is validated + with existing ones and if unique is appended at the end of list. + The macro is also validated for compilation. + Set : current hilighted macro is redefined from values from fields + after duplicate validation. The macro is also validated for compilation. + Test : Attempts to compile the macro as a block and reports back if + successful or not. It just compiles but not evaluates. + delete : deletes the highlighted macro after confirmation. + Load : loads macros from a disk-file and merges them with existing ones. + In case of duplicacy, last loaded macro is retained. + Save : Saves the macros in hbide.scu disk-file in hb_serialize()d form. + Save As: Saves the macros in a disk-file with any name but with .scu extension. + + Any change is visible instantly, + Unless is clicked, current loaded macros are not saved on disk. + This allows to use temporary created macros for current session. + + More info at http://hbide.vouch.info/ ( Topic: Keyboard Mappings ) + 2010-04-12 22:56 UTC+0200 Viktor Szakats (harbour.01 syenar.hu) + contrib/hbqt/generator2 + contrib/hbqt/generator2/hbqtgen2.prg diff --git a/harbour/contrib/hbide/hbide.ch b/harbour/contrib/hbide/hbide.ch index bd96c59f8e..acf26edf1a 100644 --- a/harbour/contrib/hbide/hbide.ch +++ b/harbour/contrib/hbide/hbide.ch @@ -107,8 +107,10 @@ #define CurrentReplace 20 #define CurrentView 21 #define CurrentHarbour 22 +#define CurrentShortcuts 23 +#define TextFileExtensions 24 -#define INI_HBIDE_VRBLS 22 +#define INI_HBIDE_VRBLS 24 /* .hbi structure constants */ #define PRJ_PRP_PROPERTIES 1 diff --git a/harbour/contrib/hbide/hbide.prg b/harbour/contrib/hbide/hbide.prg index 656cfea9fa..66290dd8b1 100644 --- a/harbour/contrib/hbide/hbide.prg +++ b/harbour/contrib/hbide/hbide.prg @@ -240,6 +240,8 @@ CLASS HbIde DATA cWrkReplace INIT "" DATA cWrkView INIT "" DATA cWrkHarbour INIT "" + DATA cPathShortcuts INIT "" + DATA cTextExtensions INIT "" DATA oEnvironment @@ -358,9 +360,6 @@ HB_TRACE( HB_TR_ALWAYS, "HbIde:create( cProjIni )", "#Params=" ) /* Skeletons Manager */ ::oSK := IdeSkeletons():new( Self ):create() - /* Shortcuts */ - ::oSC := IdeShortcuts():new( Self ):create() - /* Initialte Project Manager */ ::oPM := IdeProjManager():new( Self ):create() @@ -368,6 +367,10 @@ HB_TRACE( HB_TR_ALWAYS, "HbIde:create( cProjIni )", "#Params=" ) IF ::nRunMode == HBIDE_RUN_MODE_INI hbide_loadINI( Self, ::cProjIni ) ENDIF + + /* Shortcuts */ + ::oSC := IdeShortcuts():new( Self ):create() + /* Insert command line projects */ aeval( ::aHbpOnCmdLine, {|e| aadd( ::aINI[ INI_PROJECTS ], e ) } ) /* Insert command line sources */ @@ -563,7 +566,7 @@ HB_TRACE( HB_TR_ALWAYS, "HbIde:create( cProjIni )", "#Params=" ) /* Very important - destroy resources */ HB_TRACE( HB_TR_ALWAYS, "======================================================" ) - HB_TRACE( HB_TR_ALWAYS, "Before ::oDlg:destroy()", memory( 1001 ) ) + HB_TRACE( HB_TR_ALWAYS, "Before ::oDlg:destroy()", memory( 1001 ) ) HB_TRACE( HB_TR_ALWAYS, " " ) ::oTM:destroy() @@ -588,7 +591,7 @@ HB_TRACE( HB_TR_ALWAYS, "HbIde:create( cProjIni )", "#Params=" ) ::oFont := NIL HB_TRACE( HB_TR_ALWAYS, " " ) - HB_TRACE( HB_TR_ALWAYS, "After ::oDlg:destroy()", memory( 1001 ) ) + HB_TRACE( HB_TR_ALWAYS, "After ::oDlg:destroy()", memory( 1001 ) ) HB_TRACE( HB_TR_ALWAYS, "======================================================" ) RETURN self diff --git a/harbour/contrib/hbide/ideactions.prg b/harbour/contrib/hbide/ideactions.prg index 54f11f2140..eda1c3fd11 100644 --- a/harbour/contrib/hbide/ideactions.prg +++ b/harbour/contrib/hbide/ideactions.prg @@ -134,7 +134,7 @@ METHOD IdeActions:getAction( cKey ) /*----------------------------------------------------------------------*/ METHOD IdeActions:buildActions() - LOCAL qAction, aAct, k, a_ + LOCAL qAction, aAct, a_ aAct := ::loadActions() @@ -147,6 +147,7 @@ METHOD IdeActions:buildActions() IF !empty( a_[ ACT_IMAGE ] ) qAction:setIcon( ::resPath + a_[ ACT_IMAGE ] + ".png" ) ENDIF + #if 0 IF !empty( a_[ ACT_SHORTCUT ] ) k := a_[ ACT_SHORTCUT ] k := strtran( k, "Sh+", "Shift+" ) @@ -154,6 +155,7 @@ METHOD IdeActions:buildActions() k := strtran( k, "^" , "Ctrl+" ) qAction:setShortcut( QKeySequence():new( k ) ) ENDIF + #endif qAction:setTooltip( strtran( a_[ ACT_TEXT ], "~", "" ) ) ::hActions[ a_[ ACT_NAME ] ] := qAction @@ -255,7 +257,7 @@ METHOD IdeActions:loadActions() aadd( aAct, { "InsertDateTime" , "~Date && Time" , "insert-datetime", "Sh+F7", "No", "Yes" } ) aadd( aAct, { "InsertRandomName" , "~Random Function Name" , "insert-procname", "Sh+F8", "No", "Yes" } ) aadd( aAct, { "InsertExternalFile" , "~External File at Cursor" , "insert-external-file", "", "No", "Yes" } ) - aadd( aAct, { "InsertSeparator" , "~Separator" , "insert-separator", "F7" , "No", "Yes" } ) + aadd( aAct, { "InsertSeparator" , "~Separator" , "insert-separator", "F7" , "No", "Yes" } ) aadd( aAct, { "switchReadOnly" , "Switch Read~Only Mode" , "readonly" , "" , "No", "Yes" } ) aadd( aAct, { "Properties" , "Properties" , "" , "" , "No", "Yes" } ) aadd( aAct, { "ProjAddSource" , "Add Source to Project" , "projectadd" , "" , "No", "Yes" } ) @@ -271,11 +273,6 @@ METHOD IdeActions:loadActions() aadd( aAct, { "CompilePPO" , "Compile Current Source to PPO", "ppo" , "" , "No", "Yes" } ) aadd( aAct, { "LaunchProject" , "Launch Project" , "" , "^F10" , "No", "Yes" } ) aadd( aAct, { "ConfigureTools" , "Configure Tools...*" , "" , "" , "No", "Yes" } ) -#ifdef __PLATFORM__WINDOWS - aadd( aAct, { "CommandPrompt" , "Command Prompt...*" , "" , "" , "No", "Yes" } ) -#else - aadd( aAct, { "Terminal" , "Terminal" , "" , "" , "No", "Yes" } ) -#endif aadd( aAct, { "ManageThemes" , "Manage Themes" , "" , "" , "No", "Yes" } ) aadd( aAct, { "DefaultTheme" , "Set Default Theme" , "" , "" , "No", "Yes" } ) @@ -293,19 +290,24 @@ METHOD IdeActions:loadActions() aadd( aAct, { "RemoveTrailingSpaces" , "Remove Trailing Spaces" , "removetrailingspaces", "", "No", "Yes" } ) aadd( aAct, { "FormatBraces" , "Format Braces" , "ormatbraces" , "" , "No", "Yes" } ) - aadd( aAct, { "StreamComment" , "Stream Comment" , "streamcomment" , "Sh+^Q", "No", "Yes" } ) - aadd( aAct, { "BlockComment" , "Block Comment" , "blockcomment" , "Sh+^/", "No", "Yes" } ) - aadd( aAct, { "BlockIndentR" , "Indent Right" , "blockindentr" , "^Tab" , "No", "Yes" } ) - aadd( aAct, { "BlockIndentL" , "Indent Left" , "blockindentl" , "Sh+^Tab", "No", "Yes" } ) + aadd( aAct, { "StreamComment" , "Stream Comment" , "streamcomment" , "" , "No", "Yes" } ) + aadd( aAct, { "BlockComment" , "Block Comment" , "blockcomment" , "" , "No", "Yes" } ) + aadd( aAct, { "BlockIndentR" , "Indent Right" , "blockindentr" , "" , "No", "Yes" } ) + aadd( aAct, { "BlockIndentL" , "Indent Left" , "blockindentl" , "" , "No", "Yes" } ) aadd( aAct, { "BlockDbl2Sgl" , "Double Quotes to Single" , "dbl2sglquote" , "" , "No", "Yes" } ) aadd( aAct, { "BlockSgl2Dbl" , "Single Quotes to Double" , "sgl2dblquote" , "" , "No", "Yes" } ) - +#if 0 aadd( aAct, { "DuplicateLine" , "Duplicate Current Line" , "duplicateline" , "^D" , "No", "Yes" } ) aadd( aAct, { "DeleteLine" , "Delete Line" , "deleteline" , "^Delete", "No", "Yes" } ) aadd( aAct, { "MoveLineUp" , "Move Line Up" , "movelineup" , "Sh+^Up", "No", "Yes" } ) aadd( aAct, { "MoveLineDown" , "Move Line Down" , "movelinedown" , "Sh+^Down", "No", "Yes" } ) - +#endif + aadd( aAct, { "DuplicateLine" , "Duplicate Current Line" , "duplicateline" , "" , "No", "Yes" } ) + aadd( aAct, { "DeleteLine" , "Delete Line" , "deleteline" , "" , "No", "Yes" } ) + aadd( aAct, { "MoveLineUp" , "Move Line Up" , "movelineup" , "" , "No", "Yes" } ) + aadd( aAct, { "MoveLineDown" , "Move Line Down" , "movelinedown" , "" , "No", "Yes" } ) aadd( aAct, { "Environments" , "Environments..." , "envconfig" , "" , "No", "Yes" } ) + aadd( aAct, { "GotoFunc" , "Goto Function" , "dc_function" , "" , "No", "Yes" } ) aadd( aAct, { "Shortcuts" , "Keyboard Mappings" , "" , "" , "No", "Yes" } ) @@ -464,7 +466,7 @@ METHOD IdeActions:buildMainMenu() oSubMenu:addItem( { ::getAction( "SelectAll" ), {|| oIde:execAction( "SelectAll" ) } } ) hbide_menuAddSep( oSubMenu ) oSubMenu:addItem( { ::getAction( "Find" ), {|| oIde:execAction( "Find" ) } } ) - oSubMenu:addItem( { ::getAction( "FindEx" ), {|| oIde:execAction( "FindEx" ) } } ) + oSubMenu:addItem( { ::getAction( "FindEx" ), {|| oIde:execAction( "FindEx" ) } } ) oSubMenu:addItem( { ::getAction( "Goto" ), {|| oIde:execAction( "Goto" ) } } ) hbide_menuAddSep( oSubMenu ) // diff --git a/harbour/contrib/hbide/ideeditor.prg b/harbour/contrib/hbide/ideeditor.prg index e95606174d..7804965708 100644 --- a/harbour/contrib/hbide/ideeditor.prg +++ b/harbour/contrib/hbide/ideeditor.prg @@ -127,13 +127,13 @@ CLASS IdeEditsManager INHERIT IdeObject METHOD switchToReadOnly() METHOD convertSelection( cKey ) METHOD insertText( cKey ) - METHOD insertSeparator() + METHOD insertSeparator( cSep ) METHOD zoom( nKey ) METHOD printPreview() METHOD paintRequested( pPrinter ) METHOD setMark() METHOD gotoMark( nIndex ) - METHOD goto() + METHOD goto( nLine ) METHOD formatBraces() METHOD removeTabs() METHOD RemoveTrailingSpaces() @@ -682,10 +682,10 @@ METHOD IdeEditsManager:convertSelection( cKey ) /*----------------------------------------------------------------------*/ -METHOD IdeEditsManager:insertSeparator() +METHOD IdeEditsManager:insertSeparator( cSep ) LOCAL oEdit IF !empty( oEdit := ::getEditObjectCurrent() ) - oEdit:insertSeparator() + oEdit:insertSeparator( cSep ) ENDIF RETURN Self @@ -901,26 +901,32 @@ METHOD IdeEditsManager:gotoMark( nIndex ) /*----------------------------------------------------------------------*/ -METHOD IdeEditsManager:goto() - LOCAL qGo, nLine, qCursor, nRows, oEdit +METHOD IdeEditsManager:goto( nLine ) + LOCAL qGo, qCursor, nRows, oEdit IF ! empty( oEdit := ::oEM:getEditObjectCurrent() ) qCursor := QTextCursor():configure( oEdit:qEdit:textCursor() ) - nLine := qCursor:blockNumber() nRows := oEdit:qEdit:blockCount() - qGo := QInputDialog():new( ::oDlg:oWidget ) - qGo:setIntMinimum( 1 ) - qGo:setIntMaximum( nRows + 1 ) - qGo:setIntValue( nLine + 1 ) - qGo:setLabelText( "Goto Line Number [1-" + hb_ntos( nRows ) + "]" ) - qGo:setWindowTitle( "Harbour-Qt" ) + IF hb_isNumeric( nLine ) .AND. nLine >= 0 .AND. nLine <= nRows + // + ELSE + nLine := qCursor:blockNumber() - ::setPosByIni( qGo, GotoDialogGeometry ) - qGo:exec() - ::aIni[ INI_HBIDE, GotoDialogGeometry ] := hbide_posAndSize( qGo ) + qGo := QInputDialog():new( ::oDlg:oWidget ) + qGo:setIntMinimum( 1 ) + qGo:setIntMaximum( nRows + 1 ) + qGo:setIntValue( nLine + 1 ) + qGo:setLabelText( "Goto Line Number [1-" + hb_ntos( nRows ) + "]" ) + qGo:setWindowTitle( "Harbour-Qt" ) - oEdit:goto( qGo:intValue() ) + ::setPosByIni( qGo, GotoDialogGeometry ) + qGo:exec() + ::aIni[ INI_HBIDE, GotoDialogGeometry ] := hbide_posAndSize( qGo ) + nLine := qGo:intValue() + ENDIF + + oEdit:goto( nLine ) ENDIF RETURN nLine @@ -1451,7 +1457,7 @@ CLASS IdeEdit INHERIT IdeObject METHOD getSelectedText() METHOD getColumnNo() METHOD getLineNo() - METHOD insertSeparator() + METHOD insertSeparator( cSep ) METHOD insertText( cText ) METHOD suspendPrototype() @@ -1744,6 +1750,10 @@ METHOD IdeEdit:execKeyEvent( nMode, nEvent, p, p1 ) lShift := .t. ENDIF + IF ::oSC:execKey( key, lAlt, lCtrl, lShift ) + RETURN .f. + ENDIF + SWITCH ( key ) CASE Qt_Key_Space IF !lAlt .AND. !lShift .AND. !lCtrl @@ -2137,14 +2147,16 @@ METHOD IdeEdit:getLineNo() /*----------------------------------------------------------------------*/ -METHOD IdeEdit:insertSeparator() +METHOD IdeEdit:insertSeparator( cSep ) LOCAL qCursor := QTextCursor():configure( ::qEdit:textCursor() ) + DEFAULT cSep TO ::cSeparator + qCursor:beginEditBlock() qCursor:movePosition( QTextCursor_StartOfBlock ) qCursor:insertBlock() qCursor:movePosition( QTextCursor_PreviousBlock ) - qCursor:insertText( ::cSeparator ) + qCursor:insertText( cSep ) qCursor:movePosition( QTextCursor_NextBlock ) qCursor:movePosition( QTextCursor_StartOfBlock ) qCursor:endEditBlock() diff --git a/harbour/contrib/hbide/idefindreplace.prg b/harbour/contrib/hbide/idefindreplace.prg index 5883b00965..5351d4e71b 100644 --- a/harbour/contrib/hbide/idefindreplace.prg +++ b/harbour/contrib/hbide/idefindreplace.prg @@ -656,8 +656,6 @@ METHOD IdeFindInFiles:buildUI() ::oUI:q_checkListOnly:setChecked( .t. ) ::oUI:q_checkPrg:setChecked( .t. ) - * ::oIde:setPosAndSizeByIni( ::oUI:oWidget, FindInFilesDialogGeometry ) - qLineEdit := QLineEdit():configure( ::oUI:q_comboExpr:lineEdit() ) IF !empty( ::oEM ) IF !empty( cText := ::oEM:getSelectedText() ) diff --git a/harbour/contrib/hbide/idehome.prg b/harbour/contrib/hbide/idehome.prg index a24fb51035..e42b1f6d2a 100644 --- a/harbour/contrib/hbide/idehome.prg +++ b/harbour/contrib/hbide/idehome.prg @@ -364,7 +364,11 @@ METHOD IdeHome:addProjectsInfo( aHtm ) aadd( aHtm, ' ' + hb_ntos( len( src_ ) ) ) aadd( aHtm, ' ' ) aadd( aHtm, ' ' ) - aadd( aHtm, ' ' + dtoc( dir_[ 1,3 ] ) + " " + dir_[ 1,4 ] ) + IF ! empty( dir_ ) + aadd( aHtm, ' ' + dtoc( dir_[ 1,3 ] ) + " " + dir_[ 1,4 ] ) + ELSE + aadd( aHtm, ' ' ) + ENDIF aadd( aHtm, ' ' ) aadd( aHtm, ' ' ) aadd( aHtm, ' ' + hbide_pathNormalized( a_[ 1 ] ) ) diff --git a/harbour/contrib/hbide/ideobject.prg b/harbour/contrib/hbide/ideobject.prg index 75195cccf0..2bbc2963d3 100644 --- a/harbour/contrib/hbide/ideobject.prg +++ b/harbour/contrib/hbide/ideobject.prg @@ -137,6 +137,8 @@ CLASS IdeObject ACCESS cWrkReplace INLINE ::oIde:cWrkReplace ACCESS cWrkView INLINE ::oIde:cWrkView ACCESS cWrkHarbour INLINE ::oIde:cWrkHarbour + ACCESS cPathShortcuts INLINE ::oIde:cPathShortcuts + ACCESS cTextExtensions INLINE ::oIde:cTextExtensions // ACCESS resPath INLINE ::oIde:resPath ACCESS pathSep INLINE ::oIde:pathSep diff --git a/harbour/contrib/hbide/ideprojmanager.prg b/harbour/contrib/hbide/ideprojmanager.prg index 4a9a28604a..d2a2d5ddea 100644 --- a/harbour/contrib/hbide/ideprojmanager.prg +++ b/harbour/contrib/hbide/ideprojmanager.prg @@ -1296,7 +1296,8 @@ METHOD IdeProjManager:finished( nExitCode, nExitStatus, oProcess ) IF ( n := at( cTkn, cTmp ) ) > 0 cT := Chr( 10 ) n1 := hb_at( cT, cTmp, n + len( cTkn ) ) - cExe := StrTran( substr( cTmp, n + len( cTkn ), n1 - n - len( cTkn ) + len( cT ) ), Chr( 13 ) ) + cExe := StrTran( substr( cTmp, n + len( cTkn ), n1 - n - len( cTkn ) + len( cT ) ), Chr( 13 ), "" ) + cExe := StrTran( cExe, Chr( 10 ), "" ) ENDIF ENDIF IF empty( cExe ) @@ -1304,7 +1305,8 @@ METHOD IdeProjManager:finished( nExitCode, nExitStatus, oProcess ) IF ( n := at( cTkn, cTmp ) ) > 0 cT := Chr( 10 ) n1 := hb_at( cT, cTmp, n + len( cTkn ) ) - cExe := StrTran( substr( cTmp, n + len( cTkn ), n1 - n - len( cTkn ) + len( cT ) ), Chr( 13 ) ) + cExe := StrTran( substr( cTmp, n + len( cTkn ), n1 - n - len( cTkn ) + len( cT ) ), Chr( 13 ), "" ) + cExe := StrTran( cExe, Chr( 10 ), "" ) ENDIF ENDIF @@ -1312,7 +1314,8 @@ METHOD IdeProjManager:finished( nExitCode, nExitStatus, oProcess ) IF empty( cExe ) ::outputText( "" + "Executable could not been detected from linker output!" + "" ) ELSE - ::outputText( "" + "Detected exeutable => " + cExe + "" ) + cExe := alltrim( cExe ) + ::outputText( "" + "Detected exeutable => " + cExe + " " + hb_ntos( len( cExe ) ) + "" ) ENDIF ::outputText( " " ) @@ -1334,7 +1337,7 @@ METHOD IdeProjManager:finished( nExitCode, nExitStatus, oProcess ) * 03/01/2010 - 09:24:50 */ METHOD IdeProjManager:launchProject( cProject, cExe ) - LOCAL cTargetFN, cTmp, oProject, qProcess, qStr, cExt + LOCAL cTargetFN, cTmp, oProject, qProcess, qStr IF empty( cProject ) cProject := ::oPM:getCurrentProject() @@ -1344,7 +1347,22 @@ METHOD IdeProjManager:launchProject( cProject, cExe ) ENDIF oProject := ::getProjectByTitle( cProject ) + IF empty( cExe ) + cTargetFN := hbide_pathFile( oProject:destination, iif( empty( oProject:outputName ), "_temp", oProject:outputName ) ) + #ifdef __PLATFORM__WINDOWS + IF oProject:type == "Executable" + cTargetFN += '.exe' + ENDIF + #endif + IF ! hb_FileExists( cTargetFN ) + cTargetFN := oProject:launchProgram + ENDIF + ELSE + cTargetFN := cExe + ENDIF + cTargetFN := hbide_pathToOSPath( cTargetFN ) + #if 0 IF !empty( cExe ) hb_fNameSplit( cExe, , , @cExt ) ENDIF @@ -1361,14 +1379,14 @@ METHOD IdeProjManager:launchProject( cProject, cExe ) cTargetFN := oProject:launchProgram ENDIF ENDIF + #endif - IF !hb_FileExists( cTargetFN ) + IF ! hb_FileExists( cTargetFN ) cTmp := "Launch error: file not found - " + cTargetFN ELSEIF oProject:type == "Executable" cTmp := "Launching application [ " + cTargetFN + " ]" - #if 1 qProcess := QProcess():new() qProcess:setWorkingDirectory( hbide_pathToOSPath( oProject:wrkDirectory ) ) IF !empty( oProject:launchParams ) @@ -1381,13 +1399,6 @@ METHOD IdeProjManager:launchProject( cProject, cExe ) qProcess:waitForStarted() qProcess := NIL - #else - ::oProcess := HbpProcess():new() - ::oProcess:output := {|s| HB_TRACE( HB_TR_ALWAYS, s ) } - ::oProcess:finished := {|n,nn| HB_TRACE( HB_TR_ALWAYS, "Finished", n, nn ) } - ::oProcess:start( cTargetFN ) - #endif - ELSE cTmp := "Launching application [ " + cTargetFN + " ] ( not applicable )." @@ -1404,3 +1415,5 @@ METHOD IdeProjManager:outputText( cText ) ::oOutputResult:oWidget:append( cText ) RETURN Self + +/*----------------------------------------------------------------------*/ diff --git a/harbour/contrib/hbide/idesaveload.prg b/harbour/contrib/hbide/idesaveload.prg index aa8f595651..3404c5d258 100644 --- a/harbour/contrib/hbide/idesaveload.prg +++ b/harbour/contrib/hbide/idesaveload.prg @@ -115,6 +115,9 @@ HB_TRACE( HB_TR_ALWAYS, "hbide_saveINI( oIde )", 0, oIde:nRunMode, oIde:cProjIni aadd( txt_, "CurrentReplace=" + oIde:cWrkReplace ) aadd( txt_, "CurrentView=" + oIde:cWrkView ) aadd( txt_, "CurrentHarbour=" + oIde:cWrkHarbour ) + aadd( txt_, "CurrentShortcuts=" + oIde:cPathShortcuts ) + aadd( txt_, "TextFileExtensions=" + oIde:cTextExtensions ) + aadd( txt_, "FindInFilesDialogGeometry=" + oIde:aIni[ INI_HBIDE, FindInFilesDialogGeometry ] ) aadd( txt_, " " ) aadd( txt_, "[PROJECTS]" ) @@ -238,10 +241,12 @@ FUNCTION hbide_loadINI( oIde, cHbideIni ) "currentcodec" , "pathmk2" , "pathenv" , ; "currentenvironment" , "findinfilesdialoggeometry", "currentfind" , ; "currentreplace" , "currentfolderfind" , "currentview" , ; - "currentharbour" } + "currentharbour" , "currentshortcuts" , "textfileextensions" } IF empty( cHbideIni ) IF hb_fileExists( "hbide.ini" ) + /* Please Check for *nixes */ + //cHbideIni := hb_curDrive() + hb_osDriveSeparator() + hb_osPathSeparator() + CurDir() + hb_osPathSeparator() + "hbide.ini" cHbideIni := "hbide.ini" ELSE cHbideIni := hb_dirBase() + "hbide.ini" @@ -461,3 +466,56 @@ FUNCTION hbide_saveSkltns( oIde ) RETURN hbide_createTarget( oIde:cPathSkltns, txt_ ) /*----------------------------------------------------------------------*/ + +FUNCTION hbide_loadShortcuts( oIde, cFileShortcuts ) + LOCAL cPath, a_:= {} + + IF empty( cFileShortcuts ) + cFileShortcuts := oIde:cPathShortcuts + IF empty( cFileShortcuts ) + cFileShortcuts := oIde:cProjIni + ENDIF + + hb_fNameSplit( cFileShortcuts, @cPath ) + cPath += "hbide.scu" + + IF hb_fileExists( cPath ) + cFileShortcuts := cPath + ELSE + cFileShortcuts := hb_dirBase() + "hbide.scu" + ENDIF + ENDIF + oIde:cPathShortcuts := cFileShortcuts + + IF hb_fileExists( cFileShortcuts ) + a_:= hb_deSerialize( hb_memoread( cFileShortcuts ) ) + ENDIF + + RETURN a_ + +/*----------------------------------------------------------------------*/ + +FUNCTION hbide_saveShortcuts( oIde, a_, cFileShortcuts ) + LOCAL cPath + + IF empty( cFileShortcuts ) + cFileShortcuts := oIde:cPathShortcuts + IF empty( cFileShortcuts ) + cFileShortcuts := oIde:cProjIni + ENDIF + + hb_fNameSplit( cFileShortcuts, @cPath ) + cPath += "hbide.scu" + + IF hb_fileExists( cPath ) + cFileShortcuts := cPath + ELSE + cFileShortcuts := hb_dirBase() + "hbide.scu" + ENDIF + ENDIF + + hb_memowrit( cFileShortcuts, hb_serialize( a_ ) ) + + RETURN hb_fileExists( cFileShortcuts ) + +/*----------------------------------------------------------------------*/ diff --git a/harbour/contrib/hbide/ideshortcuts.prg b/harbour/contrib/hbide/ideshortcuts.prg index f21c8490a5..0ca897a72f 100644 --- a/harbour/contrib/hbide/ideshortcuts.prg +++ b/harbour/contrib/hbide/ideshortcuts.prg @@ -68,6 +68,7 @@ #include "hbqt.ch" #include "common.ch" #include "hbclass.ch" +#include "appevent.ch" /*----------------------------------------------------------------------*/ @@ -77,6 +78,12 @@ #define tableMacros_itemDoubleClicked 104 #define buttonSet_clicked 105 #define buttonNew_clicked 106 +#define buttonTest_clicked 107 +#define buttonLoad_clicked 108 +#define buttonSave_clicked 109 +#define buttonSaveAs_clicked 110 +#define buttonAssign_clicked 111 +#define buttonDelete_clicked 112 /*----------------------------------------------------------------------*/ @@ -96,6 +103,9 @@ CLASS IdeShortcuts INHERIT IdeObject DATA cShift DATA cMenu DATA cBlock + DATA cIcon + + DATA qHiliter METHOD new( oIde ) METHOD create( oIde ) @@ -105,18 +115,17 @@ CLASS IdeShortcuts INHERIT IdeObject METHOD buildUI() METHOD buildSignals() + METHOD buildBlock( cString ) METHOD evalMacro( cString ) - METHOD fetchAndExecMacro() - - METHOD getWord( lSelect ) - METHOD getLine( lSelect ) - METHOD getText() - METHOD execTool( ... ) + METHOD test( cString, lWarn ) + METHOD execKey( nKey, lAlt, lCtrl, lShift ) + METHOD mergeMacros( a_ ) METHOD loadDftSCuts() METHOD loadMethods() METHOD loadKeys() + METHOD clearDftSCuts() METHOD populateData( nMode ) METHOD populateDftSCuts() METHOD populateKeys() @@ -128,6 +137,39 @@ CLASS IdeShortcuts INHERIT IdeObject METHOD array2table( nRow, a_ ) METHOD vrbls2array( nRow ) + /* Public API Methods */ + METHOD getWord( lSelect ) + METHOD getLine( lSelect ) + METHOD getText() + METHOD execTool( ... ) + + /* hbIDE defined Macros as API Methods */ + METHOD help( cTopic ) + METHOD exit( lWarn ) + METHOD newSource( cType ) + METHOD open() + METHOD save() + METHOD saveAll() + METHOD close() + METHOD print() + METHOD revertToSaved() + METHOD findDlg() + METHOD findDlgEx() + METHOD gotoLine( nLine ) + METHOD duplicateLine() + METHOD deleteLine() + METHOD moveLineUp() + METHOD moveLineDown() + METHOD indentRight() + METHOD indentLeft() + METHOD blockComment() + METHOD streamComment() + METHOD build( cProj ) + METHOD buildLaunch( cProj ) + METHOD launch( cProj ) + METHOD insert( cText ) + METHOD separator( cSep ) + ENDCLASS /*----------------------------------------------------------------------*/ @@ -157,6 +199,11 @@ METHOD IdeShortcuts:destroy() LOCAL a_, qItm IF !empty( ::oUI ) + Qt_Events_disConnect( ::pEvents, ::oUI:oWidget, QEvent_Close ) + ::oUI:oWidget:removeEventFilter( ::pEvents ) + + ::qHiliter := NIL + FOR EACH qItm IN ::aHdr qItm := NIL NEXT @@ -177,7 +224,6 @@ METHOD IdeShortcuts:destroy() ::oUI:destroy() ENDIF - RETURN Self /*----------------------------------------------------------------------*/ @@ -187,6 +233,7 @@ METHOD IdeShortcuts:show() IF empty( ::oUI ) ::buildUI() ::populateData( 1 ) + ::oIde:setPosAndSizeByIni( ::oUI:oWidget, FindInFilesDialogGeometry ) ENDIF ::oUI:show() @@ -197,19 +244,66 @@ METHOD IdeShortcuts:show() /*----------------------------------------------------------------------*/ METHOD IdeShortcuts:execEvent( nMode, p ) - LOCAL nRow + LOCAL nRow, cMethod, cFile, cPath, cTemp, cExt, a_ SWITCH nMode + + CASE buttonDelete_clicked + nRow := ::oUI:q_tableMacros:currentRow() + IF nRow >= 0 .AND. nRow < len( ::aDftSCuts ) + nRow++ + IF hbide_getYesNo( "Delete", ::aDftSCuts[ nRow, 1 ], "A Delete Operation Requested" ) + hb_adel( ::aDftSCuts, nRow, .t. ) + ::clearDftSCuts() + ::populateDftSCuts() + ENDIF + ENDIF + EXIT + CASE buttonTest_clicked + IF .t. + ::controls2vrbls() + IF !empty( ::cBlock ) + ::test( ::cBlock, .t. ) + ENDIF + ENDIF + EXIT + CASE buttonLoad_clicked + cTemp := hbide_fetchAFile( ::oDlg, "Select a macro file", { { "hbIDE Script File", "*.scu" } }, ::cPathShortcuts ) + IF ! Empty( cTemp ) + hb_fNameSplit( hbide_pathNormalized( cTemp, .f. ), @cPath, @cFile, @cExt ) + IF lower( cExt ) == ".scu" + a_:= hb_deSerialize( hb_memoread( cTemp ) ) + IF !empty( a_ ) + ::mergeMacros( a_ ) + ::clearDftSCuts() + ::populateDftSCuts() + ENDIF + ENDIF + ENDIF + EXIT + CASE buttonSave_clicked + hbide_saveShortcuts( ::oIde, ::aDftSCuts ) + EXIT + CASE buttonSaveAs_clicked + cTemp := hbide_saveAFile( ::oDlg, "Select a macro file", { { "hbIDE Script File", "*.scu" } }, ::cPathShortcuts, ".scu" ) + IF ! Empty( cTemp ) + hb_fNameSplit( hbide_pathNormalized( cTemp, .f. ), @cPath, @cFile, @cExt ) + cFile := hbide_pathToOSPath( cPath + cFile + "scu" ) + hbide_saveShortcuts( ::oIde, ::aDftSCuts, cFile ) + ENDIF + EXIT 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!" ) + IF !empty( ::cName ) + 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 ENDIF EXIT @@ -219,14 +313,13 @@ METHOD IdeShortcuts:execEvent( nMode, p ) IF nRow >= 0 .AND. nRow < len( ::aDftSCuts ) nRow++ ::controls2vrbls() - IF !( ::checkDuplicate( ::cKey, ::cAlt, ::cCtrl, ::cShift, nRow ) ) + IF !empty( ::cName ) .AND. !( ::checkDuplicate( ::cKey, ::cAlt, ::cCtrl, ::cShift, nRow ) ) .AND. ::test( ::cBlock, .f. ) ::vrbls2array( nRow ) ::vrbls2controls( nRow ) ENDIF ENDIF EXIT CASE tableMacros_itemDoubleClicked - EXIT CASE tableMacros_itemSelectionChanged nRow := ::oUI:q_tableMacros:currentRow() @@ -236,10 +329,15 @@ METHOD IdeShortcuts:execEvent( nMode, p ) ENDIF EXIT CASE listMethods_itemDoubleClicked + IF ( nRow := ::oUI:q_listMethods:currentRow() ) >= 0 + nRow++ + cMethod := "::" + ::aMethods[ nRow, 2 ] + ::oUI:q_plainBlock:insertPlainText( cMethod ) + ENDIF EXIT CASE listMethods_currentRowChanged IF p >= 0 .AND. p < len( ::aMethods ) - ::oUI:q_texteditSyntax:setPlainText( ::aMethods[ p+1, 2 ] ) + ::oUI:q_texteditSyntax:setPlainText( ::aMethods[ p+1, 3 ] ) ENDIF EXIT ENDSWITCH @@ -284,6 +382,7 @@ METHOD IdeShortcuts:vrbls2array( nRow ) ::aDftSCuts[ nRow, 5 ] := ::cShift ::aDftSCuts[ nRow, 6 ] := ::cMenu ::aDftSCuts[ nRow, 7 ] := ::cBlock + //::aDftSCuts[ nRow, 8 ] := ::cIcon RETURN Self @@ -291,63 +390,72 @@ METHOD IdeShortcuts:vrbls2array( nRow ) 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", "" ) ) ) + ::aDftSCutsItms[ nRow, 1 ]:setIcon( hbide_image( ::cIcon ) ) + ::aDftSCutsItms[ nRow, 2 ]:setText( ::cName ) + ::aDftSCutsItms[ nRow, 3 ]:setText( ::cKey ) + ::aDftSCutsItms[ nRow, 4 ]:setIcon( hbide_image( iif( ::cAlt == "YES", "check", "" ) ) ) + ::aDftSCutsItms[ nRow, 5 ]:setIcon( hbide_image( iif( ::cCtrl == "YES", "check", "" ) ) ) + ::aDftSCutsItms[ nRow, 6 ]:setIcon( hbide_image( iif( ::cShift == "YES", "check", "" ) ) ) RETURN Self /*----------------------------------------------------------------------*/ METHOD IdeShortcuts:array2table( nRow, a_ ) - LOCAL q1, q2, q3, q4, q5 + LOCAL q0, q1, q2, q3, q4, q5 LOCAL oTbl := ::oUI:q_tableMacros LOCAL n := nRow - 1 + q0 := QTableWidgetItem():new() + q0:setIcon( hbide_image( a_[ 8 ] ) ) + oTbl:setItem( n, 0, q0 ) + q1 := QTableWidgetItem():new() q1:setText( a_[ 1 ] ) - oTbl:setItem( n, 0, q1 ) + oTbl:setItem( n, 1, q1 ) q2 := QTableWidgetItem():new() q2:setText( a_[ 2 ] ) - oTbl:setItem( n, 1, q2 ) + oTbl:setItem( n, 2, q2 ) q3 := QTableWidgetItem():new() q3:setIcon( iif( a_[ 3 ] == "YES", hbide_image( "check" ), "" ) ) - oTbl:setItem( n, 2, q3 ) + oTbl:setItem( n, 3, q3 ) q4 := QTableWidgetItem():new() q4:setIcon( iif( a_[ 4 ] == "YES", hbide_image( "check" ), "" ) ) - oTbl:setItem( n, 3, q4 ) + oTbl:setItem( n, 4, q4 ) q5 := QTableWidgetItem():new() q5:setIcon( iif( a_[ 5 ] == "YES", hbide_image( "check" ), "" ) ) - oTbl:setItem( n, 4, q5 ) + oTbl:setItem( n, 5, 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 + ::aDftSCutsItms[ nRow, 1 ] := q0 + ::aDftSCutsItms[ nRow, 2 ] := q1 + ::aDftSCutsItms[ nRow, 3 ] := q2 + ::aDftSCutsItms[ nRow, 4 ] := q3 + ::aDftSCutsItms[ nRow, 5 ] := q4 + ::aDftSCutsItms[ nRow, 6 ] := q5 RETURN Self /*----------------------------------------------------------------------*/ METHOD IdeShortcuts:controls2vrbls() + LOCAL nRow := ::oUI:q_comboKey:currentIndex() - ::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() - + IF nRow >= 0 + nRow++ + ::cName := ::oUI:q_editName:text() + ::cKey := ::aKeys[ nRow, 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() + ENDIF RETURN Self /*----------------------------------------------------------------------*/ @@ -376,17 +484,23 @@ METHOD IdeShortcuts:checkDuplicate( cKey, cAlt, cCtrl, cShift, nRow ) METHOD IdeShortcuts:buildUI() LOCAL oTbl, n, qItm - LOCAL hdr_:= { { "Name", 190 }, { "Key", 50 }, { "Alt", 30 }, { "Ctrl", 30 }, { "Shift", 30 } } + LOCAL hdr_:= { { "Img", 30 }, { "Name", 190 }, { "Key", 50 }, { "Alt", 30 }, { "Ctrl", 30 }, { "Shift", 30 } } ::oUI := HbQtUI():new( hbide_uic( "shortcuts" ) ):build() ::oUI:setWindowIcon( hbide_image( "hbide" ) ) + ::oUI:setParent( ::oDlg:oWidget ) + ::oUI:setWindowFlags( Qt_Sheet ) + + ::oUI:oWidget:installEventFilter( ::pEvents ) + + Qt_Events_Connect( ::pEvents, ::oUI:oWidget, QEvent_Close, {|| ::oIde:aIni[ INI_HBIDE, FindInFilesDialogGeometry ] := hbide_posAndSize( ::oUI:oWidget ) } ) oTbl := ::oUI:q_tableMacros /* Build Table Header */ QHeaderView():from( oTbl:verticalHeader() ):hide() QHeaderView():from( oTbl:horizontalHeader() ):stretchLastSection( .t. ) oTbl:setAlternatingRowColors( .t. ) oTbl:setColumnCount( len( hdr_ ) ) - oTbl:setShowGrid( .f. ) + oTbl:setShowGrid( .t. ) oTbl:setSelectionMode( QAbstractItemView_SingleSelection ) oTbl:setSelectionBehavior( QAbstractItemView_SelectRows ) FOR n := 1 TO len( hdr_ ) @@ -399,6 +513,8 @@ METHOD IdeShortcuts:buildUI() ::oUI:q_listMethods:setAlternatingRowColors( .t. ) /* Public Methods List */ + ::qHiliter := ::oTH:SetSyntaxHilighting( ::oUI:q_plainBlock, "Pritpal's Favourite" ) + ::buildSignals() RETURN Self @@ -407,14 +523,20 @@ METHOD IdeShortcuts:buildUI() METHOD IdeShortcuts:buildSignals() - ::oUI:signal( "buttonNew" , "clicked()" , {| | ::execEvent( buttonNew_clicked ) } ) - ::oUI:signal( "buttonSet" , "clicked()" , {| | ::execEvent( buttonSet_clicked ) } ) + ::oUI:signal( "buttonNew" , "clicked()" , {| | ::execEvent( buttonNew_clicked ) } ) + ::oUI:signal( "buttonSet" , "clicked()" , {| | ::execEvent( buttonSet_clicked ) } ) + ::oUI:signal( "buttonTest" , "clicked()" , {| | ::execEvent( buttonTest_clicked ) } ) + ::oUI:signal( "buttonLoad" , "clicked()" , {| | ::execEvent( buttonLoad_clicked ) } ) + ::oUI:signal( "buttonSave" , "clicked()" , {| | ::execEvent( buttonSave_clicked ) } ) + ::oUI:signal( "buttonSaveAs", "clicked()" , {| | ::execEvent( buttonSaveAs_clicked ) } ) + ::oUI:signal( "buttonAssign", "clicked()" , {| | ::execEvent( buttonAssign_clicked ) } ) + ::oUI:signal( "buttonDelete", "clicked()" , {| | ::execEvent( buttonDelete_clicked ) } ) - ::oUI:signal( "listMethods", "itemDoubleClicked(QLWItem)" , {|p| ::execEvent( listMethods_itemDoubleClicked, p ) } ) - ::oUI:signal( "listMethods", "currentRowChanged(int)" , {|p| ::execEvent( listMethods_currentRowChanged, p ) } ) + ::oUI:signal( "listMethods" , "itemDoubleClicked(QLWItem)" , {|p| ::execEvent( listMethods_itemDoubleClicked, p ) } ) + ::oUI:signal( "listMethods" , "currentRowChanged(int)" , {|p| ::execEvent( listMethods_currentRowChanged, p ) } ) - ::oUI:signal( "tableMacros", "itemSelectionChanged()" , {| | ::execEvent( tableMacros_itemSelectionChanged ) } ) - ::oUI:signal( "tableMacros", "itemDoubleClicked(QTblWItem)", {|p| ::execEvent( tableMacros_itemDoubleClicked, p ) } ) + ::oUI:signal( "tableMacros" , "itemSelectionChanged()" , {| | ::execEvent( tableMacros_itemSelectionChanged ) } ) + ::oUI:signal( "tableMacros" , "itemDoubleClicked(QTblWItem)", {|p| ::execEvent( tableMacros_itemDoubleClicked, p ) } ) RETURN Self @@ -432,6 +554,23 @@ METHOD IdeShortcuts:populateData( nMode ) /*----------------------------------------------------------------------*/ +METHOD IdeShortcuts:clearDftSCuts() + LOCAL a_, qItm + LOCAL oTbl := ::oUI:q_tableMacros + + FOR EACH a_ IN ::aDftSCutsItms + FOR EACH qItm IN a_ + qItm := NIL + NEXT + NEXT + ::aDftSCutsItms := {} + + oTbl:clearContents() + + RETURN Self + +/*----------------------------------------------------------------------*/ + METHOD IdeShortcuts:populateDftSCuts() LOCAL a_, nRow LOCAL oTbl := ::oUI:q_tableMacros @@ -441,10 +580,11 @@ METHOD IdeShortcuts:populateDftSCuts() nRow := 0 FOR EACH a_ IN ::aDftSCuts nRow++ - aadd( ::aDftSCutsItms, array( 5 ) ) + aadd( ::aDftSCutsItms, array( 6 ) ) ::array2table( nRow, a_ ) QApplication():processEvents() NEXT + oTbl:setCurrentCell( 0,0 ) RETURN Self @@ -483,14 +623,97 @@ METHOD IdeShortcuts:populateKeys() /*----------------------------------------------------------------------*/ -METHOD IdeShortcuts:loadDftSCuts() +METHOD IdeShortcuts:buildBlock( cString ) + LOCAL n, cBlock, cParam, a_ - /* Name Key Alt Ctrl Sh Menu Expr Icon */ - // - aadd( ::aDftSCuts, { "Duplicate Line" , "D" , "NO", "YES", "NO", "", "", "" } ) - aadd( ::aDftSCuts, { "Current Line Up", "Up", "NO", "YES", "NO", "", "", "" } ) + a_:= hbide_memoTOarray( cString ) + cString := "" + aeval( a_, {|e| cString += e } ) - RETURN Self + IF ( n := at( "|", cString ) ) > 0 + cString := substr( cString, n + 1 ) + IF ( n := at( "|", cString ) ) == 0 + RETURN Self + ENDIF + cParam := substr( cString, 1, n - 1 ) + cString := substr( cString, n + 1 ) + cBlock := "{|o," + cParam + "|" + cString + " }" + ELSE + cBlock := "{|o| " + cString + " }" + ENDIF + cBlock := strtran( cBlock, "::", "o:" ) + + RETURN cBlock + +/*----------------------------------------------------------------------*/ + +METHOD IdeShortcuts:test( cString, lWarn ) + LOCAL cBlock, oErr, bBlock + LOCAL lOk := .f. + LOCAL bError := ErrorBlock( {|o| break( o ) } ) + + cBlock := ::buildBlock( cString ) + + BEGIN SEQUENCE + bBlock := &( cBlock ) + lOk := .t. + IF lWarn + MsgBox( "Script compiles fine!", "Syntax checking", , , , bBlock ) + ENDIF + RECOVER USING oErr + MsgBox( "Wrongly defined script, syntax is |v| ::method( v )" + oErr:description ) + ENDSEQUENCE + + ErrorBlock( bError ) + ::oUI:raise() + ::oUI:setFocus_1() + + RETURN lOk + +/*----------------------------------------------------------------------*/ + +METHOD IdeShortcuts:evalMacro( cString ) + LOCAL bError := ErrorBlock( {|o| break( o ) } ) + LOCAL oErr, bBlock, cBlock + LOCAL lEvaluated := .f. + + cBlock := ::buildBlock( cString ) ; HB_TRACE( HB_TR_ALWAYS, cString, cBlock ) + + bBlock := &( cBlock ) + + BEGIN SEQUENCE + eval( bBlock, self ) + lEvaluated := .t. + RECOVER USING oErr + HB_TRACE( HB_TR_ALWAYS, valtype( oErr ), oErr:description ) + END SEQUENCE + + ErrorBlock( bError ) + RETURN lEvaluated + +/*----------------------------------------------------------------------*/ + +METHOD IdeShortcuts:execKey( nKey, lAlt, lCtrl, lShift ) + LOCAL lExecuted := .f. + LOCAL cKey, n + + IF ( n := ascan( ::aKeys, {|e_| e_[ 1 ] == nKey } ) ) > 0 + cKey := ::aKeys[ n, 2 ] + + n := ascan( ::aDftSCuts, {|e_| e_[ 2 ] == cKey .AND. ; + e_[ 3 ] == iif( lAlt , "YES", "NO" ) .AND. ; + e_[ 4 ] == iif( lCtrl , "YES", "NO" ) .AND. ; + e_[ 5 ] == iif( lShift, "YES", "NO" ) } ) + IF n > 0 + IF ! empty( ::aDftSCuts[ n, 7 ] ) + HB_TRACE( HB_TR_ALWAYS, nKey, lAlt, lCtrl, lShift, cKey ) + + lExecuted := ::evalMacro( ::aDftSCuts[ n, 7 ] ) + ENDIF + ENDIF + ENDIF + + RETURN lExecuted /*----------------------------------------------------------------------*/ @@ -633,62 +856,6 @@ METHOD IdeShortcuts:loadKeys() /*----------------------------------------------------------------------*/ -METHOD IdeShortcuts:evalMacro( cString ) - LOCAL bError := ErrorBlock( {|o| break( o ) } ) - LOCAL oErr, bBlock, n, cBlock, cParam - - IF ( n := at( "|", cString ) ) > 0 - cString := substr( cString, n + 1 ) - IF ( n := at( "|", cString ) ) == 0 - RETURN Self - ENDIF - cParam := substr( cString, 1, n - 1 ) - cString := substr( cString, n + 1 ) - cBlock := "{|o," + cParam + "|" + cString + " }" - ELSE - cBlock := "{|o| " + cString + " }" - ENDIF - cBlock := strtran( cBlock, "::", "o:" ) - - bBlock := &( cBlock ) - -HB_TRACE( HB_TR_ALWAYS, cBlock ) - BEGIN SEQUENCE - eval( bBlock, self ) - RECOVER USING oErr - MsgBox( "Wrongly defined block. Syntax is |var| method_call( var ) --- " + oErr:description ) - END SEQUENCE - - ErrorBlock( bError ) - RETURN Self - -/*----------------------------------------------------------------------*/ - -METHOD IdeShortcuts:fetchAndExecMacro() - LOCAL cStr - - cStr := hbide_fetchAString( ::oDlg:oWidget, "", "Macro", "Compilation" ) - IF !empty( cStr ) - ::evalMacro( cStr ) - ENDIF - - RETURN Self - -/*----------------------------------------------------------------------*/ - -METHOD IdeShortcuts:loadMethods() - - aadd( ::aMethods, { "getWord( lSelect )", "Returns text of the word under cursor. If text appears as selected." } ) - aadd( ::aMethods, { "getLine( lSelect )", "Returns text of the current line. If text appears as selected." } ) - aadd( ::aMethods, { "getText()" , "Returns current selected text." } ) - aadd( ::aMethods, { "execTool( ... )" , "Executes a 'Tool' under tools menu or without an entry." } ) - #if 0 - aadd( ::aMethods, { "", "" } ) - #endif - RETURN Self - -/*----------------------------------------------------------------------*/ - METHOD IdeShortcuts:execTool( ... ) RETURN ::oTM:execTool( ... ) @@ -700,7 +867,7 @@ METHOD IdeShortcuts:getWord( lSelect ) /*----------------------------------------------------------------------*/ METHOD IdeShortcuts:getLine( lSelect ) - RETURN ::oEM:getLine( lSelect ) + RETURN ::oEM:getLine( , lSelect ) /*----------------------------------------------------------------------*/ @@ -708,3 +875,314 @@ METHOD IdeShortcuts:getText() RETURN ::oEM:getText() /*----------------------------------------------------------------------*/ + +METHOD IdeShortcuts:duplicateLine() + RETURN ::oEM:duplicateLine() + +/*----------------------------------------------------------------------*/ + +METHOD IdeShortcuts:deleteLine() + RETURN ::oEM:deleteLine() + +/*----------------------------------------------------------------------*/ + +METHOD IdeShortcuts:moveLineUp() + RETURN ::oEM:moveLine( -1 ) + +/*----------------------------------------------------------------------*/ + +METHOD IdeShortcuts:moveLineDown() + RETURN ::oEM:moveLine( 1 ) + +/*----------------------------------------------------------------------*/ + +METHOD IdeShortcuts:help( cTopic ) + HB_SYMBOL_UNUSED( cTopic ) + RETURN ::oHelpDock:show() + +/*----------------------------------------------------------------------*/ + +METHOD IdeShortcuts:exit( lWarn ) + IF hb_isLogical( lWarn ) .AND. lWarn + IF hbide_getYesNo( "Exit hbIDE ?", , "Macro Executed" ) + PostAppEvent( xbeP_Close, NIL, NIL, ::oDlg ) + ENDIF + ELSE + PostAppEvent( xbeP_Close, NIL, NIL, ::oDlg ) + ENDIF + RETURN Self + +/*----------------------------------------------------------------------*/ + +METHOD IdeShortcuts:newSource( cType ) + HB_SYMBOL_UNUSED( cType ) + RETURN ::oSM:editSource( '' ) + +/*----------------------------------------------------------------------*/ + +METHOD IdeShortcuts:open() + RETURN ::oSM:openSource() + +/*----------------------------------------------------------------------*/ + +METHOD IdeShortcuts:save() + RETURN ::oSM:saveSource( ::oEM:getTabCurrent(), .f., .f. ) + +/*----------------------------------------------------------------------*/ + +METHOD IdeShortcuts:saveAll() + RETURN ::oSM:saveAllSources() + +/*----------------------------------------------------------------------*/ + +METHOD IdeShortcuts:close() + RETURN ::oSM:closeSource() + +/*----------------------------------------------------------------------*/ + +METHOD IdeShortcuts:print() + RETURN ::oEM:printPreview() + +/*----------------------------------------------------------------------*/ + +METHOD IdeShortcuts:revertToSaved() + RETURN Self + +/*----------------------------------------------------------------------*/ + +METHOD IdeShortcuts:findDlg() + IF !Empty( ::qCurEdit ) + ::oFR:show() + ENDIF + RETURN Self + +/*----------------------------------------------------------------------*/ + +METHOD IdeShortcuts:findDlgEx() + IF !Empty( ::qCurEdit ) + ::oSearchReplace:beginFind() + ENDIF + RETURN Self + +/*----------------------------------------------------------------------*/ + +METHOD IdeShortcuts:gotoLine( nLine ) + RETURN ::oEM:goTo( nLine ) + +/*----------------------------------------------------------------------*/ + +METHOD IdeShortcuts:indentRight() + RETURN ::oEM:indent( 1 ) + +/*----------------------------------------------------------------------*/ + +METHOD IdeShortcuts:indentLeft() + RETURN ::oEM:indent( -1 ) + +/*----------------------------------------------------------------------*/ + +METHOD IdeShortcuts:blockComment() + RETURN ::oEM:blockComment() + +/*----------------------------------------------------------------------*/ + +METHOD IdeShortcuts:streamComment() + RETURN ::oEM:streamComment() + +/*----------------------------------------------------------------------*/ + +METHOD IdeShortcuts:build( cProj ) + IF ! hb_isChar( cProj ) + cProj := "" + ENDIF + RETURN ::oPM:buildProject( cProj, .F., .F. ) + +/*----------------------------------------------------------------------*/ + +METHOD IdeShortcuts:buildLaunch( cProj ) + IF ! hb_isChar( cProj ) + cProj := "" + ENDIF + RETURN ::oPM:buildProject( cProj, .T., .F. ) + +/*----------------------------------------------------------------------*/ + +METHOD IdeShortcuts:launch( cProj ) + IF ! hb_isChar( cProj ) + cProj := "" + ENDIF + RETURN ::oPM:launchProject( cProj ) + +/*----------------------------------------------------------------------*/ + +METHOD IdeShortcuts:insert( cText ) + LOCAL oEdit + IF ! empty( oEdit := ::getEditObjectCurrent() ) + IF hb_isChar( cText ) + oEdit:insertText( cText ) + ENDIF + ENDIF + RETURN Self + +/*----------------------------------------------------------------------*/ + +METHOD IdeShortcuts:separator( cSep ) + RETURN ::oEM:insertSeparator( cSep ) + +/*----------------------------------------------------------------------*/ + +METHOD IdeShortcuts:loadMethods() + #if 0 + aadd( ::aMethods, { '', ; + '', ; + '' } ) + #endif + aadd( ::aMethods, { 'help( cTopic )', ; + 'help( "" )', ; + 'Invokes "Help" docking widget in the right docking area. is not active yet.' } ) + aadd( ::aMethods, { 'exit( lWarn )', ; + 'exit( .f. )', ; + 'Exits hbIDE. If then confirmation is requested through a popup dialog. All sources are saved if in modified state after confirmation to do so.' } ) + aadd( ::aMethods, { 'newSource( cType )', ; + 'newSource( "" )', ; + 'Initiates a blank source file in an editing instance on the current panel.' } ) + aadd( ::aMethods, { 'open()', ; + 'open()', ; + 'Invokes "Open File" dialog and if a selection is made and such selection is a hbIDE supported valid text file, that is opened in a new editor instance on visible panel.' } ) + aadd( ::aMethods, { 'save()', ; + 'save()', ; + 'Saves the current editing instance if in modified state. Visual artifacts are updated accordingly.' } ) + aadd( ::aMethods, { 'saveAll()', ; + 'saveAll()', ; + 'Saves all opened editing instances on the visible panel, if in modified state. Visual artifacts are updated accordingly.' } ) + aadd( ::aMethods, { 'close()', ; + 'close()', ; + 'Closes the current editing instance.' } ) + aadd( ::aMethods, { 'print()', ; + 'print()', ; + 'Invokes "Print Preview" dialog with current source contents ready to be printed.' } ) + aadd( ::aMethods, { 'findDlg()', ; + 'findDlg()', ; + 'Invokes "Find and Replace" dialog.' } ) + aadd( ::aMethods, { 'findDlgEx()', ; + 'findDlgEx()', ; + 'Invokes extended "Find and Replace" dialog at the bottom of editing area.' } ) + aadd( ::aMethods, { 'gotoLine( nLine )', ; + 'gotoLine( )', ; + 'Attempt is made to position the cursor at . If is not supplied, a "Goto" dialog is opened to supply .' } ) + aadd( ::aMethods, { 'indentRight()', ; + 'indentRight()', ; + 'Pushes one character right the currently selected text.' } ) + aadd( ::aMethods, { 'indentLeft()', ; + 'indentLeft()', ; + 'Pushes one character left the currently selected text. If there are no columns remains at left nothing happens.' } ) + aadd( ::aMethods, { 'blockComment()', ; + 'blockComment()', ; + 'Encloses currently selected text in line comments where each line is prefixed with //.' } ) + aadd( ::aMethods, { 'streamComment()', ; + 'streamComment()', ; + 'Encloses currently selected text in Anci-C like comments /* */' } ) + aadd( ::aMethods, { 'build( cProj )', ; + 'build( "" )', ; + 'Builds if it is already loaded. All sources are saved if found in modified state before "build" is initiated.' } ) + aadd( ::aMethods, { 'buildLaunch( cProj )', ; + 'buildLaunch( "" )', ; + 'Builds and launches if it is already loaded. All sources are saved if found in modified state before "build" is initiated.' } ) + aadd( ::aMethods, { 'launch( cProj )', ; + 'launch( "" )', ; + 'Launches if it is already loaded.' } ) + aadd( ::aMethods, { 'insert( cText )', ; + 'insert( "" )', ; + 'Insert at current cursor position.' } ) + aadd( ::aMethods, { 'separator( cSep )', ; + 'separator( "" )', ; + 'Inserts separator line immediately before current line. defaults to "/*---*/"' } ) + aadd( ::aMethods, { 'getWord( lSelect )', ; + 'getWord( .f. )' , ; + 'Returns text of the word under cursor. If text appears as selected.' } ) + aadd( ::aMethods, { 'getLine( lSelect )', ; + 'getLine( .f. )' , ; + 'Returns text of the current line. If text appears as selected.' } ) + aadd( ::aMethods, { 'getText()' , ; + 'getText()' , ; + 'Returns current selected text.' } ) + aadd( ::aMethods, { 'execTool( cName )' , ; + 'execTool( "" )' , ; + 'Executes a Tool defined and visible under tools menu.' } ) + aadd( ::aMethods, { 'execTool( cCmd, cParams, cStartIn, lCapture, lShowOutput )' , ; + 'execTool( "", "", "", .f., .f. )', ; + 'Executes a program or file with parameters and other attributes.' + CRLF + ; + 'http://hbide.vouch.info/ ( Topic: Tools and Utilities )' } ) + + RETURN Self + +/*----------------------------------------------------------------------*/ + +METHOD IdeShortcuts:loadDftSCuts() + LOCAL a_, b_ + + IF .t. + b_:= {} + + /* Name Key Alt Ctrl Sh Menu Expr Icon */ + // + aadd( b_, { "Help" , "F1" , "NO", "NO" , "NO" , "", '::help( "" )' , "help" , "", "" } ) + aadd( b_, { "Exit" , "W" , "NO", "YES", "YES", "", '::exit( .f. )' , "exit" , "", "" } ) + + aadd( b_, { "New Source" , "N" , "NO", "YES", "NO" , "", '::newSource( "" )' , "new" , "", "" } ) + aadd( b_, { "Open" , "O" , "NO", "YES", "NO" , "", '::open()' , "open" , "", "" } ) + aadd( b_, { "Save" , "S" , "NO", "YES", "NO" , "", '::save()' , "save" , "", "" } ) + aadd( b_, { "Save All" , "S" , "NO", "YES", "YES", "", '::saveAll()' , "saveall" , "", "" } ) + aadd( b_, { "Close" , "W" , "NO", "YES", "NO" , "", '::close()' , "close" , "", "" } ) + aadd( b_, { "Print" , "P" , "NO", "YES", "NO" , "", '::print()' , "print" , "", "" } ) + * aadd( b_, { "Revert to Saved" , "R" , "NO", "NO" , "YES", "", '::revertToSaved()' , "" , "", "" } ) + + aadd( b_, { "Find Dialog" , "F" , "NO", "YES", "NO" , "", '::findDlg()' , "find" , "", "" } ) + aadd( b_, { "Find Dialog Ex" , "F" , "NO", "YES", "YES", "", '::findDlgEx()' , "find" , "", "" } ) + + aadd( b_, { "Goto Line" , "G" , "NO", "YES", "NO" , "", '::gotoLine()' , "gotoline" , "", "" } ) + aadd( b_, { "Duplicate Line" , "D" , "NO", "YES", "NO" , "", '::duplicateLine()' , "duplicateline" , "", "" } ) + aadd( b_, { "Delete Line" , "Delete" , "NO", "YES", "NO" , "", '::deleteLine()' , "deleteline" , "", "" } ) + aadd( b_, { "Line Up" , "Up" , "NO", "YES", "YES", "", '::moveLineUp()' , "movelineup" , "", "" } ) + aadd( b_, { "Line Down" , "Down" , "NO", "YES", "YES", "", '::moveLineDown()' , "movelinedown" , "", "" } ) + + aadd( b_, { "Indent Right" , "Tab" , "NO", "YES", "NO" , "", '::indentRight()' , "blockindentr" , "", "" } ) + aadd( b_, { "Indent Left" , "Tab" , "NO", "YES", "YES", "", '::indentLeft()' , "blockindentl" , "", "" } ) + aadd( b_, { "Block Comment" , "Slash" , "NO", "YES", "YES", "", '::blockComment()' , "blockcomment" , "", "" } ) + aadd( b_, { "Stream Comment" , "Q" , "NO", "YES", "YES", "", '::streamComment()' , "streamcomment" , "", "" } ) + + aadd( b_, { "Build Project" , "F9" , "NO", "YES", "NO" , "", '::build( "" )' , "build" , "", "" } ) + aadd( b_, { "Build & Launch" , "F9" , "NO", "NO" , "NO" , "", '::buildLaunch( "" )' , "buildlaunch" , "", "" } ) + aadd( b_, { "Launch Project" , "F10" , "NO", "YES", "NO" , "", '::launch( "" )' , "launch" , "", "" } ) + + aadd( b_, { "Insert Text" , "F7" , "NO", "YES", "NO" , "", '::insert( "" )' , "insert-external-file", "", "" } ) + aadd( b_, { "Insert Separator", "F7" , "NO", "NO" , "NO" , "", '::separator( "" )' , "insert-separator", "", "" } ) + + ::aDftSCuts := b_ + ENDIF + + IF !empty( a_:= hbide_loadShortcuts( ::oIde ) ) + ::mergeMacros( a_ ) + ENDIF + + RETURN Self + +/*----------------------------------------------------------------------*/ + +METHOD IdeShortcuts:mergeMacros( a_ ) + LOCAL c_, n + + FOR EACH c_ IN a_ + IF ( n := ascan( ::aDftSCuts, {|e_| e_[ 2 ] == c_[ 2 ] .AND. e_[ 3 ] == c_[ 3 ] .AND. ; + e_[ 4 ] == c_[ 4 ] .AND. e_[ 5 ] == c_[ 5 ] } ) ) == 0 + aadd( ::aDftSCuts, c_ ) + ELSE + ::aDftSCuts[ n ] := c_ + ENDIF + NEXT + + RETURN Self + +/*----------------------------------------------------------------------*/ + + diff --git a/harbour/contrib/hbide/resources/environments.ui b/harbour/contrib/hbide/resources/environments.ui index 7f0586a8ca..bd70eff701 100644 --- a/harbour/contrib/hbide/resources/environments.ui +++ b/harbour/contrib/hbide/resources/environments.ui @@ -112,7 +112,7 @@ p, li { white-space: pre-wrap; } - Save and Exit + Save and Close diff --git a/harbour/contrib/hbide/resources/environments.uic b/harbour/contrib/hbide/resources/environments.uic index c3a097a54d..e76fe55a82 100644 --- a/harbour/contrib/hbide/resources/environments.uic +++ b/harbour/contrib/hbide/resources/environments.uic @@ -1,7 +1,7 @@ /******************************************************************************** ** Form generated from reading ui file 'environments.ui' ** -** Created: Mon Mar 8 23:16:40 2010 +** Created: Mon Apr 12 21:21:08 2010 ** by: Qt User Interface Compiler version 4.5.2 ** ** WARNING! All changes made in this file will be lost when recompiling ui file! @@ -133,7 +133,7 @@ public: editCompilers->setStyleSheet(QString()); buttonCn->setText(QApplication::translate("FormEnvironments", "Cancel", 0, QApplication::UnicodeUTF8)); labelPathMk2->setText(QApplication::translate("FormEnvironments", "Path to hbmk2", 0, QApplication::UnicodeUTF8)); - buttonSaveExit->setText(QApplication::translate("FormEnvironments", "Save and Exit", 0, QApplication::UnicodeUTF8)); + buttonSaveExit->setText(QApplication::translate("FormEnvironments", "Save and Close", 0, QApplication::UnicodeUTF8)); buttonSave->setText(QApplication::translate("FormEnvironments", "Save", 0, QApplication::UnicodeUTF8)); Q_UNUSED(FormEnvironments); } // retranslateUi diff --git a/harbour/contrib/hbide/resources/projectpropertiesex.ui b/harbour/contrib/hbide/resources/projectpropertiesex.ui index c62e5e7ba2..990fce669a 100644 --- a/harbour/contrib/hbide/resources/projectpropertiesex.ui +++ b/harbour/contrib/hbide/resources/projectpropertiesex.ui @@ -397,7 +397,7 @@ p, li { white-space: pre-wrap; } - Save and Exit + Save and Close diff --git a/harbour/contrib/hbide/resources/projectpropertiesex.uic b/harbour/contrib/hbide/resources/projectpropertiesex.uic index e11463deb2..e7652db6f2 100644 --- a/harbour/contrib/hbide/resources/projectpropertiesex.uic +++ b/harbour/contrib/hbide/resources/projectpropertiesex.uic @@ -1,8 +1,8 @@ /******************************************************************************** ** Form generated from reading ui file 'projectpropertiesex.ui' ** -** Created: Sat Mar 6 14:12:50 2010 -** by: Qt User Interface Compiler version 4.5.3 +** Created: Mon Apr 12 21:20:46 2010 +** by: Qt User Interface Compiler version 4.5.2 ** ** WARNING! All changes made in this file will be lost when recompiling ui file! ********************************************************************************/ @@ -432,7 +432,7 @@ public: #endif // QT_NO_TOOLTIP editHbp->setStyleSheet(QString()); tabWidget->setTabText(tabWidget->indexOf(tabHbp), QApplication::translate("FormProjectPropEx", "hbp", 0, QApplication::UnicodeUTF8)); - buttonSaveExit->setText(QApplication::translate("FormProjectPropEx", "Save and Exit", 0, QApplication::UnicodeUTF8)); + buttonSaveExit->setText(QApplication::translate("FormProjectPropEx", "Save and Close", 0, QApplication::UnicodeUTF8)); buttonSave->setText(QApplication::translate("FormProjectPropEx", "Save", 0, QApplication::UnicodeUTF8)); buttonCn->setText(QApplication::translate("FormProjectPropEx", "Cancel", 0, QApplication::UnicodeUTF8)); Q_UNUSED(FormProjectPropEx); diff --git a/harbour/contrib/hbide/resources/shortcuts.ui b/harbour/contrib/hbide/resources/shortcuts.ui index 233766f9e7..aebac26a38 100644 --- a/harbour/contrib/hbide/resources/shortcuts.ui +++ b/harbour/contrib/hbide/resources/shortcuts.ui @@ -6,12 +6,12 @@ 0 0 - 664 - 478 + 732 + 438 - Shortcuts + Keyboard Macros @@ -21,64 +21,64 @@ - + - Description + Description - + - + - Macros + Keyboard Shortcuts - + - Name + Name - + - Key + Key - + Alt - + Ctrl - + Shift @@ -88,110 +88,159 @@ - Menu + Menu - + - + - - - - - 45 - 0 - - - - - 45 - 16777215 - - + + - New + Script: - - - - - 45 - 0 - - - - - 45 - 16777215 - - - - Set - - - - - - - - 45 - 0 - - - - - 45 - 16777215 - - - - Load - - - - - - - - 45 - 0 - - - - - 45 - 16777215 - - - - Save - - - - - - - - 45 - 0 - - - - - 45 - 16777215 - - - - SaveAs - - + + + + + + + 40 + 0 + + + + + 40 + 16777215 + + + + New + + + + + + + + 40 + 0 + + + + + 40 + 16777215 + + + + Set + + + + + + + + 40 + 0 + + + + + 40 + 16777215 + + + + Test + + + + + + + + 40 + 0 + + + + + 40 + 16777215 + + + + Delete + + + + + + + + 40 + 0 + + + + + 40 + 16777215 + + + + Load + + + + + + + + 40 + 0 + + + + + 40 + 16777215 + + + + Save + + + + + + + + 40 + 0 + + + + + 40 + 16777215 + + + + SaveAs + + + + diff --git a/harbour/contrib/hbide/resources/shortcuts.uic b/harbour/contrib/hbide/resources/shortcuts.uic index 8fe72f8dde..4798868bd2 100644 --- a/harbour/contrib/hbide/resources/shortcuts.uic +++ b/harbour/contrib/hbide/resources/shortcuts.uic @@ -1,7 +1,7 @@ /******************************************************************************** ** Form generated from reading ui file 'shortcuts.ui' ** -** Created: Wed Apr 7 12:19:23 2010 +** Created: Mon Apr 12 21:22:31 2010 ** by: Qt User Interface Compiler version 4.5.2 ** ** WARNING! All changes made in this file will be lost when recompiling ui file! @@ -17,6 +17,7 @@ #include #include #include +#include #include #include #include @@ -49,8 +50,12 @@ public: QLabel *labelMenu; QLineEdit *editMenu; QPlainTextEdit *plainBlock; + QLabel *label; + QHBoxLayout *horizontalLayout; QPushButton *buttonNew; QPushButton *buttonSet; + QPushButton *buttonTest; + QPushButton *buttonDelete; QPushButton *buttonLoad; QPushButton *buttonSave; QPushButton *buttonSaveAs; @@ -59,7 +64,7 @@ public: { if (FormShortCuts->objectName().isEmpty()) FormShortCuts->setObjectName(QString::fromUtf8("FormShortCuts")); - FormShortCuts->resize(664, 478); + FormShortCuts->resize(732, 438); gridLayout = new QGridLayout(FormShortCuts); gridLayout->setObjectName(QString::fromUtf8("gridLayout")); labelMethods = new QLabel(FormShortCuts); @@ -70,7 +75,7 @@ public: labelSyntax = new QLabel(FormShortCuts); labelSyntax->setObjectName(QString::fromUtf8("labelSyntax")); - gridLayout->addWidget(labelSyntax, 0, 1, 1, 6); + gridLayout->addWidget(labelSyntax, 0, 1, 1, 10); listMethods = new QListWidget(FormShortCuts); listMethods->setObjectName(QString::fromUtf8("listMethods")); @@ -80,17 +85,17 @@ public: texteditSyntax = new QTextEdit(FormShortCuts); texteditSyntax->setObjectName(QString::fromUtf8("texteditSyntax")); - gridLayout->addWidget(texteditSyntax, 1, 1, 1, 6); + gridLayout->addWidget(texteditSyntax, 1, 1, 1, 10); labelMacros = new QLabel(FormShortCuts); labelMacros->setObjectName(QString::fromUtf8("labelMacros")); - gridLayout->addWidget(labelMacros, 2, 0, 1, 7); + gridLayout->addWidget(labelMacros, 2, 0, 1, 11); tableMacros = new QTableWidget(FormShortCuts); tableMacros->setObjectName(QString::fromUtf8("tableMacros")); - gridLayout->addWidget(tableMacros, 3, 0, 5, 1); + gridLayout->addWidget(tableMacros, 3, 0, 12, 1); labelName = new QLabel(FormShortCuts); labelName->setObjectName(QString::fromUtf8("labelName")); @@ -100,7 +105,7 @@ public: editName = new QLineEdit(FormShortCuts); editName->setObjectName(QString::fromUtf8("editName")); - gridLayout->addWidget(editName, 3, 2, 1, 5); + gridLayout->addWidget(editName, 3, 2, 1, 9); labelKey = new QLabel(FormShortCuts); labelKey->setObjectName(QString::fromUtf8("labelKey")); @@ -115,17 +120,17 @@ public: checkAlt = new QCheckBox(FormShortCuts); checkAlt->setObjectName(QString::fromUtf8("checkAlt")); - gridLayout->addWidget(checkAlt, 4, 3, 1, 2); + gridLayout->addWidget(checkAlt, 4, 5, 1, 2); checkCtrl = new QCheckBox(FormShortCuts); checkCtrl->setObjectName(QString::fromUtf8("checkCtrl")); - gridLayout->addWidget(checkCtrl, 4, 5, 1, 1); + gridLayout->addWidget(checkCtrl, 4, 7, 1, 1); checkShift = new QCheckBox(FormShortCuts); checkShift->setObjectName(QString::fromUtf8("checkShift")); - gridLayout->addWidget(checkShift, 4, 6, 1, 1); + gridLayout->addWidget(checkShift, 4, 10, 1, 1); labelMenu = new QLabel(FormShortCuts); labelMenu->setObjectName(QString::fromUtf8("labelMenu")); @@ -135,47 +140,71 @@ public: editMenu = new QLineEdit(FormShortCuts); editMenu->setObjectName(QString::fromUtf8("editMenu")); - gridLayout->addWidget(editMenu, 5, 2, 1, 5); + gridLayout->addWidget(editMenu, 5, 2, 1, 9); plainBlock = new QPlainTextEdit(FormShortCuts); plainBlock->setObjectName(QString::fromUtf8("plainBlock")); - gridLayout->addWidget(plainBlock, 6, 1, 1, 6); + gridLayout->addWidget(plainBlock, 7, 1, 5, 10); + label = new QLabel(FormShortCuts); + label->setObjectName(QString::fromUtf8("label")); + + gridLayout->addWidget(label, 6, 1, 1, 1); + + horizontalLayout = new QHBoxLayout(); + horizontalLayout->setObjectName(QString::fromUtf8("horizontalLayout")); buttonNew = new QPushButton(FormShortCuts); buttonNew->setObjectName(QString::fromUtf8("buttonNew")); - buttonNew->setMinimumSize(QSize(45, 0)); - buttonNew->setMaximumSize(QSize(45, 16777215)); + buttonNew->setMinimumSize(QSize(40, 0)); + buttonNew->setMaximumSize(QSize(40, 16777215)); - gridLayout->addWidget(buttonNew, 7, 1, 1, 1); + horizontalLayout->addWidget(buttonNew); buttonSet = new QPushButton(FormShortCuts); buttonSet->setObjectName(QString::fromUtf8("buttonSet")); - buttonSet->setMinimumSize(QSize(45, 0)); - buttonSet->setMaximumSize(QSize(45, 16777215)); + buttonSet->setMinimumSize(QSize(40, 0)); + buttonSet->setMaximumSize(QSize(40, 16777215)); - gridLayout->addWidget(buttonSet, 7, 2, 1, 1); + horizontalLayout->addWidget(buttonSet); + + buttonTest = new QPushButton(FormShortCuts); + buttonTest->setObjectName(QString::fromUtf8("buttonTest")); + buttonTest->setMinimumSize(QSize(40, 0)); + buttonTest->setMaximumSize(QSize(40, 16777215)); + + horizontalLayout->addWidget(buttonTest); + + buttonDelete = new QPushButton(FormShortCuts); + buttonDelete->setObjectName(QString::fromUtf8("buttonDelete")); + buttonDelete->setMinimumSize(QSize(40, 0)); + buttonDelete->setMaximumSize(QSize(40, 16777215)); + + horizontalLayout->addWidget(buttonDelete); buttonLoad = new QPushButton(FormShortCuts); buttonLoad->setObjectName(QString::fromUtf8("buttonLoad")); - buttonLoad->setMinimumSize(QSize(45, 0)); - buttonLoad->setMaximumSize(QSize(45, 16777215)); + buttonLoad->setMinimumSize(QSize(40, 0)); + buttonLoad->setMaximumSize(QSize(40, 16777215)); - gridLayout->addWidget(buttonLoad, 7, 3, 1, 1); + horizontalLayout->addWidget(buttonLoad); buttonSave = new QPushButton(FormShortCuts); buttonSave->setObjectName(QString::fromUtf8("buttonSave")); - buttonSave->setMinimumSize(QSize(45, 0)); - buttonSave->setMaximumSize(QSize(45, 16777215)); + buttonSave->setMinimumSize(QSize(40, 0)); + buttonSave->setMaximumSize(QSize(40, 16777215)); - gridLayout->addWidget(buttonSave, 7, 4, 1, 2); + horizontalLayout->addWidget(buttonSave); buttonSaveAs = new QPushButton(FormShortCuts); buttonSaveAs->setObjectName(QString::fromUtf8("buttonSaveAs")); - buttonSaveAs->setMinimumSize(QSize(45, 0)); - buttonSaveAs->setMaximumSize(QSize(45, 16777215)); + buttonSaveAs->setMinimumSize(QSize(40, 0)); + buttonSaveAs->setMaximumSize(QSize(40, 16777215)); - gridLayout->addWidget(buttonSaveAs, 7, 6, 1, 1); + horizontalLayout->addWidget(buttonSaveAs); + + + gridLayout->addLayout(horizontalLayout, 12, 1, 3, 10); retranslateUi(FormShortCuts); @@ -185,18 +214,21 @@ public: void retranslateUi(QWidget *FormShortCuts) { - FormShortCuts->setWindowTitle(QApplication::translate("FormShortCuts", "Shortcuts", 0, QApplication::UnicodeUTF8)); + FormShortCuts->setWindowTitle(QApplication::translate("FormShortCuts", "Keyboard Macros", 0, QApplication::UnicodeUTF8)); labelMethods->setText(QApplication::translate("FormShortCuts", "Public Methods", 0, QApplication::UnicodeUTF8)); - labelSyntax->setText(QApplication::translate("FormShortCuts", "Description", 0, QApplication::UnicodeUTF8)); - labelMacros->setText(QApplication::translate("FormShortCuts", "Macros", 0, QApplication::UnicodeUTF8)); - labelName->setText(QApplication::translate("FormShortCuts", "Name", 0, QApplication::UnicodeUTF8)); - labelKey->setText(QApplication::translate("FormShortCuts", "Key", 0, QApplication::UnicodeUTF8)); + labelSyntax->setText(QApplication::translate("FormShortCuts", " Description", 0, QApplication::UnicodeUTF8)); + labelMacros->setText(QApplication::translate("FormShortCuts", "Keyboard Shortcuts", 0, QApplication::UnicodeUTF8)); + labelName->setText(QApplication::translate("FormShortCuts", " Name", 0, QApplication::UnicodeUTF8)); + labelKey->setText(QApplication::translate("FormShortCuts", " Key", 0, QApplication::UnicodeUTF8)); checkAlt->setText(QApplication::translate("FormShortCuts", "Alt", 0, QApplication::UnicodeUTF8)); checkCtrl->setText(QApplication::translate("FormShortCuts", "Ctrl", 0, QApplication::UnicodeUTF8)); checkShift->setText(QApplication::translate("FormShortCuts", "Shift", 0, QApplication::UnicodeUTF8)); - labelMenu->setText(QApplication::translate("FormShortCuts", "Menu", 0, QApplication::UnicodeUTF8)); + labelMenu->setText(QApplication::translate("FormShortCuts", " Menu", 0, QApplication::UnicodeUTF8)); + label->setText(QApplication::translate("FormShortCuts", " Script:", 0, QApplication::UnicodeUTF8)); buttonNew->setText(QApplication::translate("FormShortCuts", "New", 0, QApplication::UnicodeUTF8)); buttonSet->setText(QApplication::translate("FormShortCuts", "Set", 0, QApplication::UnicodeUTF8)); + buttonTest->setText(QApplication::translate("FormShortCuts", "Test", 0, QApplication::UnicodeUTF8)); + buttonDelete->setText(QApplication::translate("FormShortCuts", "Delete", 0, QApplication::UnicodeUTF8)); buttonLoad->setText(QApplication::translate("FormShortCuts", "Load", 0, QApplication::UnicodeUTF8)); buttonSave->setText(QApplication::translate("FormShortCuts", "Save", 0, QApplication::UnicodeUTF8)); buttonSaveAs->setText(QApplication::translate("FormShortCuts", "SaveAs", 0, QApplication::UnicodeUTF8)); diff --git a/harbour/contrib/hbqt/hbqt_hbqplaintextedit.cpp b/harbour/contrib/hbqt/hbqt_hbqplaintextedit.cpp index b1a68f15ff..682324fe1d 100644 --- a/harbour/contrib/hbqt/hbqt_hbqplaintextedit.cpp +++ b/harbour/contrib/hbqt/hbqt_hbqplaintextedit.cpp @@ -100,8 +100,6 @@ HBQPlainTextEdit::HBQPlainTextEdit( QWidget * parent ) : QPlainTextEdit( parent HBQPlainTextEdit::~HBQPlainTextEdit() { - HB_TRACE( HB_TR_ALWAYS, ( "HBQPlainTextEdit::~HBQPlainTextEdit( 0 )" ) ); - disconnect( this, SIGNAL( blockCountChanged( int ) ) ); disconnect( this, SIGNAL( updateRequest( const QRect &, int ) ) ); disconnect( this, SIGNAL( cursorPositionChanged() ) ); @@ -199,7 +197,7 @@ void HBQPlainTextEdit::keyPressEvent( QKeyEvent * event ) QPlainTextEdit::keyPressEvent( event ); - const bool ctrlOrShift = event->modifiers() & (Qt::ControlModifier | Qt::ShiftModifier); + const bool ctrlOrShift = event->modifiers() & ( Qt::ControlModifier | Qt::ShiftModifier ); if( !c || ( ctrlOrShift && event->text().isEmpty() ) ) return; diff --git a/harbour/contrib/hbxbp/xbpdialog.prg b/harbour/contrib/hbxbp/xbpdialog.prg index 56f673438c..afd5a5254d 100644 --- a/harbour/contrib/hbxbp/xbpdialog.prg +++ b/harbour/contrib/hbxbp/xbpdialog.prg @@ -248,6 +248,8 @@ METHOD XbpDialog:destroy() HB_TRACE( HB_TR_ALWAYS, ". " ) HB_TRACE( HB_TR_ALWAYS, "<<<<<<<<<< XbpDialog:destroy B >>>>>>>>>>" ) + ::oWidget:removeEventFilter( ::pEvents ) + hbxbp_SetEventLoop( NIL ) ::oEventLoop:exit( 0 ) ::oEventLoop:pPtr := NIL