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 0000000000..41a6a440e3
Binary files /dev/null and b/harbour/contrib/hbide/resources/folder.png differ
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. <Project Location> plus <Output Name> 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;"><Output Name></span><span style=" font-size:8pt;"> plus </span><span style=" font-size:8pt; font-weight:600;"><.hbp></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 <Output> .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 <Project Location>, <Working Folder>, <Destination Folder>, 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 <Project Tree>.</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