diff --git a/gui/graph_view.c b/gui/graph_view.c index 31d56852..5f0a9cbd 100644 --- a/gui/graph_view.c +++ b/gui/graph_view.c @@ -28,6 +28,7 @@ #include "graph_view.h" #include "gtk_builder.h" #include "world_tree.h" +#include "menu.h" struct graph_view { @@ -244,6 +245,7 @@ void activate_view(graph_view_handle view) { attach_canvas(view_ptr); set_main_window_title(view); + menu_view_activated(is_room_view(view)); } const char * get_view_name(graph_view_handle view) @@ -290,6 +292,21 @@ canvas_handle get_current_canvas(void) return graph_canvas_get_canvas(g_current_view->graph_canvas); } +const char * get_current_view_room_name(void) +{ + if (g_current_view == NULL || !is_room_view((graph_view_handle)g_current_view)) + { + return NULL; + } + + return g_current_view->name; +} + +bool is_room_view(graph_view_handle view) +{ + return strcmp(graph_proxy_get_object(view_ptr->graph), STUDIO_OBJECT_PATH) != 0; +} + bool app_run_custom(graph_view_handle view, const char * command, const char * name, bool run_in_terminal, uint8_t level) { return ladish_app_supervisor_proxy_run_custom(view_ptr->app_supervisor, command, name, run_in_terminal, level); diff --git a/gui/graph_view.h b/gui/graph_view.h index 8cfa35f2..8598cee5 100644 --- a/gui/graph_view.h +++ b/gui/graph_view.h @@ -50,6 +50,8 @@ const char * get_view_name(graph_view_handle view); const char * get_view_opath(graph_view_handle view); bool set_view_name(graph_view_handle view, const char * name); canvas_handle get_current_canvas(void); +const char * get_current_view_room_name(void); +bool is_room_view(graph_view_handle view); ladish_app_supervisor_proxy_handle graph_view_get_app_supervisor(graph_view_handle view); bool app_run_custom(graph_view_handle view, const char * command, const char * name, bool run_in_terminal, uint8_t level); diff --git a/gui/main.c b/gui/main.c index 0b7d5f42..50625df6 100644 --- a/gui/main.c +++ b/gui/main.c @@ -786,6 +786,25 @@ void menu_request_create_room(void) } } +void menu_request_destroy_room(void) +{ + const char * room; + + room = get_current_view_room_name(); + if (room == NULL) + { + ASSERT_NO_PASS; + return; + } + + log_info("destroy room '%s' request", room); + + if (!studio_proxy_delete_room(room)) + { + error_message_box("Room deletion failed, please inspect logs."); + } +} + static gboolean poll_jack(gpointer data) { update_load(); diff --git a/gui/menu.c b/gui/menu.c index 144655a9..6e3408f3 100644 --- a/gui/menu.c +++ b/gui/menu.c @@ -113,6 +113,7 @@ void menu_init(void) g_signal_connect(G_OBJECT(g_menu_item_jack_configure), "activate", G_CALLBACK(menu_request_jack_configure), NULL); g_signal_connect(G_OBJECT(g_menu_item_start_app), "activate", G_CALLBACK(menu_request_start_app), NULL); g_signal_connect(G_OBJECT(g_menu_item_create_room), "activate", G_CALLBACK(menu_request_create_room), NULL); + g_signal_connect(G_OBJECT(g_menu_item_destroy_room), "activate", G_CALLBACK(menu_request_destroy_room), NULL); g_signal_connect(G_OBJECT(g_menu_item_jack_latency_32), "toggled", G_CALLBACK(buffer_size_change_request), (gpointer)32); g_signal_connect(G_OBJECT(g_menu_item_jack_latency_64), "toggled", G_CALLBACK(buffer_size_change_request), (gpointer)64); @@ -135,8 +136,6 @@ void menu_studio_state_changed(unsigned int studio_state) gtk_widget_set_sensitive(g_menu_item_rename_studio, studio_state == STUDIO_STATE_STOPPED || studio_state == STUDIO_STATE_STARTED); gtk_widget_set_sensitive(g_menu_item_start_app, studio_state == STUDIO_STATE_STOPPED || studio_state == STUDIO_STATE_STARTED); gtk_widget_set_sensitive(g_menu_item_create_room, studio_state == STUDIO_STATE_STOPPED || studio_state == STUDIO_STATE_STARTED); - //gtk_widget_set_sensitive(g_menu_item_destroy_room, studio_state == STUDIO_STATE_STOPPED || studio_state == STUDIO_STATE_STARTED); - //gtk_widget_set_sensitive(g_menu_item_load_project, studio_state == STUDIO_STATE_STARTED); } void menu_set_jack_latency_items_sensivity(bool sensitive) @@ -200,3 +199,9 @@ bool menu_set_jack_latency(uint32_t buffer_size, bool force, bool * changed_ptr) return true; } + +void menu_view_activated(bool room) +{ + gtk_widget_set_sensitive(g_menu_item_destroy_room, room); + //gtk_widget_set_sensitive(g_menu_item_load_project, room); +} diff --git a/gui/menu.h b/gui/menu.h index eec2d8a2..ac227b81 100644 --- a/gui/menu.h +++ b/gui/menu.h @@ -31,6 +31,7 @@ void menu_init(void); void menu_studio_state_changed(unsigned int studio_state); void menu_set_jack_latency_items_sensivity(bool sensitive); bool menu_set_jack_latency(uint32_t buffer_size, bool force, bool * changed_ptr); +void menu_view_activated(bool room); void menu_request_daemon_exit(void); void menu_request_toggle_toolbar(bool visible); @@ -44,6 +45,7 @@ void menu_request_stop_studio(void); void menu_request_unload_studio(void); void menu_request_rename_studio(void); void menu_request_create_room(void); +void menu_request_destroy_room(void); void menu_request_jack_latency_change(uint32_t buffer_size); #endif /* #ifndef MENU_H__37ACA2FE_C43D_4FA8_B7CF_6DD345F17CD1__INCLUDED */ diff --git a/proxies/studio_proxy.c b/proxies/studio_proxy.c index 81f6f50c..af50044e 100644 --- a/proxies/studio_proxy.c +++ b/proxies/studio_proxy.c @@ -334,3 +334,8 @@ bool studio_proxy_create_room(const char * name, const char * template) { return dbus_call(SERVICE_NAME, STUDIO_OBJECT_PATH, IFACE_STUDIO, "NewRoom", "ss", &name, &template, ""); } + +bool studio_proxy_delete_room(const char * name) +{ + return dbus_call(SERVICE_NAME, STUDIO_OBJECT_PATH, IFACE_STUDIO, "DeleteRoom", "s", &name, ""); +} diff --git a/proxies/studio_proxy.h b/proxies/studio_proxy.h index 475a0006..0aec4ef2 100644 --- a/proxies/studio_proxy.h +++ b/proxies/studio_proxy.h @@ -51,5 +51,6 @@ studio_proxy_set_room_callbacks( void (* changed)(const char * opath, const char * name, const char * template)); bool studio_proxy_create_room(const char * name, const char * template); +bool studio_proxy_delete_room(const char * name); #endif /* #ifndef STUDIO_PROXY_H__2CEC623F_C998_4618_A947_D1A0016DF978__INCLUDED */