From 8970b3c274175a0c344960da4cb94afff724fe3a Mon Sep 17 00:00:00 2001 From: daleclack Date: Fri, 24 Mar 2023 23:25:08 +0800 Subject: [PATCH] Update gtk148 --- Gtk4/gtk147_file_exp2/cambalache/window.cmb | 11 +++++ Gtk4/gtk148_listview/CMakeLists.txt | 2 +- Gtk4/gtk148_listview/src/MainWin.cpp | 48 +++++++++++++++---- .../src/{MainWin.hh => MainWin.h} | 0 Gtk4/gtk148_listview/src/MyItem.cpp | 31 ++++++++++++ Gtk4/gtk148_listview/src/MyItem.h | 9 ++++ Gtk4/gtk148_listview/src/main.cpp | 2 +- tools/List.txt | 10 ++++ tools/gpedit.cmd | 11 +++++ 9 files changed, 114 insertions(+), 10 deletions(-) create mode 100644 Gtk4/gtk147_file_exp2/cambalache/window.cmb rename Gtk4/gtk148_listview/src/{MainWin.hh => MainWin.h} (100%) create mode 100644 Gtk4/gtk148_listview/src/MyItem.cpp create mode 100644 Gtk4/gtk148_listview/src/MyItem.h create mode 100644 tools/List.txt create mode 100644 tools/gpedit.cmd diff --git a/Gtk4/gtk147_file_exp2/cambalache/window.cmb b/Gtk4/gtk147_file_exp2/cambalache/window.cmb new file mode 100644 index 0000000..0a0a5c1 --- /dev/null +++ b/Gtk4/gtk147_file_exp2/cambalache/window.cmb @@ -0,0 +1,11 @@ + + + + + (1,None,"window.ui","window.ui",None,None,None,None,None,None,None) + + + (1,1,"GtkWindow",None,None,None,None,None,None,None), + (1,2,"GtkDirectoryList",None,1,None,None,None,None,None) + + diff --git a/Gtk4/gtk148_listview/CMakeLists.txt b/Gtk4/gtk148_listview/CMakeLists.txt index 55f0cf1..a5420d8 100644 --- a/Gtk4/gtk148_listview/CMakeLists.txt +++ b/Gtk4/gtk148_listview/CMakeLists.txt @@ -26,7 +26,7 @@ link_directories (${GTKMM4_LIBRARY_DIRS}) # set(PO_DIR ${CMAKE_BINARY_DIR}/po/zh_CN/LC_MESSAGES) #Source files -set(SOURCE_FILE src/main.cpp src/MainWin.cpp) +set(SOURCE_FILE src/main.cpp src/MainWin.cpp src/MyItem.cpp) #Compile Resource diff --git a/Gtk4/gtk148_listview/src/MainWin.cpp b/Gtk4/gtk148_listview/src/MainWin.cpp index d3bbd15..2781547 100644 --- a/Gtk4/gtk148_listview/src/MainWin.cpp +++ b/Gtk4/gtk148_listview/src/MainWin.cpp @@ -1,34 +1,66 @@ -#include "MainWin.hh" +#include "MainWin.h" +#include "MyItem.h" struct _MainWin{ GtkApplicationWindow parent_instance; GListModel *model; - GtkListView *view; + GtkWidget *view; + GtkListItemFactory *factory; }; G_DEFINE_TYPE(MainWin, main_win, GTK_TYPE_APPLICATION_WINDOW) +static void setup_list_item(GtkListItemFactory *factory, GtkListItem *item){ + // Create label to show list item + GtkWidget *label; + label = gtk_label_new(" "); + gtk_list_item_set_child(item, label); +} + +static void bind_list_item(GtkListItemFactory *factory, GtkListItem *item){ + // Get child for list item + GtkWidget *label; + label = gtk_list_item_get_child(item); + + // Get string + MyItem *item1 = (MyItem*)gtk_list_item_get_item(item); + GString *string = my_item_get_string(item1); + gtk_label_set_label(GTK_LABEL(label), string->str); + // g_string_free(string, TRUE); +} + static GListModel *create_list_model() { GListStore *store; // Create the list store - store = g_list_store_new(G_TYPE_STRING); + store = g_list_store_new(my_item_get_type()); // Fill the store - g_list_store_append(store, g_string_new("Item 1")); - g_list_store_append(store, g_string_new("Item 2")); - g_list_store_append(store, g_string_new("Item 3")); + g_list_store_append(store, my_item_new("Item 1")); + g_list_store_append(store, my_item_new("Item 2")); + g_list_store_append(store, my_item_new("Item 3")); return G_LIST_MODEL(store); } static void main_win_init(MainWin *self){ + // Initalize window + gtk_window_set_icon_name(GTK_WINDOW(self), "org.gtk.daleclack"); + gtk_window_set_default_size(GTK_WINDOW(self), 640, 360); + // Create list model - GListModel *model = create_list_model(); + self->model = create_list_model(); // Create Factory - + self->factory = gtk_signal_list_item_factory_new(); + g_signal_connect(self->factory, "setup", G_CALLBACK(setup_list_item), NULL); + g_signal_connect(self->factory, "bind", G_CALLBACK(bind_list_item), NULL); + + // Create view + self->view = gtk_list_view_new(GTK_SELECTION_MODEL(gtk_single_selection_new(self->model)), + self->factory); + gtk_window_set_child(GTK_WINDOW(self), self->view); } static void main_win_class_init(MainWinClass *klass){ diff --git a/Gtk4/gtk148_listview/src/MainWin.hh b/Gtk4/gtk148_listview/src/MainWin.h similarity index 100% rename from Gtk4/gtk148_listview/src/MainWin.hh rename to Gtk4/gtk148_listview/src/MainWin.h diff --git a/Gtk4/gtk148_listview/src/MyItem.cpp b/Gtk4/gtk148_listview/src/MyItem.cpp new file mode 100644 index 0000000..bac75c8 --- /dev/null +++ b/Gtk4/gtk148_listview/src/MyItem.cpp @@ -0,0 +1,31 @@ +#include "MyItem.h" + +struct _MyItem{ + GObject parent_instance; + GString *string; +}; + +G_DEFINE_TYPE(MyItem, my_item, G_TYPE_OBJECT) + +static void my_item_dispose(GObject *object){ + // Free the memory + g_string_free(MY_ITEM(object)->string, TRUE); +} + +static void my_item_init(MyItem *self){ +} + +static void my_item_class_init(MyItemClass *klass){ + G_OBJECT_CLASS(klass)->dispose = my_item_dispose; +} + +GString *my_item_get_string(MyItem *self){ + return self->string; +} + +MyItem *my_item_new(const char *str){ + // Create a new MyItem and initalize + MyItem *item = MY_ITEM(g_object_new(my_item_get_type(), NULL)); + item->string = g_string_new(str); + return item; +} diff --git a/Gtk4/gtk148_listview/src/MyItem.h b/Gtk4/gtk148_listview/src/MyItem.h new file mode 100644 index 0000000..665afc3 --- /dev/null +++ b/Gtk4/gtk148_listview/src/MyItem.h @@ -0,0 +1,9 @@ +#pragma once + +#include + +G_DECLARE_FINAL_TYPE(MyItem, my_item, MY, ITEM, GObject) + +MyItem *my_item_new(const char *str); + +GString *my_item_get_string(MyItem *self); diff --git a/Gtk4/gtk148_listview/src/main.cpp b/Gtk4/gtk148_listview/src/main.cpp index 6bec0bb..59031f7 100644 --- a/Gtk4/gtk148_listview/src/main.cpp +++ b/Gtk4/gtk148_listview/src/main.cpp @@ -1,4 +1,4 @@ -#include "MainWin.hh" +#include "MainWin.h" static void gtkmain(GtkApplication *app, gpointer data){ MainWin *window = main_win_new(app); diff --git a/tools/List.txt b/tools/List.txt new file mode 100644 index 0000000..0cd611b --- /dev/null +++ b/tools/List.txt @@ -0,0 +1,10 @@ +Microsoft-Windows-GroupPolicy-ClientExtensions-Package~31bf3856ad364e35~amd64~en-US~10.0.22621.1.mum +Microsoft-Windows-GroupPolicy-ClientExtensions-Package~31bf3856ad364e35~amd64~zh-CN~10.0.22621.1.mum +Microsoft-Windows-GroupPolicy-ClientExtensions-Package~31bf3856ad364e35~amd64~~10.0.22621.1465.mum +Microsoft-Windows-GroupPolicy-ClientExtensions-Package~31bf3856ad364e35~amd64~~10.0.22621.891.mum +Microsoft-Windows-GroupPolicy-ClientTools-Package~31bf3856ad364e35~amd64~en-US~10.0.22621.1325.mum +Microsoft-Windows-GroupPolicy-ClientTools-Package~31bf3856ad364e35~amd64~en-US~10.0.22621.1391.mum +Microsoft-Windows-GroupPolicy-ClientTools-Package~31bf3856ad364e35~amd64~zh-CN~10.0.22621.1325.mum +Microsoft-Windows-GroupPolicy-ClientTools-Package~31bf3856ad364e35~amd64~zh-CN~10.0.22621.1391.mum +Microsoft-Windows-GroupPolicy-ClientTools-Package~31bf3856ad364e35~amd64~~10.0.22621.1325.mum +Microsoft-Windows-GroupPolicy-ClientTools-Package~31bf3856ad364e35~amd64~~10.0.22621.1465.mum diff --git a/tools/gpedit.cmd b/tools/gpedit.cmd new file mode 100644 index 0000000..1b3e5bb --- /dev/null +++ b/tools/gpedit.cmd @@ -0,0 +1,11 @@ +@echo off + +pushd "%~dp0" + +dir /b C:\Windows\servicing\Packages\Microsoft-Windows-GroupPolicy-ClientExtensions-Package~3*.mum >List.txt + +dir /b C:\Windows\servicing\Packages\Microsoft-Windows-GroupPolicy-ClientTools-Package~3*.mum >>List.txt + +for /f %%i in ('findstr /i . List.txt 2^>nul') do dism /online /norestart /add-package:"C:\Windows\servicing\Packages\%%i" + +pause \ No newline at end of file