From 0ccafa64866788fbcb2d60838340ec24c600634b Mon Sep 17 00:00:00 2001 From: Pritpal Bedi Date: Mon, 11 Jan 2010 06:59:44 +0000 Subject: [PATCH] 2010-01-10 22:54 UTC-0800 Pritpal Bedi (pritpal@vouchcac.com) + contrib/hbide/resources/folder.png + Added new image to be placed on "Property Dialog"s folder selection push buttons. * contrib/hbide/resources/projectproperties.ui + Made resizable. Now it renders more usefulness. * contrib/hbide/hbide.prg * contrib/hbide/idedocks.prg * contrib/hbide/ideeditor.prg * contrib/hbide/idemisc.prg * contrib/hbide/ideobject.prg * contrib/hbide/ideprojmanager.prg * contrib/hbide/idesources.prg ! Fixed and corrected many artifacts. Mainly in the area of project building, please test. --- harbour/ChangeLog | 18 + harbour/contrib/hbide/hbide.prg | 34 +- harbour/contrib/hbide/idedocks.prg | 29 +- harbour/contrib/hbide/ideeditor.prg | 67 +- harbour/contrib/hbide/idemisc.prg | 7 +- harbour/contrib/hbide/ideobject.prg | 47 +- harbour/contrib/hbide/ideprojmanager.prg | 214 ++-- harbour/contrib/hbide/idesources.prg | 12 +- harbour/contrib/hbide/resources/folder.png | Bin 0 -> 427 bytes .../hbide/resources/projectproperties.ui | 937 ++++++++---------- 10 files changed, 649 insertions(+), 716 deletions(-) create mode 100644 harbour/contrib/hbide/resources/folder.png diff --git a/harbour/ChangeLog b/harbour/ChangeLog index 934b0bb65a..3c3504d757 100644 --- a/harbour/ChangeLog +++ b/harbour/ChangeLog @@ -17,6 +17,24 @@ past entries belonging to author(s): Viktor Szakats. */ +2010-01-10 22:54 UTC-0800 Pritpal Bedi (pritpal@vouchcac.com) + + contrib/hbide/resources/folder.png + + Added new image to be placed on "Property Dialog"s + folder selection push buttons. + + * contrib/hbide/resources/projectproperties.ui + + Made resizable. Now it renders more usefulness. + + * contrib/hbide/hbide.prg + * contrib/hbide/idedocks.prg + * contrib/hbide/ideeditor.prg + * contrib/hbide/idemisc.prg + * contrib/hbide/ideobject.prg + * contrib/hbide/ideprojmanager.prg + * contrib/hbide/idesources.prg + ! Fixed and corrected many artifacts. + Mainly in the area of project building, please test. + 2010-01-10 16:54 UTC-0300 Vailton Renato (vailtom gmail.com) * contrib/hbide/ideactions.prg + Added new action "CloseOther" referenced in the menu, but missing in diff --git a/harbour/contrib/hbide/hbide.prg b/harbour/contrib/hbide/hbide.prg index 06602e74ff..9a97ac4de5 100644 --- a/harbour/contrib/hbide/hbide.prg +++ b/harbour/contrib/hbide/hbide.prg @@ -225,7 +225,6 @@ CLASS HbIde METHOD manageItemSelected() METHOD getCurrentTab() METHOD getCurCursor() - METHOD addSourceInTree() METHOD createTags() METHOD manageFocusInEditor() METHOD loadUI() @@ -652,9 +651,9 @@ METHOD HbIde:updateProjectTree( aPrj, lRemove ) * Load previous aPath used to fill ::aProjData * 03/01/2010 - 16:08:25 - vailtom FOR j := 1 TO LEN( ::aProjData ) - IF !hb_isChar( ::aProjData[ j, 5 ] ).OR. ; // It is not a char? - ::aProjData[ j, TRE_TYPE ] != 'Path' .OR. ; // Is not an path? - ::aProjData[ j, TRE_DATA ] != cProject // Is not from same project? + IF !hb_isChar( ::aProjData[ j, 5 ] ) .OR. ; // It is not a char? + ::aProjData[ j, TRE_TYPE ] != 'Path' .OR. ; // Is not an path? + ::aProjData[ j, TRE_DATA ] != cProject // Is not from same project? LOOP ENDIF AAdd( aPath, { ::aProjData[ j, TRE_ORIGINAL ], ::aProjData[ j, 1 ]} ) @@ -737,33 +736,6 @@ METHOD HbIde:updateProjectTree( aPrj, lRemove ) /*----------------------------------------------------------------------*/ -METHOD HbIde:addSourceInTree( cSourceFile ) - LOCAL cPath, cPathA, cFile, cExt, n, oParent - LOCAL oGrand := ::oOpenedSources - - IF Empty( cSourceFile ) - RETURN nil - End - - hb_fNameSplit( cSourceFile, @cPath, @cFile, @cExt ) - cPathA := hbide_pathNormalized( cPath ) - - n := ascan( ::aEditorPath, {|e_| e_[ 2 ] == cPathA } ) - - IF n == 0 - oParent := oGrand:addItem( cPath ) - aadd( ::aProjData, { oParent, "Editor Path", oGrand, cPathA, cSourceFile } ) - aadd( ::aEditorPath, { oParent, cPathA } ) - ELSE - oParent := ::aEditorPath[ n,1 ] - ENDIF - - aadd( ::aProjData, { oParent:addItem( cFile+cExt ), "Opened Source", oParent, ; - cSourceFile, hbide_pathNormalized( cSourceFile ) } ) - RETURN Self - -/*----------------------------------------------------------------------*/ - METHOD HbIde:manageItemSelected( oXbpTreeItem ) LOCAL n, cHbi, aPrj diff --git a/harbour/contrib/hbide/idedocks.prg b/harbour/contrib/hbide/idedocks.prg index a8ea39a4ea..a8a561e48e 100644 --- a/harbour/contrib/hbide/idedocks.prg +++ b/harbour/contrib/hbide/idedocks.prg @@ -381,28 +381,21 @@ METHOD IdeDocks:outputDoubleClicked( lSelected ) LOCAL cSource, nLine IF lSelected - ::nPass++ - IF ::nPass == 1 - qCursor := QTextCursor():configure( ::oOutputResult:oWidget:textCursor() ) - cText := QTextBlock():configure( qCursor:block() ):text() + qCursor := QTextCursor():configure( ::oOutputResult:oWidget:textCursor() ) + cText := QTextBlock():configure( qCursor:block() ):text() - IF hbide_parseFNfromStatusMsg( cText, @cSource, @nLine, .T. ) - ::oSM:editSource( cSource, 0, 0, 0, NIL, .f. ) - qCursor := QTextCursor():configure( ::oIde:qCurEdit:textCursor() ) - nLine := iif( nLine < 1, 0, nLine - 1 ) + IF hbide_parseFNfromStatusMsg( cText, @cSource, @nLine, .T. ) + ::oSM:editSource( cSource, 0, 0, 0, NIL, .f. ) + 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:manageFocusInEditor() - -hbide_dbg( "............", cSource, cText ) - ENDIF - ENDIF - IF ::nPass >= 2 - ::nPass := 0 + qCursor:setPosition( 0 ) + qCursor:movePosition( QTextCursor_Down, QTextCursor_MoveAnchor, nLine ) + ::oIde:qCurEdit:setTextCursor( qCursor ) + ::oIde:manageFocusInEditor() ENDIF ENDIF + RETURN nLine /*----------------------------------------------------------------------*/ diff --git a/harbour/contrib/hbide/ideeditor.prg b/harbour/contrib/hbide/ideeditor.prg index 46ba78ab8d..7f9c96faed 100644 --- a/harbour/contrib/hbide/ideeditor.prg +++ b/harbour/contrib/hbide/ideeditor.prg @@ -116,6 +116,8 @@ CLASS IdeEditsManager INHERIT IdeObject METHOD prepareTabWidget() METHOD exeBlock() + METHOD addSourceInTree() + METHOD removeSourceInTree() ENDCLASS @@ -172,6 +174,45 @@ METHOD IdeEditsManager:prepareTabWidget() /*----------------------------------------------------------------------*/ +METHOD IdeEditsManager:removeSourceInTree( cSourceFile ) + LOCAL n + + IF !Empty( cSourceFile ) + IF ( n := aScan( ::aProjData, {|e_| e_[ TRE_ORIGINAL ] == cSourceFile .AND. e_[ 2 ] == "Opened Source" } ) ) > 0 + ::aProjData[ n,3 ]:delItem( ::oIde:aProjData[ n,1 ] ) + hb_adel( ::aProjData, n, .T. ) + ENDIF + ENDIF + + RETURN Self + +/*----------------------------------------------------------------------*/ + +METHOD IdeEditsManager:addSourceInTree( cSourceFile ) + LOCAL cPath, cPathA, cFile, cExt, n, oParent + LOCAL oGrand := ::oOpenedSources + + IF Empty( cSourceFile ) + RETURN nil + End + + hb_fNameSplit( cSourceFile, @cPath, @cFile, @cExt ) + cPathA := hbide_pathNormalized( cPath ) + + IF ( n := ascan( ::aEditorPath, {|e_| e_[ 2 ] == cPathA } ) ) == 0 + oParent := oGrand:addItem( cPath ) + aadd( ::aProjData, { oParent, "Editor Path", oGrand, cPathA, cSourceFile } ) + aadd( ::aEditorPath, { oParent, cPathA } ) + ELSE + oParent := ::aEditorPath[ n,1 ] + ENDIF + + aadd( ::aProjData, { oParent:addItem( cFile + cExt ), "Opened Source", oParent, ; + cSourceFile, hbide_pathNormalized( cSourceFile ) } ) + RETURN Self + +/*----------------------------------------------------------------------*/ + METHOD IdeEditsManager:exeBlock( nMode, p ) //LOCAL qObj @@ -708,7 +749,8 @@ METHOD IdeEditor:create( oIde, cSourceFile, nPos, nHPos, nVPos, cTheme ) ::oIde:nCurTab := len( ::oIde:aTabs ) /* Populate right at creation */ - ::oIde:addSourceInTree( ::sourceFile ) + //::oIde:addSourceInTree( ::sourceFile ) + ::oEM:addSourceInTree( ::sourceFile ) ::qTabWidget:setStyleSheet( GetStyleSheet( "QTabWidget" ) ) ::setTabImage() @@ -874,7 +916,6 @@ METHOD IdeEditor:closeTab( mp1, mp2, oXbp ) RETURN Self /*----------------------------------------------------------------------*/ - /* * Remove the tab of the main screen and clean the objects from memory.Note that * this function does not question the User if he wants to save or not the @@ -887,7 +928,6 @@ METHOD IdeEditor:removeTabPage() LOCAL n n := aScan( ::oIde:aTabs, {|e_| e_[ TAB_OEDITOR ]:nID == ::nID } ) - IF n > 0 hb_aDel( ::oIde:aTabs, n, .T. ) ENDIF @@ -895,13 +935,11 @@ METHOD IdeEditor:removeTabPage() n := ::oIde:qTabWidget:indexOf( ::oTab:oWidget ) ::oIde:qTabWidget:removeTab( n ) - /* Destroy all objects */ // { oTab, qEdit, qHiliter, qLayout, cSourceFile, qDocument } // IF !Empty( ::qEdit ) Qt_Slots_disConnect( ::pSlots, ::qEdit, "textChanged()" ) Qt_Slots_disConnect( ::pSlots, ::qEdit, "cursorPositionChanged()" ) - /* To avoid recursive calls on invalid pointers */ ENDIF IF !Empty( ::qDocument ) @@ -927,29 +965,12 @@ METHOD IdeEditor:removeTabPage() ::oIde:oFuncList:clear() ENDIF - IF !Empty( ::oTab ) -// ::oTab:Destroy() -// ::oTab:pPtr := 0 -// ::oTab := nil - ENDIF - - IF ( n := aScan( ::oIde:aProjData, {|e_| e_[ 4 ] == cSource } ) ) > 0 - ::aProjData[ n,3 ]:delItem( ::oIde:aProjData[ n,1 ] ) - hb_aDel( ::aProjData, n, .T. ) - ENDIF + ::oEM:removeSourceInTree( cSource ) IF ( n := aScan( ::oIde:aEdits, {|e_| e_:nID == ::nID } ) ) > 0 hb_aDel( ::oIde:aEdits, n, .T. ) ENDIF - /* - * TOFIX: Release memory from these objects & arrays - * - * aTabs - OK - * aSources - * aEdits - OK - * - */ IF ::qTabWidget:count() == 0 IF ::lDockRVisible ::oDockR:hide() diff --git a/harbour/contrib/hbide/idemisc.prg b/harbour/contrib/hbide/idemisc.prg index 278592b97b..5a19416627 100644 --- a/harbour/contrib/hbide/idemisc.prg +++ b/harbour/contrib/hbide/idemisc.prg @@ -501,13 +501,14 @@ FUNCTION hbide_isValidPath( cPath, cPathDescr ) IF hb_dirExists( cPath ) RETURN .T. - End + ENDIF IF empty( cPathDescr ) MsgBox( 'The specified path is invalid "' + cPath + '"' ) ELSE - MsgBox( 'The specified path is invalid for ' + cPathDescr + ': "' + cPath + '"' ) - End + //MsgBox( 'The specified path is invalid for ' + cPathDescr + ': "' + cPath + '"' ) + MsgBox( 'The specified path is invalid for : "' + cPath + '"', cPathDescr ) + ENDIF RETURN .F. /*----------------------------------------------------------------------*/ diff --git a/harbour/contrib/hbide/ideobject.prg b/harbour/contrib/hbide/ideobject.prg index f40daf349f..12b7fe0161 100644 --- a/harbour/contrib/hbide/ideobject.prg +++ b/harbour/contrib/hbide/ideobject.prg @@ -88,55 +88,50 @@ CLASS IdeObject ACCESS aMeta INLINE ::oIde:aMeta - ACCESS qCurEdit INLINE ::oIde:qCurEdit - ACCESS oCurEditor INLINE ::oIde:oCurEditor - ACCESS qTabWidget INLINE ::oIde:oDA:oTabWidget:oWidget - - ACCESS qBrushWrkProject INLINE ::oIde:qBrushWrkProject - - ACCESS cWrkProject INLINE ::oIde:cWrkProject - ACCESS cWrkTheme INLINE ::oIde:cWrkTheme - ACCESS aProjects INLINE ::oIde:aProjects - ACCESS aINI INLINE ::oIde:aINI - ACCESS aEdits INLINE ::oIde:aEdits - ACCESS aSources INLINE ::oIde:aSources - + ACCESS oFont INLINE ::oIde:oFont + ACCESS oThemes INLINE ::oIde:oThemes + ACCESS oSBar INLINE ::oIde:oSBar ACCESS oDlg INLINE ::oIde:oDlg ACCESS qDlg INLINE ::oIde:oDlg:oWidget ACCESS oDA INLINE ::oIde:oDA + ACCESS qCurEdit INLINE ::oIde:qCurEdit + ACCESS oCurEditor INLINE ::oIde:oCurEditor + ACCESS qTabWidget INLINE ::oIde:oDA:oTabWidget:oWidget + ACCESS qBrushWrkProject INLINE ::oIde:qBrushWrkProject + + ACCESS cWrkProject INLINE ::oIde:cWrkProject + ACCESS cWrkTheme INLINE ::oIde:cWrkTheme + ACCESS resPath INLINE ::oIde:resPath + ACCESS pathSep INLINE ::oIde:pathSep + + ACCESS aProjects INLINE ::oIde:aProjects + ACCESS aINI INLINE ::oIde:aINI + ACCESS aEdits INLINE ::oIde:aEdits + ACCESS aSources INLINE ::oIde:aSources + ACCESS aEditorPath INLINE ::oIde:aEditorPath + ACCESS aProjData INLINE ::oIde:aProjData + ACCESS aTabs INLINE ::oIde:aTabs + ACCESS oDockPT INLINE ::oIde:oDockPT ACCESS oProjTree INLINE ::oIde:oProjTree ACCESS oProjRoot INLINE ::oIde:oProjRoot - ACCESS aProjData INLINE ::oIde:aProjData - ACCESS oDockED INLINE ::oIde:oDockED ACCESS oEditTree INLINE ::oIde:oEditTree ACCESS oOpenedSources INLINE ::oIde:oOpenedSources - ACCESS oDockR INLINE ::oIde:oDockR ACCESS oFuncList INLINE ::oIde:oFuncList - ACCESS oDockB INLINE ::oIde:oDockB ACCESS oCompileResult INLINE ::oIde:oCompileResult - ACCESS oDockB1 INLINE ::oIde:oDockB1 ACCESS oLinkResult INLINE ::oIde:oLinkResult - ACCESS oDockB2 INLINE ::oIde:oDockB2 ACCESS oOutputResult INLINE ::oIde:oOutputResult - ACCESS resPath INLINE ::oIde:resPath - ACCESS pathSep INLINE ::oIde:pathSep - ACCESS oFont INLINE ::oIde:oFont - ACCESS oThemes INLINE ::oIde:oThemes - ACCESS aTabs INLINE ::oIde:aTabs - ACCESS lProjTreeVisible INLINE ::oIde:lProjTreeVisible ACCESS lDockRVisible INLINE ::oIde:lDockRVisible ACCESS lDockBVisible INLINE ::oIde:lDockBVisible ACCESS lTabCloseRequested INLINE ::oIde:lTabCloseRequested - ACCESS oSBar INLINE ::oIde:oSBar DATA aSlots INIT {} DATA aEvents INIT {} diff --git a/harbour/contrib/hbide/ideprojmanager.prg b/harbour/contrib/hbide/ideprojmanager.prg index 44eea66e2d..a3806facc5 100644 --- a/harbour/contrib/hbide/ideprojmanager.prg +++ b/harbour/contrib/hbide/ideprojmanager.prg @@ -106,21 +106,53 @@ CLASS IdeProject DATA compilers INIT "" METHOD new() + METHOD applyMeta( s ) + METHOD expandMeta( s ) ENDCLASS /*----------------------------------------------------------------------*/ +METHOD IdeProject:expandMeta( s ) + LOCAL k + LOCAL a_:= ::metaData + + IF ! Empty( a_ ) + FOR EACH k IN a_ DESCEND + s := StrTran( hbide_pathNormalized( s, .f. ), k[ 1 ], k[ 2 ] ) + NEXT + ENDIF + + RETURN s + +/*----------------------------------------------------------------------*/ + +METHOD IdeProject:applyMeta( s ) + LOCAL k + LOCAL a_:= ::metaData + //LOCAL ss := s + + IF ! Empty( a_ ) + FOR EACH k IN a_ + s := StrTran( hbide_pathNormalized( s, .f. ), k[ 2 ], k[ 1 ] ) + NEXT + ENDIF + + //MsgBox( ss + " => " + s ) + RETURN s + +/*----------------------------------------------------------------------*/ + METHOD IdeProject:new( aProps ) LOCAL b_, a_ - IF hb_isArray( aProps ) + IF hb_isArray( aProps ) .AND. !empty( aProps ) ::aProjProps := aProps - b_:= aProps[ 3 ] + b_:= aProps - ::normalizedName := b_[ 1 ] - ::fileName := b_[ 2 ] + //::normalizedName := b_[ 1 ] + //::fileName := b_[ 2 ] a_:= b_[ PRJ_PRP_PROPERTIES, 2 ] @@ -133,17 +165,22 @@ METHOD IdeProject:new( aProps ) ::launchParams := a_[ E_oPrjLau ] ::launchProgram := a_[ E_oPrjLEx ] - ::hbpFlags := b_[ PRJ_PRP_FLAGS , 2 ] - ::sources := b_[ PRJ_PRP_SOURCES , 2 ] - ::metaData := b_[ PRJ_PRP_METADATA, 2 ] + ::hbpFlags := aclone( b_[ PRJ_PRP_FLAGS , 2 ] ) + ::sources := aclone( b_[ PRJ_PRP_SOURCES , 2 ] ) + ::metaData := aclone( b_[ PRJ_PRP_METADATA, 2 ] ) ::dotHbp := "" ::compilers := "" + FOR EACH a_ IN ::metaData + a_[ 2 ] := hbide_pathNormalized( a_[ 2 ], .f. ) + NEXT ENDIF RETURN Self /*----------------------------------------------------------------------*/ +// IdeProjectManager +/*----------------------------------------------------------------------*/ CLASS IdeProjManager INHERIT IdeObject @@ -178,8 +215,10 @@ CLASS IdeProjManager INHERIT IdeObject METHOD buildProject() METHOD readProcessInfo() METHOD getProjectProperties() - METHOD getProject() + METHOD getProjectByTitle() + METHOD getProjectByFile() METHOD buildProcess() + METHOD updateMetaData() ENDCLASS @@ -258,6 +297,9 @@ METHOD IdeProjManager:loadProperties( cProjFileName, lNew, lFetch, lUpdateTree ) ENDIF IF lFetch + /* Access/Assign via this object */ + ::oProject := IdeProject():new( ::aPrjProps ) + // ::fetchProperties() IF !empty( ::cSaveTo ) .and. hb_FileExists( ::cSaveTo ) cProjFileName := ::cSaveTo @@ -266,7 +308,7 @@ METHOD IdeProjManager:loadProperties( cProjFileName, lNew, lFetch, lUpdateTree ) ENDIF IF n == 0 - aadd( ::oIde:aProjects, { lower( cProjFileName ), cProjFileName, aclone( ::aPrjProps ) } ) + aadd( ::oIde:aProjects, { hbide_pathNormalized( cProjFileName ), cProjFileName, aclone( ::aPrjProps ) } ) IF lUpdateTree ::oIde:updateProjectTree( ::aPrjProps ) ENDIF @@ -286,6 +328,7 @@ METHOD IdeProjManager:loadProperties( cProjFileName, lNew, lFetch, lUpdateTree ) /*----------------------------------------------------------------------*/ METHOD IdeProjManager:fetchProperties() + LOCAL cLukupPng LOCAL cPrjLoc := hb_dirBase() + "projects" ::oUI := XbpQtUiLoader():new( ::oDlg ) @@ -307,18 +350,21 @@ METHOD IdeProjManager:fetchProperties() ::oUI:q_comboPrjType:setCurrentIndex( 0 ) ENDCASE - ::oUI:q_buttonChoosePrjLoc:setIcon( ::resPath + "lookup.png" ) - ::oUI:q_buttonChooseWd:setIcon( ::resPath + "lookup.png" ) - ::oUI:q_buttonChooseDest:setIcon( ::resPath + "lookup.png" ) + cLukupPng := ::resPath + "folder.png" + ::oUI:q_buttonChoosePrjLoc:setIcon( cLukupPng ) + ::oUI:q_buttonChooseWd:setIcon( cLukupPng ) + ::oUI:q_buttonChooseDest:setIcon( cLukupPng ) ::oUI:signal( "buttonCn" , "clicked()", {|| ::oUI:oWidget:close() } ) ::oUI:signal( "buttonSave" , "clicked()", {|| ::save( .F. ) } ) ::oUI:signal( "buttonSaveExit" , "clicked()", {|| ::save( .T. ) } ) ::oUI:signal( "buttonSelect" , "clicked()", {|| ::addSources() } ) ::oUI:signal( "tabWidget" , "currentChanged(int)", {|o,p| ::updateHbp( p, o ) } ) + ::oUI:signal( "editMetaData" , "textChanged()", {|o| ::updateMetaData( o ) } ) - ::oUI:signal( "buttonChoosePrjLoc", "clicked()", {|| ::PromptForPath( 'editPrjLoctn', 'Choose the Project Location...', 'editOutName', "editWrkFolder", "editDstFolder" ) } ) - ::oUI:signal( "buttonChooseWd" , "clicked()", {|| ::PromptForPath( 'editWrkFolder', 'Choose a Working Folder...' ) } ) + ::oUI:signal( "buttonChoosePrjLoc", "clicked()", {|| ::PromptForPath( 'editPrjLoctn', 'Choose the Project Location...' ) } )//, ; + // 'editOutName', "editWrkFolder", "editDstFolder" ) } ) + ::oUI:signal( "buttonChooseWd" , "clicked()", {|| ::PromptForPath( 'editWrkFolder', 'Choose a Working Folder...' ) } ) ::oUI:signal( "buttonChooseDest" , "clicked()", {|| ::PromptForPath( 'editDstFolder', 'Choose a Destination Folder...' ) } ) IF empty( ::aPrjProps ) @@ -327,14 +373,14 @@ METHOD IdeProjManager:fetchProperties() * will adjust the other parameters. (vailtoms) * 25/12/2009 - 20:40:22 */ - ::oUI:q_editPrjLoctn:setText( StrTran( cPrjLoc, '\', '/' ) ) + ::oUI:q_editPrjLoctn:setText( hbide_pathNormalized( cPrjLoc, .F. ) ) ELSE - ::oUI:q_editPrjTitle:setText( ::aPrjProps[ PRJ_PRP_PROPERTIES, 1, PRJ_PRP_TITLE ] ) - ::oUI:q_editPrjLoctn:setText( ::aPrjProps[ PRJ_PRP_PROPERTIES, 1, PRJ_PRP_LOCATION ] ) - ::oUI:q_editWrkFolder:setText( ::aPrjProps[ PRJ_PRP_PROPERTIES, 1, PRJ_PRP_WRKFOLDER ] ) - ::oUI:q_editDstFolder:setText( ::aPrjProps[ PRJ_PRP_PROPERTIES, 1, PRJ_PRP_DSTFOLDER ] ) - ::oUI:q_editOutName:setText( ::aPrjProps[ PRJ_PRP_PROPERTIES, 1, PRJ_PRP_OUTPUT ] ) + ::oUI:q_editPrjTitle:setText( ::oProject:applyMeta( ::oProject:title ) ) + ::oUI:q_editPrjLoctn:setText( ::oProject:applyMeta( ::oProject:location ) ) + ::oUI:q_editWrkFolder:setText( ::oProject:applyMeta( ::oProject:wrkDirectory ) ) + ::oUI:q_editDstFolder:setText( ::oProject:applyMeta( ::oProject:destination ) ) + ::oUI:q_editOutName:setText( ::oProject:outputName ) ::oUI:q_editFlags:setPlainText( hbide_arrayToMemo( ::aPrjProps[ PRJ_PRP_FLAGS , 1 ] ) ) ::oUI:q_editSources:setPlainText( hbide_arrayToMemo( ::aPrjProps[ PRJ_PRP_SOURCES , 1 ] ) ) @@ -354,7 +400,7 @@ METHOD IdeProjManager:fetchProperties() ::oUI:oWidget:setWindowTitle( 'Properties for "' + ::oUI:q_editPrjTitle:Text() + '"' ) ENDIF - ::setPosByIni( ::oUI:oWidget, PropsDialogGeometry ) + ::setPosAndSizeByIni( ::oUI:oWidget, PropsDialogGeometry ) // ::oUI:exec() // @@ -369,42 +415,74 @@ METHOD IdeProjManager:fetchProperties() /*----------------------------------------------------------------------*/ +METHOD IdeProjManager:updateMetaData() + LOCAL a_, s, n, cKey, cVal + LOCAL a4_1 := {} +hbide_dbg( "updateMetaData" ) + a_:= hbide_memoToArray( ::oUI:q_editMetaData:toPlainText() ) + + FOR EACH s IN a_ + IF !( "#" == left( s,1 ) ) + IF ( n := at( "=", s ) ) > 0 + cKey := alltrim( substr( s, 1, n-1 ) ) + cVal := hbide_evalAsString( alltrim( substr( s, n+1 ) ) ) + aadd( a4_1, { "<"+ cKey +">", cVal } ) + ENDIF + ENDIF + NEXT + + ::oProject:metaData := a4_1 + + RETURN Self + +/*----------------------------------------------------------------------*/ + METHOD IdeProjManager:save( lCanClose ) - LOCAL a_, a4_1, lOk - LOCAL typ_:= { "Executable", "Lib", "Dll" } - LOCAL txt_:= {} + LOCAL a_, lOk, cPath, txt_ * Validate certain parameters before continuing ... (vailtom) - IF Empty( ::oUI:q_editOutName:text() ) - IF Empty( ::oUI:q_editPrjTitle:text() ) - MsgBox( 'Invalid Output FileName!' ) - ::oUI:q_editOutName:setFocus() - RETURN .F. - ENDIF - ::oUI:q_editOutName:setText( ::oUI:q_editPrjTitle:text() ) - ENDIF + /* Title cannot be the output name, but reverse is possible + -------------------------------------------------------- + We must also consider that user may be building the project in parts + OR may be basic definition must be in place + */ IF Empty( ::oUI:q_editPrjTitle:text() ) ::oUI:q_editPrjTitle:setText( ::oUI:q_editOutName:text() ) ENDIF - IF !hbide_isValidPath( ::oUI:q_editPrjLoctn:text(), 'Project Location' ) + IF Empty( ::oUI:q_editOutName:text() ) + MsgBox( 'Invalid Output FileName' ) + ::oUI:q_editOutName:setFocus() + RETURN .F. + ENDIF + + /* This must be valid, we cannot skip */ + IF !hbide_isValidPath( ::oProject:expandMeta( ::oUI:q_editPrjLoctn:text() ), 'Project Location' ) ::oUI:q_editPrjLoctn:setFocus() RETURN .F. ENDIF - IF !hbide_isValidPath( ::oUI:q_editWrkFolder:text(), 'Working Folder' ) - ::oUI:q_editWrkFolder:setText( ::oUI:q_editPrjLoctn:text() ) - RETURN .F. + /* This we can skip now: later at project building we can check: TO:RECONSIDER */ + IF !empty( cPath := ::oUI:q_editWrkFolder:text() ) + IF !hbide_isValidPath( ::oProject:expandMeta( cPath ), 'Working Folder' ) + // ::oUI:q_editWrkFolder:setText( ::oUI:q_editPrjLoctn:text() ) + RETURN .F. + ENDIF ENDIF - IF !hbide_isValidPath( ::oUI:q_editDstFolder:text(), 'Destination Folder' ) - ::oUI:q_editDstFolder:setText( ::oUI:q_editPrjLoctn:text() ) - RETURN .F. + /* This we can skip now: later at project building we can check: TO:RECONSIDER */ + IF !empty( cPath := ::oUI:q_editDstFolder:text() ) + IF !hbide_isValidPath( ::oProject:expandMeta( cPath ), 'Destination Folder' ) + // ::oUI:q_editDstFolder:setText( ::oUI:q_editPrjLoctn:text() ) + RETURN .F. + ENDIF ENDIF + txt_:= {} + // aadd( txt_, "[ PROPERTIES ]" ) - aadd( txt_, "Type = " + typ_[ ::oUI:q_comboPrjType:currentIndex()+1 ] ) + aadd( txt_, "Type = " + { "Executable", "Lib", "Dll" }[ ::oUI:q_comboPrjType:currentIndex()+1 ] ) aadd( txt_, "Title = " + ::oUI:q_editPrjTitle:text() ) aadd( txt_, "Location = " + ::oUI:q_editPrjLoctn:text() ) aadd( txt_, "WorkingFolder = " + ::oUI:q_editWrkFolder:text() ) @@ -413,14 +491,15 @@ METHOD IdeProjManager:save( lCanClose ) aadd( txt_, "LaunchParams = " + ::oUI:q_editLaunchParams:text() ) aadd( txt_, "LaunchProgram = " + ::oUI:q_editLaunchExe:text() ) aadd( txt_, " " ) - + // aadd( txt_, "[ FLAGS ]" ) - a_:= hbide_memoToArray( ::oUI:q_editFlags:toPlainText() ); aeval( a_, {|e| aadd( txt_, e ) } ) ; aadd( txt_, " " ) + a_:= hbide_memoToArray( ::oUI:q_editFlags:toPlainText() ) ; aeval( a_, {|e| aadd( txt_, e ) } ) ; aadd( txt_, " " ) aadd( txt_, "[ SOURCES ]" ) - a_:= hbide_memoToArray( ::oUI:q_editSources:toPlainText() ); aeval( a_, {|e| aadd( txt_, e ) } ) ; aadd( txt_, " " ) + a_:= hbide_memoToArray( ::oUI:q_editSources:toPlainText() ) ; aeval( a_, {|e| aadd( txt_, e ) } ) ; aadd( txt_, " " ) aadd( txt_, "[ METADATA ]" ) a_:= hbide_memoToArray( ::oUI:q_editMetaData:toPlainText() ); aeval( a_, {|e| aadd( txt_, e ) } ) ; aadd( txt_, " " ) + #if 0 /* Setup Meta Keys */ a4_1 := hbide_setupMetaKeys( a_ ) @@ -429,6 +508,13 @@ METHOD IdeProjManager:save( lCanClose ) hbide_parseWithMetaData( ::oUI:q_editOutName:text(), a4_1 ) + ; ".hbi" ::cSaveTo := hbide_pathToOSPath( ::cSaveTo ) + #endif + + ::cSaveTo := ::oProject:expandMeta( ::oUI:q_editPrjLoctn:text() ) + ; + ::pathSep + ; + ::oProject:expandMeta( ::oUI:q_editOutName:text() ) + ; + ".hbi" + ::cSaveTo := hbide_pathToOSPath( ::cSaveTo ) IF ( lOk := hbide_createTarget( ::cSaveTo, txt_ ) ) *MsgBox( 'The project file was saved successfully: ' + ::cSaveTo, 'Saving project ...' ) @@ -497,7 +583,7 @@ METHOD IdeProjManager:updateHbp( iIndex ) METHOD IdeProjManager:addSources() LOCAL aFiles, a_, b_, a4_1, s - IF !empty( aFiles := ::selectSource( "openmany" ) ) + IF !empty( aFiles := ::oSM:selectSource( "openmany" ) ) a_:= hbide_memoToArray( ::oUI:q_editMetaData:toPlainText() ) a4_1 := hbide_setupMetaKeys( a_ ) @@ -627,10 +713,10 @@ METHOD IdeProjManager:selectCurrentProject() /*----------------------------------------------------------------------*/ -METHOD IdeProjManager:getProjectProperties( cProject ) +METHOD IdeProjManager:getProjectProperties( cProjectTitle ) LOCAL n - IF ( n := ascan( ::aProjects, {|e_, x| x := e_[ 3 ], x[ 1, 2, PRJ_PRP_TITLE ] == cProject } ) ) > 0 + IF ( n := ascan( ::aProjects, {|e_, x| x := e_[ 3 ], x[ 1, 2, PRJ_PRP_TITLE ] == cProjectTitle } ) ) > 0 RETURN ::aProjects[ n, 3 ] ENDIF @@ -638,10 +724,12 @@ METHOD IdeProjManager:getProjectProperties( cProject ) /*----------------------------------------------------------------------*/ -METHOD IdeProjManager:getProject( cProject ) +METHOD IdeProjManager:getProjectByFile( cProjectFile ) LOCAL n, aProj - IF ( n := ascan( ::aProjects, {|e_, x| x := e_[ 3 ], x[ 1, 2, PRJ_PRP_TITLE ] == cProject } ) ) > 0 + cProjectFile := hbide_pathNormalized( cProjectFile ) + + IF ( n := ascan( ::aProjects, {|e_| e_[ 1 ] == cProjectFile } ) ) > 0 aProj := ::aProjects[ n ] ENDIF @@ -649,6 +737,17 @@ METHOD IdeProjManager:getProject( cProject ) /*----------------------------------------------------------------------*/ +METHOD IdeProjManager:getProjectByTitle( cProjectTitle ) + LOCAL n, aProj + + IF ( n := ascan( ::aProjects, {|e_, x| x := e_[ 3 ], x[ 1, 2, PRJ_PRP_TITLE ] == cProjectTitle } ) ) > 0 + aProj := ::aProjects[ n, 3 ] + ENDIF + + RETURN IdeProject():new( aProj ) + +/*----------------------------------------------------------------------*/ + METHOD IdeProjManager:closeProject( cProject ) LOCAL nPos @@ -660,14 +759,11 @@ METHOD IdeProjManager:closeProject( cProject ) DEFAULT cProject TO ::getCurrentProject() nPos := ascan( ::aProjects, {|e_| e_[ 3, PRJ_PRP_PROPERTIES, 2, E_oPrjTtl ] == cProject } ) - IF ( nPos < 0 ) MsgBox( 'Invalid project: "' + cProject + '"' ) RETURN Self ENDIF - * aadd( ::aProjects, { lower( cProject ), cProject, aclone( ::aPrjProps ) } ) - ::aPrjProps := {} ::updateProjectTree( ::aProjects[ nPos, 3 ], .T. ) hb_adel( ::aProjects, nPos, .T. ) @@ -682,28 +778,28 @@ METHOD IdeProjManager:closeProject( cProject ) METHOD IdeProjManager:promptForPath( cObjPathName, cTitle, cObjFileName, cObjPath2, cObjPath3 ) LOCAL cTemp, cPath, cFile + cTemp := ::oProject:expandMeta( ::oUI:qObj[ cObjPathName ]:Text() ) + IF !hb_isChar( cObjFileName ) - cTemp := ::oUI:qObj[ cObjPathName ]:Text() cPath := hbide_fetchADir( ::oDlg, cTitle, cTemp ) - cPath := StrTran( cPath, "\", "/" ) ELSE - cTemp := ::oUI:qObj[ cObjPathName ]:Text() cTemp := hbide_fetchAFile( ::oDlg, cTitle, { { "Harbour IDE Projects", "*.hbi" } }, cTemp ) IF !Empty( cTemp ) - cTemp := strtran( cTemp, "\", '/' ) - - hb_fNameSplit( cTemp, @cPath, @cFile ) + hb_fNameSplit( hbide_pathNormalized( cTemp, .f. ), @cPath, @cFile ) ::oUI:qObj[ cObjFileName ]:setText( cFile ) ENDIF ENDIF IF !Empty( cPath ) - IF Right( cPath, 1 ) == '/' + IF Right( cPath, 1 ) $ '/\' cPath := Left( cPath, Len( cPath ) - 1 ) ENDIF + + cPath := ::oProject:applyMeta( cPath ) + ::oUI:qObj[ cObjPathName ]:setText( cPath ) IF hb_isChar( cObjPath2 ) .AND. Empty( ::oUI:qObj[ cObjPath2 ]:Text() ) @@ -749,7 +845,7 @@ METHOD IdeProjManager:buildProject( cProject, lLaunch, lRebuild, lPPO, lViaQt ) lRebuild := .t. ENDIF - ::oProject := ::getProject( cProject ) + ::oProject := ::getProjectByTitle( cProject ) //cTargetFN := aPrj[ PRJ_PRP_PROPERTIES, 2, PRJ_PRP_LOCATION ] + ::pathSep + aPrj[ PRJ_PRP_PROPERTIES, 2, PRJ_PRP_OUTPUT ] cTargetFN := hbide_pathToOSPath( ::oProject:location + ::pathSep + ; diff --git a/harbour/contrib/hbide/idesources.prg b/harbour/contrib/hbide/idesources.prg index f5fc21b81f..dc511aaf7b 100644 --- a/harbour/contrib/hbide/idesources.prg +++ b/harbour/contrib/hbide/idesources.prg @@ -318,15 +318,15 @@ METHOD IdeSourcesManager:closeAllOthers( nTab ) RETURN .F. ENDIF - nID := oEdit:nID - nTab:= 0 + nID := oEdit:nID + nTab := 0 * Finally now we will close all tabs. DO WHILE ( ++nTab <= Len( ::aTabs ) ) - oEdit := ::oEM:getEditorByTabPosition( nTab ) - - IF empty(oEdit) .OR. oEdit:nID == nID + oEdit := ::oEM:getEditorByTabPosition( nTab ) + + IF empty( oEdit ) .OR. oEdit:nID == nID LOOP ENDIF @@ -380,7 +380,7 @@ METHOD IdeSourcesManager:revertSource( nTab ) IF nTab < 1 RETURN .F. - End + ENDIF IF !::aTabs[ nTab, TAB_QDOCUMENT ]:isModified() * File has not changed, ignore the question to User diff --git a/harbour/contrib/hbide/resources/folder.png b/harbour/contrib/hbide/resources/folder.png new file mode 100644 index 0000000000000000000000000000000000000000..41a6a440e34ba05c7802fe6e5443ec4ea8a21239 GIT binary patch literal 427 zcmV;c0aX5pP)F*n#D%%p+nxW9`CzsB=h8p+Y>s$>8Syj@z<%oGdMV8>mUmv~;Sw01 z4Mst9QC!`+99~4Xdkk5?HWr8}=<=*67x%-BLy$C1@zpl5=>B+Q?SRiQm?J#^lCZH0 zp#y-EwZS&QB5m#ld!vYq>NKwyaDc-Lj`IQNg|$@_5AQ+`%YSo%Rz0 zj&N|!fB=BFy0!>FAm(yqg<+tF44__S(c>EfPH=Jh1*okcentSkKm?G969IHp)P61j ztk)4gD-d7G$pNVVy08xwJ+w*y^-c7yB9Q5<7Ya>PWTf^u6D#wsqSjprps@`>MIZqW zrvON8`VcDupn3BRkWJyQZ=g5@E*6EWeevD|`c&*p%e;KCK>o+AfxMGMPZ0d;`UH!k VrSF&vQRe^v002ovPDHLkV1i*-yhH#1 literal 0 HcmV?d00001 diff --git a/harbour/contrib/hbide/resources/projectproperties.ui b/harbour/contrib/hbide/resources/projectproperties.ui index b450646731..0fa01a40eb 100644 --- a/harbour/contrib/hbide/resources/projectproperties.ui +++ b/harbour/contrib/hbide/resources/projectproperties.ui @@ -22,423 +22,285 @@ - - - - 12 - 12 - 369 - 421 - - - - 0 - - - - General - - - - - 124 - 16 - 221 - 22 - + + + + + 1 - - <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0//EN" "http://www.w3.org/TR/REC-html40/strict.dtd"> + + + General + + + + + + + 75 + true + + + + Project Type: + + + Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter + + + + + + + <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0//EN" "http://www.w3.org/TR/REC-html40/strict.dtd"> <html><head><meta name="qrichtext" content="1" /><style type="text/css"> p, li { white-space: pre-wrap; } </style></head><body style=" font-family:'MS Shell Dlg 2'; font-size:8.25pt; font-weight:400; font-style:normal;"> <p align="center" style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-size:8pt;">A project may be of type Executable|Library|Dll.</span></p></body></html> - - - false - - - - - - 12 - 16 - 101 - 16 - - - - - 75 - true - - - - Project Type: - - - Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter - - - - - - 124 - 48 - 221 - 20 - - - - <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0//EN" "http://www.w3.org/TR/REC-html40/strict.dtd"> + + + false + + + + + + + Project Title: + + + Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter + + + + + + + <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0//EN" "http://www.w3.org/TR/REC-html40/strict.dtd"> <html><head><meta name="qrichtext" content="1" /><style type="text/css"> p, li { white-space: pre-wrap; } </style></head><body style=" font-family:'MS Shell Dlg 2'; font-size:8.25pt; font-weight:400; font-style:normal;"> <p align="center" style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-size:8pt;">Title will be shown as a node in project tree.</span></p></body></html> - - - - - - 12 - 48 - 101 - 16 - - - - Project Title: - - - Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter - - - - - - 12 - 80 - 101 - 16 - - - - Project Location: - - - Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter - - - - - - 124 - 80 - 181 - 20 - - - - <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0//EN" "http://www.w3.org/TR/REC-html40/strict.dtd"> + + + + + + + Project Location: + + + Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter + + + + + + + <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0//EN" "http://www.w3.org/TR/REC-html40/strict.dtd"> <html><head><meta name="qrichtext" content="1" /><style type="text/css"> p, li { white-space: pre-wrap; } </style></head><body style=" font-family:'MS Shell Dlg 2'; font-size:8.25pt; font-weight:400; font-style:normal;"> <p align="center" style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-size:8pt;">Project location is the folder where project definition file .hbi will be stored. &lt;Project Location&gt; plus &lt;Output Name&gt; will comprise the full file name with .hbp extension.</span></p></body></html> - - - - - - 12 - 112 - 101 - 16 - - - - Working Folder: - - - Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter - - - - - - 124 - 112 - 181 - 20 - - - - <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0//EN" "http://www.w3.org/TR/REC-html40/strict.dtd"> + + + + + + + + + + + 21 + 20 + + + + true + + + + + + + Working Folder: + + + Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter + + + + + + + <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0//EN" "http://www.w3.org/TR/REC-html40/strict.dtd"> <html><head><meta name="qrichtext" content="1" /><style type="text/css"> p, li { white-space: pre-wrap; } </style></head><body style=" font-family:'MS Shell Dlg 2'; font-size:8.25pt; font-weight:400; font-style:normal;"> <p align="center" style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-size:8pt;">Working folder will be used to host HBMK2 compliant </span><span style=" font-size:8pt; font-weight:600;">&lt;Output Name&gt;</span><span style=" font-size:8pt;"> plus </span><span style=" font-size:8pt; font-weight:600;">&lt;.hbp&gt;</span><span style=" font-size:8pt;"> and will be designated as current folder when </span><span style=" font-size:8pt; font-weight:600;">HBMK2</span><span style=" font-size:8pt;"> will be invoked.</span></p></body></html> - - - - - - 12 - 144 - 101 - 16 - - - - Destination Folder: - - - Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter - - - - - - 124 - 144 - 181 - 20 - - - - <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0//EN" "http://www.w3.org/TR/REC-html40/strict.dtd"> + + + + + + + + + + + 21 + 20 + + + + + + + + Destination Folder: + + + Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter + + + + + + + <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0//EN" "http://www.w3.org/TR/REC-html40/strict.dtd"> <html><head><meta name="qrichtext" content="1" /><style type="text/css"> p, li { white-space: pre-wrap; } </style></head><body style=" font-family:'MS Shell Dlg 2'; font-size:8.25pt; font-weight:400; font-style:normal;"> <p align="center" style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;">Destination folder is a compatibility slot and is reserved to place the &lt;Output&gt; .exe .a .lib. </p> <p align="center" style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;">But currently this functionality will be achieved through the -o compiler flag.</p></body></html> - - - - - - 12 - 176 - 101 - 16 - - - - Output Name: - - - Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter - - - - - - 124 - 176 - 181 - 20 - - - - <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0//EN" "http://www.w3.org/TR/REC-html40/strict.dtd"> + + + + + + + + + + + 21 + 20 + + + + + + + + Output Name: + + + Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter + + + + + + + <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0//EN" "http://www.w3.org/TR/REC-html40/strict.dtd"> <html><head><meta name="qrichtext" content="1" /><style type="text/css"> p, li { white-space: pre-wrap; } </style></head><body style=" font-family:'MS Shell Dlg 2'; font-size:8.25pt; font-weight:400; font-style:normal;"> <p align="center" style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;">Output name is used as final name for .hbi .hbp .exe .lib .a and will be added to the paths retrieved via &lt;Project Location&gt;, &lt;Working Folder&gt;, &lt;Destination Folder&gt;, etc. So this is a very important component.</p></body></html> - - - - - - 12 - 332 - 101 - 16 - - - - Launch Parameters: - - - Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter - - - - - - 124 - 332 - 221 - 20 - - - - - - - 12 - 368 - 101 - 16 - - - - Launch Program: - - - Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter - - - - - - 124 - 364 - 221 - 20 - - - - - - - 124 - 208 - 221 - 109 - - - - <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0//EN" "http://www.w3.org/TR/REC-html40/strict.dtd"> + + + + + + + Compile/Link Flags: + + + Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter + + + + + + + <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0//EN" "http://www.w3.org/TR/REC-html40/strict.dtd"> <html><head><meta name="qrichtext" content="1" /><style type="text/css"> p, li { white-space: pre-wrap; } </style></head><body style=" font-family:'MS Shell Dlg 2'; font-size:8.25pt; font-weight:400; font-style:normal;"> <p align="center" style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-size:8pt;">Compiler/Linker flags may include all commands except the source files list. Additional libraries can be included here.</span></p></body></html> - - - - - - QPlainTextEdit::NoWrap - - - - - - 16 - 208 - 97 - 16 - - - - Compile/Link Flags: - - - Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter - - - - - - 316 - 110 - 29 - 24 - - - - - - - - 21 - 20 - - - - - - - 316 - 78 - 29 - 24 - - - - - - - - 21 - 20 - - - - true - - - - - - 316 - 141 - 29 - 24 - - - - - - - - 21 - 20 - - - - - - - Sources - - - - - 12 - 12 - 265 - 16 - - - - Source Files List ( use meta paths in angled brackets ) - - - - - - 290 - 8 - 61 - 24 - - - - Select - - - - - - 12 - 40 - 341 - 345 - - - - <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0//EN" "http://www.w3.org/TR/REC-html40/strict.dtd"> + + + + + + QPlainTextEdit::NoWrap + + + + + + + Launch Parameters: + + + Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter + + + + + + + + + + Launch Program: + + + Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter + + + + + + + + + + + Sources + + + + + + Source Files List ( use meta paths in angled brackets ) + + + + + + + + 0 + 0 + + + + + 90 + 0 + + + + Select + + + + + + + <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0//EN" "http://www.w3.org/TR/REC-html40/strict.dtd"> <html><head><meta name="qrichtext" content="1" /><style type="text/css"> p, li { white-space: pre-wrap; } </style></head><body style=" font-family:'MS Shell Dlg 2'; font-size:8.25pt; font-weight:400; font-style:normal;"> @@ -446,64 +308,41 @@ p, li { white-space: pre-wrap; } <p align="center" style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"></p> <p align="center" style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;">NOTE:</p> <p align="center" style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;">Only .prg .c .cpp .rc .res files will be supplied to the HBMK2. All other files will be made visible for editing in &lt;Project Tree&gt;.</p></body></html> - - - - - - QPlainTextEdit::NoWrap - - - - - - Meta Data - - - - - 12 - 120 - 341 - 265 - - - - <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0//EN" "http://www.w3.org/TR/REC-html40/strict.dtd"> -<html><head><meta name="qrichtext" content="1" /><style type="text/css"> -p, li { white-space: pre-wrap; } -</style></head><body style=" font-family:'MS Shell Dlg 2'; font-size:8.25pt; font-weight:400; font-style:normal;"> -<p align="center" style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;">Meta-keys are a special way of keeping generic information which is of repeated and/or of dynamic nature. HBIDE implements meta key/value pair more comprehensively. It allows you to write an expression for the value part which get evaluated at the time project is loaded. The only point to take into consideration is that value returned by such expression must be of type character.</p> -<p align="center" style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"></p> -<p align="center" style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;">The expression is evaluated only once and keeps its value until the HBIDE interface is closed. In case of any error, the expression string itself is returned.</p></body></html> - - - - - - QPlainTextEdit::NoWrap - - - - - - 12 - 12 - 341 - 93 - - - - background-color: rgb(171, 171, 171); - - - true - - - true - - - HBIDE will employ the concept of meta-data which will be used to parse the paths or other info supplied to the interface. + + + + + + QPlainTextEdit::NoWrap + + + + + + + + Meta Data + + + + + + + 0 + 0 + + + + background-color: rgb(171, 171, 171); + + + true + + + true + + + HBIDE will employ the concept of meta-data which will be used to parse the paths or other info supplied to the interface. Usually meta-key is enclosed in curly braces, but due to the fact that HBMK2 already exploits it, HBIDE will recognize meta-key in angled brackets. @@ -517,57 +356,68 @@ HBIDE internally employs few keys which are shown below and are always include i Enjoy Pritpal Bedi - - - - - - .hbp - - - - - 12 - 12 - 341 - 373 - - - - <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0//EN" "http://www.w3.org/TR/REC-html40/strict.dtd"> + + + + + + + <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0//EN" "http://www.w3.org/TR/REC-html40/strict.dtd"> +<html><head><meta name="qrichtext" content="1" /><style type="text/css"> +p, li { white-space: pre-wrap; } +</style></head><body style=" font-family:'MS Shell Dlg 2'; font-size:8.25pt; font-weight:400; font-style:normal;"> +<p align="center" style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;">Meta-keys are a special way of keeping generic information which is of repeated and/or of dynamic nature. HBIDE implements meta key/value pair more comprehensively. It allows you to write an expression for the value part which get evaluated at the time project is loaded. The only point to take into consideration is that value returned by such expression must be of type character.</p> +<p align="center" style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"></p> +<p align="center" style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;">The expression is evaluated only once and keeps its value until the HBIDE interface is closed. In case of any error, the expression string itself is returned.</p></body></html> + + + + + + QPlainTextEdit::NoWrap + + + + + + + + .hbp + + + + + + <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0//EN" "http://www.w3.org/TR/REC-html40/strict.dtd"> <html><head><meta name="qrichtext" content="1" /><style type="text/css"> p, li { white-space: pre-wrap; } </style></head><body style=" font-family:'MS Shell Dlg 2'; font-size:8.25pt; font-weight:400; font-style:normal;"> <p align="center" style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-size:8pt;">Here you can view in real-time the resultant .hbp output which will be supplied to HBMK2. This view may give you insight about your source layout and many other facts.</span></p> <p align="center" style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-size:8pt;"></p> <p align="center" style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-size:14pt; font-weight:600; text-decoration: underline;">Enjoy</span></p></body></html> - - - - - - QPlainTextEdit::NoWrap - - - true - - - - - - Compilers - - - - - 12 - 12 - 341 - 373 - - - - <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0//EN" "http://www.w3.org/TR/REC-html40/strict.dtd"> + + + + + + QPlainTextEdit::NoWrap + + + true + + + + + + + + Compilers + + + + + + <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0//EN" "http://www.w3.org/TR/REC-html40/strict.dtd"> <html><head><meta name="qrichtext" content="1" /><style type="text/css"> p, li { white-space: pre-wrap; } </style></head><body style=" font-family:'MS Shell Dlg 2'; font-size:8.25pt; font-weight:400; font-style:normal;"> @@ -576,64 +426,54 @@ p, li { white-space: pre-wrap; } <p align="center" style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-size:8pt;">So here you view/edit all the environments you employ in your applications. At the time you will build the project, a list of stated environments will be presented to choose from.</span></p> <p align="center" style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-size:8pt;"></p> <p align="center" style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-size:8pt;">This opens up the possibility to experiment with different compilers without re-opening the IDE or setting up the envvars manually.</span></p></body></html> - - - - - - QPlainTextEdit::NoWrap - + + + + + + QPlainTextEdit::NoWrap + + + + + - - - - - - 12 - 444 - 117 - 24 - - - - Cancel - - - false - - - - - - 140 - 444 - 117 - 24 - - - - Save - - - false - - - true - - - - - - 264 - 444 - 117 - 24 - - - - Save and Exit - - + + + + + + + Save and Exit + + + + + + + Save + + + false + + + true + + + + + + + Cancel + + + false + + + + + + comboPrjType @@ -654,10 +494,7 @@ p, li { white-space: pre-wrap; } editMetaHelp editHbp editCompilers - buttonCn tabWidget - buttonSaveExit - buttonSave