feat: comeback workspace button
This commit is contained in:
parent
0069e99529
commit
ff512593da
4 changed files with 364 additions and 0 deletions
|
|
@ -49,6 +49,15 @@ typedef void (*MainWindowImportEvidenceCallback)(
|
||||||
gpointer user_data
|
gpointer user_data
|
||||||
);
|
);
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @brief Callback appelé lorsque l'utilisateur revient au graphe.
|
||||||
|
*
|
||||||
|
* @param user_data Données utilisateur associées au callback.
|
||||||
|
*/
|
||||||
|
typedef void (*MainWindowShowGraphCallback)(
|
||||||
|
gpointer user_data
|
||||||
|
);
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @brief Callback appelé lorsqu'une preuve est sélectionnée.
|
* @brief Callback appelé lorsqu'une preuve est sélectionnée.
|
||||||
*
|
*
|
||||||
|
|
@ -432,6 +441,21 @@ void main_window_set_import_evidence_callback(
|
||||||
gpointer user_data
|
gpointer user_data
|
||||||
);
|
);
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @brief Définit le callback du bouton « Revenir au graphe ».
|
||||||
|
*
|
||||||
|
* MainWindow transmet uniquement la demande au contrôleur.
|
||||||
|
*
|
||||||
|
* @param main_window Fenêtre principale.
|
||||||
|
* @param callback Fonction appelée lors du clic, ou NULL.
|
||||||
|
* @param user_data Données transmises au callback.
|
||||||
|
*/
|
||||||
|
void main_window_set_show_graph_callback(
|
||||||
|
MainWindow *main_window,
|
||||||
|
MainWindowShowGraphCallback callback,
|
||||||
|
gpointer user_data
|
||||||
|
);
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @brief Active ou désactive l'action d'import d'une preuve.
|
* @brief Active ou désactive l'action d'import d'une preuve.
|
||||||
*
|
*
|
||||||
|
|
|
||||||
|
|
@ -4421,6 +4421,43 @@ static void application_on_reset_graph_layout_confirmed(
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @brief Demande confirmation avant toute suppression de position.
|
||||||
|
*/
|
||||||
|
static void application_on_show_graph_requested(
|
||||||
|
gpointer user_data
|
||||||
|
)
|
||||||
|
{
|
||||||
|
Application *application =
|
||||||
|
user_data;
|
||||||
|
|
||||||
|
if (application == NULL ||
|
||||||
|
application->main_window == NULL ||
|
||||||
|
application->graph_model == NULL)
|
||||||
|
{
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
application_set_selected_evidence_identifier(
|
||||||
|
application,
|
||||||
|
NULL
|
||||||
|
);
|
||||||
|
|
||||||
|
/*
|
||||||
|
* Passer NULL restaure l'état principal du Workspace. Quand le graphe
|
||||||
|
* est prêt, workspace_show_default() affiche automatiquement le canvas.
|
||||||
|
*/
|
||||||
|
main_window_set_selected_evidence(
|
||||||
|
application->main_window,
|
||||||
|
NULL
|
||||||
|
);
|
||||||
|
|
||||||
|
main_window_set_status(
|
||||||
|
application->main_window,
|
||||||
|
"Graphe de l'enquête affiché."
|
||||||
|
);
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @brief Demande confirmation avant toute suppression de position.
|
* @brief Demande confirmation avant toute suppression de position.
|
||||||
*/
|
*/
|
||||||
|
|
@ -4557,6 +4594,12 @@ static void application_on_activate(
|
||||||
application
|
application
|
||||||
);
|
);
|
||||||
|
|
||||||
|
main_window_set_show_graph_callback(
|
||||||
|
application->main_window,
|
||||||
|
application_on_show_graph_requested,
|
||||||
|
application
|
||||||
|
);
|
||||||
|
|
||||||
main_window_set_new_investigation_callback(
|
main_window_set_new_investigation_callback(
|
||||||
application->main_window,
|
application->main_window,
|
||||||
application_on_new_investigation_requested,
|
application_on_new_investigation_requested,
|
||||||
|
|
|
||||||
|
|
@ -59,6 +59,7 @@ struct MainWindow
|
||||||
GtkWidget *new_investigation_button;
|
GtkWidget *new_investigation_button;
|
||||||
GtkWidget *open_investigation_button;
|
GtkWidget *open_investigation_button;
|
||||||
GtkWidget *import_evidence_button;
|
GtkWidget *import_evidence_button;
|
||||||
|
GtkWidget *show_graph_button;
|
||||||
GtkWidget *content_paned;
|
GtkWidget *content_paned;
|
||||||
GtkWidget *main_paned;
|
GtkWidget *main_paned;
|
||||||
GtkWidget *status_label;
|
GtkWidget *status_label;
|
||||||
|
|
@ -86,6 +87,12 @@ struct MainWindow
|
||||||
gpointer
|
gpointer
|
||||||
import_evidence_user_data;
|
import_evidence_user_data;
|
||||||
|
|
||||||
|
MainWindowShowGraphCallback
|
||||||
|
show_graph_callback;
|
||||||
|
|
||||||
|
gpointer
|
||||||
|
show_graph_user_data;
|
||||||
|
|
||||||
MainWindowVerifyEvidenceCallback
|
MainWindowVerifyEvidenceCallback
|
||||||
verify_evidence_callback;
|
verify_evidence_callback;
|
||||||
|
|
||||||
|
|
@ -190,6 +197,33 @@ static void main_window_on_import_evidence_clicked(
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @brief Transmet la demande de fermeture au contrôleur.
|
||||||
|
*
|
||||||
|
* @param button Bouton ayant reçu le clic.
|
||||||
|
* @param user_data Pointeur vers MainWindow.
|
||||||
|
*/
|
||||||
|
static void main_window_on_show_graph_clicked(
|
||||||
|
GtkButton *button,
|
||||||
|
gpointer user_data
|
||||||
|
)
|
||||||
|
{
|
||||||
|
MainWindow *main_window =
|
||||||
|
user_data;
|
||||||
|
|
||||||
|
(void) button;
|
||||||
|
|
||||||
|
if (main_window == NULL ||
|
||||||
|
main_window->show_graph_callback == NULL)
|
||||||
|
{
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
main_window->show_graph_callback(
|
||||||
|
main_window->show_graph_user_data
|
||||||
|
);
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @brief Transmet la demande de fermeture au contrôleur.
|
* @brief Transmet la demande de fermeture au contrôleur.
|
||||||
*
|
*
|
||||||
|
|
@ -436,6 +470,12 @@ MainWindow *main_window_new(
|
||||||
"Importer une preuve"
|
"Importer une preuve"
|
||||||
);
|
);
|
||||||
|
|
||||||
|
main_window->show_graph_button =
|
||||||
|
main_window_create_action_button(
|
||||||
|
"go-previous-symbolic",
|
||||||
|
"Revenir au graphe"
|
||||||
|
);
|
||||||
|
|
||||||
main_window->quit_button =
|
main_window->quit_button =
|
||||||
main_window_create_action_button(
|
main_window_create_action_button(
|
||||||
"application-exit-symbolic",
|
"application-exit-symbolic",
|
||||||
|
|
@ -461,6 +501,11 @@ MainWindow *main_window_new(
|
||||||
FALSE
|
FALSE
|
||||||
);
|
);
|
||||||
|
|
||||||
|
gtk_widget_set_sensitive(
|
||||||
|
main_window->show_graph_button,
|
||||||
|
FALSE
|
||||||
|
);
|
||||||
|
|
||||||
gtk_box_append(
|
gtk_box_append(
|
||||||
GTK_BOX(main_window->action_bar),
|
GTK_BOX(main_window->action_bar),
|
||||||
main_window->new_investigation_button
|
main_window->new_investigation_button
|
||||||
|
|
@ -476,6 +521,11 @@ MainWindow *main_window_new(
|
||||||
main_window->import_evidence_button
|
main_window->import_evidence_button
|
||||||
);
|
);
|
||||||
|
|
||||||
|
gtk_box_append(
|
||||||
|
GTK_BOX(main_window->action_bar),
|
||||||
|
main_window->show_graph_button
|
||||||
|
);
|
||||||
|
|
||||||
gtk_box_append(
|
gtk_box_append(
|
||||||
GTK_BOX(main_window->action_bar),
|
GTK_BOX(main_window->action_bar),
|
||||||
action_spacer
|
action_spacer
|
||||||
|
|
@ -513,6 +563,15 @@ MainWindow *main_window_new(
|
||||||
main_window
|
main_window
|
||||||
);
|
);
|
||||||
|
|
||||||
|
g_signal_connect(
|
||||||
|
main_window->show_graph_button,
|
||||||
|
"clicked",
|
||||||
|
G_CALLBACK(
|
||||||
|
main_window_on_show_graph_clicked
|
||||||
|
),
|
||||||
|
main_window
|
||||||
|
);
|
||||||
|
|
||||||
g_signal_connect(
|
g_signal_connect(
|
||||||
main_window->quit_button,
|
main_window->quit_button,
|
||||||
"clicked",
|
"clicked",
|
||||||
|
|
@ -937,6 +996,11 @@ void main_window_set_graph_loading(
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
gtk_widget_set_sensitive(
|
||||||
|
main_window->show_graph_button,
|
||||||
|
FALSE
|
||||||
|
);
|
||||||
|
|
||||||
workspace_set_graph_loading(
|
workspace_set_graph_loading(
|
||||||
main_window->workspace
|
main_window->workspace
|
||||||
);
|
);
|
||||||
|
|
@ -958,6 +1022,11 @@ void main_window_set_graph(
|
||||||
graph_model,
|
graph_model,
|
||||||
graph_layout
|
graph_layout
|
||||||
);
|
);
|
||||||
|
|
||||||
|
gtk_widget_set_sensitive(
|
||||||
|
main_window->show_graph_button,
|
||||||
|
graph_model != NULL
|
||||||
|
);
|
||||||
}
|
}
|
||||||
|
|
||||||
void main_window_set_graph_error(
|
void main_window_set_graph_error(
|
||||||
|
|
@ -970,6 +1039,11 @@ void main_window_set_graph_error(
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
gtk_widget_set_sensitive(
|
||||||
|
main_window->show_graph_button,
|
||||||
|
FALSE
|
||||||
|
);
|
||||||
|
|
||||||
workspace_set_graph_error(
|
workspace_set_graph_error(
|
||||||
main_window->workspace,
|
main_window->workspace,
|
||||||
message
|
message
|
||||||
|
|
@ -985,6 +1059,11 @@ void main_window_clear_graph(
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
gtk_widget_set_sensitive(
|
||||||
|
main_window->show_graph_button,
|
||||||
|
FALSE
|
||||||
|
);
|
||||||
|
|
||||||
workspace_clear_graph(
|
workspace_clear_graph(
|
||||||
main_window->workspace
|
main_window->workspace
|
||||||
);
|
);
|
||||||
|
|
@ -1113,6 +1192,24 @@ void main_window_set_import_evidence_callback(
|
||||||
user_data;
|
user_data;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void main_window_set_show_graph_callback(
|
||||||
|
MainWindow *main_window,
|
||||||
|
MainWindowShowGraphCallback callback,
|
||||||
|
gpointer user_data
|
||||||
|
)
|
||||||
|
{
|
||||||
|
if (main_window == NULL)
|
||||||
|
{
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
main_window->show_graph_callback =
|
||||||
|
callback;
|
||||||
|
|
||||||
|
main_window->show_graph_user_data =
|
||||||
|
user_data;
|
||||||
|
}
|
||||||
|
|
||||||
void main_window_set_import_evidence_enabled(
|
void main_window_set_import_evidence_enabled(
|
||||||
MainWindow *main_window,
|
MainWindow *main_window,
|
||||||
gboolean enabled
|
gboolean enabled
|
||||||
|
|
@ -1324,6 +1421,12 @@ void main_window_free(
|
||||||
main_window->reset_graph_layout_user_data =
|
main_window->reset_graph_layout_user_data =
|
||||||
NULL;
|
NULL;
|
||||||
|
|
||||||
|
main_window->show_graph_callback =
|
||||||
|
NULL;
|
||||||
|
|
||||||
|
main_window->show_graph_user_data =
|
||||||
|
NULL;
|
||||||
|
|
||||||
main_window_clear_graph(
|
main_window_clear_graph(
|
||||||
main_window
|
main_window
|
||||||
);
|
);
|
||||||
|
|
@ -1354,3 +1457,4 @@ void main_window_free(
|
||||||
main_window
|
main_window
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -49,6 +49,8 @@ struct Workspace
|
||||||
GtkWidget *graph_view_page;
|
GtkWidget *graph_view_page;
|
||||||
GtkWidget *graph_toolbar;
|
GtkWidget *graph_toolbar;
|
||||||
GtkWidget *reset_graph_layout_button;
|
GtkWidget *reset_graph_layout_button;
|
||||||
|
GtkWidget *graph_help_button;
|
||||||
|
GtkWidget *graph_help_popover;
|
||||||
|
|
||||||
InvestigationGraphView *graph_view;
|
InvestigationGraphView *graph_view;
|
||||||
EntityDetailsPanel *entity_details_panel;
|
EntityDetailsPanel *entity_details_panel;
|
||||||
|
|
@ -1174,6 +1176,175 @@ Workspace *workspace_new(void)
|
||||||
TRUE
|
TRUE
|
||||||
);
|
);
|
||||||
|
|
||||||
|
workspace->graph_help_button =
|
||||||
|
gtk_menu_button_new();
|
||||||
|
|
||||||
|
workspace->graph_help_popover =
|
||||||
|
gtk_popover_new();
|
||||||
|
|
||||||
|
GtkWidget *graph_help_content =
|
||||||
|
gtk_box_new(
|
||||||
|
GTK_ORIENTATION_VERTICAL,
|
||||||
|
8
|
||||||
|
);
|
||||||
|
|
||||||
|
GtkWidget *graph_help_title =
|
||||||
|
gtk_label_new(
|
||||||
|
"Commandes du graphe"
|
||||||
|
);
|
||||||
|
|
||||||
|
GtkWidget *graph_help_text =
|
||||||
|
gtk_label_new(
|
||||||
|
"• Clic : sélectionner un nœud\n"
|
||||||
|
"• Glisser un nœud : le déplacer\n"
|
||||||
|
"• Maj + glisser : déplacer la vue\n"
|
||||||
|
"• Ctrl + molette : zoomer\n"
|
||||||
|
"• Pincement : zoomer"
|
||||||
|
);
|
||||||
|
|
||||||
|
if (workspace->graph_help_button == NULL ||
|
||||||
|
workspace->graph_help_popover == NULL ||
|
||||||
|
graph_help_content == NULL ||
|
||||||
|
graph_help_title == NULL ||
|
||||||
|
graph_help_text == NULL)
|
||||||
|
{
|
||||||
|
workspace_free(
|
||||||
|
workspace
|
||||||
|
);
|
||||||
|
|
||||||
|
return NULL;
|
||||||
|
}
|
||||||
|
|
||||||
|
gtk_menu_button_set_label(
|
||||||
|
GTK_MENU_BUTTON(
|
||||||
|
workspace->graph_help_button
|
||||||
|
),
|
||||||
|
"?"
|
||||||
|
);
|
||||||
|
|
||||||
|
gtk_widget_add_css_class(
|
||||||
|
workspace->graph_help_button,
|
||||||
|
"flat"
|
||||||
|
);
|
||||||
|
|
||||||
|
gtk_widget_set_tooltip_text(
|
||||||
|
workspace->graph_help_button,
|
||||||
|
"Afficher les commandes du graphe"
|
||||||
|
);
|
||||||
|
|
||||||
|
gtk_widget_set_can_target(
|
||||||
|
workspace->graph_help_button,
|
||||||
|
TRUE
|
||||||
|
);
|
||||||
|
|
||||||
|
gtk_widget_set_halign(
|
||||||
|
workspace->graph_help_button,
|
||||||
|
GTK_ALIGN_END
|
||||||
|
);
|
||||||
|
|
||||||
|
gtk_widget_set_valign(
|
||||||
|
workspace->graph_help_button,
|
||||||
|
GTK_ALIGN_START
|
||||||
|
);
|
||||||
|
|
||||||
|
gtk_widget_set_margin_end(
|
||||||
|
workspace->graph_help_button,
|
||||||
|
12
|
||||||
|
);
|
||||||
|
|
||||||
|
gtk_widget_set_margin_top(
|
||||||
|
workspace->graph_help_button,
|
||||||
|
12
|
||||||
|
);
|
||||||
|
|
||||||
|
gtk_widget_set_margin_start(
|
||||||
|
graph_help_content,
|
||||||
|
16
|
||||||
|
);
|
||||||
|
|
||||||
|
gtk_widget_set_margin_end(
|
||||||
|
graph_help_content,
|
||||||
|
16
|
||||||
|
);
|
||||||
|
|
||||||
|
gtk_widget_set_margin_top(
|
||||||
|
graph_help_content,
|
||||||
|
14
|
||||||
|
);
|
||||||
|
|
||||||
|
gtk_widget_set_margin_bottom(
|
||||||
|
graph_help_content,
|
||||||
|
14
|
||||||
|
);
|
||||||
|
|
||||||
|
gtk_label_set_xalign(
|
||||||
|
GTK_LABEL(
|
||||||
|
graph_help_title
|
||||||
|
),
|
||||||
|
0.0F
|
||||||
|
);
|
||||||
|
|
||||||
|
gtk_widget_add_css_class(
|
||||||
|
graph_help_title,
|
||||||
|
"heading"
|
||||||
|
);
|
||||||
|
|
||||||
|
gtk_label_set_xalign(
|
||||||
|
GTK_LABEL(
|
||||||
|
graph_help_text
|
||||||
|
),
|
||||||
|
0.0F
|
||||||
|
);
|
||||||
|
|
||||||
|
gtk_label_set_wrap(
|
||||||
|
GTK_LABEL(
|
||||||
|
graph_help_text
|
||||||
|
),
|
||||||
|
TRUE
|
||||||
|
);
|
||||||
|
|
||||||
|
gtk_label_set_wrap_mode(
|
||||||
|
GTK_LABEL(
|
||||||
|
graph_help_text
|
||||||
|
),
|
||||||
|
PANGO_WRAP_WORD_CHAR
|
||||||
|
);
|
||||||
|
|
||||||
|
gtk_label_set_max_width_chars(
|
||||||
|
GTK_LABEL(
|
||||||
|
graph_help_text
|
||||||
|
),
|
||||||
|
44
|
||||||
|
);
|
||||||
|
|
||||||
|
gtk_box_append(
|
||||||
|
GTK_BOX(
|
||||||
|
graph_help_content
|
||||||
|
),
|
||||||
|
graph_help_title
|
||||||
|
);
|
||||||
|
|
||||||
|
gtk_box_append(
|
||||||
|
GTK_BOX(
|
||||||
|
graph_help_content
|
||||||
|
),
|
||||||
|
graph_help_text
|
||||||
|
);
|
||||||
|
|
||||||
|
gtk_popover_set_child(
|
||||||
|
GTK_POPOVER(
|
||||||
|
workspace->graph_help_popover
|
||||||
|
),
|
||||||
|
graph_help_content
|
||||||
|
);
|
||||||
|
|
||||||
|
gtk_menu_button_set_popover(
|
||||||
|
GTK_MENU_BUTTON(
|
||||||
|
workspace->graph_help_button
|
||||||
|
),
|
||||||
|
workspace->graph_help_popover
|
||||||
|
);
|
||||||
|
|
||||||
gtk_overlay_add_overlay(
|
gtk_overlay_add_overlay(
|
||||||
GTK_OVERLAY(
|
GTK_OVERLAY(
|
||||||
workspace->graph_view_page
|
workspace->graph_view_page
|
||||||
|
|
@ -1193,6 +1364,22 @@ Workspace *workspace_new(void)
|
||||||
TRUE
|
TRUE
|
||||||
);
|
);
|
||||||
|
|
||||||
|
gtk_overlay_add_overlay(
|
||||||
|
GTK_OVERLAY(
|
||||||
|
workspace->graph_view_page
|
||||||
|
),
|
||||||
|
workspace->graph_help_button
|
||||||
|
);
|
||||||
|
|
||||||
|
gtk_overlay_set_clip_overlay(
|
||||||
|
GTK_OVERLAY(
|
||||||
|
workspace->graph_view_page
|
||||||
|
),
|
||||||
|
workspace->graph_help_button,
|
||||||
|
TRUE
|
||||||
|
);
|
||||||
|
|
||||||
|
|
||||||
gtk_stack_add_named(
|
gtk_stack_add_named(
|
||||||
GTK_STACK(workspace->stack),
|
GTK_STACK(workspace->stack),
|
||||||
workspace->graph_view_page,
|
workspace->graph_view_page,
|
||||||
|
|
@ -2022,6 +2209,12 @@ void workspace_free(Workspace *workspace)
|
||||||
workspace->reset_graph_layout_button =
|
workspace->reset_graph_layout_button =
|
||||||
NULL;
|
NULL;
|
||||||
|
|
||||||
|
workspace->graph_help_button =
|
||||||
|
NULL;
|
||||||
|
|
||||||
|
workspace->graph_help_popover =
|
||||||
|
NULL;
|
||||||
|
|
||||||
g_clear_pointer(
|
g_clear_pointer(
|
||||||
&workspace->selected_evidence_identifier,
|
&workspace->selected_evidence_identifier,
|
||||||
g_free
|
g_free
|
||||||
|
|
|
||||||
Loading…
Reference in a new issue