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:
Pritpal Bedi
2009-11-24 22:26:30 +00:00
parent c227481f42
commit aa83980736
7 changed files with 197 additions and 78 deletions

View File

@@ -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().

View File

@@ -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()

View File

@@ -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 ) }

View File

@@ -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 ] )

Binary file not shown.

After

Width:  |  Height:  |  Size: 235 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 232 B

View File

@@ -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 ),;