ui_menu_bar.c 11.2 KB
Newer Older
Cedric Roux's avatar
 
Cedric Roux committed
1 2
#include <gtk/gtk.h>

3
#include "rc.h"
Cedric Roux's avatar
 
Cedric Roux committed
4 5 6 7
#include "ui_main_screen.h"
#include "ui_menu_bar.h"
#include "ui_callbacks.h"

8 9 10 11
static const guint BUTTON_SPACE = 0;
static const guint LABEL_SPACE = 5;
static const guint SEPARATOR_SPACE = 5;

12 13 14 15 16 17 18 19
void ui_set_sensitive_move_buttons(gboolean enable)
{
    // gtk_widget_set_sensitive(GTK_WIDGET(ui_main_data.signals_clear_button), enable);
    // gtk_widget_set_sensitive(GTK_WIDGET(ui_main_data.signals_go_to_button), enable);
    gtk_widget_set_sensitive(GTK_WIDGET(ui_main_data.signals_go_to_last_button), enable);
    gtk_widget_set_sensitive(GTK_WIDGET(ui_main_data.signals_go_to_first_button), enable);
}

Cedric Roux's avatar
 
Cedric Roux committed
20 21 22 23 24 25
int ui_menu_bar_create(GtkWidget *vbox)
{
    GtkWidget *menubar;
    GtkWidget *filemenu, *helpmenu;
    GtkWidget *file;
    GtkWidget *help;
26 27 28 29
    GtkWidget *open_messages;
    GtkWidget *save_messages;
    GtkWidget *open_filters;
    GtkWidget *save_filters;
Cedric Roux's avatar
 
Cedric Roux committed
30 31
    GtkWidget *quit;
    GtkWidget *about;
winckel's avatar
winckel committed
32 33
    GtkWidget *separator1;
    GtkWidget *separator2;
Cedric Roux's avatar
 
Cedric Roux committed
34 35 36 37 38 39 40 41 42 43

    if (!vbox)
        return RC_BAD_PARAM;

    menubar = gtk_menu_bar_new();

    /* Create the File submenu */
    filemenu = gtk_menu_new();

    file = gtk_menu_item_new_with_label("File");
44 45 46 47
    open_messages  = gtk_menu_item_new_with_label("Open messages file");
    save_messages  = gtk_menu_item_new_with_label("Save messages file");
    open_filters  = gtk_menu_item_new_with_label("Open filters file");
    save_filters  = gtk_menu_item_new_with_label("Save filters file");
Cedric Roux's avatar
 
Cedric Roux committed
48
    quit  = gtk_menu_item_new_with_label("Quit");
winckel's avatar
winckel committed
49 50
    separator1 = gtk_menu_item_new();
    separator2 = gtk_menu_item_new();
Cedric Roux's avatar
 
Cedric Roux committed
51 52 53 54

    gtk_menu_item_set_submenu(GTK_MENU_ITEM(file), filemenu);

    gtk_menu_shell_append(GTK_MENU_SHELL(menubar), file);
55 56
    gtk_menu_shell_append(GTK_MENU_SHELL(filemenu), open_messages);
    gtk_menu_shell_append(GTK_MENU_SHELL(filemenu), save_messages);
winckel's avatar
winckel committed
57
    gtk_menu_shell_append(GTK_MENU_SHELL(filemenu), separator1);
58 59
    gtk_menu_shell_append(GTK_MENU_SHELL(filemenu), open_filters);
    gtk_menu_shell_append(GTK_MENU_SHELL(filemenu), save_filters);
winckel's avatar
winckel committed
60
    gtk_menu_shell_append(GTK_MENU_SHELL(filemenu), separator2);
Cedric Roux's avatar
 
Cedric Roux committed
61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76
    gtk_menu_shell_append(GTK_MENU_SHELL(filemenu), quit);

    /* Create the Help submenu */
    helpmenu = gtk_menu_new();

    help = gtk_menu_item_new_with_label("Help");
    about = gtk_menu_item_new_with_label("About");

    gtk_menu_item_set_submenu(GTK_MENU_ITEM(help), helpmenu);

    gtk_menu_shell_append(GTK_MENU_SHELL(menubar), help);
    gtk_menu_shell_append(GTK_MENU_SHELL(helpmenu), about);

    /* Add the menubar to the vbox */
    gtk_box_pack_start(GTK_BOX(vbox), menubar, FALSE, FALSE, 3);

77 78 79 80 81 82 83 84 85 86 87 88
    g_signal_connect(G_OBJECT(open_messages), "activate",
                     G_CALLBACK(ui_callback_on_open_messages), NULL);

    g_signal_connect(G_OBJECT(save_messages), "activate",
                     G_CALLBACK(ui_callback_on_save_messages), NULL);

    g_signal_connect(G_OBJECT(open_filters), "activate",
                     G_CALLBACK(ui_callback_on_open_filters), NULL);

    g_signal_connect(G_OBJECT(save_filters), "activate",
                     G_CALLBACK(ui_callback_on_save_filters), NULL);

Cedric Roux's avatar
 
Cedric Roux committed
89 90 91 92 93 94 95 96 97 98 99 100
    g_signal_connect(G_OBJECT(quit), "activate",
                     G_CALLBACK(gtk_main_quit), NULL);

    g_signal_connect(G_OBJECT(about), "activate",
                     G_CALLBACK(ui_callback_on_about), NULL);

    return RC_OK;
}

int ui_toolbar_create(GtkWidget *vbox)
{
    GtkWidget *hbox;
101 102 103 104
    GtkWidget *filters_label;
    GtkWidget *messages_label;
    GtkWidget *ip_label;
    GtkWidget *port_label;
Cedric Roux's avatar
 
Cedric Roux committed
105 106 107 108 109 110

    if (!vbox)
        return RC_BAD_PARAM;

    hbox = gtk_box_new(GTK_ORIENTATION_HORIZONTAL, 0);

111 112
    filters_label = gtk_label_new("Filters");
    messages_label = gtk_label_new("Messages");
Cedric Roux's avatar
 
Cedric Roux committed
113

114
    /* Button to open filters file */
115
    {
116 117 118 119 120 121 122
        ui_main_data.open_filters_file = gtk_tool_button_new_from_stock(GTK_STOCK_OPEN);
        gtk_tool_item_set_tooltip_text(GTK_TOOL_ITEM(ui_main_data.open_filters_file),
                                    "Open filters file");

        g_signal_connect(G_OBJECT(ui_main_data.open_filters_file), "clicked",
                        G_CALLBACK(ui_callback_on_open_filters), NULL);
    }
123

124 125 126 127 128
    /* Button to save filters file */
    {
        ui_main_data.save_filters_file = gtk_tool_button_new_from_stock(GTK_STOCK_SAVE);
        gtk_tool_item_set_tooltip_text(GTK_TOOL_ITEM(ui_main_data.save_filters_file),
                                    "Save filters file");
129

130 131
        g_signal_connect(G_OBJECT(ui_main_data.save_filters_file), "clicked",
                        G_CALLBACK(ui_callback_on_save_filters), NULL);
132 133 134 135 136 137
    }

    /* Button to open replay file */
    {
        ui_main_data.open_replay_file = gtk_tool_button_new_from_stock(GTK_STOCK_OPEN);
        gtk_tool_item_set_tooltip_text(GTK_TOOL_ITEM(ui_main_data.open_replay_file),
138
                                    "Open messages file");
139 140

        g_signal_connect(G_OBJECT(ui_main_data.open_replay_file), "clicked",
winckel's avatar
winckel committed
141 142 143 144 145 146 147 148 149 150 151
                        G_CALLBACK(ui_callback_on_open_messages), (gpointer) FALSE);
    }

    /* Button to refresh replay file */
    {
        ui_main_data.refresh_replay_file = gtk_tool_button_new_from_stock(GTK_STOCK_REFRESH);
        gtk_tool_item_set_tooltip_text(GTK_TOOL_ITEM(ui_main_data.refresh_replay_file),
                                    "Reload messages file");

        g_signal_connect(G_OBJECT(ui_main_data.refresh_replay_file), "clicked",
                        G_CALLBACK(ui_callback_on_open_messages), (gpointer) TRUE);
152 153 154 155 156 157 158 159 160 161 162 163 164
    }

    /* Button to save replay file */
    {
        ui_main_data.save_replay_file = gtk_tool_button_new_from_stock(GTK_STOCK_SAVE);
        gtk_tool_item_set_tooltip_text(GTK_TOOL_ITEM(ui_main_data.save_replay_file),
                                    "Save messages file");

        g_signal_connect(G_OBJECT(ui_main_data.save_replay_file), "clicked",
                        G_CALLBACK(ui_callback_on_save_messages), NULL);
    }

#if 0 /* This function is already handled by GTK */
165 166 167 168 169 170 171 172 173 174 175 176
    /* Button to go given signal number */
    {
        ui_main_data.signals_go_to_button = gtk_tool_button_new_from_stock(GTK_STOCK_INDEX);
        /* Set the tooltip text */
        gtk_tool_item_set_tooltip_text(GTK_TOOL_ITEM(ui_main_data.signals_go_to_button),
                                    "Goto signal");

        gtk_widget_set_sensitive(GTK_WIDGET(ui_main_data.signals_go_to_button), FALSE);

        g_signal_connect(G_OBJECT(ui_main_data.signals_go_to_button), "clicked",
                        G_CALLBACK(ui_callback_signal_go_to), NULL);
    }
177
#endif
178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201 202 203

    /* Button to go to first signal in list */
    {
        ui_main_data.signals_go_to_first_button = gtk_tool_button_new_from_stock(GTK_STOCK_GOTO_FIRST);
        /* Set the tooltip text */
        gtk_tool_item_set_tooltip_text(GTK_TOOL_ITEM(ui_main_data.signals_go_to_first_button),
                                    "Goto first signal");

        gtk_widget_set_sensitive(GTK_WIDGET(ui_main_data.signals_go_to_first_button), FALSE);

        g_signal_connect(G_OBJECT(ui_main_data.signals_go_to_first_button), "clicked",
                        G_CALLBACK(ui_callback_signal_go_to_first), NULL);
    }

    /* Button to go to last signal in list */
    {
        ui_main_data.signals_go_to_last_button = gtk_tool_button_new_from_stock(GTK_STOCK_GOTO_LAST);
        /* Set the tooltip text */
        gtk_tool_item_set_tooltip_text(GTK_TOOL_ITEM(ui_main_data.signals_go_to_last_button),
                                    "Goto last signal");

        gtk_widget_set_sensitive(GTK_WIDGET(ui_main_data.signals_go_to_last_button), FALSE);

        g_signal_connect(G_OBJECT(ui_main_data.signals_go_to_last_button), "clicked",
                        G_CALLBACK(ui_callback_signal_go_to_last), NULL);
    }
Cedric Roux's avatar
 
Cedric Roux committed
204 205

    /* Button to connect to remote */
206 207 208 209 210 211 212 213 214 215 216 217 218 219 220 221 222 223 224 225 226 227 228
    {
        ui_main_data.connect = gtk_tool_button_new_from_stock(GTK_STOCK_CONNECT);
        /* Set the tooltip text */
        gtk_tool_item_set_tooltip_text(GTK_TOOL_ITEM(ui_main_data.connect),
                                    "Connect to remote host");

        g_signal_connect(G_OBJECT(ui_main_data.connect), "clicked",
                        G_CALLBACK(ui_callback_on_connect), NULL);
    }

    /* Button to disconnect from remote */
    {
        ui_main_data.disconnect = gtk_tool_button_new_from_stock(GTK_STOCK_DISCONNECT);
        /* Set the tooltip text */
        gtk_tool_item_set_tooltip_text(GTK_TOOL_ITEM(ui_main_data.disconnect),
                                    "Disconnect from remote host");

        /* Disabled at startup. Will be activated when a connection is established */
        gtk_widget_set_sensitive(GTK_WIDGET(ui_main_data.disconnect), FALSE);

        g_signal_connect(G_OBJECT(ui_main_data.disconnect), "clicked",
                        G_CALLBACK(ui_callback_on_disconnect), NULL);
    }
Cedric Roux's avatar
 
Cedric Roux committed
229

230 231
    ip_label = gtk_label_new("ip:");
    port_label = gtk_label_new("port:");
Cedric Roux's avatar
 
Cedric Roux committed
232

winckel's avatar
winckel committed
233
    ui_main_data.ip_entry = gtk_entry_new();
Cedric Roux's avatar
 
Cedric Roux committed
234
    /* Width of 15 characters for port number (ipv4 address) */
winckel's avatar
winckel committed
235 236
    gtk_entry_set_width_chars(GTK_ENTRY(ui_main_data.ip_entry), 15);
    gtk_entry_set_text(GTK_ENTRY(ui_main_data.ip_entry), ui_main_data.ip_entry_init);
Cedric Roux's avatar
 
Cedric Roux committed
237

winckel's avatar
winckel committed
238
    ui_main_data.port_entry = gtk_entry_new();
Cedric Roux's avatar
 
Cedric Roux committed
239
    /* Width of 5 characters for port number (uint16_t) */
winckel's avatar
winckel committed
240 241
    gtk_entry_set_width_chars(GTK_ENTRY(ui_main_data.port_entry), 5);
    gtk_entry_set_text(GTK_ENTRY(ui_main_data.port_entry), ui_main_data.port_entry_init);
Cedric Roux's avatar
 
Cedric Roux committed
242

243 244 245 246 247 248 249 250
    gtk_box_pack_start(GTK_BOX(hbox), filters_label, FALSE, FALSE, LABEL_SPACE);
    gtk_box_pack_start(GTK_BOX(hbox), GTK_WIDGET(ui_main_data.open_filters_file), FALSE, FALSE, BUTTON_SPACE);
    gtk_box_pack_start(GTK_BOX(hbox), GTK_WIDGET(ui_main_data.save_filters_file), FALSE, FALSE, BUTTON_SPACE);

    gtk_box_pack_start(GTK_BOX(hbox), gtk_separator_new(GTK_ORIENTATION_VERTICAL), FALSE, FALSE, SEPARATOR_SPACE);

    gtk_box_pack_start(GTK_BOX(hbox), messages_label, FALSE, FALSE, LABEL_SPACE);
    gtk_box_pack_start(GTK_BOX(hbox), GTK_WIDGET(ui_main_data.open_replay_file), FALSE, FALSE, BUTTON_SPACE);
winckel's avatar
winckel committed
251
    gtk_box_pack_start(GTK_BOX(hbox), GTK_WIDGET(ui_main_data.refresh_replay_file), FALSE, FALSE, BUTTON_SPACE);
252 253 254 255 256 257 258 259 260 261 262 263 264 265 266 267
    gtk_box_pack_start(GTK_BOX(hbox), GTK_WIDGET(ui_main_data.save_replay_file), FALSE, FALSE, BUTTON_SPACE);

    gtk_box_pack_start(GTK_BOX(hbox), gtk_separator_new(GTK_ORIENTATION_VERTICAL), FALSE, FALSE, SEPARATOR_SPACE);

    gtk_box_pack_start(GTK_BOX(hbox), GTK_WIDGET(ui_main_data.signals_go_to_first_button), FALSE, FALSE, BUTTON_SPACE);
    gtk_box_pack_start(GTK_BOX(hbox), GTK_WIDGET(ui_main_data.signals_go_to_last_button), FALSE, FALSE, BUTTON_SPACE);

    gtk_box_pack_start(GTK_BOX(hbox), gtk_separator_new(GTK_ORIENTATION_VERTICAL), FALSE, FALSE, SEPARATOR_SPACE);

    gtk_box_pack_start(GTK_BOX(hbox), GTK_WIDGET(ui_main_data.connect), FALSE, FALSE, BUTTON_SPACE);
    gtk_box_pack_start(GTK_BOX(hbox), GTK_WIDGET(ui_main_data.disconnect), FALSE, FALSE, BUTTON_SPACE);
    gtk_box_pack_start(GTK_BOX(hbox), ip_label, FALSE, FALSE, LABEL_SPACE);
    gtk_box_pack_start(GTK_BOX(hbox), ui_main_data.ip_entry, FALSE, FALSE, BUTTON_SPACE);
    gtk_box_pack_start(GTK_BOX(hbox), port_label, FALSE, FALSE, LABEL_SPACE);
    gtk_box_pack_start(GTK_BOX(hbox), ui_main_data.port_entry, FALSE, FALSE, BUTTON_SPACE);

Cedric Roux's avatar
 
Cedric Roux committed
268 269 270 271
    gtk_box_pack_start(GTK_BOX(vbox), hbox, FALSE, FALSE, 5);

    return RC_OK;
}