From 30a13996893ba5883ea22529642736bb1c72f227 Mon Sep 17 00:00:00 2001 From: daleclack Date: Thu, 27 Jan 2022 14:14:04 +0800 Subject: [PATCH] Add timer --- Gtkmm3_Mac/res/mainmenu.xml | 41 ++++++++++++++++++- Gtkmm3_Mac/src/core/MyWin.cc | 15 +++++++ Gtkmm3_Mac/src/core/MyWin.hh | 6 ++- Gtkmm3_Mac/src/ui/MyFinder.cc | 75 +++++++++++++++++++++++------------ Gtkmm3_Mac/src/ui/MyFinder.hh | 1 + 5 files changed, 111 insertions(+), 27 deletions(-) diff --git a/Gtkmm3_Mac/res/mainmenu.xml b/Gtkmm3_Mac/res/mainmenu.xml index 392a181..9128618 100644 --- a/Gtkmm3_Mac/res/mainmenu.xml +++ b/Gtkmm3_Mac/res/mainmenu.xml @@ -2,7 +2,46 @@
- + + New Folder + +
+
+ + Show Info + + + Change Background + +
+
+ + Automater + + + Automater method + + Name + + + Date Modified + + + Date Created + + + Size + + + Kind + + + Label + + + + Show View Options +
diff --git a/Gtkmm3_Mac/src/core/MyWin.cc b/Gtkmm3_Mac/src/core/MyWin.cc index 0c6d304..85226f1 100644 --- a/Gtkmm3_Mac/src/core/MyWin.cc +++ b/Gtkmm3_Mac/src/core/MyWin.cc @@ -25,11 +25,26 @@ MyWin::MyWin() //Add context menu auto menubuilder = Gtk::Builder::create_from_resource("/org/gtk/daleclack/mainmenu.xml"); + auto object = menubuilder->get_object("model"); + auto gmenu = Glib::RefPtr::cast_dynamic(object); + context_menu.bind_model(gmenu); + context_menu.set_relative_to(m_overlay); + + //Add Gesture for control + gesture = Gtk::GestureMultiPress::create(m_overlay); + gesture->set_button(GDK_BUTTON_SECONDARY); + gesture->signal_pressed().connect(sigc::mem_fun(*this,&MyWin::press)); add(m_overlay); show_all_children(); } +void MyWin::press(int n_press,double x,double y){ + //Show Menu + context_menu.set_pointing_to(Gdk::Rectangle((int)x,(int)y,1,1)); + context_menu.popup(); +} + void MyWin::logout_activated(){ main_stack.logout(); } diff --git a/Gtkmm3_Mac/src/core/MyWin.hh b/Gtkmm3_Mac/src/core/MyWin.hh index 4feb32f..a5bd879 100644 --- a/Gtkmm3_Mac/src/core/MyWin.hh +++ b/Gtkmm3_Mac/src/core/MyWin.hh @@ -11,7 +11,11 @@ private: Gtk::Overlay m_overlay; Gtk::Image m_background; Gtk::Box menubox; - Gtk::DrawingArea draw_area; + Gtk::Popover context_menu; + + //Gesture Control + Glib::RefPtr gesture; + void press(int n_press,double x,double y); //Main Stack MyStack main_stack; diff --git a/Gtkmm3_Mac/src/ui/MyFinder.cc b/Gtkmm3_Mac/src/ui/MyFinder.cc index 2191711..7c92e75 100644 --- a/Gtkmm3_Mac/src/ui/MyFinder.cc +++ b/Gtkmm3_Mac/src/ui/MyFinder.cc @@ -1,63 +1,65 @@ #include "MyFinder.hh" +#include -MyFinder::MyFinder(){ - //Add a menubar +MyFinder::MyFinder() +{ + // Add a menubar auto menubuilder = Gtk::Builder::create_from_resource("/org/gtk/daleclack/menubar.xml"); - //Add widgets to menubox - btnlogo.set_image_from_icon_name("My_GtkUI",Gtk::ICON_SIZE_BUTTON); + // Add widgets to menubox + btnlogo.set_image_from_icon_name("My_GtkUI", Gtk::ICON_SIZE_BUTTON); btnlogo.set_relief(Gtk::RELIEF_NONE); btnlogo.set_use_popover(false); - btnlogo.set_menu_model(get_menu(menubuilder,"main_menu")); - pack_start(btnlogo,Gtk::PACK_SHRINK); + btnlogo.set_menu_model(get_menu(menubuilder, "main_menu")); + pack_start(btnlogo, Gtk::PACK_SHRINK); btntitle.set_label("MyFinder"); btntitle.set_relief(Gtk::RELIEF_NONE); btntitle.set_use_popover(false); - btntitle.set_menu_model(get_menu(menubuilder,"title_menu")); - pack_start(btntitle,Gtk::PACK_SHRINK); + btntitle.set_menu_model(get_menu(menubuilder, "title_menu")); + pack_start(btntitle, Gtk::PACK_SHRINK); btnfile.set_label("File"); btnfile.set_relief(Gtk::RELIEF_NONE); btnfile.set_use_popover(false); - btnfile.set_menu_model(get_menu(menubuilder,"menu_file")); - pack_start(btnfile,Gtk::PACK_SHRINK); + btnfile.set_menu_model(get_menu(menubuilder, "menu_file")); + pack_start(btnfile, Gtk::PACK_SHRINK); btnedit.set_label("Edit"); btnedit.set_relief(Gtk::RELIEF_NONE); btnedit.set_use_popover(false); - btnedit.set_menu_model(get_menu(menubuilder,"menu_edit")); - pack_start(btnedit,Gtk::PACK_SHRINK); + btnedit.set_menu_model(get_menu(menubuilder, "menu_edit")); + pack_start(btnedit, Gtk::PACK_SHRINK); btnshow.set_label("Show"); btnshow.set_relief(Gtk::RELIEF_NONE); btnshow.set_use_popover(false); - btnshow.set_menu_model(get_menu(menubuilder,"menu_show")); - pack_start(btnshow,Gtk::PACK_SHRINK); + btnshow.set_menu_model(get_menu(menubuilder, "menu_show")); + pack_start(btnshow, Gtk::PACK_SHRINK); btngoto.set_label("Go to"); btngoto.set_relief(Gtk::RELIEF_NONE); btngoto.set_use_popover(false); - btngoto.set_menu_model(get_menu(menubuilder,"menu_goto")); - pack_start(btngoto,Gtk::PACK_SHRINK); + btngoto.set_menu_model(get_menu(menubuilder, "menu_goto")); + pack_start(btngoto, Gtk::PACK_SHRINK); btnwin.set_label("Windows"); btnwin.set_relief(Gtk::RELIEF_NONE); btnwin.set_use_popover(false); - btnwin.set_menu_model(get_menu(menubuilder,"menu_win")); - pack_start(btnwin,Gtk::PACK_SHRINK); + btnwin.set_menu_model(get_menu(menubuilder, "menu_win")); + pack_start(btnwin, Gtk::PACK_SHRINK); btnhelp.set_label("Help"); btnhelp.set_relief(Gtk::RELIEF_NONE); btnhelp.set_use_popover(false); - btnhelp.set_menu_model(get_menu(menubuilder,"menu_help")); - pack_start(btnhelp,Gtk::PACK_SHRINK); + btnhelp.set_menu_model(get_menu(menubuilder, "menu_help")); + pack_start(btnhelp, Gtk::PACK_SHRINK); - //Add menu to window + // Add menu to window set_halign(Gtk::ALIGN_FILL); set_valign(Gtk::ALIGN_START); - //Add a timer + // Add a timer time_popover.add(calender); calender.show(); calender.set_margin_bottom(5); @@ -65,14 +67,37 @@ MyFinder::MyFinder(){ calender.set_margin_start(5); calender.set_margin_end(5); - //Timer + // Timer timer_button.set_label("2022/1/23 18:32"); timer_button.set_relief(Gtk::RELIEF_NONE); timer_button.set_popover(time_popover); - pack_end(timer_button,Gtk::PACK_SHRINK); + pack_end(timer_button, Gtk::PACK_SHRINK); + + mytimer = Glib::signal_timeout().connect(sigc::mem_fun(*this, &MyFinder::time_out), 1000); } -Glib::RefPtr MyFinder::get_menu(Glib::RefPtr &builder, const Glib::ustring &id){ +bool MyFinder::time_out() +{ + + char time_string[57]; + + // Get local time + time_t t; + struct tm *local; + t = time(NULL); + local = localtime(&t); + + // Format the time to show + sprintf(time_string, "%04d/%d/%d %02d:%02d:%02d", local->tm_year + 1900, local->tm_mon + 1, + local->tm_mday, local->tm_hour, local->tm_min, local->tm_sec); + + timer_button.set_label(time_string); + + return true; +} + +Glib::RefPtr MyFinder::get_menu(Glib::RefPtr &builder, const Glib::ustring &id) +{ auto object = builder->get_object(id); auto gmenu = Glib::RefPtr::cast_dynamic(object); return gmenu; diff --git a/Gtkmm3_Mac/src/ui/MyFinder.hh b/Gtkmm3_Mac/src/ui/MyFinder.hh index 844db8c..1625e46 100644 --- a/Gtkmm3_Mac/src/ui/MyFinder.hh +++ b/Gtkmm3_Mac/src/ui/MyFinder.hh @@ -20,4 +20,5 @@ private: //Timer sigc::connection mytimer; + bool time_out(); };