2009-11-24 14:20 UTC-0800 Pritpal Bedi (pritpal@vouchcac.com)
* contrib/hbxbp/xbplistbox.prg
+ contrib/hbide/resources/zoomin.png
+ contrib/hbide/resources/zoomout.png
* contrib/hbide/ideactions.prg
* contrib/hbide/idemisc.prg
* contrib/hbide/hbide.prg
+ Added ZoomIn, ZoomOut toolbar buttons for in-place zoom-in/out
text decoration. Very handy visualization.
+ Implemented undo/redo/cut/copy/paste/select all/to upper/to lower/invert case/ icons.
! Fixed many artifacts.
Please play with the tool and report back your experiences.
This commit is contained in:
@@ -17,6 +17,22 @@
|
||||
past entries belonging to author(s): Viktor Szakats.
|
||||
*/
|
||||
|
||||
2009-11-24 14:20 UTC-0800 Pritpal Bedi (pritpal@vouchcac.com)
|
||||
* contrib/hbxbp/xbplistbox.prg
|
||||
|
||||
+ contrib/hbide/resources/zoomin.png
|
||||
+ contrib/hbide/resources/zoomout.png
|
||||
|
||||
* contrib/hbide/ideactions.prg
|
||||
* contrib/hbide/idemisc.prg
|
||||
* contrib/hbide/hbide.prg
|
||||
+ Added ZoomIn, ZoomOut toolbar buttons for in-place zoom-in/out
|
||||
text decoration. Very handy visualization.
|
||||
+ Implemented undo/redo/cut/copy/paste/select all/to upper/to lower/invert case/ icons.
|
||||
! Fixed many artifacts.
|
||||
|
||||
Please play with the tool and report back your experiences.
|
||||
|
||||
2009-11-24 16:57 UTC+0100 Viktor Szakats (harbour.01 syenar.hu)
|
||||
* src/rtl/fscopy.c
|
||||
! Fixed to use the same file opening method as in __COPYFILE().
|
||||
|
||||
@@ -121,6 +121,7 @@ CLASS HbIde
|
||||
DATA qSplitterL
|
||||
DATA qSplitterR
|
||||
DATA qTabWidget
|
||||
ACCESS qCurEdit INLINE iif( ::getCurrentTab() > 0, ::aTabs[ ::getCurrentTab(), 2 ], NIL )
|
||||
|
||||
/* XBP Objects */
|
||||
DATA oDlg
|
||||
@@ -149,8 +150,8 @@ CLASS HbIde
|
||||
DATA oDlls
|
||||
DATA aProjData INIT {}
|
||||
|
||||
DATA lDockRVisible INIT .t.
|
||||
DATA lDockBVisible INIT .t.
|
||||
DATA lDockRVisible INIT .f.
|
||||
DATA lDockBVisible INIT .f.
|
||||
DATA lTabCloseRequested INIT .f.
|
||||
|
||||
METHOD new( cProjectOrSource )
|
||||
@@ -195,6 +196,8 @@ CLASS HbIde
|
||||
|
||||
METHOD createTags()
|
||||
METHOD loadUI()
|
||||
METHOD manageFocusInEditor()
|
||||
METHOD convertSelection()
|
||||
|
||||
ENDCLASS
|
||||
|
||||
@@ -322,11 +325,10 @@ METHOD HbIde:create( cProjectOrSource )
|
||||
|
||||
ELSEIF ( ::nEvent == xbeP_Keyboard .and. ::mp1 == xbeK_ESC )
|
||||
::closeSource()
|
||||
#if 0
|
||||
IF ::qTabWidget:count() == 0
|
||||
EXIT
|
||||
::oDockR:hide()
|
||||
::lDockRVisible := .f.
|
||||
ENDIF
|
||||
#endif
|
||||
ENDIF
|
||||
|
||||
::oXbp:handleEvent( ::nEvent, ::mp1, ::mp2 )
|
||||
@@ -341,6 +343,144 @@ METHOD HbIde:create( cProjectOrSource )
|
||||
|
||||
/*----------------------------------------------------------------------*/
|
||||
|
||||
METHOD HbIde:executeAction( cKey )
|
||||
LOCAL cFile
|
||||
|
||||
DO CASE
|
||||
|
||||
CASE cKey == "Exit"
|
||||
PostAppEvent( xbeP_Close, NIL, NIL, ::oDlg )
|
||||
|
||||
CASE cKey == "NewProject"
|
||||
::fetchNewProject()
|
||||
|
||||
CASE cKey == "Open"
|
||||
IF !empty( cFile := ::selectSource( "open" ) )
|
||||
::oProjRoot:addItem( cFile )
|
||||
::editSource( cFile )
|
||||
ENDIF
|
||||
|
||||
CASE cKey == "Save"
|
||||
::saveSource( ::getCurrentTab(), .f. )
|
||||
|
||||
CASE cKey == "Close"
|
||||
::closeSource()
|
||||
|
||||
CASE cKey == "Undo"
|
||||
IF !empty( ::qCurEdit )
|
||||
::qCurEdit:undo()
|
||||
ENDIF
|
||||
CASE cKey == "Redo"
|
||||
IF !empty( ::qCurEdit )
|
||||
::qCurEdit:redo()
|
||||
ENDIF
|
||||
CASE cKey == "Cut"
|
||||
IF !empty( ::qCurEdit )
|
||||
::qCurEdit:cut()
|
||||
ENDIF
|
||||
CASE cKey == "Copy"
|
||||
IF !empty( ::qCurEdit )
|
||||
::qCurEdit:copy()
|
||||
ENDIF
|
||||
CASE cKey == "Paste"
|
||||
IF !empty( ::qCurEdit )
|
||||
::qCurEdit:paste()
|
||||
ENDIF
|
||||
CASE cKey == "SelectAll"
|
||||
IF !empty( ::qCurEdit )
|
||||
::qCurEdit:selectAll()
|
||||
ENDIF
|
||||
CASE cKey == "ToUpper"
|
||||
::convertSelection( cKey )
|
||||
CASE cKey == "ToLower"
|
||||
::convertSelection( cKey )
|
||||
CASE cKey == "Invert"
|
||||
::convertSelection( cKey )
|
||||
CASE cKey == "ZoomIn"
|
||||
IF !empty( ::qCurEdit )
|
||||
::qCurEdit:zoomIn()
|
||||
ENDIF
|
||||
CASE cKey == "ZoomOut"
|
||||
IF !empty( ::qCurEdit )
|
||||
::qCurEdit:zoomOut()
|
||||
ENDIF
|
||||
|
||||
CASE cKey == "11"
|
||||
IF ::lDockBVisible
|
||||
::oDockB:hide()
|
||||
::oDockB1:hide()
|
||||
::oDockB2:hide()
|
||||
::lDockBVisible := .f.
|
||||
ELSEIF ::qTabWidget:count() > 0
|
||||
::oDockB:show()
|
||||
::oDockB1:show()
|
||||
::oDockB2:show()
|
||||
::lDockBVisible := .t.
|
||||
ENDIF
|
||||
|
||||
CASE cKey == "12"
|
||||
IF ::lDockRVisible
|
||||
::oDockR:hide()
|
||||
ELSE
|
||||
::oDockR:show()
|
||||
ENDIF
|
||||
::lDockRVisible := !( ::lDockRVisible )
|
||||
|
||||
ENDCASE
|
||||
|
||||
::manageFocusInEditor()
|
||||
|
||||
RETURN nil
|
||||
|
||||
/*----------------------------------------------------------------------*/
|
||||
|
||||
METHOD HbIde:convertSelection( cKey )
|
||||
LOCAL qCursor, cBuffer, i, s, nLen, c
|
||||
//LOCAL nB, nE
|
||||
|
||||
IF !empty( ::qCurEdit )
|
||||
qCursor := QTextCursor():configure( ::qCurEdit:textCursor() )
|
||||
IF qCursor:hasSelection() .and. !empty( cBuffer := qCursor:selectedText() )
|
||||
DO CASE
|
||||
CASE cKey == "ToUpper"
|
||||
cBuffer := upper( cBuffer )
|
||||
CASE cKey == "ToLower"
|
||||
cBuffer := lower( cBuffer )
|
||||
CASE cKey == "Invert"
|
||||
s := ""
|
||||
nLen := len( cBuffer )
|
||||
FOR i := 1 TO nLen
|
||||
c := substr( cBuffer, i, 1 )
|
||||
s += IF( isUpper( c ), lower( c ), upper( c ) )
|
||||
NEXT
|
||||
cBuffer := s
|
||||
ENDCASE
|
||||
//nB := qCursor:selectionStart()
|
||||
//nE := qCursor:selectionEnd()
|
||||
qCursor:removeSelectedText()
|
||||
//qCursor:beginEditBlock()
|
||||
qCursor:insertText( cBuffer )
|
||||
//qCursor:select( QTextCursor_BlockUnderCursor )
|
||||
//qCursor:endEditBlock()
|
||||
//qCursor:setPosition( nB-len(cBuffer)+1, QTextCursor_MoveAnchor )
|
||||
//::qCurEdit:find( cBuffer )
|
||||
ENDIF
|
||||
ENDIF
|
||||
|
||||
RETURN Self
|
||||
|
||||
/*----------------------------------------------------------------------*/
|
||||
|
||||
METHOD HbIde:manageFocusInEditor()
|
||||
|
||||
IF ::getCurrentTab() > 0
|
||||
::aTabs[ ::getCurrentTab(), 2 ]:setFocus()
|
||||
ENDIF
|
||||
|
||||
RETURN self
|
||||
|
||||
/*----------------------------------------------------------------------*/
|
||||
|
||||
METHOD HbIde:updateFuncList()
|
||||
|
||||
::oFuncList:clear()
|
||||
@@ -415,6 +555,7 @@ METHOD HbIde:editSource( cSourceFile )
|
||||
::aSources := { cSourceFile }
|
||||
::createTags()
|
||||
::updateFuncList()
|
||||
::manageFocusInEditor()
|
||||
|
||||
RETURN Self
|
||||
|
||||
@@ -461,6 +602,7 @@ METHOD HbIde:closeSource()
|
||||
LOCAL nTab
|
||||
|
||||
IF !empty( nTab := ::getCurrentTab() )
|
||||
::oFuncList:clear()
|
||||
::saveSource( nTab )
|
||||
/* Destroy at Qt level */
|
||||
::qTabWidget:removeTab( ::qTabWidget:currentIndex() )
|
||||
@@ -626,55 +768,6 @@ METHOD HbIde:buildProjectTree()
|
||||
|
||||
/*----------------------------------------------------------------------*/
|
||||
|
||||
METHOD HbIde:executeAction( cKey )
|
||||
LOCAL cFile
|
||||
|
||||
DO CASE
|
||||
|
||||
CASE cKey == "Exit"
|
||||
PostAppEvent( xbeP_Close, NIL, NIL, ::oDlg )
|
||||
|
||||
CASE cKey == "NewProject"
|
||||
::fetchNewProject()
|
||||
|
||||
CASE cKey == "Open"
|
||||
IF !empty( cFile := ::selectSource( "open" ) )
|
||||
::oProjRoot:addItem( cFile )
|
||||
::editSource( cFile )
|
||||
ENDIF
|
||||
|
||||
CASE cKey == "Save"
|
||||
::saveSource( ::getCurrentTab(), .f. )
|
||||
|
||||
CASE cKey == "Close"
|
||||
::closeSource()
|
||||
|
||||
CASE cKey == "11"
|
||||
IF ::lDockBVisible
|
||||
::oDockB:hide()
|
||||
::oDockB1:hide()
|
||||
::oDockB2:hide()
|
||||
ELSE
|
||||
::oDockB:show()
|
||||
::oDockB1:show()
|
||||
::oDockB2:show()
|
||||
ENDIF
|
||||
::lDockBVisible := !( ::lDockBVisible )
|
||||
|
||||
CASE cKey == "12"
|
||||
IF ::lDockRVisible
|
||||
::oDockR:hide()
|
||||
ELSE
|
||||
::oDockR:show()
|
||||
ENDIF
|
||||
::lDockRVisible := !( ::lDockRVisible )
|
||||
|
||||
ENDCASE
|
||||
|
||||
RETURN nil
|
||||
|
||||
/*----------------------------------------------------------------------*/
|
||||
|
||||
METHOD HbIde:buildStatusBar()
|
||||
LOCAL oPanel
|
||||
|
||||
@@ -732,7 +825,9 @@ METHOD HbIde:manageProjectContext( mp1 )
|
||||
aadd( aPops, { ::oCurProjItem:caption, {|| NIL } } )
|
||||
aadd( aPops, { ::oCurProjItem:caption, {|| NIL } } )
|
||||
|
||||
ExecPopup( aPops, mp1 )
|
||||
ExecPopup( aPops, mp1, ::oProjTree:oWidget )
|
||||
|
||||
::manageFocusInEditor()
|
||||
ENDIF
|
||||
|
||||
RETURN Self
|
||||
@@ -742,14 +837,17 @@ METHOD HbIde:manageProjectContext( mp1 )
|
||||
METHOD HbIde:manageFuncContext( mp1 )
|
||||
LOCAL aPops := {}
|
||||
|
||||
aadd( aPops, { 'Comment out' , {|| NIL } } )
|
||||
aadd( aPops, { 'Reformat' , {|| NIL } } )
|
||||
aadd( aPops, { 'Print' , {|| NIL } } )
|
||||
aadd( aPops, { 'Delete' , {|| NIL } } )
|
||||
aadd( aPops, { 'Move to another source', {|| NIL } } )
|
||||
IF ::oFuncList:numItems() > 0
|
||||
aadd( aPops, { 'Comment out' , {|| NIL } } )
|
||||
aadd( aPops, { 'Reformat' , {|| NIL } } )
|
||||
aadd( aPops, { 'Print' , {|| NIL } } )
|
||||
aadd( aPops, { 'Delete' , {|| NIL } } )
|
||||
aadd( aPops, { 'Move to another source', {|| NIL } } )
|
||||
|
||||
ExecPopup( aPops, mp1 )
|
||||
ExecPopup( aPops, mp1, ::oFuncList:oWidget )
|
||||
|
||||
::manageFocusInEditor()
|
||||
ENDIF
|
||||
RETURN Self
|
||||
|
||||
/*----------------------------------------------------------------------*/
|
||||
@@ -768,7 +866,7 @@ METHOD HbIde:buildFuncList()
|
||||
|
||||
::oFuncList := XbpListBox():new( ::oDockR ):create( , , { 0,0 }, { 100,400 }, , .t. )
|
||||
::oFuncList:setStyleSheet( GetStyleSheet( "QListView" ) )
|
||||
::oFuncList:setColorBG( GraMakeRGBColor( { 210,120,220 } ) )
|
||||
|
||||
//::oFuncList:ItemMarked := {|mp1, mp2, oXbp| ::gotoFunction( mp1, mp2, oXbp ) }
|
||||
::oFuncList:ItemSelected := {|mp1, mp2, oXbp| ::gotoFunction( mp1, mp2, oXbp ) }
|
||||
/* Harbour Extension : prefixed with "hb" */
|
||||
@@ -779,7 +877,7 @@ METHOD HbIde:buildFuncList()
|
||||
::oDockR:oWidget:setWidget( QT_PTROFXBP( ::oFuncList ) )
|
||||
|
||||
::oDlg:oWidget:addDockWidget_1( Qt_RightDockWidgetArea, QT_PTROFXBP( ::oDockR ), Qt_Horizontal )
|
||||
//::oDockR:hide()
|
||||
::oDockR:hide()
|
||||
|
||||
RETURN Self
|
||||
|
||||
@@ -814,7 +912,7 @@ METHOD HbIde:buildCompileResults()
|
||||
::oDockB:oWidget:setWidget( QT_PTROFXBP( ::oCompileResult ) )
|
||||
|
||||
::oDlg:oWidget:addDockWidget_1( Qt_BottomDockWidgetArea, QT_PTROFXBP( ::oDockB ), Qt_Vertical )
|
||||
//::oDockB:hide()
|
||||
::oDockB:hide()
|
||||
|
||||
RETURN Self
|
||||
|
||||
@@ -836,7 +934,7 @@ METHOD HbIde:buildLinkResults()
|
||||
::oDockB1:oWidget:setWidget( QT_PTROFXBP( ::oLinkResult ) )
|
||||
|
||||
::oDlg:oWidget:addDockWidget_1( Qt_BottomDockWidgetArea, QT_PTROFXBP( ::oDockB1 ), Qt_Vertical )
|
||||
//::oDockB1:hide()
|
||||
::oDockB1:hide()
|
||||
|
||||
RETURN Self
|
||||
|
||||
@@ -858,7 +956,7 @@ METHOD HbIde:buildOutputResults()
|
||||
::oDockB2:oWidget:setWidget( QT_PTROFXBP( ::oOutputResult ) )
|
||||
|
||||
::oDlg:oWidget:addDockWidget_1( Qt_BottomDockWidgetArea, QT_PTROFXBP( ::oDockB2 ), Qt_Vertical )
|
||||
//::oDockB2:hide()
|
||||
::oDockB2:hide()
|
||||
|
||||
RETURN Self
|
||||
|
||||
@@ -939,6 +1037,8 @@ METHOD HbIde:fetchNewProject()
|
||||
|
||||
nRet := oDlg:oWidget:exec()
|
||||
|
||||
JustACall( nRet )
|
||||
|
||||
HBXBP_DEBUG( "Done", nRet )
|
||||
|
||||
oDlg:destroy()
|
||||
|
||||
@@ -98,13 +98,13 @@ FUNCTION buildToolBar( oWnd, oIde )
|
||||
oTBar:addItem( "Module Function List" , cResPath + "modulelist.png" , , , , , "12" )
|
||||
//
|
||||
oTBar:addItem( , , , , , XBPTOOLBAR_BUTTON_SEPARATOR )
|
||||
oTBar:addItem( "Undo" , cResPath + "undo.png" , , , , , "13" )
|
||||
oTBar:addItem( "Redo" , cResPath + "redo.png" , , , , , "14" )
|
||||
oTBar:addItem( "Undo" , cResPath + "undo.png" , , , , , "Undo" )
|
||||
oTBar:addItem( "Redo" , cResPath + "redo.png" , , , , , "Redo" )
|
||||
oTBar:addItem( , , , , , XBPTOOLBAR_BUTTON_SEPARATOR )
|
||||
oTBar:addItem( "Cut" , cResPath + "cut.png" , , , , , "15" )
|
||||
oTBar:addItem( "Copy" , cResPath + "copy.png" , , , , , "16" )
|
||||
oTBar:addItem( "Paste" , cResPath + "paste.png" , , , , , "17" )
|
||||
oTBar:addItem( "Select All" , cResPath + "selectall.png" , , , , , "18" )
|
||||
oTBar:addItem( "Cut" , cResPath + "cut.png" , , , , , "Cut" )
|
||||
oTBar:addItem( "Copy" , cResPath + "copy.png" , , , , , "Copy" )
|
||||
oTBar:addItem( "Paste" , cResPath + "paste.png" , , , , , "Paste" )
|
||||
oTBar:addItem( "Select All" , cResPath + "selectall.png" , , , , , "SelectAll" )
|
||||
oTBar:addItem( "Column/Stream Selection" , cResPath + "stream.png" , , , , , "19" )
|
||||
oTBar:addItem( , , , , , XBPTOOLBAR_BUTTON_SEPARATOR )
|
||||
oTBar:addItem( "Find" , cResPath + "find.png" , , , , , "20" )
|
||||
@@ -114,11 +114,14 @@ FUNCTION buildToolBar( oWnd, oIde )
|
||||
oTBar:addItem( "Goto Mark" , cResPath + "gotomark.png" , , , , , "23" )
|
||||
oTBar:addItem( "Goto Line" , cResPath + "gotoline.png" , , , , , "24" )
|
||||
oTBar:addItem( , , , , , XBPTOOLBAR_BUTTON_SEPARATOR )
|
||||
oTBar:addItem( "To Upper" , cResPath + "toupper.png" , , , , , "25" )
|
||||
oTBar:addItem( "To Lower" , cResPath + "tolower.png" , , , , , "26" )
|
||||
oTBar:addItem( "Invert Case" , cResPath + "invertcase.png" , , , , , "27" )
|
||||
oTBar:addItem( "To Upper" , cResPath + "toupper.png" , , , , , "ToUpper" )
|
||||
oTBar:addItem( "To Lower" , cResPath + "tolower.png" , , , , , "ToLower" )
|
||||
oTBar:addItem( "Invert Case" , cResPath + "invertcase.png" , , , , , "Invert" )
|
||||
oTBar:addItem( "Match Pairs" , cResPath + "matchobj.png" , , , , , "28" )
|
||||
oTBar:addItem( , , , , , XBPTOOLBAR_BUTTON_SEPARATOR )
|
||||
oTBar:addItem( "ZoomIn" , cResPath + "zoomin.png" , , , , , "ZoomIn" )
|
||||
oTBar:addItem( "ZoomOut" , cResPath + "zoomout.png" , , , , , "ZoomOut" )
|
||||
oTBar:addItem( , , , , , XBPTOOLBAR_BUTTON_SEPARATOR )
|
||||
|
||||
oTBar:transparentColor := GraMakeRGBColor( { 0,255,255 } ) // GRA_CLR_INVALID
|
||||
oTBar:buttonClick := {|oButton| oIde:executeAction( oButton:key ) }
|
||||
|
||||
@@ -79,10 +79,10 @@ PROCEDURE JustACall()
|
||||
|
||||
/*----------------------------------------------------------------------*/
|
||||
|
||||
FUNCTION ExecPopup( aPops, aPos )
|
||||
FUNCTION ExecPopup( aPops, aPos, qParent )
|
||||
LOCAL i, qPop, qPoint, qAct, nAct, cAct, xRet, pAct
|
||||
|
||||
qPop := QMenu():new()
|
||||
qPop := QMenu():new( IF( hb_isObject( qParent ), QT_PTROF( qParent ), NIL ) )
|
||||
|
||||
FOR i := 1 TO len( aPops )
|
||||
qPop:addAction( aPops[ i, 1 ] )
|
||||
|
||||
BIN
harbour/contrib/hbide/resources/zoomin.png
Normal file
BIN
harbour/contrib/hbide/resources/zoomin.png
Normal file
Binary file not shown.
|
After Width: | Height: | Size: 235 B |
BIN
harbour/contrib/hbide/resources/zoomout.png
Normal file
BIN
harbour/contrib/hbide/resources/zoomout.png
Normal file
Binary file not shown.
|
After Width: | Height: | Size: 232 B |
@@ -98,7 +98,7 @@ CLASS XbpListBox INHERIT XbpWindow, XbpDataRef
|
||||
METHOD getItemHeight() VIRTUAL
|
||||
METHOD getTopItem() VIRTUAL
|
||||
METHOD getVisibleItems() VIRTUAL
|
||||
METHOD numItems() VIRTUAL
|
||||
METHOD numItems() INLINE ::oStrList:size()
|
||||
METHOD setTopItem( nIndex ) VIRTUAL
|
||||
|
||||
METHOD addItem( cItem ) INLINE ::oStrList:append( cItem ),;
|
||||
|
||||
Reference in New Issue
Block a user