testing-repository/Gtkmm3/gtk108_settings/src/MyPrefs.cc

100 lines
3.2 KiB
C++
Raw Normal View History

2021-09-11 11:18:23 +08:00
#include "MyPrefs.hh"
2021-09-12 13:56:51 +08:00
#include "image_types.hh"
2021-09-11 11:18:23 +08:00
MyPrefs::MyPrefs(BaseObjectType* cobject,const Glib::RefPtr<Gtk::Builder>& builder)
:Gtk::Dialog(cobject),
m_builder(builder)
{
//Get Widgets
m_builder->get_widget("width_spin",m_width);
m_builder->get_widget("height_spin",m_height);
2021-09-12 10:35:33 +08:00
m_builder->get_widget("back_entry",back_entry);
m_builder->get_widget("btnopen",btnopen);
m_builder->get_widget("btnget",btnget);
m_builder->get_widget("btndefback",btndefback);
m_builder->get_widget("btndefsize",btndefsize);
2021-09-11 11:18:23 +08:00
2021-09-12 09:43:39 +08:00
//Initalize Dialog
set_icon_name("org.gtk.daleclack");
set_title("Preferences");
2021-09-11 11:18:23 +08:00
//Create Settings
m_settings=Gio::Settings::create("org.gtk.daleclack");
m_settings->bind("width",m_width->property_value());
m_settings->bind("height",m_height->property_value());
2021-09-12 10:35:33 +08:00
m_settings->bind("background",back_entry->property_text());
2021-09-12 13:56:51 +08:00
//Link Signals
btnopen->signal_clicked().connect(sigc::mem_fun(*this,&MyPrefs::btnopen_clicked));
btnget->signal_clicked().connect(sigc::mem_fun(*this,&MyPrefs::btnget_clicked));
btndefsize->signal_clicked().connect(sigc::mem_fun(*this,&MyPrefs::btndefsize_clicked));
btndefback->signal_clicked().connect(sigc::mem_fun(*this,&MyPrefs::btndefback_clicked));
}
void MyPrefs::btnopen_clicked(){
//Initalize dialog
auto parent=get_transient_for();
dialog=Gtk::FileChooserNative::create("Open a Image File",*parent,Gtk::FILE_CHOOSER_ACTION_OPEN,
"OK","Cancel");
dialog->set_modal();
dialog->signal_response().connect(sigc::mem_fun(*this,&MyPrefs::dialog_response));
//Add Filters
auto filter_image=Gtk::FileFilter::create();
filter_image->set_name("Image Files");
if(mime_type_supported()){
filter_image->add_mime_type("image/*");
}else{
for(int i=0;supported_globs!=NULL && supported_globs[i]!=NULL;i++){
const char * glob=supported_globs[i];
filter_image->add_pattern(glob);
}
}
dialog->add_filter(filter_image);
auto filter_any=Gtk::FileFilter::create();
filter_any->set_name("Any Files");
filter_any->add_pattern("*");
dialog->add_filter(filter_any);
dialog->show();
}
void MyPrefs::btnget_clicked(){ //Get Current window size
int width,height;
auto win=get_transient_for();
win->get_size(width,height);
m_width->set_value(width);
m_height->set_value(height);
}
void MyPrefs::btndefsize_clicked(){ //Default Size:640x360
m_width->set_value(640.0);
m_height->set_value(360.0);
}
void MyPrefs::btndefback_clicked(){ //"none":Use Default Background
back_entry->set_text("none");
}
void MyPrefs::dialog_response(int response_id){ //Get FileName
if(response_id == Gtk::RESPONSE_ACCEPT){
auto file=dialog->get_file();
auto filename=file->get_path();
back_entry->set_text(filename);
file.reset();
}
dialog.reset();
2021-09-11 11:18:23 +08:00
}
MyPrefs * MyPrefs::create(Gtk::Window& parent){
//Load the builder file and create dialog
auto ref_builder=Gtk::Builder::create_from_resource("/gtk108/prefs.ui");
MyPrefs* dialog=nullptr;
ref_builder->get_widget_derived("prefs",dialog);
dialog->set_transient_for(parent);
return dialog;
}