| @@ -26,6 +26,8 @@ | |||
| /* */ | |||
| /* #include "nsm.h" */ | |||
| /* */ | |||
| /* static nsm_client_t *nsm = 0 */ | |||
| /* */ | |||
| /* int */ | |||
| /* cb_nsm_open ( const char *name, */ | |||
| /* const char *display_name, */ | |||
| @@ -45,7 +47,30 @@ | |||
| /* return ERR_OK; */ | |||
| /* } */ | |||
| /* */ | |||
| /* static nsm_client_t *nsm = 0 */ | |||
| /* void */ | |||
| /* cb_nsm_show ( void *userdata ) */ | |||
| /* { */ | |||
| /* do_show_ui(); */ | |||
| /* nsm_send_is_shown ( nsm ); */ | |||
| /* } */ | |||
| /* */ | |||
| /* void */ | |||
| /* cb_nsm_hide ( void *userdata ) */ | |||
| /* { */ | |||
| /* do_hide_ui(); */ | |||
| /* nsm_send_is_hidden ( nsm ); */ | |||
| /* } */ | |||
| /* */ | |||
| /* gboolean */ | |||
| /* poll_nsm() */ | |||
| /* { */ | |||
| /* if (nsm) */ | |||
| /* { */ | |||
| /* nsm_check_nowait(nsm); */ | |||
| /* return true; */ | |||
| /* } */ | |||
| /* return false; */ | |||
| /* } */ | |||
| /* */ | |||
| /* int main( int argc, char **argv ) */ | |||
| /* { */ | |||
| @@ -57,10 +82,14 @@ | |||
| /* */ | |||
| /* nsm_set_open_callback( nsm, cb_nsm_open, 0 ); */ | |||
| /* nsm_set_save_callback( nsm, cb_nsm_save, 0 ); */ | |||
| /* nsm_set_show_callback( nsm, cb_nsm_show, 0 ); */ | |||
| /* nsm_set_hide_callback( nsm, cb_nsm_hide, 0 ); */ | |||
| /* */ | |||
| /* if ( 0 == nsm_init( nsm, nsm_url ) ) */ | |||
| /* { */ | |||
| /* nsm_send_announce( nsm, "FOO", "", argv[0] ); */ | |||
| /* nsm_check_wait(nsm, 200); */ | |||
| /* do_timeout_add(200, poll_nsm, Null); */ | |||
| /* } */ | |||
| /* else */ | |||
| /* { */ | |||
| @@ -87,6 +116,8 @@ | |||
| typedef void * nsm_client_t; | |||
| typedef int (nsm_open_callback)( const char *name, const char *display_name, const char *client_id, char **out_msg, void *userdata ); | |||
| typedef int (nsm_save_callback)( char **out_msg, void *userdata ); | |||
| typedef void (nsm_show_gui_callback)( void *userdata ); | |||
| typedef void (nsm_hide_gui_callback)( void *userdata ); | |||
| typedef void (nsm_active_callback)( int b, void *userdata ); | |||
| typedef void (nsm_session_is_loaded_callback)( void *userdata ); | |||
| typedef int (nsm_broadcast_callback)( const char *, lo_message m, void *userdata ); | |||
| @@ -114,6 +145,12 @@ struct _nsm_client_t | |||
| nsm_save_callback *save; | |||
| void *save_userdata; | |||
| nsm_show_gui_callback *show; | |||
| void *show_userdata; | |||
| nsm_hide_gui_callback *hide; | |||
| void *hide_userdata; | |||
| nsm_active_callback *active; | |||
| void *active_userdata; | |||
| @@ -169,6 +206,8 @@ nsm_new ( void ) | |||
| nsm->open = 0; | |||
| nsm->save = 0; | |||
| nsm->show = 0; | |||
| nsm->hide = 0; | |||
| nsm->active = 0; | |||
| nsm->session_is_loaded = 0; | |||
| nsm->broadcast = 0; | |||
| @@ -196,6 +235,22 @@ nsm_send_is_clean ( nsm_client_t *nsm ) | |||
| lo_send_from( _NSM()->nsm_addr, _NSM()->_server, LO_TT_IMMEDIATE, "/nsm/client/is_clean", "" ); | |||
| } | |||
| NSM_EXPORT | |||
| void | |||
| nsm_send_is_shown ( nsm_client_t *nsm ) | |||
| { | |||
| if ( _NSM()->nsm_is_active ) | |||
| lo_send_from( _NSM()->nsm_addr, _NSM()->_server, LO_TT_IMMEDIATE, "/nsm/client/gui_is_shown", "" ); | |||
| } | |||
| NSM_EXPORT | |||
| void | |||
| nsm_send_is_hidden ( nsm_client_t *nsm ) | |||
| { | |||
| if ( _NSM()->nsm_is_active ) | |||
| lo_send_from( _NSM()->nsm_addr, _NSM()->_server, LO_TT_IMMEDIATE, "/nsm/client/gui_is_hidden", "" ); | |||
| } | |||
| NSM_EXPORT | |||
| void | |||
| nsm_send_progress ( nsm_client_t *nsm, float p ) | |||
| @@ -313,6 +368,22 @@ nsm_set_save_callback( nsm_client_t *nsm, nsm_save_callback *save_callback, void | |||
| } | |||
| NSM_EXPORT | |||
| void | |||
| nsm_set_show_callback( nsm_client_t *nsm, nsm_show_gui_callback *show_callback, void *userdata ) | |||
| { | |||
| _NSM()->show = show_callback; | |||
| _NSM()->show_userdata = userdata; | |||
| } | |||
| NSM_EXPORT | |||
| void | |||
| nsm_set_hide_callback( nsm_client_t *nsm, nsm_hide_gui_callback *hide_callback, void *userdata ) | |||
| { | |||
| _NSM()->hide = hide_callback; | |||
| _NSM()->hide_userdata = userdata; | |||
| } | |||
| NSM_EXPORT | |||
| void | |||
| nsm_set_active_callback( nsm_client_t *nsm, nsm_active_callback *active_callback, void *userdata ) | |||
| @@ -470,6 +541,32 @@ NSM_EXPORT int _nsm_osc_session_is_loaded ( const char *path, const char *types, | |||
| return 0; | |||
| } | |||
| NSM_EXPORT int _nsm_osc_show ( const char *path, const char *types, lo_arg **argv, int argc, lo_message msg, void *user_data ) | |||
| { | |||
| struct _nsm_client_t *nsm = (struct _nsm_client_t*)user_data; | |||
| if ( ! nsm->show ) | |||
| return 0; | |||
| nsm->show( nsm->show_userdata ); | |||
| return 0; | |||
| } | |||
| NSM_EXPORT int _nsm_osc_hide ( const char *path, const char *types, lo_arg **argv, int argc, lo_message msg, void *user_data ) | |||
| { | |||
| struct _nsm_client_t *nsm = (struct _nsm_client_t*)user_data; | |||
| if ( ! nsm->hide ) | |||
| return 0; | |||
| nsm->hide( nsm->hide_userdata ); | |||
| return 0; | |||
| } | |||
| NSM_EXPORT int _nsm_osc_broadcast ( const char *path, const char *types, lo_arg **argv, int argc, lo_message msg, void *user_data ) | |||
| { | |||
| (void) types; | |||
| @@ -506,6 +603,8 @@ nsm_init ( nsm_client_t *nsm, const char *nsm_url ) | |||
| lo_server_add_method( _NSM()->_server, "/nsm/client/open", "sss", _nsm_osc_open, _NSM() ); | |||
| lo_server_add_method( _NSM()->_server, "/nsm/client/save", "", _nsm_osc_save, _NSM() ); | |||
| lo_server_add_method( _NSM()->_server, "/nsm/client/session_is_loaded", "", _nsm_osc_session_is_loaded, _NSM() ); | |||
| lo_server_add_method( _NSM()->_server, "/nsm/client/show_optional_gui", "", _nsm_osc_show, _NSM() ); | |||
| lo_server_add_method( _NSM()->_server, "/nsm/client/hide_optional_gui", "", _nsm_osc_hide, _NSM() ); | |||
| lo_server_add_method( _NSM()->_server, NULL, NULL, _nsm_osc_broadcast, _NSM() ); | |||
| return 0; | |||
| @@ -533,6 +632,8 @@ nsm_init_thread ( nsm_client_t *nsm, const char *nsm_url ) | |||
| lo_server_thread_add_method( _NSM()->_st, "/nsm/client/open", "sss", _nsm_osc_open, _NSM() ); | |||
| lo_server_thread_add_method( _NSM()->_st, "/nsm/client/save", "", _nsm_osc_save, _NSM() ); | |||
| lo_server_thread_add_method( _NSM()->_st, "/nsm/client/session_is_loaded", "", _nsm_osc_session_is_loaded, _NSM() ); | |||
| lo_server_thread_add_method( _NSM()->_st, "/nsm/client/show_optional_gui", "", _nsm_osc_show, _NSM() ); | |||
| lo_server_thread_add_method( _NSM()->_st, "/nsm/client/hide_optional_gui", "", _nsm_osc_hide, _NSM() ); | |||
| lo_server_thread_add_method( _NSM()->_st, NULL, NULL, _nsm_osc_broadcast, _NSM() ); | |||
| return 0; | |||