00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021
00022
00023
00024
00025
00026
00027
00028 #include <libheraia.h>
00029
00030 static gboolean delete_plw_window_event(GtkWidget *widget, GdkEvent *event, gpointer data);
00031 static void destroy_plw_window(GtkWidget *widget, GdkEvent *event, gpointer data);
00032 static void plw_close_clicked(GtkWidget *widget, gpointer data);
00033 static void plw_refresh_clicked(GtkWidget *widget, gpointer data);
00034 static void mw_cmi_plw_toggle(GtkWidget *widget, gpointer data);
00035 static void pn_treeview_selection_changed_cb(GtkTreeSelection *selection, gpointer data);
00036
00037 static void plugin_list_window_connect_signals(heraia_window_t *main_window);
00038
00039 static void init_plugin_name_tv(heraia_window_t *main_window);
00040 static void print_plugin_basics(GtkTextView *textview, heraia_plugin_t *plugin);
00041 static void print_plugin_interface(GtkTextView *textview, heraia_plugin_t *plugin);
00042 static void print_plugin_filter_structure(GtkTextView *textview, heraia_plugin_t *plugin);
00043 static void print_plugin_functions(GtkTextView *textview, heraia_plugin_t *plugin);
00044 static void print_plugin_info_structure(GtkTextView *textview, heraia_plugin_t *plugin);
00045 static void print_plugin_extra_structure(GtkTextView *textview, heraia_plugin_t *plugin);
00046 static void print_plugin_state(GtkTextView *textview, heraia_plugin_t *plugin);
00047
00048
00049
00050
00051
00052
00053
00054
00055
00056
00057 static gboolean delete_plw_window_event(GtkWidget *widget, GdkEvent *event, gpointer data)
00058 {
00059 plw_close_clicked(widget, data);
00060
00061 return TRUE;
00062 }
00063
00064
00065
00066
00067
00068
00069
00070
00071 static void destroy_plw_window(GtkWidget *widget, GdkEvent *event, gpointer data)
00072 {
00073 plw_close_clicked(widget, data);
00074 }
00075
00076
00077
00078
00079
00080
00081
00082 static void plw_close_clicked(GtkWidget *widget, gpointer data)
00083 {
00084 heraia_window_t *main_window = (heraia_window_t *) data;
00085 GtkCheckMenuItem *cmi = GTK_CHECK_MENU_ITEM(heraia_get_widget(main_window->xmls->main, "mw_cmi_plugin_list"));
00086
00087 record_and_hide_dialog_box(GTK_WIDGET(heraia_get_widget(main_window->xmls->main, "plugin_list_window")), main_window->win_prop->plugin_list);
00088 gtk_check_menu_item_set_active(cmi, FALSE);
00089 }
00090
00091
00092
00093
00094
00095
00096
00097
00098 static void plw_refresh_clicked(GtkWidget *widget, gpointer data)
00099 {
00100 heraia_window_t *main_window = (heraia_window_t *) data;
00101 GtkTextView *textview = GTK_TEXT_VIEW(heraia_get_widget(main_window->xmls->main, "plugin_info_textview"));
00102
00103 init_plugin_name_tv(main_window);
00104 kill_text_from_textview(textview);
00105 }
00106
00107
00108
00109
00110
00111
00112
00113
00114 static void mw_cmi_plw_toggle(GtkWidget *widget, gpointer data)
00115 {
00116 heraia_window_t *main_window = (heraia_window_t *) data;
00117 GtkCheckMenuItem *cmi = GTK_CHECK_MENU_ITEM(heraia_get_widget(main_window->xmls->main, "mw_cmi_plugin_list"));
00118 GtkPaned *paned = GTK_PANED(heraia_get_widget(main_window->xmls->main, "plw_hpaned"));
00119 gint pos = 0;
00120
00121 if (gtk_check_menu_item_get_active(cmi) == TRUE)
00122 {
00123 pos = gtk_paned_get_position(paned);
00124 if (pos < 15)
00125 {
00126 pos = 100;
00127 gtk_paned_set_position(paned, pos);
00128 }
00129 move_and_show_dialog_box(heraia_get_widget(main_window->xmls->main, "plugin_list_window"), main_window->win_prop->plugin_list);
00130 }
00131 else
00132 {
00133 record_and_hide_dialog_box(GTK_WIDGET(heraia_get_widget(main_window->xmls->main, "plugin_list_window")), main_window->win_prop->plugin_list);
00134 }
00135 }
00136
00137
00138
00139
00140
00141
00142
00143
00144 static void print_plugin_info_structure(GtkTextView *textview, heraia_plugin_t *plugin)
00145 {
00146 if (plugin->info != NULL)
00147 {
00148 switch (plugin->info->type)
00149 {
00150 case HERAIA_PLUGIN_UNKNOWN:
00151 add_text_to_textview(textview, "Type : Unknown\n");
00152 break;
00153
00154 case HERAIA_PLUGIN_FILTER:
00155 add_text_to_textview(textview, "Type : Filter\n");
00156 break;
00157
00158 case HERAIA_PLUGIN_ACTION:
00159 add_text_to_textview(textview, "Type : Action\n");
00160 break;
00161
00162 default:
00163 add_text_to_textview(textview, "Type : Unknown\n");
00164 }
00165
00166 add_text_to_textview(textview, "Priority : %d\n", plugin->info->priority);
00167 add_text_to_textview(textview, "Id : %d\n", plugin->info->id);
00168
00169 if (plugin->info->name != NULL)
00170 {
00171 add_text_to_textview(textview, "Name : %s\n", plugin->info->name);
00172 }
00173
00174 if (plugin->info->version != NULL)
00175 {
00176 add_text_to_textview(textview, "Version : %s\n", plugin->info->version);
00177 }
00178
00179 if (plugin->info->summary != NULL)
00180 {
00181 add_text_to_textview(textview, "Summary : %s\n", plugin->info->summary);
00182 }
00183
00184 if (plugin->info->description != NULL)
00185 {
00186 add_text_to_textview(textview, "Description : %s\n", plugin->info->description);
00187 }
00188
00189 if (plugin->info->author != NULL)
00190 {
00191 add_text_to_textview(textview, "Author : %s\n", plugin->info->author);
00192 }
00193
00194 if (plugin->info->homepage != NULL)
00195 {
00196 add_text_to_textview(textview, "Web site : %s\n", plugin->info->homepage);
00197 }
00198 }
00199 else
00200 {
00201 add_text_to_textview(textview, "The 'info' structure is not initialized !\n");
00202 }
00203 }
00204
00205
00206
00207
00208
00209
00210
00211 static void print_plugin_functions(GtkTextView *textview, heraia_plugin_t *plugin)
00212 {
00213
00214 if (plugin->init_proc != NULL ||
00215 plugin->run_proc != NULL ||
00216 plugin->quit_proc != NULL ||
00217 plugin->refresh_proc != NULL)
00218 {
00219 add_text_to_textview(textview, "\nPlugin's defined functions :\n");
00220
00221 if (plugin->init_proc != NULL)
00222 {
00223 add_text_to_textview(textview, " - Initialization function : %p\n", plugin->init_proc);
00224 }
00225
00226 if (plugin->run_proc != NULL)
00227 {
00228 add_text_to_textview(textview, " - Main function : %p\n", plugin->run_proc);
00229 }
00230
00231 if (plugin->quit_proc != NULL)
00232 {
00233 add_text_to_textview(textview, " - Exit function : %p\n", plugin->quit_proc);
00234 }
00235
00236 if (plugin->refresh_proc != NULL)
00237 {
00238 add_text_to_textview(textview, " - Refresh function : %p\n", plugin->refresh_proc);
00239 }
00240 }
00241 else
00242 {
00243 add_text_to_textview(textview, "\nThis plugin does not provide any function !!\n");
00244 }
00245 }
00246
00247
00248
00249
00250
00251
00252
00253 static void print_plugin_filter_structure(GtkTextView *textview, heraia_plugin_t *plugin)
00254 {
00255 if (plugin->filter != NULL)
00256 {
00257 if (plugin->filter->import != NULL ||
00258 plugin->filter->export != NULL)
00259 {
00260 add_text_to_textview(textview, "\nFilter functions :\n");
00261
00262 if (plugin->filter->import != NULL)
00263 {
00264 add_text_to_textview(textview, " - Import function : %p\n", plugin->filter->import);
00265 }
00266
00267 if (plugin->filter->export != NULL)
00268 {
00269 add_text_to_textview(textview, " - Export function : %p\n", plugin->filter->export);
00270 }
00271 }
00272 else
00273 {
00274 add_text_to_textview(textview, "\nThis plugin does not provide any filter function\n");
00275 }
00276 }
00277 else
00278 {
00279 add_text_to_textview(textview, "\nThe structure 'filter' is not initialized !");
00280 }
00281 }
00282
00283
00284
00285
00286
00287
00288
00289 static void print_plugin_interface(GtkTextView *textview, heraia_plugin_t *plugin)
00290 {
00291 add_text_to_textview(textview, "\nThis plugin provides :\n");
00292
00293 if (plugin->cmi_entry != NULL)
00294 {
00295 add_text_to_textview(textview, " - a menu entry in the plugins menu.\n");
00296 }
00297 else
00298 {
00299 add_text_to_textview(textview, " - no menu entry.\n");
00300 }
00301
00302 if (plugin->xml != NULL)
00303 {
00304 add_text_to_textview(textview, " - an xml interface.\n");
00305 }
00306 else
00307 {
00308 add_text_to_textview(textview, " - no xml interface.\n");
00309 }
00310 }
00311
00312
00313
00314
00315
00316
00317
00318 static void print_plugin_basics(GtkTextView *textview, heraia_plugin_t *plugin)
00319 {
00320 if (plugin->info != NULL)
00321 {
00322 add_text_to_textview(textview, "API version : %d\n", plugin->info->api_version);
00323 }
00324
00325 if (plugin->filename != NULL)
00326 {
00327 add_text_to_textview(textview, "File : %s\n", plugin->filename);
00328 }
00329
00330 if (plugin->path != NULL)
00331 {
00332 add_text_to_textview(textview, "Directory : %s\n", plugin->path);
00333 }
00334
00335 if (plugin->handle != NULL)
00336 {
00337 add_text_to_textview(textview, "Handle : %p\n", plugin->handle);
00338 }
00339 else
00340 {
00341 add_text_to_textview(textview, "Handle : NONE <-- Is there anything normal ?\n");
00342 }
00343 }
00344
00345
00346
00347
00348
00349
00350
00351 static void print_plugin_extra_structure(GtkTextView *textview, heraia_plugin_t *plugin)
00352 {
00353
00354 if (plugin->extra != NULL)
00355 {
00356 add_text_to_textview(textview, "\nThis plugin has an additionnal 'extra' structure (%p) sized %d bytes.\n",
00357 plugin->extra, sizeof(*(plugin->extra)));
00358 }
00359 else
00360 {
00361 add_text_to_textview(textview, "\nThis plugin does not have any additionnal structure.\n");
00362 }
00363
00364 }
00365
00366
00367
00368
00369
00370
00371
00372 static void print_plugin_state(GtkTextView *textview, heraia_plugin_t *plugin)
00373 {
00374
00375 add_text_to_textview(textview, "Plugin's state : ");
00376 switch (plugin->state)
00377 {
00378 case PLUGIN_STATE_RUNNING:
00379 add_text_to_textview(textview, "Running\n");
00380 break;
00381
00382 case PLUGIN_STATE_INITIALIZING:
00383 add_text_to_textview(textview, "Initialiazing or initialized\n");
00384 break;
00385 case PLUGIN_STATE_LOADED:
00386 add_text_to_textview(textview, "Loaded\n");
00387 break;
00388
00389 case PLUGIN_STATE_NEW:
00390 add_text_to_textview(textview, "Creating itself\n");
00391 break;
00392
00393 case PLUGIN_STATE_EXITING:
00394 add_text_to_textview(textview, "Exiting\n");
00395 break;
00396
00397 case PLUGIN_STATE_NONE:
00398 add_text_to_textview(textview, "Waiting\n");
00399 break;
00400
00401 default:
00402 add_text_to_textview(textview, "Unknown\n");
00403 }
00404 }
00405
00406
00407
00408
00409
00410
00411
00412
00413 static void pn_treeview_selection_changed_cb(GtkTreeSelection *selection, gpointer data)
00414 {
00415 GtkTreeIter iter;
00416 GtkTreeModel *model = NULL;
00417 heraia_window_t *main_window = (heraia_window_t *) data;
00418 gchar *name = NULL;
00419 heraia_plugin_t *plugin = NULL;
00420 GtkTextView *textview = GTK_TEXT_VIEW(heraia_get_widget(main_window->xmls->main, "plugin_info_textview"));
00421
00422 if (gtk_tree_selection_get_selected(selection, &model, &iter))
00423 {
00424 gtk_tree_model_get(model, &iter, PNTV_COLUMN_NAME, &name, -1);
00425 plugin = find_plugin_by_name(main_window->plugins_list, name);
00426
00427 if (plugin != NULL)
00428 {
00429 kill_text_from_textview(textview);
00430
00431 print_plugin_basics(textview, plugin);
00432
00433 print_plugin_info_structure(textview, plugin);
00434
00435 print_plugin_functions(textview, plugin);
00436
00437 print_plugin_filter_structure(textview, plugin);
00438
00439 print_plugin_interface(textview, plugin);
00440
00441 print_plugin_extra_structure(textview, plugin);
00442
00443 print_plugin_state(textview, plugin);
00444 }
00445 }
00446 }
00447
00448
00449
00450
00451
00452
00453
00454 static void plugin_list_window_connect_signals(heraia_window_t *main_window)
00455 {
00456 GtkTreeSelection *select = NULL;
00457
00458 if (main_window != NULL)
00459 {
00460
00461 g_signal_connect(G_OBJECT(heraia_get_widget(main_window->xmls->main, "plugin_list_window")), "delete_event",
00462 G_CALLBACK(delete_plw_window_event), main_window);
00463
00464 g_signal_connect(G_OBJECT(heraia_get_widget(main_window->xmls->main, "plugin_list_window")), "destroy",
00465 G_CALLBACK(destroy_plw_window), main_window);
00466
00467
00468 g_signal_connect(G_OBJECT(heraia_get_widget(main_window->xmls->main, "plw_close_b")), "clicked",
00469 G_CALLBACK(plw_close_clicked), main_window);
00470
00471
00472 g_signal_connect(G_OBJECT(heraia_get_widget(main_window->xmls->main, "mw_cmi_plugin_list")), "toggled",
00473 G_CALLBACK(mw_cmi_plw_toggle), main_window);
00474
00475
00476 select = gtk_tree_view_get_selection(GTK_TREE_VIEW(heraia_get_widget(main_window->xmls->main, "pn_treeview")));
00477 gtk_tree_selection_set_mode(select, GTK_SELECTION_SINGLE);
00478 g_signal_connect(G_OBJECT(select), "changed", G_CALLBACK (pn_treeview_selection_changed_cb), main_window);
00479
00480
00481 g_signal_connect(G_OBJECT(heraia_get_widget(main_window->xmls->main, "plw_refresh_b")), "clicked",
00482 G_CALLBACK(plw_refresh_clicked), main_window);
00483 }
00484 }
00485
00486
00487
00488
00489
00490
00491 static void init_plugin_name_tv(heraia_window_t *main_window)
00492 {
00493 GtkListStore *list_store = NULL;
00494 GtkTreeIter iter;
00495 GtkCellRenderer *renderer = NULL;
00496
00497 GtkTreeViewColumn *column = NULL;
00498 heraia_plugin_t *plugin = NULL;
00499 GList *p_list = NULL;
00500 GtkTreeView *treeview = NULL;
00501
00502 if (main_window != NULL)
00503 {
00504 treeview = GTK_TREE_VIEW(heraia_get_widget(main_window->xmls->main, "pn_treeview"));
00505
00506 p_list = g_list_first(main_window->plugins_list);
00507
00508 list_store = gtk_list_store_new(PNTV_N_COLUMNS, G_TYPE_STRING);
00509
00510 while (p_list != NULL)
00511 {
00512 plugin = (heraia_plugin_t *) p_list->data;
00513 log_message(main_window, G_LOG_LEVEL_INFO, "%s", plugin->info->name);
00514
00515 gtk_list_store_append(list_store, &iter);
00516 gtk_list_store_set(list_store, &iter, PNTV_COLUMN_NAME, plugin->info->name, -1);
00517
00518 p_list = p_list->next;
00519 }
00520
00521 gtk_tree_view_set_model(treeview, GTK_TREE_MODEL(list_store));
00522
00523 column = gtk_tree_view_get_column(treeview, PNTV_COLUMN_NAME);
00524
00525 if (column != NULL)
00526 {
00527 gtk_tree_view_remove_column(treeview, column);
00528 }
00529
00530 renderer = gtk_cell_renderer_text_new();
00531 column = gtk_tree_view_column_new_with_attributes("Name", renderer, "text", PNTV_COLUMN_NAME, NULL);
00532 gtk_tree_view_append_column(treeview, column);
00533 }
00534 }
00535
00536
00537
00538
00539
00540
00541
00542 void plugin_list_window_init_interface(heraia_window_t *main_window)
00543 {
00544
00545 plugin_list_window_connect_signals(main_window);
00546
00547 init_plugin_name_tv(main_window);
00548 }
00549
00550
00551
00552
00553
00554