Add support for panel mode

This commit is contained in:
daleclack 2022-11-11 23:32:19 +08:00
parent f2acd6ba9f
commit b613614552
8 changed files with 164 additions and 84 deletions

View File

@ -251,6 +251,7 @@
<property name="height-request">340</property> <property name="height-request">340</property>
<property name="visible">True</property> <property name="visible">True</property>
<property name="can-focus">True</property> <property name="can-focus">True</property>
<property name="vexpand">True</property>
<property name="hscrollbar-policy">never</property> <property name="hscrollbar-policy">never</property>
<property name="shadow-type">in</property> <property name="shadow-type">in</property>
<child> <child>
@ -464,6 +465,7 @@
<property name="height-request">5</property> <property name="height-request">5</property>
<property name="visible">True</property> <property name="visible">True</property>
<property name="can-focus">False</property> <property name="can-focus">False</property>
<property name="halign">end</property>
<style> <style>
<class name="separator1"/> <class name="separator1"/>
</style> </style>

View File

@ -1,39 +1,57 @@
#include "MyStack.hh" #include "MyStack.hh"
#include <iostream>
MyStack::MyStack(){ MyStack::MyStack()
{
// Get Widgets // Get Widgets
stackbuilder = Gtk::Builder::create_from_resource("/org/gtk/daleclack/stack.ui"); stackbuilder = Gtk::Builder::create_from_resource("/org/gtk/daleclack/stack.ui");
stackbuilder->get_widget("main_stack",stack); stackbuilder->get_widget("main_stack", stack);
stackbuilder->get_widget("login_page",login_page); stackbuilder->get_widget("login_page", login_page);
stackbuilder->get_widget("main_page",main_page); stackbuilder->get_widget("main_page", main_page);
stackbuilder->get_widget("btnlogin",btnlogin); stackbuilder->get_widget("btnlogin", btnlogin);
// Link Signals // Link Signals
btnlogin->signal_clicked().connect(sigc::mem_fun(*this,&MyStack::btnlogin_clicked)); btnlogin->signal_clicked().connect(sigc::mem_fun(*this, &MyStack::btnlogin_clicked));
}
//Add Widget void MyStack::mystack_init(Gtk::Window *window, Gtk::Image *m_back)
main_dock = MyDock::create(); {
main_dock->mydock_init(window, m_back);
}
void MyStack::show_prefs()
{
main_dock->btnset_clicked();
}
void MyStack::logout()
{
stack->set_visible_child(*login_page);
}
void MyStack::btnlogin_clicked()
{
stack->set_visible_child(*main_page);
}
void MyStack::set_mydock_mode(DockMode mode)
{
// main_dock->set_dock_mode(mode);
// switch (mode)
// {
// case DockMode::MODE_DOCK:
// std::cout << "dock mode" << std::endl;
// break;
// case DockMode::MODE_PANEL:
// std::cout << "panel mode" << std::endl;
// break;
// default:
// std::cout << "undefined" << std::endl;
// break;
// }
// Add Widget
main_dock = MyDock::create(mode);
main_dock->set_hexpand(); main_dock->set_hexpand();
main_dock->set_vexpand(); main_dock->set_vexpand();
main_page->pack_start(*main_dock); main_page->pack_start(*main_dock);
} }
void MyStack::mystack_init(Gtk::Window *window, Gtk::Image *m_back){
main_dock->mydock_init(window,m_back);
}
void MyStack::show_prefs(){
main_dock->btnset_clicked();
}
void MyStack::logout(){
stack->set_visible_child(*login_page);
}
void MyStack::btnlogin_clicked(){
stack->set_visible_child(*main_page);
}
void MyStack::set_mydock_mode(DockMode mode){
main_dock->set_dock_mode(mode);
}

View File

@ -9,7 +9,14 @@ MyWin::MyWin()
// Initalize window // Initalize window
set_icon_name("My_GtkUI"); set_icon_name("My_GtkUI");
set_title("My GtkUI macOS Version"); set_title("My GtkUI macOS Version");
get_size_config(width, height); get_size_config(width, height, panel_mode);
// Set the display mode of dock
if(panel_mode){
main_stack.set_mydock_mode(DockMode::MODE_PANEL);
}else{
main_stack.set_mydock_mode(DockMode::MODE_DOCK);
}
// Add background // Add background
auto pixbuf = Gdk::Pixbuf::create_from_xpm_data(winpe); auto pixbuf = Gdk::Pixbuf::create_from_xpm_data(winpe);

View File

@ -20,6 +20,7 @@ private:
//Main Stack //Main Stack
MyStack main_stack; MyStack main_stack;
int width, height; int width, height;
bool panel_mode;
//Signal Handlers //Signal Handlers
void logout_activated(); void logout_activated();

View File

@ -1,5 +1,9 @@
#include "MyDock.hh" #include "MyDock.hh"
#include <thread> #include <thread>
#include <iostream>
// Dock or Panel Mode
static DockMode mode1;
MyDock::MyDock(BaseObjectType *cobject, const Glib::RefPtr<Gtk::Builder> &ref_Glade) MyDock::MyDock(BaseObjectType *cobject, const Glib::RefPtr<Gtk::Builder> &ref_Glade)
: Gtk::Box(cobject), : Gtk::Box(cobject),
@ -16,15 +20,15 @@ MyDock::MyDock(BaseObjectType *cobject, const Glib::RefPtr<Gtk::Builder> &ref_Gl
ref_builder->get_widget("btnedit", btnedit); ref_builder->get_widget("btnedit", btnedit);
ref_builder->get_widget("btnimage", btnimage); ref_builder->get_widget("btnimage", btnimage);
ref_builder->get_widget("btnset", btnset); ref_builder->get_widget("btnset", btnset);
ref_builder->get_widget("btngame24",btngame24); ref_builder->get_widget("btngame24", btngame24);
ref_builder->get_widget("btncalc",btncalc); ref_builder->get_widget("btncalc", btncalc);
ref_builder->get_widget("btnmine", btnmine); ref_builder->get_widget("btnmine", btnmine);
ref_builder->get_widget("separator_start", separator_start); ref_builder->get_widget("separator_start", separator_start);
ref_builder->get_widget("separator_end", separator_end); ref_builder->get_widget("separator_end", separator_end);
ref_builder->get_widget("launchpad_stack", launchpad_stack); ref_builder->get_widget("launchpad_stack", launchpad_stack);
ref_builder->get_widget("default_page", default_page); ref_builder->get_widget("default_page", default_page);
ref_builder->get_widget("launchpad_page", launchpad_page); ref_builder->get_widget("launchpad_page", launchpad_page);
ref_builder->get_widget("apps_grid",apps_grid); ref_builder->get_widget("apps_grid", apps_grid);
ref_builder->get_widget("padaud", padaud); ref_builder->get_widget("padaud", padaud);
ref_builder->get_widget("padgedit", padgedit); ref_builder->get_widget("padgedit", padgedit);
ref_builder->get_widget("padvlc", padvlc); ref_builder->get_widget("padvlc", padvlc);
@ -38,8 +42,8 @@ MyDock::MyDock(BaseObjectType *cobject, const Glib::RefPtr<Gtk::Builder> &ref_Gl
ref_builder->get_widget("padimage", padimage); ref_builder->get_widget("padimage", padimage);
ref_builder->get_widget("padedit", padedit); ref_builder->get_widget("padedit", padedit);
ref_builder->get_widget("padrun", padrun); ref_builder->get_widget("padrun", padrun);
ref_builder->get_widget("padgame24",padgame24); ref_builder->get_widget("padgame24", padgame24);
ref_builder->get_widget("padcalc",padcalc); ref_builder->get_widget("padcalc", padcalc);
ref_builder->get_widget("padmine", padmine); ref_builder->get_widget("padmine", padmine);
// Create window // Create window
@ -83,15 +87,15 @@ MyDock::MyDock(BaseObjectType *cobject, const Glib::RefPtr<Gtk::Builder> &ref_Gl
game_win->signal_delete_event().connect(sigc::mem_fun(*this, &MyDock::game_win_closed)); 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)); game_win->signal_hide().connect(sigc::mem_fun(*this, &MyDock::game_win_hide));
btngame24->signal_clicked().connect(sigc::mem_fun(*this,&MyDock::btngame24_clicked)); btngame24->signal_clicked().connect(sigc::mem_fun(*this, &MyDock::btngame24_clicked));
padgame24->signal_clicked().connect(sigc::mem_fun(*this,&MyDock::padgame24_clicked)); padgame24->signal_clicked().connect(sigc::mem_fun(*this, &MyDock::padgame24_clicked));
game24_win->signal_delete_event().connect(sigc::mem_fun(*this,&MyDock::game24_win_closed)); game24_win->signal_delete_event().connect(sigc::mem_fun(*this, &MyDock::game24_win_closed));
game24_win->signal_hide().connect(sigc::mem_fun(*this,&MyDock::game24_win_hide)); game24_win->signal_hide().connect(sigc::mem_fun(*this, &MyDock::game24_win_hide));
btncalc->signal_clicked().connect(sigc::mem_fun(*this,&MyDock::btncalc_clicked)); btncalc->signal_clicked().connect(sigc::mem_fun(*this, &MyDock::btncalc_clicked));
padcalc->signal_clicked().connect(sigc::mem_fun(*this,&MyDock::padcalc_clicked)); padcalc->signal_clicked().connect(sigc::mem_fun(*this, &MyDock::padcalc_clicked));
calc_win->signal_delete_event().connect(sigc::mem_fun(*this,&MyDock::calc_win_closed)); calc_win->signal_delete_event().connect(sigc::mem_fun(*this, &MyDock::calc_win_closed));
calc_win->signal_hide().connect(sigc::mem_fun(*this,&MyDock::calc_win_hide)); calc_win->signal_hide().connect(sigc::mem_fun(*this, &MyDock::calc_win_hide));
btnimage->signal_clicked().connect(sigc::mem_fun(*this, &MyDock::btnimage_clicked)); btnimage->signal_clicked().connect(sigc::mem_fun(*this, &MyDock::btnimage_clicked));
padimage->signal_clicked().connect(sigc::mem_fun(*this, &MyDock::padimage_clicked)); padimage->signal_clicked().connect(sigc::mem_fun(*this, &MyDock::padimage_clicked));
@ -114,27 +118,42 @@ MyDock::MyDock(BaseObjectType *cobject, const Glib::RefPtr<Gtk::Builder> &ref_Gl
apply_style(*dock_box); apply_style(*dock_box);
apply_style(*launchpad_page); apply_style(*launchpad_page);
apply_style(*separator_end); apply_style(*separator_end);
//apps_grid->foreach(sigc::mem_fun(*this,&MyDock::apply_style)); // apps_grid->foreach(sigc::mem_fun(*this,&MyDock::apply_style));
// Set Dock or panel mode
switch (mode1)
{
case DockMode::MODE_DOCK:
dock_box->set_vexpand(false);
// std::cout << "dock mode" << std::endl;
break;
case DockMode::MODE_PANEL:
dock_box->set_vexpand();
dock_box->set_valign(Gtk::ALIGN_FILL);
// std::cout << "panel mode" << std::endl;
break;
}
show_all_children(); show_all_children();
} }
void MyDock::set_dock_mode(DockMode mode){ // void MyDock::set_dock_mode(DockMode mode){
switch(mode){ // switch(mode){
case DockMode::MODE_DOCK: // case DockMode::MODE_DOCK:
set_vexpand(false); // set_vexpand(false);
break; // break;
case DockMode::MODE_PANEL: // case DockMode::MODE_PANEL:
set_vexpand(); // set_vexpand();
set_valign(Gtk::ALIGN_FILL); // set_valign(Gtk::ALIGN_FILL);
break; // break;
} // }
} // }
// Set the style of dock widget // Set the style of dock widget
void MyDock::apply_style(Gtk::Widget &widget){ void MyDock::apply_style(Gtk::Widget &widget)
{
auto style = widget.get_style_context(); auto style = widget.get_style_context();
style->add_provider(provider,G_MAXUINT); style->add_provider(provider, G_MAXUINT);
} }
// Launchpad // Launchpad
@ -230,7 +249,7 @@ void MyDock::padset_clicked()
btnlaunch_clicked(); btnlaunch_clicked();
} }
//Signal Handlers for drawing app window // Signal Handlers for drawing app window
bool MyDock::draw_win_closed(GdkEventAny *event) bool MyDock::draw_win_closed(GdkEventAny *event)
{ {
@ -239,7 +258,8 @@ bool MyDock::draw_win_closed(GdkEventAny *event)
return true; return true;
} }
void MyDock::draw_win_hide(){ void MyDock::draw_win_hide()
{
btndraw->set_image_from_icon_name("drawing_app", Gtk::ICON_SIZE_DIALOG); btndraw->set_image_from_icon_name("drawing_app", Gtk::ICON_SIZE_DIALOG);
draw_app.hide(); draw_app.hide();
} }
@ -309,49 +329,57 @@ void MyDock::padgame_clicked()
// Signal Handlers for game24 window // Signal Handlers for game24 window
bool MyDock::game24_win_closed(GdkEventAny *event){ bool MyDock::game24_win_closed(GdkEventAny *event)
btngame24->set_image_from_icon_name("24game",Gtk::ICON_SIZE_DIALOG); {
btngame24->set_image_from_icon_name("24game", Gtk::ICON_SIZE_DIALOG);
game24_win->hide(); game24_win->hide();
return true; return true;
} }
void MyDock::btngame24_clicked(){ void MyDock::btngame24_clicked()
btngame24->set_image_from_icon_name("24game_running",Gtk::ICON_SIZE_DIALOG); {
btngame24->set_image_from_icon_name("24game_running", Gtk::ICON_SIZE_DIALOG);
window_ctrl(*game24_win); window_ctrl(*game24_win);
} }
void MyDock::padgame24_clicked(){ void MyDock::padgame24_clicked()
btngame24->set_image_from_icon_name("24game_running",Gtk::ICON_SIZE_DIALOG); {
window_ctrl(*game24_win,false); btngame24->set_image_from_icon_name("24game_running", Gtk::ICON_SIZE_DIALOG);
window_ctrl(*game24_win, false);
btnlaunch_clicked(); btnlaunch_clicked();
} }
void MyDock::game24_win_hide(){ void MyDock::game24_win_hide()
btngame24->set_image_from_icon_name("24game",Gtk::ICON_SIZE_DIALOG); {
btngame24->set_image_from_icon_name("24game", Gtk::ICON_SIZE_DIALOG);
game24_win->hide(); game24_win->hide();
} }
// Signal Handlers for Calc App // Signal Handlers for Calc App
bool MyDock::calc_win_closed(GdkEventAny *event){ bool MyDock::calc_win_closed(GdkEventAny *event)
btncalc->set_image_from_icon_name("calcapp",Gtk::ICON_SIZE_DIALOG); {
btncalc->set_image_from_icon_name("calcapp", Gtk::ICON_SIZE_DIALOG);
calc_win->hide(); calc_win->hide();
return true; return true;
} }
void MyDock::btncalc_clicked(){ void MyDock::btncalc_clicked()
btncalc->set_image_from_icon_name("calcapp_running",Gtk::ICON_SIZE_DIALOG); {
btncalc->set_image_from_icon_name("calcapp_running", Gtk::ICON_SIZE_DIALOG);
window_ctrl(*calc_win); window_ctrl(*calc_win);
} }
void MyDock::padcalc_clicked(){ void MyDock::padcalc_clicked()
btncalc->set_image_from_icon_name("calcapp_running",Gtk::ICON_SIZE_DIALOG); {
btncalc->set_image_from_icon_name("calcapp_running", Gtk::ICON_SIZE_DIALOG);
window_ctrl(*calc_win); window_ctrl(*calc_win);
btnlaunch_clicked(); btnlaunch_clicked();
} }
void MyDock::calc_win_hide(){ void MyDock::calc_win_hide()
btncalc->set_image_from_icon_name("calcapp",Gtk::ICON_SIZE_DIALOG); {
btncalc->set_image_from_icon_name("calcapp", Gtk::ICON_SIZE_DIALOG);
calc_win->hide(); calc_win->hide();
} }
@ -401,18 +429,21 @@ void MyDock::padedit_clicked()
// Signal Handler for minesweeper window // Signal Handler for minesweeper window
bool MyDock::mine_win_closed(GdkEventAny *event){ bool MyDock::mine_win_closed(GdkEventAny *event)
{
btnmine->set_image_from_icon_name("mines_app", Gtk::ICON_SIZE_DIALOG); btnmine->set_image_from_icon_name("mines_app", Gtk::ICON_SIZE_DIALOG);
mine_win.hide(); mine_win.hide();
return true; return true;
} }
void MyDock::btnmine_clicked(){ void MyDock::btnmine_clicked()
{
btnmine->set_image_from_icon_name("mines_app_running", Gtk::ICON_SIZE_DIALOG); btnmine->set_image_from_icon_name("mines_app_running", Gtk::ICON_SIZE_DIALOG);
window_ctrl(mine_win); window_ctrl(mine_win);
} }
void MyDock::padmine_clicked(){ void MyDock::padmine_clicked()
{
btnmine->set_image_from_icon_name("mines_app_running", Gtk::ICON_SIZE_DIALOG); btnmine->set_image_from_icon_name("mines_app_running", Gtk::ICON_SIZE_DIALOG);
window_ctrl(mine_win, false); window_ctrl(mine_win, false);
btnlaunch_clicked(); btnlaunch_clicked();
@ -464,13 +495,27 @@ void MyDock::window_ctrl(Gtk::Window &window, bool on_dock)
} }
} }
MyDock *MyDock::create() MyDock *MyDock::create(DockMode mode)
{ {
MyDock *dock; MyDock *dock;
mode1 = mode;
// Get Widget // Get Widget
auto builder = Gtk::Builder::create_from_resource("/org/gtk/daleclack/mydock.ui"); auto builder = Gtk::Builder::create_from_resource("/org/gtk/daleclack/mydock.ui");
builder->get_widget_derived("main_box", dock); builder->get_widget_derived("main_box", dock);
// switch (mode)
// {
// case DockMode::MODE_DOCK:
// std::cout << "dock mode" << std::endl;
// break;
// case DockMode::MODE_PANEL:
// std::cout << "panel mode" << std::endl;
// break;
// default:
// std::cout << "undefined" << std::endl;
// break;
// }
return dock; return dock;
} }

View File

@ -22,10 +22,10 @@ class MyDock : public Gtk::Box
{ {
public: public:
MyDock(BaseObjectType *cobject, const Glib::RefPtr<Gtk::Builder> &ref_Glade); MyDock(BaseObjectType *cobject, const Glib::RefPtr<Gtk::Builder> &ref_Glade);
static MyDock *create(); static MyDock *create(DockMode mode);
void btnset_clicked(); void btnset_clicked();
void mydock_init(Gtk::Window *window, Gtk::Image *background1); void mydock_init(Gtk::Window *window, Gtk::Image *background1);
void set_dock_mode(DockMode mode); // void set_dock_mode(DockMode mode);
private: private:
// Child widgets // Child widgets

View File

@ -423,7 +423,8 @@ void MyPrefs::btnapply_clicked()
json data = json::parse(R"( json data = json::parse(R"(
{ {
"height":1280, "height":1280,
"width":720 "width":720,
"panel_mode":false
} }
)"); )");
std::fstream outfile; std::fstream outfile;
@ -432,6 +433,7 @@ void MyPrefs::btnapply_clicked()
{ {
data["width"] = width; data["width"] = width;
data["height"] = height; data["height"] = height;
data["panel_mode"] = panel_mode;
outfile<<data; outfile<<data;
outfile.close(); outfile.close();
} }
@ -452,8 +454,10 @@ void MyPrefs::load_winsize_config(){
json data = json::parse(jsonfile); json data = json::parse(jsonfile);
height = data["height"]; height = data["height"];
width = data["width"]; width = data["width"];
panel_mode = data["panel_mode"];
}else{ }else{
height = 720; height = 720;
width = 1280; width = 1280;
panel_mode = false;
} }
} }

View File

@ -40,6 +40,7 @@ protected:
private: private:
// Background widget and properties // Background widget and properties
int width, height; int width, height;
bool panel_mode;
Gtk::Image *background1; Gtk::Image *background1;
std::string path; std::string path;
bool background_internal; bool background_internal;
@ -83,14 +84,16 @@ private:
}; };
//Read Config from file without use the MyPrefs class //Read Config from file without use the MyPrefs class
static inline void get_size_config(int &width, int &height){ static inline void get_size_config(int &width, int &height, bool &panel_mode){
std::ifstream jsonfile("config.json"); std::ifstream jsonfile("config.json");
if(jsonfile.is_open()){ if(jsonfile.is_open()){
json data = json::parse(jsonfile); json data = json::parse(jsonfile);
height = data["height"]; height = data["height"];
width = data["width"]; width = data["width"];
panel_mode = data["panel_mode"];
}else{ }else{
height = 720; height = 720;
width = 1280; width = 1280;
panel_mode = false;
} }
} }