ui_main_screen.c 4.09 KB
Newer Older
Cedric Roux's avatar
 
Cedric Roux committed
1
2
3
4
5
6
#if HAVE_CONFIG_H
# include "config.h"
#endif

#include <stdio.h>
#include <stdint.h>
winckel's avatar
winckel committed
7
#include <stdlib.h>
Cedric Roux's avatar
 
Cedric Roux committed
8
#include <string.h>
winckel's avatar
winckel committed
9
#include <unistd.h>
Cedric Roux's avatar
 
Cedric Roux committed
10
11
12

#include <gtk/gtk.h>

13
#include "rc.h"
Cedric Roux's avatar
 
Cedric Roux committed
14
15
16
17
18
19
20

#include "ui_interface.h"
#include "ui_main_screen.h"
#include "ui_menu_bar.h"
#include "ui_tree_view.h"
#include "ui_notebook.h"
#include "ui_notifications.h"
winckel's avatar
winckel committed
21
#include "ui_filters.h"
Cedric Roux's avatar
 
Cedric Roux committed
22
23
24

ui_main_data_t ui_main_data;

winckel's avatar
winckel committed
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
static void ui_help(void)
{
    printf ("Usage: itti_analyser [options]\n\n"
            "Options:\n"
            "  -f FILTERS   read filters from FILTERS file\n"
            "  -h           display this help and exit\n"
            "  -i IP        set ip address to IP\n"
            "  -m MESSAGES  read messages from MESSAGES file\n"
            "  -p PORT      set port to PORT\n");
}

static void ui_gtk_parse_arg(int argc, char *argv[])
{
    char c;

    while ((c = getopt (argc, argv, "f:hi:m:p:")) != -1)
    {
        switch (c)
        {
            case 'f':
45
46
47
48
49
                ui_main_data.filters_file_name = malloc (strlen (optarg) + 1);
                if (ui_main_data.filters_file_name != NULL)
                {
                    strcpy (ui_main_data.filters_file_name, optarg);
                }
winckel's avatar
winckel committed
50
51
52
                break;

            case 'h':
53
54
                ui_help ();
                exit (0);
winckel's avatar
winckel committed
55
56
57
58
59
60
61
                break;

            case 'i':
                ui_main_data.ip_entry_init = optarg;
                break;

            case 'm':
62
63
64
65
66
                ui_main_data.messages_file_name = malloc (strlen (optarg) + 1);
                if (ui_main_data.messages_file_name != NULL)
                {
                    strcpy (ui_main_data.messages_file_name, optarg);
                }
winckel's avatar
winckel committed
67
68
69
                break;

            case 'p':
70
71
                ui_main_data.port_entry_init = optarg;
                break;
winckel's avatar
winckel committed
72

73
            default:
winckel's avatar
winckel committed
74
75
76
77
78
79
80
                ui_help ();
                exit (-1);
                break;
        }
    }
}

81
82
83
84
85
86
87
static int ui_idle_callback(gpointer data)
{
    g_debug("Entering idle state");

    /* Read filters file */
    if (ui_main_data.filters_file_name != NULL)
    {
88
        ui_filters_read(ui_main_data.filters_file_name);
89
90
91
92
93
94
95
96
97
98
99
100
    }

    /* Read messages file */
    if (ui_main_data.messages_file_name != NULL)
    {
        ui_messages_read (ui_main_data.messages_file_name);
    }

    /* One shot execution */
    return FALSE;
}

101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
void ui_set_title(const char *fmt, ...)
{
    va_list args;
    char *name;
    char buffer[200];
    char title[220];

#if defined(PACKAGE_STRING)
    name = PACKAGE_NAME;
#else
    name = "itti_analyzer";
#endif

    va_start(args, fmt);

    vsnprintf (buffer, sizeof(buffer), fmt, args);
    snprintf (title, sizeof(title), "%s  %s", name, buffer);

    gtk_window_set_title (GTK_WINDOW(ui_main_data.window), title);
}

Cedric Roux's avatar
 
Cedric Roux committed
122
123
124
125
int ui_gtk_initialize(int argc, char *argv[])
{
    GtkWidget *vbox;

126
    memset (&ui_main_data, 0, sizeof(ui_main_data_t));
Cedric Roux's avatar
 
Cedric Roux committed
127

winckel's avatar
winckel committed
128
129
130
131
    /* Set some default initialization value */
    ui_main_data.ip_entry_init = "127.0.0.1";
    ui_main_data.port_entry_init = "10007";

132
    ui_gtk_parse_arg (argc, argv);
winckel's avatar
winckel committed
133

Cedric Roux's avatar
 
Cedric Roux committed
134
    /* Create the main window */
135
136
    ui_main_data.window = gtk_window_new (GTK_WINDOW_TOPLEVEL);
    ui_init_filters (TRUE, FALSE);
Cedric Roux's avatar
 
Cedric Roux committed
137

138
139
    gtk_window_set_position (GTK_WINDOW(ui_main_data.window), GTK_WIN_POS_CENTER);
    gtk_window_set_default_size (GTK_WINDOW(ui_main_data.window), 1024, 800);
140
    ui_set_title("");
141
    gtk_window_set_resizable (GTK_WINDOW(ui_main_data.window), TRUE);
Cedric Roux's avatar
 
Cedric Roux committed
142

143
    vbox = gtk_box_new (GTK_ORIENTATION_VERTICAL, 0);
Cedric Roux's avatar
 
Cedric Roux committed
144
145
146
147
148
149

    CHECK_FCT(ui_menu_bar_create(vbox));
    CHECK_FCT(ui_toolbar_create(vbox));
//     CHECK_FCT(ui_tree_view_create(ui_main_data.window, vbox));
    CHECK_FCT(ui_notebook_create(vbox));

150
151
    gtk_container_add (GTK_CONTAINER(ui_main_data.window), vbox);

Cedric Roux's avatar
 
Cedric Roux committed
152
153
154
155
156
157
    /* Assign the destroy event */
    g_signal_connect(ui_main_data.window, "destroy", G_CALLBACK (gtk_main_quit), NULL);

    /* Show the application window */
    gtk_widget_show_all (ui_main_data.window);

158
    g_idle_add (ui_idle_callback, NULL);
winckel's avatar
winckel committed
159

Cedric Roux's avatar
 
Cedric Roux committed
160
161
    return RC_OK;
}
162
163
164
165
166
167
168
169

void ui_gtk_flush_events(void)
{
    while (gtk_events_pending ())
    {
        gtk_main_iteration();
    }
}