/*************************************************************************** xsldbgevent.h - event to notify app of data from xsldbg ------------------- begin : Fri Feb 1 2001 copyright : (C) 2001 by Keith Isdale email : k_isdale@tpg.com.au ***************************************************************************/ /*************************************************************************** * * * This program is free software; you can redistribute it and/or modify * * it under the terms of the GNU General Public License as published by * * the Free Software Foundation; either version 2 of the License, or * * (at your option) any later version. * * * ***************************************************************************/ #ifndef XSLDBGEVENT_H #define XSLDBGEVENT_H #if defined WIN32 #include #endif #include #include #include "xsldbgmsg.h" /* how many columns do we have */ #define XSLDBGEVENT_COLUMNS 4 class XsldbgDebuggerBase; class XsldbgEventData; class XsldbgEventDataList : public QGList { public: XsldbgEventDataList(void) {} XsldbgEventDataList( const XsldbgEventDataList &l ) : TQGList(l) {} ~XsldbgEventDataList(void) { clear(); } XsldbgEventDataList &operator=(const XsldbgEventDataList &l) { return (XsldbgEventDataList&)TQGList::operator=(l); } bool operator==( const XsldbgEventDataList &list ) const { return TQGList::operator==( list ); } uint count(void) const { return TQGList::count(); } bool isEmpty(void) const { return TQGList::count() == 0; } bool insert( uint i, const XsldbgEventData *d){ return TQGList::insertAt(i,(TQPtrCollection::Item)d); } void inSort( const XsldbgEventData *d ) { TQGList::inSort((TQPtrCollection::Item)d); } void prepend( const XsldbgEventData *d ) { TQGList::insertAt(0,(TQPtrCollection::Item)d); } void append( const XsldbgEventData *d ) { TQGList::append((TQPtrCollection::Item)d); } bool remove( uint i ) { return TQGList::removeAt(i); } bool remove(void) { return TQGList::remove((TQPtrCollection::Item)0); } bool remove( const XsldbgEventData *d ) { return TQGList::remove((TQPtrCollection::Item)d); } bool removeRef( const XsldbgEventData *d ) { return TQGList::removeRef((TQPtrCollection::Item)d); } void removeNode( TQLNode *n ) { TQGList::removeNode(n); } bool removeFirst(void) { return TQGList::removeFirst(); } bool removeLast(void) { return TQGList::removeLast(); } XsldbgEventData *take( uint i ) { return (XsldbgEventData *)TQGList::takeAt(i); } XsldbgEventData *take(void) { return (XsldbgEventData *)TQGList::take(); } XsldbgEventData *takeNode( TQLNode *n ) { return (XsldbgEventData *)TQGList::takeNode(n); } void clear(void) { TQGList::clear(); } void sort(void) { TQGList::sort(); } int find( const XsldbgEventData *d ) { return TQGList::find((TQPtrCollection::Item)d); } int findNext( const XsldbgEventData *d ) { return TQGList::find((TQPtrCollection::Item)d,FALSE); } int findRef( const XsldbgEventData *d ) { return TQGList::findRef((TQPtrCollection::Item)d); } int findNextRef( const XsldbgEventData *d ){ return TQGList::findRef((TQPtrCollection::Item)d,FALSE);} uint contains( const XsldbgEventData *d ) const { return TQGList::contains((TQPtrCollection::Item)d); } uint containsRef( const XsldbgEventData *d ) const { return TQGList::containsRef((TQPtrCollection::Item)d); } XsldbgEventData *at( uint i ) { return (XsldbgEventData *)TQGList::at(i); } int at(void) const { return TQGList::at(); } XsldbgEventData *current(void) const { return (XsldbgEventData *)TQGList::get(); } TQLNode *currentNode(void) const { return TQGList::currentNode(); } XsldbgEventData *getFirst(void) const { return (XsldbgEventData *)TQGList::cfirst(); } XsldbgEventData *getLast(void) const { return (XsldbgEventData *)TQGList::clast(); } XsldbgEventData *first(void) { return (XsldbgEventData *)TQGList::first(); } XsldbgEventData *last(void) { return (XsldbgEventData *)TQGList::last(); } XsldbgEventData *next(void) { return (XsldbgEventData *)TQGList::next(); } XsldbgEventData *prev(void) { return (XsldbgEventData *)TQGList::prev(); } void toVector( TQGVector *vec )const{ TQGList::toVector(vec); } private: void deleteItem( TQPtrCollection::Item d ); }; /** * This class is used to convert a message from xsldbg into a simple data type * * @short convertor of xsldbg message to a data class * * @author Keith Isdale */ class XsldbgEventData { public: XsldbgEventData(void); ~XsldbgEventData(void); /** * Set the text for the column specified * * @param column 0 =< @p column < XSLDBGEVENT_COLUMNS * @param text The text value to store in column indicated */ void setText(int column, TQString text); /** * Get the text from the column specified * * @returns TQString::null if invalid column number * * @param column 0 =< @p column < XSLDBGEVENT_COLUMNS * */ TQString getText(int column); /** * Set the integer value for the column specified * * @param column 0 =< @p column < XSLDBGEVENT_COLUMNS * @param value The value to store in column indicated */ void setInt(int column, int value); /** * Get the integer value from the column specified * * @returns -1 if invalid column number * * @param column 0 =< @p column < XSLDBGEVENT_COLUMNS * */ int getInt(int column); private: /** Below are the messages that this class will support Values are mapped left to right ie the first TQString value maps to textValues[0], the second mapps to textValues[1] the third maps to textValues[2] etc.. */ TQString textValues[XSLDBGEVENT_COLUMNS]; /** Both int and bool values are mapped to intValues in the same manner as stated above */ int intValues[XSLDBGEVENT_COLUMNS]; /** - - - - - - The message/signal types supported - - - - - - */ // /** line number and/or file name changed */ // void lineNoChanged(TQString /* fileName */, int /* lineNumber */, bool /* breakpoint */); // These data items are mapped to attributes of this class with the same name // /** Show a message in debugger window */ // void showMessage(TQString /* msg*/); // These data item is mapped to the text attribute // /** Add breakpoint to view, First parameter is TQString::null // to indicate start of breakpoint list notfication */ // void breakpointItem(TQString /* fileName*/, int /* lineNumber */, TQString /*templateName*/, // bool /* enabled */, int /* id */); // These data items are mapped to attributes of this class with the same name // /** Add global variable to view, First parameter is TQString::null // to indicate start of global variable list notfication */ // void globalVariableItem(TQString /* name */, TQString /* fileName */, int /* lineNumber */); // These data items are mapped to attributes of this class with the same name // /** Add local variable to view, First parameter is TQString::null // to indicate start of local variable list notfication */ // void localVariableItem(TQString /*name */, TQString /* templateContext*/, // TQString /* fileName */, int /*lineNumber */); // These data items are mapped to attributes of this class with the same name // /** Add template to view, First parameter is TQString::null // to indicate start of template list notfication */ // void templateItem(TQString /* name*/, TQString /*mode*/, TQString /* fileName */, int /* lineNumber */); // /** Add source to view, First parameter is TQString::null // to indicate start of source list notfication */ // void sourceItem(TQString /* fileName */, TQString /* parentFileName */, int /*lineNumber */); // /** Add parameter to view, First parameter is TQString::null // to indicate start of parameter list notfication */ // void parameterItem(TQString /* name*/, TQString /* value */); // /** Add callStack to view, First parameter is TQString::null // to indicate start of callstack list notfication */ // void callStackItem(TQString /* tempalteName*/, TQString /* fileName */, int /* lineNumber */); // /** Add entity to view, First parameter is TQString::null // to indicate start of entity list notfication */ // void entityItem(TQString /*SystemID*/, TQString /*PublicID*/); // /* Show the URI for SystemID or PublicID requested */ // void resolveItem(TQString /*URI*/); // /* Display a integer option value First parameter is TQString::null // to indicate start of option list notification */ // void intOptionItem(TQString /* name*/, int /* value */); // /* Display a string option value. First parameter is TQString::null // to indicate start of option list notification */ // void stringOptionItem(TQString /* name*/, TQString /* value */); }; /** * This class is posted to the applications event queue. When the application * has time to process the event this class then aids in emitting * the relavant signals for the event. * * @short Emit signals to QT application via debugger base class * * @author Keith Isdale */ class XsldbgEvent : public TQEvent { public: XsldbgEvent(XsldbgMessageEnum type, const void *data); ~XsldbgEvent(void); /** Main control for emitting messages, use this from the application inside its event processing function */ void emitMessage(XsldbgDebuggerBase *debugger); /** Emit a single message. It uses handleXXX to do the actual emitting of signal from debugger */ void emitMessage(XsldbgEventData *eventData); private: /** Create the XsldbgEventData for this message. Is used by our constructor it uses handleXXX function to fill in the approriate values in the XsldbgEventData provided */ XsldbgEventData * createEventData(XsldbgMessageEnum type, const void *msgData); /** The following functions are directly related to the eventual signals that will be emitted ie the signal lineNoChanged(TQString, int bool) is mapped to handleLineNoChanged(XsldbgEventData *, void *) */ void handleLineNoChanged(XsldbgEventData *eventData, const void *msgData); void handleShowMessage(XsldbgEventData *eventData, const void *msgData); void handleBreakpointItem(XsldbgEventData *eventData, const void *msgData); void handleGlobalVariableItem(XsldbgEventData *eventData, const void *msgData); void handleLocalVariableItem(XsldbgEventData *eventData, const void *msgData); void handleTemplateItem(XsldbgEventData *eventData, const void *msgData); void handleSourceItem(XsldbgEventData *eventData, const void *msgData); void handleIncludedSourceItem(XsldbgEventData *eventData, const void *msgData); void handleParameterItem(XsldbgEventData *eventData, const void *msgData); void handleCallStackItem(XsldbgEventData *eventData, const void *msgData); void handleEntityItem(XsldbgEventData *eventData, const void *msgData); void handleResolveItem(XsldbgEventData *eventData, const void *msgData); void handleIntOptionItem(XsldbgEventData *eventData, const void *msgData); void handleStringOptionItem(XsldbgEventData *eventData, const void *msgData); private: /** What type is the items in list */ XsldbgMessageEnum itemType; /** A flag that gets set once the list has been filled with approriate XsldbgEventData */ bool beenCreated; /** This is a volitile value that is only valid for the duration of the constuctor. It will be set to 0L immediately after */ const void *data; /** This is a volitile value only valid for duration of emitMessage function. It will be set to 0L imedediately after */ XsldbgDebuggerBase *debugger; /** This is the data associated with this event each data item in the list will be of the type required by the "type" this event */ class XsldbgEventDataList list; }; #endif