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:
@@ -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)
|
||||
|
||||
@@ -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 );
|
||||
|
||||
@@ -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
|
||||
|
||||
|
||||
@@ -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;
|
||||
|
||||
@@ -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();
|
||||
|
||||
@@ -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
|
||||
|
||||
/*----------------------------------------------------------------------*/
|
||||
|
||||
|
||||
@@ -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 )
|
||||
|
||||
@@ -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 )
|
||||
|
||||
Reference in New Issue
Block a user