/* * Gem-graph OpenGL experiments * * Desc: User interface header * * Copyright (C) 2023 Arthur Menges * Copyright (C) 2023 Adrien Bourmault * * This file is part of Gem-graph. * * This program is free software: you can redistribute it and/or modify * it under the terms of the GNU Affero General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU Affero General Public License for more details. * * You should have received a copy of the GNU Affero General Public License * along with this program. If not, see . */ #pragma once #include #include #include "../include/base.h" extern float rotation_angles[N_AXIS]; G_BEGIN_DECLS #define GEM_GRAPH_CLIENT_TYPE_WINDOW (gem_graph_client_window_get_type()) G_DECLARE_FINAL_TYPE (GemGraphClientWindow, gem_graph_client_window, GEM_GRAPH_CLIENT, WINDOW, GtkApplicationWindow) G_END_DECLS G_BEGIN_DECLS #define GEM_GRAPH_CLIENT_TYPE_APPLICATION (gem_graph_client_application_get_type()) G_DECLARE_FINAL_TYPE (GemGraphClientApplication, gem_graph_client_application, GEM_GRAPH_CLIENT, APPLICATION, GtkApplication) GemGraphClientApplication *gem_graph_client_application_new(const char *application_id, GApplicationFlags flags); G_END_DECLS void ui_enable_action(const char *name); void ui_disable_action(const char *name); // // Actions // void on_about_action(GSimpleAction *action, GVariant *parameter, gpointer user_data); void on_quit_action(GSimpleAction *action, GVariant *parameter, gpointer user_data); void on_preferences_action(GSimpleAction *action, GVariant *parameter, gpointer user_data); void on_togglesidebar_action(GSimpleAction *action, GVariant *parameter, gpointer user_data); void on_editmode_action(GSimpleAction *action, GVariant *parameter, gpointer user_data); void on_runmode_action(GSimpleAction *action, GVariant *parameter, gpointer user_data); void on_presentmode_action(GSimpleAction *action, GVariant *parameter, gpointer user_data); void on_openfile_action(GSimpleAction *action, GVariant *parameter, gpointer user_data); void on_closefile_action(GSimpleAction *action, GVariant *parameter, gpointer user_data); void on_savefile_action(GSimpleAction *action, GVariant *parameter, gpointer user_data); void on_toast_close_action(GSimpleAction *action, GVariant *parameter, gpointer user_data); static const GActionEntry app_actions[] = { { "quit", on_quit_action, NULL, NULL, NULL }, { "about", on_about_action, NULL, NULL, NULL }, { "preferences", on_preferences_action, NULL, NULL, NULL }, { "togglesidebar", on_togglesidebar_action, NULL, NULL, NULL }, { "editmode", on_editmode_action, NULL, NULL, NULL }, { "runmode", on_runmode_action, NULL, NULL, NULL }, { "presentmode", on_presentmode_action, NULL, NULL, NULL }, { "openfile", on_openfile_action, NULL, NULL, NULL }, { "closefile", on_closefile_action, NULL, NULL, NULL }, { "savefile", on_savefile_action, NULL, NULL, NULL }, { "toastclose", on_toast_close_action, NULL, NULL, NULL }, }; // // Actions responses // void on_openfile_response(GtkNativeDialog *native, int response, GemGraphClientWindow *self); void on_openfile_response_complete(GObject *source_object, GAsyncResult *result, GemGraphClientWindow *self); // // General events // void on_axis_value_change(GtkAdjustment *adjustment, gpointer data); gboolean on_render(GtkGLArea * area, GdkGLContext * context); void on_realize(GtkWidget *widget); void on_unrealize(GtkWidget *widget); void on_close_window(GtkWidget *widget); /* -------------------------------------------------------------------------- */ // // Window primitives // void ui_set_stack(const char *mode); void ui_send_notification(const char *message); void ui_send_internal_notification(const char *message); void ui_close_internal_notification(void); void ui_toggle_sidebar(); void ui_setup_glarea();