Changeset 8a4d7e354f95ed66450b43c1660d8d85e4c3a6d1

Show
Ignore:
Timestamp:
09/05/10 18:51:17 (3 years ago)
Author:
Nedko Arnaudov <nedko@…>
Children:
e94e85da234ab3b679e5c7ec0a270ff1dc607bf0
Parents:
649f30fea6f4d836484f964d2f05a593262b8449
git-committer:
Nedko Arnaudov <nedko@arnaudov.name> / 2010-09-05T18:51:17Z+0300
Message:

gui: canvas popup menu

Location:
gui
Files:
8 modified

Legend:

Unmodified
Added
Removed
  • gui/canvas.cpp

    ra40d402 r8a4d7e3  
    33 * LADI Session Handler (ladish) 
    44 * 
    5  * Copyright (C) 2008, 2009 Nedko Arnaudov <nedko@arnaudov.name> 
     5 * Copyright (C) 2008, 2009, 2010 Nedko Arnaudov <nedko@arnaudov.name> 
    66 * Copyright (C) 2007 Dave Robillard <http://drobilla.net> 
    77 * 
     
    4040    void (* connect_request)(void * port1_context, void * port2_context), 
    4141    void (* disconnect_request)(void * port1_context, void * port2_context), 
    42     void (* module_location_changed)(void * module_context, double x, double y)) 
     42    void (* module_location_changed)(void * module_context, double x, double y), 
     43    void (* fill_canvas_menu)(GtkMenu * menu), 
     44    void (* fill_module_menu)(GtkMenu * menu, void * module_context), 
     45    void (* fill_port_menu)(GtkMenu * menu, void * port_context)) 
    4346    : FlowCanvas::Canvas(width, height) 
    4447    , m_connect_request(connect_request) 
    4548    , m_disconnect_request(disconnect_request) 
    4649    , m_module_location_changed(module_location_changed) 
     50    , m_fill_canvas_menu(fill_canvas_menu) 
     51    , m_fill_module_menu(fill_module_menu) 
     52    , m_fill_port_menu(fill_port_menu) 
    4753  {} 
    4854 
     
    6773  } 
    6874 
     75  virtual bool canvas_event(GdkEvent * event); 
     76 
    6977  virtual void connect(boost::shared_ptr<FlowCanvas::Connectable> port1, boost::shared_ptr<FlowCanvas::Connectable> port2); 
    7078  virtual void disconnect(boost::shared_ptr<FlowCanvas::Connectable> port1, boost::shared_ptr<FlowCanvas::Connectable> port2); 
     
    7381  void (* m_disconnect_request)(void * port1_context, void * port2_context); 
    7482  void (* m_module_location_changed)(void * module_context, double x, double y); 
     83  void (* m_fill_canvas_menu)(GtkMenu * menu); 
     84  void (* m_fill_module_menu)(GtkMenu * menu, void * module_context); 
     85  void (* m_fill_port_menu)(GtkMenu * menu, void * port_context); 
    7586}; 
    7687 
     
    101112    _menu = new Gtk::Menu(); 
    102113    _menu->items().push_back(Gtk::Menu_Helpers::MenuElem("Disconnect All", sigc::mem_fun(this, &module_cls::menu_disconnect_all))); 
     114    void (* fill_module_menu)(GtkMenu * menu, void * module_context) = boost::dynamic_pointer_cast<canvas_cls>(canvas().lock())->m_fill_module_menu; 
     115    if (fill_module_menu != NULL) 
     116    { 
     117      fill_module_menu(_menu->gobj(), m_context); 
     118    } 
    103119  } 
    104120 
     
    147163  void (* disconnect_request)(void * port1_context, void * port2_context), 
    148164  void (* module_location_changed)(void * module_context, double x, double y), 
     165  void (* fill_canvas_menu)(GtkMenu * menu), 
     166  void (* fill_module_menu)(GtkMenu * menu, void * module_context), 
     167  void (* fill_port_menu)(GtkMenu * menu, void * port_context), 
    149168  canvas_handle * canvas_handle_ptr) 
    150169{ 
    151170  boost::shared_ptr<canvas_cls> * canvas; 
    152171 
    153   canvas = new boost::shared_ptr<canvas_cls>(new canvas_cls(width, height, connect_request, disconnect_request, module_location_changed)); 
     172  canvas = new boost::shared_ptr<canvas_cls>(new canvas_cls(width, 
     173                                                            height, 
     174                                                            connect_request, 
     175                                                            disconnect_request, 
     176                                                            module_location_changed, 
     177                                                            fill_canvas_menu, 
     178                                                            fill_module_menu, 
     179                                                            fill_port_menu)); 
    154180 
    155181  *canvas_handle_ptr = (canvas_handle)canvas; 
     
    365391#undef port2_ptr 
    366392 
     393bool canvas_cls::canvas_event(GdkEvent * event) 
     394{ 
     395        assert(event); 
     396 
     397        if (m_fill_canvas_menu != NULL && event->type == GDK_BUTTON_PRESS && event->button.button == 3) 
     398  { 
     399    Gtk::Menu * menu_ptr; 
     400    menu_ptr = new Gtk::Menu(); 
     401    m_fill_canvas_menu(menu_ptr->gobj()); 
     402    menu_ptr->show_all(); 
     403    menu_ptr->popup(event->button.button, event->button.time); 
     404    return true; 
     405  } 
     406 
     407        return Canvas::canvas_event(event); 
     408} 
     409 
    367410void 
    368411canvas_cls::connect( 
  • gui/canvas.h

    r093af66 r8a4d7e3  
    33 * LADI Session Handler (ladish) 
    44 * 
    5  * Copyright (C) 2009 Nedko Arnaudov <nedko@arnaudov.name> 
     5 * Copyright (C) 2009, 2010 Nedko Arnaudov <nedko@arnaudov.name> 
    66 * 
    77 ************************************************************************** 
     
    5252  void (* disconnect_request)(void * port1_context, void * port2_context), 
    5353  void (* module_location_changed)(void * module_context, double x, double y), 
     54  void (* fill_canvas_menu)(GtkMenu * menu), 
     55  void (* fill_module_menu)(GtkMenu * menu, void * module_context), 
     56  void (* fill_port_menu)(GtkMenu * menu, void * port_context), 
    5457  canvas_handle * canvas_handle_ptr); 
    5558 
  • gui/graph_canvas.c

    r093af66 r8a4d7e3  
    33 * LADI Session Handler (ladish) 
    44 * 
    5  * Copyright (C) 2009 Nedko Arnaudov <nedko@arnaudov.name> 
     5 * Copyright (C) 2009, 2010 Nedko Arnaudov <nedko@arnaudov.name> 
    66 * 
    77 ************************************************************************** 
     
    175175  int width, 
    176176  int height, 
     177  void (* fill_canvas_menu)(GtkMenu * menu), 
    177178  graph_canvas_handle * graph_canvas_handle_ptr) 
    178179{ 
     
    185186  } 
    186187 
    187   if (!canvas_create(width, height, connect_request, disconnect_request, module_location_changed, &graph_canvas_ptr->canvas)) 
     188  if (!canvas_create( 
     189        width, 
     190        height, 
     191        connect_request, 
     192        disconnect_request, 
     193        module_location_changed, 
     194        fill_canvas_menu, 
     195        NULL, 
     196        NULL, 
     197        &graph_canvas_ptr->canvas)) 
    188198  { 
    189199    free(graph_canvas_ptr); 
  • gui/graph_canvas.h

    rb5565fd r8a4d7e3  
    33 * LADI Session Handler (ladish) 
    44 * 
    5  * Copyright (C) 2009 Nedko Arnaudov <nedko@arnaudov.name> 
     5 * Copyright (C) 2009, 2010 Nedko Arnaudov <nedko@arnaudov.name> 
    66 * 
    77 ************************************************************************** 
     
    3737  int width, 
    3838  int height, 
     39  void (* fill_canvas_menu)(GtkMenu * menu), 
    3940  graph_canvas_handle * graph_canvas_ptr); 
    4041 
  • gui/graph_view.c

    r7eaf2d1 r8a4d7e3  
    177177#undef view_ptr 
    178178 
     179static void fill_canvas_menu(GtkMenu * menu) 
     180{ 
     181  fill_view_popup_menu(menu, (graph_view_handle)g_current_view); 
     182} 
     183 
    179184bool 
    180185create_view( 
     
    213218  } 
    214219 
    215   if (!graph_canvas_create(1600 * 2, 1200 * 2, &view_ptr->graph_canvas)) 
     220  if (!graph_canvas_create(1600 * 2, 1200 * 2, fill_canvas_menu, &view_ptr->graph_canvas)) 
    216221  { 
    217222    goto destroy_graph; 
  • gui/menu.c

    r997208c r8a4d7e3  
    225225  gtk_widget_set_sensitive(g_menu_item_save_as_project, room); 
    226226} 
     227 
     228static void on_popup_menu_action_start_app(GtkWidget * menuitem, gpointer userdata) 
     229{ 
     230  menu_request_start_app(); 
     231} 
     232 
     233static void on_popup_menu_action_create_room(GtkWidget * menuitem, gpointer userdata) 
     234{ 
     235  menu_request_create_room(); 
     236} 
     237 
     238static void on_popup_menu_action_destroy_room(GtkWidget * menuitem, gpointer userdata) 
     239{ 
     240  menu_request_destroy_room(); 
     241} 
     242 
     243static void on_popup_menu_action_load_project(GtkWidget * menuitem, gpointer userdata) 
     244{ 
     245  menu_request_load_project(); 
     246} 
     247 
     248static void on_popup_menu_action_unload_project(GtkWidget * menuitem, gpointer userdata) 
     249{ 
     250  menu_request_unload_project(); 
     251} 
     252 
     253static void on_popup_menu_action_save_project(GtkWidget * menuitem, gpointer userdata) 
     254{ 
     255  menu_request_save_project(); 
     256} 
     257 
     258static void on_popup_menu_action_save_project_as(GtkWidget * menuitem, gpointer userdata) 
     259{ 
     260  menu_request_save_as_project(); 
     261} 
     262 
     263void fill_view_popup_menu(GtkMenu * menu, graph_view_handle view) 
     264{ 
     265  GtkWidget * menuitem; 
     266 
     267  log_info("filling view menu..."); 
     268 
     269  if (graph_view_get_app_supervisor(view) != NULL) 
     270  { 
     271    menuitem = gtk_menu_item_new_with_label("Run..."); 
     272    g_signal_connect(menuitem, "activate", (GCallback)on_popup_menu_action_start_app, NULL); 
     273    gtk_menu_shell_append(GTK_MENU_SHELL(menu), menuitem); 
     274  } 
     275 
     276  if (is_room_view(view)) 
     277  { 
     278    menuitem = gtk_menu_item_new_with_label("Load Project..."); 
     279    g_signal_connect(menuitem, "activate", (GCallback)on_popup_menu_action_load_project, NULL); 
     280    gtk_menu_shell_append(GTK_MENU_SHELL(menu), menuitem); 
     281 
     282    menuitem = gtk_menu_item_new_with_label("Unload Project"); 
     283    g_signal_connect(menuitem, "activate", (GCallback)on_popup_menu_action_unload_project, NULL); 
     284    gtk_menu_shell_append(GTK_MENU_SHELL(menu), menuitem); 
     285 
     286    menuitem = gtk_menu_item_new_with_label("Save Project..."); 
     287    g_signal_connect(menuitem, "activate", (GCallback)on_popup_menu_action_save_project, NULL); 
     288    gtk_menu_shell_append(GTK_MENU_SHELL(menu), menuitem); 
     289 
     290    menuitem = gtk_menu_item_new_with_label("Save Project As..."); 
     291    g_signal_connect(menuitem, "activate", (GCallback)on_popup_menu_action_save_project_as, NULL); 
     292    gtk_menu_shell_append(GTK_MENU_SHELL(menu), menuitem); 
     293 
     294    menuitem = gtk_separator_menu_item_new(); /* separator */ 
     295    gtk_menu_shell_append(GTK_MENU_SHELL(menu), menuitem); 
     296 
     297    menuitem = gtk_menu_item_new_with_label("Destroy Room"); 
     298    g_signal_connect(menuitem, "activate", (GCallback)on_popup_menu_action_destroy_room, NULL); 
     299    gtk_menu_shell_append(GTK_MENU_SHELL(menu), menuitem); 
     300  } 
     301  else 
     302  { 
     303    menuitem = gtk_menu_item_new_with_label("Create Room..."); 
     304    g_signal_connect(menuitem, "activate", (GCallback)on_popup_menu_action_create_room, NULL); 
     305    gtk_menu_shell_append(GTK_MENU_SHELL(menu), menuitem); 
     306  } 
     307} 
  • gui/menu.h

    r997208c r8a4d7e3  
    2828#define MENU_H__37ACA2FE_C43D_4FA8_B7CF_6DD345F17CD1__INCLUDED 
    2929 
     30#include "graph_view.h" 
     31 
    3032void menu_init(void); 
    3133void menu_studio_state_changed(unsigned int studio_state); 
     
    3335bool menu_set_jack_latency(uint32_t buffer_size, bool force, bool * changed_ptr); 
    3436void menu_view_activated(bool room); 
     37void fill_view_popup_menu(GtkMenu * menu, graph_view_handle view); 
    3538 
    3639void menu_request_daemon_exit(void); 
  • gui/world_tree.c

    r649f30f r8a4d7e3  
    330330} 
    331331 
    332 void on_popup_menu_action_start_app(GtkWidget * menuitem, gpointer userdata) 
    333 { 
    334   menu_request_start_app(); 
    335 } 
    336  
    337 void on_popup_menu_action_create_room(GtkWidget * menuitem, gpointer userdata) 
    338 { 
    339   menu_request_create_room(); 
    340 } 
    341  
    342 void on_popup_menu_action_destroy_room(GtkWidget * menuitem, gpointer userdata) 
    343 { 
    344   menu_request_destroy_room(); 
    345 } 
    346  
    347 void on_popup_menu_action_load_project(GtkWidget * menuitem, gpointer userdata) 
    348 { 
    349   menu_request_load_project(); 
    350 } 
    351  
    352 void on_popup_menu_action_unload_project(GtkWidget * menuitem, gpointer userdata) 
    353 { 
    354   menu_request_unload_project(); 
    355 } 
    356  
    357 void on_popup_menu_action_save_project(GtkWidget * menuitem, gpointer userdata) 
    358 { 
    359   menu_request_save_project(); 
    360 } 
    361  
    362 void on_popup_menu_action_save_project_as(GtkWidget * menuitem, gpointer userdata) 
    363 { 
    364   menu_request_save_as_project(); 
    365 } 
    366  
    367332void popup_menu(GtkWidget * treeview, GdkEventButton * event) 
    368333{ 
     
    429394  else if (type == entry_type_view) 
    430395  { 
    431     if (graph_view_get_app_supervisor(view) != NULL) 
    432     { 
    433       menuitem = gtk_menu_item_new_with_label("Run..."); 
    434       g_signal_connect(menuitem, "activate", (GCallback)on_popup_menu_action_start_app, NULL); 
    435       gtk_menu_shell_append(GTK_MENU_SHELL(menu), menuitem); 
    436     } 
    437  
    438     if (is_room_view(view)) 
    439     { 
    440       menuitem = gtk_menu_item_new_with_label("Load Project..."); 
    441       g_signal_connect(menuitem, "activate", (GCallback)on_popup_menu_action_load_project, NULL); 
    442       gtk_menu_shell_append(GTK_MENU_SHELL(menu), menuitem); 
    443  
    444       menuitem = gtk_menu_item_new_with_label("Unload Project"); 
    445       g_signal_connect(menuitem, "activate", (GCallback)on_popup_menu_action_unload_project, NULL); 
    446       gtk_menu_shell_append(GTK_MENU_SHELL(menu), menuitem); 
    447  
    448       menuitem = gtk_menu_item_new_with_label("Save Project..."); 
    449       g_signal_connect(menuitem, "activate", (GCallback)on_popup_menu_action_save_project, NULL); 
    450       gtk_menu_shell_append(GTK_MENU_SHELL(menu), menuitem); 
    451  
    452       menuitem = gtk_menu_item_new_with_label("Save Project As..."); 
    453       g_signal_connect(menuitem, "activate", (GCallback)on_popup_menu_action_save_project_as, NULL); 
    454       gtk_menu_shell_append(GTK_MENU_SHELL(menu), menuitem); 
    455  
    456       menuitem = gtk_separator_menu_item_new(); /* separator */ 
    457       gtk_menu_shell_append(GTK_MENU_SHELL(menu), menuitem); 
    458  
    459       menuitem = gtk_menu_item_new_with_label("Destroy Room"); 
    460       g_signal_connect(menuitem, "activate", (GCallback)on_popup_menu_action_destroy_room, NULL); 
    461       gtk_menu_shell_append(GTK_MENU_SHELL(menu), menuitem); 
    462     } 
    463     else 
    464     { 
    465       menuitem = gtk_menu_item_new_with_label("Create Room..."); 
    466       g_signal_connect(menuitem, "activate", (GCallback)on_popup_menu_action_create_room, NULL); 
    467       gtk_menu_shell_append(GTK_MENU_SHELL(menu), menuitem); 
    468     } 
     396    fill_view_popup_menu(GTK_MENU(menu), view); 
    469397  } 
    470398  else