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

View File

@ -1,39 +1,57 @@
#include "MyStack.hh"
#include <iostream>
MyStack::MyStack(){
MyStack::MyStack()
{
// Get Widgets
stackbuilder = Gtk::Builder::create_from_resource("/org/gtk/daleclack/stack.ui");
stackbuilder->get_widget("main_stack",stack);
stackbuilder->get_widget("login_page",login_page);
stackbuilder->get_widget("main_page",main_page);
stackbuilder->get_widget("btnlogin",btnlogin);
stackbuilder->get_widget("main_stack", stack);
stackbuilder->get_widget("login_page", login_page);
stackbuilder->get_widget("main_page", main_page);
stackbuilder->get_widget("btnlogin", btnlogin);
// 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
main_dock = MyDock::create();
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);
// 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_vexpand();
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
set_icon_name("My_GtkUI");
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
auto pixbuf = Gdk::Pixbuf::create_from_xpm_data(winpe);

View File

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

View File

@ -1,5 +1,9 @@
#include "MyDock.hh"
#include <thread>
#include <iostream>
// Dock or Panel Mode
static DockMode mode1;
MyDock::MyDock(BaseObjectType *cobject, const Glib::RefPtr<Gtk::Builder> &ref_Glade)
: 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("btnimage", btnimage);
ref_builder->get_widget("btnset", btnset);
ref_builder->get_widget("btngame24",btngame24);
ref_builder->get_widget("btncalc",btncalc);
ref_builder->get_widget("btngame24", btngame24);
ref_builder->get_widget("btncalc", btncalc);
ref_builder->get_widget("btnmine", btnmine);
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("apps_grid",apps_grid);
ref_builder->get_widget("apps_grid", apps_grid);
ref_builder->get_widget("padaud", padaud);
ref_builder->get_widget("padgedit", padgedit);
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("padedit", padedit);
ref_builder->get_widget("padrun", padrun);
ref_builder->get_widget("padgame24",padgame24);
ref_builder->get_widget("padcalc",padcalc);
ref_builder->get_widget("padgame24", padgame24);
ref_builder->get_widget("padcalc", padcalc);
ref_builder->get_widget("padmine", padmine);
// 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_hide().connect(sigc::mem_fun(*this, &MyDock::game_win_hide));
btngame24->signal_clicked().connect(sigc::mem_fun(*this,&MyDock::btngame24_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_hide().connect(sigc::mem_fun(*this,&MyDock::game24_win_hide));
btngame24->signal_clicked().connect(sigc::mem_fun(*this, &MyDock::btngame24_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_hide().connect(sigc::mem_fun(*this, &MyDock::game24_win_hide));
btncalc->signal_clicked().connect(sigc::mem_fun(*this,&MyDock::btncalc_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_hide().connect(sigc::mem_fun(*this,&MyDock::calc_win_hide));
btncalc->signal_clicked().connect(sigc::mem_fun(*this, &MyDock::btncalc_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_hide().connect(sigc::mem_fun(*this, &MyDock::calc_win_hide));
btnimage->signal_clicked().connect(sigc::mem_fun(*this, &MyDock::btnimage_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(*launchpad_page);
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();
}
void MyDock::set_dock_mode(DockMode mode){
switch(mode){
case DockMode::MODE_DOCK:
set_vexpand(false);
break;
case DockMode::MODE_PANEL:
set_vexpand();
set_valign(Gtk::ALIGN_FILL);
break;
}
}
// void MyDock::set_dock_mode(DockMode mode){
// switch(mode){
// case DockMode::MODE_DOCK:
// set_vexpand(false);
// break;
// case DockMode::MODE_PANEL:
// set_vexpand();
// set_valign(Gtk::ALIGN_FILL);
// break;
// }
// }
// 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();
style->add_provider(provider,G_MAXUINT);
style->add_provider(provider, G_MAXUINT);
}
// Launchpad
@ -230,7 +249,7 @@ void MyDock::padset_clicked()
btnlaunch_clicked();
}
//Signal Handlers for drawing app window
// Signal Handlers for drawing app window
bool MyDock::draw_win_closed(GdkEventAny *event)
{
@ -239,7 +258,8 @@ bool MyDock::draw_win_closed(GdkEventAny *event)
return true;
}
void MyDock::draw_win_hide(){
void MyDock::draw_win_hide()
{
btndraw->set_image_from_icon_name("drawing_app", Gtk::ICON_SIZE_DIALOG);
draw_app.hide();
}
@ -309,49 +329,57 @@ void MyDock::padgame_clicked()
// Signal Handlers for game24 window
bool MyDock::game24_win_closed(GdkEventAny *event){
btngame24->set_image_from_icon_name("24game",Gtk::ICON_SIZE_DIALOG);
bool MyDock::game24_win_closed(GdkEventAny *event)
{
btngame24->set_image_from_icon_name("24game", Gtk::ICON_SIZE_DIALOG);
game24_win->hide();
return true;
}
void MyDock::btngame24_clicked(){
btngame24->set_image_from_icon_name("24game_running",Gtk::ICON_SIZE_DIALOG);
void MyDock::btngame24_clicked()
{
btngame24->set_image_from_icon_name("24game_running", Gtk::ICON_SIZE_DIALOG);
window_ctrl(*game24_win);
}
void MyDock::padgame24_clicked(){
btngame24->set_image_from_icon_name("24game_running",Gtk::ICON_SIZE_DIALOG);
window_ctrl(*game24_win,false);
void MyDock::padgame24_clicked()
{
btngame24->set_image_from_icon_name("24game_running", Gtk::ICON_SIZE_DIALOG);
window_ctrl(*game24_win, false);
btnlaunch_clicked();
}
void MyDock::game24_win_hide(){
btngame24->set_image_from_icon_name("24game",Gtk::ICON_SIZE_DIALOG);
void MyDock::game24_win_hide()
{
btngame24->set_image_from_icon_name("24game", Gtk::ICON_SIZE_DIALOG);
game24_win->hide();
}
// Signal Handlers for Calc App
bool MyDock::calc_win_closed(GdkEventAny *event){
btncalc->set_image_from_icon_name("calcapp",Gtk::ICON_SIZE_DIALOG);
bool MyDock::calc_win_closed(GdkEventAny *event)
{
btncalc->set_image_from_icon_name("calcapp", Gtk::ICON_SIZE_DIALOG);
calc_win->hide();
return true;
}
void MyDock::btncalc_clicked(){
btncalc->set_image_from_icon_name("calcapp_running",Gtk::ICON_SIZE_DIALOG);
void MyDock::btncalc_clicked()
{
btncalc->set_image_from_icon_name("calcapp_running", Gtk::ICON_SIZE_DIALOG);
window_ctrl(*calc_win);
}
void MyDock::padcalc_clicked(){
btncalc->set_image_from_icon_name("calcapp_running",Gtk::ICON_SIZE_DIALOG);
void MyDock::padcalc_clicked()
{
btncalc->set_image_from_icon_name("calcapp_running", Gtk::ICON_SIZE_DIALOG);
window_ctrl(*calc_win);
btnlaunch_clicked();
}
void MyDock::calc_win_hide(){
btncalc->set_image_from_icon_name("calcapp",Gtk::ICON_SIZE_DIALOG);
void MyDock::calc_win_hide()
{
btncalc->set_image_from_icon_name("calcapp", Gtk::ICON_SIZE_DIALOG);
calc_win->hide();
}
@ -401,18 +429,21 @@ void MyDock::padedit_clicked()
// 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);
mine_win.hide();
return true;
}
void MyDock::btnmine_clicked(){
void MyDock::btnmine_clicked()
{
btnmine->set_image_from_icon_name("mines_app_running", Gtk::ICON_SIZE_DIALOG);
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);
window_ctrl(mine_win, false);
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;
mode1 = mode;
// Get Widget
auto builder = Gtk::Builder::create_from_resource("/org/gtk/daleclack/mydock.ui");
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;
}

View File

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

View File

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

View File

@ -40,6 +40,7 @@ protected:
private:
// Background widget and properties
int width, height;
bool panel_mode;
Gtk::Image *background1;
std::string path;
bool background_internal;
@ -83,14 +84,16 @@ private:
};
//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");
if(jsonfile.is_open()){
json data = json::parse(jsonfile);
height = data["height"];
width = data["width"];
panel_mode = data["panel_mode"];
}else{
height = 720;
width = 1280;
panel_mode = false;
}
}