diff --git a/CMakeLists.txt b/CMakeLists.txt index 0588056..dfdbfd0 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -20,6 +20,7 @@ set(SOURCES src/fomod/group.c src/fomod/xmlUtil.c src/fomod/parser.c + src/gui/guiMain.c ) # add the executable @@ -30,8 +31,12 @@ find_package(PkgConfig REQUIRED) pkg_search_module(GLIB REQUIRED glib-2.0) pkg_search_module(AUDIT REQUIRED audit) pkg_search_module(LIBXML REQUIRED libxml-2.0) +pkg_search_module(GTK REQUIRED gtk4) -target_include_directories(ModManager PRIVATE ${GLIB_INCLUDE_DIRS} ${LIBXML_INCLUDE_DIRS} ${AUDIT_INCLUDE_DIRS}) +target_include_directories(ModManager PRIVATE ${GLIB_INCLUDE_DIRS}) +target_include_directories(ModManager PRIVATE ${LIBXML_INCLUDE_DIRS}) +target_include_directories(ModManager PRIVATE ${AUDIT_INCLUDE_DIRS}) +target_include_directories(ModManager PRIVATE ${GTK_INCLUDE_DIRS}) add_compile_options(-fsanitize=address) add_link_options(-fsanitize=address) @@ -39,5 +44,6 @@ add_link_options(-fsanitize=address) target_link_libraries(ModManager ${GLIB_LDFLAGS}) target_link_libraries(ModManager ${LIBXML_LIBRARIES}) target_link_libraries(ModManager ${AUDIT_LIBRARIES}) +target_link_libraries(ModManager ${GTK_LIBRARIES}) install(TARGETS ModManager DESTINATION bin) diff --git a/src/gui/guiMain.c b/src/gui/guiMain.c new file mode 100644 index 0000000..8b9745d --- /dev/null +++ b/src/gui/guiMain.c @@ -0,0 +1,46 @@ +#include "guiMain.h" + +#include + +static void print_hello(GtkWidget *widget, gpointer data) { + g_print("Hello World\n"); +} + +static void activate(GtkApplication *app, gpointer user_data) { + GtkWidget *window; + GtkWidget *button; + GtkWidget *box; + + window = gtk_application_window_new(app); + gtk_window_set_title(GTK_WINDOW(window), "Mod Manager"); + gtk_window_set_default_size(GTK_WINDOW(window), 800, 600); + + box = gtk_box_new(GTK_ORIENTATION_VERTICAL, 0); + gtk_widget_set_halign(box, GTK_ALIGN_CENTER); + gtk_widget_set_valign(box, GTK_ALIGN_CENTER); + + gtk_window_set_child(GTK_WINDOW(window), box); + + button = gtk_button_new_with_label("Hello World"); + + g_signal_connect(button, "clicked", G_CALLBACK(print_hello), NULL); + g_signal_connect_swapped(button, "clicked", G_CALLBACK(gtk_window_destroy), window); + + gtk_box_append(GTK_BOX(box), button); + + gtk_widget_show(window); +} + +int guiMain(int argc, char **argv) { + + GtkApplication *app; + int status; + + app = gtk_application_new("fr.marcbarbier.modmanager", + G_APPLICATION_DEFAULT_FLAGS); + g_signal_connect(app, "activate", G_CALLBACK(activate), NULL); + status = g_application_run(G_APPLICATION(app), 1, argv); + g_object_unref(app); + + return status; +} \ No newline at end of file diff --git a/src/gui/guiMain.h b/src/gui/guiMain.h new file mode 100644 index 0000000..f1ff330 --- /dev/null +++ b/src/gui/guiMain.h @@ -0,0 +1,6 @@ +#ifndef __GUIMAIN_H__ +#define __GUIMAIN_H__ + +int guiMain(int argc, char **argv); + +#endif \ No newline at end of file diff --git a/src/main.c b/src/main.c index 0ebe429..24521f1 100644 --- a/src/main.c +++ b/src/main.c @@ -18,6 +18,8 @@ #include "fomod.h" #include "order.h" +#include "gui/guiMain.h" + GHashTable * gamePaths; bool isRoot() { @@ -574,6 +576,12 @@ int main(int argc, char ** argv) { else returnValue = removeMod(argc, argv); + } else if(strcmp(argv[1], "--gui") == 0) { + if(isRoot()) + returnValue = noRoot(); + else + returnValue = guiMain(argc, argv); + } else { usage(); returnValue = EXIT_FAILURE;