diff --git a/Gtkmm3/gtk125_backprefs3/.vscode/settings.json b/Gtkmm3/gtk125_backprefs3/.vscode/settings.json
new file mode 100644
index 0000000..b4d8c35
--- /dev/null
+++ b/Gtkmm3/gtk125_backprefs3/.vscode/settings.json
@@ -0,0 +1,3 @@
+{
+ "C_Cpp.default.configurationProvider": "ms-vscode.cmake-tools"
+}
\ No newline at end of file
diff --git a/Gtkmm3/gtk125_backprefs3/CMakeLists.txt b/Gtkmm3/gtk125_backprefs3/CMakeLists.txt
new file mode 100644
index 0000000..585e971
--- /dev/null
+++ b/Gtkmm3/gtk125_backprefs3/CMakeLists.txt
@@ -0,0 +1,67 @@
+set(CMAKE_CXX_STANDARD 17)
+cmake_minimum_required(VERSION 3.0.0)
+project(gtk125 VERSION 1.0.0)
+
+list(APPEND CMAKE_MODULE_PATH ${PROJECT_SOURCE_DIR}/../../GCR_CMake/macros)
+include(GlibCompileResourcesSupport)
+
+include(CTest)
+enable_testing()
+
+set(CPACK_PROJECT_NAME ${PROJECT_NAME})
+set(CPACK_PROJECT_VERSION ${PROJECT_VERSION})
+
+include(CPack)
+include_directories(.)
+include_directories(..)
+
+find_package (PkgConfig REQUIRED)
+pkg_check_modules (GTKMM3 REQUIRED gtkmm-3.0)
+include_directories (${GTKMM3_INCLUDE_DIRS})
+link_directories (${GTKMM3_LIBRARY_DIRS})
+
+#Source files
+set(SOURCE_FILE src/main.cc src/MyWin.cc src/MyPrefs.cc ../cfgfile/cfgfile.cc)
+
+#Compile Resource
+
+set(RESOURCE_LIST
+ icons/16x16/actions/list-add.svg
+ icons/16x16/actions/list-remove.svg
+ icons/scalable/status/display_prefs.svg
+ folder.svg
+ folder-images.svg
+ image_file.svg
+ prefs_stack.ui)
+
+compile_gresources(RESOURCE_FILE
+ XML_OUT
+ TYPE EMBED_C
+ RESOURCES ${RESOURCE_LIST}
+ PREFIX "/org/gtk/daleclack"
+ SOURCE_DIR ${PROJECT_SOURCE_DIR}/res)
+
+# Add a custom target to the makefile. Now make builds our resource file.
+# It depends on the output RESOURCE_FILE.
+add_custom_target(resource ALL DEPENDS ${RESOURCE_FILE})
+
+#For win32 platform,use rc resource and .ico icon
+if(WIN32)
+ SET(CMAKE_RC_COMPILER x86_64-w64-mingw32-windres)
+ set(app_WINRC ../icon.rc)
+ set_property(SOURCE ../icon.rc APPEND PROPERTY
+ OBJECT_DEPENDS ${PROJECT_SOURCE_DIR}/../icon.ico
+ )
+ add_executable(${PROJECT_NAME} WIN32 ${app_WINRC} ${SOURCE_FILE} ${RESOURCE_FILE})
+else()
+ add_executable(${PROJECT_NAME} ${SOURCE_FILE} ${RESOURCE_FILE})
+
+endif(WIN32)
+
+#Add command to generate .gitignore
+add_custom_command(TARGET ${PROJECT_NAME}
+ COMMAND echo \"*\" > ${CMAKE_BINARY_DIR}/.gitignore
+ COMMAND echo \"**/*\" > ${CMAKE_BINARY_DIR}/.hgignore)
+
+SET (CMAKE_EXTRA_CXX_FLAGS ${GTKMM3_CFLAGS_OTHER})
+target_link_libraries (${PROJECT_NAME} ${GTKMM3_LIBRARIES} -lpthread)
diff --git a/Gtkmm3/gtk125_backprefs3/res/folder-images.svg b/Gtkmm3/gtk125_backprefs3/res/folder-images.svg
new file mode 100644
index 0000000..fb2d906
--- /dev/null
+++ b/Gtkmm3/gtk125_backprefs3/res/folder-images.svg
@@ -0,0 +1,36 @@
+
diff --git a/Gtkmm3/gtk125_backprefs3/res/folder.svg b/Gtkmm3/gtk125_backprefs3/res/folder.svg
new file mode 100644
index 0000000..e83bb59
--- /dev/null
+++ b/Gtkmm3/gtk125_backprefs3/res/folder.svg
@@ -0,0 +1,35 @@
+
diff --git a/Gtkmm3/gtk125_backprefs3/res/icons/16x16/actions/list-add.svg b/Gtkmm3/gtk125_backprefs3/res/icons/16x16/actions/list-add.svg
new file mode 100644
index 0000000..f76d5bb
--- /dev/null
+++ b/Gtkmm3/gtk125_backprefs3/res/icons/16x16/actions/list-add.svg
@@ -0,0 +1,13 @@
+
diff --git a/Gtkmm3/gtk125_backprefs3/res/icons/16x16/actions/list-remove.svg b/Gtkmm3/gtk125_backprefs3/res/icons/16x16/actions/list-remove.svg
new file mode 100644
index 0000000..d4f208c
--- /dev/null
+++ b/Gtkmm3/gtk125_backprefs3/res/icons/16x16/actions/list-remove.svg
@@ -0,0 +1,8 @@
+
diff --git a/Gtkmm3/gtk125_backprefs3/res/icons/scalable/status/display_prefs.svg b/Gtkmm3/gtk125_backprefs3/res/icons/scalable/status/display_prefs.svg
new file mode 100644
index 0000000..3cf8ce2
--- /dev/null
+++ b/Gtkmm3/gtk125_backprefs3/res/icons/scalable/status/display_prefs.svg
@@ -0,0 +1,54 @@
+
diff --git a/Gtkmm3/gtk125_backprefs3/res/image_file.svg b/Gtkmm3/gtk125_backprefs3/res/image_file.svg
new file mode 100644
index 0000000..092f227
--- /dev/null
+++ b/Gtkmm3/gtk125_backprefs3/res/image_file.svg
@@ -0,0 +1,6 @@
+
diff --git a/Gtkmm3/gtk125_backprefs3/res/prefs_stack.ui b/Gtkmm3/gtk125_backprefs3/res/prefs_stack.ui
new file mode 100644
index 0000000..6e27a1e
--- /dev/null
+++ b/Gtkmm3/gtk125_backprefs3/res/prefs_stack.ui
@@ -0,0 +1,297 @@
+
+
+
+
+
+
+
+
diff --git a/Gtkmm3/gtk125_backprefs3/src/MyPrefs.cc b/Gtkmm3/gtk125_backprefs3/src/MyPrefs.cc
new file mode 100644
index 0000000..44a1763
--- /dev/null
+++ b/Gtkmm3/gtk125_backprefs3/src/MyPrefs.cc
@@ -0,0 +1,457 @@
+#include "MyPrefs.hh"
+#include "winpe.xpm"
+#include "../Gtk4/img7.xpm"
+#include "image_types.hh"
+#include "cfgfile/cfgfile.hh"
+#include
+#include
+#include
+
+MyPrefs::MyPrefs()
+ : main_box(Gtk::ORIENTATION_VERTICAL, 10),
+ views_box(Gtk::ORIENTATION_HORIZONTAL, 5),
+ btnbox(Gtk::ORIENTATION_HORIZONTAL, 5),
+ width(1024),
+ height(576)
+{
+ /*Step 1: Initalize widget that without Gtk::Builder*/
+
+ // Initalize Window
+ set_title(_("Window Preferences"));
+ set_default_size(800, 450);
+
+ // Initalize Stores
+ folders_store = Gtk::ListStore::create(n_columns);
+ folders_store->set_default_sort_func(sigc::mem_fun(*this, &MyPrefs::sort_func));
+ folders_store->set_sort_column(-1, Gtk::SORT_ASCENDING);
+ folders_view.set_model(folders_store);
+ folder_selection = folders_view.get_selection();
+ folder_selection->signal_changed().connect(sigc::mem_fun(*this, &MyPrefs::folders_view_changed));
+
+ images_store = Gtk::ListStore::create(n_columns);
+ images_store->set_default_sort_func(sigc::mem_fun(*this, &MyPrefs::sort_func));
+ images_store->set_sort_column(-1, Gtk::SORT_ASCENDING);
+ images_view.set_model(images_store);
+ image_selection = images_view.get_selection();
+ image_selection->signal_changed().connect(sigc::mem_fun(*this, &MyPrefs::images_view_changed));
+
+ // Load Pixbufs
+ auto pixbuf = Gdk::Pixbuf::create_from_resource("/org/gtk/daleclack/folder.svg");
+ folder_pixbuf = pixbuf->scale_simple(24, 24, Gdk::INTERP_BILINEAR);
+ pixbuf.reset();
+ pixbuf = Gdk::Pixbuf::create_from_resource("/org/gtk/daleclack/folder-images.svg");
+ image_pixbuf = pixbuf->scale_simple(24, 24, Gdk::INTERP_BILINEAR);
+ pixbuf.reset();
+ pixbuf = Gdk::Pixbuf::create_from_resource("/org/gtk/daleclack/image_file.svg");
+ imagefile_pixbuf = pixbuf->scale_simple(24, 24, Gdk::INTERP_BILINEAR);
+ pixbuf.reset();
+
+ // Add Default Value for folders view
+ auto row = *(folders_store->append());
+ row[n_columns.m_col_path] = "";
+ row[n_columns.m_col_name] = _("Default Backgrounds");
+ row[n_columns.m_col_pixbuf] = folder_pixbuf;
+ row[n_columns.m_col_internal] = true;
+
+ row = *(folders_store->append());
+ row[n_columns.m_col_path] = Glib::get_home_dir();
+ row[n_columns.m_col_name] = _("User's Home");
+ row[n_columns.m_col_pixbuf] = folder_pixbuf;
+ row[n_columns.m_col_internal] = false;
+
+ row = *(folders_store->append());
+ row[n_columns.m_col_path] = Glib::get_user_special_dir(Glib::USER_DIRECTORY_PICTURES);
+ row[n_columns.m_col_name] = _("User's Pictures Directory");
+ row[n_columns.m_col_pixbuf] = image_pixbuf;
+ row[n_columns.m_col_internal] = false;
+
+ // Append Column for the folders view
+ folders_view.append_column(" ", n_columns.m_col_pixbuf);
+ folders_view.append_column(_("Name"), n_columns.m_col_name);
+
+ // Default Value for imags view
+ default_folders_view();
+ images_view.append_column(" ", n_columns.m_col_pixbuf);
+ images_view.append_column(_("Images"), n_columns.m_col_name);
+
+ // Add Views
+ main_box.pack_start(views_box);
+ sw_folders.add(folders_view);
+ views_box.pack_start(sw_folders);
+ sw_images.add(images_view);
+ views_box.pack_start(sw_images);
+
+ // Allow Selection
+ has_selection = true;
+
+ // Add Control Buttons
+ btnadd.set_image_from_icon_name("list-add");
+ btnadd.signal_clicked().connect(sigc::mem_fun(*this, &MyPrefs::btnadd_clicked));
+ btnremove.set_image_from_icon_name("list-remove");
+ btnremove.signal_clicked().connect(sigc::mem_fun(*this, &MyPrefs::btnremove_clicked));
+ btnbox.pack_start(btnadd, Gtk::PACK_SHRINK);
+ btnbox.pack_start(btnremove, Gtk::PACK_SHRINK);
+ main_box.pack_start(btnbox, Gtk::PACK_SHRINK);
+
+ // Add Main Box to window
+ const int margin_value = 15;
+ main_box.set_hexpand();
+ main_box.set_vexpand();
+ main_box.set_margin_top(margin_value);
+ main_box.set_margin_bottom(margin_value);
+ main_box.set_margin_start(margin_value);
+ main_box.set_margin_end(margin_value);
+
+ /*Step 2: Initalize widgets from glade xml file ('.ui' file)*/
+
+ // Get Widgets for multi pages
+ stackbuilder = Gtk::Builder::create_from_resource("/org/gtk/daleclack/prefs_stack.ui");
+ stackbuilder->get_widget("stack_box", stack_box);
+ stackbuilder->get_widget("back_page", back_page);
+ stackbuilder->get_widget("combo_default", combo_default);
+ stackbuilder->get_widget("radio_default", radio_default);
+ stackbuilder->get_widget("radio_custom", radio_custom);
+ stackbuilder->get_widget("spin_width", spin_width);
+ stackbuilder->get_widget("spin_height", spin_height);
+ stackbuilder->get_widget("btnapply", btnapply);
+ stackbuilder->get_widget("btnGet",btnGet);
+ stackbuilder->get_widget("label_size",label_size);
+
+ // Initalize radio buttons
+ radio_default->set_active();
+ radio_default->signal_toggled().connect(sigc::mem_fun(*this, &MyPrefs::radiobutton_toggled));
+ radio_custom->signal_toggled().connect(sigc::mem_fun(*this, &MyPrefs::radiobutton_toggled));
+
+ // Initalize other widgets
+ btnapply->signal_clicked().connect(sigc::mem_fun(*this, &MyPrefs::btnapply_clicked));
+ btnGet->signal_clicked().connect(sigc::mem_fun(*this,&MyPrefs::btnGet_clicked));
+
+ // Initalize Label
+ load_winsize_config();
+ const char * cfgstr = _("Current Config");
+ char * size_str = g_strdup_printf("%s: %d x %d", cfgstr, width, height);
+ label_size->set_label(size_str);
+ g_free(size_str);
+
+ back_page->pack_start(main_box);
+ add(*stack_box);
+ show_all_children();
+}
+
+void MyPrefs::btnadd_clicked()
+{
+ // Create a dialog
+ dialog = Gtk::FileChooserNative::create(_("Add a folder"), *this,
+ Gtk::FILE_CHOOSER_ACTION_SELECT_FOLDER, _("OK"), _("Cancel"));
+
+ dialog->signal_response().connect(sigc::mem_fun(*this, &MyPrefs::dialog_response));
+
+ dialog->show();
+}
+
+void MyPrefs::dialog_response(int response_id)
+{
+ if (response_id == Gtk::RESPONSE_ACCEPT)
+ {
+ // Get File Basename and Path
+ auto file = dialog->get_file();
+ auto basename = file->get_basename();
+ auto filename = file->get_path();
+
+ // Add to list
+ auto row = *(folders_store->append());
+ row[n_columns.m_col_path] = filename;
+ row[n_columns.m_col_name] = basename;
+ row[n_columns.m_col_pixbuf] = folder_pixbuf;
+
+ file.reset();
+ }
+ dialog.reset();
+}
+
+void MyPrefs::btnremove_clicked()
+{
+ // Get the selection and remove the selected item
+ auto iter = folder_selection->get_selected();
+ if (iter)
+ {
+ folders_store->erase(iter);
+ }
+}
+
+void MyPrefs::folders_view_changed()
+{
+ // Get Selected Folder
+ auto row = *(folder_selection->get_selected());
+ if (row[n_columns.m_col_internal])
+ {
+ // The default folder
+ default_folders_view();
+ }
+ else
+ {
+ // User defined folder
+ std::string path = row[n_columns.m_col_path];
+ update_images_view(path);
+ }
+}
+
+void MyPrefs::default_folders_view()
+{
+ // Clear the store
+ images_store->clear();
+
+ // Add Default values
+ auto row = *(images_store->append());
+ row[n_columns.m_col_path] = ":1";
+ row[n_columns.m_col_name] = "winpe.xpm";
+ row[n_columns.m_col_internal] = true;
+ row[n_columns.m_col_pixbuf] = imagefile_pixbuf;
+
+ row = *(images_store->append());
+ row[n_columns.m_col_path] = ":2";
+ row[n_columns.m_col_name] = "img7.xpm";
+ row[n_columns.m_col_internal] = true;
+ row[n_columns.m_col_pixbuf] = imagefile_pixbuf;
+}
+
+int MyPrefs::sort_func(const Gtk::TreeModel::iterator &a, const Gtk::TreeModel::iterator &b)
+{
+ Glib::ustring name_a, name_b;
+
+ // Get file names
+ auto row_a = *(a);
+ auto row_b = *(b);
+ name_a = row_a[n_columns.m_col_name];
+ name_b = row_b[n_columns.m_col_name];
+
+ // Proform sort process
+ if (name_a[0] != '.' && name_b[0] == '.')
+ {
+ return 1;
+ }
+ if (name_a[0] == '.' && name_b[0] != '.')
+ {
+ return -1;
+ }
+ else
+ {
+ return g_utf8_collate(name_a.c_str(), name_b.c_str());
+ }
+}
+
+bool MyPrefs::icasecompare(const std::string &a, const std::string &b)
+{
+ if (a.length() == b.length())
+ {
+ return std::equal(a.begin(), a.end(), b.begin(),
+ [](char a, char b)
+ {
+ return tolower(a) == tolower(b);
+ });
+ }
+ else
+ {
+ return false;
+ }
+}
+
+void MyPrefs::update_images_view(std::string &folder_path)
+{
+ // Unselect everything
+ has_selection = false;
+
+ // Clear the store
+ images_store->clear();
+
+ // Add Files into store
+ try
+ {
+ Glib::Dir dir1(folder_path);
+ bool is_dir, file_valid;
+ Glib::ustring display_name;
+ std::string filename, pathname;
+
+ do
+ {
+ // Get File Name
+ filename = dir1.read_name();
+
+ // Get Path for a file
+ pathname = Glib::build_filename(folder_path, filename);
+ is_dir = Glib::file_test(pathname, Glib::FILE_TEST_IS_DIR);
+ display_name = Glib::filename_to_utf8(filename);
+
+ // Filter the file
+ // Get Pattern of the file
+ file_valid = false;
+ size_t pos = filename.find_last_of('.');
+ if (pos != std::string::npos)
+ {
+ std::string pattern = "*" + filename.substr(pos);
+ for (int i = 0; supported_globs[i] != NULL; i++)
+ {
+ std::string glob = std::string(supported_globs[i]);
+ if (icasecompare(glob, pattern))
+ {
+ file_valid = true;
+ break;
+ }
+ }
+ }
+
+ if (!is_dir && file_valid)
+ {
+ // Add item to store
+ auto row = *(images_store->append());
+ row[n_columns.m_col_path] = pathname;
+ row[n_columns.m_col_name] = display_name;
+ row[n_columns.m_col_internal] = false;
+ row[n_columns.m_col_pixbuf] = imagefile_pixbuf;
+ }
+ } while (filename != "");
+
+ has_selection = true;
+ }
+ catch (Glib::Error &ex)
+ {
+ std::cout << ex.what() << std::endl;
+ }
+}
+
+void MyPrefs::images_view_changed()
+{
+ // Set the background as selected
+ if (has_selection)
+ {
+ auto row = *(image_selection->get_selected());
+ if (row[n_columns.m_col_internal])
+ {
+ path = row[n_columns.m_col_path];
+ switch (path[1])
+ {
+ case '1':
+ set_background_internal(winpe);
+ break;
+ case '2':
+ set_background_internal(img7);
+ break;
+ }
+ }
+ else
+ {
+ path = row[n_columns.m_col_path];
+ set_background_file();
+ }
+ }
+}
+
+void MyPrefs::set_background_internal(const char *const *data)
+{
+ // Set a internal background
+ auto pixbuf = Gdk::Pixbuf::create_from_xpm_data(data);
+ auto sized = pixbuf->scale_simple(width, height, Gdk::INTERP_BILINEAR);
+ gtk_image_set_from_pixbuf(background1->gobj(), sized->gobj());
+ pixbuf.reset();
+ sized.reset();
+ background_internal = true;
+}
+
+void MyPrefs::set_background_file()
+{
+ // Set Background from a file
+ auto pixbuf = Gdk::Pixbuf::create_from_file(path);
+ auto sized = pixbuf->scale_simple(width, height, Gdk::INTERP_BILINEAR);
+ gtk_image_set_from_pixbuf(background1->gobj(), sized->gobj());
+ pixbuf.reset();
+ sized.reset();
+ background_internal = false;
+}
+
+void MyPrefs::update_background_size()
+{}
+
+void MyPrefs::set_background(Gtk::Image *back)
+{
+ background1 = back;
+}
+
+void MyPrefs::radiobutton_toggled()
+{
+ // Change sensitive state of buttons
+ bool mode = radio_default->get_active();
+ combo_default->set_sensitive(mode);
+ spin_height->set_sensitive(!mode);
+ spin_width->set_sensitive(!mode);
+ btnGet->set_sensitive(!mode);
+}
+
+void MyPrefs::btnapply_clicked()
+{
+ // Get Config
+ if (radio_default->get_active())
+ {
+ int mode = combo_default->get_active_row_number();
+ switch (mode)
+ {
+ case 0:
+ width = 640;
+ height = 360;
+ break;
+ case 1:
+ width = 800;
+ height = 576;
+ break;
+ case 2:
+ width = 1024;
+ height = 576;
+ break;
+ case 3:
+ width = 1280;
+ height = 720;
+ break;
+ }
+ }
+ else
+ {
+ width = spin_width->get_value_as_int();
+ height = spin_height->get_value_as_int();
+ }
+
+ // Open the file for configs
+ std::fstream outfile;
+ outfile.open("config", std::ios_base::out);
+ if (outfile.is_open())
+ {
+ outfile << "width=" << width << std::endl;
+ outfile << "height=" << height << std::endl;
+ outfile.close();
+ }
+}
+
+void MyPrefs::btnGet_clicked()
+{
+ //Get Current Window Size
+ width = background1->get_width();
+ height = background1->get_height();
+ spin_width->set_value(width);
+ spin_height->set_value(height);
+}
+
+void MyPrefs::load_winsize_config(){
+ std::string height_str, width_str;
+
+ // Read values from a file
+ if (readCfgFile("config", "width", width_str) && readCfgFile("config", "height", height_str))
+ {
+ height = atoi(height_str.c_str());
+ width = atoi(width_str.c_str());
+ }
+}
+
+void MyPrefs::get_winsize_config(int &width1, int &height1)
+{
+ // Apply Config
+ width1 = width;
+ height1 = height;
+}
diff --git a/Gtkmm3/gtk125_backprefs3/src/MyPrefs.hh b/Gtkmm3/gtk125_backprefs3/src/MyPrefs.hh
new file mode 100644
index 0000000..f9a923d
--- /dev/null
+++ b/Gtkmm3/gtk125_backprefs3/src/MyPrefs.hh
@@ -0,0 +1,80 @@
+#pragma once
+
+#include
+#include
+
+class MyPrefs : public Gtk::Window
+{
+public:
+ MyPrefs();
+ void set_background(Gtk::Image *back);
+ void load_winsize_config();
+ void get_winsize_config(int &width1,int &height1);
+ void update_background_size();
+
+protected:
+ class ModelColumns : public Gtk::TreeModelColumnRecord
+ {
+ public:
+ ModelColumns()
+ {
+ add(m_col_pixbuf);
+ add(m_col_path);
+ add(m_col_name);
+ add(m_col_internal);
+ }
+ Gtk::TreeModelColumn> m_col_pixbuf;
+ Gtk::TreeModelColumn m_col_path;
+ Gtk::TreeModelColumn m_col_name;
+ Gtk::TreeModelColumn m_col_internal;
+ };
+
+ ModelColumns n_columns;
+ Glib::RefPtr folders_store, images_store;
+ Glib::RefPtr folder_selection, image_selection;
+ bool has_selection;
+
+private:
+ // Background widget and properties
+ int width, height;
+ Gtk::Image *background1;
+ std::string path;
+ bool background_internal;
+
+ //Page switcher and another page
+ Glib::RefPtr stackbuilder;
+ Gtk::Box *stack_box, *back_page, *winsize_page;
+ Gtk::RadioButton *radio_default, *radio_custom;
+ Gtk::ComboBoxText *combo_default;
+ Gtk::SpinButton *spin_width, *spin_height;
+ Gtk::Button *btnapply, *btnGet;
+ Gtk::Label *label_size;
+
+ // Child Widgets
+ Gtk::TreeView folders_view, images_view;
+ Gtk::ScrolledWindow sw_folders, sw_images;
+ Gtk::Box main_box, views_box, btnbox;
+ Gtk::Button btnadd, btnremove;
+
+ // Folder Open Dialog
+ Glib::RefPtr folder_pixbuf, image_pixbuf, imagefile_pixbuf;
+ Glib::RefPtr dialog;
+ void dialog_response(int response_id);
+
+ // Sort for ListStore
+ int sort_func(const Gtk::TreeModel::iterator &a, const Gtk::TreeModel::iterator &b);
+ bool icasecompare(const std::string &a, const std::string &b);
+
+ // Signal Handlers
+ void btnadd_clicked();
+ void btnremove_clicked();
+ void folders_view_changed();
+ void images_view_changed();
+ void default_folders_view();
+ void update_images_view(std::string &folder_path);
+ void set_background_internal(const char *const *data);
+ void set_background_file();
+ void radiobutton_toggled();
+ void btnapply_clicked();
+ void btnGet_clicked();
+};
diff --git a/Gtkmm3/gtk125_backprefs3/src/MyWin.cc b/Gtkmm3/gtk125_backprefs3/src/MyWin.cc
new file mode 100644
index 0000000..6e78633
--- /dev/null
+++ b/Gtkmm3/gtk125_backprefs3/src/MyWin.cc
@@ -0,0 +1,44 @@
+#include "MyWin.hh"
+#include "winpe.xpm"
+
+MyWin::MyWin()
+{
+ int width, height;
+
+ // Initalize Window
+ set_icon_name("org.gtk.daleclack");
+ set_title(_("Background Preferences Test"));
+
+ prefs_win.get_winsize_config(width, height);
+
+ // Add Background
+ auto pixbuf = Gdk::Pixbuf::create_from_xpm_data(winpe);
+ auto sized = pixbuf->scale_simple(width, height, Gdk::INTERP_BILINEAR);
+ gtk_image_set_from_pixbuf(m_back.gobj(), sized->gobj());
+ pixbuf.reset();
+ sized.reset();
+
+ // Button for background
+ btnback.set_label(_("Window Preferences"));
+ btnback.set_halign(Gtk::ALIGN_CENTER);
+ btnback.set_valign(Gtk::ALIGN_CENTER);
+ btnback.set_relief(Gtk::RELIEF_NONE);
+ m_overlay.add_overlay(btnback);
+ btnback.signal_clicked().connect(sigc::mem_fun(*this, &MyWin::btnback_clicked));
+
+ // Add widgets
+ m_back.set_hexpand();
+ m_back.set_vexpand();
+ m_overlay.add(m_back);
+ add(m_overlay);
+
+ // Initalize MyPrefs
+ prefs_win.set_background(&m_back);
+
+ show_all_children();
+}
+
+void MyWin::btnback_clicked()
+{
+ prefs_win.show_all();
+}
diff --git a/Gtkmm3/gtk125_backprefs3/src/MyWin.hh b/Gtkmm3/gtk125_backprefs3/src/MyWin.hh
new file mode 100644
index 0000000..f989f65
--- /dev/null
+++ b/Gtkmm3/gtk125_backprefs3/src/MyWin.hh
@@ -0,0 +1,23 @@
+#pragma once
+
+#include
+#include
+#include "MyPrefs.hh"
+
+class MyWin : public Gtk::Window
+{
+public:
+ MyWin();
+
+private:
+ //Child Widgets
+ Gtk::Overlay m_overlay;
+ Gtk::Image m_back;
+ Gtk::Button btnback;
+
+ //Background Preferences
+ MyPrefs prefs_win;
+
+ //Signal Handlers
+ void btnback_clicked();
+};
diff --git a/Gtkmm3/gtk125_backprefs3/src/main.cc b/Gtkmm3/gtk125_backprefs3/src/main.cc
new file mode 100644
index 0000000..8184648
--- /dev/null
+++ b/Gtkmm3/gtk125_backprefs3/src/main.cc
@@ -0,0 +1,13 @@
+#include "MyWin.hh"
+
+int main(int argc,char ** argv){
+ // Initalize gettext
+ // bindtextdomain(GETTEXT_PACKAGE, PROGRAMNAME_LOCALEDIR);
+ // bind_textdomain_codeset(GETTEXT_PACKAGE, "UTF-8");
+ // textdomain(GETTEXT_PACKAGE);
+
+ // Create application and run
+ auto app = Gtk::Application::create(argc,argv,"org.gtk.daleclack");
+ MyWin window;
+ return app->run(window);
+}
diff --git a/Rust_tests/rust_cfgfile/.vscode/launch.json b/Rust_tests/rust_cfgfile/.vscode/launch.json
new file mode 100644
index 0000000..cdd58f5
--- /dev/null
+++ b/Rust_tests/rust_cfgfile/.vscode/launch.json
@@ -0,0 +1,47 @@
+{
+ // Use IntelliSense to learn about possible attributes.
+ // Hover to view descriptions of existing attributes.
+ // For more information, visit: https://go.microsoft.com/fwlink/?linkid=830387
+ "version": "0.2.0",
+ "configurations": [
+ {
+ "type": "lldb",
+ "request": "launch",
+ "name": "Debug executable 'rust_cfgfile'",
+ "cargo": {
+ "args": [
+ "build",
+ "--bin=rust_cfgfile",
+ "--package=rust_cfgfile",
+ "--release"
+ ],
+ "filter": {
+ "name": "rust_cfgfile",
+ "kind": "bin"
+ }
+ },
+ "args": [],
+ "cwd": "${workspaceFolder}"
+ },
+ {
+ "type": "lldb",
+ "request": "launch",
+ "name": "Debug unit tests in executable 'rust_cfgfile'",
+ "cargo": {
+ "args": [
+ "test",
+ "--no-run",
+ "--bin=rust_cfgfile",
+ "--package=rust_cfgfile",
+ "--release"
+ ],
+ "filter": {
+ "name": "rust_cfgfile",
+ "kind": "bin"
+ }
+ },
+ "args": [],
+ "cwd": "${workspaceFolder}"
+ }
+ ]
+}
\ No newline at end of file
diff --git a/Rust_tests/rust_cfgfile/Cargo.lock b/Rust_tests/rust_cfgfile/Cargo.lock
new file mode 100644
index 0000000..d749001
--- /dev/null
+++ b/Rust_tests/rust_cfgfile/Cargo.lock
@@ -0,0 +1,7 @@
+# This file is automatically @generated by Cargo.
+# It is not intended for manual editing.
+version = 3
+
+[[package]]
+name = "rust_cfgfile"
+version = "0.1.0"
diff --git a/Rust_tests/rust_cfgfile/Cargo.toml b/Rust_tests/rust_cfgfile/Cargo.toml
new file mode 100644
index 0000000..356f63a
--- /dev/null
+++ b/Rust_tests/rust_cfgfile/Cargo.toml
@@ -0,0 +1,8 @@
+[package]
+name = "rust_cfgfile"
+version = "0.1.0"
+edition = "2021"
+
+# See more keys and their definitions at https://doc.rust-lang.org/cargo/reference/manifest.html
+
+[dependencies]
diff --git a/Rust_tests/rust_cfgfile/src/main.rs b/Rust_tests/rust_cfgfile/src/main.rs
new file mode 100644
index 0000000..1b31126
--- /dev/null
+++ b/Rust_tests/rust_cfgfile/src/main.rs
@@ -0,0 +1,5 @@
+use std::fs;
+
+fn main() {
+ println!("Hello, world!");
+}
diff --git a/gtk4-rs/gtk-rs-menus/Cargo.lock b/gtk4-rs/gtk-rs-menus/Cargo.lock
index aa09737..eb227ce 100644
--- a/gtk4-rs/gtk-rs-menus/Cargo.lock
+++ b/gtk4-rs/gtk-rs-menus/Cargo.lock
@@ -22,9 +22,9 @@ checksum = "bef38d45163c2f1dde094a7dfd33ccf595c92905c8f8f4fdc18d06fb1037718a"
[[package]]
name = "cairo-rs"
-version = "0.14.9"
+version = "0.15.6"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "33b5725979db0c586d98abad2193cdb612dd40ef95cd26bd99851bf93b3cb482"
+checksum = "e8b14c80d8d1a02fa6d914b9d1afeeca9bc34257f8300d9696e1e331ae114223"
dependencies = [
"bitflags",
"cairo-sys-rs",
@@ -35,39 +35,24 @@ dependencies = [
[[package]]
name = "cairo-sys-rs"
-version = "0.14.9"
+version = "0.15.1"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "b448b876970834fda82ba3aeaccadbd760206b75388fc5c1b02f1e343b697570"
+checksum = "3c55d429bef56ac9172d25fecb85dc8068307d17acd74b377866b7a1ef25d3c8"
dependencies = [
"glib-sys",
"libc",
- "system-deps 3.2.0",
+ "system-deps",
]
[[package]]
name = "cfg-expr"
-version = "0.8.1"
+version = "0.10.1"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "b412e83326147c2bb881f8b40edfbf9905b9b8abaebd0e47ca190ba62fda8f0e"
+checksum = "295b6eb918a60a25fec0b23a5e633e74fddbaf7bb04411e65a10c366aca4b5cd"
dependencies = [
"smallvec",
]
-[[package]]
-name = "cfg-expr"
-version = "0.9.0"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "edae0b9625d1fce32f7d64b71784d9b1bf8469ec1a9c417e44aaf16a9cbd7571"
-dependencies = [
- "smallvec",
-]
-
-[[package]]
-name = "either"
-version = "1.6.1"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "e78d4f1cc4ae33bbfc157ed5d5a5ef3bc29227303d595861deb238fcec4e9457"
-
[[package]]
name = "field-offset"
version = "0.3.4"
@@ -131,10 +116,11 @@ dependencies = [
[[package]]
name = "gdk-pixbuf"
-version = "0.14.0"
+version = "0.15.6"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "534192cb8f01daeb8fab2c8d4baa8f9aae5b7a39130525779f5c2608e235b10f"
+checksum = "d8750501d75f318c2ec0314701bc8403901303210def80bafd13f6b6059a3f45"
dependencies = [
+ "bitflags",
"gdk-pixbuf-sys",
"gio",
"glib",
@@ -143,22 +129,22 @@ dependencies = [
[[package]]
name = "gdk-pixbuf-sys"
-version = "0.14.0"
+version = "0.15.1"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "f097c0704201fbc8f69c1762dc58c6947c8bb188b8ed0bc7e65259f1894fe590"
+checksum = "413424d9818621fa3cfc8a3a915cdb89a7c3c507d56761b4ec83a9a98e587171"
dependencies = [
"gio-sys",
"glib-sys",
"gobject-sys",
"libc",
- "system-deps 3.2.0",
+ "system-deps",
]
[[package]]
name = "gdk4"
-version = "0.3.1"
+version = "0.4.6"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "f97a162c17214d1bf981af3f683156a0b1667dd1927057c4f0a68513251ecf0f"
+checksum = "d9df40006277ff44538fe758400fc671146f6f2665978b6b57d2408db3c2becf"
dependencies = [
"bitflags",
"cairo-rs",
@@ -172,26 +158,26 @@ dependencies = [
[[package]]
name = "gdk4-sys"
-version = "0.3.1"
+version = "0.4.2"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "9498f4e06969fb96a4e4234dfe1d308a3ac6b120b3c6d93e3ec5c77fe88bc6d5"
+checksum = "48a39e34abe35ee2cf54a1e29dd983accecd113ad30bdead5050418fa92f2a1b"
dependencies = [
"cairo-sys-rs",
"gdk-pixbuf-sys",
"gio-sys",
"glib-sys",
"gobject-sys",
- "graphene-sys",
"libc",
"pango-sys",
- "system-deps 5.0.0",
+ "pkg-config",
+ "system-deps",
]
[[package]]
name = "gio"
-version = "0.14.8"
+version = "0.15.6"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "711c3632b3ebd095578a9c091418d10fed492da9443f58ebc8f45efbeb215cb0"
+checksum = "96efd8a1c00d890f6b45671916e165b5e43ccec61957d443aff6d7e44f62d348"
dependencies = [
"bitflags",
"futures-channel",
@@ -206,22 +192,22 @@ dependencies = [
[[package]]
name = "gio-sys"
-version = "0.14.0"
+version = "0.15.6"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "c0a41df66e57fcc287c4bcf74fc26b884f31901ea9792ec75607289b456f48fa"
+checksum = "1d0fa5052773f5a56b8ae47dab09d040f5d9ce1311f4f99006e16e9a08269296"
dependencies = [
"glib-sys",
"gobject-sys",
"libc",
- "system-deps 3.2.0",
+ "system-deps",
"winapi",
]
[[package]]
name = "glib"
-version = "0.14.8"
+version = "0.15.6"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "7c515f1e62bf151ef6635f528d05b02c11506de986e43b34a5c920ef0b3796a4"
+checksum = "aa570813c504bdf7539a9400180c2dd4b789a819556fb86da7226d7d1b037b49"
dependencies = [
"bitflags",
"futures-channel",
@@ -234,13 +220,14 @@ dependencies = [
"libc",
"once_cell",
"smallvec",
+ "thiserror",
]
[[package]]
name = "glib-macros"
-version = "0.14.1"
+version = "0.15.6"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "2aad66361f66796bfc73f530c51ef123970eb895ffba991a234fcf7bea89e518"
+checksum = "41bfd8d227dead0829ac142454e97531b93f576d0805d779c42bfd799c65c572"
dependencies = [
"anyhow",
"heck",
@@ -253,30 +240,30 @@ dependencies = [
[[package]]
name = "glib-sys"
-version = "0.14.0"
+version = "0.15.6"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "1c1d60554a212445e2a858e42a0e48cece1bd57b311a19a9468f70376cf554ae"
+checksum = "f4366377bd56697de8aaee24e673c575d2694d72e7756324ded2b0428829a7b8"
dependencies = [
"libc",
- "system-deps 3.2.0",
+ "system-deps",
]
[[package]]
name = "gobject-sys"
-version = "0.14.0"
+version = "0.15.5"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "aa92cae29759dae34ab5921d73fff5ad54b3d794ab842c117e36cafc7994c3f5"
+checksum = "df6859463843c20cf3837e3a9069b6ab2051aeeadf4c899d33344f4aea83189a"
dependencies = [
"glib-sys",
"libc",
- "system-deps 3.2.0",
+ "system-deps",
]
[[package]]
name = "graphene-rs"
-version = "0.14.8"
+version = "0.15.1"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "e3380f132530ef9eb9e0a2bac180e30390aa5e49892d20294f822a974117a563"
+checksum = "7c54f9fbbeefdb62c99f892dfca35f83991e2cb5b46a8dc2a715e58612f85570"
dependencies = [
"glib",
"graphene-sys",
@@ -285,21 +272,21 @@ dependencies = [
[[package]]
name = "graphene-sys"
-version = "0.14.8"
+version = "0.15.1"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "9a9ac7450b3aa80792513a3c029920a2ede419de13fb5169a4e51b07a5685332"
+checksum = "03f311acb023cf7af5537f35de028e03706136eead7f25a31e8fd26f5011e0b3"
dependencies = [
"glib-sys",
"libc",
"pkg-config",
- "system-deps 3.2.0",
+ "system-deps",
]
[[package]]
name = "gsk4"
-version = "0.3.1"
+version = "0.4.6"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "eff59ca46c4fc5087fd7a0c3770a71ea4b6e94f8c24c12e2c2e8538f9f6fd764"
+checksum = "1bf63d454e2f75abd92ee6de0ac9fc5aaf1018cd9c458aaf9de296c5cbab6bb9"
dependencies = [
"bitflags",
"cairo-rs",
@@ -313,9 +300,9 @@ dependencies = [
[[package]]
name = "gsk4-sys"
-version = "0.3.1"
+version = "0.4.2"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "13aa53ce70234da02f9954339d988d5ab853d746a8f47a4ae17735ff873545b5"
+checksum = "e31d21d7ce02ba261bb24c50c4ab238a10b41a2c97c32afffae29471b7cca69b"
dependencies = [
"cairo-sys-rs",
"gdk4-sys",
@@ -324,7 +311,7 @@ dependencies = [
"graphene-sys",
"libc",
"pango-sys",
- "system-deps 5.0.0",
+ "system-deps",
]
[[package]]
@@ -336,9 +323,9 @@ dependencies = [
[[package]]
name = "gtk4"
-version = "0.3.1"
+version = "0.4.6"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "58a04f421d1485ba4739e723199f5828bca05ab4e622ed39a96a342b6b1a6a3d"
+checksum = "9e841556e3fe55d8a43ada76b7b08a5f65570bbdfe3b8f72c333053b8832c626"
dependencies = [
"bitflags",
"cairo-rs",
@@ -359,13 +346,11 @@ dependencies = [
[[package]]
name = "gtk4-macros"
-version = "0.3.1"
+version = "0.4.3"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "5068d4354af02454f44687adc613100aa98ae11e273cdcac84f89dc08be2b4a1"
+checksum = "573db42bb64973a4d5f718b73caa7204285a1a665308a23b11723d0ee56ec305"
dependencies = [
"anyhow",
- "heck",
- "itertools",
"proc-macro-crate",
"proc-macro-error",
"proc-macro2",
@@ -375,9 +360,9 @@ dependencies = [
[[package]]
name = "gtk4-sys"
-version = "0.3.1"
+version = "0.4.5"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "e20a64c8f0ddcff8902ff04c130747f2fb7834a43530f75d03d6c71335733b49"
+checksum = "c47c075e8f795c38f6e9a47b51a73eab77b325f83c0154979ed4d4245c36490d"
dependencies = [
"cairo-sys-rs",
"gdk-pixbuf-sys",
@@ -389,26 +374,14 @@ dependencies = [
"gsk4-sys",
"libc",
"pango-sys",
- "system-deps 5.0.0",
+ "system-deps",
]
[[package]]
name = "heck"
-version = "0.3.3"
+version = "0.4.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "6d621efb26863f0e9924c6ac577e8275e5e6b77455db64ffa6c65c904e9e132c"
-dependencies = [
- "unicode-segmentation",
-]
-
-[[package]]
-name = "itertools"
-version = "0.10.1"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "69ddb889f9d0d08a67338271fa9b62996bc788c7796a5c18cf057420aaed5eaf"
-dependencies = [
- "either",
-]
+checksum = "2540771e65fc8cb83cd6e8a237f70c319bd5c29f78ed1084ba5d50eeac86f7f9"
[[package]]
name = "libc"
@@ -433,9 +406,9 @@ checksum = "692fcb63b64b1758029e0a96ee63e049ce8c5948587f2f7208df04625e5f6b56"
[[package]]
name = "pango"
-version = "0.14.8"
+version = "0.15.6"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "546fd59801e5ca735af82839007edd226fe7d3bb06433ec48072be4439c28581"
+checksum = "78c7420fc01a390ec200da7395b64d705f5d82fe03e5d0708aee422c46538be7"
dependencies = [
"bitflags",
"glib",
@@ -446,14 +419,14 @@ dependencies = [
[[package]]
name = "pango-sys"
-version = "0.14.0"
+version = "0.15.1"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "2367099ca5e761546ba1d501955079f097caa186bb53ce0f718dca99ac1942fe"
+checksum = "7022c2fb88cd2d9d55e1a708a8c53a3ae8678234c4a54bf623400aeb7f31fac2"
dependencies = [
"glib-sys",
"gobject-sys",
"libc",
- "system-deps 3.2.0",
+ "system-deps",
]
[[package]]
@@ -479,9 +452,9 @@ checksum = "8b870d8c151b6f2fb93e84a13146138f05d02ed11c7e7c54f8826aaaf7c9f184"
[[package]]
name = "pkg-config"
-version = "0.3.22"
+version = "0.3.24"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "12295df4f294471248581bc09bef3c38a5e46f1e36d6a37353621a0c6c357e1f"
+checksum = "58893f751c9b0412871a09abd62ecd2a00298c6c83befa223ef98c52aef40cbe"
[[package]]
name = "proc-macro-crate"
@@ -580,24 +553,6 @@ version = "1.7.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "1ecab6c735a6bb4139c0caafd0cc3635748bbb3acf4550e8138122099251f309"
-[[package]]
-name = "strum"
-version = "0.21.0"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "aaf86bbcfd1fa9670b7a129f64fc0c9fcbbfe4f1bc4210e9e98fe71ffc12cde2"
-
-[[package]]
-name = "strum_macros"
-version = "0.21.1"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "d06aaeeee809dbc59eb4556183dd927df67db1540de5be8d3ec0b6636358a5ec"
-dependencies = [
- "heck",
- "proc-macro2",
- "quote",
- "syn",
-]
-
[[package]]
name = "syn"
version = "1.0.82"
@@ -611,29 +566,11 @@ dependencies = [
[[package]]
name = "system-deps"
-version = "3.2.0"
+version = "6.0.2"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "480c269f870722b3b08d2f13053ce0c2ab722839f472863c3e2d61ff3a1c2fa6"
+checksum = "a1a45a1c4c9015217e12347f2a411b57ce2c4fc543913b14b6fe40483328e709"
dependencies = [
- "anyhow",
- "cfg-expr 0.8.1",
- "heck",
- "itertools",
- "pkg-config",
- "strum",
- "strum_macros",
- "thiserror",
- "toml",
- "version-compare",
-]
-
-[[package]]
-name = "system-deps"
-version = "5.0.0"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "18db855554db7bd0e73e06cf7ba3df39f97812cb11d3f75e71c39bf45171797e"
-dependencies = [
- "cfg-expr 0.9.0",
+ "cfg-expr",
"heck",
"pkg-config",
"toml",
@@ -675,12 +612,6 @@ version = "0.1.3"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "56dee185309b50d1f11bfedef0fe6d036842e3fb77413abef29f8f8d1c5d4c1c"
-[[package]]
-name = "unicode-segmentation"
-version = "1.8.0"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "8895849a949e7845e06bd6dc1aa51731a103c42707010a5b591c0038fb73385b"
-
[[package]]
name = "unicode-xid"
version = "0.2.2"
@@ -689,9 +620,9 @@ checksum = "8ccb82d61f80a663efe1f787a51b16b5a51e3314d6ac365b08639f52387b33f3"
[[package]]
name = "version-compare"
-version = "0.0.11"
+version = "0.1.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "1c18c859eead79d8b95d09e4678566e8d70105c4e7b251f707a03df32442661b"
+checksum = "fe88247b92c1df6b6de80ddc290f3976dbdf2f5f5d3fd049a9fb598c6dd5ca73"
[[package]]
name = "version_check"