mirror of https://github.com/daleclack/My_GtkUi
Add finder
This commit is contained in:
parent
120c788f80
commit
2051a3cc5a
|
@ -24,7 +24,7 @@ include_directories (${GTK_INCLUDE_DIRS})
|
||||||
link_directories (${GTK_LIBRARY_DIRS})
|
link_directories (${GTK_LIBRARY_DIRS})
|
||||||
|
|
||||||
set(SOURCES src/core/main.cpp src/core/MainWin.cpp src/core/MyStack.cpp
|
set(SOURCES src/core/main.cpp src/core/MainWin.cpp src/core/MyStack.cpp
|
||||||
src/ui/MyDock.cpp)
|
src/ui/MyDock.cpp src/ui/MyFinder.cpp)
|
||||||
|
|
||||||
#Compile resources with GCR_CMake
|
#Compile resources with GCR_CMake
|
||||||
|
|
||||||
|
|
|
@ -1,4 +1,5 @@
|
||||||
#include "MyDock.h"
|
#include "MyDock.h"
|
||||||
|
#include "MyFinder.h"
|
||||||
|
|
||||||
void add_dock(GtkWidget *main_page1)
|
void add_dock(GtkWidget *main_page1)
|
||||||
{
|
{
|
||||||
|
@ -8,6 +9,7 @@ void add_dock(GtkWidget *main_page1)
|
||||||
// Get widgets
|
// Get widgets
|
||||||
GtkWidget *dock_box = GTK_WIDGET(gtk_builder_get_object(dock_builder, "dock_box"));
|
GtkWidget *dock_box = GTK_WIDGET(gtk_builder_get_object(dock_builder, "dock_box"));
|
||||||
GtkWidget *main_box = GTK_WIDGET(gtk_builder_get_object(dock_builder, "main_box"));
|
GtkWidget *main_box = GTK_WIDGET(gtk_builder_get_object(dock_builder, "main_box"));
|
||||||
|
GtkWidget *finder_box = GTK_WIDGET(gtk_builder_get_object(dock_builder, "finder_box"));
|
||||||
GtkWidget *dock_left = GTK_WIDGET(gtk_builder_get_object(dock_builder, "dock_left"));
|
GtkWidget *dock_left = GTK_WIDGET(gtk_builder_get_object(dock_builder, "dock_left"));
|
||||||
GtkWidget *icons_sw = GTK_WIDGET(gtk_builder_get_object(dock_builder, "icons_sw"));
|
GtkWidget *icons_sw = GTK_WIDGET(gtk_builder_get_object(dock_builder, "icons_sw"));
|
||||||
|
|
||||||
|
@ -21,9 +23,19 @@ void add_dock(GtkWidget *main_page1)
|
||||||
g_object_unref(pixbuf);
|
g_object_unref(pixbuf);
|
||||||
g_object_unref(sized);
|
g_object_unref(sized);
|
||||||
|
|
||||||
|
// Add finder
|
||||||
|
GtkWidget *finder = my_finder_new(GTK_ORIENTATION_HORIZONTAL, 5);
|
||||||
|
gtk_box_append(GTK_BOX(finder_box), finder);
|
||||||
|
|
||||||
// Pack widgets
|
// Pack widgets
|
||||||
gtk_widget_set_size_request(icons_sw, -1, 300);
|
|
||||||
gtk_box_append(GTK_BOX(dock_left), dock_box); // Dock position, will be changable soon
|
// Dock position and mode, will be changable soon
|
||||||
|
gtk_widget_set_vexpand(icons_sw, TRUE);
|
||||||
|
gtk_widget_set_valign(icons_sw, GTK_ALIGN_FILL);
|
||||||
|
gtk_widget_set_valign(dock_box, GTK_ALIGN_FILL);
|
||||||
|
gtk_box_append(GTK_BOX(dock_left), dock_box);
|
||||||
|
|
||||||
|
// Others
|
||||||
gtk_overlay_set_child(GTK_OVERLAY(main_overlay), main_pic);
|
gtk_overlay_set_child(GTK_OVERLAY(main_overlay), main_pic);
|
||||||
gtk_overlay_add_overlay(GTK_OVERLAY(main_overlay), main_box);
|
gtk_overlay_add_overlay(GTK_OVERLAY(main_overlay), main_box);
|
||||||
gtk_box_append(GTK_BOX(main_page1), main_overlay);
|
gtk_box_append(GTK_BOX(main_page1), main_overlay);
|
||||||
|
|
|
@ -0,0 +1,142 @@
|
||||||
|
#include "MyFinder.h"
|
||||||
|
#include <cstdio>
|
||||||
|
#include <ctime>
|
||||||
|
|
||||||
|
struct _MyFinder
|
||||||
|
{
|
||||||
|
GtkBox parent_instance;
|
||||||
|
GtkWidget *btn_icon, *btntitle, *btnfile, *btnedit,
|
||||||
|
*btnshow, *btngoto, *btnwin, *btnhelp;
|
||||||
|
GtkWidget *label_title, *labelfile, *labeledit, *labelshow,
|
||||||
|
*labelgoto, *labelwin, *labelhelp, *time_label;
|
||||||
|
GtkWidget *separator;
|
||||||
|
GtkWidget *time_button, *time_popover, *calendar;
|
||||||
|
GtkWidget *find_button, *menu_button, *battery_button,
|
||||||
|
*network_button, *screen_button, *audio_button;
|
||||||
|
};
|
||||||
|
|
||||||
|
G_DEFINE_TYPE(MyFinder, my_finder, GTK_TYPE_BOX)
|
||||||
|
|
||||||
|
static void get_menu(GtkBuilder *builder, const char *id, GtkWidget *menu_button)
|
||||||
|
{
|
||||||
|
// Initalize Menu button
|
||||||
|
gtk_menu_button_set_has_frame(GTK_MENU_BUTTON(menu_button), FALSE);
|
||||||
|
|
||||||
|
// Get Menu model and initalize the popover relate to the menubutton
|
||||||
|
GMenuModel *menu_model = G_MENU_MODEL(gtk_builder_get_object(builder, id));
|
||||||
|
gtk_menu_button_set_menu_model(GTK_MENU_BUTTON(menu_button), menu_model);
|
||||||
|
|
||||||
|
// Make the menu has no arrow and pack the start
|
||||||
|
GtkPopover *popover = gtk_menu_button_get_popover(GTK_MENU_BUTTON(menu_button));
|
||||||
|
gtk_popover_set_has_arrow(popover, FALSE);
|
||||||
|
gtk_widget_set_halign(GTK_WIDGET(popover), GTK_ALIGN_START);
|
||||||
|
}
|
||||||
|
|
||||||
|
static gboolean timeout_func(gpointer data)
|
||||||
|
{
|
||||||
|
// Get Localtime
|
||||||
|
time_t t;
|
||||||
|
t = time(NULL);
|
||||||
|
struct tm *local;
|
||||||
|
local = localtime(&t);
|
||||||
|
char time_data[57];
|
||||||
|
snprintf(time_data, sizeof(time_data), "%d/%d/%d %d:%d:%d", local->tm_year + 1900,
|
||||||
|
local->tm_mon + 1, local->tm_mday, local->tm_hour, local->tm_min, local->tm_sec);
|
||||||
|
gtk_label_set_label(GTK_LABEL(data), time_data);
|
||||||
|
return TRUE;
|
||||||
|
}
|
||||||
|
|
||||||
|
static void my_finder_init(MyFinder *self)
|
||||||
|
{
|
||||||
|
// Create widgets
|
||||||
|
self->btn_icon = gtk_menu_button_new();
|
||||||
|
self->btntitle = gtk_menu_button_new();
|
||||||
|
self->btnfile = gtk_menu_button_new();
|
||||||
|
self->btnedit = gtk_menu_button_new();
|
||||||
|
self->btnshow = gtk_menu_button_new();
|
||||||
|
self->btngoto = gtk_menu_button_new();
|
||||||
|
self->btnwin = gtk_menu_button_new();
|
||||||
|
self->btnhelp = gtk_menu_button_new();
|
||||||
|
self->time_button = gtk_menu_button_new();
|
||||||
|
self->label_title = gtk_label_new("My Gtk UI");
|
||||||
|
self->labelfile = gtk_label_new("File");
|
||||||
|
self->labeledit = gtk_label_new("Edit");
|
||||||
|
self->labelshow = gtk_label_new("Show");
|
||||||
|
self->labelgoto = gtk_label_new("Go to");
|
||||||
|
self->labelwin = gtk_label_new("Windows");
|
||||||
|
self->labelhelp = gtk_label_new("Help");
|
||||||
|
self->time_label = gtk_label_new("2023/6/9 22:29:00");
|
||||||
|
self->separator = gtk_separator_new(GTK_ORIENTATION_HORIZONTAL);
|
||||||
|
self->find_button = gtk_button_new_from_icon_name("finder-find");
|
||||||
|
self->screen_button = gtk_button_new_from_icon_name("finder-computer");
|
||||||
|
self->battery_button = gtk_button_new_from_icon_name("finder-battery");
|
||||||
|
self->audio_button = gtk_button_new_from_icon_name("finder_audio");
|
||||||
|
self->network_button = gtk_button_new_from_icon_name("finder-wifi");
|
||||||
|
self->menu_button = gtk_button_new_from_icon_name("open-menu");
|
||||||
|
gtk_menu_button_set_icon_name(GTK_MENU_BUTTON(self->btn_icon), "My_GtkUI");
|
||||||
|
gtk_button_set_has_frame(GTK_BUTTON(self->find_button), FALSE);
|
||||||
|
gtk_button_set_has_frame(GTK_BUTTON(self->screen_button), FALSE);
|
||||||
|
gtk_button_set_has_frame(GTK_BUTTON(self->battery_button), FALSE);
|
||||||
|
gtk_button_set_has_frame(GTK_BUTTON(self->audio_button), FALSE);
|
||||||
|
gtk_button_set_has_frame(GTK_BUTTON(self->network_button), FALSE);
|
||||||
|
gtk_button_set_has_frame(GTK_BUTTON(self->menu_button), FALSE);
|
||||||
|
gtk_button_set_has_frame(GTK_BUTTON(self->time_button), FALSE);
|
||||||
|
|
||||||
|
// Add labels to the menu button
|
||||||
|
gtk_menu_button_set_child(GTK_MENU_BUTTON(self->btntitle), self->label_title);
|
||||||
|
gtk_menu_button_set_child(GTK_MENU_BUTTON(self->btnfile), self->labelfile);
|
||||||
|
gtk_menu_button_set_child(GTK_MENU_BUTTON(self->btnedit), self->labeledit);
|
||||||
|
gtk_menu_button_set_child(GTK_MENU_BUTTON(self->btnshow), self->labelshow);
|
||||||
|
gtk_menu_button_set_child(GTK_MENU_BUTTON(self->btngoto), self->labelgoto);
|
||||||
|
gtk_menu_button_set_child(GTK_MENU_BUTTON(self->btnwin), self->labelwin);
|
||||||
|
gtk_menu_button_set_child(GTK_MENU_BUTTON(self->btnhelp), self->labelhelp);
|
||||||
|
gtk_menu_button_set_child(GTK_MENU_BUTTON(self->time_button), self->time_label);
|
||||||
|
|
||||||
|
// Create GtkBuilder for menu
|
||||||
|
GtkBuilder *menu_builder = gtk_builder_new_from_resource("/org/gtk/daleclack/menubar.xml");
|
||||||
|
get_menu(menu_builder, "main_menu", self->btn_icon);
|
||||||
|
get_menu(menu_builder, "title_menu", self->btntitle);
|
||||||
|
get_menu(menu_builder, "menu_file", self->btnfile);
|
||||||
|
get_menu(menu_builder, "menu_edit", self->btnedit);
|
||||||
|
get_menu(menu_builder, "menu_show", self->btnshow);
|
||||||
|
get_menu(menu_builder, "menu_goto", self->btngoto);
|
||||||
|
get_menu(menu_builder, "menu_win", self->btnwin);
|
||||||
|
get_menu(menu_builder, "menu_help", self->btnhelp);
|
||||||
|
|
||||||
|
// Create timer
|
||||||
|
g_timeout_add(1000, timeout_func, self->time_label);
|
||||||
|
self->time_popover = gtk_popover_new();
|
||||||
|
self->calendar = gtk_calendar_new();
|
||||||
|
gtk_popover_set_child(GTK_POPOVER(self->time_popover), self->calendar);
|
||||||
|
gtk_menu_button_set_popover(GTK_MENU_BUTTON(self->time_button),
|
||||||
|
self->time_popover);
|
||||||
|
|
||||||
|
// Pack widgets
|
||||||
|
gtk_widget_set_hexpand(self->separator, TRUE);
|
||||||
|
gtk_box_append(GTK_BOX(self), self->btn_icon);
|
||||||
|
gtk_box_append(GTK_BOX(self), self->btntitle);
|
||||||
|
gtk_box_append(GTK_BOX(self), self->btnfile);
|
||||||
|
gtk_box_append(GTK_BOX(self), self->btnedit);
|
||||||
|
gtk_box_append(GTK_BOX(self), self->btnshow);
|
||||||
|
gtk_box_append(GTK_BOX(self), self->btngoto);
|
||||||
|
gtk_box_append(GTK_BOX(self), self->btnwin);
|
||||||
|
gtk_box_append(GTK_BOX(self), self->btnhelp);
|
||||||
|
gtk_box_append(GTK_BOX(self), self->separator);
|
||||||
|
gtk_box_append(GTK_BOX(self), self->screen_button);
|
||||||
|
gtk_box_append(GTK_BOX(self), self->audio_button);
|
||||||
|
gtk_box_append(GTK_BOX(self), self->network_button);
|
||||||
|
gtk_box_append(GTK_BOX(self), self->battery_button);
|
||||||
|
gtk_box_append(GTK_BOX(self), self->time_button);
|
||||||
|
gtk_box_append(GTK_BOX(self), self->find_button);
|
||||||
|
gtk_box_append(GTK_BOX(self), self->menu_button);
|
||||||
|
}
|
||||||
|
|
||||||
|
static void my_finder_class_init(MyFinderClass *klass)
|
||||||
|
{
|
||||||
|
}
|
||||||
|
|
||||||
|
GtkWidget *my_finder_new(GtkOrientation orientation, int spacing)
|
||||||
|
{
|
||||||
|
return GTK_WIDGET(g_object_new(my_finder_get_type(),
|
||||||
|
"orientation", orientation, "spacing", spacing, NULL));
|
||||||
|
}
|
|
@ -0,0 +1,7 @@
|
||||||
|
#pragma once
|
||||||
|
|
||||||
|
#include <gtk/gtk.h>
|
||||||
|
|
||||||
|
G_DECLARE_FINAL_TYPE(MyFinder, my_finder, MY, FINDER, GtkBox)
|
||||||
|
|
||||||
|
GtkWidget *my_finder_new(GtkOrientation orientation, int spacing);
|
Loading…
Reference in New Issue