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)
+
+
+
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