X-Git-Url: https://git.xonotic.org/?a=blobdiff_plain;f=radiant%2Ffeedback.h;h=b683a316d76ea07abe1cc48b43c238b36614b68e;hb=66044ddab695842249eb61a4b395165d2a5d4ec8;hp=687fe94b0c9fa7eb9e633cc36b80c8d2781afc92;hpb=80378101101ca1762bbf5638a9e3566893096d8a;p=xonotic%2Fnetradiant.git diff --git a/radiant/feedback.h b/radiant/feedback.h index 687fe94b..b683a316 100644 --- a/radiant/feedback.h +++ b/radiant/feedback.h @@ -1,125 +1,186 @@ -/* -Copyright (C) 1999-2007 id Software, Inc. and contributors. -For a list of contributors, see the accompanying CONTRIBUTORS file. - -This file is part of GtkRadiant. - -GtkRadiant 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. - -GtkRadiant is distributed in the hope that it will be useful, -but WITHOUT ANY WARRANTY; without even the implied warranty of -MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -GNU General Public License for more details. - -You should have received a copy of the GNU General Public License -along with GtkRadiant; if not, write to the Free Software -Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA -*/ - -//----------------------------------------------------------------------------- -// -// DESCRIPTION: -// classes used for describing geometry information from q3map feedback -// - -#ifndef __Q3MAP_FEEDBACK__ -#define __Q3MAP_FEEDBACK__ - -#include "libxml/parser.h" - -// a select message with a brush/entity select information -class CSelectMsg : public ISAXHandler -{ - enum { SELECT_MESSAGE, SELECT_BRUSH } ESelectState; - GString *message; - int entitynum, brushnum; -public: - CSelectMsg() { ESelectState = SELECT_MESSAGE; } - // SAX interface - void saxStartElement (message_info_t *ctx, const xmlChar *name, const xmlChar **attrs); - void saxEndElement (message_info_t *ctx, const xmlChar *name); - void saxCharacters (message_info_t *ctx, const xmlChar *ch, int len); - // for use in the dialog window - char *getName() { return message->str; } - void Highlight(); - void DropHighlight() { } -}; - -class CPointMsg : public ISAXHandler, public IGL2DWindow -{ - enum { POINT_MESSAGE, POINT_POINT } EPointState; - GString *message; - vec3_t pt; - int refCount; -public: - CPointMsg() { EPointState = POINT_MESSAGE; refCount = 0; } - // SAX interface - void saxStartElement (message_info_t *ctx, const xmlChar *name, const xmlChar **attrs); - void saxEndElement (message_info_t *ctx, const xmlChar *name); - void saxCharacters (message_info_t *ctx, const xmlChar *ch, int len); - // for use in the dialog window - char *getName() { return message->str; } - void Highlight(); - void DropHighlight(); - - // IGL2DWindow interface -------------------------------- - // Increment the number of references to this object - void IncRef () { refCount++; } - // Decrement the reference count - void DecRef () { refCount--; if (refCount <= 0) delete this; } - void Draw2D( VIEWTYPE vt ); -}; - -class CWindingMsg : public ISAXHandler, public IGL2DWindow -{ - enum { WINDING_MESSAGE, WINDING_WINDING } EPointState; - GString *message; - vec3_t wt[256]; - int numpoints; - int refCount; -public: - CWindingMsg() { EPointState = WINDING_MESSAGE; refCount = 0; numpoints = 0; } - // SAX interface - void saxStartElement (message_info_t *ctx, const xmlChar *name, const xmlChar **attrs); - void saxEndElement (message_info_t *ctx, const xmlChar *name); - void saxCharacters (message_info_t *ctx, const xmlChar *ch, int len); - // for use in the dialog window - char *getName() { return message->str; } - void Highlight(); - void DropHighlight(); - - // IGL2DWindow interface -------------------------------- - // Increment the number of references to this object - void IncRef () { refCount++; } - // Decrement the reference count - void DecRef () { refCount--; if (refCount <= 0) delete this; } - void Draw2D( VIEWTYPE vt ); -}; - -class CDbgDlg : public Dialog -{ - GPtrArray *m_pFeedbackElements; - // the list widget we use in the dialog - GtkListStore* m_clist; - ISAXHandler *m_pHighlight; -public: - CDbgDlg() { m_pFeedbackElements = g_ptr_array_new (); m_pHighlight = NULL; } - virtual ~CDbgDlg() { } - // refresh items - void Push (ISAXHandler *); - // clean the debug window, release all ISAXHanlders we have - void Init(); - ISAXHandler *GetElement(gint row); - void SetHighlight(gint row); - void DropHighlight(); -// void HideDlg(); -protected: - void BuildDialog (); -}; - -extern CDbgDlg g_DbgDlg; - -#endif +/* + Copyright (C) 1999-2006 Id Software, Inc. and contributors. + For a list of contributors, see the accompanying CONTRIBUTORS file. + + This file is part of GtkRadiant. + + GtkRadiant 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. + + GtkRadiant is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with GtkRadiant; if not, write to the Free Software + Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA + */ + +//----------------------------------------------------------------------------- +// +// DESCRIPTION: +// classes used for describing geometry information from q3map feedback +// + +#ifndef __Q3MAP_FEEDBACK__ +#define __Q3MAP_FEEDBACK__ + +#include "math/vector.h" +#include "stream/stringstream.h" +#include "xmlstuff.h" +#include "dialog.h" +#include "xywindow.h" + +// we use these classes to let plugins draw inside the Radiant windows +// 2D window like YZ XZ XY +class IGL2DWindow +{ +public: +virtual ~IGL2DWindow() = default; +// Increment the number of references to this object +virtual void IncRef() = 0; +// Decrement the reference count +virtual void DecRef() = 0; +virtual void Draw2D( VIEWTYPE vt ) = 0; +}; + +// 3D window +class IGL3DWindow +{ +public: +// Increment the number of references to this object +virtual void IncRef() = 0; +// Decrement the reference count +virtual void DecRef() = 0; +virtual void Draw3D() = 0; +}; + +// a select message with a brush/entity select information +class CSelectMsg : public ISAXHandler +{ +enum { SELECT_MESSAGE, SELECT_BRUSH } ESelectState; +StringOutputStream message; +StringOutputStream brush; +public: +CSelectMsg() { ESelectState = SELECT_MESSAGE; } +// SAX interface +void saxStartElement( message_info_t *ctx, const xmlChar *name, const xmlChar **attrs ); +void saxEndElement( message_info_t *ctx, const xmlChar *name ); +void saxCharacters( message_info_t *ctx, const xmlChar *ch, int len ); +// for use in the dialog window +const char* getName() { return message.c_str(); } +IGL2DWindow* Highlight(); +void DropHighlight() { } +}; + +class CPointMsg : public ISAXHandler, public IGL2DWindow +{ +enum { POINT_MESSAGE, POINT_POINT } EPointState; +StringOutputStream message; +StringOutputStream point; +Vector3 pt; +int refCount; +public: +CPointMsg() { EPointState = POINT_MESSAGE; refCount = 0; } +// SAX interface +void Release(){ + delete this; +} +void saxStartElement( message_info_t *ctx, const xmlChar *name, const xmlChar **attrs ); +void saxEndElement( message_info_t *ctx, const xmlChar *name ); +void saxCharacters( message_info_t *ctx, const xmlChar *ch, int len ); +// for use in the dialog window +const char* getName() { return message.c_str(); } +IGL2DWindow* Highlight(); +void DropHighlight(); + +// IGL2DWindow interface -------------------------------- +// Increment the number of references to this object +void IncRef() { refCount++; } +// Decrement the reference count +void DecRef() { + refCount--; if ( refCount <= 0 ) { + delete this; + } +} +void Draw2D( VIEWTYPE vt ); +}; + +class CWindingMsg : public ISAXHandler, public IGL2DWindow +{ +enum { WINDING_MESSAGE, WINDING_WINDING } EPointState; +StringOutputStream message; +StringOutputStream winding; +Vector3 wt[256]; +int numpoints; +int refCount; +public: +CWindingMsg() { EPointState = WINDING_MESSAGE; refCount = 0; numpoints = 0; } +// SAX interface +void Release(){ + delete this; +} +void saxStartElement( message_info_t *ctx, const xmlChar *name, const xmlChar **attrs ); +void saxEndElement( message_info_t *ctx, const xmlChar *name ); +void saxCharacters( message_info_t *ctx, const xmlChar *ch, int len ); +// for use in the dialog window +const char* getName() { return message.c_str(); } +IGL2DWindow* Highlight(); +void DropHighlight(); + +// IGL2DWindow interface -------------------------------- +// Increment the number of references to this object +void IncRef() { refCount++; } +// Decrement the reference count +void DecRef() { + refCount--; if ( refCount <= 0 ) { + delete this; + } +} +void Draw2D( VIEWTYPE vt ); +}; + + +class CDbgDlg : public Dialog +{ +GPtrArray *m_pFeedbackElements; +// the list widget we use in the dialog +ui::ListStore m_clist{ui::null}; +ISAXHandler *m_pHighlight; +IGL2DWindow* m_pDraw2D; +public: +CDbgDlg(){ + m_pFeedbackElements = g_ptr_array_new(); + m_pHighlight = NULL; + m_pDraw2D = NULL; +} +// refresh items +void Push( ISAXHandler * ); +// clean the debug window, release all ISAXHanlders we have +void Init(); +ISAXHandler *GetElement( std::size_t row ); +void SetHighlight( gint row ); +void DropHighlight(); +void draw2D( VIEWTYPE viewType ){ + if ( m_pDraw2D != 0 ) { + m_pDraw2D->Draw2D( viewType ); + } +} +void destroyWindow(){ + if ( GetWidget() ) { + Destroy(); + } +} +// void HideDlg(); +protected: +ui::Window BuildDialog(); +}; + +extern CDbgDlg g_DbgDlg; + +void Feedback_draw2D( VIEWTYPE viewType ); + +#endif