mirror of https://github.com/daleclack/My_GtkUi
Restore Game App
This commit is contained in:
parent
1f0e4ebd7a
commit
ef7d728eac
|
@ -1,23 +0,0 @@
|
|||
#pragma once
|
||||
|
||||
#include <gtkmm.h>
|
||||
|
||||
class Game : public Gtk::Window{
|
||||
public:
|
||||
Game(BaseObjectType *cobject,Glib::RefPtr<Gtk::Builder> &tmp_builder);
|
||||
static Game * create();
|
||||
private:
|
||||
//The main builder
|
||||
Glib::RefPtr<Gtk::Builder> game_builder;
|
||||
//Child Widgets
|
||||
Gtk::Window *game_window;
|
||||
Gtk::Button *win_close,*win_mini;
|
||||
Gtk::Button *game_btn[4],*btngo,*btnexit;
|
||||
Gtk::Label *game_label;
|
||||
int game_index[4];
|
||||
//Signal Handlers
|
||||
void gamebtn_clicked(int *index);
|
||||
void btngo_clicked();
|
||||
void btnexit_clicked();
|
||||
void win_closed();
|
||||
};
|
|
@ -1,63 +0,0 @@
|
|||
#include "Game.hh"
|
||||
#include <ctime>
|
||||
#include <cstdlib>
|
||||
#include <cstdio>
|
||||
|
||||
Game::Game(BaseObjectType *cobject,Glib::RefPtr<Gtk::Builder> &tmp_builder)
|
||||
:Gtk::Window(cobject),
|
||||
game_builder(tmp_builder),
|
||||
game_index{0,1,2,3}
|
||||
{
|
||||
//Ininalize Window
|
||||
set_icon_name("game");
|
||||
game_builder->get_widget("window",game_window);
|
||||
game_builder->get_widget("btn_exit",btnexit);
|
||||
game_builder->get_widget("btn_go",btngo);
|
||||
game_builder->get_widget("label",game_label);
|
||||
for(int i=0;i<4;i++){
|
||||
char str[6];
|
||||
sprintf(str,"btn_%d",i+1);
|
||||
game_builder->get_widget(str,game_btn[i]);
|
||||
game_btn[i]->signal_clicked().connect(sigc::bind(
|
||||
sigc::mem_fun(*this,&Game::gamebtn_clicked),&game_index[i]));
|
||||
}
|
||||
//Link Signals
|
||||
btngo->signal_clicked().connect(sigc::mem_fun(*this,&Game::btngo_clicked));
|
||||
btnexit->signal_clicked().connect(sigc::mem_fun(*this,&Game::hide));
|
||||
}
|
||||
|
||||
void Game::gamebtn_clicked(int *index){
|
||||
//Get Current button
|
||||
int flag;
|
||||
srand((unsigned)time(NULL));
|
||||
flag=rand()%4;
|
||||
game_btn[flag]->set_image_from_icon_name("My_GtkUI",Gtk::ICON_SIZE_DIALOG);
|
||||
if(*index==flag){
|
||||
game_label->set_label("Good Luck!");
|
||||
}else{
|
||||
game_label->set_label("The Button is here!");
|
||||
}
|
||||
//Disable Buttons
|
||||
for(int i=0;i<4;i++){
|
||||
game_btn[i]->set_sensitive(false);
|
||||
}
|
||||
}
|
||||
|
||||
void Game::btngo_clicked(){
|
||||
//Clean Icons showed in button and enable buttons
|
||||
for(int i=0;i<4;i++){
|
||||
game_btn[i]->set_image_from_icon_name("");
|
||||
game_btn[i]->set_sensitive();
|
||||
}
|
||||
game_label->set_label("Select a button");
|
||||
}
|
||||
|
||||
Game * Game::create(){
|
||||
// Load the Builder file and instantiate its widgets.
|
||||
auto builder = Gtk::Builder::create_from_resource("/org/gtk/daleclack/game1.ui");
|
||||
|
||||
Game * window = nullptr;
|
||||
builder->get_widget_derived("window",window);
|
||||
|
||||
return window;
|
||||
}
|
|
@ -1,4 +1,6 @@
|
|||
#include "GameApp.h"
|
||||
#include <cstdlib>
|
||||
#include <ctime>
|
||||
|
||||
struct _GameApp
|
||||
{
|
||||
|
@ -10,15 +12,95 @@ struct _GameApp
|
|||
|
||||
G_DEFINE_TYPE(GameApp, game_app, GTK_TYPE_WINDOW)
|
||||
|
||||
static void btns_clicked(GtkButton *widget, GameApp *self)
|
||||
{
|
||||
// Get random index
|
||||
srand(time(NULL));
|
||||
int index = (rand() % 4) + 1;
|
||||
|
||||
// Get Button index
|
||||
const char *button_label = gtk_button_get_label(widget);
|
||||
|
||||
// Create image widget
|
||||
GtkWidget *image1 = gtk_image_new();
|
||||
gtk_image_set_pixel_size(GTK_IMAGE(image1), 48);
|
||||
gtk_image_set_from_icon_name(GTK_IMAGE(image1), "My_GtkUI");
|
||||
|
||||
// Check button index and set icon
|
||||
switch (index)
|
||||
{
|
||||
case 1:
|
||||
gtk_button_set_child(GTK_BUTTON(self->btn_1), image1);
|
||||
break;
|
||||
case 2:
|
||||
gtk_button_set_child(GTK_BUTTON(self->btn_2), image1);
|
||||
break;
|
||||
case 3:
|
||||
gtk_button_set_child(GTK_BUTTON(self->btn_3), image1);
|
||||
break;
|
||||
case 4:
|
||||
gtk_button_set_child(GTK_BUTTON(self->btn_4), image1);
|
||||
break;
|
||||
}
|
||||
|
||||
// Set Label
|
||||
if (index == (int)(button_label[0] - 48))
|
||||
{
|
||||
gtk_label_set_label(GTK_LABEL(self->label), "Good Luck!");
|
||||
}
|
||||
else
|
||||
{
|
||||
gtk_label_set_label(GTK_LABEL(self->label), "The Button is here!");
|
||||
}
|
||||
}
|
||||
|
||||
static void btngo_clicked(GtkWidget *widget, GameApp *self)
|
||||
{
|
||||
// Initalize label and btns
|
||||
gtk_label_set_label(GTK_LABEL(self->label), "Select a button");
|
||||
gtk_button_set_label(GTK_BUTTON(self->btn_1), "1");
|
||||
gtk_button_set_label(GTK_BUTTON(self->btn_2), "2");
|
||||
gtk_button_set_label(GTK_BUTTON(self->btn_3), "3");
|
||||
gtk_button_set_label(GTK_BUTTON(self->btn_4), "4");
|
||||
}
|
||||
|
||||
static void btnexit_clicked(GtkWidget *widget, GameApp *self)
|
||||
{
|
||||
// Close the game
|
||||
gtk_window_close(GTK_WINDOW(self));
|
||||
}
|
||||
|
||||
static void game_app_dispose(GObject *object)
|
||||
{
|
||||
// Destructer
|
||||
gtk_widget_dispose_template(GTK_WIDGET(object), game_app_get_type());
|
||||
G_OBJECT_CLASS(game_app_parent_class)->dispose(object);
|
||||
}
|
||||
|
||||
static void game_app_init(GameApp *self)
|
||||
{
|
||||
// Initalize template
|
||||
gtk_widget_init_template(GTK_WIDGET(self));
|
||||
|
||||
// Link Signals
|
||||
g_signal_connect(self->btn_1, "clicked", G_CALLBACK(btns_clicked), self);
|
||||
g_signal_connect(self->btn_2, "clicked", G_CALLBACK(btns_clicked), self);
|
||||
g_signal_connect(self->btn_3, "clicked", G_CALLBACK(btns_clicked), self);
|
||||
g_signal_connect(self->btn_4, "clicked", G_CALLBACK(btns_clicked), self);
|
||||
g_signal_connect(self->btn_go, "clicked", G_CALLBACK(btngo_clicked), self);
|
||||
g_signal_connect(self->btn_exit, "clicked", G_CALLBACK(btnexit_clicked), self);
|
||||
}
|
||||
|
||||
static void game_app_class_init(GameAppClass *klass)
|
||||
{
|
||||
// Set dispose signal for the window
|
||||
G_OBJECT_CLASS(klass)->dispose = game_app_dispose;
|
||||
|
||||
// Set template
|
||||
gtk_widget_class_set_template_from_resource(GTK_WIDGET_CLASS(klass),
|
||||
"/org/gtk/daleclack/game1.ui");
|
||||
|
||||
// Get widget from template
|
||||
gtk_widget_class_bind_template_child(GTK_WIDGET_CLASS(klass), GameApp, label);
|
||||
gtk_widget_class_bind_template_child(GTK_WIDGET_CLASS(klass), GameApp, btn_1);
|
||||
gtk_widget_class_bind_template_child(GTK_WIDGET_CLASS(klass), GameApp, btn_2);
|
||||
|
@ -31,4 +113,4 @@ static void game_app_class_init(GameAppClass *klass)
|
|||
GameApp *game_app_new()
|
||||
{
|
||||
return GAME_APP(g_object_new(game_app_get_type(), NULL));
|
||||
}
|
||||
}
|
||||
|
|
Loading…
Reference in New Issue