summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorbustico2006-06-01 12:08:21 +0000
committerbustico2006-06-01 12:08:21 +0000
commit0af51dbec459d2555a5597dc092c7d012f3df250 (patch)
tree5a4a4c69c439dc9508bac72bb3f1c533389482f1
parent9ac55df54fbcf5b17f53e38a18d538e9af074488 (diff)
downloadivy-cplusplus-0af51dbec459d2555a5597dc092c7d012f3df250.zip
ivy-cplusplus-0af51dbec459d2555a5597dc092c7d012f3df250.tar.gz
ivy-cplusplus-0af51dbec459d2555a5597dc092c7d012f3df250.tar.bz2
ivy-cplusplus-0af51dbec459d2555a5597dc092c7d012f3df250.tar.xz
ajout du filtrage statique des classes de message
-rw-r--r--Ivy.cxx30
-rw-r--r--IvyApplication.h1
-rw-r--r--IvyCallback.h60
-rw-r--r--Ivycpp.h7
-rw-r--r--Makefile15
5 files changed, 103 insertions, 10 deletions
diff --git a/Ivy.cxx b/Ivy.cxx
index cddd5cc..699219e 100644
--- a/Ivy.cxx
+++ b/Ivy.cxx
@@ -251,7 +251,7 @@ void Ivy::SendDirectMsg(IvyApplication * app, int id, const char *message)
# | |____ | | | (_| | \__ \ \__ \ | __/ \__ \
# \_____| |_| \__,_| |___/ |___/ \___| |___/
*/
-void Ivy::Classes(int argc, const char **argv )
+void Ivy::SetFilter(int argc, const char **argv )
{
IvyC::IvySetFilter( argc, argv);
}
@@ -355,3 +355,31 @@ void Ivy::MsgCb( IvyC::IvyClientPtr app, void *user_data, int argc, char **argv
glfwUnlockMutex (ivyCbmutex);
#endif
}
+
+
+void Ivy::BindCallbackCb( IvyC::IvyClientPtr app, void *user_data, int id, char *msg,
+ IvyC::IvyBindEvent event)
+{
+ IvyBindingCallback *cb = (IvyBindingCallback *)user_data;
+ IvyApplication *appObj = new IvyApplication( app );
+
+ switch ( event )
+ {
+ case IvyC::IvyAddBind :
+ cb->OnAddBind ( appObj, id, msg);
+ break;
+ case IvyC::IvyRemoveBind :
+ cb->OnRemoveBind( appObj, id, msg );
+ break;
+ case IvyC::IvyFilterBind :
+ cb->OnFilterBind( appObj, id, msg );
+ break;
+ }
+ delete appObj;
+}
+
+
+void Ivy::SetBindCallback(IvyBindingCallback* bind_callback )
+{
+ IvySetBindCallback (BindCallbackCb, bind_callback);
+}
diff --git a/IvyApplication.h b/IvyApplication.h
index 0a66763..e8ced00 100644
--- a/IvyApplication.h
+++ b/IvyApplication.h
@@ -39,3 +39,4 @@ public:
+
diff --git a/IvyCallback.h b/IvyCallback.h
index 1d47dc4..aa866b8 100644
--- a/IvyCallback.h
+++ b/IvyCallback.h
@@ -120,6 +120,65 @@ public:
/* raccourci d'ecriture */
#define BUS_APPLICATION_CALLBACK( conn, disconn ) new IvyApplicationCallbackFunction( conn, disconn )
};
+
+/* Binding Callback */
+
+class IvyBindingCallback {
+public:
+ virtual void OnAddBind (IvyApplication *app, int id, const char * regexp) = 0;
+ virtual void OnRemoveBind (IvyApplication *app, int id, const char * regexp) = 0;
+ virtual void OnFilterBind (IvyApplication *app, int id, const char * regexp) = 0;
+ virtual ~IvyBindingCallback()
+ {
+ }
+};
+
+class IvyBindingNullCallback : public IvyBindingCallback {
+public:
+ virtual void OnAddBind (IvyApplication *app, int id, const char * regexp)
+ {};
+ virtual void OnRemoveBind (IvyApplication *app, int id, const char * regexp)
+ {};
+ virtual void OnFilterBind (IvyApplication *app, int id, const char * regexp)
+ {};
+ virtual ~IvyBindingNullCallback()
+ {
+ }
+};
+// Static function CB
+class IvyBindingCallbackFunction: public IvyBindingCallback {
+public:
+ typedef void ( *IvyBindingCallback_fun )( IvyApplication *app, int id, const char * regexp );
+ IvyBindingCallback_fun BindingAddCb;
+ IvyBindingCallback_fun BindingRemoveCb;
+ IvyBindingCallback_fun BindingFilterCb;
+
+public:
+ IvyBindingCallbackFunction ( IvyBindingCallback_fun add_cb, IvyBindingCallback_fun remove_cb, IvyBindingCallback_fun filter_cb )
+ : BindingAddCb( add_cb ), BindingRemoveCb( remove_cb ), BindingFilterCb( filter_cb )
+ {
+ }
+ ~IvyBindingCallbackFunction ()
+ {
+ }
+ virtual void OnAddBind (IvyApplication *app, int id, const char * regexp)
+ {
+ if(BindingAddCb) (*BindingAddCb) (app, id, regexp);
+ };
+ virtual void OnRemoveBind (IvyApplication *app, int id, const char * regexp)
+ {
+ if (BindingRemoveCb) (*BindingRemoveCb) (app, id, regexp);
+ };
+ virtual void OnFilterBind (IvyApplication *app, int id, const char * regexp)
+ {
+ if(BindingFilterCb ) (*BindingFilterCb) (app, id, regexp);
+ };
+
+/* raccourci d'ecriture */
+#define BUS_BINDING_CALLBACK( add, remove, filter ) new IvyBindingCallbackFunction( add, remove, filter )
+};
+
+
/* Callback for the die Message */
class IvyDieCallback {
public:
@@ -130,3 +189,4 @@ public:
};
#endif // __IVYXTLOOP_H__
+
diff --git a/Ivycpp.h b/Ivycpp.h
index f55c5c7..96eb1e9 100644
--- a/Ivycpp.h
+++ b/Ivycpp.h
@@ -37,7 +37,6 @@ public:
static long BindMsg (const char *regexp, IvyMessageCallback *cb );
static long BindMsg (IvyMessageCallback *cb, const char *regexp, ... );
static void UnbindMsg( int id );
- static void Classes( int argc, const char **argv );
static int SendMsg(const char * message, ... );
static void SendDirectMsg( IvyApplication *app, int id,
@@ -45,7 +44,8 @@ public:
static void BindDirectMsg( IvyDirectMessageCallback *callback );
-
+ static void SetBindCallback(IvyBindingCallback* bind_callback );
+ static void SetFilter( int argc, const char **argv );
static void start(const char *domain);
static void stop();
#ifndef USE_GLFW
@@ -59,6 +59,8 @@ protected:
static void DieCb( IvyC::IvyClientPtr app, void *user_data, int id ) ;
static void MsgCb( IvyC::IvyClientPtr app, void *user_data, int argc, char **argv ) ;
static void MsgDirectCb( IvyC::IvyClientPtr app, void *user_data, int id, char *msg ) ;
+ static void BindCallbackCb( IvyC::IvyClientPtr app, void *user_data, int id, char *msg,
+ IvyC::IvyBindEvent event) ;
#ifdef USE_GLFW
static void GLFWCALL ivyMainLoopInSeparateThread (void *arg);
@@ -69,3 +71,4 @@ private:
};
#endif // !defined(__IVY_H)
+
diff --git a/Makefile b/Makefile
index 2316a01..281f72f 100644
--- a/Makefile
+++ b/Makefile
@@ -10,6 +10,9 @@ ifeq ($(os),Darwin)
LD = g++ -dynamiclib -single_module
LDFLAGS = -L$(IVY_PATH) -L/sw/lib -framework OpenGL -framework AGL -framework Carbon
else
+ PERHAPS64 := $(shell uname --machine | perl -ne "print /64/ ? '64' : '';")
+ LIB:= lib$(PERHAPS64)
+ XTLIB = -L/usr/X11R6/$(LIB)
CPPFLAGS = -MMD -I/usr/X11R6/include
DSO_EXT = .so
LD = g++ -shared -fPIC
@@ -17,6 +20,7 @@ else
ifndef PREFIX
PREFIX=/usr
endif
+ LDFLAGS = -L$(PREFIX)/$(LIB) $(XTLIB)
endif
@@ -44,9 +48,6 @@ LIBIVY_DEPLIBS = -livy
LIBIVY_GLFW_SHARED = $(LIBIVY_GLFW)$(DSO_EXT)
LIBIVY_GLFW_DEPLIBS = -lglfw -livy -lX11 -lXext -lXxf86vm -lGL -lpthread
-PERHAPS64 := $(shell uname --machine | perl -ne "print /64/ ? '64' : '';")
-LIB:= lib$(PERHAPS64)
-XTLIB = -L/usr/X11R6/$(LIB)/
#a mettre dans les makefiles generant les executables
#LLDLIBS= -rpath. -L. -lTextureLabel -lInventor -lInventorXt -lXm -lXt -lttf -lGL -lGLU -lm
@@ -83,10 +84,10 @@ install:
install -m 0644 Ivy*.h $(DESTDIR)$(PREFIX)/include/Ivy
# libs
mkdir -p $(DESTDIR)$(PREFIX)/$(LIB)
- install -m 0644 $(LIBIVY_STATIC) $(DESTDIR)$(PREFIX)/$(LIB)
- install -m 0644 $(LIBIVY_GLFW_STATIC) $(DESTDIR)$(PREFIX)/$(LIB)
- install -m 0644 $(LIBIVY_SHARED) $(DESTDIR)$(PREFIX)/$(LIB)
- install -m 0644 $(LIBIVY_GLFW_SHARED) $(DESTDIR)$(PREFIX)/$(LIB)
+ install -m 0644 $(LIBIVY_STATIC) $(DESTDIR)$(PREFIX)/$(LIB)/$(DEBUG)
+ install -m 0644 $(LIBIVY_GLFW_STATIC) $(DESTDIR)$(PREFIX)/$(LIB)/$(DEBUG)
+ install -m 0644 $(LIBIVY_SHARED) $(DESTDIR)$(PREFIX)/$(LIB)/$(DEBUG)
+ install -m 0644 $(LIBIVY_GLFW_SHARED) $(DESTDIR)$(PREFIX)/$(LIB)/$(DEBUG)
LLDLIBS = -L $(XTLIB) -Wl,-rpath,$(XTLIB) -L. -Wl,-rpath,. -L$(IVY_PATH)/src