2010-10-15 09:52 UTC+0200 Viktor Szakats (harbour.01 syenar.hu)

* contrib/hbqt/qtcore/hbqt_pointer.cpp
  * contrib/hbqt/qtcore/hbqtcore.hbx
    + HBQT_ISOBJECT() will return .T. is the passed object is a HBQT one.

  * contrib/hbqt/qtcore/hbqt_misc.prg
    * :isValidObject() -> :hasValidPointer()
    + :fromPointer(): New method used solely to convert raw QT pointers
      to HBQT objects. In such case no object type checking can be done,
      so it's dangerious, thus raw pointers should eventually be eliminated
      from HBQT code and as final step this method removed.
      The method will RTE is non-pointer parameter is passed.
    + Added TODOs.
    ; TODO: Change :from() method to only allow QT object input parameter
            and RTE otherwise. At the same time :from() calls with pointer
            input should be changed to :fromPointer(). As next step :from()
            should be moved to class level and proper object type checking
            added to avoid assigning wrong QT object to HBQT object wrapper.

  * contrib/hbxbp/xbplistbox.prg
  * contrib/hbxbp/xbpwindow.prg
  * contrib/hbxbp/xbptreeview.prg
  * contrib/hbide/idefindreplace.prg
  * contrib/hbide/ideedit.prg
  * contrib/hbide/idemisc.prg
  * contrib/hbide/hbqreportsmanager.prg
  * contrib/hbide/ideharbourhelp.prg
  * contrib/hbide/ideskeletons.prg
    * :isValidObject() -> :hasValidPointer()

  * INSTALL
    + Added OS/2 GCC link.
This commit is contained in:
Viktor Szakats
2010-10-15 07:54:11 +00:00
parent c669471aa2
commit eec302f8b2
14 changed files with 89 additions and 20 deletions

View File

@@ -16,6 +16,39 @@
The license applies to all entries newer than 2009-04-28.
*/
2010-10-15 09:52 UTC+0200 Viktor Szakats (harbour.01 syenar.hu)
* contrib/hbqt/qtcore/hbqt_pointer.cpp
* contrib/hbqt/qtcore/hbqtcore.hbx
+ HBQT_ISOBJECT() will return .T. is the passed object is a HBQT one.
* contrib/hbqt/qtcore/hbqt_misc.prg
* :isValidObject() -> :hasValidPointer()
+ :fromPointer(): New method used solely to convert raw QT pointers
to HBQT objects. In such case no object type checking can be done,
so it's dangerious, thus raw pointers should eventually be eliminated
from HBQT code and as final step this method removed.
The method will RTE is non-pointer parameter is passed.
+ Added TODOs.
; TODO: Change :from() method to only allow QT object input parameter
and RTE otherwise. At the same time :from() calls with pointer
input should be changed to :fromPointer(). As next step :from()
should be moved to class level and proper object type checking
added to avoid assigning wrong QT object to HBQT object wrapper.
* contrib/hbxbp/xbplistbox.prg
* contrib/hbxbp/xbpwindow.prg
* contrib/hbxbp/xbptreeview.prg
* contrib/hbide/idefindreplace.prg
* contrib/hbide/ideedit.prg
* contrib/hbide/idemisc.prg
* contrib/hbide/hbqreportsmanager.prg
* contrib/hbide/ideharbourhelp.prg
* contrib/hbide/ideskeletons.prg
* :isValidObject() -> :hasValidPointer()
* INSTALL
+ Added OS/2 GCC link.
2010-10-14 20:24 UTC+0200 Viktor Szakats (harbour.01 syenar.hu)
* harbour/utils/hbmk2/hbmk2.prg
+ *nix builds will now use /opt/harbour/contrib and /opt/harbour/addons

View File

@@ -659,7 +659,7 @@ HARBOUR
NOTE: In current implementation it's
appended to compiler directory name, so all
filesystem/platform name rules and limits
apply. (Back)slashes will be stripped from
apply. (Back)slashes will be stripped from
the name though.
- HB_BUILD_PKG=yes Create release package. Default: no
Requires 'clean install' in root source dir.
@@ -1439,6 +1439,7 @@ HARBOUR
ftp://ftp.netlabs.org/pub/gcc/libc-0_6_3-csd3.exe
http://os2ports.smedley.info/index.php?page=gcc
http://os2ports.smedley.info/index.php?page=gcc44
http://download.smedley.info/gcc-4.4.5-os2-20101004.zip
DJGPP [dos, *nix, free, open-source]
http://www.delorie.com/djgpp/
Open Watcom [win, dos, os2, linux, free, open-source]

View File

@@ -528,7 +528,7 @@ METHOD HbqReportsManager:execEvent( cEvent, p, p1, p2 )
EXIT
CASE "QEvent_MouseMoveMenu"
IF empty( ::qPos ) .OR. empty( ::qAct ) .OR. ! ::qAct:isValidObject()
IF empty( ::qPos ) .OR. empty( ::qAct ) .OR. ! ::qAct:hasValidPointer()
EXIT
ENDIF
@@ -1071,7 +1071,7 @@ METHOD HbqReportsManager:contextMenuScene( p1 )
qMenu:addAction( "Refresh" )
qMenu:addAction( "Zoom+" )
IF ( qAct := qMenu:exec( qEvent:screenPos() ) ):isValidObject()
IF ( qAct := qMenu:exec( qEvent:screenPos() ) ):hasValidPointer()
SWITCH qAct:text()
CASE "Refresh"
EXIT
@@ -1095,7 +1095,7 @@ METHOD HbqReportsManager:contextMenuItem( p1, p2 )
qMenu:addAction( "Cut" )
qMenu:addAction( "Copy" )
IF ( qAct := qMenu:exec( qEvent:screenPos() ) ):isValidObject()
IF ( qAct := qMenu:exec( qEvent:screenPos() ) ):hasValidPointer()
SWITCH qAct:text()
CASE "Cut"
EXIT
@@ -1826,7 +1826,7 @@ METHOD HqrGraphicsItem:contextMenu( p1, p2 )
qMenu:addAction( "Copy" )
qAct := qMenu:exec( qEvent:screenPos() )
IF qAct:isValidObject()
IF qAct:hasValidPointer()
SWITCH qAct:text()
CASE "Cut"
EXIT

View File

@@ -450,7 +450,7 @@ METHOD IdeEdit:execEvent( nMode, oEdit, p, p1 )
::oEM:aActions[ 19, 2 ]:setEnabled( len( ::oEditor:aEdits ) == 0 .OR. ::oEditor:nSplOrient == -1 .OR. ::oEditor:nSplOrient == 2 )
::oEM:aActions[ 21, 2 ]:setEnabled( n > 0 )
IF ! ( qAct := ::oEM:qContextMenu:exec( qEdit:mapToGlobal( QPoint( p ) ) ) ):isValidObject()
IF ! ( qAct := ::oEM:qContextMenu:exec( qEdit:mapToGlobal( QPoint( p ) ) ) ):hasValidPointer()
RETURN Self
ENDIF

View File

@@ -975,7 +975,7 @@ METHOD IdeFindInFiles:execContextMenu( p )
qMenu:addAction( "Zoom In" )
qMenu:addAction( "Zoom Out" )
IF ( qAct := qMenu:exec( ::oUI:q_editResults:mapToGlobal( QPoint( p ) ) ) ):isValidObject()
IF ( qAct := qMenu:exec( ::oUI:q_editResults:mapToGlobal( QPoint( p ) ) ) ):hasValidPointer()
cAct := qAct:text()
SWITCH cAct

View File

@@ -490,7 +490,7 @@ METHOD IdeHarbourHelp:execEvent( nMode, p, p1 )
CASE "buttonUp_clicked"
IF ::nCurInHist > 1 .AND. ::nCurInHist <= len( ::aHistory )
IF ( qTWItem := ::oUI:q_treeDoc:itemAbove( ::oUI:q_treeDoc:currentItem( 0 ) ) ):isValidObject()
IF ( qTWItem := ::oUI:q_treeDoc:itemAbove( ::oUI:q_treeDoc:currentItem( 0 ) ) ):hasValidPointer()
::oUI:q_treeDoc:setCurrentItem( qTWItem, 0 )
ENDIF
ENDIF

View File

@@ -171,7 +171,7 @@ FUNCTION hbide_execPopup( aPops, aqPos, qParent )
ELSEIF hb_isPointer( aqPos )
qPoint := qParent:mapToGlobal( QPoint( aqPos ) )
ENDIF
IF ( qAct := qPop:exec( qPoint ) ):isValidObject()
IF ( qAct := qPop:exec( qPoint ) ):hasValidPointer()
cAct := qAct:text()
FOR EACH a_ IN aPops
IF hb_isObject( a_[ 1 ] )

View File

@@ -349,7 +349,7 @@ METHOD IdeSkeletons:selectByMenuAndPostText( qEdit )
qMenu:addAction( a_[ 1 ] )
NEXT
IF ( qAct := qMenu:exec( qEdit:mapToGlobal( QPoint( qRect:x(), qRect:y() ) ) ) ):isValidObject()
IF ( qAct := qMenu:exec( qEdit:mapToGlobal( QPoint( qRect:x(), qRect:y() ) ) ) ):hasValidPointer()
IF !empty( cText := ::getText( qAct:text() ) )
::postText( qEdit, cText )
ENDIF

View File

@@ -62,7 +62,8 @@ CLASS HbQtObjectHandler
VAR pEvents
METHOD from( xObject )
METHOD isValidObject()
METHOD fromPointer( pPtr )
METHOD hasValidPointer()
METHOD connect( cnEvent, bBlock )
METHOD disconnect( cnEvent )
@@ -73,11 +74,10 @@ ENDCLASS
/*----------------------------------------------------------------------*/
METHOD HbQtObjectHandler:isValidObject()
RETURN __hbqt_IsValidPointer( ::pPtr )
/*----------------------------------------------------------------------*/
/* NOTE: Deprecated: passing raw pointers to this function
TODO: Generate RTE when non QT object is passed.
TODO: Move thid to class implementation level so that proper object
type checking can be done. */
METHOD HbQtObjectHandler:from( xObject )
LOCAL pPtr
IF hb_isPointer( pPtr := hbqt_ptr( xObject ) )
@@ -87,6 +87,24 @@ METHOD HbQtObjectHandler:from( xObject )
/*----------------------------------------------------------------------*/
/* TODO: Drop this function when all raw QT pointers are fully eliminated from .prg level. */
METHOD HbQtObjectHandler:fromPointer( pPtr )
IF hb_isPointer( pPtr )
::pPtr := pPtr
ELSE
hbqt_Error()
ENDIF
RETURN Self
/*----------------------------------------------------------------------*/
/* TODO: Drop this function, as it's not desired to have invalid QT pointers wrapped
into valid .prg level QT objects. */
METHOD HbQtObjectHandler:hasValidPointer()
RETURN __hbqt_IsValidPointer( ::pPtr )
/*----------------------------------------------------------------------*/
METHOD HbQtObjectHandler:onError()
LOCAL cMsg := __GetMessage()
LOCAL oError

View File

@@ -188,6 +188,22 @@ void * hbqt_pPtrFromObj( int iParam )
}
}
HB_FUNC( HBQT_ISOBJECT )
{
PHB_ITEM pParam = hb_param( 1, HB_IT_OBJECT );
if( pParam )
{
hb_vmPushSymbol( hb_dynsymSymbol( hb_dynsymFindName( "PPTR" ) ) );
hb_vmPush( pParam );
hb_vmSend( 0 );
hb_retl( hb_param( -1, HB_IT_POINTER ) != NULL );
}
else
hb_retl( HB_FALSE );
}
HB_FUNC( HBQT_PTR )
{
PHB_ITEM pParam = hb_param( 1, HB_IT_ANY );

View File

@@ -35,6 +35,7 @@ DYNAMIC HBQTOBJECTHANDLER
DYNAMIC HBQT_ERROR
DYNAMIC HBQT_FINDCHILD
DYNAMIC HBQT_ISEQUALGCQTPOINTER
DYNAMIC HBQT_ISOBJECT
DYNAMIC HBQT_PTR
DYNAMIC HB_HBQEVENTS
DYNAMIC HB_HBQSLOTS

View File

@@ -274,7 +274,7 @@ METHOD XbpListBox:execSlot( cSlot, p )
IF cSlot == "customContextMenuRequested(QPoint)"
IF hb_isBlock( ::hb_contextMenu )
qPos := QPoint( p )
IF ( qItm := ::oWidget:itemAt( qPos ) ):isValidObject()
IF ( qItm := ::oWidget:itemAt( qPos ) ):hasValidPointer()
IF ( n := ascan( ::aItems, {|o| hbqt_IsEqualGcQtPointer( o, qItm ) } ) ) > 0
qPt := ::oWidget:mapToGlobal( QPoint( p ) )
eval( ::hb_contextMenu, { qPt:x(), qPt:y() }, NIL, ::aItems[ n ] )
@@ -363,7 +363,7 @@ METHOD XbpListBox:clear( lConnect )
qItm := NIL
NEXT
::aItems := {}
IF ::oWidget:isValidObject()
IF ::oWidget:hasValidPointer()
IF lConnect
::oWidget:clear()
ENDIF

View File

@@ -207,7 +207,7 @@ METHOD XbpTreeView:execSlot( cSlot, p )
CASE cSlot == "customContextMenuRequested(QPoint)"
IF hb_isBlock( ::hb_contextMenu )
qPos := QPoint( p )
IF ( qItem := ::oWidget:itemAt( qPos ) ):isValidObject()
IF ( qItem := ::oWidget:itemAt( qPos ) ):hasValidPointer()
IF ( n := ascan( ::aItems, {|o| hbqt_IsEqualGcQtPointer( o:oWidget, qItem ) } ) ) > 0
qPt := ::oWidget:mapToGlobal( QPoint( p ) )
eval( ::hb_contextMenu, { qPt:x(), qPt:y() }, NIL, ::aItems[ n ] )

View File

@@ -381,7 +381,7 @@ METHOD XbpWindow:setQtProperty( cProperty )
METHOD XbpWindow:postCreate()
::status := iif( ::oWidget:isValidObject(), XBP_STAT_CREATE, XBP_STAT_FAILURE )
::status := iif( ::oWidget:hasValidPointer(), XBP_STAT_CREATE, XBP_STAT_FAILURE )
RETURN Self