00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015 #include "pandatoolbase.h"
00016 #include "gtkStats.h"
00017 #include "gtkStatsServer.h"
00018 #include "config_pstats.h"
00019 #include "pystub.h"
00020
00021 GtkWidget *main_window;
00022 static GtkStatsServer *server = NULL;
00023
00024 static gboolean
00025 delete_event(GtkWidget *widget,
00026 GdkEvent *event, gpointer data) {
00027
00028
00029 return FALSE;
00030 }
00031
00032 static void
00033 destroy(GtkWidget *widget, gpointer data) {
00034 gtk_main_quit();
00035 }
00036
00037 static gboolean
00038 timer(gpointer data) {
00039 static int count = 0;
00040 server->poll();
00041
00042 if (++count == 5) {
00043 count = 0;
00044
00045
00046
00047
00048
00049 gdk_window_process_all_updates();
00050 }
00051
00052 return TRUE;
00053 }
00054
00055 int
00056 main(int argc, char *argv[]) {
00057
00058 pystub();
00059
00060 gtk_init(&argc, &argv);
00061
00062 main_window = gtk_window_new(GTK_WINDOW_TOPLEVEL);
00063
00064 gtk_window_set_title(GTK_WINDOW(main_window), "PStats");
00065
00066
00067
00068 g_signal_connect(G_OBJECT(main_window), "delete_event",
00069 G_CALLBACK(delete_event), NULL);
00070
00071 g_signal_connect(G_OBJECT(main_window), "destroy",
00072 G_CALLBACK(destroy), NULL);
00073
00074 ostringstream stream;
00075 stream << "Listening on port " << pstats_port;
00076 string str = stream.str();
00077 GtkWidget *label = gtk_label_new(str.c_str());
00078 gtk_container_add(GTK_CONTAINER(main_window), label);
00079 gtk_widget_show(label);
00080
00081
00082 server = new GtkStatsServer;
00083 if (!server->listen()) {
00084 ostringstream stream;
00085 stream
00086 << "Unable to open port " << pstats_port
00087 << ". Try specifying a different\n"
00088 << "port number using pstats-port in your Config file.";
00089 string str = stream.str();
00090
00091 GtkWidget *dialog =
00092 gtk_message_dialog_new(GTK_WINDOW(main_window),
00093 GTK_DIALOG_DESTROY_WITH_PARENT,
00094 GTK_MESSAGE_ERROR,
00095 GTK_BUTTONS_CLOSE,
00096 str.c_str());
00097 gtk_dialog_run(GTK_DIALOG(dialog));
00098 gtk_widget_destroy(dialog);
00099 exit(1);
00100 }
00101
00102 gtk_widget_show(main_window);
00103
00104
00105 g_timeout_add(200, timer, NULL);
00106
00107
00108 gtk_main();
00109
00110 return (0);
00111 }