⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 qobject.cpp

📁 PIXIL is a small footprint operating environment, complete with PDA PIM applications, a browser and
💻 CPP
字号:
#include "qobject.h"#include "qevent.h"#include <Fl.H>#include <math.h>#include <unistd.h>QObject::__timerobj * QObject::m_TimerList[MAXTIMERS];bool QObject::m_bInit = false;QObject::__timerobj::__timerobj(QObject * p, int interval){  m_pThis = p;  m_nInterval = interval;}void QObject::InitializeTimers(){  for(int i=0; i<MAXTIMERS; i++)    m_TimerList[i] = NULL;  m_bInit = true;}QObject::~QObject(){  for(int i=0; i<MAXTIMERS; i++)  {    if(m_TimerList[i])    {      if(m_TimerList[i]->getThis() == this)      {	delete m_TimerList[i];	m_TimerList[i] = NULL;      }    }  }  //  removeThis();}void QObject::addSender(QObject * p){  m_Senders.append(p);}void QObject::removeThis(){  QDictIterator<QConnectionList> i(m_ConnectionDict);  QConnectionList * list;  QConnection * c;  QObject * p;  while( (p = m_Senders.take(0))) {    p->removeMe(this);  }  // remove me from all the sender lists  while((list = i.current())) {    for(c = list->first(); c; c = list->next()) {      if(c->object()) {	((QObject*)c->object())->removeSender(this);      }    }    ++i;  }}void QObject::removeSender(QObject * o){  while(m_Senders.removeRef(o));}void QObject::removeMe(QObject * p){  QDictIterator<QConnectionList> i(m_ConnectionDict);  QConnectionList * list;  QConnection * c;  while((list = i.current())) {    for(c = list->first(); c; c = list->next()) {      if(c->object() == p) {	list->removeRef(c);	//	delete c;      }    }    ++i;  }}void QObject::initMetaObject(){}void QObject::killTimer(int id){  DestroyTimer(id);}void QObject::TimerFire(){   QTimerEvent e;  timerEvent(&e);}void QObject::timerEvent(QTimerEvent * e){  cerr << "QObject::timerEvent base called\n";}int QObject::startTimer(int interval){  __timerobj * t = CreateTimer(interval);   Fl::add_timeout(interval * .001, runthread, t);  return t->getId();}QObject::__timerobj * QObject::CreateTimer(int interval){   __timerobj * t = new __timerobj(this,interval);  if(!m_bInit)    InitializeTimers();  for(int i=1; i<MAXTIMERS; i++)  {    if(m_TimerList[i] == NULL)    {      m_TimerList[i] = t;      t->setId(i);      return t;      break;    }  }   return NULL;}	void QObject::DestroyTimer(int timer){  if(m_TimerList[timer])  {    Fl::remove_timeout(runthread,m_TimerList[timer]);    delete m_TimerList[timer];  }  m_TimerList[timer] = NULL;}void QObject::runthread(void * p){  for(int i=0; i<MAXTIMERS; i++)  {    if(m_TimerList[i] == p)    {      __timerobj * t = (__timerobj*)p;      if(t->getThis())	t->getThis()->TimerFire();      // make sure that this timer hasn't been removed      // in the callback      if(m_TimerList[i] == t) {	int id = t->getId();		if(m_TimerList[id])	  Fl::add_timeout(t->getInterval() * .001 ,runthread,p);      }      break;    }  }}bool QObject::connect ( const QObject * sender, 			const char * signal, const QObject * receiver,			const char * member ){   if(!sender->metaObject())    ((QObject*)sender)->initMetaObject();  if(!receiver->metaObject())    ((QObject*)receiver)->initMetaObject();  QString _signal,_member,tmp;  tmp = signal+1;  _signal = tmp.stripWhiteSpace();  tmp = member;  _member = tmp.stripWhiteSpace();  if(!((QObject*)sender)->m_ConnectionDict[_signal])    ((QObject*)sender)->m_ConnectionDict.insert(_signal,new QConnectionList());    QConnectionList * cl = ((QObject*)sender)->m_ConnectionDict[_signal];  QMember p = receiver->findslot(_member);  //  cerr << "Connecting " << _signal << " with " << _member << "(" << p << ")\n";    cl->append(new QConnection(receiver,p, _member));  //  cl->append(new QConnection(receiver,  //			     receiver->findslot(_member), _member));  ((QObject*)receiver)->addSender((QObject*)sender);  return true;}bool QObject::connect ( const QObject * sender, const char * signal, 			const char * member ) const {   return connect(sender,signal,this,member);}QMember QObject::findsignal(const char * signal) const{  QString _signal,tmp;  tmp = signal;  _signal = tmp.stripWhiteSpace();  //  cerr << "QObject::findsignal " << className() << "::" << signal << "\n";  if(metaObject()) {    QMember mbr = metaObject()->findsignal(_signal);    return mbr;  } else {    return 0;  }}QMember QObject::findslot(const char * slot) const{  QString _slot,tmp;  tmp = slot;  _slot = tmp.stripWhiteSpace();  //  cerr << "QObject::findslot " << className() << "::" << slot << "\n";  if(metaObject()) {    QMember mbr = metaObject()->findslot(_slot);    return mbr;  } else {    return 0;  }}void QObject::activate_signal(const char * signal, const char * p0) {  QString _signal,tmp;  tmp = signal;  _signal = tmp.stripWhiteSpace();  QConnectionList * cl = m_ConnectionDict[_signal];    //  cerr << " QObject::activate_signal " << _signal << " cl = " << cl  << "\n";  //  cerr << " QObject::activate_signal this =  " << this << "\n";  if(!cl)    return;  //   cerr << "  count = " << cl->count() << "\n";  QConnection * c;  for(unsigned int i=0; i<cl->count(); i++) {    c = (*cl)[i];    if(c) {      typedef void (QObject::*RT1)(const char *);      typedef RT1 * PRT1;      //      cerr << "   Going to call " << c << "\n";      RT1  qm = *((PRT1)(c->member()));      //      cerr << "   c->object = " << c->object() << " from " << this << "\n";      if(qm)	(((QObject*)c->object())->*qm)(p0);      //      cerr << "   returned from call\n";    }  }}void QObject::activate_signal(const char * signal) {   QString _signal,tmp;  tmp = signal;  _signal = tmp.stripWhiteSpace();  QConnectionList * cl = m_ConnectionDict[_signal];  //  cerr << " QObject::activate_signal " << _signal << " cl = " << cl << "(" << cl->count() << ")\n";  //cerr << " QObject::activate_signal this =  " << this << "\n";  if(!cl)    return;  QConnection * c;  for(unsigned int i=0; i<cl->count(); i++) {    c = (*cl)[i];    if(c) {      QMember qm = *c->member();      if(qm)	(((QObject*)c->object())->*qm)();    }  }}void QObject::activate_signal(const char * signal, int p0) {  QString _signal,tmp;  tmp = signal;  _signal = tmp.stripWhiteSpace();  QConnectionList * cl = m_ConnectionDict[_signal];    //  cerr << " QObject::activate_signal " << _signal << " cl = " << cl << "\n";  //  cerr << " QObject::activate_signal this =  " << this << "\n";  if(!cl)    return;  QConnection * c;  for(unsigned int i=0; i<cl->count(); i++) {    c = (*cl)[i];    if(c) {      typedef void (QObject::*RT1)(int);      typedef RT1 * PRT1;      RT1  qm = *((PRT1)(c->member()));      if(qm)	(((QObject*)c->object())->*qm)(p0);    }  }}QConnectionList * QObject::receivers(const char * signal) const {  QString _signal,tmp;  tmp = signal;  _signal = tmp.stripWhiteSpace();  QConnectionList * cl = ((QObject*)this)->m_ConnectionDict[_signal];  return cl;}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -