Add timer

This commit is contained in:
daleclack 2022-01-27 14:14:04 +08:00
parent 5e8109aa0a
commit 30a1399689
5 changed files with 111 additions and 27 deletions

View File

@ -2,7 +2,46 @@
<interface>
<menu id="model">
<section>
<item>
<attribute name="label">New Folder</attribute>
</item>
</section>
<section>
<item>
<attribute name="label">Show Info</attribute>
</item>
<item>
<attribute name="label">Change Background</attribute>
</item>
</section>
<section>
<item>
<attribute name="label">Automater</attribute>
</item>
<submenu>
<attribute name="label">Automater method</attribute>
<item>
<attribute name="label">Name</attribute>
</item>
<item>
<attribute name="label">Date Modified</attribute>
</item>
<item>
<attribute name="label">Date Created</attribute>
</item>
<item>
<attribute name="label">Size</attribute>
</item>
<item>
<attribute name="label">Kind</attribute>
</item>
<item>
<attribute name="label">Label</attribute>
</item>
</submenu>
<item>
<attribute name="label">Show View Options</attribute>
</item>
</section>
</menu>
</interface>

View File

@ -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<Gio::Menu>::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();
}

View File

@ -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<Gtk::GestureMultiPress> gesture;
void press(int n_press,double x,double y);
//Main Stack
MyStack main_stack;

View File

@ -1,63 +1,65 @@
#include "MyFinder.hh"
#include <ctime>
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<Gio::Menu> MyFinder::get_menu(Glib::RefPtr<Gtk::Builder> &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<Gio::Menu> MyFinder::get_menu(Glib::RefPtr<Gtk::Builder> &builder, const Glib::ustring &id)
{
auto object = builder->get_object(id);
auto gmenu = Glib::RefPtr<Gio::Menu>::cast_dynamic(object);
return gmenu;

View File

@ -20,4 +20,5 @@ private:
//Timer
sigc::connection mytimer;
bool time_out();
};