| @@ -35,6 +35,7 @@ | |||
| #include "debug.h" | |||
| #include <FL/Fl_Browser.H> | |||
| #include <FL/Fl_Select_Browser.H> | |||
| #include <FL/Fl_Tree.H> | |||
| #include <FL/Fl_Hold_Browser.H> | |||
| #include <FL/Fl_Tile.H> | |||
| @@ -446,7 +447,7 @@ public: | |||
| Fl_Button *add_button; | |||
| Fl_Button *duplicate_button; | |||
| Fl_Hold_Browser *session_browser; | |||
| Fl_Tree *session_browser; | |||
| static void cb_handle ( Fl_Widget *w, void *v ) | |||
| { | |||
| @@ -514,16 +515,21 @@ public: | |||
| } | |||
| else if ( w == session_browser ) | |||
| { | |||
| const char *name = session_browser->text( session_browser->value()); | |||
| if ( session_browser->callback_reason() != FL_TREE_REASON_SELECTED ) | |||
| return; | |||
| /* strip out formatting codes */ | |||
| Fl_Tree_Item *item = session_browser->callback_item(); | |||
| if ( !name ) | |||
| if ( item->children() ) | |||
| return; | |||
| char name[1024]; | |||
| session_browser->item_pathname( name, sizeof(name), item ); | |||
| foreach_daemon ( d ) | |||
| { | |||
| osc->send( (*d)->addr, "/nsm/server/open", index( name, ' ' ) + 1 ); | |||
| osc->send( (*d)->addr, "/nsm/server/open", name ); | |||
| } | |||
| } | |||
| else if ( w == new_button ) | |||
| @@ -606,22 +612,6 @@ public: | |||
| } | |||
| } | |||
| void | |||
| ForwardSort( Fl_Browser *b ) { | |||
| for ( int t=1; t<=b->size(); t++ ) { | |||
| for ( int r=t+1; r<=b->size(); r++ ) { | |||
| if ( strcmp(b->text(t), b->text(r)) > 0 ) { | |||
| b->swap(t,r); | |||
| } | |||
| } | |||
| } | |||
| } | |||
| void | |||
| sort_sessions ( void ) | |||
| { | |||
| ForwardSort( session_browser ); | |||
| } | |||
| NSM_Client * | |||
| client_by_id ( const char *id ) | |||
| @@ -746,20 +736,7 @@ public: | |||
| void add_session_to_list ( const char *name ) | |||
| { | |||
| char *s; | |||
| asprintf( &s, "@S18@C3 %s", name ); | |||
| for ( int i = 1; i <= session_browser->size(); i++ ) | |||
| { | |||
| if ( !strcmp( session_browser->text( i ), s ) ) | |||
| { | |||
| free( s ); | |||
| return; | |||
| } | |||
| } | |||
| session_browser->add( s ); | |||
| free(s); | |||
| session_browser->add( name ); | |||
| } | |||
| @@ -811,9 +788,13 @@ public: | |||
| } | |||
| { Fl_Tile *o = new Fl_Tile( X, Y + 50, W, H - 50 ); | |||
| { | |||
| Fl_Hold_Browser *o = session_browser = new Fl_Hold_Browser( X, Y + 50, W / 3, H - 50 ); | |||
| Fl_Tree *o = session_browser = new Fl_Tree( X, Y + 50, W / 3, H - 50 ); | |||
| o->callback( cb_handle, (void *)this ); | |||
| o->color( fl_darker( FL_GRAY ) ); | |||
| o->item_labelbgcolor( o->color() ); | |||
| o->item_labelfgcolor( FL_YELLOW ); | |||
| o->sortorder( FL_TREE_SORT_ASCENDING ); | |||
| o->showroot( 0 ); | |||
| o->selection_color( fl_darker( FL_GREEN ) ); | |||
| o->box( FL_ROUNDED_BOX ); | |||
| o->label( "Sessions" ); | |||
| @@ -959,7 +940,6 @@ private: | |||
| ! strcmp( types, "s" ) ) | |||
| { | |||
| controller->add_session_to_list( &argv[0]->s ); | |||
| controller->sort_sessions(); | |||
| } | |||
| else if ( !strcmp( path, "/nsm/gui/gui_announce" ) ) | |||
| { | |||
| @@ -1004,7 +984,6 @@ private: | |||
| if ( !strcmp( &argv[0]->s, "/nsm/server/list" ) ) | |||
| { | |||
| controller->add_session_to_list( &argv[1]->s ); | |||
| controller->sort_sessions(); | |||
| } | |||
| else if ( !strcmp( &argv[0]->s, "/osc/ping" ) ) | |||
| { | |||