Add window for some apps

This commit is contained in:
daleclack 2024-02-15 13:33:38 +08:00
parent d9ea5b4c94
commit 1c103d31b2
8 changed files with 246 additions and 2 deletions

View File

@ -28,7 +28,8 @@ set(SOURCES src/core/main.cpp src/core/MainWin.cpp src/core/MyStack.cpp
src/ui/AppView.cpp src/file_app/FileColumnView.cpp src/file_app/FileGridView.cpp src/ui/AppView.cpp src/file_app/FileColumnView.cpp src/file_app/FileGridView.cpp
src/file_app/FileWindow.cpp src/game_app/GameApp.cpp src/calc_app/calc.cpp src/file_app/FileWindow.cpp src/game_app/GameApp.cpp src/calc_app/calc.cpp
src/calc_app/CalcApp.cpp src/run_app/RunApp.cpp src/draw_app/DrawApp.cpp src/calc_app/CalcApp.cpp src/run_app/RunApp.cpp src/draw_app/DrawApp.cpp
src/game24_app/Game24.cpp src/game24_app/Game24App.cpp) src/game24_app/Game24.cpp src/game24_app/Game24App.cpp src/text_app/TextEditor.cpp
src/image_app/ImageApp.cpp)
#Compile resources with GCR_CMake #Compile resources with GCR_CMake

View File

@ -2,3 +2,6 @@
#include <gtk/gtk.h> #include <gtk/gtk.h>
G_DECLARE_FINAL_TYPE(DrawApp, draw_app, DRAW, APP, GtkWindow)
DrawApp *draw_app_new();

View File

@ -0,0 +1,7 @@
#pragma once
#include <gtk/gtk.h>
G_DECLARE_FINAL_TYPE(ImageApp, image_app, IMAGE, APP, GtkApplicationWindow)
ImageApp *image_app_new();

View File

@ -0,0 +1,7 @@
#pragma once
#include <gtk/gtk.h>
G_DECLARE_FINAL_TYPE(TextEditor, text_editor, TEXT, EDITOR, GtkApplicationWindow)
TextEditor *text_editor_new();

View File

@ -1 +1,33 @@
#include "DrawApp.h" #include "DrawApp.h"
struct _DrawApp{
GtkWindow parent_instance;
// Child widgets
GtkWidget *draw_area;
GtkWidget *color_btn, *fill_btn;
GtkWidget *fill_check;
GtkWidget *main_label, *size_label;
GtkWidget *left_box, *main_box, *btn_box;
GtkWidget *btn_free, *btn_line, *btn_circle, *btn_rectangle;
GtkWidget *size_scale;
// Drawing Area
cairo_surface_t *surface;
};
G_DEFINE_TYPE(DrawApp, draw_app, GTK_TYPE_WINDOW)
static void draw_app_init(DrawApp *self)
{
gtk_window_set_title(GTK_WINDOW(self), "Drawing App");
}
static void draw_app_class_init(DrawAppClass *klass)
{
}
DrawApp *draw_app_new()
{
return DRAW_APP(g_object_new(draw_app_get_type(), NULL));
}

View File

@ -0,0 +1,20 @@
#include "ImageApp.h"
struct _ImageApp{
GtkWindow parent_instance;
};
G_DEFINE_TYPE(ImageApp, image_app, GTK_TYPE_APPLICATION_WINDOW)
static void image_app_init(ImageApp *self)
{
gtk_window_set_title(GTK_WINDOW(self), "Image Viewer");
}
static void image_app_class_init(ImageAppClass *klass)
{}
ImageApp *image_app_new()
{
return IMAGE_APP(g_object_new(image_app_get_type(), NULL));
}

View File

@ -0,0 +1,23 @@
#include "TextEditor.h"
struct _TextEditor
{
GtkApplicationWindow parent_instance;
};
G_DEFINE_TYPE(TextEditor, text_editor, GTK_TYPE_APPLICATION_WINDOW)
static void text_editor_init(TextEditor *self)
{
gtk_window_set_title(GTK_WINDOW(self), "Text editor");
}
static void text_editor_class_init(TextEditorClass *klass)
{
}
TextEditor *text_editor_new()
{
return TEXT_EDITOR(g_object_new(text_editor_get_type(), NULL));
}

View File

@ -6,6 +6,9 @@
#include "CalcApp.h" #include "CalcApp.h"
#include "RunApp.h" #include "RunApp.h"
#include "Game24App.h" #include "Game24App.h"
#include "DrawApp.h"
#include "TextEditor.h"
#include "ImageApp.h"
enum PadPage enum PadPage
{ {
@ -41,6 +44,9 @@ struct _MyDock
GameApp *game_win; // The Guess Game GameApp *game_win; // The Guess Game
CalcApp *calc_win; // Calc App CalcApp *calc_win; // Calc App
Game24App *game24_win; // 24 Game Window Game24App *game24_win; // 24 Game Window
DrawApp *draw_win; // A Drawing App
TextEditor *edit_win; // Text Editor
ImageApp *image_app; // Image Viewer
}; };
G_DEFINE_TYPE(MyDock, my_dock, GTK_TYPE_BOX) G_DEFINE_TYPE(MyDock, my_dock, GTK_TYPE_BOX)
@ -294,6 +300,7 @@ static void padrun_clicked(GtkWidget *widget, MyDock *dock)
gtk_window_present(GTK_WINDOW(run_win)); gtk_window_present(GTK_WINDOW(run_win));
} }
// 24 Game control functions
static void padgame24_clicked(GtkWindow *window, MyDock *dock) static void padgame24_clicked(GtkWindow *window, MyDock *dock)
{ {
// When the window visible, unminimize it // When the window visible, unminimize it
@ -335,6 +342,132 @@ static gboolean game24_win_closed(GtkWidget *game24_win, MyDock *dock)
return TRUE; return TRUE;
} }
// Drawing App control functions
static void paddraw_clicked(GtkWindow *window, MyDock *dock)
{
// When the window visible, unminimize it
if (gtk_widget_get_visible(GTK_WIDGET((dock->draw_win))))
{
gtk_window_unminimize(GTK_WINDOW(dock->draw_win));
}
else
{
// Show the window
gtk_window_set_transient_for(GTK_WINDOW(dock->draw_win), dock->parent_win);
gtk_window_present(GTK_WINDOW(dock->draw_win));
}
gtk_image_set_from_icon_name(GTK_IMAGE(dock->image_draw), "drawing_app_running");
btnlaunch_clicked(NULL, dock);
}
static void btndraw_clicked(GtkWidget *widget, MyDock *dock)
{
// When the window visible, control window state
if (gtk_widget_get_visible(GTK_WIDGET((dock->draw_win))))
{
window_ctrl(GTK_WINDOW(dock->draw_win), dock->parent_win);
}
else
{
// Show the window
gtk_window_set_transient_for(GTK_WINDOW(dock->draw_win), dock->parent_win);
gtk_window_present(GTK_WINDOW(dock->draw_win));
}
gtk_image_set_from_icon_name(GTK_IMAGE(dock->image_draw), "drawing_app_running");
}
static gboolean draw_win_closed(GtkWidget *draw_win, MyDock *dock)
{
// Hide the window
gtk_widget_set_visible(draw_win, FALSE);
gtk_image_set_from_icon_name(GTK_IMAGE(dock->image_draw), "drawing_app");
return TRUE;
}
// Text Editor control functions
static void padedit_clicked(GtkWindow *window, MyDock *dock)
{
// When the window visible, unminimize it
if (gtk_widget_get_visible(GTK_WIDGET((dock->edit_win))))
{
gtk_window_unminimize(GTK_WINDOW(dock->edit_win));
}
else
{
// Show the window
gtk_window_set_transient_for(GTK_WINDOW(dock->edit_win), dock->parent_win);
gtk_window_present(GTK_WINDOW(dock->edit_win));
}
gtk_image_set_from_icon_name(GTK_IMAGE(dock->image_edit), "my_textedit_running");
btnlaunch_clicked(NULL, dock);
}
static void btnedit_clicked(GtkWidget *widget, MyDock *dock)
{
// When the window visible, control window state
if (gtk_widget_get_visible(GTK_WIDGET((dock->edit_win))))
{
window_ctrl(GTK_WINDOW(dock->edit_win), dock->parent_win);
}
else
{
// Show the window
gtk_window_set_transient_for(GTK_WINDOW(dock->edit_win), dock->parent_win);
gtk_window_present(GTK_WINDOW(dock->edit_win));
}
gtk_image_set_from_icon_name(GTK_IMAGE(dock->image_edit), "my_textedit_running");
}
static gboolean edit_win_closed(GtkWidget *win, MyDock *dock)
{
// Hide the window
gtk_widget_set_visible(win, FALSE);
gtk_image_set_from_icon_name(GTK_IMAGE(dock->image_edit), "my_textedit");
return TRUE;
}
// Image viewer control functions
static void padimage_clicked(GtkWindow *window, MyDock *dock)
{
// When the window visible, unminimize it
if (gtk_widget_get_visible(GTK_WIDGET((dock->image_app))))
{
gtk_window_unminimize(GTK_WINDOW(dock->image_app));
}
else
{
// Show the window
gtk_window_set_transient_for(GTK_WINDOW(dock->image_app), dock->parent_win);
gtk_window_present(GTK_WINDOW(dock->image_app));
}
gtk_image_set_from_icon_name(GTK_IMAGE(dock->image_viewer), "image_app_running");
btnlaunch_clicked(NULL, dock);
}
static void btnimage_clicked(GtkWidget *widget, MyDock *dock)
{
// When the window visible, control window state
if (gtk_widget_get_visible(GTK_WIDGET((dock->image_app))))
{
window_ctrl(GTK_WINDOW(dock->image_app), dock->parent_win);
}
else
{
// Show the window
gtk_window_set_transient_for(GTK_WINDOW(dock->image_app), dock->parent_win);
gtk_window_present(GTK_WINDOW(dock->image_app));
}
gtk_image_set_from_icon_name(GTK_IMAGE(dock->image_viewer), "image_app_running");
}
static gboolean image_win_closed(GtkWidget *win, MyDock *dock)
{
// Hide the window
gtk_widget_set_visible(win, FALSE);
gtk_image_set_from_icon_name(GTK_IMAGE(dock->image_viewer), "image_app");
return TRUE;
}
static void my_dock_get_widgets(MyDock *self) static void my_dock_get_widgets(MyDock *self)
{ {
// Get widgets // Get widgets
@ -457,6 +590,24 @@ static void my_dock_init(MyDock *self)
g_signal_connect(self->padgame24, "clicked", G_CALLBACK(padgame24_clicked), self); g_signal_connect(self->padgame24, "clicked", G_CALLBACK(padgame24_clicked), self);
g_signal_connect(self->game24_win, "close-request", G_CALLBACK(game24_win_closed), self); g_signal_connect(self->game24_win, "close-request", G_CALLBACK(game24_win_closed), self);
// Create Drawing App Window
self->draw_win = draw_app_new();
g_signal_connect(self->btndraw, "clicked", G_CALLBACK(btndraw_clicked), self);
g_signal_connect(self->paddraw, "clicked", G_CALLBACK(paddraw_clicked), self);
g_signal_connect(self->draw_win, "close-request", G_CALLBACK(draw_win_closed), self);
// Create Text Editor Window
self->edit_win = text_editor_new();
g_signal_connect(self->btnedit, "clicked", G_CALLBACK(btnedit_clicked), self);
g_signal_connect(self->padedit, "clicked", G_CALLBACK(padedit_clicked), self);
g_signal_connect(self->edit_win, "close-request", G_CALLBACK(edit_win_closed), self);
// Image Viewer window
self->image_app = image_app_new();
g_signal_connect(self->btnimage, "clicked", G_CALLBACK(btnimage_clicked), self);
g_signal_connect(self->padimage, "clicked", G_CALLBACK(padimage_clicked), self);
g_signal_connect(self->image_app, "close-request", G_CALLBACK(image_win_closed), self);
// Signal for app runner // Signal for app runner
g_signal_connect(self->padrun, "clicked", G_CALLBACK(padrun_clicked), self); g_signal_connect(self->padrun, "clicked", G_CALLBACK(padrun_clicked), self);