gui: initial dialog for starting programs

This commit is contained in:
Nedko Arnaudov 2009-12-02 00:01:30 +02:00
parent 185034b263
commit 94c197fe33
2 changed files with 275 additions and 10 deletions

View File

@ -136,7 +136,7 @@
<property name="use_underline">True</property>
<accelerator key="U" modifiers="GDK_SHIFT_MASK | GDK_CONTROL_MASK" signal="activate"/>
<child internal-child="image">
<widget class="GtkImage" id="menu-item-image5">
<widget class="GtkImage" id="menu-item-image17">
<property name="visible">True</property>
<property name="stock">gtk-close</property>
<property name="icon_size">1</property>
@ -151,7 +151,7 @@
<property name="use_underline">True</property>
<signal name="activate" handler="on_delete_project_menuitem_activate"/>
<child internal-child="image">
<widget class="GtkImage" id="image823">
<widget class="GtkImage" id="image1">
<property name="visible">True</property>
<property name="stock">gtk-delete</property>
<property name="icon_size">1</property>
@ -247,15 +247,30 @@
</child>
</widget>
</child>
</widget>
</child>
</widget>
</child>
<child>
<widget class="GtkMenuItem" id="application_menu_item">
<property name="visible">True</property>
<property name="label" translatable="yes">_Application</property>
<property name="use_underline">True</property>
<child>
<widget class="GtkMenu" id="application_menu">
<property name="visible">True</property>
<child>
<widget class="GtkImageMenuItem" id="menu_item_start_app">
<property name="visible">True</property>
<property name="sensitive">False</property>
<property name="label" translatable="yes">Start Application</property>
<property name="events">GDK_POINTER_MOTION_MASK | GDK_POINTER_MOTION_HINT_MASK | GDK_BUTTON_PRESS_MASK | GDK_BUTTON_RELEASE_MASK</property>
<property name="label" translatable="yes">Run...</property>
<property name="use_underline">True</property>
<accelerator key="R" modifiers="GDK_CONTROL_MASK" signal="activate"/>
<accelerator key="F2" modifiers="" signal="activate"/>
<child internal-child="image">
<widget class="GtkImage" id="menu-item-image12">
<widget class="GtkImage" id="menu-item-image151">
<property name="visible">True</property>
<property name="events">GDK_POINTER_MOTION_MASK | GDK_POINTER_MOTION_HINT_MASK | GDK_BUTTON_PRESS_MASK | GDK_BUTTON_RELEASE_MASK</property>
<property name="stock">gtk-execute</property>
</widget>
</child>
@ -320,7 +335,7 @@
<property name="label" translatable="yes">_Configure JACK</property>
<property name="use_underline">True</property>
<child internal-child="image">
<widget class="GtkImage" id="menu-item-image17">
<widget class="GtkImage" id="menu-item-image18">
<property name="visible">True</property>
<property name="events">GDK_POINTER_MOTION_MASK | GDK_POINTER_MOTION_HINT_MASK | GDK_BUTTON_PRESS_MASK | GDK_BUTTON_RELEASE_MASK</property>
<property name="stock">gtk-preferences</property>
@ -1021,4 +1036,220 @@ along with LADI Session Handler; if not, write to the Free Software Foundation,
<property name="message_type">GTK_MESSAGE_ERROR</property>
<property name="buttons">GTK_BUTTONS_CLOSE</property>
</widget>
<widget class="GtkDialog" id="app_dialog">
<property name="border_width">5</property>
<property name="title" translatable="yes">Run custom command</property>
<property name="window_position">GTK_WIN_POS_CENTER_ON_PARENT</property>
<property name="default_width">400</property>
<property name="type_hint">GDK_WINDOW_TYPE_HINT_DIALOG</property>
<property name="transient_for">main_win</property>
<child internal-child="vbox">
<widget class="GtkVBox" id="dialog-vbox10">
<property name="visible">True</property>
<property name="orientation">GTK_ORIENTATION_VERTICAL</property>
<property name="spacing">2</property>
<property name="orientation">GTK_ORIENTATION_VERTICAL</property>
<child>
<widget class="GtkTable" id="table1">
<property name="visible">True</property>
<property name="n_rows">7</property>
<property name="n_columns">2</property>
<property name="column_spacing">5</property>
<property name="row_spacing">5</property>
<child>
<widget class="GtkLabel" id="label4">
<property name="visible">True</property>
<property name="xalign">0</property>
<property name="yalign">0</property>
<property name="label" translatable="yes">Command:</property>
</widget>
<packing>
<property name="x_options">GTK_FILL</property>
<property name="y_options">GTK_FILL</property>
</packing>
</child>
<child>
<widget class="GtkLabel" id="label5">
<property name="visible">True</property>
<property name="xalign">0</property>
<property name="label" translatable="yes">Name:</property>
</widget>
<packing>
<property name="top_attach">1</property>
<property name="bottom_attach">2</property>
<property name="x_options">GTK_FILL</property>
<property name="y_options">GTK_FILL</property>
</packing>
</child>
<child>
<widget class="GtkEntry" id="app_name_entry">
<property name="visible">True</property>
<property name="can_focus">True</property>
<property name="invisible_char">•</property>
<property name="activates_default">True</property>
</widget>
<packing>
<property name="left_attach">1</property>
<property name="right_attach">2</property>
<property name="top_attach">1</property>
<property name="bottom_attach">2</property>
<property name="x_options">GTK_FILL</property>
<property name="y_options">GTK_FILL</property>
</packing>
</child>
<child>
<widget class="GtkCheckButton" id="app_terminal_check_button">
<property name="visible">True</property>
<property name="can_focus">True</property>
<property name="label" translatable="yes">Run in Terminal</property>
<property name="response_id">0</property>
<property name="draw_indicator">True</property>
</widget>
<packing>
<property name="right_attach">2</property>
<property name="top_attach">2</property>
<property name="bottom_attach">3</property>
<property name="x_options">GTK_FILL</property>
<property name="y_options">GTK_FILL</property>
</packing>
</child>
<child>
<widget class="GtkRadioButton" id="app_level0">
<property name="visible">True</property>
<property name="can_focus">True</property>
<property name="label" translatable="yes">Level 0</property>
<property name="response_id">0</property>
<property name="active">True</property>
<property name="draw_indicator">True</property>
</widget>
<packing>
<property name="right_attach">2</property>
<property name="top_attach">3</property>
<property name="bottom_attach">4</property>
<property name="x_options">GTK_FILL</property>
<property name="y_options">GTK_FILL</property>
</packing>
</child>
<child>
<widget class="GtkRadioButton" id="app_level1">
<property name="visible">True</property>
<property name="sensitive">False</property>
<property name="can_focus">True</property>
<property name="label" translatable="yes">Level 1</property>
<property name="response_id">0</property>
<property name="active">True</property>
<property name="draw_indicator">True</property>
<property name="group">app_level0</property>
</widget>
<packing>
<property name="right_attach">2</property>
<property name="top_attach">4</property>
<property name="bottom_attach">5</property>
<property name="x_options">GTK_FILL</property>
<property name="y_options">GTK_FILL</property>
</packing>
</child>
<child>
<widget class="GtkEntry" id="app_command_entry">
<property name="visible">True</property>
<property name="can_focus">True</property>
<property name="has_focus">True</property>
<property name="invisible_char">•</property>
<property name="activates_default">True</property>
</widget>
<packing>
<property name="left_attach">1</property>
<property name="right_attach">2</property>
<property name="y_options">GTK_FILL</property>
</packing>
</child>
<child>
<widget class="GtkRadioButton" id="app_level2">
<property name="visible">True</property>
<property name="sensitive">False</property>
<property name="can_focus">True</property>
<property name="label" translatable="yes">Level 2</property>
<property name="response_id">0</property>
<property name="active">True</property>
<property name="draw_indicator">True</property>
<property name="group">app_level0</property>
</widget>
<packing>
<property name="right_attach">2</property>
<property name="top_attach">5</property>
<property name="bottom_attach">6</property>
<property name="x_options">GTK_FILL</property>
<property name="y_options">GTK_FILL</property>
</packing>
</child>
<child>
<widget class="GtkRadioButton" id="app_level3">
<property name="visible">True</property>
<property name="sensitive">False</property>
<property name="can_focus">True</property>
<property name="label" translatable="yes">Level 3</property>
<property name="response_id">0</property>
<property name="active">True</property>
<property name="draw_indicator">True</property>
<property name="group">app_level0</property>
</widget>
<packing>
<property name="right_attach">2</property>
<property name="top_attach">6</property>
<property name="bottom_attach">7</property>
<property name="x_options">GTK_FILL</property>
<property name="y_options">GTK_FILL</property>
</packing>
</child>
</widget>
<packing>
<property name="position">1</property>
</packing>
</child>
<child internal-child="action_area">
<widget class="GtkHButtonBox" id="dialog-action_area10">
<property name="visible">True</property>
<property name="layout_style">GTK_BUTTONBOX_END</property>
<child>
<widget class="GtkButton" id="button1">
<property name="visible">True</property>
<property name="can_focus">True</property>
<property name="can_default">True</property>
<property name="receives_default">True</property>
<property name="label" translatable="yes">gtk-cancel</property>
<property name="use_stock">True</property>
<property name="response_id">1</property>
</widget>
<packing>
<property name="expand">False</property>
<property name="fill">False</property>
</packing>
</child>
<child>
<widget class="GtkButton" id="button2">
<property name="visible">True</property>
<property name="can_focus">True</property>
<property name="can_default">True</property>
<property name="has_default">True</property>
<property name="receives_default">True</property>
<property name="events">GDK_POINTER_MOTION_MASK | GDK_POINTER_MOTION_HINT_MASK | GDK_BUTTON_PRESS_MASK | GDK_BUTTON_RELEASE_MASK</property>
<property name="label" translatable="yes">gtk-ok</property>
<property name="use_stock">True</property>
<property name="response_id">2</property>
</widget>
<packing>
<property name="expand">False</property>
<property name="fill">False</property>
<property name="position">1</property>
</packing>
</child>
</widget>
<packing>
<property name="expand">False</property>
<property name="pack_type">GTK_PACK_END</property>
</packing>
</child>
</widget>
</child>
</widget>
</glade-interface>

View File

@ -57,14 +57,15 @@ GtkWidget * g_menu_item_rename_studio;
GtkWidget * g_menu_item_create_room;
GtkWidget * g_menu_item_destroy_room;
GtkWidget * g_menu_item_load_project;
GtkWidget * g_menu_item_start_app;
GtkWidget * g_menu_item_daemon_exit;
GtkWidget * g_menu_item_jack_configure;
GtkWidget * g_studio_status_label;
GtkWidget * g_menu_item_view_toolbar;
GtkWidget * g_toolbar;
GtkWidget * g_menu_item_start_app;
GtkWidget * g_name_dialog;
GtkWidget * g_app_dialog;
graph_view_handle g_jack_view = NULL;
graph_view_handle g_studio_view = NULL;
@ -224,6 +225,32 @@ void error_message_box(const char * failed_operation)
gtk_widget_hide(dialog);
}
void run_custom_command_dialog(void)
{
guint result;
GtkEntry * command_entry = GTK_ENTRY(get_glade_widget("app_command_entry"));
GtkEntry * name_entry = GTK_ENTRY(get_glade_widget("app_name_entry"));
GtkToggleButton * terminal_button = GTK_TOGGLE_BUTTON(get_glade_widget("app_terminal_check_button"));
/* GtkToggleButton * level0_button = GTK_TOGGLE_BUTTON(get_glade_widget("app_level0")); */
/* GtkToggleButton * level1_button = GTK_TOGGLE_BUTTON(get_glade_widget("app_level1")); */
/* GtkToggleButton * level2_button = GTK_TOGGLE_BUTTON(get_glade_widget("app_level2")); */
/* GtkToggleButton * level3_button = GTK_TOGGLE_BUTTON(get_glade_widget("app_level3")); */
gtk_entry_set_text(name_entry, "");
gtk_entry_set_text(command_entry, "");
gtk_toggle_button_set_active(terminal_button, FALSE);
gtk_widget_show(g_app_dialog);
result = gtk_dialog_run(GTK_DIALOG(g_app_dialog));
if (result == 2)
{
log_info("'%s':'%s' %s", gtk_entry_get_text(name_entry), gtk_entry_get_text(command_entry), gtk_toggle_button_get_active(terminal_button) ? "terminal" : "shell");
}
gtk_widget_hide(g_app_dialog);
}
static void arrange(void)
{
canvas_handle canvas;
@ -392,6 +419,11 @@ static void new_studio(void)
}
}
static void start_app(void)
{
run_custom_command_dialog();
}
static void start_studio(void)
{
log_info("start studio request");
@ -469,10 +501,10 @@ void control_proxy_on_studio_appeared(void)
gtk_widget_set_sensitive(g_menu_item_save_studio, true);
gtk_widget_set_sensitive(g_menu_item_unload_studio, true);
gtk_widget_set_sensitive(g_menu_item_rename_studio, true);
gtk_widget_set_sensitive(g_menu_item_start_app, true);
//gtk_widget_set_sensitive(g_menu_item_create_room, true);
//gtk_widget_set_sensitive(g_menu_item_destroy_room, true);
//gtk_widget_set_sensitive(g_menu_item_load_project, true);
//gtk_widget_set_sensitive(g_menu_item_start_app, true);
gtk_label_set_text(GTK_LABEL(g_studio_status_label), name);
@ -496,10 +528,10 @@ void control_proxy_on_studio_disappeared(void)
gtk_widget_set_sensitive(g_menu_item_save_studio, false);
gtk_widget_set_sensitive(g_menu_item_unload_studio, false);
gtk_widget_set_sensitive(g_menu_item_rename_studio, false);
gtk_widget_set_sensitive(g_menu_item_start_app, false);
//gtk_widget_set_sensitive(g_menu_item_create_room, false);
//gtk_widget_set_sensitive(g_menu_item_destroy_room, false);
//gtk_widget_set_sensitive(g_menu_item_load_project, false);
//gtk_widget_set_sensitive(g_menu_item_start_app, false);
gtk_label_set_text(GTK_LABEL(g_studio_status_label), "No studio loaded");
@ -643,6 +675,7 @@ int main(int argc, char** argv)
g_xrun_progress_bar = get_glade_widget("xrun_progress_bar");
g_buffer_size_combo = get_glade_widget("buffer_size_combo");
g_menu_item_new_studio = get_glade_widget("menu_item_new_studio");
g_menu_item_start_app = get_glade_widget("menu_item_start_app");
g_menu_item_start_studio = get_glade_widget("menu_item_start_studio");
g_menu_item_stop_studio = get_glade_widget("menu_item_stop_studio");
g_menu_item_save_studio = get_glade_widget("menu_item_save_studio");
@ -651,7 +684,6 @@ int main(int argc, char** argv)
g_menu_item_create_room = get_glade_widget("menu_item_create_room");
g_menu_item_destroy_room = get_glade_widget("menu_item_destroy_room");
g_menu_item_load_project = get_glade_widget("menu_item_load_project");
g_menu_item_start_app = get_glade_widget("menu_item_start_app");
g_menu_item_daemon_exit = get_glade_widget("menu_item_daemon_exit");
g_menu_item_jack_configure = get_glade_widget("menu_item_jack_configure");
g_studio_status_label = get_glade_widget("studio_status_label");
@ -659,6 +691,7 @@ int main(int argc, char** argv)
g_toolbar = get_glade_widget("toolbar");
g_name_dialog = get_glade_widget("name_dialog");
g_app_dialog = get_glade_widget("app_dialog");
init_studio_list(&g_load_studio_list, "menu_item_load_studio", "load_studio_menu", on_load_studio);
init_studio_list(&g_delete_studio_list, "menu_item_delete_studio", "delete_studio_menu", on_delete_studio);
@ -702,6 +735,7 @@ int main(int argc, char** argv)
g_signal_connect(G_OBJECT(g_menu_item_daemon_exit), "activate", G_CALLBACK(daemon_exit), NULL);
g_signal_connect(G_OBJECT(g_menu_item_jack_configure), "activate", G_CALLBACK(jack_configure), NULL);
g_signal_connect(G_OBJECT(get_glade_widget("menu_item_help_about")), "activate", G_CALLBACK(show_about), NULL);
g_signal_connect(G_OBJECT(g_menu_item_start_app), "activate", G_CALLBACK(start_app), NULL);
gtk_widget_show(g_main_win);