diff --git a/Gtkmm3/gtk81_treeview3/CMakeLists.txt b/Gtkmm3/gtk81_treeview3/CMakeLists.txt new file mode 100644 index 0000000..525f8fa --- /dev/null +++ b/Gtkmm3/gtk81_treeview3/CMakeLists.txt @@ -0,0 +1,19 @@ +set(CMAKE_CXX_STANDARD 17) +cmake_minimum_required(VERSION 3.0.0) +project(gtk81 VERSION 0.1.0) + +include(CTest) +enable_testing() + +set(CPACK_PROJECT_NAME ${PROJECT_NAME}) +set(CPACK_PROJECT_VERSION ${PROJECT_VERSION}) + +include(CPack) + +find_package (PkgConfig REQUIRED) +pkg_check_modules (GTKMM3 REQUIRED gtkmm-3.0) +include_directories (${GTKMM3_INCLUDE_DIRS}) +link_directories (${GTKMM3_LIBRARY_DIRS}) +add_executable(gtk81 src/main.cc src/MyWin.cc) +add_definitions (${GTKMM3_CFLAGS_OTHER}) +target_link_libraries (${PROJECT_NAME} ${GTKMM3_LIBRARIES}) diff --git a/Gtkmm3/gtk81_treeview3/build_mingw.cmd b/Gtkmm3/gtk81_treeview3/build_mingw.cmd new file mode 100644 index 0000000..039672a --- /dev/null +++ b/Gtkmm3/gtk81_treeview3/build_mingw.cmd @@ -0,0 +1,3 @@ +cd build_mingw +mingw32-make +gtk81 \ No newline at end of file diff --git a/Gtkmm3/gtk81_treeview3/src/MyWin.cc b/Gtkmm3/gtk81_treeview3/src/MyWin.cc new file mode 100644 index 0000000..52a0986 --- /dev/null +++ b/Gtkmm3/gtk81_treeview3/src/MyWin.cc @@ -0,0 +1,122 @@ +#include "MyWin.hh" +#include + +MyWin::MyWin() +:m_vbox(Gtk::ORIENTATION_VERTICAL,0), +btn_quit("Exit"), +btn_add("Add Item"), +btn_del("Delete Item"), +label_id("ID:"), +label_text("Text:"), +label_percent("Percentage:") +{ + //Initalize window + set_icon_name("org.gtk.daleclack"); + set_default_size(200,400); + set_title("TreeView Test1"); + + //Add widgets + add(m_vbox); + sw.set_policy(Gtk::POLICY_AUTOMATIC,Gtk::POLICY_AUTOMATIC); + sw.add(m_treeview); + m_vbox.pack_start(sw); + + //Create the store + ref_liststore=Gtk::ListStore::create(m_columns); + m_treeview.set_model(ref_liststore); + + //Append items + row=*(ref_liststore->append()); + row[m_columns.m_col_id]=1; + row[m_columns.m_col_text]="List 1"; + row[m_columns.m_col_percent]=35; + + row=*(ref_liststore->append()); + row[m_columns.m_col_id]=2; + row[m_columns.m_col_text]="List 2"; + row[m_columns.m_col_percent]=57; + + row=*(ref_liststore->append()); + row[m_columns.m_col_id]=3; + row[m_columns.m_col_text]="List 3"; + row[m_columns.m_col_percent]=90; + + //Show Columns + m_treeview.append_column("ID",m_columns.m_col_id); + m_treeview.append_column("List",m_columns.m_col_text); + + //Show percent number as a progress bar + auto cell=Gtk::make_managed(); + cols_count=m_treeview.append_column("Precentages",*cell); + auto pColumn=m_treeview.get_column(cols_count-1); + if(pColumn){ + pColumn->add_attribute(cell->property_value(),m_columns.m_col_percent); + } + + //Add Entries + m_btnbox_id.pack_start(label_id,Gtk::PACK_SHRINK); + m_btnbox_id.pack_start(entry_id,Gtk::PACK_EXPAND_PADDING); + m_btnbox_id.set_homogeneous(false); + m_btnbox_text.pack_start(label_text,Gtk::PACK_SHRINK); + m_btnbox_text.pack_start(entry_text,Gtk::PACK_EXPAND_PADDING); + m_btnbox_text.set_homogeneous(false); + m_btnbox_percent.pack_start(label_percent,Gtk::PACK_SHRINK); + m_btnbox_percent.pack_start(entry_percent,Gtk::PACK_EXPAND_PADDING); + m_btnbox_percent.set_homogeneous(false); + + //Show item button + btn_del.signal_clicked().connect(sigc::mem_fun(*this,&MyWin::btndel_clicked)); + m_buttonbox.pack_start(btn_del,Gtk::PACK_SHRINK); + + //"Add Item" button + btn_add.signal_clicked().connect(sigc::mem_fun(*this,&MyWin::btnadd_clicked)); + m_buttonbox.pack_start(btn_add,Gtk::PACK_SHRINK); + //"Exit" button + btn_quit.signal_clicked().connect(sigc::mem_fun(*this,&MyWin::on_btnquit_clicked)); + m_buttonbox.pack_end(btn_quit,Gtk::PACK_SHRINK); + + //Pack widgets + m_vbox.pack_start(m_btnbox_id,Gtk::PACK_SHRINK); + m_vbox.pack_start(m_btnbox_text,Gtk::PACK_SHRINK); + m_vbox.pack_start(m_btnbox_percent,Gtk::PACK_SHRINK); + m_vbox.pack_end(m_buttonbox,Gtk::PACK_SHRINK); + + //Show all widgets + show_all_children(); +} + +void MyWin::on_btnquit_clicked(){ + hide(); +} + +void MyWin::btndel_clicked(){ + //Delete the iter that selected + ref_selection=m_treeview.get_selection(); + Gtk::TreeModel::iterator iter=ref_selection->get_selected(); + if(iter){ + ref_liststore->erase(iter); + } +} + +void MyWin::btnadd_clicked(){ + //Add an Item + Glib::ustring str,str_id,str_percent; + int id,percent; + + //Get content + str_id=entry_id.get_text(); + str=entry_text.get_text(); + str_percent=entry_percent.get_text(); + id=atoi(str_id.c_str()); + percent=atoi(str_percent.c_str()); + + //Append item + row=*(ref_liststore->append()); + row[m_columns.m_col_id]=id; + row[m_columns.m_col_text]=str; + row[m_columns.m_col_percent]=percent; +} + +MyWin::~MyWin(){ + +} diff --git a/Gtkmm3/gtk81_treeview3/src/MyWin.hh b/Gtkmm3/gtk81_treeview3/src/MyWin.hh new file mode 100644 index 0000000..19681bd --- /dev/null +++ b/Gtkmm3/gtk81_treeview3/src/MyWin.hh @@ -0,0 +1,41 @@ +#pragma once + +#include + +class MyWin : public Gtk::Window{ +public: + MyWin(); + virtual ~MyWin(); +protected: + //Signal Handlers + void on_btnquit_clicked(); + void btndel_clicked(); + void btnadd_clicked(); + + //TreeModel Columns + class ModelColumn : public Gtk::TreeModelColumnRecord{ + public: + ModelColumn() + {add(m_col_id);add(m_col_text);add(m_col_percent);} + Gtk::TreeModelColumn m_col_id; + Gtk::TreeModelColumn m_col_text; + Gtk::TreeModelColumn m_col_percent; + }; + + int cols_count; + ModelColumn m_columns; + Gtk::TreeRow row; + Glib::RefPtr ref_liststore; + Glib::RefPtr ref_selection; + + //Child widgets + Gtk::Box m_vbox; + Gtk::ButtonBox m_buttonbox,m_btnbox_id,m_btnbox_text,m_btnbox_percent; + Gtk::ScrolledWindow sw; + Gtk::TreeView m_treeview; + Gtk::Button btn_del; + Gtk::Button btn_quit; + Gtk::Label label_id,label_text,label_percent; + Gtk::Entry entry_id,entry_text,entry_percent; + Gtk::Button btn_add; +}; \ No newline at end of file diff --git a/Gtkmm3/gtk81_treeview3/src/main.cc b/Gtkmm3/gtk81_treeview3/src/main.cc new file mode 100644 index 0000000..0c49a3a --- /dev/null +++ b/Gtkmm3/gtk81_treeview3/src/main.cc @@ -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); +} \ No newline at end of file