Update MyPrefs

This commit is contained in:
daleclack 2023-05-17 13:38:11 +08:00
parent 67d38d3cb6
commit 9184ebcd3e
9 changed files with 137 additions and 116 deletions

View File

@ -9,11 +9,13 @@
(1,1,"GtkWindow",None,None,None,None,None,None),
(1,2,"GtkButton",None,1,None,None,None,None),
(1,3,"GtkImage","image1",None,None,None,None,None),
(2,1,"GtkWindow",None,None,None,None,None,None)
(2,1,"GtkWindow",None,None,None,None,None,None),
(2,2,"GtkDropDown",None,1,None,None,None,None)
</object>
<object_property>
(1,2,"GtkButton","child","3",None,None,None,None,None),
(1,3,"GtkImage","icon-name","org.gtk.Demo4",None,None,None,None,None),
(1,3,"GtkImage","pixel-size","48",None,None,None,None,None)
(1,3,"GtkImage","pixel-size","48",None,None,None,None,None),
(2,2,"GtkDropDown","selected","4294967292",None,None,None,None,None)
</object_property>
</cambalache-project>

View File

@ -13,6 +13,15 @@
<property name="step-increment">1</property>
<property name="page-increment">10</property>
</object>
<object class="GtkStringList" id="sizes_list">
<items>
<item translatable="yes">640x360</item>
<item translatable="yes">800x450</item>
<item translatable="yes">1024x576</item>
<item translatable="yes">1280x720</item>
<item translatable="yes">1366x768</item>
</items>
</object>
<object class="GtkBox" id="stack_box">
<property name="hexpand">1</property>
<property name="vexpand">1</property>
@ -74,15 +83,7 @@
<property name="row-spacing">5</property>
<property name="column-spacing">5</property>
<child>
<object class="GtkComboBoxText" id="combo_default">
<property name="active">2</property>
<items>
<item translatable="yes">640x360</item>
<item translatable="yes">800x450</item>
<item translatable="yes">1024x576</item>
<item translatable="yes">1280x720</item>
<item translatable="yes">1366x768</item>
</items>
<object class="GtkBox" id="combo_box">
<layout>
<property name="column">1</property>
<property name="row">1</property>
@ -180,11 +181,8 @@
<property name="hexpand">1</property>
<property name="vexpand">1</property>
<child>
<object class="GtkButton" id="btnapply">
<property name="label" translatable="1">Apply</property>
<property name="focusable">1</property>
<property name="receives-default">1</property>
<property name="halign">end</property>
<object class="GtkLabel" id="label_size">
<property name="label" translatable="1">Current Config: </property>
</object>
</child>
<child>
@ -196,8 +194,11 @@
</object>
</child>
<child>
<object class="GtkLabel" id="label_size">
<property name="label" translatable="1">Current Config: </property>
<object class="GtkButton" id="btnapply">
<property name="label" translatable="1">Apply</property>
<property name="focusable">1</property>
<property name="receives-default">1</property>
<property name="halign">end</property>
</object>
</child>
</object>
@ -332,6 +333,12 @@
<object class="GtkBox">
<property name="hexpand">1</property>
<property name="vexpand">1</property>
<child>
<object class="GtkLabel">
<property name="label" translatable="1"> </property>
<property name="hexpand">1</property>
</object>
</child>
<child>
<object class="GtkButton" id="btnapply1">
<property name="label" translatable="1">Apply</property>

View File

@ -14,14 +14,14 @@ MyStack::MyStack()
btnlogin->signal_clicked().connect(sigc::mem_fun(*this, &MyStack::btnlogin_clicked));
}
void MyStack::mystack_init(Gtk::Window *window, Gtk::Image *m_back)
void MyStack::mystack_init(Gtk::Window *window, Gtk::Picture *m_back)
{
main_dock->mydock_init(window, m_back);
}
void MyStack::show_prefs()
{
// main_dock->btnset_clicked();
main_dock->btnset_clicked();
}
void MyStack::logout()

View File

@ -8,7 +8,7 @@ class MyStack
public:
MyStack();
void logout();
void mystack_init(Gtk::Window *window, Gtk::Image *m_back);
void mystack_init(Gtk::Window *window, Gtk::Picture *m_back);
void show_prefs();
void set_mydock_mode(DockMode mode);

View File

@ -9,7 +9,7 @@ public:
private:
//Child widgets
Gtk::Overlay m_overlay;
Gtk::Image m_background;
Gtk::Picture m_background;
Gtk::Box menubox;
Gtk::PopoverMenu context_menu;

View File

@ -76,9 +76,9 @@ MyDock::MyDock(BaseObjectType *cobject, const Glib::RefPtr<Gtk::Builder> &ref_Gl
last 1 or 2 signals for the window
*/
// btnset->signal_clicked().connect(sigc::mem_fun(*this, &MyDock::btnset_clicked));
// padset->signal_clicked().connect(sigc::mem_fun(*this, &MyDock::padset_clicked));
// prefs_win.signal_delete_event().connect(sigc::mem_fun(*this, &MyDock::prefs_win_closed));
btnset->signal_clicked().connect(sigc::mem_fun(*this, &MyDock::btnset_clicked));
padset->signal_clicked().connect(sigc::mem_fun(*this, &MyDock::padset_clicked));
prefs_win.signal_close_request().connect(sigc::mem_fun(*this, &MyDock::prefs_win_closed), true);
// btndraw->signal_clicked().connect(sigc::mem_fun(*this, &MyDock::btndraw_clicked));
// paddraw->signal_clicked().connect(sigc::mem_fun(*this, &MyDock::paddraw_clicked));
@ -225,11 +225,11 @@ void MyDock::btnlaunch_clicked()
}
}
void MyDock::mydock_init(Gtk::Window *window, Gtk::Image *background1)
void MyDock::mydock_init(Gtk::Window *window, Gtk::Picture *background1)
{
// Initalize Preference window
// prefs_win.set_background(background1);
// prefs_win.set_transient_for(*window);
prefs_win.set_background(background1);
prefs_win.set_transient_for(*window);
parent_win = window;
}
@ -280,28 +280,28 @@ void MyDock::padnote_clicked()
btnlaunch_clicked();
}
// bool MyDock::prefs_win_closed(GdkEventAny *event)
// {
// // Handle the "closed" signal of preference window
bool MyDock::prefs_win_closed()
{
// Handle the "closed" signal of preference window
// btnset->set_image_from_icon_name("my_prefs", Gtk::ICON_SIZE_DIALOG);
// prefs_win.hide();
// return true;
// }
prefs_win.set_visible(false);
return true;
}
// void MyDock::btnset_clicked()
// {
// // Show settings window (preferences)
void MyDock::btnset_clicked()
{
// Show settings window (preferences)
// btnset->set_image_from_icon_name("my_prefs_running", Gtk::ICON_SIZE_DIALOG);
// window_ctrl(prefs_win);
// }
window_ctrl(prefs_win);
}
// void MyDock::padset_clicked()
// {
// // Function for button on launchpad
void MyDock::padset_clicked()
{
// Function for button on launchpad
// btnset->set_image_from_icon_name("my_prefs_running", Gtk::ICON_SIZE_DIALOG);
// window_ctrl(prefs_win, false);
// btnlaunch_clicked();
// }
window_ctrl(prefs_win, false);
btnlaunch_clicked();
}
// // Signal Handlers for drawing app window
@ -511,43 +511,44 @@ void MyDock::padnote_clicked()
// btnlaunch_clicked();
// }
// void MyDock::window_ctrl(Gtk::Window &window, bool on_dock)
// {
// // Get the GdkWindow object to get the state of a window
// auto gdk_win = window.get_window();
// if (gdk_win)
// {
// /*
// The State of GdkWindow (GdkSurface for Gtk4)
// Gdk::WINDOW_STATE_WITHDRAWN: The window is not shown
// Gdk::WINDOW_STATE_ICONIFIED: The window is minimized
// the default mode for first launch
// */
// auto state = gdk_win->get_state();
// switch (state)
// {
// case Gdk::WINDOW_STATE_WITHDRAWN:
void MyDock::window_ctrl(Gtk::Window &window, bool on_dock)
{
// Get the GdkWindow object to get the state of a window
auto gdk_win = window.get_surface();
if (gdk_win)
{
/*
The State of GdkWindow (GdkSurface for Gtk4)
Gdk::Toplevel::State::BELOW: The window is below other windows
Gdk::Toplevel::State::MINIMIZED: The window is minimized
the default mode for first launch
*/
auto toplevel = Glib::wrap(GDK_TOPLEVEL(gdk_win->gobj()));
auto state = toplevel->get_state();
switch (state)
{
// case Gdk::Toplevel::State::BELOW:
// window.present();
// break;
// case Gdk::WINDOW_STATE_ICONIFIED:
// window.set_transient_for(*parent_win);
// window.deiconify();
// break;
// default:
// if (on_dock)
// {
// window.unset_transient_for();
// window.iconify();
// break;
// }
// }
// }
// else
// {
// window.set_transient_for(*parent_win);
// window.present();
// }
// }
case Gdk::Toplevel::State::MINIMIZED:
window.set_transient_for(*parent_win);
window.unminimize();
break;
default:
if (on_dock)
{
window.unset_transient_for();
window.minimize();
break;
}
}
}
else
{
window.set_transient_for(*parent_win);
window.present();
}
}
MyDock *MyDock::create(DockMode mode)
{

View File

@ -19,7 +19,7 @@ public:
MyDock(BaseObjectType *cobject, const Glib::RefPtr<Gtk::Builder> &ref_Glade);
static MyDock *create(DockMode mode);
void btnset_clicked();
void mydock_init(Gtk::Window *window, Gtk::Image *background1);
void mydock_init(Gtk::Window *window, Gtk::Picture *background1);
// void set_dock_mode(DockMode mode);
private:
@ -41,10 +41,10 @@ private:
*padimage, *padnote, *padedit, *padvlc, *padvlc_win32, *padrun, *padgame24, *padmine;
Gtk::Label label1;
// // Window Preferences
// MyPrefs prefs_win;
// bool prefs_win_closed(GdkEventAny *event);
// void padset_clicked();
// Window Preferences
MyPrefs prefs_win;
bool prefs_win_closed();
void padset_clicked();
// // Drawing Window
// Drawing draw_app;
@ -101,8 +101,9 @@ private:
// // A Simple Runner
// GtkRunner runner1;
// // Window Control
// void window_ctrl(Gtk::Window &window, bool on_dock = true);
// Window Control
bool first_launch;
void window_ctrl(Gtk::Window &window, bool on_dock = true);
// Other
Gtk::Window *parent_win;

View File

@ -124,21 +124,27 @@ MyPrefs::MyPrefs()
// 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);
stackbuilder->get_widget("mode_check", mode_check);
stackbuilder->get_widget("radio_left", radio_left);
stackbuilder->get_widget("radio_right", radio_right);
stackbuilder->get_widget("radio_bottom", radio_bottom);
stackbuilder->get_widget("btnapply1", btnapply1);
stack_box = stackbuilder->get_widget<Gtk::Box>("stack_box");
back_page = stackbuilder->get_widget<Gtk::Box>("back_page");
combo_box = stackbuilder->get_widget<Gtk::Box>("combo_box");
radio_default = stackbuilder->get_widget<Gtk::CheckButton>("radio_default");
radio_custom = stackbuilder->get_widget<Gtk::CheckButton>("radio_custom");
spin_width = stackbuilder->get_widget<Gtk::SpinButton>("spin_width");
spin_height = stackbuilder->get_widget<Gtk::SpinButton>("spin_height");
btnapply = stackbuilder->get_widget<Gtk::Button>("btnapply");
btnGet = stackbuilder->get_widget<Gtk::Button>("btnGet");
label_size = stackbuilder->get_widget<Gtk::Label>("label_size");
mode_check = stackbuilder->get_widget<Gtk::CheckButton>("mode_check");
radio_left = stackbuilder->get_widget<Gtk::CheckButton>("radio_left");
radio_right = stackbuilder->get_widget<Gtk::CheckButton>("radio_right");
radio_bottom = stackbuilder->get_widget<Gtk::CheckButton>("radio_bottom");
btnapply1 = stackbuilder->get_widget<Gtk::Button>("btnapply1");
// Create Dropdown selecter
sizes_list = stackbuilder->get_object<Gtk::StringList>("sizes_list");
combo_default.set_model(sizes_list);
combo_default.set_selected(2);
combo_box->append(combo_default);
// Initalize radio buttons
radio_default->set_active();
@ -286,6 +292,7 @@ int MyPrefs::sort_func(const Gtk::TreeModel::iterator &a, const Gtk::TreeModel::
// {
// return g_utf8_collate(name_a.c_str(), name_b.c_str());
// }
return -1;
}
bool MyPrefs::icasecompare(const std::string &a, const std::string &b)
@ -402,7 +409,8 @@ 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::InterpType::BILINEAR);
gtk_image_set_from_pixbuf(background1->gobj(), sized->gobj());
// gtk_image_set_from_pixbuf(background1->gobj(), sized->gobj());
background1->set_pixbuf(sized);
pixbuf.reset();
sized.reset();
background_internal = true;
@ -414,7 +422,8 @@ void MyPrefs::set_background_file()
try{
auto pixbuf = Gdk::Pixbuf::create_from_file(path);
auto sized = pixbuf->scale_simple(width, height, Gdk::InterpType::BILINEAR);
gtk_image_set_from_pixbuf(background1->gobj(), sized->gobj());
// gtk_image_set_from_pixbuf(background1->gobj(), sized->gobj());
background1->set_pixbuf(sized);
pixbuf.reset();
sized.reset();
background_internal = false;
@ -429,7 +438,7 @@ void MyPrefs::update_background_size()
{
}
void MyPrefs::set_background(Gtk::Image *back)
void MyPrefs::set_background(Gtk::Picture *back)
{
// Link background widget to the class
background1 = back;
@ -455,7 +464,7 @@ void MyPrefs::radiobutton_toggled()
{
// Change sensitive state of buttons
bool mode = radio_default->get_active();
combo_default->set_sensitive(mode);
combo_default.set_sensitive(mode);
spin_height->set_sensitive(!mode);
spin_width->set_sensitive(!mode);
btnGet->set_sensitive(!mode);
@ -516,7 +525,7 @@ void MyPrefs::btnapply_clicked()
// Get Config
if (radio_default->get_active())
{
int mode = combo_default->get_active_row_number();
int mode = combo_default.get_selected();
switch (mode)
{
case 0:

View File

@ -25,7 +25,7 @@ class MyPrefs : public Gtk::Window
{
public:
MyPrefs();
void set_background(Gtk::Image *back);
void set_background(Gtk::Picture *back);
void load_winsize_config();
void update_background_size();
DockPos get_dock_pos();
@ -39,7 +39,7 @@ private:
int width, height; // Window size
bool panel_mode; // dock or panel mode
DockPos dock_pos; // position of dock
Gtk::Image *background1; // background widget from main window
Gtk::Picture *background1; // background widget from main window
std::string path; // Current background path
bool background_internal; // tag for background internal
@ -48,9 +48,10 @@ private:
// Page switcher and another page
Glib::RefPtr<Gtk::Builder> stackbuilder;
Gtk::Box *stack_box, *back_page, *winsize_page;
Glib::RefPtr<Gtk::StringList> sizes_list;
Gtk::Box *stack_box, *back_page, *winsize_page, *combo_box;
Gtk::CheckButton *radio_default, *radio_custom;
Gtk::ComboBoxText *combo_default;
Gtk::DropDown combo_default;
Gtk::SpinButton *spin_width, *spin_height;
Gtk::Button *btnapply, *btnGet;
Gtk::Label *label_size;