Add gtk103
This commit is contained in:
parent
74f3bb9da1
commit
01e869aaf1
|
@ -0,0 +1,32 @@
|
|||
#A Simple Project Test
|
||||
project('gtk103', 'cpp',
|
||||
default_options : ['c_std=c17', 'cpp_std=c++17'])
|
||||
|
||||
#Initalize variants
|
||||
# gnome=import('gnome')
|
||||
|
||||
#Compile Resource
|
||||
# gresources = gnome.compile_resources(
|
||||
# 'resources', 'res/gtk91.resource.xml',
|
||||
# source_dir: 'res',
|
||||
# c_name: 'resources'
|
||||
# )
|
||||
|
||||
#The Gtkmm Library as a dependency
|
||||
gtkdep = dependency('gtkmm-3.0')
|
||||
|
||||
#Additional include dirs
|
||||
dir_include = include_directories('..')
|
||||
|
||||
#source files
|
||||
src=['src/main.cc', 'src/MyWin.cc', 'src/SetDialog.cc', '../cfgfile2/cfgfile.cc']
|
||||
|
||||
#Use Different Build Opinions in windows and Linux
|
||||
if host_machine.system() == 'windows'
|
||||
win=import('windows')
|
||||
icon_res=win.compile_resources('../icon.rc')
|
||||
executable('gtk103', icon_res, src, dependencies : gtkdep,
|
||||
win_subsystem : 'windows', include_directories : dir_include)
|
||||
else
|
||||
executable('gtk103', src, dependencies : gtkdep, include_directories : dir_include)
|
||||
endif
|
|
@ -0,0 +1,55 @@
|
|||
#include "MyWin.hh"
|
||||
#include "winpe.xpm"
|
||||
|
||||
MyWin::MyWin()
|
||||
:btnset("Setting"),
|
||||
dialog1(*this)
|
||||
{
|
||||
//Initalize window
|
||||
int width=640,height=360;
|
||||
set_icon_name("org.gtk.daleclack");
|
||||
set_title("CfgFile Test2");
|
||||
|
||||
//Add Image and button
|
||||
m_overlay.add(m_back);
|
||||
btnset.set_halign(Gtk::ALIGN_CENTER);
|
||||
btnset.set_valign(Gtk::ALIGN_CENTER);
|
||||
m_overlay.add_overlay(btnset);
|
||||
add(m_overlay);
|
||||
|
||||
//Read Config File,else use default background
|
||||
std::string filename("config");
|
||||
if(readCfgFile(filename,configs)){
|
||||
std::string backname=configs["background"];
|
||||
if(backname.empty()){
|
||||
default_background();
|
||||
}else{
|
||||
auto pixbuf=Gdk::Pixbuf::create_from_file(backname);
|
||||
auto sized=pixbuf->scale_simple(width,height,Gdk::INTERP_BILINEAR);
|
||||
gtk_image_set_from_pixbuf(m_back.gobj(),sized->gobj());
|
||||
pixbuf.reset();
|
||||
sized.reset();
|
||||
}
|
||||
}else{
|
||||
default_background();
|
||||
}
|
||||
|
||||
|
||||
dialog1.set_config(&configs,&m_back);
|
||||
btnset.signal_clicked().connect(sigc::mem_fun(*this,&MyWin::btnset_clicked));
|
||||
|
||||
//Show Everything
|
||||
show_all_children();
|
||||
}
|
||||
|
||||
void MyWin::btnset_clicked(){
|
||||
dialog1.show_all();
|
||||
}
|
||||
|
||||
void MyWin::default_background(){
|
||||
auto pixbuf=Gdk::Pixbuf::create_from_xpm_data(winpe);
|
||||
auto sized=pixbuf->scale_simple(640,360,Gdk::INTERP_BILINEAR);
|
||||
gtk_image_set_from_pixbuf(m_back.gobj(),sized->gobj());
|
||||
pixbuf.reset();
|
||||
sized.reset();
|
||||
}
|
|
@ -0,0 +1,22 @@
|
|||
#pragma once
|
||||
|
||||
#include <gtkmm.h>
|
||||
#include "SetDialog.hh"
|
||||
|
||||
class MyWin : public Gtk::Window{
|
||||
public:
|
||||
MyWin();
|
||||
private:
|
||||
//Child Widgets
|
||||
Gtk::Overlay m_overlay;
|
||||
Gtk::Image m_back;
|
||||
Gtk::Button btnset;
|
||||
|
||||
//Setting Dialog and config
|
||||
conf_map configs;
|
||||
SetDialog dialog1;
|
||||
|
||||
//Signal Handlers
|
||||
void btnset_clicked();
|
||||
void default_background();
|
||||
};
|
|
@ -0,0 +1,84 @@
|
|||
#include "SetDialog.hh"
|
||||
|
||||
SetDialog::SetDialog(Gtk::Window &parent)
|
||||
:vbox(Gtk::ORIENTATION_VERTICAL,5),
|
||||
hbox(Gtk::ORIENTATION_HORIZONTAL,5),
|
||||
btnback("BackGround")
|
||||
{
|
||||
Gtk::Label label1("BackGround File Name:");
|
||||
//Ininalize Dialog
|
||||
set_title("Settings");
|
||||
set_default_size(300,150);
|
||||
set_transient_for(parent);
|
||||
add_button("OK",Gtk::RESPONSE_OK);
|
||||
add_button("Cancel",Gtk::RESPONSE_CANCEL);
|
||||
|
||||
//Add Widgets
|
||||
auto pbox=get_content_area();
|
||||
vbox.set_halign(Gtk::ALIGN_CENTER);
|
||||
vbox.set_valign(Gtk::ALIGN_CENTER);
|
||||
pbox->pack_start(vbox);
|
||||
|
||||
//Button Box
|
||||
hbox.pack_start(entry_back,Gtk::PACK_SHRINK);
|
||||
hbox.pack_start(btnback,Gtk::PACK_SHRINK);
|
||||
vbox.pack_start(label1,Gtk::PACK_SHRINK);
|
||||
vbox.pack_start(hbox,Gtk::PACK_SHRINK);
|
||||
|
||||
//Signals
|
||||
btnback.signal_clicked().connect(sigc::mem_fun(*this,&SetDialog::btnback_clicked));
|
||||
}
|
||||
|
||||
void SetDialog::set_config(conf_map * src_config,Gtk::Image * src_image){
|
||||
//Set Config to the Dialog
|
||||
configs1=src_config;
|
||||
img_back=src_image;
|
||||
std::string filename=(*src_config)["background"];
|
||||
entry_back.set_text(filename);
|
||||
}
|
||||
|
||||
void SetDialog::on_response(int response_id){
|
||||
if(response_id == Gtk::RESPONSE_OK){
|
||||
Glib::ustring backname=entry_back.get_text();
|
||||
//Change Background
|
||||
if(!backname.empty()){
|
||||
auto pixbuf=Gdk::Pixbuf::create_from_file(backname);
|
||||
auto sized=pixbuf->scale_simple(640,360,Gdk::INTERP_BILINEAR);
|
||||
gtk_image_set_from_pixbuf(img_back->gobj(),sized->gobj());
|
||||
pixbuf.reset();
|
||||
sized.reset();
|
||||
}
|
||||
//Write filename to config file
|
||||
outfile.open("config",std::ios_base::out);
|
||||
if(outfile.is_open()){
|
||||
outfile<<"background="<<backname<<std::endl;
|
||||
}
|
||||
outfile.close();
|
||||
}
|
||||
hide();
|
||||
}
|
||||
|
||||
void SetDialog::btnback_clicked(){
|
||||
//Create a Dialog
|
||||
dialog=Gtk::FileChooserNative::create("Open a Image File",*this,
|
||||
Gtk::FILE_CHOOSER_ACTION_OPEN,"OK","Cancel");
|
||||
|
||||
dialog->signal_response().connect(sigc::mem_fun(*this,&SetDialog::dialog_reponse));
|
||||
|
||||
//Add a FileFilter
|
||||
auto filter_any=Gtk::FileFilter::create();
|
||||
filter_any->set_name("Any Files");
|
||||
filter_any->add_pattern("*");
|
||||
dialog->add_filter(filter_any);
|
||||
|
||||
dialog->show();
|
||||
}
|
||||
|
||||
void SetDialog::dialog_reponse(int response_id){
|
||||
if(response_id == Gtk::RESPONSE_ACCEPT){
|
||||
//Set filename to entry
|
||||
Glib::ustring filename=dialog->get_filename();
|
||||
entry_back.set_text(filename);
|
||||
}
|
||||
dialog.reset();
|
||||
}
|
|
@ -0,0 +1,30 @@
|
|||
#pragma once
|
||||
|
||||
#include <gtkmm.h>
|
||||
#include "../cfgfile2/cfgfile.hh"
|
||||
|
||||
class SetDialog : public Gtk::Dialog{
|
||||
public:
|
||||
SetDialog(Gtk::Window & parent);
|
||||
void set_config(conf_map * src_config,Gtk::Image * src_image);
|
||||
protected:
|
||||
void on_response(int response_id) override;
|
||||
private:
|
||||
//Child widgets
|
||||
Gtk::Box vbox,hbox;
|
||||
Gtk::Button btnback;
|
||||
Gtk::Entry entry_back;
|
||||
Gtk::Image * img_back;
|
||||
|
||||
//File Chooser Dialog
|
||||
Glib::RefPtr<Gtk::FileChooserNative> dialog;
|
||||
|
||||
//File Config
|
||||
std::fstream outfile;
|
||||
conf_map *configs1;
|
||||
|
||||
//Signal Handlers
|
||||
void btnload_clicked();
|
||||
void btnback_clicked();
|
||||
void dialog_reponse(int response_id);
|
||||
};
|
|
@ -0,0 +1,7 @@
|
|||
#include "MyWin.hh"
|
||||
|
||||
int main(int argc,char **argv){
|
||||
auto app=Gtk::Application::create(argc,argv,"org.gtk.daleclack");
|
||||
MyWin window;
|
||||
return app->run(window);
|
||||
}
|
Loading…
Reference in New Issue