From 0a5827abca768504017b49ae0d60ab01d9244b1d Mon Sep 17 00:00:00 2001 From: daleclack Date: Sun, 6 Feb 2022 20:33:04 +0800 Subject: [PATCH] Add apps --- Gtkmm3_Mac/CMakeLists.txt | 21 +- Gtkmm3_Mac/res/game1.ui | 224 ++++++ Gtkmm3_Mac/res/gnome-fs-regular.svg | 16 + Gtkmm3_Mac/res/icons/48x48/actions/gedit.png | Bin 872 -> 0 bytes .../res/icons/48x48/actions/gedit_running.png | Bin 9439 -> 0 bytes .../scalable/status/audacious_whitesur.svg | 21 + Gtkmm3_Mac/res/icons/scalable/status/eog.svg | 75 -- .../res/icons/scalable/status/image_app.svg | 111 +++ .../scalable/status/image_app_running.svg | 557 +++++++++++++++ .../res/icons/scalable/status/my_textedit.svg | 160 +++++ .../scalable/status/my_textedit_running.svg | 655 ++++++++++++++++++ .../icons/scalable/status/vlc_whitesur.svg | 16 + Gtkmm3_Mac/res/image_appmenu.xml | 17 + Gtkmm3_Mac/res/mydock.ui | 18 +- Gtkmm3_Mac/src/apps/FileWindow.hh | 71 ++ Gtkmm3_Mac/src/apps/Game.hh | 23 + Gtkmm3_Mac/src/apps/ImageApp.hh | 41 ++ Gtkmm3_Mac/src/apps/Runner.hh | 19 + Gtkmm3_Mac/src/apps/TextEditor.hh | 30 + Gtkmm3_Mac/src/apps/drawing.hh | 33 + Gtkmm3_Mac/src/draw_app/drawing.cc | 116 ++++ Gtkmm3_Mac/src/file_app/FileWindow.cc | 331 +++++++++ Gtkmm3_Mac/src/game_app/Game.cc | 62 ++ Gtkmm3_Mac/src/image_app/ImageApp.cc | 174 +++++ Gtkmm3_Mac/src/image_app/MyImage.cc | 79 +++ Gtkmm3_Mac/src/image_app/MyImage.hh | 22 + Gtkmm3_Mac/src/run_app/Runner.cc | 68 ++ Gtkmm3_Mac/src/text_app/TextEditor.cc | 193 ++++++ Gtkmm3_Mac/src/ui/MyDock.cc | 288 ++++++-- Gtkmm3_Mac/src/ui/MyDock.hh | 43 +- 30 files changed, 3326 insertions(+), 158 deletions(-) create mode 100644 Gtkmm3_Mac/res/game1.ui create mode 100644 Gtkmm3_Mac/res/gnome-fs-regular.svg delete mode 100644 Gtkmm3_Mac/res/icons/48x48/actions/gedit.png delete mode 100644 Gtkmm3_Mac/res/icons/48x48/actions/gedit_running.png create mode 100644 Gtkmm3_Mac/res/icons/scalable/status/audacious_whitesur.svg delete mode 100644 Gtkmm3_Mac/res/icons/scalable/status/eog.svg create mode 100644 Gtkmm3_Mac/res/icons/scalable/status/image_app.svg create mode 100644 Gtkmm3_Mac/res/icons/scalable/status/image_app_running.svg create mode 100644 Gtkmm3_Mac/res/icons/scalable/status/my_textedit.svg create mode 100644 Gtkmm3_Mac/res/icons/scalable/status/my_textedit_running.svg create mode 100644 Gtkmm3_Mac/res/icons/scalable/status/vlc_whitesur.svg create mode 100644 Gtkmm3_Mac/res/image_appmenu.xml create mode 100644 Gtkmm3_Mac/src/apps/FileWindow.hh create mode 100644 Gtkmm3_Mac/src/apps/Game.hh create mode 100644 Gtkmm3_Mac/src/apps/ImageApp.hh create mode 100644 Gtkmm3_Mac/src/apps/Runner.hh create mode 100644 Gtkmm3_Mac/src/apps/TextEditor.hh create mode 100644 Gtkmm3_Mac/src/apps/drawing.hh create mode 100644 Gtkmm3_Mac/src/draw_app/drawing.cc create mode 100644 Gtkmm3_Mac/src/file_app/FileWindow.cc create mode 100644 Gtkmm3_Mac/src/game_app/Game.cc create mode 100644 Gtkmm3_Mac/src/image_app/ImageApp.cc create mode 100644 Gtkmm3_Mac/src/image_app/MyImage.cc create mode 100644 Gtkmm3_Mac/src/image_app/MyImage.hh create mode 100644 Gtkmm3_Mac/src/run_app/Runner.cc create mode 100644 Gtkmm3_Mac/src/text_app/TextEditor.cc diff --git a/Gtkmm3_Mac/CMakeLists.txt b/Gtkmm3_Mac/CMakeLists.txt index bd5df77..14d466d 100644 --- a/Gtkmm3_Mac/CMakeLists.txt +++ b/Gtkmm3_Mac/CMakeLists.txt @@ -23,25 +23,28 @@ include_directories (${GTKMM3_INCLUDE_DIRS}) link_directories (${GTKMM3_LIBRARY_DIRS}) set(SOURCES src/core/main.cc src/core/MyWin.cc src/core/MyStack.cc src/cfgfile/cfgfile.cc - src/ui/MyFinder.cc src/ui/MyPrefs.cc src/ui/MyDock.cc) - # src/draw_app/drawing.cc src/file_app/FileWindow.cc src/game_app/Game.cc - # src/image_app/ImageApp.cc src/image_app/MyImage.cc - # src/run_app/Runner.cc src/text_app/TextEditor.cc) + src/ui/MyFinder.cc src/ui/MyPrefs.cc src/ui/MyDock.cc + src/draw_app/drawing.cc src/file_app/FileWindow.cc src/game_app/Game.cc + src/image_app/ImageApp.cc src/image_app/MyImage.cc + src/run_app/Runner.cc src/text_app/TextEditor.cc) #Compile resources with GCR_CMake set(RESOURCE_LIST menubar.xml mainmenu.xml + image_appmenu.xml stack.ui prefs_stack.ui mydock.ui + game1.ui style.css reset.css dock_style.css folder.svg folder-images.svg image_file.svg + gnome-fs-regular.svg icons/16x16/actions/finder_audio.svg icons/16x16/actions/finder-battery.svg icons/16x16/actions/finder-computer.svg @@ -53,10 +56,9 @@ set(RESOURCE_LIST icons/48x48/actions/dialog-error.png icons/48x48/actions/game.png icons/48x48/actions/game_running.png - icons/48x48/actions/gedit.png - icons/48x48/actions/gedit_running.png icons/48x48/actions/btnabout.png icons/48x48/actions/My_GtkUI.png + icons/scalable/status/audacious_whitesur.svg icons/scalable/status/my_prefs.svg icons/scalable/status/my_prefs_running.svg icons/scalable/status/drawing_app.svg @@ -65,7 +67,12 @@ set(RESOURCE_LIST icons/scalable/status/file-app.svg icons/scalable/status/file-app_running.svg icons/scalable/status/display_prefs.svg - icons/scalable/status/myrunner.svg) + icons/scalable/status/myrunner.svg + icons/scalable/status/image_app.svg + icons/scalable/status/image_app_running.svg + icons/scalable/status/my_textedit.svg + icons/scalable/status/my_textedit_running.svg + icons/scalable/status/vlc_whitesur.svg) compile_gresources(RESOURCE_FILE XML_OUT diff --git a/Gtkmm3_Mac/res/game1.ui b/Gtkmm3_Mac/res/game1.ui new file mode 100644 index 0000000..35fd5e6 --- /dev/null +++ b/Gtkmm3_Mac/res/game1.ui @@ -0,0 +1,224 @@ + + + + + + False + 15 + Guess Game + center + True + + + + True + False + + + True + False + Select a button + + + 1 + 0 + 3 + + + + + 1 + 100 + 100 + True + True + True + top + True + + + 1 + 2 + + + + + 2 + 100 + 100 + True + True + True + top + True + + + 3 + 2 + + + + + 3 + 100 + 100 + True + True + True + top + True + + + 1 + 4 + + + + + 4 + 100 + 100 + True + True + True + top + True + + + 3 + 4 + + + + + Go + True + True + True + + + 1 + 6 + + + + + Exit + True + True + True + + + 3 + 6 + + + + + 20 + 20 + True + False + + + 2 + 3 + + + + + 20 + 20 + True + False + + + 2 + 5 + + + + + 20 + 20 + True + False + + + 2 + 1 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/Gtkmm3_Mac/res/gnome-fs-regular.svg b/Gtkmm3_Mac/res/gnome-fs-regular.svg new file mode 100644 index 0000000..647eef5 --- /dev/null +++ b/Gtkmm3_Mac/res/gnome-fs-regular.svg @@ -0,0 +1,16 @@ + + + + + + + + + + + + + + + + diff --git a/Gtkmm3_Mac/res/icons/48x48/actions/gedit.png b/Gtkmm3_Mac/res/icons/48x48/actions/gedit.png deleted file mode 100644 index bb5414a3d0f095910fc9b37fb5df49538bde73c7..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 872 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 diff --git a/Gtkmm3_Mac/res/icons/scalable/status/audacious_whitesur.svg b/Gtkmm3_Mac/res/icons/scalable/status/audacious_whitesur.svg new file mode 100644 index 0000000..4d7dd20 --- /dev/null +++ b/Gtkmm3_Mac/res/icons/scalable/status/audacious_whitesur.svg @@ -0,0 +1,21 @@ + + + + + + + + + + + + + + + + + + + + + diff --git a/Gtkmm3_Mac/res/icons/scalable/status/eog.svg b/Gtkmm3_Mac/res/icons/scalable/status/eog.svg deleted file mode 100644 index b351442..0000000 --- a/Gtkmm3_Mac/res/icons/scalable/status/eog.svg +++ /dev/null @@ -1,75 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/Gtkmm3_Mac/res/icons/scalable/status/image_app.svg b/Gtkmm3_Mac/res/icons/scalable/status/image_app.svg new file mode 100644 index 0000000..b8d615f --- /dev/null +++ b/Gtkmm3_Mac/res/icons/scalable/status/image_app.svg @@ -0,0 +1,111 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/Gtkmm3_Mac/res/icons/scalable/status/image_app_running.svg b/Gtkmm3_Mac/res/icons/scalable/status/image_app_running.svg new file mode 100644 index 0000000..14a0e0d --- /dev/null +++ b/Gtkmm3_Mac/res/icons/scalable/status/image_app_running.svg @@ -0,0 +1,557 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/Gtkmm3_Mac/res/icons/scalable/status/my_textedit.svg b/Gtkmm3_Mac/res/icons/scalable/status/my_textedit.svg new file mode 100644 index 0000000..94544e1 --- /dev/null +++ b/Gtkmm3_Mac/res/icons/scalable/status/my_textedit.svg @@ -0,0 +1,160 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/Gtkmm3_Mac/res/icons/scalable/status/my_textedit_running.svg b/Gtkmm3_Mac/res/icons/scalable/status/my_textedit_running.svg new file mode 100644 index 0000000..df99140 --- /dev/null +++ b/Gtkmm3_Mac/res/icons/scalable/status/my_textedit_running.svg @@ -0,0 +1,655 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/Gtkmm3_Mac/res/icons/scalable/status/vlc_whitesur.svg b/Gtkmm3_Mac/res/icons/scalable/status/vlc_whitesur.svg new file mode 100644 index 0000000..ba3358d --- /dev/null +++ b/Gtkmm3_Mac/res/icons/scalable/status/vlc_whitesur.svg @@ -0,0 +1,16 @@ + + + + + + + + + + + + + + + + diff --git a/Gtkmm3_Mac/res/image_appmenu.xml b/Gtkmm3_Mac/res/image_appmenu.xml new file mode 100644 index 0000000..85bc1b4 --- /dev/null +++ b/Gtkmm3_Mac/res/image_appmenu.xml @@ -0,0 +1,17 @@ + + + + + Zoom Out + win.zoom_out + + + Zoom In + win.zoom_in + + + 1∶1 + win.zoom_reset + + + \ No newline at end of file diff --git a/Gtkmm3_Mac/res/mydock.ui b/Gtkmm3_Mac/res/mydock.ui index 5604d1d..7c3f1f7 100644 --- a/Gtkmm3_Mac/res/mydock.ui +++ b/Gtkmm3_Mac/res/mydock.ui @@ -13,7 +13,7 @@ True False 48 - audacious + audacious_whitesur 6 @@ -26,7 +26,7 @@ True False 48 - gedit + my_textedit True @@ -38,32 +38,32 @@ True False 48 - eog + image_app 6 True False 48 - gedit + my_textedit True False 48 - gedit + my_textedit True False 48 - vlc + vlc_whitesur True False 48 - vlc + vlc_whitesur True @@ -99,13 +99,13 @@ True False 48 - gedit + my_textedit True False 48 - eog + image_app True diff --git a/Gtkmm3_Mac/src/apps/FileWindow.hh b/Gtkmm3_Mac/src/apps/FileWindow.hh new file mode 100644 index 0000000..511427e --- /dev/null +++ b/Gtkmm3_Mac/src/apps/FileWindow.hh @@ -0,0 +1,71 @@ +#pragma once + +#include + +enum class ViewMode{ + MODE_ICON, + MODE_LIST +}; + +class FileWindow : public Gtk::Window{ +public: + FileWindow(); + ~FileWindow(); + void go_home(); +private: + //List Model + class ModelColumns : public Gtk::TreeModelColumnRecord{ + public: + ModelColumns(){ + add(m_col_path);add(m_col_display_name);add(m_col_pixbuf);add(m_col_is_dir); + } + Gtk::TreeModelColumn m_col_path; + Gtk::TreeModelColumn m_col_display_name; + Gtk::TreeModelColumn> m_col_pixbuf; + Gtk::TreeModelColumn m_col_is_dir; + }; + + ModelColumns columns; + Gtk::TreeView m_treeview; + Gtk::IconView m_iconview; + Glib::RefPtr m_selection; + Glib::RefPtr m_liststore; + + //File Proprties + Glib::RefPtr file_pixbuf; + Glib::RefPtr folder_pixbuf; + Glib::ustring parent_str,tmp_str; + ViewMode view_mode; + + //Child Widgets + Gtk::Box vbox,btnbox,menubox; + Gtk::Toolbar m_toolbar,m_viewbar; + Gtk::ToolButton up_button,home_button,new_button,delete_button; + Gtk::ToolItem view_item,menu_item; + Gtk::ScrolledWindow m_sw; + Gtk::Button view_button; + Gtk::MenuButton menubtn; + Gtk::Stack stack; + Gtk::Popover popover; + Gtk::CheckButton show_hidden; + Gtk::InfoBar m_infobar; + Gtk::Label info_label; + Gtk::Entry entry_file; + + //Initalize Functions + void fill_store(); + void initalize_views(); + int sort_func(const Gtk::TreeModel::iterator &a,const Gtk::TreeModel::iterator &b); + + //Signal Handlers + void item_activated(const Gtk::TreePath &path); + void row_activated(const Gtk::TreePath &path,Gtk::TreeViewColumn * sel_column); + void btnup_clicked(); + void btnhome_clicked(); + void btnnew_clicked(); + void btndel_clicked(); + void btnview_clicked(); + void infobar_response(int response_id); + void dialog_response(int response_id,Gtk::Dialog * dialog); + void btnhide_clicked(); +}; \ No newline at end of file diff --git a/Gtkmm3_Mac/src/apps/Game.hh b/Gtkmm3_Mac/src/apps/Game.hh new file mode 100644 index 0000000..2e12b6a --- /dev/null +++ b/Gtkmm3_Mac/src/apps/Game.hh @@ -0,0 +1,23 @@ +#pragma once + +#include + +class Game : public Gtk::Window{ +public: + Game(BaseObjectType *cobject,Glib::RefPtr &tmp_builder); + static Game * create(); +private: + //The main builder + Glib::RefPtr game_builder; + //Child Widgets + Gtk::Window *game_window; + Gtk::Button *win_close,*win_mini; + Gtk::Button *game_btn[4],*btngo,*btnexit; + Gtk::Label *game_label; + int game_index[4]; + //Signal Handlers + void gamebtn_clicked(int *index); + void btngo_clicked(); + void btnexit_clicked(); + void win_closed(); +}; \ No newline at end of file diff --git a/Gtkmm3_Mac/src/apps/ImageApp.hh b/Gtkmm3_Mac/src/apps/ImageApp.hh new file mode 100644 index 0000000..b22b86e --- /dev/null +++ b/Gtkmm3_Mac/src/apps/ImageApp.hh @@ -0,0 +1,41 @@ +#pragma once + +#include +#include "MyImage.hh" + +class ImageApp : public Gtk::ApplicationWindow +{ +public: + ImageApp(); + +private: + // Child widgets + Gtk::ScrolledWindow sw; + MyImage image_area; + Gtk::Box main_box, btnbox; + Gtk::Button btnopen; + Gtk::Scale scale; + Gtk::Overlay overlay; + Glib::RefPtr m_adjustment, hadjustment, vadjustment; + Glib::RefPtr dialog; + + // Gesture control + Glib::RefPtr gesture_drag; + Glib::RefPtr gesture_click; + void drag_begin(double x, double y); + void drag_update(double x, double y); + void drag_end(double x, double y); + void move_to(double x, double y); + + // Menu for image control + Gtk::PopoverMenu popover; + void press(int n_press, double x, double y); + + // Signal Handlers + void btnopen_clicked(); + void dialog_response(int response_id); + void scale_changed(); + void image_zoom_in(); + void image_zoom_out(); + void image_zoom_reset(); +}; diff --git a/Gtkmm3_Mac/src/apps/Runner.hh b/Gtkmm3_Mac/src/apps/Runner.hh new file mode 100644 index 0000000..7f0dbc1 --- /dev/null +++ b/Gtkmm3_Mac/src/apps/Runner.hh @@ -0,0 +1,19 @@ +#pragma once + +#include + +class GtkRunner : public Gtk::Dialog{ +public: + GtkRunner(); +protected: + void on_response(int response_id) override; +private: + //Child Widgets + Gtk::Box hbox; + Gtk::Entry app_entry; + Gtk::Button open_btn; + //File Dialog + Glib::RefPtr dialog; + void file_dialog(); + void dialog_response(int response); +}; diff --git a/Gtkmm3_Mac/src/apps/TextEditor.hh b/Gtkmm3_Mac/src/apps/TextEditor.hh new file mode 100644 index 0000000..e00604f --- /dev/null +++ b/Gtkmm3_Mac/src/apps/TextEditor.hh @@ -0,0 +1,30 @@ +#pragma once + +#include + +class TextEditor : public Gtk::Window{ +public: + TextEditor(); +private: + //Child widgets + Gtk::Box vbox,hbox,btnbox,*infobox; + Gtk::ScrolledWindow sw1,sw2; + Glib::RefPtr buffer1; + Gtk::TextView textview1; + Gtk::Button btn_copy,btn_paste,btn_open,btn_save,btn_clear; + Gtk::InfoBar infobar; + Gtk::Label label1; + //File Dialog + Glib::RefPtr dialog; + //Signal Handlers + void btnopen_clicked(); + void opendialog_response(int response); + void btnsave_clicked(); + void savedialog_response(int response); + void btncopy_clicked(); + void btnpaste_clicked(); + void btnclear_clicked(); + void buffer1_changed(); + void clipboard_receive(const Glib::ustring &text); + void infobar_response(int response); +}; diff --git a/Gtkmm3_Mac/src/apps/drawing.hh b/Gtkmm3_Mac/src/apps/drawing.hh new file mode 100644 index 0000000..b2845a8 --- /dev/null +++ b/Gtkmm3_Mac/src/apps/drawing.hh @@ -0,0 +1,33 @@ +#pragma once + +#include + +class Drawing : public Gtk::Window{ + public: + Drawing(); + private: + //Child Widgets + Gtk::DrawingArea draw_area; + Gtk::ColorButton color_btn; + Gtk::Label main_label,size_label; + Gtk::Box main_box,btn_box; + Gtk::Button btn_clear,btn_exit; + Gtk::Scale scale; + + //Color Setting + Gdk::RGBA m_color; + Cairo::RefPtr surface; + + //Gesture to draw + Glib::RefPtr drag; + Glib::RefPtr size_adj; + double start_x,start_y; + + //Signal Handlers + bool draw_event(const Cairo::RefPtr &context); + void draw_brush(double x,double y); + void button_press(); + void drag_begin(double x,double y); + void drag_progress(double x,double y); + void color_set(); +}; diff --git a/Gtkmm3_Mac/src/draw_app/drawing.cc b/Gtkmm3_Mac/src/draw_app/drawing.cc new file mode 100644 index 0000000..40a0255 --- /dev/null +++ b/Gtkmm3_Mac/src/draw_app/drawing.cc @@ -0,0 +1,116 @@ +#include "drawing.hh" + +bool Drawing::draw_event(const Cairo::RefPtr &context){ + //Show context + context->set_source(surface,0,0); + context->paint(); + return true; +} + +void Drawing::draw_brush(double x,double y){ + //Create Draw Brush with specificed size + double size=scale.get_value(); + auto cr=Cairo::Context::create(surface); + cr->arc(x, y, size, 0, 2 * G_PI); + + //Set Color + cr->set_source_rgba(m_color.get_red(),m_color.get_green(), + m_color.get_blue(),m_color.get_alpha()); + + //Fill Color and Delete the brush + cr->fill(); + cr.clear(); + + draw_area.queue_draw(); +} + +void Drawing::button_press(){ + if(surface){ + //Clear the content in draw area + auto cr=Cairo::Context::create(surface); + cr->set_source_rgb(1,1,1); + cr->paint(); + cr.clear(); + draw_area.queue_draw(); + } + +} + +void Drawing::drag_begin(double x,double y){ + //The Begin + start_x=x;start_y=y; + draw_brush(x,y); +} + +void Drawing::drag_progress(double x,double y){ + //Progress and end + draw_brush(x+start_x,y+start_y); +} + +void Drawing::color_set(){ + m_color=color_btn.get_rgba(); +} + +Drawing::Drawing() +:main_label("Select a color"), +size_label("Pen Size"), +main_box(Gtk::ORIENTATION_HORIZONTAL,5), +btn_box(Gtk::ORIENTATION_VERTICAL,5), +btn_clear("Clear Board"), +btn_exit("Exit") +{ + //Ininalize window + set_icon_name("org.gtk.daleclack"); + set_title("Drawing"); + set_default_size(640,480); + + //Color set panel + size_adj=Gtk::Adjustment::create(3.0,1.0,20.0); + scale.set_adjustment(size_adj); + scale.set_value_pos(Gtk::POS_BOTTOM); + btn_box.pack_start(main_label,Gtk::PACK_SHRINK); + btn_box.pack_start(color_btn,Gtk::PACK_SHRINK); + btn_box.pack_start(size_label,Gtk::PACK_SHRINK); + btn_box.pack_start(scale,Gtk::PACK_SHRINK); + btn_box.pack_start(btn_clear,Gtk::PACK_SHRINK); + btn_box.pack_start(btn_exit,Gtk::PACK_SHRINK); + btn_box.set_halign(Gtk::ALIGN_CENTER); + btn_box.set_valign(Gtk::ALIGN_CENTER); + + //Add Gesture + btn_clear.signal_clicked().connect(sigc::mem_fun(*this,&Drawing::button_press)); + btn_exit.signal_clicked().connect(sigc::mem_fun(*this,&Drawing::hide)); + + drag=Gtk::GestureDrag::create(draw_area); + drag->set_button(GDK_BUTTON_PRIMARY); + drag->signal_drag_begin().connect(sigc::mem_fun(*this,&Drawing::drag_begin)); + drag->signal_drag_update().connect(sigc::mem_fun(*this,&Drawing::drag_progress)); + drag->signal_drag_end().connect(sigc::mem_fun(*this,&Drawing::drag_progress)); + + //Create a Surface + surface=Cairo::ImageSurface::create(Cairo::FORMAT_ARGB32,600,480); + + //Set Default Color + m_color.set_blue(0); + m_color.set_green(0); + m_color.set_red(0); + m_color.set_alpha(1); + color_btn.set_rgba(m_color); + color_btn.signal_color_set().connect(sigc::mem_fun(*this,&Drawing::color_set)); + + //Initalial draw + auto cr=Cairo::Context::create(surface); + cr->set_source_rgb(1,1,1); + cr->paint(); + cr.clear(); + draw_area.queue_draw(); + + //Initalize main widget + draw_area.set_size_request(600,480); + draw_area.signal_draw().connect(sigc::mem_fun(*this,&Drawing::draw_event)); + main_box.pack_start(draw_area); + main_box.pack_start(btn_box,Gtk::PACK_SHRINK); + main_box.set_border_width(10); + add(main_box); + show_all_children(); +} diff --git a/Gtkmm3_Mac/src/file_app/FileWindow.cc b/Gtkmm3_Mac/src/file_app/FileWindow.cc new file mode 100644 index 0000000..44d0d38 --- /dev/null +++ b/Gtkmm3_Mac/src/file_app/FileWindow.cc @@ -0,0 +1,331 @@ +#include "FileWindow.hh" +#include + +FileWindow::FileWindow() +:parent_str("/"), +vbox(Gtk::ORIENTATION_VERTICAL,5), +btnbox(Gtk::ORIENTATION_HORIZONTAL,5), +menubox(Gtk::ORIENTATION_VERTICAL,5), +show_hidden("Show hidden files") +{ + //Initalize Window + set_default_size(650,400); + set_icon_name("org.gtk.daleclack"); + set_title("File Manager"); + + //Load Pixbufs + auto pixbuf1 = Gdk::Pixbuf::create_from_resource("/org/gtk/daleclack/gnome-fs-regular.svg"); + file_pixbuf = pixbuf1->scale_simple(48,48,Gdk::INTERP_BILINEAR); + pixbuf1.reset(); + pixbuf1 = Gdk::Pixbuf::create_from_resource("/org/gtk/daleclack/folder.svg"); + folder_pixbuf = pixbuf1->scale_simple(48,48,Gdk::INTERP_BILINEAR); + pixbuf1.reset(); + + //Create Child Widgets + vbox.pack_start(btnbox,Gtk::PACK_SHRINK); + add(vbox); + + m_toolbar.set_toolbar_style(Gtk::TOOLBAR_ICONS); + btnbox.pack_start(m_toolbar,Gtk::PACK_SHRINK); + btnbox.pack_end(m_viewbar,Gtk::PACK_SHRINK); + + //"Up" Button + up_button.set_icon_name("go-up"); + up_button.set_is_important(); + up_button.set_sensitive(false); + up_button.signal_clicked().connect(sigc::mem_fun(*this,&FileWindow::btnup_clicked)); + m_toolbar.insert(up_button,-1); + + //"Home" Button + home_button.set_icon_name("go-home"); + home_button.set_is_important(); + home_button.signal_clicked().connect(sigc::mem_fun(*this,&FileWindow::btnhome_clicked)); + m_toolbar.insert(home_button,-1); + + //"New Folder" Button + new_button.set_icon_name("folder-new"); + new_button.set_is_important(); + new_button.signal_clicked().connect(sigc::mem_fun(*this,&FileWindow::btnnew_clicked)); + m_toolbar.insert(new_button,-1); + + //"Delete" Button + delete_button.set_icon_name("edit-delete"); + delete_button.set_is_important(); + delete_button.signal_clicked().connect(sigc::mem_fun(*this,&FileWindow::btndel_clicked)); + m_toolbar.insert(delete_button,-1); + + //"View Mode" Button + view_item.add(view_button); + view_mode=ViewMode::MODE_ICON; + view_button.set_relief(Gtk::RELIEF_NONE); + view_button.set_image_from_icon_name("view-grid-symbolic",Gtk::ICON_SIZE_LARGE_TOOLBAR); + view_button.signal_clicked().connect(sigc::mem_fun(*this,&FileWindow::btnview_clicked)); + m_viewbar.insert(view_item,-1); + + //Menu Button + menu_item.add(menubtn); + menubtn.set_relief(Gtk::RELIEF_NONE); + m_viewbar.insert(menu_item,-1); + m_viewbar.set_toolbar_style(Gtk::TOOLBAR_ICONS); + show_hidden.set_active(false); + show_hidden.signal_clicked().connect(sigc::mem_fun(*this,&FileWindow::btnhide_clicked)); + menubox.pack_start(show_hidden,Gtk::PACK_SHRINK); + popover.add(menubox); + menubtn.set_popover(popover); + popover.show_all_children(); + + //Info Bar + m_infobar.add_button("OK",Gtk::RESPONSE_OK); + auto pbox = dynamic_cast(m_infobar.get_content_area()); + pbox->add(info_label); + vbox.pack_start(m_infobar,Gtk::PACK_SHRINK); + m_infobar.signal_response().connect(sigc::mem_fun(*this,&FileWindow::infobar_response)); + + //Create Store + m_liststore = Gtk::ListStore::create(columns); + m_liststore->set_default_sort_func(sigc::mem_fun(*this,&FileWindow::sort_func)); + m_liststore->set_sort_column(-1,Gtk::SORT_ASCENDING); + fill_store(); + + initalize_views(); + m_sw.add(stack); + vbox.pack_start(m_sw); + + show_all_children(); + m_infobar.hide(); +} + +void FileWindow::go_home(){ + btnhome_clicked(); +} + +int FileWindow::sort_func(const Gtk::TreeModel::iterator &a,const Gtk::TreeModel::iterator &b){ + bool is_dir_a,is_dir_b; + Glib::ustring name_a,name_b; + + auto row_a= *a,row_b= *b; + is_dir_a = row_a[columns.m_col_is_dir]; + is_dir_b = row_b[columns.m_col_is_dir]; + name_a = row_a[columns.m_col_display_name]; + name_b = row_b[columns.m_col_display_name]; + + if(!is_dir_a && is_dir_b){ + return 1; + } + if(is_dir_a && !is_dir_b){ + return -1; + } + 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()); + } +} + +void FileWindow::fill_store(){ + Gtk::TreeModel::iterator iter; + + //Clear the store + m_liststore->clear(); + + //Go through the directory and get information + try{ + Glib::Dir dir1(parent_str); + bool is_dir; + Glib::ustring display_name; + std::string dir_name; + /* Ignore the files start with '.' when the button is not toggled */ + do{ + dir_name = dir1.read_name(); + //std::cout<append()); + row[columns.m_col_display_name] = display_name; + row[columns.m_col_is_dir] = is_dir; + row[columns.m_col_path] = Glib::ustring(path); + row[columns.m_col_pixbuf] = is_dir ? folder_pixbuf : file_pixbuf; + } + + g_free(path); + + }while(dir_name != ""); + } + catch(const Glib::Error &ex){ + std::cout << ex.what() << std::endl; + parent_str = tmp_str; + fill_store(); + } +} + +void FileWindow::initalize_views(){ + //Initalize IconView + m_iconview.set_model(m_liststore); + m_iconview.set_text_column(columns.m_col_display_name); + m_iconview.set_pixbuf_column(columns.m_col_pixbuf); + m_iconview.set_selection_mode(Gtk::SELECTION_MULTIPLE); + m_iconview.signal_item_activated().connect(sigc::mem_fun(*this,&FileWindow::item_activated)); + m_iconview.set_row_spacing(0); + + //Initalize TreeView + m_treeview.set_model(m_liststore); + m_treeview.append_column("",columns.m_col_pixbuf); + m_treeview.append_column("Name",columns.m_col_display_name); + m_treeview.signal_row_activated().connect(sigc::mem_fun(*this,&FileWindow::row_activated)); + + stack.add(m_iconview); + stack.add(m_treeview); +} + +void FileWindow::item_activated(const Gtk::TreePath &path){ + auto row = *(m_liststore->get_iter(path)); + bool is_dir; + Glib::ustring path_name; + + //Backup current parent dir + tmp_str = parent_str; + + //Get Path Name and read + path_name = row[columns.m_col_path]; + is_dir = row[columns.m_col_is_dir]; + + if(!is_dir){return ;} + + parent_str = path_name; + + fill_store(); + up_button.set_sensitive(); +} + +void FileWindow::row_activated(const Gtk::TreePath &path,Gtk::TreeViewColumn * sel_column){ + auto row = *(m_liststore->get_iter(path)); + bool is_dir; + Glib::ustring path_name; + + //Backup current parent dir + tmp_str = parent_str; + + //Get Path Name and read + path_name = row[columns.m_col_path]; + is_dir = row[columns.m_col_is_dir]; + + if(!is_dir){return ;} + + parent_str = path_name; + + fill_store(); + up_button.set_sensitive(); +} + +void FileWindow::btnup_clicked(){ + //Go to upper dir + Glib::ustring dir_name; + dir_name = Glib::path_get_dirname(parent_str); + parent_str = dir_name; + fill_store(); +} + +void FileWindow::btnhome_clicked(){ + //Go to home dir + parent_str = Glib::ustring(Glib::get_home_dir()); + fill_store(); +} + +void FileWindow::btnnew_clicked(){ + //Create Dialog + Gtk::Dialog * dialog = new Gtk::Dialog("Create a folder",*this,Gtk::DIALOG_USE_HEADER_BAR); + dialog->add_button("OK",Gtk::RESPONSE_OK); + dialog->set_default_response(Gtk::RESPONSE_OK); + + //Add Entry + Gtk::Box * pbox = dialog->get_content_area(); + pbox->add(entry_file); + entry_file.set_activates_default(); + + dialog->signal_response().connect(sigc::bind(sigc::mem_fun(*this,&FileWindow::dialog_response),dialog)); + dialog->show_all(); +} + +void FileWindow::btndel_clicked(){ + Glib::ustring tmp; + switch(view_mode){ + case ViewMode::MODE_ICON: + { + auto selected_items = m_iconview.get_selected_items(); + for(auto it = selected_items.begin();it != selected_items.end(); it++){ + auto row = *(m_liststore->get_iter(*it)); + tmp = row[columns.m_col_path] + " delete failed!"; + info_label.set_text(tmp); + m_infobar.show(); + } + selected_items.clear(); + } + break; + case ViewMode::MODE_LIST: + { + auto selected_item = m_treeview.get_selection(); + auto row = *(selected_item->get_selected()); + tmp = row[columns.m_col_path] + " delete failed!"; + info_label.set_text(tmp); + m_infobar.show(); + selected_item.reset(); + } + break; + } +} + +void FileWindow::btnview_clicked(){ + switch(view_mode){ + case ViewMode::MODE_ICON: + stack.set_visible_child(m_treeview); + view_button.set_image_from_icon_name("view-list-symbolic",Gtk::ICON_SIZE_LARGE_TOOLBAR); + view_mode = ViewMode::MODE_LIST; + break; + case ViewMode::MODE_LIST: + stack.set_visible_child(m_iconview); + view_button.set_image_from_icon_name("view-grid-symbolic",Gtk::ICON_SIZE_LARGE_TOOLBAR); + view_mode = ViewMode::MODE_ICON; + break; + } +} + +void FileWindow::infobar_response(int response_id){ + m_infobar.hide(); +} + +void FileWindow::dialog_response(int response_id,Gtk::Dialog * dialog){ + if(response_id == Gtk::RESPONSE_OK){ + Glib::ustring folder_name = entry_file.get_text(); + if(parent_str.length() == 1 && parent_str[0] == '/'){ + folder_name = parent_str + folder_name; + }else{ + folder_name = parent_str + "/" + folder_name; + } + if(g_mkdir_with_parents(folder_name.c_str(),0755) == -1){ + std::cout<<"Error Occured"< +#include +#include + +Game::Game(BaseObjectType *cobject,Glib::RefPtr &tmp_builder) +:Gtk::Window(cobject), +game_builder(tmp_builder), +game_index{0,1,2,3} +{ + //Ininalize Window + game_builder->get_widget("window",game_window); + game_builder->get_widget("btn_exit",btnexit); + game_builder->get_widget("btn_go",btngo); + game_builder->get_widget("label",game_label); + for(int i=0;i<4;i++){ + char str[6]; + sprintf(str,"btn_%d",i+1); + game_builder->get_widget(str,game_btn[i]); + game_btn[i]->signal_clicked().connect(sigc::bind( + sigc::mem_fun(*this,&Game::gamebtn_clicked),&game_index[i])); + } + //Link Signals + btngo->signal_clicked().connect(sigc::mem_fun(*this,&Game::btngo_clicked)); + btnexit->signal_clicked().connect(sigc::mem_fun(*this,&Game::hide)); +} + +void Game::gamebtn_clicked(int *index){ + //Get Current button + int flag; + srand((unsigned)time(NULL)); + flag=rand()%4; + game_btn[flag]->set_image_from_icon_name("My_GtkUI",Gtk::ICON_SIZE_DIALOG); + if(*index==flag){ + game_label->set_label("Good Luck!"); + }else{ + game_label->set_label("The Button is here!"); + } + //Disable Buttons + for(int i=0;i<4;i++){ + game_btn[i]->set_sensitive(false); + } +} + +void Game::btngo_clicked(){ + //Clean Icons showed in button and enable buttons + for(int i=0;i<4;i++){ + game_btn[i]->set_image_from_icon_name(""); + game_btn[i]->set_sensitive(); + } + game_label->set_label("Select a button"); +} + +Game * Game::create(){ + // Load the Builder file and instantiate its widgets. + auto builder = Gtk::Builder::create_from_resource("/org/gtk/daleclack/game1.ui"); + + Game * window = nullptr; + builder->get_widget_derived("window",window); + + return window; +} diff --git a/Gtkmm3_Mac/src/image_app/ImageApp.cc b/Gtkmm3_Mac/src/image_app/ImageApp.cc new file mode 100644 index 0000000..e2b5a99 --- /dev/null +++ b/Gtkmm3_Mac/src/image_app/ImageApp.cc @@ -0,0 +1,174 @@ +#include "ImageApp.hh" + +ImageApp::ImageApp() + : main_box(Gtk::ORIENTATION_VERTICAL, 5), + btnbox(Gtk::ORIENTATION_HORIZONTAL, 5), + btnopen("Open Image") +{ + // Add Widgets + set_default_size(800, 450); + set_icon_name("org.gtk.daleclack"); + set_title("Image Viewer"); + + // Scrolled Window + sw.set_policy(Gtk::POLICY_AUTOMATIC, Gtk::POLICY_AUTOMATIC); + sw.add(image_area); + main_box.pack_start(sw); + + // Initalize Scale + m_adjustment = Gtk::Adjustment::create(1.0, 0.1, 10.0, 0.1, 0.1); + scale.set_default_direction(Gtk::TEXT_DIR_LTR); + scale.set_adjustment(m_adjustment); + scale.signal_value_changed().connect(sigc::mem_fun(*this, &ImageApp::scale_changed)); + + // Add control widgets + btnbox.pack_start(scale); + btnbox.pack_start(btnopen, Gtk::PACK_SHRINK); + main_box.pack_start(btnbox, Gtk::PACK_SHRINK); + btnopen.signal_clicked().connect(sigc::mem_fun(*this, &ImageApp::btnopen_clicked)); + + // Add Drag Gesture + gesture_drag = Gtk::GestureDrag::create(image_area); + gesture_drag->set_button(GDK_BUTTON_PRIMARY); + gesture_drag->signal_drag_update().connect(sigc::mem_fun(*this, &ImageApp::drag_update)); + gesture_drag->signal_drag_end().connect(sigc::mem_fun(*this, &ImageApp::drag_end)); + + gesture_click = Gtk::GestureMultiPress::create(image_area); + gesture_click->set_button(GDK_BUTTON_SECONDARY); + gesture_click->signal_pressed().connect(sigc::mem_fun(*this, &ImageApp::press)); + + // Add Menu + auto builder = Gtk::Builder::create_from_resource("/org/gtk/daleclack/image_appmenu.xml"); + auto object = builder->get_object("model"); + auto gmenu = Glib::RefPtr::cast_dynamic(object); + popover.bind_model(gmenu); + popover.set_relative_to(image_area); + + // Add actions for menu + add_action("zoom_in", sigc::mem_fun(*this, &ImageApp::image_zoom_in)); + add_action("zoom_out", sigc::mem_fun(*this, &ImageApp::image_zoom_out)); + add_action("zoom_reset", sigc::mem_fun(*this, &ImageApp::image_zoom_reset)); + + overlay.add(main_box); + add(overlay); + show_all_children(); +} + +void ImageApp::btnopen_clicked() +{ + // Create a file open 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, &ImageApp::dialog_response)); + + dialog->show(); +} + +void ImageApp::dialog_response(int response_id) +{ + if (response_id == Gtk::RESPONSE_ACCEPT) + { + // Show the image in a drawing area + auto filename = dialog->get_filename(); + auto pixbuf = Gdk::Pixbuf::create_from_file(filename); + image_area.set_pixbuf(pixbuf); + pixbuf.reset(); + // Set Adjustments + if (hadjustment) + { + hadjustment.reset(); + vadjustment.reset(); + } + hadjustment = sw.get_hadjustment(); + vadjustment = sw.get_vadjustment(); + } + + dialog.reset(); +} + +void ImageApp::scale_changed() +{ + // Get Value of scale widget and scale image + double value = scale.get_value(); + // g_print("%f\n", value); + image_area.scale_draw(value); +} + +void ImageApp::press(int n_press, double x, double y) +{ + // Set Popover to the position of mouse and show + popover.set_pointing_to(Gdk::Rectangle(x, y, 1, 1)); + popover.popup(); +} + +void ImageApp::drag_update(double x, double y) +{ + // g_print("drag updated\n"); + move_to(x, y); +} + +void ImageApp::drag_end(double x, double y) +{ + // g_print("drag ended\n"); + move(x, y); +} + +void ImageApp::move_to(double x, double y) +{ + // g_print("%f %f\n",x,y); + // Get Current Value + double h_value = hadjustment->get_value(); + double v_value = vadjustment->get_value(); + // Get Max Value for movement + double hmaxvalue = hadjustment->get_upper(); //- hadjustment->get_page_size(); + double vmaxvalue = hadjustment->get_upper(); //- vadjustment->get_page_size(); + h_value -= x; + v_value -= y; + // Before movement, make sure the value is vaild + if (h_value < 0) + { + h_value = 0; + } + if (h_value > hmaxvalue) + { + h_value = hmaxvalue; + } + // Before movement, make sure the value is vaild + if (v_value < 0) + { + v_value = 0; + } + if (v_value > vmaxvalue) + { + v_value = vmaxvalue; + } + // Perform movement + hadjustment->set_value(h_value); + vadjustment->set_value(v_value); +} + +void ImageApp::image_zoom_in() +{ + // Scale 0.1 More + double value = scale.get_value(); + value += 0.1; + scale.set_value(value); + image_area.scale_draw(value); +} + +void ImageApp::image_zoom_out() +{ + // Scale 0.1 Less + double value = scale.get_value(); + value -= 0.1; + scale.set_value(value); + image_area.scale_draw(value); +} + +void ImageApp::image_zoom_reset() +{ + // Scale as 1:1 + scale.set_value(1.0); + image_area.scale_draw(1.0); +} diff --git a/Gtkmm3_Mac/src/image_app/MyImage.cc b/Gtkmm3_Mac/src/image_app/MyImage.cc new file mode 100644 index 0000000..da7c58a --- /dev/null +++ b/Gtkmm3_Mac/src/image_app/MyImage.cc @@ -0,0 +1,79 @@ +#include "MyImage.hh" + +MyImage::MyImage() + : scale_radio(1.0) +{ +} + +MyImage::~MyImage() +{ +} + +bool MyImage::on_draw(const Cairo::RefPtr &cr) +{ + if (!image) + { + return false; + } + + // Set the default size for drawing area + set_size_request(surface->get_width() * scale_radio, + surface->get_height() * scale_radio); + + cr->scale(scale_radio, scale_radio); + cr->set_source(surface, 0, 0); + + cr->paint(); + + return true; +} + +void MyImage::scale_draw(double scale) +{ + // Set the scale radio and scale + if (scale <= 0) + { + scale_radio = 0.1; + return; + } + if (scale > 10.0) + { + scale_radio = 10.0; + return; + } + scale_radio = scale; + queue_draw(); +} + +void MyImage::set_pixbuf(const Glib::RefPtr &pixbuf) +{ + if (image) + { + image.reset(); + } + + image = pixbuf; + + if (!surface) + { + // Create a surface + surface = Cairo::ImageSurface::create(Cairo::FORMAT_ARGB32, + image->get_width(), image->get_height()); + } + else + { + } + + // Get Image Size + int width = image->get_width(); + int height = image->get_height(); + // Draw the image in the middle of the surface, or (if the image is + // larger than the drawing area) draw the middle part of the image. + auto cr = Cairo::Context::create(surface); + Gdk::Cairo::set_source_pixbuf(cr, image, + (width - image->get_width()) / 2, (height - image->get_height()) / 2); + cr->paint(); + + // ReDraw the draw area + queue_draw(); +} diff --git a/Gtkmm3_Mac/src/image_app/MyImage.hh b/Gtkmm3_Mac/src/image_app/MyImage.hh new file mode 100644 index 0000000..e44ccca --- /dev/null +++ b/Gtkmm3_Mac/src/image_app/MyImage.hh @@ -0,0 +1,22 @@ +#pragma once + +#include + +class MyImage : public Gtk::DrawingArea +{ +public: + MyImage(); + virtual ~MyImage(); + // Set a Pixbuf to draw + void set_pixbuf(const Glib::RefPtr &pixbuf); + // Scale the image + void scale_draw(double scale); + +protected: + bool on_draw(const Cairo::RefPtr &cr) override; + +private: + double scale_radio; + Cairo::RefPtr surface; + Glib::RefPtr image; +}; diff --git a/Gtkmm3_Mac/src/run_app/Runner.cc b/Gtkmm3_Mac/src/run_app/Runner.cc new file mode 100644 index 0000000..ff53c25 --- /dev/null +++ b/Gtkmm3_Mac/src/run_app/Runner.cc @@ -0,0 +1,68 @@ +#include "Runner.hh" +#include +#include + +GtkRunner::GtkRunner(): +hbox(Gtk::ORIENTATION_HORIZONTAL,5), +open_btn("...") +{ + //Ininalize window + set_title("Run a Application"); + set_default_size(300,150); + add_button("OK",Gtk::RESPONSE_OK); + add_button("Cancel",Gtk::RESPONSE_CANCEL); + set_default_response(Gtk::RESPONSE_OK); + + //Initalize Box + hbox.set_halign(Gtk::ALIGN_CENTER); + hbox.set_valign(Gtk::ALIGN_CENTER); + hbox.pack_start(app_entry,Gtk::PACK_SHRINK); + hbox.pack_start(open_btn,Gtk::PACK_SHRINK); + + //Initalize entry + app_entry.set_activates_default(); + app_entry.set_text("vlc"); + + open_btn.signal_clicked().connect(sigc::mem_fun(*this,&GtkRunner::file_dialog)); + + //Add Widgets + auto pbox=get_content_area(); + pbox->pack_start(hbox); +} + +void GtkRunner::on_response(int response_id){ + if(response_id==Gtk::RESPONSE_OK){ + //Start The Application + Glib::ustring program=app_entry.get_text(); + std::thread first(system,program.c_str()); + first.detach(); + } + hide(); +} + +void GtkRunner::file_dialog(){ + dialog=Gtk::FileChooserNative::create("Open a program", + Gtk::FILE_CHOOSER_ACTION_OPEN,"OK","Cancel"); + + dialog->signal_response().connect(sigc::mem_fun(*this,&GtkRunner::dialog_response)); + + auto filter_app=Gtk::FileFilter::create(); + filter_app->set_name("Applications"); + filter_app->add_mime_type("application/*"); + dialog->add_filter(filter_app); + + auto filter_any=Gtk::FileFilter::create(); + filter_any->set_name("Any Files"); + filter_any->add_pattern("*"); + dialog->add_filter(filter_any); + + dialog->show(); +} + +void GtkRunner::dialog_response(int response){ + if(response==Gtk::RESPONSE_ACCEPT){ + Glib::ustring filename=dialog->get_filename(); + app_entry.set_text(filename); + } + dialog.reset(); +} diff --git a/Gtkmm3_Mac/src/text_app/TextEditor.cc b/Gtkmm3_Mac/src/text_app/TextEditor.cc new file mode 100644 index 0000000..5f05f8c --- /dev/null +++ b/Gtkmm3_Mac/src/text_app/TextEditor.cc @@ -0,0 +1,193 @@ +#include "TextEditor.hh" +#include "text_types.hh" +#include + +TextEditor::TextEditor() +:vbox(Gtk::ORIENTATION_VERTICAL,5), +hbox(Gtk::ORIENTATION_HORIZONTAL,5), +btnbox(Gtk::ORIENTATION_VERTICAL,5), +btn_copy("Copy"), +btn_paste("Paste"), +btn_open("Open"), +btn_save("Save"), +btn_clear("Clear") +{ + //Initalize Window + set_default_size(800,450); + set_icon_name("My_GtkUI"); + set_title("Simple Text Editor"); + + //Initalize Text Buffers + buffer1=textview1.get_buffer(); + buffer1->signal_changed().connect(sigc::mem_fun(*this,&TextEditor::buffer1_changed)); + + //Pack Widgets + sw1.set_policy(Gtk::POLICY_AUTOMATIC,Gtk::POLICY_AUTOMATIC); + sw1.add(textview1); + btnbox.set_valign(Gtk::ALIGN_CENTER); + btnbox.pack_start(btn_copy,Gtk::PACK_SHRINK); + btnbox.pack_start(btn_paste,Gtk::PACK_SHRINK); + btnbox.pack_start(btn_open,Gtk::PACK_SHRINK); + btnbox.pack_start(btn_save,Gtk::PACK_SHRINK); + btnbox.pack_start(btn_clear,Gtk::PACK_SHRINK); + hbox.pack_start(sw1); + hbox.pack_start(btnbox,Gtk::PACK_SHRINK); + + btn_open.signal_clicked().connect(sigc::mem_fun(*this,&TextEditor::btnopen_clicked)); + btn_save.signal_clicked().connect(sigc::mem_fun(*this,&TextEditor::btnsave_clicked)); + btn_copy.signal_clicked().connect(sigc::mem_fun(*this,&TextEditor::btncopy_clicked)); + btn_paste.signal_clicked().connect(sigc::mem_fun(*this,&TextEditor::btnpaste_clicked)); + btn_clear.signal_clicked().connect(sigc::mem_fun(*this,&TextEditor::btnclear_clicked)); + + //A InfoBar + infobar.add_button("OK",Gtk::RESPONSE_OK); + infobar.signal_response().connect(sigc::mem_fun(*this,&TextEditor::infobar_response)); + infobox=dynamic_cast(infobar.get_content_area()); + infobox->pack_start(label1); + vbox.pack_start(infobar,Gtk::PACK_SHRINK); + + //Disable Copy button + btn_copy.set_sensitive(false); + + //Show everything + vbox.pack_start(hbox); + add(vbox); + show_all_children(); + infobar.hide(); +} + +void TextEditor::btnopen_clicked(){ + //Create a dialog + dialog=Gtk::FileChooserNative::create("Open a text file",*this, + Gtk::FILE_CHOOSER_ACTION_OPEN,"OK","Cancel"); + + dialog->signal_response().connect(sigc::mem_fun(*this,&TextEditor::opendialog_response)); + + //Add Filters + auto filter=Gtk::FileFilter::create(); + filter->set_name("Text Files"); + if(mimetype_supported()){ + filter->add_mime_type("text/*"); + }else{ + for(int i = 0; text_globs != NULL && text_globs[i] != NULL; i++){ + const char *glob = text_globs[i]; + filter->add_pattern(glob); + } + } + dialog->add_filter(filter); + + auto filter_any=Gtk::FileFilter::create(); + filter_any->set_name("Any Files"); + filter_any->add_pattern("*"); + dialog->add_filter(filter_any); + + dialog->show(); +} + +void TextEditor::opendialog_response(int response){ + if(response==Gtk::RESPONSE_ACCEPT){ + //Load Contents of a file + auto file=dialog->get_file(); + char * contents; + gsize length; + if(file->load_contents(contents,length)){ + buffer1->set_text(contents); + } + } + dialog.reset(); +} + +void TextEditor::btnsave_clicked(){ + //Create a dialog + dialog=Gtk::FileChooserNative::create("Save file",*this, + Gtk::FILE_CHOOSER_ACTION_SAVE,"OK","Cancel"); + + dialog->signal_response().connect(sigc::mem_fun(*this,&TextEditor::savedialog_response)); + + //Add Filters + auto filter=Gtk::FileFilter::create(); + filter->set_name("Text Files"); + if(mimetype_supported()){ + filter->add_mime_type("text/*"); + }else{ + for(int i = 0; text_globs != NULL && text_globs[i] != NULL; i++){ + const char *glob = text_globs[i]; + filter->add_pattern(glob); + } + } + dialog->add_filter(filter); + + auto filter_any=Gtk::FileFilter::create(); + filter_any->set_name("Any Files"); + filter_any->add_pattern("*"); + dialog->add_filter(filter_any); + + dialog->show(); +} + +void TextEditor::savedialog_response(int response){ + if(response==Gtk::RESPONSE_ACCEPT){ + //Get Filename + auto file=dialog->get_file(); + std::string filename=file->get_path(); + //Get Text + Glib::ustring text; + text=buffer1->get_text(); + //Save to a file + std::ofstream outfile; + outfile.open(filename,std::ios_base::out); + outfile<get_selection_bounds(start,end)){ + text=buffer1->get_text(start,end); + }else{ + text=buffer1->get_text(); + } + + //Get Clipboard and set text + auto refClipboard=Gtk::Clipboard::get(); + refClipboard->set_text(text); + + //Show InfoBar + label1.set_label("The Text is copyed"); + infobar.show(); +} + +void TextEditor::btnpaste_clicked(){ + //Get ClipBoard + auto refClipboard=Gtk::Clipboard::get(); + refClipboard->request_text(sigc::mem_fun(*this,&TextEditor::clipboard_receive)); +} + +void TextEditor::clipboard_receive(const Glib::ustring &text){ + if(buffer1->insert_interactive_at_cursor(text)){ + //Show InfoBar + label1.set_label("The Text is Pasted at cursor position"); + infobar.show(); + }else{ + //Show InfoBar + label1.set_label("Text Paste Error!"); + infobar.show(); + } +} + +void TextEditor::btnclear_clicked(){ + buffer1->set_text(""); +} + +void TextEditor::infobar_response(int response){ + infobar.hide(); +} diff --git a/Gtkmm3_Mac/src/ui/MyDock.cc b/Gtkmm3_Mac/src/ui/MyDock.cc index 5f5eaab..8568483 100644 --- a/Gtkmm3_Mac/src/ui/MyDock.cc +++ b/Gtkmm3_Mac/src/ui/MyDock.cc @@ -9,35 +9,70 @@ MyDock::MyDock(BaseObjectType *cobject, const Glib::RefPtr &ref_Gl // Get Widgets ref_builder->get_widget("finder_box", finder_box); ref_builder->get_widget("dock_box", dock_box); - ref_builder->get_widget("btnlaunch",btnlaunch); - ref_builder->get_widget("btndraw",btndraw); - ref_builder->get_widget("btnfiles",btnfiles); - ref_builder->get_widget("btngame",btngame); - ref_builder->get_widget("btnedit",btnedit); - ref_builder->get_widget("btnimage",btnimage); - ref_builder->get_widget("btnset",btnset); - ref_builder->get_widget("separator_start",separator_start); - ref_builder->get_widget("separator_end",separator_end); - ref_builder->get_widget("launchpad_stack",launchpad_stack); - ref_builder->get_widget("default_page",default_page); - ref_builder->get_widget("launchpad_page",launchpad_page); - ref_builder->get_widget("padaud",padaud); - ref_builder->get_widget("padgedit",padgedit); - ref_builder->get_widget("padvlc",padvlc); - ref_builder->get_widget("padnote",padnote); - ref_builder->get_widget("padvlc_win32",padvlc_win32); - ref_builder->get_widget("padset",padset); + ref_builder->get_widget("btnlaunch", btnlaunch); + ref_builder->get_widget("btndraw", btndraw); + ref_builder->get_widget("btnfiles", btnfiles); + ref_builder->get_widget("btngame", btngame); + ref_builder->get_widget("btnedit", btnedit); + ref_builder->get_widget("btnimage", btnimage); + ref_builder->get_widget("btnset", btnset); + ref_builder->get_widget("separator_start", separator_start); + ref_builder->get_widget("separator_end", separator_end); + ref_builder->get_widget("launchpad_stack", launchpad_stack); + ref_builder->get_widget("default_page", default_page); + ref_builder->get_widget("launchpad_page", launchpad_page); + ref_builder->get_widget("padaud", padaud); + ref_builder->get_widget("padgedit", padgedit); + ref_builder->get_widget("padvlc", padvlc); + ref_builder->get_widget("padnote", padnote); + ref_builder->get_widget("padvlc_win32", padvlc_win32); + ref_builder->get_widget("padset", padset); + ref_builder->get_widget("paddraw", paddraw); + ref_builder->get_widget("padfile", padfile); + ref_builder->get_widget("paddraw", paddraw); + ref_builder->get_widget("padgame", padgame); + ref_builder->get_widget("padimage", padimage); + ref_builder->get_widget("padedit", padedit); + ref_builder->get_widget("padrun", padrun); + + // Create window + game_win = Game::create(); // Link signals - btnlaunch->signal_clicked().connect(sigc::mem_fun(*this,&MyDock::btnlaunch_clicked)); - padaud->signal_clicked().connect(sigc::mem_fun(*this,&MyDock::padaud_clicked)); - padgedit->signal_clicked().connect(sigc::mem_fun(*this,&MyDock::padgedit_clicked)); - padvlc->signal_clicked().connect(sigc::mem_fun(*this,&MyDock::padvlc_clicked)); - padnote->signal_clicked().connect(sigc::mem_fun(*this,&MyDock::padnote_clicked)); - padvlc_win32->signal_clicked().connect(sigc::mem_fun(*this,&MyDock::padvlc_win32_clicked)); - 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)); + btnlaunch->signal_clicked().connect(sigc::mem_fun(*this, &MyDock::btnlaunch_clicked)); + padaud->signal_clicked().connect(sigc::mem_fun(*this, &MyDock::padaud_clicked)); + padgedit->signal_clicked().connect(sigc::mem_fun(*this, &MyDock::padgedit_clicked)); + padvlc->signal_clicked().connect(sigc::mem_fun(*this, &MyDock::padvlc_clicked)); + padnote->signal_clicked().connect(sigc::mem_fun(*this, &MyDock::padnote_clicked)); + padvlc_win32->signal_clicked().connect(sigc::mem_fun(*this, &MyDock::padvlc_win32_clicked)); + padrun->signal_clicked().connect(sigc::mem_fun(*this, &MyDock::btnrun_clicked)); + + 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)); + + btndraw->signal_clicked().connect(sigc::mem_fun(*this, &MyDock::btndraw_clicked)); + paddraw->signal_clicked().connect(sigc::mem_fun(*this, &MyDock::paddraw_clicked)); + draw_app.signal_delete_event().connect(sigc::mem_fun(*this, &MyDock::draw_win_closed)); + + btnfiles->signal_clicked().connect(sigc::mem_fun(*this, &MyDock::btnfile_clicked)); + padfile->signal_clicked().connect(sigc::mem_fun(*this, &MyDock::padfile_clicked)); + file_app.signal_delete_event().connect(sigc::mem_fun(*this, &MyDock::file_win_closed)); + + btngame->signal_clicked().connect(sigc::mem_fun(*this, &MyDock::btngame_clicked)); + padgame->signal_clicked().connect(sigc::mem_fun(*this, &MyDock::padgame_clicked)); + game_win->signal_delete_event().connect(sigc::mem_fun(*this, &MyDock::game_win_closed)); + game_win->signal_hide().connect(sigc::mem_fun(*this, &MyDock::game_win_hide)); + + btnimage->signal_clicked().connect(sigc::mem_fun(*this, &MyDock::btnimage_clicked)); + padimage->signal_clicked().connect(sigc::mem_fun(*this, &MyDock::padimage_clicked)); + image_win.signal_delete_event().connect(sigc::mem_fun(*this, &MyDock::image_win_closed)); + + btnedit->signal_clicked().connect(sigc::mem_fun(*this, &MyDock::btnedit_clicked)); + padedit->signal_clicked().connect(sigc::mem_fun(*this, &MyDock::padedit_clicked)); + editor_win.signal_delete_event().connect(sigc::mem_fun(*this, &MyDock::editor_win_closed)); + + // Add Finder finder_box->pack_start(finder); // Add Style for MyFinder @@ -46,18 +81,22 @@ MyDock::MyDock(BaseObjectType *cobject, const Glib::RefPtr &ref_Gl auto style = dock_box->get_style_context(); style->add_provider(provider, G_MAXUINT); auto style1 = launchpad_page->get_style_context(); - style1->add_provider(provider,G_MAXUINT); + style1->add_provider(provider, G_MAXUINT); auto style2 = separator_end->get_style_context(); - style2->add_provider(provider,G_MAXUINT); + style2->add_provider(provider, G_MAXUINT); show_all_children(); } -void MyDock::btnlaunch_clicked(){ - if(launchpad_shown){ +void MyDock::btnlaunch_clicked() +{ + if (launchpad_shown) + { launchpad_stack->set_visible_child(*default_page); launchpad_shown = false; - }else{ + } + else + { launchpad_stack->set_visible_child(*launchpad_page); launchpad_shown = true; } @@ -71,75 +110,192 @@ void MyDock::mydock_init(Gtk::Window *window, Gtk::Image *background1) parent_win = window; } -void MyDock::padaud_clicked(){ - std::thread first(system,"audacious"); +void MyDock::padaud_clicked() +{ + std::thread first(system, "audacious"); first.detach(); btnlaunch_clicked(); } -void MyDock::padgedit_clicked(){ - std::thread second(system,"gedit"); +void MyDock::padgedit_clicked() +{ + std::thread second(system, "gedit"); second.detach(); btnlaunch_clicked(); } -void MyDock::padvlc_clicked(){ - std::thread third(system,"vlc"); +void MyDock::padvlc_clicked() +{ + std::thread third(system, "vlc"); third.detach(); btnlaunch_clicked(); } -void MyDock::padvlc_win32_clicked(){ - std::thread fourth(system,"start notepad"); +void MyDock::padvlc_win32_clicked() +{ + std::thread fourth(system, "start notepad"); fourth.detach(); btnlaunch_clicked(); } -void MyDock::padnote_clicked(){ - std::thread fifth(system,"start ..\\vlc\\vlc.exe"); +void MyDock::padnote_clicked() +{ + std::thread fifth(system, "start ..\\vlc\\vlc.exe"); fifth.detach(); btnlaunch_clicked(); } -bool MyDock::prefs_win_closed(GdkEventAny * event){ - btnset->set_image_from_icon_name("my_prefs",Gtk::ICON_SIZE_DIALOG); +bool MyDock::prefs_win_closed(GdkEventAny *event) +{ + btnset->set_image_from_icon_name("my_prefs", Gtk::ICON_SIZE_DIALOG); prefs_win.hide(); return true; } void MyDock::btnset_clicked() { - btnset->set_image_from_icon_name("my_prefs_running",Gtk::ICON_SIZE_DIALOG); + btnset->set_image_from_icon_name("my_prefs_running", Gtk::ICON_SIZE_DIALOG); window_ctrl(prefs_win); } -void MyDock::padset_clicked(){ - btnset->set_image_from_icon_name("my_prefs_running",Gtk::ICON_SIZE_DIALOG); - window_ctrl(prefs_win,false); +void MyDock::padset_clicked() +{ + btnset->set_image_from_icon_name("my_prefs_running", Gtk::ICON_SIZE_DIALOG); + window_ctrl(prefs_win, false); } -void MyDock::window_ctrl(Gtk::Window &window, bool on_dock){ +bool MyDock::draw_win_closed(GdkEventAny *event) +{ + btndraw->set_image_from_icon_name("drawing_app", Gtk::ICON_SIZE_DIALOG); + draw_app.hide(); + return true; +} + +void MyDock::btndraw_clicked() +{ + btndraw->set_image_from_icon_name("drawing_app_running", Gtk::ICON_SIZE_DIALOG); + window_ctrl(draw_app); +} + +void MyDock::paddraw_clicked() +{ + btndraw->set_image_from_icon_name("drawing_app_running", Gtk::ICON_SIZE_DIALOG); + window_ctrl(draw_app, false); +} + +bool MyDock::file_win_closed(GdkEventAny *event) +{ + btnfiles->set_image_from_icon_name("file-app", Gtk::ICON_SIZE_DIALOG); + file_app.hide(); + return true; +} + +void MyDock::btnfile_clicked() +{ + btnfiles->set_image_from_icon_name("file-app_running", Gtk::ICON_SIZE_DIALOG); + window_ctrl(file_app); +} +void MyDock::padfile_clicked() +{ + btnfiles->set_image_from_icon_name("file-app_running", Gtk::ICON_SIZE_DIALOG); + window_ctrl(file_app, false); +} + +bool MyDock::game_win_closed(GdkEventAny *event) +{ + btngame->set_image_from_icon_name("game", Gtk::ICON_SIZE_DIALOG); + game_win->hide(); + return true; +} + +void MyDock::game_win_hide() +{ + btngame->set_image_from_icon_name("game", Gtk::ICON_SIZE_DIALOG); + game_win->hide(); +} + +void MyDock::btngame_clicked() +{ + btngame->set_image_from_icon_name("game_running", Gtk::ICON_SIZE_DIALOG); + window_ctrl(*game_win); +} + +void MyDock::padgame_clicked() +{ + btngame->set_image_from_icon_name("game_running", Gtk::ICON_SIZE_DIALOG); + window_ctrl(*game_win, false); +} + +bool MyDock::image_win_closed(GdkEventAny *event) +{ + btnimage->set_image_from_icon_name("image_app", Gtk::ICON_SIZE_DIALOG); + image_win.hide(); + return true; +} + +void MyDock::btnimage_clicked() +{ + btnimage->set_image_from_icon_name("image_app_running", Gtk::ICON_SIZE_DIALOG); + window_ctrl(image_win); +} +void MyDock::padimage_clicked() +{ + btnimage->set_image_from_icon_name("image_app_running", Gtk::ICON_SIZE_DIALOG); + window_ctrl(image_win, false); +} + +bool MyDock::editor_win_closed(GdkEventAny *event) +{ + btnedit->set_image_from_icon_name("my_textedit", Gtk::ICON_SIZE_DIALOG); + editor_win.hide(); + return true; +} + +void MyDock::btnedit_clicked() +{ + btnedit->set_image_from_icon_name("my_textedit_running", Gtk::ICON_SIZE_DIALOG); + window_ctrl(editor_win); +} +void MyDock::padedit_clicked() +{ + btnedit->set_image_from_icon_name("my_textedit_running", Gtk::ICON_SIZE_DIALOG); + window_ctrl(editor_win, false); +} + +void MyDock::btnrun_clicked() +{ + runner1.show(); +} + +void MyDock::window_ctrl(Gtk::Window &window, bool on_dock) +{ auto gdk_win = window.get_window(); - if(gdk_win){ + if (gdk_win) + { auto state = gdk_win->get_state(); - switch(state){ - case Gdk::WINDOW_STATE_WITHDRAWN: - window.show_all(); + switch (state) + { + case Gdk::WINDOW_STATE_WITHDRAWN: + 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; - 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.show_all(); - } + } + else + { + window.set_transient_for(*parent_win); + window.present(); + } } MyDock *MyDock::create() diff --git a/Gtkmm3_Mac/src/ui/MyDock.hh b/Gtkmm3_Mac/src/ui/MyDock.hh index 503b851..a29e05e 100644 --- a/Gtkmm3_Mac/src/ui/MyDock.hh +++ b/Gtkmm3_Mac/src/ui/MyDock.hh @@ -3,6 +3,12 @@ #include #include "MyFinder.hh" #include "MyPrefs.hh" +#include "drawing.hh" +#include "FileWindow.hh" +#include "Game.hh" +#include "ImageApp.hh" +#include "Runner.hh" +#include "TextEditor.hh" class MyDock : public Gtk::Box { @@ -33,6 +39,41 @@ private: // Window Preferences MyPrefs prefs_win; bool prefs_win_closed(GdkEventAny *event); + void padset_clicked(); + + // Drawing Window + Drawing draw_app; + bool draw_win_closed(GdkEventAny *event); + void btndraw_clicked(); + void paddraw_clicked(); + + // Finder + FileWindow file_app; + bool file_win_closed(GdkEventAny *event); + void btnfile_clicked(); + void padfile_clicked(); + + // Guess Game + Game *game_win; + bool game_win_closed(GdkEventAny *event); + void game_win_hide(); + void btngame_clicked(); + void padgame_clicked(); + + // Image Viewer + ImageApp image_win; + bool image_win_closed(GdkEventAny *event); + void btnimage_clicked(); + void padimage_clicked(); + + // Text Editor + TextEditor editor_win; + bool editor_win_closed(GdkEventAny *event); + void btnedit_clicked(); + void padedit_clicked(); + + // A Simple Runner + GtkRunner runner1; // Window Control void window_ctrl(Gtk::Window &window, bool on_dock = true); @@ -49,5 +90,5 @@ private: void padvlc_clicked(); void padvlc_win32_clicked(); void padnote_clicked(); - void padset_clicked(); + void btnrun_clicked(); };