diff --git a/harbour/ChangeLog b/harbour/ChangeLog index 5a9a9c447a..86b8c196fe 100644 --- a/harbour/ChangeLog +++ b/harbour/ChangeLog @@ -16,6 +16,18 @@ The license applies to all entries newer than 2009-04-28. */ +2010-07-05 15:05 UTC-0800 Pritpal Bedi (bedipritpal@hotmail.com) + * contrib/hbide/hbide.prg + * contrib/hbide/idebrowse.prg + * contrib/hbide/idedocks.prg + * contrib/hbide/ideplugins.prg + + Implemented: drag and drop support at two points: + 1. When a valid text file supported by hbIDE + is dragged and dropped on editor widget. + 2. When a .dbf file is dropped on ideDBU widget. + + Please feel free to extend your comments. + 2010-07-05 13:41 UTC-0800 Pritpal Bedi (bedipritpal@hotmail.com) * contrib/hbqt/doc/en/class_qmimedata.txt * contrib/hbqt/qtcore/QMimeData.cpp diff --git a/harbour/contrib/hbide/hbide.prg b/harbour/contrib/hbide/hbide.prg index d036b8ef7f..8925e8e6bc 100644 --- a/harbour/contrib/hbide/hbide.prg +++ b/harbour/contrib/hbide/hbide.prg @@ -553,13 +553,13 @@ METHOD HbIde:create( aParams ) ::nEvent := AppEvent( @::mp1, @::mp2, @::oXbp ) IF ::nEvent == xbeP_Quit - HB_TRACE( HB_TR_ALWAYS, "---------------- xbeP_Quit" ) +// HB_TRACE( HB_TR_ALWAYS, "---------------- xbeP_Quit" ) ::oINI:save() EXIT ENDIF IF ::nEvent == xbeP_Close - HB_TRACE( HB_TR_ALWAYS, "================ xbeP_Close" ) +// HB_TRACE( HB_TR_ALWAYS, "================ xbeP_Close" ) ::oINI:save() ::oSM:closeAllSources() EXIT @@ -579,12 +579,13 @@ METHOD HbIde:create( aParams ) ::oXbp:handleEvent( ::nEvent, ::mp1, ::mp2 ) ENDDO +#if 0 + /* Very important - destroy resources */ HB_TRACE( HB_TR_ALWAYS, "======================================================" ) HB_TRACE( HB_TR_ALWAYS, "Before ::oDlg:destroy()", memory( 1001 ) ) HB_TRACE( HB_TR_ALWAYS, " " ) -#if 0 ::oSetup:destroy() ::oUpdn:destroy() ::oTM:destroy() @@ -607,10 +608,11 @@ METHOD HbIde:create( aParams ) ::oFont := NIL qSplash := NIL -#endif + HB_TRACE( HB_TR_ALWAYS, " " ) HB_TRACE( HB_TR_ALWAYS, "After ::oDlg:destroy()", memory( 1001 ) ) HB_TRACE( HB_TR_ALWAYS, "======================================================" ) +#endif RETURN self diff --git a/harbour/contrib/hbide/idebrowse.prg b/harbour/contrib/hbide/idebrowse.prg index 551ac2f529..729806d548 100644 --- a/harbour/contrib/hbide/idebrowse.prg +++ b/harbour/contrib/hbide/idebrowse.prg @@ -222,12 +222,21 @@ METHOD IdeBrowseManager:show() /*----------------------------------------------------------------------*/ METHOD IdeBrowseManager:create( oIde ) + LOCAL qDock DEFAULT oIde TO ::oIde ::oIde := oIde + qDock := ::oIde:oEM:oQScintillaDock:oWidget + ::qDbu := QWidget():new() - ::oIde:oEM:oQScintillaDock:oWidget:setWidget( ::qDbu ) + + qDock:setWidget( ::qDbu ) + + qDock:setAcceptDrops( .t. ) + qDock:installEventFilter( ::pEvents ) + ::connect( qDock, QEvent_DragEnter, {|p| ::execEvent( "dockDbu_dragEnterEvent", p ) } ) + ::connect( qDock, QEvent_Drop , {|p| ::execEvent( "dockDbu_dropEvent" , p ) } ) /* Layout applied to dbu widget */ ::qLayout := QVBoxLayout():new() @@ -379,12 +388,33 @@ METHOD IdeBrowseManager:setPanel( cPanel ) /*----------------------------------------------------------------------*/ METHOD IdeBrowseManager:execEvent( cEvent, p, p1 ) - LOCAL cTable, cPath, cPanel + LOCAL cTable, cPath, cPanel, qEvent, qMime, qList, i, cExt, qUrl HB_SYMBOL_UNUSED( p ) HB_SYMBOL_UNUSED( p1 ) SWITCH cEvent + CASE "dockDbu_dragEnterEvent" + qEvent := QDragEnterEvent():from( p ) + qEvent:acceptProposedAction() + EXIT + + CASE "dockDbu_dropEvent" + qEvent := QDropEvent():from( p ) + qMime := QMimeData():from( qEvent:mimeData() ) + IF qMime:hasUrls() + qList := QStringList():from( qMime:hbUrlList() ) + FOR i := 0 TO qList:size() - 1 + qUrl := QUrl():new( qList:at( i ) ) + hb_fNameSplit( qUrl:toLocalFile(), @cPath, @cTable, @cExt ) + IF lower( cExt ) == ".dbf" + ::addTable( hbide_pathToOSPath( cPath + cTable + cExt ) ) + ENDIF + HB_TRACE( HB_TR_ALWAYS, cPath, cTable, cExt ) + NEXT + ENDIF + EXIT + CASE "buttonShowForm_clicked" IF !empty( ::oCurBrw ) IF ::oCurBrw:qForm:isHidden() diff --git a/harbour/contrib/hbide/idedocks.prg b/harbour/contrib/hbide/idedocks.prg index d1233fea82..cefa71f4d6 100644 --- a/harbour/contrib/hbide/idedocks.prg +++ b/harbour/contrib/hbide/idedocks.prg @@ -296,56 +296,84 @@ METHOD IdeDocks:buildSystemTray() /*----------------------------------------------------------------------*/ METHOD IdeDocks:execEvent( cEvent, p ) - LOCAL qEvent + LOCAL qEvent, qMime, qList, qUrl, i - DO CASE - CASE cEvent == "qHelpBrw_contextMenuRequested" + SWITCH cEvent + + CASE "qHelpBrw_contextMenuRequested" hbide_popupBrwContextMenu( ::qHelpBrw, p ) - - CASE cEvent == "dockQScintilla_visibilityChanged" - IF p ; ::oBM:show() ; ENDIF - - CASE cEvent == "dockSourceThumbnail_visibilityChanged" + EXIT + CASE "dockQScintilla_topLevelChanged" + CASE "dockQScintilla_dockLocationChanged" + CASE "dockQScintilla_allowedAreasChanged" + CASE "dockQScintilla_featuresChanged" + EXIT + CASE "dockQScintilla_visibilityChanged" + IF p; ::oBM:show() ; ENDIF + //::oQScintillaDock:oWidget:raise() + EXIT + CASE "dockSourceThumbnail_visibilityChanged" IF p; ::oEM:showThumbnail(); ENDIF - - CASE cEvent == "dockSkltnsTree_visibilityChanged" + //::oSourceThumbnailDock:oWidget:raise() + EXIT + CASE "dockSkltnsTree_visibilityChanged" IF p; ::oSK:showTree(); ENDIF + //::oSkltnsTreeDock:oWidget:raise() + EXIT + CASE "dockHelpDock_visibilityChanged" + //::oHelpDock:oWidget:raise() + EXIT - CASE cEvent == "dockHelpDock_visibilityChanged" - IF p; ::oHelpDock:oWidget:raise(); ENDIF + CASE "dockDocViewer_visibilityChanged" + IF p; ::oHL:show(); ENDIF + //::oDocViewDock:oWidget:raise() + EXIT - CASE cEvent == "dockDocViewer_visibilityChanged" - IF p; ::oHL:show(); ::oDocViewDock:oWidget:raise(); ENDIF + CASE "dockDocWriter_visibilityChanged" + IF p; ::oDW:show(); ENDIF + //::oDocWriteDock:oWidget:raise() + EXIT - CASE cEvent == "dockDocWriter_visibilityChanged" - IF p; ::oDW:show(); ::oDocWriteDock:oWidget:raise(); ENDIF + CASE "oFuncDock_visibilityChanged" + //::oFuncDock:oWidget:raise() + EXIT - CASE cEvent == "oFuncDock_visibilityChanged" - IF p; ::oFuncDock:oWidget:raise(); ENDIF + CASE "docFunctions_visibilityChanged" + IF p; ::oFN:show(); ENDIF + //::oFunctionsDock:oWidget:raise() + EXIT - CASE cEvent == "docFunctions_visibilityChanged" - IF p; ::oFN:show(); ::oFunctionsDock:oWidget:raise(); ENDIF + CASE "dockProperties_visibilityChanged" + IF p; ::oPM:fetchProperties(); ENDIF + //::oPropertiesDock:oWidget:raise() + EXIT - CASE cEvent == "dockProperties_visibilityChanged" - IF p; ::oPM:fetchProperties(); ::oPropertiesDock:oWidget:raise(); ENDIF + CASE "docEnvironments_visibilityChanged" + IF p; ::oEV:show(); ENDIF + //::oEnvironDock:oWidget:raise() + EXIT - CASE cEvent == "docEnvironments_visibilityChanged" - IF p; ::oEV:show(); ::oEnvironDock:oWidget:raise(); ENDIF + CASE "docSkeletons_visibilityChanged" + IF p; ::oSK:show(); ENDIF + //::oSkeltnDock:oWidget:raise() + EXIT - CASE cEvent == "docSkeletons_visibilityChanged" - IF p; ::oSK:show(); ::oSkeltnDock:oWidget:raise(); ENDIF + CASE "dockThemes_visibilityChanged" + IF p; ::oTH:show(); ENDIF + //::oThemesDock:oWidget:raise() + EXIT - CASE cEvent == "dockThemes_visibilityChanged" - IF p; ::oTH:show(); ::oThemesDock:oWidget:raise(); ENDIF + CASE "dockFindInFiles_visibilityChanged" + IF p; ::oFF:show(); ENDIF + //::oFindDock:oWidget:raise() + EXIT - CASE cEvent == "dockFindInFiles_visibilityChanged" - IF p; ::oFF:show(); ::oFindDock:oWidget:raise(); ENDIF - - CASE cEvent == "QEvent_WindowStateChange" + CASE "QEvent_WindowStateChange" qEvent := QWindowStateChangeEvent():from( p ) ::nPrevWindowState := qEvent:oldState() + EXIT - CASE cEvent == "QEvent_Hide" + CASE "QEvent_Hide" IF ::lSystemTrayAvailable .AND. ::lMinimizeInSystemTray qEvent := QHideEvent():from( p ) IF ! ::lChanging @@ -363,27 +391,51 @@ METHOD IdeDocks:execEvent( cEvent, p ) ::lChanging := .f. ENDIF ENDIF + EXIT - CASE cEvent == "qTimer_timeOut" + CASE "qTimer_timeOut" ::oDlg:hide() ::oSys:setToolTip( ::oDlg:oWidget:windowTitle() ) ::oSys:show() + EXIT - CASE cEvent == "qSystemTrayIcon_close" + CASE "qSystemTrayIcon_close" PostAppEvent( xbeP_Close, NIL, NIL, ::oDlg ) + EXIT - CASE cEvent == "qSystemTrayIcon_show" + CASE "qSystemTrayIcon_show" ::showDlgBySystemTrayIconCommand() + EXIT - CASE cEvent == "qSystemTrayIcon_activated" + CASE "qSystemTrayIcon_activated" IF p == QSystemTrayIcon_Trigger ::showDlgBySystemTrayIconCommand() ELSEIF p == QSystemTrayIcon_DoubleClick ELSEIF p == QSystemTrayIcon_Context ELSEIF p == QSystemTrayIcon_MiddleClick ENDIF + EXIT - ENDCASE + CASE "editWidget_dragEnterEvent" + qEvent := QDragEnterEvent():from( p ) + qEvent:acceptProposedAction() + EXIT + + CASE "editWidget_dropEvent" + qEvent := QDropEvent():from( p ) + qMime := QMimeData():from( qEvent:mimeData() ) + IF qMime:hasUrls() + qList := QStringList():from( qMime:hbUrlList() ) + FOR i := 0 TO qList:size() - 1 + qUrl := QUrl():new( qList:at( i ) ) + IF hbide_isValidText( qUrl:toLocalFile() ) + ::oSM:editSource( hbide_pathToOSPath( qUrl:toLocalFile() ) ) + ENDIF + NEXT + ENDIF + EXIT + + ENDSWITCH RETURN Self @@ -434,21 +486,21 @@ METHOD IdeDocks:buildDockWidgets() ::buildUpDownWidget() /* Bottom Docks */ - ::oDlg:oWidget:tabifyDockWidget( ::oDockB:oWidget , ::oDockB1:oWidget ) - ::oDlg:oWidget:tabifyDockWidget( ::oDockB1:oWidget , ::oDockB2:oWidget ) + ::oDlg:oWidget:tabifyDockWidget( ::oDockB:oWidget , ::oDockB1:oWidget ) + ::oDlg:oWidget:tabifyDockWidget( ::oDockB1:oWidget , ::oDockB2:oWidget ) /* Right Docks */ - ::oDlg:oWidget:tabifyDockWidget( ::oHelpDock:oWidget , ::oDocViewDock:oWidget ) - ::oDlg:oWidget:tabifyDockWidget( ::oDocViewDock:oWidget , ::oFuncDock:oWidget ) - ::oDlg:oWidget:tabifyDockWidget( ::oFuncDock:oWidget , ::oFunctionsDock:oWidget ) - ::oDlg:oWidget:tabifyDockWidget( ::oFunctionsDock:oWidget , ::oPropertiesDock:oWidget ) - ::oDlg:oWidget:tabifyDockWidget( ::oPropertiesDock:oWidget, ::oEnvironDock:oWidget ) - ::oDlg:oWidget:tabifyDockWidget( ::oEnvironDock:oWidget , ::oSkeltnDock:oWidget ) - ::oDlg:oWidget:tabifyDockWidget( ::oSkeltnDock:oWidget , ::oThemesDock:oWidget ) - ::oDlg:oWidget:tabifyDockWidget( ::oThemesDock:oWidget , ::oFindDock:oWidget ) - ::oDlg:oWidget:tabifyDockWidget( ::oFindDock:oWidget , ::oDocWriteDock:oWidget ) - ::oDlg:oWidget:tabifyDockWidget( ::oDocWriteDock:oWidget , ::oSourceThumbnailDock:oWidget ) - ::oDlg:oWidget:tabifyDockWidget( ::oSourceThumbnailDock:oWidget, ::oQScintillaDock:oWidget ) + ::oDlg:oWidget:tabifyDockWidget( ::oHelpDock:oWidget , ::oDocViewDock:oWidget ) + ::oDlg:oWidget:tabifyDockWidget( ::oDocViewDock:oWidget , ::oFuncDock:oWidget ) + ::oDlg:oWidget:tabifyDockWidget( ::oFuncDock:oWidget , ::oFunctionsDock:oWidget ) + ::oDlg:oWidget:tabifyDockWidget( ::oFunctionsDock:oWidget , ::oPropertiesDock:oWidget ) + ::oDlg:oWidget:tabifyDockWidget( ::oPropertiesDock:oWidget , ::oEnvironDock:oWidget ) + ::oDlg:oWidget:tabifyDockWidget( ::oEnvironDock:oWidget , ::oSkeltnDock:oWidget ) + ::oDlg:oWidget:tabifyDockWidget( ::oSkeltnDock:oWidget , ::oThemesDock:oWidget ) + ::oDlg:oWidget:tabifyDockWidget( ::oThemesDock:oWidget , ::oFindDock:oWidget ) + ::oDlg:oWidget:tabifyDockWidget( ::oFindDock:oWidget , ::oDocWriteDock:oWidget ) + ::oDlg:oWidget:tabifyDockWidget( ::oDocWriteDock:oWidget , ::oSourceThumbnailDock:oWidget ) + ::oDlg:oWidget:tabifyDockWidget( ::oSourceThumbnailDock:oWidget, ::oQScintillaDock:oWidget ) ::buildToolBarPanels() @@ -539,7 +591,7 @@ METHOD IdeDocks:buildStackedWidget() /*----------------------------------------------------------------------*/ METHOD IdeDocks:buildViewWidget( cObjectName ) - LOCAL oFrame, qTBtnClose + LOCAL oFrame, qTBtnClose, qDrop oFrame := XbpWindow():new( ::oStackedWidget ) oFrame:oWidget := QWidget():new( ::oStackedWidget:oWidget ) @@ -560,6 +612,14 @@ METHOD IdeDocks:buildViewWidget( cObjectName ) ::connect( qTBtnClose, "clicked()", {|| ::oSM:closeSource() } ) oFrame:oTabWidget:qCornerWidget := qTBtnClose oFrame:oTabWidget:oWidget:setCornerWidget( qTBtnClose, Qt_TopRightCorner ) + + qDrop := oFrame:oTabWidget:oWidget + + qDrop:setAcceptDrops( .t. ) + qDrop:installEventFilter( ::pEvents ) + ::connect( qDrop, QEvent_DragEnter, {|p| ::execEvent( "editWidget_dragEnterEvent", p ) } ) + ::connect( qDrop, QEvent_Drop , {|p| ::execEvent( "editWidget_dropEvent" , p ) } ) + ENDIF oFrame:oTabWidget:oWidget:setUsesScrollButtons( .t. ) @@ -626,17 +686,17 @@ METHOD IdeDocks:buildToolBarPanels() ::oDlg:oWidget:addToolBar( Qt_LeftToolBarArea, ::qTBarLines ) aBtns := {} - aadd( aBtns, { "movelineup" , "Move Current Line Up" , {|| ::oEM:moveLine( -1 ) } } ) - aadd( aBtns, { "movelinedown" , "Move Current Line Down" , {|| ::oEM:moveLine( 1 ) } } ) - aadd( aBtns, { "deleteline" , "Delete Current Line" , {|| ::oEM:deleteLine() } } ) - aadd( aBtns, { "duplicateline" , "Duplicate Current Line" , {|| ::oEM:duplicateLine() } } ) + aadd( aBtns, { "movelineup" , "Move Current Line Up" , {|| ::oEM:moveLine( -1 ) } } ) + aadd( aBtns, { "movelinedown" , "Move Current Line Down" , {|| ::oEM:moveLine( 1 ) } } ) + aadd( aBtns, { "deleteline" , "Delete Current Line" , {|| ::oEM:deleteLine() } } ) + aadd( aBtns, { "duplicateline" , "Duplicate Current Line" , {|| ::oEM:duplicateLine() } } ) aadd( aBtns, {} ) #if 0 - aadd( aBtns, { "togglelinenumber", "Toggle Line Numbers" , {|| ::oEM:toggleLineNumbers() } } ) + aadd( aBtns, { "togglelinenumber", "Toggle Line Numbers" , {|| ::oEM:toggleLineNumbers() } } ) aadd( aBtns, { "curlinehilight" , "Toggle Current Line Hilight", {|| ::oEM:toggleCurrentLineHighlightMode() } } ) #endif - aadd( aBtns, { "togglelinenumber", "Toggle Line Numbers" , {|| ::oEM:toggleLineNumbers() } } ) - aadd( aBtns, { "horzruler" , "Toggle Horizontal Ruler" , {|| ::oEM:toggleHorzRuler() } } ) + aadd( aBtns, { "togglelinenumber", "Toggle Line Numbers" , {|| ::oEM:toggleLineNumbers() } } ) + aadd( aBtns, { "horzruler" , "Toggle Horizontal Ruler" , {|| ::oEM:toggleHorzRuler() } } ) aadd( aBtns, { "curlinehilight" , "Toggle Current Line Hilight", {|| ::oEM:toggleCurrentLineHighlightMode() } } ) FOR EACH a_ IN aBtns IF empty( a_ ) @@ -1143,7 +1203,11 @@ METHOD IdeDocks:buildQScintilla() ::oIde:oQScintillaDock := ::getADockWidget( nAreas, "dockQScintilla", "ideDBU", QDockWidget_DockWidgetFloatable ) ::oDlg:oWidget:addDockWidget_1( Qt_RightDockWidgetArea, ::oQScintillaDock:oWidget, Qt_Horizontal ) - ::connect( ::oQScintillaDock:oWidget, "visibilityChanged(bool)", {|p| ::execEvent( "dockQScintilla_visibilityChanged", p ) } ) + ::connect( ::oQScintillaDock:oWidget, "visibilityChanged(bool)" , {|p| ::execEvent( "dockQScintilla_visibilityChanged" , p ) } ) + ::connect( ::oQScintillaDock:oWidget, "topLevelChanged(bool)" , {|p| ::execEvent( "dockQScintilla_topLevelChanged" , p ) } ) + ::connect( ::oQScintillaDock:oWidget, "dockLocationChanged(int)" , {|p| ::execEvent( "dockQScintilla_dockLocationChanged", p ) } ) + ::connect( ::oQScintillaDock:oWidget, "allowedAreasChanged(int)" , {|p| ::execEvent( "dockQScintilla_allowedAreasChanged", p ) } ) + ::connect( ::oQScintillaDock:oWidget, "featuresChanged(int)" , {|p| ::execEvent( "dockQScintilla_featuresChanged" , p ) } ) RETURN Self diff --git a/harbour/contrib/hbide/ideplugins.prg b/harbour/contrib/hbide/ideplugins.prg index e0effe88cd..31d8b81372 100644 --- a/harbour/contrib/hbide/ideplugins.prg +++ b/harbour/contrib/hbide/ideplugins.prg @@ -203,7 +203,6 @@ FUNCTION hbide_execAutoScripts() FOR EACH cFileName IN a_ IF !empty( cBuffer := hb_memoRead( cPath + cFileName ) ) - HB_TRACE( HB_TR_ALWAYS, cFileName ) hbide_runAScript( cBuffer, /* No Compiler Flag */, hbide_setIde() ) ENDIF NEXT