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,6 +1,8 @@
#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);
@ -10,30 +12,46 @@ MyStack::MyStack(){
// Link Signals
btnlogin->signal_clicked().connect(sigc::mem_fun(*this, &MyStack::btnlogin_clicked));
}
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();
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),
@ -116,23 +120,38 @@ MyDock::MyDock(BaseObjectType *cobject, const Glib::RefPtr<Gtk::Builder> &ref_Gl
apply_style(*separator_end);
// 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);
}
@ -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,48 +329,56 @@ void MyDock::padgame_clicked()
// 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);
game24_win->hide();
return true;
}
void MyDock::btngame24_clicked(){
void MyDock::btngame24_clicked()
{
btngame24->set_image_from_icon_name("24game_running", Gtk::ICON_SIZE_DIALOG);
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);
btnlaunch_clicked();
}
void MyDock::game24_win_hide(){
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){
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(){
void MyDock::btncalc_clicked()
{
btncalc->set_image_from_icon_name("calcapp_running", Gtk::ICON_SIZE_DIALOG);
window_ctrl(*calc_win);
}
void MyDock::padcalc_clicked(){
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(){
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;
}
}