From eaa3e3169fe38da9cbe35fc0abd9f9587d9be6af Mon Sep 17 00:00:00 2001 From: mattn Date: Sun, 16 Mar 2008 09:42:56 +0000 Subject: [PATCH] * added filter api to create new filters from within plugins * TTimo, please have a look at the mainframe.cpp part git-svn-id: svn://svn.icculus.org/gtkradiant/GtkRadiant/branches/ZeroRadiant@208 8a3a26a2-13c4-0310-b231-cf6edde360e5 --- plugins/sample/plugin.cpp | 16 ++++++++-------- radiant/filters.cpp | 19 +++++++++++++++++++ radiant/filters.h | 2 ++ radiant/mainframe.cpp | 4 ++++ radiant/pluginmanager.cpp | 3 +++ 5 files changed, 36 insertions(+), 8 deletions(-) diff --git a/plugins/sample/plugin.cpp b/plugins/sample/plugin.cpp index e80beae..e597121 100644 --- a/plugins/sample/plugin.cpp +++ b/plugins/sample/plugin.cpp @@ -21,7 +21,7 @@ Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA #include "plugin.h" -#define CMD_SEP "-" +#define CMD_SEP "-" #define CMD_ABOUT "About..." // ============================================================================= // Globals @@ -60,12 +60,12 @@ typedef struct toolbar_button_info_s IToolbarButton::EType type; } toolbar_button_info_t; -static const toolbar_button_info_t toolbar_buttons[NUM_TOOLBAR_BUTTONS] = +static const toolbar_button_info_t toolbar_buttons[NUM_TOOLBAR_BUTTONS] = { { "sample.bmp", "Sample", - "Sample image", + "Sample image", DoSample, IToolbarButton::eToggleButton }, @@ -146,7 +146,7 @@ CSynapseClientSample g_SynapseClient; #if __GNUC__ >= 4 #pragma GCC visibility push(default) #endif -extern "C" CSynapseClient* SYNAPSE_DLL_EXPORT Synapse_EnumerateInterfaces (const char *version, CSynapseServer *pServer) +extern "C" CSynapseClient* SYNAPSE_DLL_EXPORT Synapse_EnumerateInterfaces (const char *version, CSynapseServer *pServer) { #if __GNUC__ >= 4 #pragma GCC visibility pop @@ -161,7 +161,7 @@ extern "C" CSynapseClient* SYNAPSE_DLL_EXPORT Synapse_EnumerateInterfaces (const g_SynapseClient.AddAPI(TOOLBAR_MAJOR, SAMPLE_MINOR, sizeof(_QERPlugToolbarTable)); g_SynapseClient.AddAPI(PLUGIN_MAJOR, SAMPLE_MINOR, sizeof(_QERPluginTable)); - + g_SynapseClient.AddAPI(RADIANT_MAJOR, NULL, sizeof(g_FuncTable), SYN_REQUIRE, &g_FuncTable); g_SynapseClient.AddAPI(QGL_MAJOR, NULL, sizeof(g_QglTable), SYN_REQUIRE, &g_QglTable); g_SynapseClient.AddAPI(VFS_MAJOR, "*", sizeof(g_FileSystemTable), SYN_REQUIRE, &g_FileSystemTable); @@ -177,7 +177,7 @@ bool CSynapseClientSample::RequestAPI (APIDescriptor_t *pAPI) { if (!strcmp(pAPI->major_name, PLUGIN_MAJOR)) { _QERPluginTable* pTable= static_cast<_QERPluginTable*>(pAPI->mpTable); - + pTable->m_pfnQERPlug_Init = QERPlug_Init; pTable->m_pfnQERPlug_GetName = QERPlug_GetName; pTable->m_pfnQERPlug_GetCommandList = QERPlug_GetCommandList; @@ -185,12 +185,12 @@ bool CSynapseClientSample::RequestAPI (APIDescriptor_t *pAPI) return true; } else if (!strcmp(pAPI->major_name, TOOLBAR_MAJOR)) { _QERPlugToolbarTable* pTable= static_cast<_QERPlugToolbarTable*>(pAPI->mpTable); - + pTable->m_pfnToolbarButtonCount = &ToolbarButtonCount; pTable->m_pfnGetToolbarButton = &GetToolbarButton; return true; } - + Syn_Printf("ERROR: RequestAPI( '%s' ) not found in '%s'\n", pAPI->major_name, GetInfo()); return false; } diff --git a/radiant/filters.cpp b/radiant/filters.cpp index f4dd1ba..4931d4d 100644 --- a/radiant/filters.cpp +++ b/radiant/filters.cpp @@ -30,6 +30,10 @@ SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. #include "stdafx.h" +// type 1 = texture filter (name) +// type 3 = entity filter (name) +// type 2 = QER_* shader flags +// type 4 = entity classes bfilter_t *FilterAdd(bfilter_t *pFilter, int type, int bmask, char *str, int exclude) { bfilter_t *pNew = new bfilter_t; @@ -44,6 +48,21 @@ bfilter_t *FilterAdd(bfilter_t *pFilter, int type, int bmask, char *str, int exc return pNew; } +bfilter_t *FilterCreate (int type, int bmask, char *str, int exclude) +{ + g_qeglobals.d_savedinfo.filters = FilterAdd(g_qeglobals.d_savedinfo.filters, type, bmask, str, exclude); + Syn_Printf("Added filter %s (type: %i, bmask: %i, exclude: %i)\n", str, type, bmask, exclude); + return g_qeglobals.d_savedinfo.filters; +} + +extern void PerformFiltering(); + +void FiltersActivate (void) +{ + PerformFiltering(); + Sys_UpdateWindows(W_XY|W_CAMERA); +} + // removes the filter list at *pFilter, returns NULL pointer bfilter_t *FilterListDelete(bfilter_t *pFilter) { diff --git a/radiant/filters.h b/radiant/filters.h index b09d36f..05776f5 100644 --- a/radiant/filters.h +++ b/radiant/filters.h @@ -22,6 +22,8 @@ Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA #ifndef _FILTERS_H_ #define _FILTERS_H_ +void FiltersActivate(void); +bfilter_t *FilterCreate(int type, int bmask, char *str, int exclude); bfilter_t *FilterAdd(bfilter_t *pFilter, int type, int bmask, char *str, int exclude); bfilter_t *FilterListDelete(bfilter_t *pFilter); bfilter_t *FilterUpdate(bfilter_t *pFilter); diff --git a/radiant/mainframe.cpp b/radiant/mainframe.cpp index aa6ef5e..6c2bd2b 100644 --- a/radiant/mainframe.cpp +++ b/radiant/mainframe.cpp @@ -7474,10 +7474,14 @@ void PerformFiltering () { brush_t *brush; + // mattn - this should be removed - otherwise the filters from the + // plugins are wiped away with each update +#if 1 // spog - deletes old filters list and creates new one when // g_qeglobals.d_savedinfo.exclude is updated g_qeglobals.d_savedinfo.filters = FilterListDelete(g_qeglobals.d_savedinfo.filters); g_qeglobals.d_savedinfo.filters = FilterUpdate(g_qeglobals.d_savedinfo.filters); +#endif for ( brush = active_brushes.next; brush != &active_brushes; brush = brush->next ) brush->bFiltered = FilterBrush( brush ); diff --git a/radiant/pluginmanager.cpp b/radiant/pluginmanager.cpp index 609e806..021531a 100644 --- a/radiant/pluginmanager.cpp +++ b/radiant/pluginmanager.cpp @@ -43,6 +43,7 @@ Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA #include "pluginmanager.h" #include "plugin.h" #include "missing.h" +#include "filters.h" #include "version.h" @@ -2228,6 +2229,8 @@ bool CSynapseClientRadiant::RequestAPI(APIDescriptor_t *pAPI) pTable->m_pfnGetFileTypeRegistry = &GetFileTypeRegistry; pTable->m_pfnReadProjectKey = &QERApp_ReadProjectKey; pTable->m_pfnGetMapName = &QERApp_GetMapName; + pTable->m_pfnFilterAdd = &FilterCreate; + pTable->m_pfnFiltersActivate = &FiltersActivate; return true; }