2010-03-06 15:32 UTC-0800 Pritpal Bedi (pritpal@vouchcac.com)

+ contrib/hbide/resources/fl_c.png
  + contrib/hbide/resources/fl_dll.png
  + contrib/hbide/resources/fl_exe.png
  + contrib/hbide/resources/fl_ini.png
  + contrib/hbide/resources/fl_lib.png
  + contrib/hbide/resources/fl_prg.png
  + contrib/hbide/resources/fl_res.png
  + contrib/hbide/resources/fl_txt.png
  * contrib/hbide/resources/hb-16x16.png
  * contrib/hbide/resources/hb-32x32.png
  * contrib/hbide/resources/hbide.png
  + contrib/hbide/resources/hbidesplashwatermark.png
  + contrib/hbide/resources/panel_2.png
  + contrib/hbide/resources/panel_3.png
  + contrib/hbide/resources/panel_4.png
  + contrib/hbide/resources/panel_5.png
  + contrib/hbide/resources/panel_6.png
  + contrib/hbide/resources/panel_7.png
  + contrib/hbide/resources/source_c.png
  + contrib/hbide/resources/source_cpp.png
  + contrib/hbide/resources/source_h.png
  + contrib/hbide/resources/source_o.png
  + contrib/hbide/resources/source_prg.png
  + contrib/hbide/resources/source_res.png
  + contrib/hbide/resources/source_txt.png
  + contrib/hbide/resources/source_unknown.png
    + Added more images for user interface. 

  * contrib/hbide/resources/projectpropertiesex.ui
  * contrib/hbide/resources/projectpropertiesex.uic
    - Removed xMate ".xhp" project loading icon.

  * contrib/hbxbp/xbpwindow.prg
    ! Commented out "resize" event as it was hanging the 
      applications without any graspable reason. Will be 
      investigated deeply in future.

  * contrib/hbide/hbide.hbp
  * contrib/hbide/hbide.prg
  * contrib/hbide/ideactions.prg
  * contrib/hbide/idedocks.prg
  * contrib/hbide/ideeditor.prg
  * contrib/hbide/idehome.prg
  * contrib/hbide/idemisc.prg
  * contrib/hbide/ideobject.prg
  * contrib/hbide/ideprojmanager.prg
  * contrib/hbide/idesaveload.prg
  * contrib/hbide/idestylesheets.prg
  + contrib/hbide/idethemes.prg
    
    ! This commit corrects/fixes issues reported by Viktor.
      Please scratch them again. I might have missed a couple
      of them.

    + Implemented: A root panel called "Stats" containing,
      presently, "Welcome" and "FAQ's" tabs, detailed below.
      Now hbIDE has a mechanism to hold as many informative 
      slots as the development will demand in future.

      <Welcome>: It holds the exiting "Projects" information:
        Title   Type   Sources   Last_Modified    Location

      The field <Title> is a link to open detailed view of its 
      contents which contain fields:
        Source   Type   Size   Last_Modified   Location

      Clicking on a <Source> opens it in the editor under "Main" panel.

      <Home> icon is added in the top-toolbar next to <Exit> icon
      which leads you to <Stats> panel holding <Welcome> and <FAQs> tabs.

      Projects -> Detail -> Source : backward navigation is enabled 
      through context menu withing browser. The options within thus
      context menu has <Print> option which leads to print preview
      dialog and eventually to printing on the paper.

      <FAQs>: This holds short questions and answers as per the 
      industry standards. I could put only two of them still. 
      Please forward the ones you consider should go to this list.

    ! Changed: main window icon as previous one was not giving a 
      strong impression to be remember for long.
    
    ! Loading/Opening a project: now offers .hbp or .xhp options.
      .xhp is converted to .hbp and is written to disk and project
      is loaded as usual. This should be a one-time process.

    ! Click on function list now position the clicked function 
      in the center of the editor.

    ! IdeSettings.ini is now hbide.set and is saved where hbide.ini 
      is residing. The change is name was nessary as to avoid
      wrong impression of .ini nature as a text file. It is binary
      by nature.

    ! Many more artifacts which I tend to forget, please bear it 
      with my age.
This commit is contained in:
Pritpal Bedi
2010-03-07 00:06:49 +00:00
parent e80a2ad13d
commit 4c5a91c3ca
42 changed files with 1296 additions and 736 deletions

View File

@@ -17,6 +17,105 @@
past entries belonging to author(s): Viktor Szakats.
*/
2010-03-06 15:32 UTC-0800 Pritpal Bedi (pritpal@vouchcac.com)
+ contrib/hbide/resources/fl_c.png
+ contrib/hbide/resources/fl_dll.png
+ contrib/hbide/resources/fl_exe.png
+ contrib/hbide/resources/fl_ini.png
+ contrib/hbide/resources/fl_lib.png
+ contrib/hbide/resources/fl_prg.png
+ contrib/hbide/resources/fl_res.png
+ contrib/hbide/resources/fl_txt.png
* contrib/hbide/resources/hb-16x16.png
* contrib/hbide/resources/hb-32x32.png
* contrib/hbide/resources/hbide.png
+ contrib/hbide/resources/hbidesplashwatermark.png
+ contrib/hbide/resources/panel_2.png
+ contrib/hbide/resources/panel_3.png
+ contrib/hbide/resources/panel_4.png
+ contrib/hbide/resources/panel_5.png
+ contrib/hbide/resources/panel_6.png
+ contrib/hbide/resources/panel_7.png
+ contrib/hbide/resources/source_c.png
+ contrib/hbide/resources/source_cpp.png
+ contrib/hbide/resources/source_h.png
+ contrib/hbide/resources/source_o.png
+ contrib/hbide/resources/source_prg.png
+ contrib/hbide/resources/source_res.png
+ contrib/hbide/resources/source_txt.png
+ contrib/hbide/resources/source_unknown.png
+ Added more images for user interface.
* contrib/hbide/resources/projectpropertiesex.ui
* contrib/hbide/resources/projectpropertiesex.uic
- Removed xMate ".xhp" project loading icon.
* contrib/hbxbp/xbpwindow.prg
! Commented out "resize" event as it was hanging the
applications without any graspable reason. Will be
investigated deeply in future.
* contrib/hbide/hbide.hbp
* contrib/hbide/hbide.prg
* contrib/hbide/ideactions.prg
* contrib/hbide/idedocks.prg
* contrib/hbide/ideeditor.prg
* contrib/hbide/idehome.prg
* contrib/hbide/idemisc.prg
* contrib/hbide/ideobject.prg
* contrib/hbide/ideprojmanager.prg
* contrib/hbide/idesaveload.prg
* contrib/hbide/idestylesheets.prg
+ contrib/hbide/idethemes.prg
! This commit corrects/fixes issues reported by Viktor.
Please scratch them again. I might have missed a couple
of them.
+ Implemented: A root panel called "Stats" containing,
presently, "Welcome" and "FAQ's" tabs, detailed below.
Now hbIDE has a mechanism to hold as many informative
slots as the development will demand in future.
<Welcome>: It holds the exiting "Projects" information:
Title Type Sources Last_Modified Location
The field <Title> is a link to open detailed view of its
contents which contain fields:
Source Type Size Last_Modified Location
Clicking on a <Source> opens it in the editor under "Main" panel.
<Home> icon is added in the top-toolbar next to <Exit> icon
which leads you to <Stats> panel holding <Welcome> and <FAQs> tabs.
Projects -> Detail -> Source : backward navigation is enabled
through context menu withing browser. The options within thus
context menu has <Print> option which leads to print preview
dialog and eventually to printing on the paper.
<FAQs>: This holds short questions and answers as per the
industry standards. I could put only two of them still.
Please forward the ones you consider should go to this list.
! Changed: main window icon as previous one was not giving a
strong impression to be remember for long.
! Loading/Opening a project: now offers .hbp or .xhp options.
.xhp is converted to .hbp and is written to disk and project
is loaded as usual. This should be a one-time process.
! Click on function list now position the clicked function
in the center of the editor.
! IdeSettings.ini is now hbide.set and is saved where hbide.ini
is residing. The change is name was nessary as to avoid
wrong impression of .ini nature as a text file. It is binary
by nature.
! Many more artifacts which I tend to forget, please bear it
with my age.
2010-03-06 23:44 UTC+0100 Przemyslaw Czerpak (druzus/at/priv.onet.pl)
* harbour/src/vm/evalhb.c
* harbour/src/vm/asort.c

View File

@@ -24,6 +24,7 @@ ideprojmanager.prg
idesources.prg
ideharbourhelp.prg
ideenviron.prg
idehome.prg
ideparseexpr.c

View File

@@ -140,6 +140,7 @@ CLASS HbIde
DATA oSkeltnUI
DATA oFindDock
DATA oHL
DATA oHM
DATA oUI
@@ -154,7 +155,6 @@ CLASS HbIde
DATA aProjData INIT {}
DATA aPrpObjs INIT {}
DATA aEditorPath INIT {}
DATA nCurView INIT 1
/* HBQT Objects */
DATA qLayout
@@ -286,7 +286,6 @@ CLASS HbIde
METHOD execProjectAction( cKey )
METHOD execSourceAction( cKey )
METHOD execEditorAction( cKey )
METHOD execWindowsAction( cKey )
/* Methods to be evaluated as macros */
METHOD getWord( lSelect )
@@ -335,8 +334,7 @@ METHOD HbIde:showApplicationCursor( nCursor )
/*----------------------------------------------------------------------*/
METHOD HbIde:create( cProjIni )
#if 1
LOCAL qPixmap, qSplash, nStart
LOCAL qPixmap, qSplash
qPixmap := QPixmap():new( hb_dirBase() + "resources" + hb_osPathSeparator() + "hbidesplash.png" )
qSplash := QSplashScreen():new()
@@ -345,7 +343,6 @@ METHOD HbIde:create( cProjIni )
qSplash:show()
::showApplicationCursor( Qt_BusyCursor )
QApplication():processEvents()
#endif
DEFAULT cProjIni TO ::cProjIni
::cProjIni := cProjIni
@@ -411,6 +408,9 @@ METHOD HbIde:create( cProjIni )
/* Load Environments */
::oEV := IdeEnvironments():new( Self, hbide_pathToOSPath( ::aINI[ INI_HBIDE, PathEnv ] + ::pathSep + "hbide.env" ) ):create()
/* Home Implementation */
::oHM := IdeHome():new():create( Self )
/* Just to spare some GC calls */
::qCursor := QTextCursor():new()
::qBrushWrkProject := QBrush():new( "QColor", QColor():new( 255,0,0 ) )
@@ -453,21 +453,16 @@ METHOD HbIde:create( cProjIni )
::oDockB1:hide()
::oDockB2:hide()
::oDockB:hide()
//::oDocViewDock:hide()
::oDocViewDock:hide()
/* Request Main Window to Appear on the Screen */
::oHM:refresh()
::oDlg:Show()
::oDK:setView( "Stats" )
nStart := seconds()
DO WHILE .t.
QApplication():processEvents()
IF seconds()-nStart > 5
::showApplicationCursor()
qSplash:close()
qSplash := NIL
EXIT
ENDIF
ENDDO
::showApplicationCursor()
qSplash:close()
qSplash := NIL
DO WHILE .t.
::nEvent := AppEvent( @::mp1, @::mp2, @::oXbp )
@@ -531,6 +526,7 @@ METHOD HbIde:create( cProjIni )
hbide_dbg( "Before ::oDlg:destroy()", memory( 1001 ), hbqt_getMemUsed() )
hbide_dbg( " " )
::oHM:destroy()
::oHL:destroy()
::oThemes:destroy()
::oFindInFiles:destroy()
@@ -560,6 +556,10 @@ METHOD HbIde:execAction( cKey )
CASE "Exit"
PostAppEvent( xbeP_Close, NIL, NIL, ::oDlg )
EXIT
CASE "Home"
::oDK:setView( "Stats" )
//::oHM:refresh()
EXIT
CASE "NewProject"
CASE "LoadProject"
CASE "LaunchProject"
@@ -628,7 +628,7 @@ METHOD HbIde:execAction( cKey )
CASE "ToggleProjectTree"
CASE "ToggleBuildInfo"
CASE "ToggleFuncList"
::execWindowsAction( cKey )
//::execWindowsAction( cKey )
EXIT
CASE "Help"
::oHelpDock:show()
@@ -849,23 +849,6 @@ METHOD HbIde:execProjectAction( cKey )
/*----------------------------------------------------------------------*/
METHOD HbIde:execWindowsAction( cKey )
SWITCH cKey
CASE "ToggleProjectTree"
::oDK:toggleLeftDocks()
EXIT
CASE "ToggleBuildInfo"
::oDK:toggleBottomDocks()
EXIT
CASE "ToggleFuncList"
::oDK:toggleRightDocks()
EXIT
ENDSWITCH
RETURN Self
/*----------------------------------------------------------------------*/
METHOD HbIde:setPosAndSizeByIni( qWidget, nPart )
LOCAL aRect
@@ -1029,12 +1012,12 @@ METHOD HbIde:updateProjectTree( aPrj )
/*----------------------------------------------------------------------*/
METHOD HbIde:manageItemSelected( oXbpTreeItem )
LOCAL n, cHbp, aPrj
LOCAL n, cHbp
IF oXbpTreeItem == ::oProjRoot
n := -1
n := -1
ELSEIF oXbpTreeItem == ::oOpenedSources
n := -2
n := -2
ELSE
n := ascan( ::aProjData, {|e_| e_[ 1 ] == oXbpTreeItem } )
ENDIF
@@ -1044,11 +1027,7 @@ METHOD HbIde:manageItemSelected( oXbpTreeItem )
CASE n == -2 // "Files"
CASE n == -1
CASE ::aProjData[ n, TRE_TYPE ] == "Project Name"
aPrj := ::aProjData[ n, 5 ]
cHbp := hbide_pathToOSPath( aPrj[ PRJ_PRP_PROPERTIES, 2, PRJ_PRP_LOCATION ] + s_pathSep + ;
aPrj[ PRJ_PRP_PROPERTIES, 2, PRJ_PRP_OUTPUT ] + ".hbp" )
cHbp := ::oPM:getProjectFileNameFromTitle( ::aProjData[ n, TRE_ORIGINAL ] )
::oPM:loadProperties( cHbp, .f., .t., .f. )
CASE ::aProjData[ n, TRE_TYPE ] == "Source File"
@@ -1067,7 +1046,7 @@ METHOD HbIde:manageItemSelected( oXbpTreeItem )
/*----------------------------------------------------------------------*/
METHOD HbIde:manageProjectContext( mp1, mp2, oXbpTreeItem )
LOCAL n, cHbi, aPrj, s
LOCAL n, cHbp, s
LOCAL aPops := {}, aSub :={}
HB_SYMBOL_UNUSED( mp2 )
@@ -1088,7 +1067,7 @@ METHOD HbIde:manageProjectContext( mp1, mp2, oXbpTreeItem )
CASE n == -1 // Project Root
aadd( aPops, { "New Project" , {|| ::oPM:loadProperties( NIL, .t., .t., .t. ) } } )
aadd( aPops, { "" } )
aadd( aPops, { "Load Project" , {|| ::oPM:loadProperties( NIL, .f., .f., .t. ) } } )
aadd( aPops, { "Open Project" , {|| ::oPM:loadProperties( NIL, .f., .f., .t. ) } } )
aadd( aPops, { "" } )
//
IF !empty( ::oEV:getNames() )
@@ -1102,15 +1081,12 @@ METHOD HbIde:manageProjectContext( mp1, mp2, oXbpTreeItem )
hbide_ExecPopup( aPops, mp1, ::oProjTree:oWidget )
CASE ::aProjData[ n, TRE_TYPE ] == "Project Name"
aPrj := ::aProjData[ n, TRE_DATA ]
cHbi := aPrj[ PRJ_PRP_PROPERTIES, 2, PRJ_PRP_LOCATION ] + s_pathSep + ;
aPrj[ PRJ_PRP_PROPERTIES, 2, PRJ_PRP_OUTPUT ] + ".hbp"
cHbi := hbide_pathToOSPath( cHbi )
cHbp := hbide_pathToOSPath( ::oPM:getProjectFileNameFromTitle( ::aProjData[ n, TRE_ORIGINAL ] ) )
//
IF Alltrim( Upper( ::cWrkProject ) ) != Alltrim( Upper( oXbpTreeItem:caption ) )
aadd( aPops, { "Set as Current" , {|| ::oPM:setCurrentProject( oXbpTreeItem:caption ) } } )
End
aadd( aPops, { "Properties" , {|| ::oPM:loadProperties( cHbi, .f., .t., .t. ) } } )
aadd( aPops, { "Properties" , {|| ::oPM:loadProperties( cHbp, .f., .t., .t. ) } } )
aadd( aPops, { "" } )
aadd( aPops, { ::oAC:getAction( "BuildQt" ), {|| ::oPM:buildProject( oXbpTreeItem:caption, .F., , , .T. ) } } )
aadd( aPops, { ::oAC:getAction( "BuildLaunchQt" ), {|| ::oPM:buildProject( oXbpTreeItem:caption, .T., , , .T. ) } } )
@@ -1169,7 +1145,7 @@ METHOD HbIde:updateFuncList()
/*----------------------------------------------------------------------*/
METHOD HbIde:gotoFunction( mp1, mp2, oListBox )
LOCAL n, cAnchor, oEdit
LOCAL n, cAnchor, oEdit, lFound
mp1 := oListBox:getData()
mp2 := oListBox:getItem( mp1 )
@@ -1177,8 +1153,11 @@ METHOD HbIde:gotoFunction( mp1, mp2, oListBox )
IF ( n := ascan( ::aTags, {|e_| mp2 == e_[ 7 ] } ) ) > 0
cAnchor := trim( ::aText[ ::aTags[ n,3 ] ] )
IF !empty( oEdit := ::oEM:getEditCurrent() )
IF !( oEdit:find( cAnchor, QTextDocument_FindCaseSensitively ) )
oEdit:find( cAnchor, QTextDocument_FindBackward + QTextDocument_FindCaseSensitively )
IF !( lFound := oEdit:find( cAnchor, QTextDocument_FindCaseSensitively ) )
lFound := oEdit:find( cAnchor, QTextDocument_FindBackward + QTextDocument_FindCaseSensitively )
ENDIF
IF lFound
oEdit:centerCursor()
ENDIF
ENDIF
ENDIF

View File

@@ -173,6 +173,7 @@ METHOD IdeActions:loadActions()
// Name Text Image Shortcut Checkable IconVisInMenu
//
aadd( aAct, { "TB_Exit" , "E~xit" , "exit" , "" , "No", "Yes" } )
aadd( aAct, { "TB_Home" , "~Home" , "dc_home" , "" , "No", "Yes" } )
aadd( aAct, { "TB_New" , "~Source" , "new" , "" , "No", "Yes" } )
aadd( aAct, { "TB_Open" , "~Open" , "open" , "" , "No", "Yes" } )
aadd( aAct, { "TB_Save" , "~Save" , "save" , "" , "No", "Yes" } )
@@ -209,10 +210,10 @@ METHOD IdeActions:loadActions()
aadd( aAct, { "Help" , "~Help" , "help" , "F1" , "No", "Yes" } )
aadd( aAct, { "Exit" , "E~xit" , "exit" , "Sh+^W", "No", "Yes" } )
aadd( aAct, { "New" , "~Source" , "new" , "^N" , "No", "Yes" } )
aadd( aAct, { "Open" , "~Open" , "open" , "^O" , "No", "Yes" } )
aadd( aAct, { "Open" , "~Open..." , "open" , "^O" , "No", "Yes" } )
aadd( aAct, { "Save" , "~Save" , "save" , "^S" , "No", "Yes" } )
aadd( aAct, { "Close" , "~Close" , "close" , "^W" , "No", "Yes" } )
aadd( aAct, { "Print" , "~Print" , "print" , "^P" , "No", "Yes" } )
aadd( aAct, { "Print" , "~Print..." , "print" , "^P" , "No", "Yes" } )
aadd( aAct, { "Compile" , "Co~mpile" , "compile" , "" , "No", "Yes" } )
aadd( aAct, { "CompilePPO" , "Com~pile to PPO" , "ppo" , "" , "No", "Yes" } )
aadd( aAct, { "Build" , "Build Project" , "build" , "" , "No", "Yes" } )
@@ -244,7 +245,7 @@ METHOD IdeActions:loadActions()
//
aadd( aAct, { "NewProject" , "~Project" , "project" , "" , "No", "Yes" } )
aadd( aAct, { "LoadProject" , "Open Projec~t" , "" , "" , "No", "Yes" } )
aadd( aAct, { "SaveAs" , "Save ~As" , "saveas" , "" , "No", "Yes" } )
aadd( aAct, { "SaveAs" , "Save ~as..." , "saveas" , "" , "No", "Yes" } )
aadd( aAct, { "SaveAll" , "Save A~ll" , "saveall" , "Sh+^s", "No", "Yes" } )
aadd( aAct, { "CloseAll" , "Clos~e All" , "closeall" , "" , "No", "Yes" } )
aadd( aAct, { "CloseOther" , "Close Ot~hers" , "closeexcept" , "" , "No", "Yes" } )
@@ -277,7 +278,7 @@ METHOD IdeActions:loadActions()
aadd( aAct, { "ManageThemes" , "Manage Themes" , "" , "" , "No", "Yes" } )
aadd( aAct, { "DefaultTheme" , "Set Default Theme" , "" , "" , "No", "Yes" } )
aadd( aAct, { "AboutIDE" , "About Harbour IDE" , "vr-16x16" , "" , "No", "Yes" } )
aadd( aAct, { "AboutIDE" , "About Harbour IDE" , "hbide" , "" , "No", "Yes" } )
aadd( aAct, { "AboutHarbour" , "About Harbour" , "hb-16x16" , "" , "No", "Yes" } )
aadd( aAct, { "HarbourUsersList" , "Harbour Users (Mailing Lists)", "list-users" , "" , "No", "Yes" } )
aadd( aAct, { "HarbourDevList" , "Harbour Developers (Mailing Lists)", "list-developers", "", "No", "Yes" } )
@@ -317,14 +318,14 @@ METHOD IdeActions:buildToolBar()
oTBar:imageWidth := 22
oTBar:imageHeight := 22
oTBar:create( , , { 0, ::oDlg:currentSize()[ 2 ]-60 }, { ::oDlg:currentSize()[ 1 ], 60 } )
oTBar:setStyleSheet( GetStyleSheet( "QToolBar" ) )
* oTBar:setStyleSheet( GetStyleSheet( "QToolBar" ) )
oTBar:oWidget:setMaximumHeight( 28 )
oTBar:buttonClick := {|oButton| ::oIde:execAction( oButton:key ) }
oTBar:addItem( ::getAction( "TB_Exit" ), , , , , , "Exit" )
* oTBar:addItem( ::getAction( "Help" ), , , , , , "Help" )
oTBar:addItem( ::getAction( "TB_Home" ), , , , , , "Home" )
oTBar:addItem( , , , , , nSep )
oTBar:addItem( ::getAction( "TB_New" ), , , , , , "New" )
oTBar:addItem( ::getAction( "TB_Open" ), , , , , , "Open" )
@@ -488,7 +489,7 @@ METHOD IdeActions:buildMainMenu()
oSubMenu2:addItem( { ::getAction( "DeleteLine" ), {|| oIde:execAction( "DeleteLine" ) } } )
oSubMenu2:addItem( { ::getAction( "MoveLineUp" ), {|| oIde:execAction( "MoveLineUp" ) } } )
oSubMenu2:addItem( { ::getAction( "MoveLineDown" ), {|| oIde:execAction( "MoveLineDown" ) } } )
oMenuBar:addItem( { oSubMenu2, _T( "~Line..." ) } )
oMenuBar:addItem( { oSubMenu2, _T( "~Line" ) } )
//
oSubMenu2 := XbpMenu():new( oSubMenu ):create()
oSubMenu2:addItem( { ::getAction( "StreamComment" ), {|| oIde:execAction( "StreamComment" ) } } )
@@ -499,7 +500,7 @@ METHOD IdeActions:buildMainMenu()
hbide_menuAddSep( oSubMenu2 )
oSubMenu2:addItem( { ::getAction( "BlockSgl2Dbl" ), {|| oIde:execAction( "BlockSgl2Dbl" ) } } )
oSubMenu2:addItem( { ::getAction( "BlockDbl2Sgl" ), {|| oIde:execAction( "BlockDbl2Sgl" ) } } )
oMenuBar:addItem( { oSubMenu2, _T( "~Block..." ) } )
oMenuBar:addItem( { oSubMenu2, _T( "~Block" ) } )
hbide_menuAddSep( oSubMenu )
oSubMenu2 := XbpMenu():new( oSubMenu ):create()
@@ -556,6 +557,7 @@ METHOD IdeActions:buildMainMenu()
/*----------------------------------------------------------------------------*/
/* Tools */
/*----------------------------------------------------------------------------*/
#if 0
oSubMenu := XbpMenu():new( oMenuBar ):create()
oSubMenu:title := "~Tools"
oSubMenu:addItem( { ::getAction( "ConfigureTools" ), {|| oIde:execAction( "ConfigureTools" ) } } )
@@ -566,14 +568,14 @@ METHOD IdeActions:buildMainMenu()
oSubMenu:addItem( { ::getAction( "Terminal" ), {|| oIde:execAction( "Terminal" ) } } )
#endif
oMenuBar:addItem( { oSubMenu, NIL } )
#endif
/*----------------------------------------------------------------------------*/
/* Options */
/*----------------------------------------------------------------------------*/
oSubMenu := XbpMenu():new( oMenuBar ):create()
oSubMenu:title := "~Setup"
oSubMenu2 := hbide_buildCodecMenu( oIde, oSubMenu )
oSubMenu2:title := "~Codecs"
oSubMenu2:title := "~Encoding"
oSubMenu:addItem( { oSubMenu2, NIL } )
oMenuBar:addItem( { oSubMenu, NIL } )

View File

@@ -97,7 +97,7 @@ CLASS IdeDocks INHERIT IdeObject
METHOD buildHelpWidget()
METHOD buildSkeletonWidget()
METHOD buildDialog()
METHOD buildViewWidget()
METHOD buildViewWidget( cObjectName )
METHOD buildStackedWidget()
METHOD buildSearchReplaceWidget()
METHOD buildDockWidgets()
@@ -114,9 +114,6 @@ CLASS IdeDocks INHERIT IdeObject
METHOD buildDocViewer()
METHOD outputDoubleClicked( lSelected )
METHOD buildStatusBar()
METHOD toggleLeftDocks()
METHOD toggleRightDocks()
METHOD toggleBottomDocks()
METHOD setStatusText( nPart, xValue )
METHOD getMarkWidget( nIndex )
METHOD dispEnvironment( cEnviron )
@@ -130,19 +127,14 @@ CLASS IdeDocks INHERIT IdeObject
/*----------------------------------------------------------------------*/
METHOD IdeDocks:new( oIde )
::oIde := oIde
RETURN Self
/*----------------------------------------------------------------------*/
METHOD IdeDocks:create( oIde )
DEFAULT oIde TO ::oIde
::oIde := oIde
RETURN Self
/*----------------------------------------------------------------------*/
@@ -195,32 +187,66 @@ METHOD IdeDocks:destroy()
/*----------------------------------------------------------------------*/
METHOD IdeDocks:getADockWidget( nArea, cObjectName, cWindowTitle, nFlags )
LOCAL oDock, nBasic
METHOD IdeDocks:buildDialog()
LOCAL s, aSize
DEFAULT nFlags TO 0
::oIde:oDlg := XbpDialog():new()
::oDlg:icon := hbide_image( "hbide" )
::oDlg:title := "Harbour IDE"
::oDlg:qtObject := HbQtUI():new( ::resPath + "mainwindow.uic" ):build()
::oDlg:create( , , , , , .f. )
nBasic := hb_bitOR( QDockWidget_DockWidgetClosable, nFlags )
::oDlg:setStyleSheet( GetStyleSheet( "QMainWindow" ) )
oDock := XbpWindow():new()
oDock:oWidget := QDockWidget():new( ::oDlg:oWidget )
oDock:oWidget:setObjectName( cObjectName )
::oDlg:addChild( oDock )
oDock:oWidget:setFeatures( nBasic )
oDock:oWidget:setAllowedAreas( nArea )
oDock:oWidget:setWindowTitle( cWindowTitle )
oDock:oWidget:setFocusPolicy( Qt_NoFocus )
oDock:oWidget:setStyleSheet( getStyleSheet( "QDockWidget" ) )
oDock:hide()
::oDlg:close := {|| hbide_getYesNo( "hbIDE is about to be closed!", "Are you sure?" ) }
::oDlg:oWidget:setDockOptions( QMainWindow_AllowTabbedDocks + QMainWindow_ForceTabbedDocks )
::oDlg:oWidget:setTabPosition( Qt_BottomDockWidgetArea, QTabWidget_South )
::oDlg:oWidget:setCorner( Qt_BottomLeftCorner, Qt_LeftDockWidgetArea )
::oDlg:oWidget:setCorner( Qt_BottomRightCorner, Qt_RightDockWidgetArea )
::oDlg:oWidget:resize( 868,470 )
oDock:hbLayout := HBPLAYOUT_TYPE_VERTBOX
oDock:qLayout:setContentsMargins( 2, 2, 2, 2 )
::oIde:oDa := ::oDlg:drawingArea
RETURN oDock
SetAppWindow( ::oDlg )
// Center on Desktop and decorate
aSize := AppDesktop():currentSize()
::oDlg:setPos( { ( aSize[ 1 ] - ::oDlg:currentSize()[ 1 ] ) / 2, ;
( aSize[ 2 ] - ::oDlg:currentSize()[ 2 ] ) / 2 } )
::oIde:setPosAndSizeByIni( ::oDlg:oWidget, MainWindowGeometry )
//::oDlg:Show()
/* StatusBar */
::buildStatusBar()
/* Attach GRID Layout to Editor Area - Futuristic */
::oIde:qLayout := QGridLayout():new()
::oIde:qLayout:setContentsMargins( 0,0,0,0 )
::oIde:qLayout:setHorizontalSpacing( 0 )
::oIde:qLayout:setVerticalSpacing( 0 )
//
::oDa:oWidget:setLayout( ::qLayout )
::buildStackedWidget()
::qLayout:addWidget_1( ::oStackedWidget:oWidget, 0, 0, 1, 1 )
// ::buildSearchReplaceWidget() ////////////////////////////////////
// ::qLayout:addWidget_1( ::oSearchReplace:oUI, 1, 0, 1, 1 )
/* View Panels */
::buildViewWidget( "Stats" ) /* At stayrtup displaying various statistics */
::buildViewWidget( "Main" ) /* Main Panel to hold editor tabs */
FOR EACH s IN ::aINI[ INI_VIEWS ]
::buildViewWidget( s ) /* All other panels user created */
NEXT
::setView( "Stats" ) /* Always call with name */
RETURN Self
/*----------------------------------------------------------------------*/
METHOD IdeDocks:buildDockWidgets()
METHOD IdeDocks:buildDockWidgets()
::buildProjectTree()
::buildEditorTree()
@@ -255,40 +281,37 @@ METHOD IdeDocks:getADockWidget( nArea, cObjectName, cWindowTitle, nFlags )
/*----------------------------------------------------------------------*/
METHOD IdeDocks:getADockWidget( nArea, cObjectName, cWindowTitle, nFlags )
LOCAL oDock, nBasic
DEFAULT nFlags TO 0
nBasic := hb_bitOR( QDockWidget_DockWidgetClosable, nFlags )
oDock := XbpWindow():new()
oDock:oWidget := QDockWidget():new( ::oDlg:oWidget )
oDock:oWidget:setObjectName( cObjectName )
::oDlg:addChild( oDock )
oDock:oWidget:setFeatures( nBasic )
oDock:oWidget:setAllowedAreas( nArea )
oDock:oWidget:setWindowTitle( cWindowTitle )
oDock:oWidget:setFocusPolicy( Qt_NoFocus )
oDock:oWidget:setStyleSheet( getStyleSheet( "QDockWidget" ) )
oDock:hide()
oDock:hbLayout := HBPLAYOUT_TYPE_VERTBOX
oDock:qLayout:setContentsMargins( 2, 2, 2, 2 )
RETURN oDock
/*----------------------------------------------------------------------*/
METHOD IdeDocks:execEvent( nMode, p )
LOCAL nIndex, aMenu
DO CASE
CASE nMode == 1 /* StackedWidget:currentChanged(int) */
IF p >= 0 .AND. p <= len( ::aViews )
::oIde:nCurView := p
::oIde:qTabWidget := ::aViews[ ::nCurView + 1 ]:oTabWidget:oWidget
::oIde:oTabParent := ::aViews[ ::nCurView + 1 ]
nIndex := ::oIde:qTabWidget:currentIndex()
IF nIndex + 1 == ::oIde:qTabWidget:count()
IF !( ::oIde:lClosing )
::oIde:qTabWidget:setCurrentIndex( 0 )
::oIde:qTabWidget:setCurrentIndex( nIndex ) /* TODO: Must be last saved */
ENDIF
ENDIF
::setStatusText( SB_PNL_VIEW, iif( p == 0, "Main", ::aINI[ INI_VIEWS, ::nCurView ] ) )
ENDIF
CASE nMode == 2 /* HelpWidget:contextMenuRequested(qPoint) */
aMenu := {}
aadd( aMenu, { "Back" , {|| ::qHelpBrw:backward() } } )
aadd( aMenu, { "Forward" , {|| ::qHelpBrw:forward() } } )
aadd( aMenu, { "Home" , {|| ::qHelpBrw:home() } } )
aadd( aMenu, { "" } )
aadd( aMenu, { "Reload" , {|| ::qHelpBrw:reload() } } )
aadd( aMenu, { "" } )
aadd( aMenu, { "Select All", {|| ::qHelpBrw:selectAll() } } )
aadd( aMenu, { "Copy" , {|| ::qHelpBrw:copy() } } )
hbide_execPopup( aMenu, p, ::qHelpBrw )
hbide_popupBrwContextMenu( ::qHelpBrw, p )
CASE nMode == dockDocViewer_visibilityChanged
IF p
@@ -321,62 +344,50 @@ METHOD IdeDocks:execEvent( nMode, p )
/*----------------------------------------------------------------------*/
METHOD IdeDocks:buildDialog()
LOCAL s, aSize
METHOD IdeDocks:setView( cView )
LOCAL n, nIndex
::oIde:oDlg := XbpDialog():new()
::oDlg:icon := hbide_image( "hbide" )
::oDlg:title := "Harbour IDE"
::oDlg:qtObject := HbQtUI():new( ::resPath + "mainwindow.uic" ):build()
::oDlg:create( , , , , , .f. )
SWITCH cView
::oDlg:setStyleSheet( GetStyleSheet( "QMainWindow" ) )
CASE "New..."
cView := hbide_fetchAString( ::qViewsCombo, cView, "Name the View", "New View" )
IF cView != "New..." .AND. cView != "Stats" .AND. cView != "Main"
IF ascan( ::aINI[ INI_VIEWS ], {|e| e == cView } ) > 0
MsgBox( "View: " + cView + ", already exists" )
ELSE
aadd( ::aINI[ INI_VIEWS ], cView )
::qViewsCombo:addItem( cView )
::buildViewWidget( cView )
::addPanelButton( cView )
::setView( cView )
ENDIF
ENDIF
EXIT
::oDlg:close := {|| hbide_getYesNo( "hbIDE is about to be closed!", "Are you sure?" ) }
::oDlg:oWidget:setDockOptions( QMainWindow_AllowTabbedDocks + QMainWindow_ForceTabbedDocks )
::oDlg:oWidget:setTabPosition( Qt_BottomDockWidgetArea, QTabWidget_South )
::oDlg:oWidget:setCorner( Qt_BottomLeftCorner, Qt_LeftDockWidgetArea )
::oDlg:oWidget:setCorner( Qt_BottomRightCorner, Qt_RightDockWidgetArea )
::oDlg:oWidget:resize( 850,430 )
OTHERWISE
IF ( n := ascan( ::aViews, {|o| o:oWidget:objectName() == cView } ) ) > 0
::oIde:cWrkView := cView
::oIde:oDa := ::oDlg:drawingArea
IF !( cView == "Stats" )
::oIde:qTabWidget := ::aViews[ n ]:oTabWidget:oWidget
::oIde:oTabParent := ::aViews[ n ]
SetAppWindow( ::oDlg )
nIndex := ::oIde:qTabWidget:currentIndex()
IF nIndex + 1 == ::oIde:qTabWidget:count()
IF !( ::oIde:lClosing )
::oIde:qTabWidget:setCurrentIndex( 0 )
::oIde:qTabWidget:setCurrentIndex( nIndex ) /* TODO: Must be last saved */
ENDIF
ENDIF
ENDIF
::oStackedWidget:oWidget:setCurrentIndex( n - 1 )
::setStatusText( SB_PNL_VIEW, ::cWrkView )
ENDIF
EXIT
// Center on Desktop and decorate
aSize := AppDesktop():currentSize()
::oDlg:setPos( { ( aSize[ 1 ] - ::oDlg:currentSize()[ 1 ] ) / 2, ;
( aSize[ 2 ] - ::oDlg:currentSize()[ 2 ] ) / 2 } )
ENDSWITCH
::oIde:setPosAndSizeByIni( ::oDlg:oWidget, MainWindowGeometry )
//::oDlg:Show()
/* StatusBar */
::buildStatusBar()
/* Attach GRID Layout to Editor Area - Futuristic */
::oIde:qLayout := QGridLayout():new()
::oIde:qLayout:setContentsMargins( 0,0,0,0 )
::oIde:qLayout:setHorizontalSpacing( 0 )
::oIde:qLayout:setVerticalSpacing( 0 )
//
::oDa:oWidget:setLayout( ::qLayout )
::buildStackedWidget()
::qLayout:addWidget_1( ::oStackedWidget:oWidget, 0, 0, 1, 1 )
// ::buildSearchReplaceWidget() ////////////////////////////////////
// ::qLayout:addWidget_1( ::oSearchReplace:oUI, 1, 0, 1, 1 )
/* View Panels */
::buildViewWidget() /* Main */
FOR EACH s IN ::aINI[ INI_VIEWS ]
::buildViewWidget()
NEXT
/* Force to populate current widget */
::oStackedWidget:oWidget:setCurrentIndex( 0 )
RETURN Self
RETURN NIL
/*----------------------------------------------------------------------*/
@@ -389,28 +400,16 @@ METHOD IdeDocks:buildStackedWidget()
::oStackedWidget:oWidget:setObjectName( "myStackedWidget" )
::oDa:addChild( ::oStackedWidget )
::oStackedWidget:connect( ::oStackedWidget:oWidget, "currentChanged(int)", {|p| ::execEvent( 1, p ) } )
RETURN Self
/*----------------------------------------------------------------------*/
METHOD IdeDocks:buildSearchReplaceWidget()
::oIde:oSearchReplace := IdeSearchReplace():new( ::oIde ):create()
::oSearchReplace:oUI:hide()
RETURN Self
/*----------------------------------------------------------------------*/
METHOD IdeDocks:buildViewWidget()
LOCAL n := len( ::aViews ) + 1
METHOD IdeDocks:buildViewWidget( cObjectName )
LOCAL oFrame
oFrame := XbpWindow():new( ::oStackedWidget )
oFrame:oWidget := QWidget():new( ::oStackedWidget:oWidget )
oFrame:oWidget:setObjectName( "viewWidget" + hb_ntos( n ) )
oFrame:oWidget:setObjectName( cObjectName ) /* This will form the basis of showing at top */
::oStackedWidget:addChild( oFrame )
oFrame:hbLayout := HBPLAYOUT_TYPE_VERTBOX
@@ -422,93 +421,20 @@ METHOD IdeDocks:buildViewWidget()
oFrame:oTabWidget:oWidget:setMovable( .t. )
aadd( ::oIde:aViews, oFrame )
oFrame:oWidget:show()
oFrame:oTabWidget:oWidget:show()
::oStackedWidget:oWidget:addWidget( oFrame:oWidget )
::oStackedWidget:oWidget:setCurrentIndex( 0 )
::setView( cObjectName )
RETURN oFrame
/*----------------------------------------------------------------------*/
METHOD IdeDocks:setView( cView )
LOCAL n
METHOD IdeDocks:buildSearchReplaceWidget()
SWITCH cView
CASE "New..."
cView := hbide_fetchAString( ::qViewsCombo, cView, "Name the View", "New View" )
IF cView != "New..."
IF ascan( ::aINI[ INI_VIEWS ], {|e| e == cView } ) > 0
MsgBox( "View: " + cView + ", already exists" )
ELSE
aadd( ::aINI[ INI_VIEWS ], cView )
::qViewsCombo:addItem( cView )
::buildViewWidget()
::oStackedWidget:oWidget:setCurrentIndex( len( ::aINI[ INI_VIEWS ] ) )
::oIde:cWrkView := cView
ENDIF
ENDIF
EXIT
CASE "Main"
::oIde:nCurView := 0
::oIde:qTabWidget := ::aViews[ ::nCurView + 1 ]:oTabWidget:oWidget
::oIde:oTabParent := ::aViews[ ::nCurView + 1 ]
::oStackedWidget:oWidget:setCurrentIndex( 0 )
::oIde:cWrkView := "Main"
EXIT
OTHERWISE
IF ( n := ascan( ::aINI[ INI_VIEWS ], cView ) ) > 0
::oStackedWidget:oWidget:setCurrentIndex( n ) /* Note: n is always base of zero as main == 1 */
::oIde:cWrkView := cView
ENDIF
EXIT
ENDSWITCH
RETURN NIL
/*----------------------------------------------------------------------*/
METHOD IdeDocks:disblePanelButton( qTBtn )
LOCAL q
FOR EACH q IN ::aPanels
q:setEnabled( !( q == qTBtn ) )
NEXT
RETURN Self
/*----------------------------------------------------------------------*/
METHOD IdeDocks:addPanelButton( cPanel )
LOCAL qTBtn, aColors, nIndex, cColor
* aColors := { "#996633", "#A37547", "#AD855C", "#B89470", "#C2A385", "#CCB299", "#D6C2AD", "#E0D1C2", "#EBE0D6", "#F5F0EB" }
aColors := { "#98FB98","#20B2AA","#6B8E23","#9ACD32","#FFFF00","#FF00FF","#FFA500","#4169E1","#00FF7F","#FFFF00" }
IF cPanel == "Main"
nIndex := 1
cColor := "#008000"
ELSE
nIndex := len( ::aPanels )
IF nIndex > len( aColors )
nIndex := nIndex - len( aColors )
ENDIF
cColor := aColors[ nIndex ]
ENDIF
qTBtn := QToolButton():new()
qTBtn:setMaximumHeight( 12 )
qTBtn:setMaximumWidth( 18 )
qTBtn:setTooltip( "Panel: " + cPanel )
qTBtn:setStyleSheet( "background-color: " + cColor + " ;" )
::connect( qTBtn, "clicked()", {|| ::disblePanelButton( qTBtn ), ::setView( cPanel ) } )
::qTBarPanels:addWidget( qTBtn )
::qTBarPanels:addSeparator()
aadd( ::aPanels, qTBtn )
::oIde:oSearchReplace := IdeSearchReplace():new( ::oIde ):create()
::oSearchReplace:oUI:hide()
RETURN Self
@@ -652,17 +578,46 @@ METHOD IdeDocks:buildToolBarPanels()
/*----------------------------------------------------------------------*/
METHOD IdeDocks:disblePanelButton( qTBtn )
LOCAL q
FOR EACH q IN ::aPanels
q:setEnabled( !( q == qTBtn ) )
NEXT
RETURN Self
/*----------------------------------------------------------------------*/
METHOD IdeDocks:addPanelButton( cPanel )
LOCAL qTBtn
STATIC nIndex := 0
nIndex++
qTBtn := QToolButton():new()
qTBtn:setMaximumHeight( 20 )
qTBtn:setMaximumWidth( 20 )
qTBtn:setTooltip( "Panel: " + cPanel )
qTBtn:setIcon( hbide_image( "panel_" + hb_ntos( nIndex ) ) )
aadd( ::aPanels, qTBtn )
::qTBarPanels:addWidget( qTBtn )
::connect( qTBtn, "clicked()", {|| ::setView( cPanel ) } )
nIndex := iif( nIndex >= 7, 0, nIndex )
IF !empty( ::qViewsCombo )
::qViewsCombo:setCurrentIndex( len( ::aPanels ) + 1 )
endif
RETURN Self
/*----------------------------------------------------------------------*/
METHOD IdeDocks:buildProjectTree()
LOCAL i
::oIde:oDockPT := XbpWindow():new()
::oDockPT:oWidget := QDockWidget():new( ::oDlg:oWidget )
::oDockPT:oWidget:setObjectName( "dockProjectTree" )
::oDlg:addChild( ::oDockPT )
::oDockPT:oWidget:setFeatures( QDockWidget_DockWidgetClosable + QDockWidget_DockWidgetMovable )
::oDockPT:oWidget:setAllowedAreas( Qt_LeftDockWidgetArea )
::oDockPT:oWidget:setWindowTitle( "Projects Tree" )
::oDockPT:oWidget:setFocusPolicy( Qt_NoFocus )
::oIde:oDockPT := ::getADockWidget( Qt_LeftDockWidgetArea, "dockProjectTree", "Projects Tree" )
::oDlg:oWidget:addDockWidget_1( Qt_LeftDockWidgetArea, ::oDockPT:oWidget, Qt_Vertical )
::oIde:oProjTree := XbpTreeView():new()
::oProjTree:hasLines := .T.
@@ -674,7 +629,7 @@ METHOD IdeDocks:buildProjectTree()
::oProjTree:oWidget:setSizePolicy_1( QSizePolicy_MinimumExpanding, QSizePolicy_Preferred )
* ::oProjTree:itemMarked := {|oItem| ::manageItemSelected( 0, oItem ), ::oCurProjItem := oItem }
::oProjTree:itemMarked := {|oItem| ::oIde:oCurProjItem := oItem, ::oIde:manageFocusInEditor() }
::oProjTree:itemMarked := {|oItem| ::oIde:oCurProjItem := oItem } //, ::oIde:manageFocusInEditor() }
::oProjTree:itemSelected := {|oItem| ::oIde:manageItemSelected( oItem ) }
::oProjTree:hbContextMenu := {|mp1, mp2, oXbp| ::oIde:manageProjectContext( mp1, mp2, oXbp ) }
@@ -693,8 +648,7 @@ METHOD IdeDocks:buildProjectTree()
/* Insert Project Tree Into Dock Widget */
::oDockPT:oWidget:setWidget( ::oProjTree:oWidget )
/* Add dock widget to Main Window */
::oDlg:oWidget:addDockWidget_1( Qt_LeftDockWidgetArea, ::oDockPT:oWidget, Qt_Vertical )
::oDockPT:hide()
RETURN Self
@@ -702,14 +656,8 @@ METHOD IdeDocks:buildProjectTree()
METHOD IdeDocks:buildEditorTree()
::oIde:oDockED := XbpWindow():new()
::oDockED:oWidget := QDockWidget():new( ::oDlg:oWidget )
::oDockED:oWidget:setObjectName( "dockEditorTabs" )
::oDlg:addChild( ::oDockED )
::oDockED:oWidget:setFeatures( QDockWidget_DockWidgetClosable + QDockWidget_DockWidgetMovable )
::oDockED:oWidget:setAllowedAreas( Qt_LeftDockWidgetArea )
::oDockED:oWidget:setWindowTitle( "Editor Tabs" )
::oDockED:oWidget:setFocusPolicy( Qt_NoFocus )
::oIde:oDockED := ::getADockWidget( Qt_LeftDockWidgetArea, "dockEditorTabs", "Editor Tabs" )
::oDlg:oWidget:addDockWidget_1( Qt_LeftDockWidgetArea, ::oDockED:oWidget, Qt_Vertical )
::oIde:oEditTree := XbpTreeView():new()
::oEditTree:hasLines := .T.
@@ -731,8 +679,7 @@ METHOD IdeDocks:buildEditorTree()
/* Insert Project Tree Into Dock Widget */
::oDockED:oWidget:setWidget( ::oEditTree:oWidget )
/* Add dock widget to Main Window */
::oDlg:oWidget:addDockWidget_1( Qt_LeftDockWidgetArea, ::oDockED:oWidget, Qt_Vertical )
::oDockED:hide()
RETURN Self
@@ -741,6 +688,7 @@ METHOD IdeDocks:buildEditorTree()
METHOD IdeDocks:buildFuncList()
::oIde:oFuncDock := ::getADockWidget( Qt_RightDockWidgetArea, "dockFuncList", "Functions List", QDockWidget_DockWidgetFloatable )
::oDlg:oWidget:addDockWidget_1( Qt_RightDockWidgetArea, ::oFuncDock:oWidget, Qt_Vertical )
::oIde:oFuncList := XbpListBox():new( ::oFuncDock ):create( , , { 0,0 }, { 100,400 }, , .t. )
::oFuncList:oWidget:setEditTriggers( QAbstractItemView_NoEditTriggers )
@@ -751,7 +699,6 @@ METHOD IdeDocks:buildFuncList()
::oFuncList:hbContextMenu := {|mp1, mp2, oXbp| ::oIde:manageFuncContext( mp1, mp2, oXbp ) }
::oFuncDock:oWidget:setWidget( ::oFuncList:oWidget )
::oDlg:oWidget:addDockWidget_1( Qt_RightDockWidgetArea, ::oFuncDock:oWidget, Qt_Vertical )
RETURN Self
@@ -760,22 +707,22 @@ METHOD IdeDocks:buildFuncList()
METHOD IdeDocks:buildHelpWidget()
LOCAL qUrl, qStr
qUrl := QUrl():new( "idemainpage.html" )
qStr := QStringList():new()
qStr:append( hb_dirBase() + "docs" )
::oIde:oHelpDock := ::getADockWidget( Qt_RightDockWidgetArea, "dockHelp", "hbIDE Help", QDockWidget_DockWidgetFloatable )
::oDlg:oWidget:addDockWidget_1( Qt_RightDockWidgetArea, ::oHelpDock:oWidget, Qt_Horizontal )
::oIde:qHelpBrw := QTextBrowser():new( ::oHelpDock:oWidget )
::qHelpBrw:show()
::qHelpBrw:setContextMenuPolicy( Qt_CustomContextMenu )
::qHelpBrw:setOpenExternalLinks( .t. )
qUrl := QUrl():new( "idemainpage.html" )
qStr := QStringList():new()
qStr:append( hb_dirBase() + "docs" )
::qHelpBrw:setSearchPaths( qStr )
::qHelpBrw:setSource( qUrl )
::oHelpDock:oWidget:setWidget( ::oIde:qHelpBrw )
::oDlg:oWidget:addDockWidget_1( Qt_RightDockWidgetArea, ::oHelpDock:oWidget, Qt_Horizontal )
::oHelpDock:connect( ::qHelpBrw, "customContextMenuRequested(QPoint)", {|p| ::execEvent( 2, p ) } )
@@ -785,41 +732,23 @@ METHOD IdeDocks:buildHelpWidget()
METHOD IdeDocks:buildCompileResults()
::oIde:oDockB := XbpWindow():new()
::oDockB:oWidget := QDockWidget():new( ::oDlg:oWidget )
::oDockB:oWidget:setObjectName( "dockCompileResults" )
::oDlg:addChild( ::oDockB )
::oDockB:oWidget:setFeatures( QDockWidget_DockWidgetClosable )
::oDockB:oWidget:setAllowedAreas( Qt_BottomDockWidgetArea )
::oDockB:oWidget:setWindowTitle( "Compile Results" )
::oDockB:oWidget:setFocusPolicy( Qt_NoFocus )
::oIde:oDockB := ::getADockWidget( Qt_BottomDockWidgetArea, "dockCompileResults", "Compile Results" )
::oDlg:oWidget:addDockWidget_1( Qt_BottomDockWidgetArea, ::oDockB:oWidget, Qt_Horizontal )
::oIde:oCompileResult := XbpMLE():new( ::oDockB ):create( , , { 0,0 }, { 100,400 }, , .t. )
::oDockB:oWidget:setWidget( ::oCompileResult:oWidget )
::oDlg:oWidget:addDockWidget_1( Qt_BottomDockWidgetArea, ::oDockB:oWidget, Qt_Horizontal )
::oDockB:hide()
RETURN Self
/*----------------------------------------------------------------------*/
METHOD IdeDocks:buildLinkResults()
::oIde:oDockB1 := XbpWindow():new()
::oDockB1:oWidget := QDockWidget():new( ::oDlg:oWidget )
::oDockB1:oWidget:setObjectName( "dockLinkResults" )
::oDlg:addChild( ::oDockB1 )
::oDockB1:oWidget:setFeatures( QDockWidget_DockWidgetClosable )
::oDockB1:oWidget:setAllowedAreas( Qt_BottomDockWidgetArea )
::oDockB1:oWidget:setWindowTitle( "Link Results" )
::oDockB1:oWidget:setFocusPolicy( Qt_NoFocus )
::oIde:oLinkResult := XbpMLE():new( ::oDockB1 ):create( , , { 0,0 }, { 100, 400 }, , .t. )
::oDockB1:oWidget:setWidget( ::oLinkResult:oWidget )
::oIde:oDockB1 := ::getADockWidget( Qt_BottomDockWidgetArea, "dockLinkResults", "Link Results" )
::oDlg:oWidget:addDockWidget_1( Qt_BottomDockWidgetArea, ::oDockB1:oWidget, Qt_Horizontal )
::oDockB1:hide()
::oIde:oLinkResult := XbpMLE():new( ::oDockB1 ):create( , , { 0,0 }, { 100, 400 }, , .T. )
::oDockB1:oWidget:setWidget( ::oLinkResult:oWidget )
RETURN Self
@@ -827,15 +756,8 @@ METHOD IdeDocks:buildLinkResults()
METHOD IdeDocks:buildOutputResults()
::oIde:oDockB2 := XbpWindow():new()
::oDockB2:oWidget := QDockWidget():new( ::oDlg:oWidget )
::oDockB2:oWidget:setObjectName( "dockOutputResults" )
::oDlg:addChild( ::oDockB2 )
::oDockB2:oWidget:setFeatures( QDockWidget_DockWidgetClosable )
::oDockB2:oWidget:setAllowedAreas( Qt_BottomDockWidgetArea )
::oDockB2:oWidget:setWindowTitle( "Output Console" )
::oDockB2:oWidget:setFocusPolicy( Qt_NoFocus )
::oDockB2:hide()
::oIde:oDockB2 := ::getADockWidget( Qt_BottomDockWidgetArea, "dockOutputResults", "Output Console" )
::oDlg:oWidget:addDockWidget_1( Qt_BottomDockWidgetArea, ::oDockB2:oWidget, Qt_Horizontal )
::oIde:oOutputResult := XbpRtf():new( ::oDockB2 ):create( , , { 0,0 }, { 100, 400 }, , .T. )
::oOutputResult:oWidget:setAcceptRichText( .T. )
@@ -843,8 +765,6 @@ METHOD IdeDocks:buildOutputResults()
::oDockB2:oWidget:setWidget( ::oOutputResult:oWidget )
::oDlg:oWidget:addDockWidget_1( Qt_BottomDockWidgetArea, ::oDockB2:oWidget, Qt_Horizontal )
::connect( ::oIde:oOutputResult:oWidget, "copyAvailable(bool)", {|l| ::outputDoubleClicked( l ) } )
RETURN Self
@@ -907,7 +827,7 @@ METHOD IdeDocks:buildStatusBar()
METHOD IdeDocks:buildThemesDock()
::oIde:oThemesDock := ::getADockWidget( Qt_RightDockWidgetArea, "dockThemes", "Editor Themes", QDockWidget_DockWidgetFloatable )
::oIde:oThemesDock := ::getADockWidget( Qt_RightDockWidgetArea, "dockThemes", "Theme Manager", QDockWidget_DockWidgetFloatable )
::oDlg:oWidget:addDockWidget_1( Qt_RightDockWidgetArea, ::oThemesDock:oWidget, Qt_Horizontal )
::connect( ::oThemesDock:oWidget, "visibilityChanged(bool)", {|p| ::execEvent( dockThemes_visibilityChanged, p ) } )
@@ -1081,16 +1001,19 @@ METHOD IdeDocks:setStatusText( nPart, xValue )
oPanel:caption := "Find: " + xValue
EXIT
CASE SB_PNL_CODEC
xValue := iif( empty( xValue ), "default", xValue )
oPanel:caption := "<font color = brown >Codec: " + xValue + "</font>"
EXIT
CASE SB_PNL_ENVIRON
oPanel:caption := "<font color = blue >Env: " + xValue + "</font>"
xValue := iif( empty( xValue ), "default", xValue )
oPanel:caption := "<font color = blue >Env: " + xValue + "</font>"
EXIT
CASE SB_PNL_VIEW
oPanel:caption := "<font color = green >View: " + xValue + "</font>"
EXIT
CASE SB_PNL_PROJECT
oPanel:caption := "<font color = darkred >Proj: " + xValue + "</font>"
xValue := iif( empty( xValue ), "none", xValue )
oPanel:caption := "<font color = darkred >Proj: " + xValue + "</font>"
EXIT
ENDSWITCH
@@ -1120,49 +1043,3 @@ METHOD IdeDocks:getMarkWidget( nIndex )
RETURN ::oIde:aMarkTBtns[ nIndex ]
/*----------------------------------------------------------------------*/
METHOD IdeDocks:toggleLeftDocks()
IF ::lProjTreeVisible
::oDockPT:hide()
::oDockED:hide()
ELSE
::oDockPT:show()
::oDockED:show()
ENDIF
::oIde:lProjTreeVisible := !( ::lProjTreeVisible )
RETURN Self
/*----------------------------------------------------------------------*/
METHOD IdeDocks:toggleRightDocks()
IF ::lDockRVisible
::oFuncDock:hide()
ELSE
::oFuncDock:show()
ENDIF
::oIde:lDockRVisible := !( ::lDockRVisible )
RETURN Self
/*----------------------------------------------------------------------*/
METHOD IdeDocks:toggleBottomDocks()
IF ::lDockBVisible
::oDockB:hide()
::oDockB1:hide()
::oDockB2:hide()
ELSEIF ::qTabWidget:count() > 0
::oDockB:show()
::oDockB1:show()
::oDockB2:show()
ENDIF
::oIde:lDockBVisible := !( ::oIde:lDockBVisible )
RETURN Self
/*----------------------------------------------------------------------*/

View File

@@ -288,9 +288,10 @@ METHOD IdeEditsManager:getTabBySource( cSource )
METHOD IdeEditsManager:getTabCurrent()
LOCAL qTab, nTab
qTab := ::qTabWidget:currentWidget()
nTab := ascan( ::aTabs, {|e_| hbqt_IsEqualGcQtPointer( e_[ TAB_OTAB ]:oWidget:pPtr, qTab ) } )
IF !empty( ::qTabWidget )
qTab := ::qTabWidget:currentWidget()
nTab := ascan( ::aTabs, {|e_| hbqt_IsEqualGcQtPointer( e_[ TAB_OTAB ]:oWidget:pPtr, qTab ) } )
ENDIF
RETURN nTab
/*----------------------------------------------------------------------*/
@@ -298,7 +299,7 @@ METHOD IdeEditsManager:getTabCurrent()
METHOD IdeEditsManager:getDocumentCurrent()
LOCAL qTab, nTab
IF ::qTabWidget:count() > 0
IF !empty( ::qTabWidget ) .AND. ::qTabWidget:count() > 0
qTab := ::qTabWidget:currentWidget()
IF ( nTab := ascan( ::aTabs, {|e_| hbqt_IsEqualGcQtPointer( e_[ TAB_OTAB ]:oWidget:pPtr, qTab ) } ) ) > 0
RETURN QTextDocument():configure( ::aTabs[ nTab, TAB_OEDITOR ]:document() )
@@ -312,7 +313,7 @@ METHOD IdeEditsManager:getDocumentCurrent()
METHOD IdeEditsManager:getEditObjectCurrent()
LOCAL qTab, nTab
IF ::qTabWidget:count() > 0
IF !empty( ::qTabWidget ) .AND. ::qTabWidget:count() > 0
qTab := ::qTabWidget:currentWidget()
IF ( nTab := ascan( ::aTabs, {|e_| hbqt_IsEqualGcQtPointer( e_[ TAB_OTAB ]:oWidget:pPtr, qTab ) } ) ) > 0
RETURN ::aTabs[ nTab, TAB_OEDITOR ]:qCoEdit
@@ -326,7 +327,7 @@ METHOD IdeEditsManager:getEditObjectCurrent()
METHOD IdeEditsManager:getEditCurrent()
LOCAL qTab, nTab
IF ::qTabWidget:count() > 0
IF !empty( ::qTabWidget ) .AND. ::qTabWidget:count() > 0
qTab := ::qTabWidget:currentWidget()
IF ( nTab := ascan( ::aTabs, {|e_| hbqt_IsEqualGcQtPointer( e_[ TAB_OTAB ]:oWidget:pPtr, qTab ) } ) ) > 0
RETURN ::aTabs[ nTab, TAB_OEDITOR ]:qCqEdit
@@ -340,7 +341,7 @@ METHOD IdeEditsManager:getEditCurrent()
METHOD IdeEditsManager:getEditorCurrent()
LOCAL qTab, nTab
IF ::qTabWidget:count() > 0
IF !empty( ::qTabWidget ) .AND. ::qTabWidget:count() > 0
qTab := ::qTabWidget:currentWidget()
IF ( nTab := ascan( ::aTabs, {|e_| hbqt_IsEqualGcQtPointer( e_[ TAB_OTAB ]:oWidget:pPtr, qTab ) } ) ) > 0
RETURN ::aTabs[ nTab, TAB_OEDITOR ]
@@ -426,6 +427,8 @@ METHOD IdeEditsManager:setSourceVisible( cSource )
LOCAL oEdit, nIndex
IF !empty( oEdit := ::getEditorBySource( cSource ) )
::oDK:setView( oEdit:cView )
nIndex := ::qTabWidget:indexOf( oEdit:oTab:oWidget )
IF ::qTabWidget:currentIndex() != nIndex
::qTabWidget:setCurrentIndex( nIndex )
@@ -1050,7 +1053,6 @@ METHOD IdeEditor:new( oIde, cSourceFile, nPos, nHPos, nVPos, cTheme, cView )
/*----------------------------------------------------------------------*/
METHOD IdeEditor:create( oIde, cSourceFile, nPos, nHPos, nVPos, cTheme, cView )
LOCAL n
::qSlots := HBSlots():new()
@@ -1070,17 +1072,8 @@ METHOD IdeEditor:create( oIde, cSourceFile, nPos, nHPos, nVPos, cTheme, cView )
::cTheme := cTheme
::cView := cView
DEFAULT ::cView TO iif( ::nCurView == 0, "Main", ::aINI[ INI_VIEWS, ::nCurView ] )
IF ::cView == "Main"
::oStackedWidget:oWidget:setCurrentIndex( 0 )
ELSE
IF ( n := ascan( ::aINI[ INI_VIEWS ], {|e| e == ::cView } ) ) > 0
::oStackedWidget:oWidget:setCurrentIndex( n )
ELSE
::oStackedWidget:oWidget:setCurrentIndex( 0 )
ENDIF
ENDIF
DEFAULT ::cView TO iif( ::cWrkView == "Stats", "Main", ::cWrkView )
::oDK:setView( ::cView )
::pathNormalized := hbide_pathNormalized( cSourceFile, .t. )

View File

@@ -0,0 +1,528 @@
/*
* $Id$
*/
/*
* Harbour Project source code:
*
* Copyright 2010 Pritpal Bedi <pritpal@vouchcac.com>
* www - http://www.harbour-project.org
*
* This program is free software; you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation; either version 2, or (at your option)
* any later version.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with this software; see the file COPYING. If not, write to
* the Free Software Foundation, Inc., 59 Temple Place, Suite 330,
* Boston, MA 02111-1307 USA (or visit the web site http://www.gnu.org/).
*
* As a special exception, the Harbour Project gives permission for
* additional uses of the text contained in its release of Harbour.
*
* The exception is that, if you link the Harbour libraries with other
* files to produce an executable, this does not by itself cause the
* resulting executable to be covered by the GNU General Public License.
* Your use of that executable is in no way restricted on account of
* linking the Harbour library code into it.
*
* This exception does not however invalidate any other reasons why
* the executable file might be covered by the GNU General Public License.
*
* This exception applies only to the code released by the Harbour
* Project under the name Harbour. If you copy code from other
* Harbour Project or Free Software Foundation releases into a copy of
* Harbour, as the General Public License permits, the exception does
* not apply to the code that you add in this way. To avoid misleading
* anyone as to the status of such modified files, you must delete
* this exception notice from them.
*
* If you write modifications of your own for Harbour, it is your choice
* whether to permit this exception to apply to your modifications.
* If you do not wish that, delete this exception notice.
*
*/
/*----------------------------------------------------------------------*/
/*----------------------------------------------------------------------*/
/*----------------------------------------------------------------------*/
/*
* EkOnkar
* ( The LORD is ONE )
*
* Harbour-Qt IDE
*
* Pritpal Bedi <pritpal@vouchcac.com>
* 04Mar2010
*/
/*----------------------------------------------------------------------*/
/*----------------------------------------------------------------------*/
/*----------------------------------------------------------------------*/
#include "hbide.ch"
#include "common.ch"
#include "hbclass.ch"
#include "xbp.ch"
#include "hbqt.ch"
/*----------------------------------------------------------------------*/
#define browserStat_anchorClicked 101
#define browserWelcome_contextMenuRequested 102
#define browserFaq_contextMenuRequested 103
#define tabWidget_currentChanged 104
/*----------------------------------------------------------------------*/
STATIC FUNCTION hbide_htmlImgAnchor( cHref, cImg, nWidth, nHeight )
DEFAULT nWidth TO 12
DEFAULT nHeight TO 12
RETURN '<A href="' + cHref + '"' + '>' + ' <IMG src="' + cImg + '"' + ;
' width="' + hb_ntos( nWidth ) + '" height="' + hb_ntos( nHeight ) + '"' + '</IMG>' + '</A>'
/*----------------------------------------------------------------------*/
STATIC FUNCTION hbide_htmlAnchor( cHref, cText, cTooltip )
RETURN '<A href="' + cHref + '"' + iif( empty( cTooltip ), '', ' title="' + cTooltip + '"' ) +'>' + cText + '</A>'
/*----------------------------------------------------------------------*/
CLASS IdeHome INHERIT IdeObject
DATA oWelcomeTab
DATA qWelcomeBrowser
DATA oFaqTab
DATA qFaqBrowser
DATA cClickedProject
DATA cClickedSource
DATA qCurBrowser
METHOD new( oIde )
METHOD create( oIde )
METHOD destroy()
METHOD refresh()
METHOD execEvent( nMode, p )
METHOD buildWelcomeTab()
METHOD activateTab( mp1, mp2, oTab )
METHOD addProjectsInfo( aHtm )
METHOD buildProjectDetails( cProjectTitle )
METHOD buildSourcesInfo( cProjectTitle, aSrcInfo )
METHOD formatSourceInfo( aHtm, aSrc )
METHOD buildFaqTab()
METHOD setStyleSheetTextBrowser( qBrw )
METHOD print()
METHOD paintRequested( pPrinter )
ENDCLASS
/*----------------------------------------------------------------------*/
METHOD IdeHome:new( oIde )
::oIde := oIde
RETURN Self
/*----------------------------------------------------------------------*/
METHOD IdeHome:create( oIde )
LOCAL oStatFrame
DEFAULT oIde TO ::oIde
::oIde := oIde
oStatFrame := ::aViews[ 1 ]
oStatFrame:oTabWidget:oWidget:setDocumentMode( .t. )
oStatFrame:oTabWidget:oWidget:setStyleSheet( "QTabWidget::tab-bar {left: 5px;}" )
oStatFrame:qLayout:setContentsMargins( 0,0,0,0 )
::buildWelcomeTab()
::buildFaqTab()
oStatFrame:oTabWidget:oWidget:setCurrentIndex( 0 )
RETURN Self
/*----------------------------------------------------------------------*/
METHOD IdeHome:destroy()
::disconnect( ::qWelcomeBrowser, "anchorClicked(QUrl)" )
::disconnect( ::qWelcomeBrowser, "customContextMenuRequested(QPoint)" )
::disconnect( ::qFaqBrowser , "customContextMenuRequested(QPoint)" )
::qWelcomeBrowser := NIL
RETURN Self
/*----------------------------------------------------------------------*/
METHOD IdeHome:execEvent( nMode, p )
LOCAL cAct, qUrl, cText, cExt
DO CASE
CASE nMode == tabWidget_currentChanged
IF p == 0
::qCurBrowser := ::qWelcomeBrowser
ELSEIF p == 1
::qCurBrowser := ::qFaqBrowser
ENDIF
CASE nMode == browserStat_anchorClicked
qUrl := QUrl():from( p )
cText := lower( qUrl:toString() )
IF "prj-" $ cText
::cClickedProject := substr( cText, 5 )
::buildProjectDetails( ::cClickedProject )
ELSEIF "fle-" $ cText
::cClickedSource := substr( cText, 5 )
/* Send it for Editing */
hb_fNameSplit( ::cClickedSource, , , @cExt )
IF lower( cExt ) == ".hbp"
::buildProjectDetails( ::cClickedSource )
ELSE
::oSM:editSource( hbide_stripFilter( ::cClickedSource ) )
ENDIF
/* Stay on the Same Page */
::buildProjectDetails( ::cClickedProject )
ENDIF
CASE nMode == browserWelcome_contextMenuRequested .OR. nMode == browserFaq_contextMenuRequested
IF !empty( cAct := hbide_popupBrwContextMenu( ::qCurBrowser, p ) )
IF cAct $ "Back,Forward,Home"
::refresh()
ELSEIF cAct == "Print"
::print()
ENDIF
ENDIF
ENDCASE
RETURN Self
/*----------------------------------------------------------------------*/
METHOD IdeHome:activateTab( mp1, mp2, oTab )
HB_SYMBOL_UNUSED( mp1 )
HB_SYMBOL_UNUSED( mp2 )
IF oTab == ::oWelcomeTab
::qCurBrowser := ::qWelcomeBrowser
ELSEIF oTab == ::oFaqTab
::qCurBrowser := ::qFaqBrowser
ENDIF
RETURN Self
/*----------------------------------------------------------------------*/
METHOD IdeHome:print()
LOCAL qDlg
qDlg := QPrintPreviewDialog():new( ::aViews[ 1 ]:oTabWidget )
qDlg:setWindowTitle( "Wecome::Projects" )
Qt_Slots_Connect( ::pSlots, qDlg, "paintRequested(QPrinter)", {|p| ::paintRequested( p ) } )
qDlg:exec()
Qt_Slots_disConnect( ::pSlots, qDlg, "paintRequested(QPrinter)" )
RETURN self
/*----------------------------------------------------------------------*/
METHOD IdeHome:paintRequested( pPrinter )
LOCAL qPrinter := QPrinter():configure( pPrinter )
::qCurBrowser:print( qPrinter )
RETURN Self
/*----------------------------------------------------------------------*/
METHOD IdeHome:setStyleSheetTextBrowser( qBrw )
qBrw:setStyleSheet( 'QTextBrowser { background-image: url(resources/hbidesplashwatermark.png); ' + ;
'background-attachment: scroll; background-repeat:no-repeat; background-position:center;' + ;
'background-color: rgb(255,255,255); }' )
RETURN Self
/*----------------------------------------------------------------------*/
METHOD IdeHome:buildWelcomeTab()
LOCAL oTab, qBrw, qSList
oTab := XbpTabPage():new( ::aViews[ 1 ], , { 5,5 }, { 700,400 }, , .t. )
oTab:caption := "Welcome"
oTab:minimized := .F.
oTab:create()
oTab:tabActivate := {|mp1,mp2,oXbp| ::activateTab( mp1, mp2, oXbp ) }
oTab:hbLayout := HBPLAYOUT_TYPE_VERTBOX
oTab:qLayout:setContentsMargins( 0,0,0,0 )
qBrw := QTextBrowser():new()
oTab:qLayout:addWidget( qBrw )
qBrw:setContextMenuPolicy( Qt_CustomContextMenu )
::setStyleSheetTextBrowser( qBrw )
::oWelcomeTab := oTab
::qWelcomeBrowser := qBrw
::qCurBrowser := qBrw
::connect( qBrw, "anchorClicked(QUrl)" , {|p| ::execEvent( browserStat_anchorClicked, p ) } )
::connect( qBrw, "customContextMenuRequested(QPoint)", {|p| ::execEvent( browserWelcome_contextMenuRequested, p ) } )
qSList := QStringList():new()
qSList:append( "docs" )
qBrw:setSearchPaths( qSList )
RETURN Self
/*----------------------------------------------------------------------*/
METHOD IdeHome:refresh()
LOCAL aHtm := {}
aadd( aHtm, '<HTML>' )
aadd( aHtm, ' <BODY align=center valign=center>' )
aadd( aHtm, ' <TABLE cols="7" width="95%">' )
aadd( aHtm, ' <TR>' )
aadd( aHtm, ' <TD align="left" valign="center" colspan="5">' )
aadd( aHtm, ' <IMG src="resources/project.png"' + '</IMG>' + '&nbsp;' + '&nbsp;' + '&nbsp;' )
aadd( aHtm, ' <FONT face="Times New Roman" color="#FF4719" size="7"><B><U>Projects</U></B></FONT>' )
aadd( aHtm, ' &nbsp;' + '&nbsp;' + '&nbsp;' )
aadd( aHtm, ' <FONT face="Times New Roman" size="5">' + '( ' + ::oIde:cProjIni + ' )' + '</FONT>' )
aadd( aHtm, ' </TD>' )
aadd( aHtm, ' </TR>' )
aadd( aHtm, ' <TR bgcolor="#F0F0F5">' )
aadd( aHtm, ' <TH width="150" >Title </TH>' )
aadd( aHtm, ' <TH width="50" >Type </TH>' )
aadd( aHtm, ' <TH width="75" >Sources </TH>' )
aadd( aHtm, ' <TH width="150" >Last Modified </TH>' )
aadd( aHtm, ' <TH >Location </TH>' )
AADD( aHtm, ' </TR>' )
//
::addProjectsInfo( @aHtm )
//
aadd( aHtm, ' </TABLE>' )
aadd( aHtm, ' </BODY>' )
aadd( aHtm, '</HTML>' )
//
::qWelcomeBrowser:clear()
//
::qWelcomeBrowser:setHTML( hbide_arrayToMemo( aHtm ) )
RETURN Self
/*----------------------------------------------------------------------*/
METHOD IdeHome:addProjectsInfo( aHtm )
LOCAL a_, prp_, src_, dir_, cIcon
IF empty( ::aProjects )
aadd( aHtm, ' <TR>' )
aadd( aHtm, ' <TD>' )
aadd( aHtm, ' ' + 'None' )
aadd( aHtm, ' </TD>' )
aadd( aHtm, ' <TR>' )
ELSE
FOR EACH a_ IN ::aProjects
prp_ := a_[ 3, PRJ_PRP_PROPERTIES, 1 ]
src_ := a_[ 3, PRJ_PRP_SOURCES , 1 ]
dir_ := directory( a_[ 1 ] )
cIcon := hbide_imageForProjectType( prp_[ PRJ_PRP_TYPE ] )
aadd( aHtm, ' <TR>' )
aadd( aHtm, ' <TD><B>' )
aadd( aHtm, ' ' + hbide_htmlImgAnchor( 'prj-' + prp_[ PRJ_PRP_TITLE ], 'resources/' + cIcon + '.png' ) + '&nbsp;' )
aadd( aHtm, ' ' + hbide_htmlAnchor( 'prj-' + prp_[ PRJ_PRP_TITLE ], prp_[ PRJ_PRP_TITLE ], a_[ 1 ] ) )
aadd( aHtm, ' </B></TD>' )
aadd( aHtm, ' <TD align=left>' )
aadd( aHtm, ' ' + left( prp_[ PRJ_PRP_TYPE ], 3 ) )
aadd( aHtm, ' </TD>' )
aadd( aHtm, ' <TD align=right>' )
aadd( aHtm, ' ' + hb_ntos( len( src_ ) ) )
aadd( aHtm, ' </TD>' )
aadd( aHtm, ' <TD align=center>' )
aadd( aHtm, ' ' + dtoc( dir_[ 1,3 ] ) + " " + dir_[ 1,4 ] )
aadd( aHtm, ' </TD>' )
aadd( aHtm, ' <TD align=right>' )
aadd( aHtm, ' ' + hbide_pathNormalized( a_[ 1 ] ) )
aadd( aHtm, ' </TD>' )
aadd( aHtm, ' </TR>' )
NEXT
ENDIF
RETURN Self
/*----------------------------------------------------------------------*/
METHOD IdeHome:buildProjectDetails( cProjectTitle )
LOCAL aSrc, cSrc, dir_, cRoot, cExt, cIcon, cName, cPath
LOCAL aSrcInfo := {}, a_:= {}
aSrc := ::oPM:getSourcesByProjectTitle( cProjectTitle )
cRoot := ::oPM:getProjectPathFromTitle( cProjectTitle )
FOR EACH cSrc IN aSrc
aadd( a_, hbide_syncProjPath( cRoot, cSrc ) )
NEXT
a_ := hbide_groupSources( "org", a_ )
FOR EACH cSrc IN a_
hb_fNameSplit( cSrc, @cPath, @cName, @cExt )
cExt := lower( cExt )
cIcon := hbide_imageForFileType( cExt )
IF !empty( dir_:= directory( cSrc ) )
// bytes date time
aadd( aSrcInfo, { cSrc, hbide_pathNormalized( cPath ), cName, cExt, cIcon, dir_[ 1,2 ], dir_[ 1,3 ], dir_[ 1,4 ] } )
ENDIF
NEXT
IF !empty( aSrcInfo )
::buildSourcesInfo( cProjectTitle, aSrcInfo )
ELSE
::refresh()
ENDIF
RETURN aSrcInfo
/*----------------------------------------------------------------------*/
METHOD IdeHome:buildSourcesInfo( cProjectTitle, aSrcInfo )
LOCAL aHtm := {}, aSrc
LOCAL cIcon := hbide_imageForProjectType( ::oPM:getProjectTypeFromTitle( cProjectTitle ) )
aadd( aHtm, '<HTML>' )
aadd( aHtm, ' <BODY ALIGN=center VALIGN=center>' )
aadd( aHtm, ' <TABLE COLS="7" WIDTH="95%">' )
aadd( aHtm, ' <TR><TD align=left>' )
aadd( aHtm, ' <IMG src="' + 'resources/' + cIcon + '.png' + '"' + '</IMG>' + '&nbsp;' + '&nbsp;' + '&nbsp;' )
aadd( aHtm, ' <FONT color="#FF4719" size=5><U>' + cProjectTitle + '</U></FONT>' )
aadd( aHtm, ' </TD>' )
aadd( aHtm, ' <TR bgcolor="#F0F0F5">' )
aadd( aHtm, ' <TH width="150" >Source</TH>' )
aadd( aHtm, ' <TH width="50" >Type</TH>' )
aadd( aHtm, ' <TH width="60" >Size</TH>' )
aadd( aHtm, ' <TH width="150" >Last Modified</TH>' )
aadd( aHtm, ' <TH >Location</TH>' )
AADD( aHtm, ' </TR>' )
//
FOR EACH aSrc IN aSrcInfo
::formatSourceInfo( @aHtm, aSrc )
NEXT
//
aadd( aHtm, ' </TABLE>' )
aadd( aHtm, ' </BODY>' )
aadd( aHtm, '</HTML>' )
//
::qWelcomeBrowser:clear()
//
::qWelcomeBrowser:setHTML( hbide_arrayToMemo( aHtm ) )
RETURN Self
/*----------------------------------------------------------------------*/
METHOD IdeHome:formatSourceInfo( aHtm, aSrc )
aadd( aHtm, ' <TR>' )
aadd( aHtm, ' <TD><B>' )
aadd( aHtm, ' ' + hbide_htmlImgAnchor( 'fle-' + aSrc[ 1 ], 'resources/' + aSrc[ 5 ] + '.png' ) + '&nbsp;' )
aadd( aHtm, ' ' + hbide_htmlAnchor( 'fle-' + aSrc[ 1 ], aSrc[ 3 ], aSrc[ 1 ] ) )
aadd( aHtm, ' </B></TD>' )
aadd( aHtm, ' <TD>' )
aadd( aHtm, ' ' + aSrc[ 4 ] )
aadd( aHtm, ' </TD>' )
aadd( aHtm, ' <TD align=right>' )
aadd( aHtm, ' ' + hb_ntos( aSrc[ 6 ] ) )
aadd( aHtm, ' </TD>' )
aadd( aHtm, ' <TD align=center>' )
aadd( aHtm, ' ' + dtoc( aSrc[ 7 ] ) + " " + aSrc[ 8 ] )
aadd( aHtm, ' </TD>' )
aadd( aHtm, ' <TD align=right>' )
aadd( aHtm, ' ' + aSrc[ 2 ] )
aadd( aHtm, ' </TD>' )
aadd( aHtm, ' </TR>' )
RETURN Self
/*----------------------------------------------------------------------*/
METHOD IdeHome:buildFaqTab()
LOCAL oTab, qBrw, aFaq, aHtm, a_, b_, s
oTab := XbpTabPage():new( ::aViews[ 1 ], , { 5,5 }, { 700,400 }, , .t. )
oTab:caption := "FAQ's"
oTab:minimized := .F.
oTab:create()
oTab:tabActivate := {|mp1,mp2,oXbp| ::activateTab( mp1, mp2, oXbp ) }
oTab:hbLayout := HBPLAYOUT_TYPE_VERTBOX
oTab:qLayout:setContentsMargins( 0,0,0,0 )
qBrw := QTextBrowser():new()
oTab:qLayout:addWidget( qBrw )
qBrw:setContextMenuPolicy( Qt_CustomContextMenu )
::setStyleSheetTextBrowser( qBrw )
::connect( qBrw, "customContextMenuRequested(QPoint)", {|p| ::execEvent( browserFaq_contextMenuRequested, p ) } )
::oFaqTab := oTab
::qFaqBrowser := qBrw
aFaq := hbide_getFaqs() ; a_:= aFaq[ 1 ]; b_:= aFaq[ 2 ]
aHtm := {}
aadd( aHtm, '<HTML>' )
aadd( aHtm, ' <BODY ALIGN=center VALIGN=center>' )
aadd( aHtm, ' <TABLE COLS="7" WIDTH="95%">' )
FOR EACH s IN a_
aadd( aHtm, ' <TR><TD></TD></TR>' )
aadd( aHtm, ' <TR><TD>' )
aadd( aHtm, ' <FONT color="red" size=4>' + s + '</FONT>' )
aadd( aHtm, ' </TD></TR>' )
aadd( aHtm, ' <TR><TD>' )
aadd( aHtm, ' <FONT color="black" size=3>' + b_[ s:__enumIndex() ] + '</FONT>' )
aadd( aHtm, ' </TD></TR>' )
NEXT
aadd( aHtm, ' </TABLE>' )
aadd( aHtm, ' </BODY>' )
aadd( aHtm, '</HTML>' )
//
::qFaqBrowser:clear()
//
::qFaqBrowser:setHTML( hbide_arrayToMemo( aHtm ) )
RETURN Self
/*----------------------------------------------------------------------*/
STATIC FUNCTION hbide_getFaqs()
LOCAL a_:= {}, b_:= {}
aadd( a_, 'Does hbIDE support editing of same source at more than one place simultaneously ?' )
aadd( b_, 'Yes. hbIDE provides for splitting an editing window, horizontally and vertically, ' + ;
'both ways. Right-click anywhere in the editor, point to "Split..." and then ' + ;
'click on required option.' )
aadd( a_, 'Does hbIDE support session management ?' )
aadd( b_, 'Yes. And in a unique way. It provides to construct n number of "Panels" where you can spread ' + ;
'sources. Each panel is given a name as well as corresponding button on the left-toolbar, a colored ' + ;
'circle, to bring it forward. New panel can be created from selecting "New..." from drop-down ' + ;
'list on top-toolbar and providing a name in the editing dialog. For this reason you will never ' + ;
'need to exit hbIDE and reenter again. It is a big productivity boost.' )
RETURN { a_, b_ }
/*----------------------------------------------------------------------*/

View File

@@ -153,8 +153,8 @@ FUNCTION hbide_execPopup( aPops, aqPos, qParent )
ENDIF
qPop := NIL
RETURN xRet
hbide_justACall( xRet )
RETURN cAct
/*----------------------------------------------------------------------*/
@@ -1411,7 +1411,7 @@ STATIC FUNCTION hbide_HBPStrStripQuote( cString )
STATIC FUNCTION hbide_HBPExtGet( cFileName )
LOCAL cExt
hb_FNameSplit( cFileName,,, @cExt )
hb_FNameSplit( cFileName, , , @cExt )
RETURN cExt
@@ -1722,3 +1722,285 @@ FUNCTION hbide_syncProjPath( cRoot, cSource )
RETURN cRoot + cSource
/*----------------------------------------------------------------------*/
FUNCTION hbide_popupBrwContextMenu( qTextBrowser, p )
LOCAL aMenu := {}
aadd( aMenu, { "Back" , {|| qTextBrowser:backward() } } )
aadd( aMenu, { "Forward" , {|| qTextBrowser:forward() } } )
aadd( aMenu, { "Home" , {|| qTextBrowser:home() } } )
aadd( aMenu, { "" } )
aadd( aMenu, { "Reload" , {|| qTextBrowser:reload() } } )
aadd( aMenu, { "" } )
aadd( aMenu, { "Select All", {|| qTextBrowser:selectAll() } } )
aadd( aMenu, { "Copy" , {|| qTextBrowser:copy() } } )
aadd( aMenu, { "Print" , {|| NIL } } )
RETURN hbide_execPopup( aMenu, p, qTextBrowser )
/*----------------------------------------------------------------------*/
FUNCTION hbide_groupSources( cMode, a_ )
LOCAL cTyp, s, d_, n
LOCAL aSrc := { ".prg", ".c", ".cpp", ".h", ".ch", ".hbp", ".hbc", ".rc", ".res", ".obj", ".o", ".lib", ".a" }
LOCAL aTxt := { {} , {} , {} , {} , {} , {} , {} , {} , {} , {} , {} , {} , {} }
LOCAL aRst := {}
IF cMode == "az"
asort( a_, , , {|e,f| lower( hbide_stripFilter( e ) ) < lower( hbide_stripFilter( f ) ) } )
ELSEIF cMode == "za"
asort( a_, , , {|e,f| lower( hbide_stripFilter( f ) ) < lower( hbide_stripFilter( e ) ) } )
ELSEIF cMode == "org"
asort( a_, , , {|e,f| lower( hbide_stripFilter( e ) ) < lower( hbide_stripFilter( f ) ) } )
FOR EACH s IN a_
s := alltrim( s )
IF left( s, 1 ) != "#"
cTyp := hbide_sourceType( s )
IF ( n := ascan( aSrc, {|e| cTyp == e } ) ) > 0
aadd( aTxt[ n ], s )
ELSE
aadd( aRst, s )
ENDIF
ENDIF
NEXT
a_:= {}
FOR EACH d_ IN aTxt
IF !empty( d_ )
FOR EACH s IN d_
aadd( a_, s )
NEXT
ENDIF
NEXT
IF !empty( aRst )
FOR EACH s IN aRst
aadd( a_, s )
NEXT
ENDIF
ENDIF
RETURN a_
/*----------------------------------------------------------------------*/
FUNCTION hbide_imageForProjectType( cType )
cType := left( cType, 8 )
RETURN iif( cType == "Lib", "fl_lib", iif( cType == "Dll", "fl_dll", "fl_exe" ) )
/*----------------------------------------------------------------------*/
FUNCTION hbide_imageForFileType( cType )
cType := lower( cType )
SWITCH cType
CASE ".exe"
RETURN "fl_exe"
CASE ".lib"
CASE ".a"
RETURN "fl_lib"
CASE ".rc"
CASE ".res"
RETURN "source_res" //"fl_res"
CASE ".prg"
RETURN "source_prg" //"fl_prg"
CASE ".c"
RETURN "source_c"
CASE ".cpp"
RETURN "source_cpp" //"fl_c"
CASE ".o"
CASE ".obj"
RETURN "source_o" //"fl_obj"
CASE ".hbp"
RETURN "project"
CASE ".hbc"
RETURN "envconfig"
CASE ".h"
CASE ".ch"
RETURN "source_h"
OTHERWISE
RETURN "source_unknown" //"fl_txt"
ENDSWITCH
RETURN NIL
/*----------------------------------------------------------------------*/
/* Borrowed from hbmk2.prg - thanks Viktor */
PROCEDURE convert_xhp_to_hbp( cSrcName, cDstName )
LOCAL cSrc := MemoRead( cSrcName )
LOCAL cDst
LOCAL aDst := {}
LOCAL tmp
LOCAL cLine
LOCAL cSetting
LOCAL cValue
LOCAL aValue
LOCAL cFile
LOCAL hLIBPATH := {=>}
LOCAL cMAIN := NIL
LOCAL lFileSection := .F.
IF empty( cDstName )
cDstName := FN_ExtSet( cSrcName, ".hbp" )
ENDIF
cSrc := StrTran( cSrc, Chr( 13 ) + Chr( 10 ), Chr( 10 ) )
cSrc := StrTran( cSrc, Chr( 9 ), Chr( 32 ) )
FOR EACH cLine IN hb_ATokens( cSrc, Chr( 10 ) )
IF cLine == "[Files]"
lFileSection := .T.
ELSEIF lFileSection
tmp := At( "=", cLine )
IF tmp > 0
cFile := AllTrim( Left( cLine, tmp - 1 ) )
SWITCH Lower( FN_ExtGet( cFile ) )
CASE ".c"
CASE ".prg"
IF !( "%HB_INSTALL%\" $ cFile )
AAdd( aDst, StrTran( cFile, "%HOME%\" ) )
ENDIF
EXIT
CASE ".lib"
CASE ".a"
IF !( "%C_LIB_INSTALL%\" $ cFile ) .AND. ;
!( "%HB_LIB_INSTALL%\" $ cFile )
cFile := StrTran( cFile, "%HOME%\" )
IF !( FN_DirGet( cFile ) $ hLIBPATH )
hLIBPATH[ FN_DirGet( cFile ) ] := NIL
ENDIF
AAdd( aDst, "-l" + FN_NameGet( cFile ) )
ENDIF
EXIT
CASE ".obj"
CASE ".o"
IF !( "%C_LIB_INSTALL%\" $ cFile ) .AND. ;
!( "%HB_LIB_INSTALL%\" $ cFile )
AAdd( aDst, StrTran( cFile, "%HOME%\" ) )
ENDIF
EXIT
ENDSWITCH
ENDIF
ELSE
tmp := At( "=", cLine )
IF tmp > 0
cSetting := AllTrim( Left( cLine, tmp - 1 ) )
cValue := AllTrim( SubStr( cLine, tmp + Len( "=" ) ) )
aValue := hb_ATokens( cValue )
IF ! Empty( cValue )
SWITCH cSetting
CASE "Create Map/List File"
IF cValue == "Yes"
AAdd( aDst, "-map" )
ENDIF
EXIT
CASE "Final Path"
IF ! Empty( cValue )
AAdd( aDst, "-o" + DirAddPathSep( StrTran( cValue, "%HOME%\" ) ) )
ENDIF
EXIT
CASE "Include"
FOR EACH tmp IN aValue
IF Left( tmp, 2 ) == "-I"
tmp := SubStr( tmp, 3 )
ENDIF
AAdd( aDst, "-incpath=" + StrTran( StrTran( tmp, Chr( 34 ) ), "%HOME%\" ) )
NEXT
EXIT
CASE "Define"
FOR EACH tmp IN aValue
IF Left( tmp, 2 ) == "-D"
tmp := SubStr( tmp, 3 )
ENDIF
AAdd( aDst, "-D" + tmp )
NEXT
EXIT
CASE "Params"
FOR EACH tmp IN aValue
AAdd( aDst, "-runflag=" + tmp )
NEXT
EXIT
ENDSWITCH
ENDIF
ENDIF
ENDIF
NEXT
FOR EACH tmp IN hLIBPATH
AAdd( aDst, "-L" + tmp:__enumKey() )
NEXT
cDst := ""
FOR EACH tmp IN aDst
cDst += tmp + hb_osNewLine()
NEXT
hb_MemoWrit( cDstName, cDst )
RETURN
/*----------------------------------------------------------------------*/
STATIC FUNCTION FN_DirGet( cFileName )
LOCAL cDir
hb_FNameSplit( cFileName, @cDir )
RETURN cDir
STATIC FUNCTION FN_NameGet( cFileName )
LOCAL cName
hb_FNameSplit( cFileName,, @cName )
RETURN cName
STATIC FUNCTION FN_NameExtGet( cFileName )
LOCAL cName, cExt
hb_FNameSplit( cFileName,, @cName, @cExt )
RETURN hb_FNameMerge( NIL, cName, cExt )
STATIC FUNCTION FN_ExtGet( cFileName )
LOCAL cExt
hb_FNameSplit( cFileName,,, @cExt )
RETURN cExt
STATIC FUNCTION FN_ExtDef( cFileName, cDefExt )
LOCAL cDir, cName, cExt
hb_FNameSplit( cFileName, @cDir, @cName, @cExt )
IF Empty( cExt )
cExt := cDefExt
ENDIF
RETURN hb_FNameMerge( cDir, cName, cExt )
STATIC FUNCTION FN_ExtSet( cFileName, cExt )
LOCAL cDir, cName
hb_FNameSplit( cFileName, @cDir, @cName )
RETURN hb_FNameMerge( cDir, cName, cExt )
STATIC FUNCTION FN_DirExtSet( cFileName, cDirNew, cExtNew )
LOCAL cDir, cName, cExt
hb_FNameSplit( cFileName, @cDir, @cName, @cExt )
IF cDirNew != NIL
cDir := cDirNew
ENDIF
IF cExtNew != NIL
cExt := cExtNew
ENDIF
RETURN hb_FNameMerge( cDir, cName, cExt )
/*----------------------------------------------------------------------*/

View File

@@ -91,6 +91,7 @@ CLASS IdeObject
ACCESS oSM INLINE ::oIde:oSM
ACCESS oEV INLINE ::oIde:oEV
ACCESS oHL INLINE ::oIde:oHL
ACCESS oHM INLINE ::oIde:oHM
ACCESS oFindDock INLINE ::oIde:oFindDock
ACCESS oFindInFiles INLINE ::oIde:oFindInFiles
@@ -143,7 +144,6 @@ CLASS IdeObject
ACCESS aViews INLINE ::oIde:aViews
ACCESS aSkltns INLINE ::oIde:aSkltns
ACCESS nCurView INLINE ::oIde:nCurView
ACCESS nTabSpaces INLINE ::oIde:nTabSpaces
ACCESS cTabSpaces INLINE ::oIde:cTabSpaces
ACCESS cSeparator INLINE ::oIde:cSeparator

View File

@@ -238,6 +238,7 @@ CLASS IdeProjManager INHERIT IdeObject
METHOD getProjectProperties( cProjectTitle )
METHOD getProjectByFile( cProjectFile )
METHOD getProjectFileNameFromTitle( cProjectTitle )
METHOD getProjectTypeFromTitle( cProjectTitle )
METHOD getProjectPathFromTitle( cProjectTitle )
METHOD getProjectByTitle( cProjectTitle )
METHOD getSourcesByProjectTitle( cProjectTitle )
@@ -248,12 +249,12 @@ CLASS IdeProjManager INHERIT IdeObject
METHOD launchProject( cProject, cExe )
METHOD showOutput( cOutput, mp2, oProcess )
METHOD finished( nExitCode, nExitStatus, oProcess )
METHOD loadXhpProject()
METHOD loadHbpProject( cHbp )
METHOD isValidProjectLocation( lTell )
METHOD setProjectLocation( cPath )
METHOD buildInterface()
METHOD pullHbpData( cHbp )
METHOD synchronizeAlienProject( cProjFileName )
ENDCLASS
@@ -299,20 +300,11 @@ METHOD IdeProjManager:populate()
/*----------------------------------------------------------------------*/
METHOD IdeProjManager:getProperties()
LOCAL aPrj, cHbi, cTmp, n
LOCAL cTmp, n
IF Empty( ::cWrkProject )
MsgBox( 'No active project detected' )
ENDIF
cTmp := ::getCurrentProject()
IF ( n := ascan( ::aProjects, {|e_| e_[ 3, PRJ_PRP_PROPERTIES, 2, E_oPrjTtl ] == cTmp } ) ) > 0
aPrj := ::aProjects[ n, 3 ]
cHbi := aPrj[ PRJ_PRP_PROPERTIES, 2, PRJ_PRP_LOCATION ] + ::pathSep + ;
aPrj[ PRJ_PRP_PROPERTIES, 2, PRJ_PRP_OUTPUT ] + ".hbp"
::loadProperties( cHbi, .f., .t., .t. )
ELSE
MsgBox( 'Invalid project: ' + cTmp )
::loadProperties( ::aProjects[ n, 1 ], .f., .t., .t. )
ENDIF
RETURN Self
@@ -340,7 +332,9 @@ METHOD IdeProjManager:loadProperties( cProjFileName, lNew, lFetch, lUpdateTree )
lFetch := .t.
ELSE
IF empty( cProjFileName )
cProjFileName := hbide_fetchAFile( ::oDlg, "Load Project...", { { "Harbour IDE Projects (*.hbp)", "*.hbp" } } )
cProjFileName := hbide_fetchAFile( ::oDlg, "Open Project...", { { "Harbour Projects (*.hbp)", "*.hbp" } , ;
{ "xMate Projects (*.xhp)" , "*.xhp" } } )
cProjFileName := ::synchronizeAlienProject( cProjFileName )
ENDIF
IF empty( cProjFileName )
RETURN Self
@@ -362,24 +356,22 @@ METHOD IdeProjManager:loadProperties( cProjFileName, lNew, lFetch, lUpdateTree )
::oPropertiesDock:hide()
::oPropertiesDock:show()
ELSE
IF nAlready == 0 .AND. !empty( ::aPrjProps )
aadd( ::oIDE:aProjects, { hbide_pathNormalized( cProjFileName ), cProjFileName, aclone( ::aPrjProps ) } )
IF lUpdateTree
::oIDE:updateProjectTree( ::aPrjProps )
IF !empty( ::aPrjProps )
IF nAlready == 0
aadd( ::oIDE:aProjects, { hbide_pathNormalized( cProjFileName ), cProjFileName, aclone( ::aPrjProps ) } )
IF lUpdateTree
::oIDE:updateProjectTree( ::aPrjProps )
ENDIF
hbide_mnuAddFileToMRU( ::oIDE, cProjFileName, INI_RECENTPROJECTS )
ELSE
::aProjects[ nAlready, 3 ] := aclone( ::aPrjProps )
IF lUpdateTree
::oIDE:updateProjectTree( ::aPrjProps )
ENDIF
ENDIF
hbide_mnuAddFileToMRU( ::oIDE, cProjFileName, INI_RECENTPROJECTS )
ELSE
::aProjects[ nAlready, 3 ] := aclone( ::aPrjProps )
IF lUpdateTree
::oIDE:updateProjectTree( ::aPrjProps )
ENDIF
#if 0
IF lUpdateTree .AND. ::aPrjProps[ PRJ_PRP_PROPERTIES, 2, E_qPrjType ] <> t
MsgBox( "::removeProjectFromTree( ::aPrjProps )" )
ENDIF
#endif
ENDIF
::oHM:refresh() /* Rearrange Projects Data */
ENDIF
RETURN Self
@@ -596,25 +588,24 @@ METHOD IdeProjManager:save( lCanClose )
::cSaveTo := ::oUI:q_editPrjLoctn:text() + ::pathSep + ::oUI:q_editOutName:text() + ".hbp"
::cSaveTo := hbide_pathToOSPath( ::cSaveTo )
hbide_dbg( ::lUpdateTree, ::cSaveTo )
IF ( lOk := hbide_createTarget( ::cSaveTo, txt_ ) )
::aPrjProps := ::pullHbpData( hbide_pathToOSPath( ::cSaveTo ) )
IF ( nAlready := ascan( ::aProjects, {|e_| e_[ 1 ] == hbide_pathNormalized( ::cSaveTo ) } ) ) == 0
hbide_dbg( nAlready, ::lUpdateTree, ::cSaveTo )
aadd( ::oIDE:aProjects, { hbide_pathNormalized( ::cSaveTo ), ::cSaveTo, aclone( ::aPrjProps ) } )
IF ::lUpdateTree
::oIDE:updateProjectTree( ::aPrjProps )
ENDIF
hbide_mnuAddFileToMRU( ::oIDE, ::cSaveTo, INI_RECENTPROJECTS )
ELSE
hbide_dbg( nAlready, ::lUpdateTree, ::cSaveTo )
::aProjects[ nAlready, 3 ] := aclone( ::aPrjProps )
IF ::lUpdateTree
::oIDE:updateProjectTree( ::aPrjProps )
ENDIF
ENDIF
::oHM:refresh() /* Rearrange Projects Data */
ELSE
MsgBox( 'Error saving project file: ' + ::cSaveTo, 'Error saving project ...' )
@@ -749,7 +740,6 @@ METHOD IdeProjManager:buildInterface()
::oUI:q_buttonChooseWd :setIcon( cLukupPng )
::oUI:q_buttonChooseDest :setIcon( cLukupPng )
::oUI:q_buttonBackup :setIcon( cLukupPng )
::oUI:q_buttonXmate :setIcon( hbide_image( "xmate" ) )
::oUI:q_buttonSelect :setIcon( hbide_image( "open" ) )
::oUI:q_buttonSort :setIcon( hbide_image( "sort" ) )
@@ -771,7 +761,6 @@ METHOD IdeProjManager:buildInterface()
::oUI:signal( "buttonChooseWd" , "clicked()", {|| ::PromptForPath( 'editWrkFolder', 'Choose Working Folder...' ) } )
::oUI:signal( "buttonChooseDest" , "clicked()", {|| ::PromptForPath( 'editDstFolder', 'Choose Destination Folder...' ) } )
::oUI:signal( "buttonBackup" , "clicked()", {|| ::PromptForPath( 'editBackup' , 'Choose Backup Folder...' ) } )
::oUI:signal( "buttonXmate" , "clicked()", {|| ::loadXhpProject() } )
::oUI:signal( "editPrjLoctn" , "textChanged(QString)", {|cPath| ::setProjectLocation( cPath ) } )
@@ -779,167 +768,28 @@ METHOD IdeProjManager:buildInterface()
/*----------------------------------------------------------------------*/
METHOD IdeProjManager:loadXhpProject()
LOCAL cXhp, a_, s, n, cPart, cKey, cVal
LOCAL cHome, cOutname, cType, cDefine, cInclude
LOCAL cRun, cParams, cDestntn, cMap
LOCAL cPath, cFile, cExt
LOCAL hLIBPATH := {=>}
LOCAL aLibs := {}, aFlags := {}, aFiles := {}, aSrc := {}
METHOD IdeProjManager:synchronizeAlienProject( cProjFileName )
LOCAL cPath, cFile, cExt, cHbp
cXhp := hbide_fetchAFile( ::oDlg, "Selecet xMate Project File", { { "xMate Project Files", "*.xhp" } } )
IF empty( cXhp )
RETURN Self
hb_fNameSplit( cProjFileName, @cPath, @cFile, @cExt )
IF lower( cExt ) == ".hbp" /* Nothing to do */
RETURN cProjFileName
ENDIF
hb_fNameSplit( cXhp, @cHome, @cOutName )
cHome := hbide_pathStripLastSlash( cHome )
a_:= hbide_readSource( cXhp )
cPart := ""
FOR EACH s IN a_
s := alltrim( s )
IF empty( s )
LOOP
ENDIF
IF left( s, 1 ) == "["
IF ( n := at( "]", s ) ) > 0
cPart := substr( s, 2, n-2 )
ELSE
cPart := ""
ENDIF
ELSE
SWITCH lower( cPart )
CASE "version"
EXIT
CASE "xmate"
IF hbide_parseKeyValPair( s, @cKey, @cVal )
IF cKey == "Create Map/List File" .AND. cVal == "Yes"
cMap := "-map"
ENDIF
ENDIF
EXIT
CASE "info"
IF hbide_parseKeyValPair( s, @cKey, @cVal )
SWITCH lower( cKey )
CASE "type"
cType := cVal
EXIT
CASE "include"
cInclude := cVal
EXIT
CASE "define"
cDefine := cVal
EXIT
CASE "architecture"
EXIT
ENDSWITCH
ENDIF
EXIT
CASE "xmate"
EXIT
CASE "project"
IF hbide_parseKeyValPair( s, @cKey, @cVal )
SWITCH lower( cKey )
CASE "run"
cRun := cVal
EXIT
CASE "params"
cParams := cVal
EXIT
CASE "final path"
cDestntn := hbide_pathStripLastSlash( cVal )
EXIT
ENDSWITCH
ENDIF
EXIT
CASE "data path"
EXIT
CASE "editor"
EXIT
CASE "files"
IF hbide_parseKeyValPair( s, @cKey, @cVal )
aadd( aFiles, cKey )
ENDIF
EXIT
ENDSWITCH
ENDIF
NEXT
/* Basic Parsing is complete , parse paths from keywords */
SWITCH cType
CASE "Executable"
::oUI:q_comboPrjType:setCurrentIndex( 0 )
EXIT
CASE "Library"
::oUI:q_comboPrjType:setCurrentIndex( 1 )
EXIT
CASE "Dll"
::oUI:q_comboPrjType:setCurrentIndex( 2 )
EXIT
OTHERWISE
::oUI:q_comboPrjType:setCurrentIndex( 0 )
EXIT
ENDSWITCH
::oUI:q_editPrjTitle :setText( cOutName )
::oUI:q_editPrjLoctn :setText( cHome )
* ::oUI:q_editWrkFolder:setText( "" )
::oUI:q_editDstFolder:setText( iif( cDestntn == "%HOME%", cHome, strtran( cDestntn, "%HOME%\", ) ) )
* ::oUI:q_editBackup :setText( "" )
::oUI:q_editOutName :setText( cOutName )
::oUI:q_editLaunchParams:setText( cParams )
::oUI:q_editLaunchExe:setText( cRun )
IF !empty( cMap )
aadd( aFlags, cMap )
endif
aadd( aFlags, "-inc" )
IF !empty( cDefine )
FOR EACH s IN hb_aTokens( cDefine, ";" )
IF !empty( s )
aadd( aFlags, "-D" + StrTran( s, "%HOME%\", ) )
ENDIF
NEXT
IF !( lower( cExt ) $ ".xhp" ) /* Not a valid alien project file */
RETURN ""
ENDIF
IF !empty( cInclude )
FOR EACH s IN hb_aTokens( cInclude, ";" )
IF !empty( s )
IF !( "%HB_INSTALL%" $ s .OR. "%HB_LIB_INSTALL%" $ s .OR. "%C_LIB_INSTALL%" $ s )
aadd( aFlags, "-incpath=" + StrTran( s, "%HOME%\", ) )
ENDIF
ENDIF
NEXT
ENDIF
FOR EACH s IN aFiles
IF !( "%HB_INSTALL%" $ s .OR. "%HB_LIB_INSTALL%" $ s .OR. "%C_LIB_INSTALL%" $ s )
hb_fNameSplit( s, @cPath, @cFile, @cExt )
SWITCH lower( cExt )
CASE ".lib"
CASE ".a"
IF !( cPath $ hLIBPATH )
hLIBPATH[ cPath ] := NIL
ENDIF
aadd( aLibs, cFile )
EXIT
OTHERWISE
aadd( aSrc, StrTran( s, "%HOME%\", ) )
EXIT
ENDSWITCH
cHbp := cPath + cFile + ".hbp"
IF hb_fileExists( cHbp )
IF ! hbide_getYesNo( "A .hbp with convered name already exists, overwrite ?", "", "Project exists" )
RETURN ""
ENDIF
NEXT
FOR EACH s IN hLIBPATH
aadd( aFlags, "-L" + s:__enumKey() )
NEXT
FOR EACH s IN aLibs
aadd( aFlags, "-l" + s )
NEXT
ENDIF
::oUI:q_editFlags :setPlainText( hbide_arrayToMemo( aFlags ) )
::oUI:q_editSources:setPlainText( hbide_arrayToMemo( aSrc ) )
convert_xhp_to_hbp( cProjFileName, cHbp )
RETURN Self
RETURN cHbp
/*----------------------------------------------------------------------*/
@@ -1142,23 +992,18 @@ METHOD IdeProjManager:selectCurrentProject()
RETURN ::cWrkProject
ENDIF
#ifdef HBIDE_USE_UIC
oDlg := HbQtUI():new( ::oIDE:resPath + "selectproject.uic", ::oDlg:oWidget ):build()
#else
oDlg := HbQtUI():new( ::oIDE:resPath + "selectproject.ui", ::oDlg:oWidget ):create()
#endif
* Fill ComboBox with current project names
FOR EACH p IN ::aProjects
IF !empty( t := p[ 3, PRJ_PRP_PROPERTIES, 2, E_oPrjTtl ] )
oDlg:qObj[ "cbProjects" ]:addItem( t )
ENDIF
IF !empty( t := p[ 3, PRJ_PRP_PROPERTIES, 2, E_oPrjTtl ] )
oDlg:qObj[ "cbProjects" ]:addItem( t )
ENDIF
NEXT
oDlg:signal( "btnCancel", "clicked()", {|| oDlg:oWidget:close() } )
oDlg:signal( "btnOk" , "clicked()", {|| ::setCurrentProject( oDlg:qObj[ "cbProjects" ]:currentText() ), ;
oDlg:oWidget:close() } )
oDlg:signal( "btnCancel", "clicked()", {|| oDlg:oWidget:close() } )
oDlg:exec()
oDlg:destroy()
oDlg := NIL
@@ -1202,6 +1047,17 @@ METHOD IdeProjManager:getProjectByFile( cProjectFile )
/*----------------------------------------------------------------------*/
METHOD IdeProjManager:getProjectTypeFromTitle( cProjectTitle )
LOCAL n, cType := ""
IF ( n := ascan( ::aProjects, {|e_, x| x := e_[ 3 ], x[ 1, 2, PRJ_PRP_TITLE ] == cProjectTitle } ) ) > 0
cType := ::aProjects[ n, 3, PRJ_PRP_PROPERTIES, 1, PRJ_PRP_TYPE ]
ENDIF
RETURN cType
/*----------------------------------------------------------------------*/
METHOD IdeProjManager:getProjectPathFromTitle( cProjectTitle )
LOCAL cPath

View File

@@ -112,15 +112,15 @@ FUNCTION hbide_saveINI( oIde )
aadd( txt_, "[FILES]" )
aadd( txt_, " " )
FOR j := 0 TO len( oIde:aINI[ INI_VIEWS ] )
FOR j := 2 TO len( oIde:aViews )
oIde:lClosing := .t.
oIde:oStackedWidget:oWidget:setCurrentIndex( j )
oIde:oDK:setView( oIde:aViews[ j ]:oWidget:objectName() )
nTabs := oIde:qTabWidget:count()
FOR n := 1 TO nTabs
pTab := oIde:qTabWidget:widget( n-1 )
nTab := ascan( oIde:aTabs, {|e_| hbqt_IsEqualGcQtPointer( e_[ 1 ]:oWidget:pPtr, pTab ) } )
oEdit := oIde:aTabs[ nTab, TAB_OEDITOR ]
pTab := oIde:qTabWidget:widget( n - 1 )
nTab := ascan( oIde:aTabs, {|e_| hbqt_IsEqualGcQtPointer( e_[ 1 ]:oWidget:pPtr, pTab ) } )
oEdit := oIde:aTabs[ nTab, TAB_OEDITOR ]
IF !Empty( oEdit:sourceFile ) .and. !( ".ppo" == lower( oEdit:cExt ) )
IF oEdit:lLoaded
@@ -348,16 +348,20 @@ FUNCTION hbide_loadINI( oIde, cHbideIni )
/*----------------------------------------------------------------------*/
STATIC FUNCTION hbide_saveSettings( oIde )
LOCAL cPath
hbqt_QMainWindow_saveSettings( hb_dirBase() + "idesettings.ini", "hbIDE", oIde:oDlg:oWidget:pPtr )
hb_fNameSplit( oIde:cProjIni, @cPath )
hbqt_QMainWindow_saveSettings( cPath + "hbide.set", "hbIDE", oIde:oDlg:oWidget:pPtr )
RETURN nil
/*----------------------------------------------------------------------*/
FUNCTION hbide_restSettings( oIde )
LOCAL cPath
hbqt_QMainWindow_restSettings( hb_dirBase() + "idesettings.ini", "hbIDE", oIde:oDlg:oWidget:pPtr )
hb_fNameSplit( oIde:cProjIni, @cPath )
hbqt_QMainWindow_restSettings( cPath + "hbide.set", "hbIDE", oIde:oDlg:oWidget:pPtr )
RETURN nil

View File

@@ -134,10 +134,10 @@ FUNCTION GetStyleSheet( cWidget )
CASE cWidget == "QMenuBar"
aadd( txt_, 'QMenuBar { ' )
aadd( txt_, ' background-color: qlineargradient(x1:0, y1:0, x2:0, y2:1, ' )
aadd( txt_, ' stop:0 lightgray, stop:1 darkgray); ' )
aadd( txt_, '} ' )
* aadd( txt_, 'QMenuBar { ' )
* aadd( txt_, ' background-color: qlineargradient(x1:0, y1:0, x2:0, y2:1, ' )
* aadd( txt_, ' stop:0 lightgray, stop:1 darkgray); ' )
* aadd( txt_, '} ' )
aadd( txt_, 'QMenuBar::item { ' )
aadd( txt_, ' spacing : 3px; /* spacing between menu bar items */ ' )
aadd( txt_, ' padding : 1px 4px; ' )
@@ -257,18 +257,18 @@ FUNCTION GetStyleSheet( cWidget )
aadd( txt_, ' border-top: 2px solid #C2C7CB; ' )
aadd( txt_, '} ' )
aadd( txt_, 'QTabWidget::tab-bar { ' )
aadd( txt_, ' background: qlineargradient(x1:0, y1:1, x2:0, y2:0, ' )
aadd( txt_, ' stop:0 lightgray, stop:1 darkgray); ' )
* aadd( txt_, ' background: qlineargradient(x1:0, y1:1, x2:0, y2:0, ' )
* aadd( txt_, ' stop:0 lightgray, stop:1 darkgray); ' )
aadd( txt_, ' left: 5px; /* move to the right by 5px */ ' )
aadd( txt_, '} ' )
aadd( txt_, 'QTabBar { ' )
aadd( txt_, ' background-color: qlineargradient(x1:0, y1:1, x2:0, y2:0, ' )
aadd( txt_, ' stop:0 lightgray, stop:1 darkgray); ' )
* aadd( txt_, ' background-color: qlineargradient(x1:0, y1:1, x2:0, y2:0, ' )
* aadd( txt_, ' stop:0 lightgray, stop:1 darkgray); ' )
aadd( txt_, '} ' )
aadd( txt_, 'QTabBar::tab { ' )
aadd( txt_, ' background: qlineargradient(x1: 0, y1: 0, x2: 0, y2: 1, ' )
aadd( txt_, ' stop: 0 #E1E1E1, stop: 0.4 #DDDDDD, ' )
aadd( txt_, ' stop: 0.5 #D8D8D8, stop: 1.0 #D3D3D3); ' )
* aadd( txt_, ' background: qlineargradient(x1: 0, y1: 0, x2: 0, y2: 1, ' )
* aadd( txt_, ' stop: 0 #E1E1E1, stop: 0.4 #DDDDDD, ' )
* aadd( txt_, ' stop: 0.5 #D8D8D8, stop: 1.0 #D3D3D3); ' )
aadd( txt_, ' border: 2px solid #94C4C3; ' )
aadd( txt_, ' border-bottom-color: #C2C7CB; /* same as the pane color */ ' )
aadd( txt_, ' border-top-left-radius: 6px; ' )
@@ -280,6 +280,7 @@ FUNCTION GetStyleSheet( cWidget )
aadd( txt_, ' background: qlineargradient(x1: 0, y1: 0, x2: 0, y2: 1, ' )
aadd( txt_, ' stop: 0 #fafafa, stop: 0.4 #f4f4f4, ' )
aadd( txt_, ' stop: 0.5 #e7e7e7, stop: 1.0 #fafafa); ' )
aadd( txt_, ' background: white; ' )
aadd( txt_, ' } ' )
aadd( txt_, ' QTabBar::tab:selected:hover { ' )
aadd( txt_, ' background: qlineargradient(x1: 0, y1: 0, x2: 0, y2: 1, ' )
@@ -310,10 +311,9 @@ FUNCTION GetStyleSheet( cWidget )
aadd( txt_, ' border: 1px solid darkgray; ' )
aadd( txt_, ' } ' )
aadd( txt_, 'QDockWidget::title { ' )
aadd( txt_, ' background-color: qlineargradient(x1:0, y1:1, x2:0, y2:0, ' )
aadd( txt_, ' stop:0 lightgray, stop:1 darkgray); ' )
aadd( txt_, ' background-color: lightgray; ' )
aadd( txt_, ' padding-left: 10px; ' )
aadd( txt_, ' padding-top: 3px; ' )
aadd( txt_, ' padding-top: 4px; ' )
aadd( txt_, ' } ' )
CASE cWidget == "PathIsWrong"

View File

@@ -450,14 +450,13 @@ METHOD IdeThemes:setSyntaxHilighting( qEdit, cTheme, lNew )
/*----------------------------------------------------------------------*/
METHOD IdeThemes:show()
#if 0
#if 1
LOCAL qAct
#endif
IF empty( ::oUI )
::lCreating := .t.
//::oUI := HbQtUI():new( hbide_uic( "themesex" ), ::oThemesDock:oWidget ):build()
::oUI := HbQtUI():new( hbide_uic( "themesex" ) ):build()
//::oThemesDock:qtObject := Self
@@ -478,7 +477,7 @@ METHOD IdeThemes:show()
::oUI:signal( "buttonClose" , "clicked()" , {|| ::oThemesDock:hide() } )
/* Fill Themes Dialog Values */
#if 0
#if 1
::oUI:setWindowTitle( GetKeyValue( ::aControls, "dialogTitle" ) )
//
::oUI:qObj[ "labelItems" ]:setText( GetKeyValue( ::aControls, "labelItems" , "Items" ) )
@@ -495,7 +494,7 @@ METHOD IdeThemes:show()
::oUI:qObj[ "buttonCopy" ]:setText( GetKeyValue( ::aControls, "buttonCopy" , "Copy" ) )
#endif
#if 0
#if 1
::qMenuApply := QMenu():new()
//
qAct := QAction():new( ::qMenuApply )

Binary file not shown.

After

Width:  |  Height:  |  Size: 197 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 826 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 811 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 210 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 176 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 173 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 232 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 176 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 643 B

After

Width:  |  Height:  |  Size: 731 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 1.7 KiB

After

Width:  |  Height:  |  Size: 2.1 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 282 B

After

Width:  |  Height:  |  Size: 983 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 34 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 306 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 288 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 275 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 314 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 301 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 281 B

View File

@@ -24,7 +24,7 @@
<string>General</string>
</attribute>
<layout class="QGridLayout" name="gridLayout">
<item row="1" column="0">
<item row="0" column="0">
<widget class="QLabel" name="label">
<property name="font">
<font>
@@ -40,7 +40,7 @@
</property>
</widget>
</item>
<item row="1" column="1">
<item row="0" column="1">
<widget class="QComboBox" name="comboPrjType">
<property name="toolTip">
<string>&lt;!DOCTYPE HTML PUBLIC &quot;-//W3C//DTD HTML 4.0//EN&quot; &quot;http://www.w3.org/TR/REC-html40/strict.dtd&quot;&gt;
@@ -54,7 +54,7 @@ p, li { white-space: pre-wrap; }
</property>
</widget>
</item>
<item row="2" column="0">
<item row="1" column="0">
<widget class="QLabel" name="label_2">
<property name="text">
<string>Project Title:</string>
@@ -64,7 +64,7 @@ p, li { white-space: pre-wrap; }
</property>
</widget>
</item>
<item row="2" column="1">
<item row="1" column="1">
<widget class="QLineEdit" name="editPrjTitle">
<property name="toolTip">
<string>&lt;!DOCTYPE HTML PUBLIC &quot;-//W3C//DTD HTML 4.0//EN&quot; &quot;http://www.w3.org/TR/REC-html40/strict.dtd&quot;&gt;
@@ -75,7 +75,7 @@ p, li { white-space: pre-wrap; }
</property>
</widget>
</item>
<item row="3" column="0">
<item row="2" column="0">
<widget class="QLabel" name="label_3">
<property name="text">
<string>Project Location:</string>
@@ -85,7 +85,7 @@ p, li { white-space: pre-wrap; }
</property>
</widget>
</item>
<item row="3" column="1">
<item row="2" column="1">
<widget class="QLineEdit" name="editPrjLoctn">
<property name="toolTip">
<string>&lt;!DOCTYPE HTML PUBLIC &quot;-//W3C//DTD HTML 4.0//EN&quot; &quot;http://www.w3.org/TR/REC-html40/strict.dtd&quot;&gt;
@@ -96,7 +96,7 @@ p, li { white-space: pre-wrap; }
</property>
</widget>
</item>
<item row="6" column="0">
<item row="5" column="0">
<widget class="QLabel" name="label_5">
<property name="text">
<string>Destination Folder:</string>
@@ -106,7 +106,7 @@ p, li { white-space: pre-wrap; }
</property>
</widget>
</item>
<item row="6" column="1">
<item row="5" column="1">
<widget class="QLineEdit" name="editDstFolder">
<property name="toolTip">
<string>&lt;!DOCTYPE HTML PUBLIC &quot;-//W3C//DTD HTML 4.0//EN&quot; &quot;http://www.w3.org/TR/REC-html40/strict.dtd&quot;&gt;
@@ -118,7 +118,7 @@ p, li { white-space: pre-wrap; }
</property>
</widget>
</item>
<item row="10" column="0">
<item row="9" column="0">
<widget class="QLabel" name="label_7">
<property name="text">
<string>Launch Parameters:</string>
@@ -128,10 +128,10 @@ p, li { white-space: pre-wrap; }
</property>
</widget>
</item>
<item row="10" column="1" colspan="2">
<item row="9" column="1" colspan="2">
<widget class="QLineEdit" name="editLaunchParams"/>
</item>
<item row="11" column="0">
<item row="10" column="0">
<widget class="QLabel" name="label_8">
<property name="text">
<string>Launch Program:</string>
@@ -141,10 +141,10 @@ p, li { white-space: pre-wrap; }
</property>
</widget>
</item>
<item row="11" column="1" colspan="2">
<item row="10" column="1" colspan="2">
<widget class="QLineEdit" name="editLaunchExe"/>
</item>
<item row="8" column="0">
<item row="7" column="0">
<widget class="QLabel" name="label_13">
<property name="text">
<string>Backup Location:</string>
@@ -154,10 +154,10 @@ p, li { white-space: pre-wrap; }
</property>
</widget>
</item>
<item row="8" column="1">
<item row="7" column="1">
<widget class="QLineEdit" name="editBackup"/>
</item>
<item row="4" column="1">
<item row="3" column="1">
<widget class="QLineEdit" name="editOutName">
<property name="toolTip">
<string>&lt;!DOCTYPE HTML PUBLIC &quot;-//W3C//DTD HTML 4.0//EN&quot; &quot;http://www.w3.org/TR/REC-html40/strict.dtd&quot;&gt;
@@ -168,7 +168,7 @@ p, li { white-space: pre-wrap; }
</property>
</widget>
</item>
<item row="4" column="0">
<item row="3" column="0">
<widget class="QLabel" name="label_6">
<property name="text">
<string>Output Name:</string>
@@ -178,63 +178,28 @@ p, li { white-space: pre-wrap; }
</property>
</widget>
</item>
<item row="3" column="2">
<item row="2" column="2">
<widget class="QToolButton" name="buttonChoosePrjLoc">
<property name="text">
<string>...</string>
</property>
</widget>
</item>
<item row="8" column="2">
<item row="7" column="2">
<widget class="QToolButton" name="buttonBackup">
<property name="text">
<string>...</string>
</property>
</widget>
</item>
<item row="6" column="2">
<item row="5" column="2">
<widget class="QToolButton" name="buttonChooseDest">
<property name="text">
<string>...</string>
</property>
</widget>
</item>
<item row="0" column="1">
<layout class="QHBoxLayout" name="horizontalLayout_7">
<item>
<widget class="QToolButton" name="buttonXmate">
<property name="toolTip">
<string>&lt;!DOCTYPE HTML PUBLIC &quot;-//W3C//DTD HTML 4.0//EN&quot; &quot;http://www.w3.org/TR/REC-html40/strict.dtd&quot;&gt;
&lt;html&gt;&lt;head&gt;&lt;meta name=&quot;qrichtext&quot; content=&quot;1&quot; /&gt;&lt;style type=&quot;text/css&quot;&gt;
p, li { white-space: pre-wrap; }
&lt;/style&gt;&lt;/head&gt;&lt;body style=&quot; font-family:'MS Shell Dlg 2'; font-size:8.25pt; font-weight:400; font-style:normal;&quot;&gt;
&lt;p align=&quot;center&quot; style=&quot; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;&quot;&gt;Load an xMate project file.&lt;/p&gt;
&lt;p align=&quot;center&quot; style=&quot; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;&quot;&gt;This feature is available only for new projects.&lt;/p&gt;
&lt;p align=&quot;center&quot; style=&quot; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;&quot;&gt;hbIDE attempts to recognize various components&lt;/p&gt;
&lt;p align=&quot;center&quot; style=&quot; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;&quot;&gt;but it is possible that it may not load everything.&lt;/p&gt;
&lt;p align=&quot;center&quot; style=&quot; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;&quot;&gt;So you may need manual editing.&lt;/p&gt;&lt;/body&gt;&lt;/html&gt;</string>
</property>
<property name="text">
<string>...</string>
</property>
</widget>
</item>
<item>
<spacer name="horizontalSpacer">
<property name="orientation">
<enum>Qt::Horizontal</enum>
</property>
<property name="sizeHint" stdset="0">
<size>
<width>40</width>
<height>20</height>
</size>
</property>
</spacer>
</item>
</layout>
</item>
<item row="9" column="1">
<item row="8" column="1">
<spacer name="verticalSpacer">
<property name="orientation">
<enum>Qt::Vertical</enum>
@@ -247,7 +212,7 @@ p, li { white-space: pre-wrap; }
</property>
</spacer>
</item>
<item row="12" column="1">
<item row="11" column="1">
<widget class="QLineEdit" name="editWrkFolder">
<property name="toolTip">
<string>&lt;!DOCTYPE HTML PUBLIC &quot;-//W3C//DTD HTML 4.0//EN&quot; &quot;http://www.w3.org/TR/REC-html40/strict.dtd&quot;&gt;
@@ -258,7 +223,7 @@ p, li { white-space: pre-wrap; }
</property>
</widget>
</item>
<item row="12" column="0">
<item row="11" column="0">
<widget class="QLabel" name="labelInitFolder">
<property name="text">
<string>Start In:</string>
@@ -268,14 +233,14 @@ p, li { white-space: pre-wrap; }
</property>
</widget>
</item>
<item row="12" column="2">
<item row="11" column="2">
<widget class="QToolButton" name="buttonChooseWd">
<property name="text">
<string>...</string>
</property>
</widget>
</item>
<item row="5" column="1">
<item row="4" column="1">
<spacer name="verticalSpacer_2">
<property name="orientation">
<enum>Qt::Vertical</enum>
@@ -288,7 +253,7 @@ p, li { white-space: pre-wrap; }
</property>
</spacer>
</item>
<item row="13" column="1">
<item row="12" column="1">
<spacer name="verticalSpacer_3">
<property name="orientation">
<enum>Qt::Vertical</enum>

View File

@@ -1,8 +1,8 @@
/********************************************************************************
** Form generated from reading ui file 'projectpropertiesex.ui'
**
** Created: Mon Mar 1 01:10:15 2010
** by: Qt User Interface Compiler version 4.5.2
** Created: Sat Mar 6 14:12:50 2010
** by: Qt User Interface Compiler version 4.5.3
**
** WARNING! All changes made in this file will be lost when recompiling ui file!
********************************************************************************/
@@ -56,9 +56,6 @@ public:
QToolButton *buttonChoosePrjLoc;
QToolButton *buttonBackup;
QToolButton *buttonChooseDest;
QHBoxLayout *horizontalLayout_7;
QToolButton *buttonXmate;
QSpacerItem *horizontalSpacer;
QSpacerItem *verticalSpacer;
QLineEdit *editWrkFolder;
QLabel *labelInitFolder;
@@ -104,147 +101,133 @@ public:
label->setFont(font);
label->setAlignment(Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter);
gridLayout->addWidget(label, 1, 0, 1, 1);
gridLayout->addWidget(label, 0, 0, 1, 1);
comboPrjType = new QComboBox(tabGeneral);
comboPrjType->setObjectName(QString::fromUtf8("comboPrjType"));
comboPrjType->setEditable(false);
gridLayout->addWidget(comboPrjType, 1, 1, 1, 1);
gridLayout->addWidget(comboPrjType, 0, 1, 1, 1);
label_2 = new QLabel(tabGeneral);
label_2->setObjectName(QString::fromUtf8("label_2"));
label_2->setAlignment(Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter);
gridLayout->addWidget(label_2, 2, 0, 1, 1);
gridLayout->addWidget(label_2, 1, 0, 1, 1);
editPrjTitle = new QLineEdit(tabGeneral);
editPrjTitle->setObjectName(QString::fromUtf8("editPrjTitle"));
gridLayout->addWidget(editPrjTitle, 2, 1, 1, 1);
gridLayout->addWidget(editPrjTitle, 1, 1, 1, 1);
label_3 = new QLabel(tabGeneral);
label_3->setObjectName(QString::fromUtf8("label_3"));
label_3->setAlignment(Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter);
gridLayout->addWidget(label_3, 3, 0, 1, 1);
gridLayout->addWidget(label_3, 2, 0, 1, 1);
editPrjLoctn = new QLineEdit(tabGeneral);
editPrjLoctn->setObjectName(QString::fromUtf8("editPrjLoctn"));
gridLayout->addWidget(editPrjLoctn, 3, 1, 1, 1);
gridLayout->addWidget(editPrjLoctn, 2, 1, 1, 1);
label_5 = new QLabel(tabGeneral);
label_5->setObjectName(QString::fromUtf8("label_5"));
label_5->setAlignment(Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter);
gridLayout->addWidget(label_5, 6, 0, 1, 1);
gridLayout->addWidget(label_5, 5, 0, 1, 1);
editDstFolder = new QLineEdit(tabGeneral);
editDstFolder->setObjectName(QString::fromUtf8("editDstFolder"));
gridLayout->addWidget(editDstFolder, 6, 1, 1, 1);
gridLayout->addWidget(editDstFolder, 5, 1, 1, 1);
label_7 = new QLabel(tabGeneral);
label_7->setObjectName(QString::fromUtf8("label_7"));
label_7->setAlignment(Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter);
gridLayout->addWidget(label_7, 10, 0, 1, 1);
gridLayout->addWidget(label_7, 9, 0, 1, 1);
editLaunchParams = new QLineEdit(tabGeneral);
editLaunchParams->setObjectName(QString::fromUtf8("editLaunchParams"));
gridLayout->addWidget(editLaunchParams, 10, 1, 1, 2);
gridLayout->addWidget(editLaunchParams, 9, 1, 1, 2);
label_8 = new QLabel(tabGeneral);
label_8->setObjectName(QString::fromUtf8("label_8"));
label_8->setAlignment(Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter);
gridLayout->addWidget(label_8, 11, 0, 1, 1);
gridLayout->addWidget(label_8, 10, 0, 1, 1);
editLaunchExe = new QLineEdit(tabGeneral);
editLaunchExe->setObjectName(QString::fromUtf8("editLaunchExe"));
gridLayout->addWidget(editLaunchExe, 11, 1, 1, 2);
gridLayout->addWidget(editLaunchExe, 10, 1, 1, 2);
label_13 = new QLabel(tabGeneral);
label_13->setObjectName(QString::fromUtf8("label_13"));
label_13->setAlignment(Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter);
gridLayout->addWidget(label_13, 8, 0, 1, 1);
gridLayout->addWidget(label_13, 7, 0, 1, 1);
editBackup = new QLineEdit(tabGeneral);
editBackup->setObjectName(QString::fromUtf8("editBackup"));
gridLayout->addWidget(editBackup, 8, 1, 1, 1);
gridLayout->addWidget(editBackup, 7, 1, 1, 1);
editOutName = new QLineEdit(tabGeneral);
editOutName->setObjectName(QString::fromUtf8("editOutName"));
gridLayout->addWidget(editOutName, 4, 1, 1, 1);
gridLayout->addWidget(editOutName, 3, 1, 1, 1);
label_6 = new QLabel(tabGeneral);
label_6->setObjectName(QString::fromUtf8("label_6"));
label_6->setAlignment(Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter);
gridLayout->addWidget(label_6, 4, 0, 1, 1);
gridLayout->addWidget(label_6, 3, 0, 1, 1);
buttonChoosePrjLoc = new QToolButton(tabGeneral);
buttonChoosePrjLoc->setObjectName(QString::fromUtf8("buttonChoosePrjLoc"));
gridLayout->addWidget(buttonChoosePrjLoc, 3, 2, 1, 1);
gridLayout->addWidget(buttonChoosePrjLoc, 2, 2, 1, 1);
buttonBackup = new QToolButton(tabGeneral);
buttonBackup->setObjectName(QString::fromUtf8("buttonBackup"));
gridLayout->addWidget(buttonBackup, 8, 2, 1, 1);
gridLayout->addWidget(buttonBackup, 7, 2, 1, 1);
buttonChooseDest = new QToolButton(tabGeneral);
buttonChooseDest->setObjectName(QString::fromUtf8("buttonChooseDest"));
gridLayout->addWidget(buttonChooseDest, 6, 2, 1, 1);
horizontalLayout_7 = new QHBoxLayout();
horizontalLayout_7->setObjectName(QString::fromUtf8("horizontalLayout_7"));
buttonXmate = new QToolButton(tabGeneral);
buttonXmate->setObjectName(QString::fromUtf8("buttonXmate"));
horizontalLayout_7->addWidget(buttonXmate);
horizontalSpacer = new QSpacerItem(40, 20, QSizePolicy::Expanding, QSizePolicy::Minimum);
horizontalLayout_7->addItem(horizontalSpacer);
gridLayout->addLayout(horizontalLayout_7, 0, 1, 1, 1);
gridLayout->addWidget(buttonChooseDest, 5, 2, 1, 1);
verticalSpacer = new QSpacerItem(20, 40, QSizePolicy::Minimum, QSizePolicy::Expanding);
gridLayout->addItem(verticalSpacer, 9, 1, 1, 1);
gridLayout->addItem(verticalSpacer, 8, 1, 1, 1);
editWrkFolder = new QLineEdit(tabGeneral);
editWrkFolder->setObjectName(QString::fromUtf8("editWrkFolder"));
gridLayout->addWidget(editWrkFolder, 12, 1, 1, 1);
gridLayout->addWidget(editWrkFolder, 11, 1, 1, 1);
labelInitFolder = new QLabel(tabGeneral);
labelInitFolder->setObjectName(QString::fromUtf8("labelInitFolder"));
labelInitFolder->setAlignment(Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter);
gridLayout->addWidget(labelInitFolder, 12, 0, 1, 1);
gridLayout->addWidget(labelInitFolder, 11, 0, 1, 1);
buttonChooseWd = new QToolButton(tabGeneral);
buttonChooseWd->setObjectName(QString::fromUtf8("buttonChooseWd"));
gridLayout->addWidget(buttonChooseWd, 12, 2, 1, 1);
gridLayout->addWidget(buttonChooseWd, 11, 2, 1, 1);
verticalSpacer_2 = new QSpacerItem(20, 40, QSizePolicy::Minimum, QSizePolicy::Expanding);
gridLayout->addItem(verticalSpacer_2, 5, 1, 1, 1);
gridLayout->addItem(verticalSpacer_2, 4, 1, 1, 1);
verticalSpacer_3 = new QSpacerItem(20, 40, QSizePolicy::Minimum, QSizePolicy::Expanding);
gridLayout->addItem(verticalSpacer_3, 13, 1, 1, 1);
gridLayout->addItem(verticalSpacer_3, 12, 1, 1, 1);
tabWidget->addTab(tabGeneral, QString());
tabFiles = new QWidget();
@@ -386,19 +369,6 @@ public:
buttonChoosePrjLoc->setText(QApplication::translate("FormProjectPropEx", "...", 0, QApplication::UnicodeUTF8));
buttonBackup->setText(QApplication::translate("FormProjectPropEx", "...", 0, QApplication::UnicodeUTF8));
buttonChooseDest->setText(QApplication::translate("FormProjectPropEx", "...", 0, QApplication::UnicodeUTF8));
#ifndef QT_NO_TOOLTIP
buttonXmate->setToolTip(QApplication::translate("FormProjectPropEx", "<!DOCTYPE HTML PUBLIC \"-//W3C//DTD HTML 4.0//EN\" \"http://www.w3.org/TR/REC-html40/strict.dtd\">\n"
"<html><head><meta name=\"qrichtext\" content=\"1\" /><style type=\"text/css\">\n"
"p, li { white-space: pre-wrap; }\n"
"</style></head><body style=\" font-family:'MS Shell Dlg 2'; font-size:8.25pt; font-weight:400; font-style:normal;\">\n"
"<p align=\"center\" style=\" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;\">Load an xMate project file.</p>\n"
"<p align=\"center\" style=\" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;\">This feature is available only for new projects.</p>\n"
"<p align=\"center\" style=\" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;\">hbIDE attempts to recognize various components</p>\n"
"<p align=\"center\" style=\" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; "
"text-indent:0px;\">but it is possible that it may not load everything.</p>\n"
"<p align=\"center\" style=\" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;\">So you may need manual editing.</p></body></html>", 0, QApplication::UnicodeUTF8));
#endif // QT_NO_TOOLTIP
buttonXmate->setText(QApplication::translate("FormProjectPropEx", "...", 0, QApplication::UnicodeUTF8));
#ifndef QT_NO_TOOLTIP
editWrkFolder->setToolTip(QApplication::translate("FormProjectPropEx", "<!DOCTYPE HTML PUBLIC \"-//W3C//DTD HTML 4.0//EN\" \"http://www.w3.org/TR/REC-html40/strict.dtd\">\n"
"<html><head><meta name=\"qrichtext\" content=\"1\" /><style type=\"text/css\">\n"

Binary file not shown.

After

Width:  |  Height:  |  Size: 910 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 964 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 901 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 935 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 886 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 718 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 896 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 616 B

View File

@@ -442,7 +442,7 @@ METHOD XbpWindow:connectWindowEvents()
//
::connectEvent( ::pWidget, QEvent_Move , {|e| ::grabEvent( QEvent_Move , e ) } )
* ::connectEvent( ::pWidget, QEvent_Paint , {|e| ::grabEvent( QEvent_Paint , e ) } )
::connectEvent( ::pWidget, QEvent_Resize , {|e| ::grabEvent( QEvent_Resize , e ) } )
* ::connectEvent( ::pWidget, QEvent_Resize , {|e| ::grabEvent( QEvent_Resize , e ) } )
//
::connectEvent( ::pWidget, QEvent_FocusIn , {|e| ::grabEvent( QEvent_FocusIn , e ) } )
::connectEvent( ::pWidget, QEvent_FocusOut , {|e| ::grabEvent( QEvent_FocusOut , e ) } )
@@ -478,7 +478,11 @@ METHOD XbpWindow:destroy()
HBXBP_DBG( ". " )
HBXBP_DBG( ". " )
HBXBP_DBG( ". " )
HBXBP_DBG( hb_threadId(),"Destroy[ B ] "+pad(__ObjGetClsName( self ),12)+ IF(empty(::cargo),'',str(::cargo) ), memory( 1001 ), hbqt_getMemUsed() )
HBXBP_DBG( hb_threadId(),"Destroy[ B ] "+pad(cCls,12)+ IF(empty(::cargo),'',str(::cargo) ), memory( 1001 ), hbqt_getMemUsed() )
LOCAL cCls := __ObjGetClsName( self ), cMsg
cMsg := iif( cCls == "XBPWINDOW", ::oWidget:objectName(), IF( empty(::cargo),'',str(::cargo) ) )
HBXBP_DBG( hb_threadId(),"Destroy[ B ] "+pad(cCls,12)+ cMsg, memory( 1001 ), hbqt_getMemUsed() )
#endif
::oParent := NIL
::oOwner := NIL
@@ -503,7 +507,7 @@ HBXBP_DBG( hb_threadId(),"Destroy[ B ] "+pad(__ObjGetClsName( self ),12)+ IF(emp
IF !empty( ::qtObject )
::qtObject:destroy()
::qtObject := NIL
// ::qtObject := NIL
ENDIF
IF !empty( ::qLayout )
@@ -511,8 +515,9 @@ HBXBP_DBG( hb_threadId(),"Destroy[ B ] "+pad(__ObjGetClsName( self ),12)+ IF(emp
ENDIF
::oWidget := NIL
#if 0
HBXBP_DBG( hb_threadId(),"Destroy[ E ] "+pad(__ObjGetClsName( self ),12)+ IF(empty(::cargo),'',str(::cargo) ), memory( 1001 ), hbqt_getMemUsed() )
HBXBP_DBG( ". " )
HBXBP_DBG( ". " )
HBXBP_DBG( ". " )