2012-06-13 11:41 UTC+0200 Viktor Szakats (vszakats syenar.net)

* contrib/hbqt/qtcore/hbqt_bind.cpp
  * contrib/hbqt/qtcore/hbqt_hbqevents.cpp
  * contrib/hbqt/qtcore/hbqt_hbqslots.cpp
  * contrib/hbqt/qtcore/hbqt_misc.prg
  * contrib/hbqt/qtcore/hbqt_pointer.cpp
  * contrib/hbqt/qtcore/hbqt.h
  * contrib/hbqt/qtcore/hbqtcore.hbx
    - __HBQT_ISPOINTER()
    + TODO for HBQT_ISEQUAL()
    - __HBQT_PTR() from .hbx
    ! fixed insane inverse camel casing in hbqt_bindGetHbObjectBYqtObject()
    + TOFIX for MT which is completely broken now.
    - deleted '#if 1's. Experiment locally, do not readd them.
    - deleted code protected by '#if 0'. Experiment locally, do not readd them.
    + QUESTION for code like: 'if( 1 == 1 )'
    - HBQT_PROMOTEWIDGET2() -> HBQT_PROMOTEWIDGET()
      .hbx is now in sync with the code
    + QUESTION for HbQtObjectHandler (_three_ different lists for events? two for slots? Is this needed?)
    ! hEvents -> __hEvents, made PROTECTED. Fix other code if this broke anything.
    ! __Slots/__Events made PROTECTED. Fix other code if this broke anything.
    ! _destroy() -> __destroy(). Fix other code if this broke anything.

    ; I'd like to ask HBQT developers to enable in their editor
      the deletion of line-ending spaces and to enable
      HB_REBUILD_EXTERN=yes in their local configuration to
      keep .hbx files up to date (asking these for the umpteenth times!).
This commit is contained in:
Viktor Szakats
2012-06-13 09:41:38 +00:00
parent 69fdb3e9ac
commit c3ae2c478d
8 changed files with 125 additions and 136 deletions

View File

@@ -16,6 +16,34 @@
The license applies to all entries newer than 2009-04-28.
*/
2012-06-13 11:41 UTC+0200 Viktor Szakats (vszakats syenar.net)
* contrib/hbqt/qtcore/hbqt_bind.cpp
* contrib/hbqt/qtcore/hbqt_hbqevents.cpp
* contrib/hbqt/qtcore/hbqt_hbqslots.cpp
* contrib/hbqt/qtcore/hbqt_misc.prg
* contrib/hbqt/qtcore/hbqt_pointer.cpp
* contrib/hbqt/qtcore/hbqt.h
* contrib/hbqt/qtcore/hbqtcore.hbx
- __HBQT_ISPOINTER()
+ TODO for HBQT_ISEQUAL()
- __HBQT_PTR() from .hbx
! fixed insane inverse camel casing in hbqt_bindGetHbObjectBYqtObject()
+ TOFIX for MT which is completely broken now.
- deleted '#if 1's. Experiment locally, do not readd them.
- deleted code protected by '#if 0'. Experiment locally, do not readd them.
+ QUESTION for code like: 'if( 1 == 1 )'
- HBQT_PROMOTEWIDGET2() -> HBQT_PROMOTEWIDGET()
.hbx is now in sync with the code
+ QUESTION for HbQtObjectHandler (_three_ different lists for events? two for slots? Is this needed?)
! hEvents -> __hEvents, made PROTECTED. Fix other code if this broke anything.
! __Slots/__Events made PROTECTED. Fix other code if this broke anything.
! _destroy() -> __destroy(). Fix other code if this broke anything.
; I'd like to ask HBQT developers to enable in their editor
the deletion of line-ending spaces and to enable
HB_REBUILD_EXTERN=yes in their local configuration to
keep .hbx files up to date (asking these for the umpteenth times!).
2012-06-13 01:15 UTC-0800 Pritpal Bedi (bedipritpal@hotmail.com)
* contrib/hbide/hbqreportsmanager.prg
* contrib/hbide/ideharbourhelp.prg
@@ -24,7 +52,7 @@
- Removed: all calls to :hasAValidPointer().
* contrib/hbqt/qtcore/hbqt_bind.cpp
+ Added: more debug code to view what happens when
+ Added: more debug code to view what happens when
appln exits.
* contrib/hbqt/qtcore/hbqt_hbqevents.cpp
@@ -41,7 +69,7 @@
- Removed: the use of :pPtr variable plus method :hasValidPointer().
* contrib/hbqt/tests/demoqt.prg
! Reworked: to adapt to revamped hbQT where variable is not needed
! Reworked: to adapt to revamped hbQT where variable is not needed
to hold the built widget if parent is provided or is :connect()ed.
2012-06-13 01:48 UTC+0200 Viktor Szakats (harbour syenar.net)

View File

@@ -118,7 +118,7 @@ extern HB_EXPORT void hbqt_addDeleteList( PHB_ITEM item ); /* populate a list of
HB_EXPORT PHB_ITEM hbqt_bindGetHbObject( PHB_ITEM pItem, void * qtObject, const char * szClassFunc, PHBQT_DEL_FUNC pDelete, int iFlags );
HB_EXPORT PHB_ITEM hbqt_bindSetHbObject( PHB_ITEM pItem, void * qtObject, const char * szClassName, PHBQT_DEL_FUNC pDelFunc, int iFlags );
HB_EXPORT PHB_ITEM hbqt_bindGetHbObjectBYqtObject( void * qtObject );
HB_EXPORT PHB_ITEM hbqt_bindGetHbObjectByQtObject( void * qtObject );
HB_EXPORT void * hbqt_bindGetQtObject( PHB_ITEM pObject );
HB_EXPORT void hbqt_bindSetOwner( void * qtObject, HB_BOOL fOwner );
HB_EXPORT void hbqt_bindDestroyHbObject( PHB_ITEM pObject );

View File

@@ -52,6 +52,8 @@
*/
/*----------------------------------------------------------------------*/
/* TOFIX: completely broken for MT */
#include "hbapi.h"
#include "hbapiitm.h"
#include "hbstack.h"
@@ -115,25 +117,23 @@ static void hbqt_bind_init( void* cargo )
PHB_ITEM hbqt_bindGetHbObject( PHB_ITEM pItem, void * qtObject, const char * szClassName, PHBQT_DEL_FUNC pDelFunc, int iFlags )
{
#if 1
char * pname = ( char* ) hb_xgrab( 200 );
char * pname1 = ( char* ) hb_xgrab( 200 );
char * pname = ( char * ) hb_xgrab( 200 );
char * pname1 = ( char * ) hb_xgrab( 200 );
HB_TRACE( HB_TR_DEBUG, ( ".................HARBOUR_REQUEST_BIND_OBJECT( %p, %i, %s, %s, %s ).................", qtObject, iFlags, szClassName, hb_procname( 0, pname, HB_TRUE ), hb_procname( 1, pname1, HB_TRUE ) ) );
hb_xfree( pname );
hb_xfree( pname1 );
#endif
PHB_ITEM pObject = NULL;
if( qtObject == NULL )
return pObject;
PHB_SYMB pClassFunc = hb_dynsymGetSymbol( szClassName );
if( pClassFunc == NULL )
return pObject;
PHBQT_BIND bind;
HBQT_BIND_LOCK
bind = s_hbqt_binds;
while( bind )
@@ -152,7 +152,7 @@ PHB_ITEM hbqt_bindGetHbObject( PHB_ITEM pItem, void * qtObject, const char * szC
hb_vmPushSymbol( pClassFunc );
hb_vmPushNil();
hb_vmDo( 0 );
if( HB_IS_OBJECT( hb_stackReturnItem() ) && hb_vmRequestQuery() == 0 )
{
if( pItem == NULL )
@@ -175,9 +175,9 @@ PHB_ITEM hbqt_bindGetHbObject( PHB_ITEM pItem, void * qtObject, const char * szC
bind->next = s_hbqt_binds;
s_hbqt_binds = bind;
}
bind->hbObject = hb_arrayId( pObject );
if( iFlags & HBQT_BIT_QOBJECT )
{
if( s_destroyer == NULL )
@@ -185,19 +185,19 @@ PHB_ITEM hbqt_bindGetHbObject( PHB_ITEM pItem, void * qtObject, const char * szC
if( pDelFunc != NULL )
QObject::connect( ( QObject * ) qtObject, SIGNAL(destroyed(QObject*)), s_destroyer, SLOT(destroyer()) );
HB_TRACE( HB_TR_DEBUG, ( "hbqt_bindGetHbObject( %p )...%s", qtObject, szClassName ) );
hb_vmPushDynSym( s_dynsym_SETSLOTS ); /* initializes __Slots hash */
hb_vmPush( pObject );
hb_vmSend( 0 );
hb_vmPushDynSym( s_dynsym_SETEVENTS ); /* initializes __Events hash */
hb_vmPush( pObject );
hb_vmSend( 0 );
}
else
{
{
HB_TRACE( HB_TR_DEBUG, ( "hbqt_bindGetHbObject( %p )", qtObject ) );
}
}
}
}
HBQT_BIND_UNLOCK
@@ -223,8 +223,8 @@ PHB_ITEM hbqt_bindSetHbObject( PHB_ITEM pItem, void * qtObject, const char * szC
HBQT_BIND_LOCK
bind = s_hbqt_binds;
pObject = hb_param( 0, HB_IT_OBJECT );
if( 1 == 1 )
pObject = hb_param( 0, HB_IT_OBJECT );
if( 1 == 1 ) /* QUESTION: What is this? */
{
if( pObject && hb_vmRequestQuery() == 0 )
{
@@ -236,7 +236,7 @@ PHB_ITEM hbqt_bindSetHbObject( PHB_ITEM pItem, void * qtObject, const char * szC
hb_itemMove( pItem, pObject );
pObject = pItem;
}
bind = ( PHBQT_BIND ) hb_xgrab( sizeof( HBQT_BIND ) );
memset( bind, 0, sizeof( HBQT_BIND ) );
bind->qtObject = qtObject;
@@ -262,14 +262,14 @@ PHB_ITEM hbqt_bindSetHbObject( PHB_ITEM pItem, void * qtObject, const char * szC
HB_TRACE( HB_TR_DEBUG, ( "hbqt_bindSetHbObject( %p )", qtObject ) );
}
}
}
}
HBQT_BIND_UNLOCK
HB_TRACE( HB_TR_DEBUG, ( "hbqt_bindSetHbObject returns PHB_ITEM = %p", pObject ) );
return pObject;
}
PHB_ITEM hbqt_bindGetHbObjectBYqtObject( void * qtObject )
PHB_ITEM hbqt_bindGetHbObjectByQtObject( void * qtObject )
{
PHB_ITEM pObject = NULL;
@@ -325,7 +325,7 @@ void * hbqt_bindGetQtObject( PHB_ITEM pObject )
void hbqt_bindDestroyHbObject( PHB_ITEM pObject )
{
void * hbObject = hb_arrayId( pObject );
if( hbObject )
{
PHBQT_BIND * bind_ptr, bind;
@@ -337,7 +337,7 @@ void hbqt_bindDestroyHbObject( PHB_ITEM pObject )
if( bind->hbObject == hbObject )
{
HB_TRACE( HB_TR_DEBUG, ( "..............HARBOUR_DESTROY_BEGINS( %p, %i ).............. %s", bind->qtObject, bind->iFlags, bind->szClassName ) );
bool fObject = bind->iFlags & HBQT_BIT_QOBJECT;
QObject * obj = NULL;
const char * classname = NULL;
@@ -346,7 +346,7 @@ void hbqt_bindDestroyHbObject( PHB_ITEM pObject )
obj = ( QObject * ) bind->qtObject;
classname = obj->metaObject()->className();
}
if( bind->iFlags & HBQT_BIT_OWNER )
{
if( fObject )
@@ -364,18 +364,18 @@ void hbqt_bindDestroyHbObject( PHB_ITEM pObject )
bind->fDeleting = true;
bind->pDelFunc( bind->qtObject, bind->iFlags );
bind->fDeleting = false;
}
}
hb_xfree( bind );
HB_TRACE( HB_TR_DEBUG, ( " HARBOUR_DESTROYED_NO_PARENT_%s( %p )", classname, obj ) );
}
}
}
}
else
{
* bind_ptr = bind->next;
hb_xfree( bind );
HB_TRACE( HB_TR_DEBUG, ( "HARBOUR_DESTROYED_QTObjIsNull_%s( %p )", classname, obj ) );
}
}
}
else
{
@@ -387,19 +387,19 @@ void hbqt_bindDestroyHbObject( PHB_ITEM pObject )
bind->fDeleting = true;
bind->pDelFunc( bind->qtObject, bind->iFlags );
bind->fDeleting = false;
}
}
hb_xfree( bind );
HB_TRACE( HB_TR_DEBUG, ( "HARBOUR_DESTROYED.........( %p )", oobj ) );
Q_UNUSED( oobj );
}
}
}
else
{
{
HB_TRACE( HB_TR_DEBUG, ( "HARBOUR_DESTROYED_NOT_OWNED_BY_HARBOUR( %p )...%s", bind->qtObject, bind->szClassName ) );
* bind_ptr = bind->next;
hb_xfree( bind );
}
break;
hb_xfree( bind );
}
break;
}
bind_ptr = &bind->next;
}
@@ -410,7 +410,7 @@ void hbqt_bindDestroyHbObject( PHB_ITEM pObject )
void hbqt_bindDestroyQtObject( void * qtObject )
{
HB_TRACE( HB_TR_DEBUG, ( "..............QT_DESTROY_BEGINS( %p )..............", qtObject ) );
PHBQT_BIND * bind_ptr, bind;
HBQT_BIND_LOCK
@@ -420,12 +420,12 @@ void hbqt_bindDestroyQtObject( void * qtObject )
if( bind->qtObject == qtObject )
{
HB_TRACE( HB_TR_DEBUG, ( "..............QT_DESTROYING( %p ).............. %s ... fDeleting=%s", qtObject, bind->szClassName, bind->fDeleting ? "YES" : "NO" ) );
* bind_ptr = bind->next;
if( ! bind->fDeleting )
{
hb_xfree( bind );
}
}
break;
}
bind_ptr = &bind->next;
@@ -447,7 +447,7 @@ void hbqt_bindSetOwner( void * qtObject, HB_BOOL fOwner )
if( fOwner == HB_TRUE )
bind->iFlags = bind->iFlags | HBQT_BIT_OWNER;
else
bind->iFlags = bind->iFlags & ~( HBQT_BIT_OWNER );
bind->iFlags = bind->iFlags & ~( HBQT_BIT_OWNER );
break;
}
bind = bind->next;
@@ -501,7 +501,7 @@ void hbqt_bindDelSlot( PHB_ITEM pSenderObject, int iSignalid, PHB_ITEM pCode )
{
HB_TRACE( HB_TR_DEBUG, ( "hbqt_bindDelSlot( PHB_ITEM pSenderObject, int iSignalid, PHB_ITEM pCode )" ) );
hb_arraySize( pArray, 0 );
}
}
else
{
void * id = hb_codeblockId( pCode );
@@ -612,7 +612,7 @@ void hbqt_bindDelEvent( PHB_ITEM pSenderObject, int iEventId, PHB_ITEM pCode )
{
HB_TRACE( HB_TR_DEBUG, ( "hbqt_bindDelEvent( %i )", iEventId ) );
hb_arraySize( pArray, 0 );
}
}
else
{
void * id = hb_codeblockId( pCode );
@@ -750,20 +750,14 @@ void hbqt_bindDelChild( PHB_ITEM pObject, PHB_ITEM pChild )
*/
HB_FUNC( __HBQT_DESTROY )
{
#if 1
PHB_ITEM pObject = hb_param( 1, HB_IT_OBJECT );
if( pObject == NULL )
pObject = hb_stackSelfItem();
if( pObject )
hbqt_bindDestroyHbObject( pObject );
#else
PHB_ITEM pObject = hb_param( 1, HB_IT_OBJECT );
if( pObject )
hbqt_bindDestroyHbObject( pObject );
#endif
}
HB_FUNC( HBQT_PROMOTEWIDGET2 )
HB_FUNC( HBQT_PROMOTEWIDGET )
{
if( hbqt_par_isDerivedFrom( 1, "QWIDGET" ) && HB_ISCHAR( 2 ) )
{
@@ -820,4 +814,3 @@ HB_CALL_ON_STARTUP_END( _hbqt_bind_init_ )
#define HB_DATASEG_BODY HB_DATASEG_FUNC( _hbqt_bind_init_ )
#include "hbiniseg.h"
#endif

View File

@@ -84,7 +84,7 @@ static QList<QByteArray> s_lstCreateObj;
void hbqt_events_register_createobj( QEvent::Type eventtype, QByteArray szCreateObj )
{
{
int iIndex = s_lstEvent.indexOf( eventtype );
if( iIndex == -1 )
@@ -122,7 +122,7 @@ HBQEvents::~HBQEvents()
int HBQEvents::hbConnect( PHB_ITEM pObj, int event, PHB_ITEM bBlock )
{
HB_TRACE( HB_TR_DEBUG, ( "HBQEvents::hbConnect( %i )", event ) );
int nResult = -1;
if( hb_itemType( bBlock ) & HB_IT_BLOCK )
@@ -133,14 +133,14 @@ int HBQEvents::hbConnect( PHB_ITEM pObj, int event, PHB_ITEM bBlock )
hbqt_bindAddEvent( pObj, event, bBlock );
nResult = 0;
}
}
}
return nResult;
}
int HBQEvents::hbDisconnect( PHB_ITEM pObj, int event )
{
HB_TRACE( HB_TR_DEBUG, ( "HBQEvents::hbDisconnect( %i )", event ) );
int nResult = -1;
QObject * object = ( QObject * ) hbqt_get_ptr( pObj );
@@ -148,7 +148,7 @@ int HBQEvents::hbDisconnect( PHB_ITEM pObj, int event )
{
hbqt_bindDelEvent( pObj, event, NULL );
nResult = 0;
}
}
return nResult;
}
@@ -162,23 +162,23 @@ bool HBQEvents::eventFilter( QObject * object, QEvent * event )
if( ( int ) eventtype > 0 )
{
int eventId = s_lstEvent.indexOf( eventtype );
if( eventId > -1 && hb_vmRequestReenter() )
{
PHB_ITEM pArray = hbqt_bindGetEvents( hbqt_bindGetHbObjectBYqtObject( object ), eventtype );
PHB_ITEM pArray = hbqt_bindGetEvents( hbqt_bindGetHbObjectByQtObject( object ), eventtype );
if( pArray )
{
PHB_ITEM pItem = hbqt_bindGetHbObject( NULL, ( void * ) event, ( s_lstCreateObj.at( eventId ) ), NULL, HBQT_BIT_NONE );
stopTheEventChain = ( bool ) hb_itemGetL( hb_vmEvalBlockV( hb_arrayGetItemPtr( pArray, 1 ), 1, pItem ) );
hb_itemRelease( pItem );
hb_itemRelease( pArray );
}
}
hb_vmRequestRestore();
}
}
if( eventtype == QEvent::Close )
{
return true;
}
}
}
}
return stopTheEventChain;

View File

@@ -121,7 +121,7 @@ HBQSlots::~HBQSlots()
int HBQSlots::hbConnect( PHB_ITEM pObj, char * pszSignal, PHB_ITEM bBlock )
{
HB_TRACE( HB_TR_DEBUG, ( "HBQSlots::hbConnect( %s )", pszSignal ) );
int nResult = 1;
if( true )
@@ -150,14 +150,14 @@ int HBQSlots::hbConnect( PHB_ITEM pObj, char * pszSignal, PHB_ITEM bBlock )
nResult = 0;
listBlock << NULL;
char szSlotName[ 20 ];
hb_snprintf( szSlotName, sizeof( szSlotName ), "SLOT_%d", slotId );
object->setProperty( szSlotName, ( int ) listBlock.size() );
object->setProperty( pszSignal, ( int ) listBlock.size() );
HB_TRACE( HB_TR_DEBUG, ( "HBQSlots::hbConnect( %s ) signalId=%i, %p", pszSignal, signalId, object ) );
HB_TRACE( HB_TR_DEBUG, ( "HBQSlots::hbConnect( %s ) signalId=%i, %p", pszSignal, signalId, object ) );
hbqt_bindAddSlot( pObj, signalId, bBlock );
}
else
@@ -188,9 +188,9 @@ int HBQSlots::hbConnect( PHB_ITEM pObj, char * pszSignal, PHB_ITEM bBlock )
int HBQSlots::hbDisconnect( PHB_ITEM pObj, char * pszSignal )
{
HB_TRACE( HB_TR_DEBUG, ( "HBQSlots::hbDisconnect( %s )", pszSignal ) );
int nResult = 1;
QObject * object = ( QObject * ) hbqt_get_ptr( pObj );
if( object )
{
@@ -207,9 +207,9 @@ int HBQSlots::hbDisconnect( PHB_ITEM pObj, char * pszSignal )
{
if( QMetaObject::disconnect( object, signalId, 0, 0 ) )
{
HB_TRACE( HB_TR_DEBUG, ( "HBQSlots::hbDisconnect( %s ) %i", pszSignal, i ) );
HB_TRACE( HB_TR_DEBUG, ( "HBQSlots::hbDisconnect( %s ) %i", pszSignal, i ) );
nResult = 0;
}
}
else
nResult = 5;
}
@@ -217,10 +217,10 @@ int HBQSlots::hbDisconnect( PHB_ITEM pObj, char * pszSignal )
nResult = 4;
if( nResult == 0 )
{
HB_TRACE( HB_TR_DEBUG, ( "HBQSlots::hbDisConnect( %s ) signalId=%i, %p", pszSignal, signalId, object ) );
{
HB_TRACE( HB_TR_DEBUG, ( "HBQSlots::hbDisConnect( %s ) signalId=%i, %p", pszSignal, signalId, object ) );
hbqt_bindDelSlot( pObj, signalId, NULL );
}
}
}
else
nResult = 3;
@@ -291,13 +291,13 @@ int HBQSlots::qt_metacall( QMetaObject::Call c, int id, void ** arguments )
if( hb_vmRequestReenter() )
{
PHB_ITEM p = hbqt_bindGetSlots( hbqt_bindGetHbObjectBYqtObject( object ), id );
PHB_ITEM p = hbqt_bindGetSlots( hbqt_bindGetHbObjectByQtObject( object ), id );
if( p )
{
if( parameterCount == 0 )
{
hb_evalBlock0( hb_arrayGetItemPtr( p, 1 ) );
}
}
else
{
int paramId = s_argCombinations.indexOf( paramString );
@@ -306,7 +306,7 @@ int HBQSlots::qt_metacall( QMetaObject::Call c, int id, void ** arguments )
{
pCallback( ( PHB_ITEM * ) hb_arrayGetItemPtr( p, 1 ), arguments, pList );
}
}
}
hb_itemRelease( p );
}
hb_vmRequestRestore();

View File

@@ -60,20 +60,22 @@
CREATE CLASS HbQtObjectHandler
VAR __pSlots PROTECTED
VAR __pEvents PROTECTED
/* QUESTION: _three_ different lists for events? two for slots? Is this needed? */
VAR hEvents INIT {=>}
VAR __pSlots PROTECTED
VAR __pEvents PROTECTED
VAR __Slots
VAR __Events
VAR __hEvents PROTECTED INIT { => }
VAR __Slots PROTECTED
VAR __Events PROTECTED
METHOD connect( cnEvent, bBlock )
METHOD disconnect( cnEvent )
METHOD setSlots()
METHOD setEvents()
DESTRUCTOR _destroy()
DESTRUCTOR __destroy()
ERROR HANDLER onError()
ENDCLASS
@@ -85,20 +87,20 @@ METHOD HbQtObjectHandler:setSlots()
IF empty( ::__Slots )
::__Slots := {=>}
hb_hDefault( ::__Slots, {} )
ENDIF
RETURN Self
ENDIF
RETURN Self
/*----------------------------------------------------------------------*/
METHOD HbQtObjectHandler:setEvents()
IF empty( ::__Events )
::__Events := {=>}
::__Events := { => }
hb_hDefault( ::__Events, {} )
ENDIF
RETURN Self
ENDIF
RETURN Self
/*----------------------------------------------------------------------*/
@@ -140,13 +142,13 @@ METHOD HbQtObjectHandler:connect( cnEvent, bBlock )
RETURN .f.
ENDIF
IF hb_hHasKey( ::hEvents, cnEvent )
IF HB_ISNUMERIC( ::hEvents[ cnEvent ] )
IF hb_hHasKey( ::__hEvents, cnEvent )
IF HB_ISNUMERIC( ::__hEvents[ cnEvent ] )
::__pEvents:hbDisconnect( Self, cnEvent )
ELSE
::__pSlots:hbDisconnect( Self, cnEvent )
ENDIF
hb_hDel( ::hEvents, cnEvent )
hb_hDel( ::__hEvents, cnEvent )
ENDIF
SWITCH ValType( cnEvent )
@@ -158,7 +160,7 @@ METHOD HbQtObjectHandler:connect( cnEvent, bBlock )
SWITCH nResult
CASE 0
::hEvents[ cnEvent ] := cnEvent
::__hEvents[ cnEvent ] := cnEvent
RETURN .T.
CASE 8 /* QT connect call failure */
RETURN .F.
@@ -181,7 +183,7 @@ METHOD HbQtObjectHandler:connect( cnEvent, bBlock )
SWITCH nResult
CASE 0
::hEvents[ cnEvent ] := cnEvent
::__hEvents[ cnEvent ] := cnEvent
RETURN .T.
CASE -3 /* bBlock not supplied */
RETURN .F.
@@ -206,7 +208,7 @@ METHOD HbQtObjectHandler:disconnect( cnEvent )
RETURN .f.
ENDIF
IF ! hb_hHasKey( ::hEvents, cnEvent )
IF ! hb_hHasKey( ::__hEvents, cnEvent )
RETURN .f.
ENDIF
@@ -220,7 +222,7 @@ METHOD HbQtObjectHandler:disconnect( cnEvent )
CASE 0
CASE 4 /* signal not found in object */
CASE 5 /* disconnect failure */
hb_hDel( ::hEvents, cnEvent )
hb_hDel( ::__hEvents, cnEvent )
RETURN .T.
CASE 1 /* wrong slot container, no connect was called yet */
CASE 2 /* object has been already freed */
@@ -236,7 +238,7 @@ METHOD HbQtObjectHandler:disconnect( cnEvent )
SWITCH nResult
CASE 0
hb_hDel( ::hEvents, cnEvent )
hb_hDel( ::__hEvents, cnEvent )
RETURN .T.
CASE -3 /* event not found */
CASE -2 /* event not found */
@@ -255,34 +257,12 @@ METHOD HbQtObjectHandler:disconnect( cnEvent )
/*----------------------------------------------------------------------*/
METHOD HbQtObjectHandler:_destroy()
METHOD HbQtObjectHandler:__destroy()
HB_TRACE( HB_TR_DEBUG, " __destroy()", __objDerivedFrom( Self, "QOBJECT" ), __objGetClsName( Self ) )
HB_TRACE( HB_TR_DEBUG, " _destroy()", __objDerivedFrom( Self, "QOBJECT" ), __objGetClsName( Self ) )
__hbqt_destroy( Self )
#if 0
IF ! __objDerivedFrom( Self, "QOBJECT" )
RETURN NIL
ENDIF
IF empty( ::__pSlots ) .AND. empty( ::__pEvents )
RETURN NIL
ENDIF
FOR EACH cnEvent IN ::hEvents
IF HB_ISNUMERIC( cnEvent ) .AND. ! empty( ::__pEvents )
::__pEvents:hbDisconnect( Self, cnEvent )
ELSEIF HB_ISSTRING( cnEvent ) .AND. ! empty( ::__pSlots )
::__pSlots:hbDisconnect( Self, cnEvent )
ENDIF
NEXT
::hEvents := NIL
::__pSlots := NIL
::__pEvents := NIL
#endif
RETURN NIL
/*----------------------------------------------------------------------*/

View File

@@ -91,21 +91,11 @@ void hbqt_par_detach_ptrGC( int iParam )
HB_TRACE( HB_TR_DEBUG, ( "hbqt_par_detach_ptrGC( %d )", iParam ) );
if( HB_ISOBJECT( iParam ) )
{
hbqt_bindSetOwner( hbqt_bindGetQtObject( hb_param( iParam, HB_IT_OBJECT ) ), HB_FALSE );
}
}
HB_FUNC( __HBQT_ISPOINTER )
{
PHB_ITEM pObject = hb_stackSelfItem();
if( pObject == NULL )
pObject = hb_param( 1, HB_IT_OBJECT );
if( pObject )
hb_retl( ! ( hbqt_bindGetQtObject( pObject ) == NULL ) );
else
hb_retl( HB_FALSE );
hbqt_bindSetOwner( hbqt_bindGetQtObject( hb_param( iParam, HB_IT_OBJECT ) ), HB_FALSE );
}
}
/* TODO: Delete this. */
HB_FUNC( HBQT_ISEQUAL )
{
hb_retl( hbqt_par_ptr( 1 ) == hbqt_par_ptr( 2 ) );
@@ -123,7 +113,7 @@ HB_FUNC( __HBQT_SETUTF8 )
if( cdp )
{
hb_vmSetCDP( cdp );
}
}
}
PHB_ITEM hbqt_defineClassBegin( const char * pszClsName, PHB_ITEM s_oClass, const char * pszParentClsStr )

View File

@@ -169,8 +169,6 @@ DYNAMIC QVERSION
DYNAMIC __HBQTCORE
DYNAMIC __HBQT_DESTROY
DYNAMIC __HBQT_ERROR
DYNAMIC __HBQT_ISPOINTER
DYNAMIC __HBQT_PTR
DYNAMIC __HBQT_SETUTF8
#if defined( __HBEXTREQ__ ) .OR. defined( __HBEXTERN__HBQTCORE__REQUEST )