diff --git a/harbour/ChangeLog b/harbour/ChangeLog index ad9ef123a2..19ba1dba31 100644 --- a/harbour/ChangeLog +++ b/harbour/ChangeLog @@ -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. + + : It holds the exiting "Projects" information: + Title Type Sources Last_Modified Location + + The field 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 diff --git a/harbour/contrib/hbide/hbide.hbp b/harbour/contrib/hbide/hbide.hbp index 6dea5bd5c0..8d7d783864 100644 --- a/harbour/contrib/hbide/hbide.hbp +++ b/harbour/contrib/hbide/hbide.hbp @@ -24,6 +24,7 @@ ideprojmanager.prg idesources.prg ideharbourhelp.prg ideenviron.prg +idehome.prg ideparseexpr.c diff --git a/harbour/contrib/hbide/hbide.prg b/harbour/contrib/hbide/hbide.prg index 1d5cef350c..bdcea1587a 100644 --- a/harbour/contrib/hbide/hbide.prg +++ b/harbour/contrib/hbide/hbide.prg @@ -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 diff --git a/harbour/contrib/hbide/ideactions.prg b/harbour/contrib/hbide/ideactions.prg index 46f8a69134..1bd20a6bc9 100644 --- a/harbour/contrib/hbide/ideactions.prg +++ b/harbour/contrib/hbide/ideactions.prg @@ -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 } ) diff --git a/harbour/contrib/hbide/idedocks.prg b/harbour/contrib/hbide/idedocks.prg index 53e2add3a8..546830f87c 100644 --- a/harbour/contrib/hbide/idedocks.prg +++ b/harbour/contrib/hbide/idedocks.prg @@ -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 - -/*----------------------------------------------------------------------*/ - diff --git a/harbour/contrib/hbide/ideeditor.prg b/harbour/contrib/hbide/ideeditor.prg index af6540b945..df7fc9e70b 100644 --- a/harbour/contrib/hbide/ideeditor.prg +++ b/harbour/contrib/hbide/ideeditor.prg @@ -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. ) diff --git a/harbour/contrib/hbide/idehome.prg b/harbour/contrib/hbide/idehome.prg new file mode 100644 index 0000000000..64adfb5e20 --- /dev/null +++ b/harbour/contrib/hbide/idehome.prg @@ -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>' + ' ' + ' ' + ' ' ) + aadd( aHtm, ' <FONT face="Times New Roman" color="#FF4719" size="7"><B><U>Projects</U></B></FONT>' ) + aadd( aHtm, '  ' + ' ' + ' ' ) + 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' ) + ' ' ) + 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>' + ' ' + ' ' + ' ' ) + 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' ) + ' ' ) + 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_ } + +/*----------------------------------------------------------------------*/ + diff --git a/harbour/contrib/hbide/idemisc.prg b/harbour/contrib/hbide/idemisc.prg index f60ff3e3d3..69c1d8b19e 100644 --- a/harbour/contrib/hbide/idemisc.prg +++ b/harbour/contrib/hbide/idemisc.prg @@ -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 ) + +/*----------------------------------------------------------------------*/ diff --git a/harbour/contrib/hbide/ideobject.prg b/harbour/contrib/hbide/ideobject.prg index a1970dbc9d..8b09491232 100644 --- a/harbour/contrib/hbide/ideobject.prg +++ b/harbour/contrib/hbide/ideobject.prg @@ -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 diff --git a/harbour/contrib/hbide/ideprojmanager.prg b/harbour/contrib/hbide/ideprojmanager.prg index ba4830171a..923aba61ba 100644 --- a/harbour/contrib/hbide/ideprojmanager.prg +++ b/harbour/contrib/hbide/ideprojmanager.prg @@ -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 diff --git a/harbour/contrib/hbide/idesaveload.prg b/harbour/contrib/hbide/idesaveload.prg index 16cf6771d5..70fdfe4106 100644 --- a/harbour/contrib/hbide/idesaveload.prg +++ b/harbour/contrib/hbide/idesaveload.prg @@ -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 diff --git a/harbour/contrib/hbide/idestylesheets.prg b/harbour/contrib/hbide/idestylesheets.prg index cc859e1ebf..391ca6f13d 100644 --- a/harbour/contrib/hbide/idestylesheets.prg +++ b/harbour/contrib/hbide/idestylesheets.prg @@ -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" diff --git a/harbour/contrib/hbide/idethemes.prg b/harbour/contrib/hbide/idethemes.prg index 42619ae1d7..43061272dd 100644 --- a/harbour/contrib/hbide/idethemes.prg +++ b/harbour/contrib/hbide/idethemes.prg @@ -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 ) diff --git a/harbour/contrib/hbide/resources/fl_c.png b/harbour/contrib/hbide/resources/fl_c.png new file mode 100644 index 0000000000..3b4d110a82 Binary files /dev/null and b/harbour/contrib/hbide/resources/fl_c.png differ diff --git a/harbour/contrib/hbide/resources/fl_dll.png b/harbour/contrib/hbide/resources/fl_dll.png new file mode 100644 index 0000000000..4a922d9433 Binary files /dev/null and b/harbour/contrib/hbide/resources/fl_dll.png differ diff --git a/harbour/contrib/hbide/resources/fl_exe.png b/harbour/contrib/hbide/resources/fl_exe.png new file mode 100644 index 0000000000..7944651026 Binary files /dev/null and b/harbour/contrib/hbide/resources/fl_exe.png differ diff --git a/harbour/contrib/hbide/resources/fl_ini.png b/harbour/contrib/hbide/resources/fl_ini.png new file mode 100644 index 0000000000..8217d6e01f Binary files /dev/null and b/harbour/contrib/hbide/resources/fl_ini.png differ diff --git a/harbour/contrib/hbide/resources/fl_lib.png b/harbour/contrib/hbide/resources/fl_lib.png new file mode 100644 index 0000000000..a0bb1133b0 Binary files /dev/null and b/harbour/contrib/hbide/resources/fl_lib.png differ diff --git a/harbour/contrib/hbide/resources/fl_prg.png b/harbour/contrib/hbide/resources/fl_prg.png new file mode 100644 index 0000000000..8c962a56ce Binary files /dev/null and b/harbour/contrib/hbide/resources/fl_prg.png differ diff --git a/harbour/contrib/hbide/resources/fl_res.png b/harbour/contrib/hbide/resources/fl_res.png new file mode 100644 index 0000000000..a2c6d26f53 Binary files /dev/null and b/harbour/contrib/hbide/resources/fl_res.png differ diff --git a/harbour/contrib/hbide/resources/fl_txt.png b/harbour/contrib/hbide/resources/fl_txt.png new file mode 100644 index 0000000000..5bf90c37b4 Binary files /dev/null and b/harbour/contrib/hbide/resources/fl_txt.png differ diff --git a/harbour/contrib/hbide/resources/hb-16x16.png b/harbour/contrib/hbide/resources/hb-16x16.png index 43e1eab836..9e7c766a6c 100644 Binary files a/harbour/contrib/hbide/resources/hb-16x16.png and b/harbour/contrib/hbide/resources/hb-16x16.png differ diff --git a/harbour/contrib/hbide/resources/hb-32x32.png b/harbour/contrib/hbide/resources/hb-32x32.png index abc67aa6fd..35d949becc 100644 Binary files a/harbour/contrib/hbide/resources/hb-32x32.png and b/harbour/contrib/hbide/resources/hb-32x32.png differ diff --git a/harbour/contrib/hbide/resources/hbide.png b/harbour/contrib/hbide/resources/hbide.png index 5f3b62cc0e..44a8906c6a 100644 Binary files a/harbour/contrib/hbide/resources/hbide.png and b/harbour/contrib/hbide/resources/hbide.png differ diff --git a/harbour/contrib/hbide/resources/hbidesplashwatermark.png b/harbour/contrib/hbide/resources/hbidesplashwatermark.png new file mode 100644 index 0000000000..1e831057fe Binary files /dev/null and b/harbour/contrib/hbide/resources/hbidesplashwatermark.png differ diff --git a/harbour/contrib/hbide/resources/panel_2.png b/harbour/contrib/hbide/resources/panel_2.png new file mode 100644 index 0000000000..e9a6b2145d Binary files /dev/null and b/harbour/contrib/hbide/resources/panel_2.png differ diff --git a/harbour/contrib/hbide/resources/panel_3.png b/harbour/contrib/hbide/resources/panel_3.png new file mode 100644 index 0000000000..bd94f37df6 Binary files /dev/null and b/harbour/contrib/hbide/resources/panel_3.png differ diff --git a/harbour/contrib/hbide/resources/panel_4.png b/harbour/contrib/hbide/resources/panel_4.png new file mode 100644 index 0000000000..e28662f76e Binary files /dev/null and b/harbour/contrib/hbide/resources/panel_4.png differ diff --git a/harbour/contrib/hbide/resources/panel_5.png b/harbour/contrib/hbide/resources/panel_5.png new file mode 100644 index 0000000000..cb5a57968d Binary files /dev/null and b/harbour/contrib/hbide/resources/panel_5.png differ diff --git a/harbour/contrib/hbide/resources/panel_6.png b/harbour/contrib/hbide/resources/panel_6.png new file mode 100644 index 0000000000..067e81b371 Binary files /dev/null and b/harbour/contrib/hbide/resources/panel_6.png differ diff --git a/harbour/contrib/hbide/resources/panel_7.png b/harbour/contrib/hbide/resources/panel_7.png new file mode 100644 index 0000000000..a6f0ec4afb Binary files /dev/null and b/harbour/contrib/hbide/resources/panel_7.png differ diff --git a/harbour/contrib/hbide/resources/projectpropertiesex.ui b/harbour/contrib/hbide/resources/projectpropertiesex.ui index 4e2efbd5c2..c62e5e7ba2 100644 --- a/harbour/contrib/hbide/resources/projectpropertiesex.ui +++ b/harbour/contrib/hbide/resources/projectpropertiesex.ui @@ -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><!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0//EN" "http://www.w3.org/TR/REC-html40/strict.dtd"> @@ -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><!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0//EN" "http://www.w3.org/TR/REC-html40/strict.dtd"> @@ -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><!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0//EN" "http://www.w3.org/TR/REC-html40/strict.dtd"> @@ -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><!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0//EN" "http://www.w3.org/TR/REC-html40/strict.dtd"> @@ -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><!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0//EN" "http://www.w3.org/TR/REC-html40/strict.dtd"> @@ -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><!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0//EN" "http://www.w3.org/TR/REC-html40/strict.dtd"> -<html><head><meta name="qrichtext" content="1" /><style type="text/css"> -p, li { white-space: pre-wrap; } -</style></head><body style=" font-family:'MS Shell Dlg 2'; font-size:8.25pt; font-weight:400; font-style:normal;"> -<p align="center" style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;">Load an xMate project file.</p> -<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> -<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> -<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> -<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></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><!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0//EN" "http://www.w3.org/TR/REC-html40/strict.dtd"> @@ -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> diff --git a/harbour/contrib/hbide/resources/projectpropertiesex.uic b/harbour/contrib/hbide/resources/projectpropertiesex.uic index 2c53fcf44f..e11463deb2 100644 --- a/harbour/contrib/hbide/resources/projectpropertiesex.uic +++ b/harbour/contrib/hbide/resources/projectpropertiesex.uic @@ -1,8 +1,8 @@ /******************************************************************************** ** Form generated from reading ui file 'projectpropertiesex.ui' ** -** Created: 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" diff --git a/harbour/contrib/hbide/resources/source_c.png b/harbour/contrib/hbide/resources/source_c.png new file mode 100644 index 0000000000..b83658b65d Binary files /dev/null and b/harbour/contrib/hbide/resources/source_c.png differ diff --git a/harbour/contrib/hbide/resources/source_cpp.png b/harbour/contrib/hbide/resources/source_cpp.png new file mode 100644 index 0000000000..02ec4abc7d Binary files /dev/null and b/harbour/contrib/hbide/resources/source_cpp.png differ diff --git a/harbour/contrib/hbide/resources/source_h.png b/harbour/contrib/hbide/resources/source_h.png new file mode 100644 index 0000000000..ff4784375d Binary files /dev/null and b/harbour/contrib/hbide/resources/source_h.png differ diff --git a/harbour/contrib/hbide/resources/source_o.png b/harbour/contrib/hbide/resources/source_o.png new file mode 100644 index 0000000000..beb3c507ba Binary files /dev/null and b/harbour/contrib/hbide/resources/source_o.png differ diff --git a/harbour/contrib/hbide/resources/source_prg.png b/harbour/contrib/hbide/resources/source_prg.png new file mode 100644 index 0000000000..30a49fb459 Binary files /dev/null and b/harbour/contrib/hbide/resources/source_prg.png differ diff --git a/harbour/contrib/hbide/resources/source_res.png b/harbour/contrib/hbide/resources/source_res.png new file mode 100644 index 0000000000..6b2bbb8a6e Binary files /dev/null and b/harbour/contrib/hbide/resources/source_res.png differ diff --git a/harbour/contrib/hbide/resources/source_txt.png b/harbour/contrib/hbide/resources/source_txt.png new file mode 100644 index 0000000000..aca9b032ae Binary files /dev/null and b/harbour/contrib/hbide/resources/source_txt.png differ diff --git a/harbour/contrib/hbide/resources/source_unknown.png b/harbour/contrib/hbide/resources/source_unknown.png new file mode 100644 index 0000000000..1dc275250b Binary files /dev/null and b/harbour/contrib/hbide/resources/source_unknown.png differ diff --git a/harbour/contrib/hbxbp/xbpwindow.prg b/harbour/contrib/hbxbp/xbpwindow.prg index 8f9d1132d2..e2a5b6a795 100644 --- a/harbour/contrib/hbxbp/xbpwindow.prg +++ b/harbour/contrib/hbxbp/xbpwindow.prg @@ -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( ". " )