mirror of https://github.com/daleclack/My_GtkUi
Add Guess Game
This commit is contained in:
parent
e09b85a7ec
commit
5d555c54a3
|
@ -4,9 +4,14 @@
|
||||||
<template class="GameWin" parent="GtkWindow">
|
<template class="GameWin" parent="GtkWindow">
|
||||||
<property name="can-focus">0</property>
|
<property name="can-focus">0</property>
|
||||||
<property name="destroy-with-parent">1</property>
|
<property name="destroy-with-parent">1</property>
|
||||||
|
<property name="title">Game</property>
|
||||||
<property name="child">
|
<property name="child">
|
||||||
<object class="GtkGrid">
|
<object class="GtkGrid">
|
||||||
<property name="can-focus">0</property>
|
<property name="can-focus">0</property>
|
||||||
|
<property name="margin-top">5</property>
|
||||||
|
<property name="margin-bottom">5</property>
|
||||||
|
<property name="margin-start">5</property>
|
||||||
|
<property name="margin-end">5</property>
|
||||||
<child>
|
<child>
|
||||||
<object class="GtkLabel" id="label_status">
|
<object class="GtkLabel" id="label_status">
|
||||||
<property name="can-focus">0</property>
|
<property name="can-focus">0</property>
|
||||||
|
@ -19,11 +24,29 @@
|
||||||
</object>
|
</object>
|
||||||
</child>
|
</child>
|
||||||
<child>
|
<child>
|
||||||
<object class="GtkButton" id="btn_1">
|
<object class="GtkToggleButton" id="btn_1">
|
||||||
<property name="label" translatable="yes">1</property>
|
|
||||||
<property name="width-request">100</property>
|
<property name="width-request">100</property>
|
||||||
<property name="height-request">100</property>
|
<property name="height-request">100</property>
|
||||||
<property name="receives-default">1</property>
|
<property name="receives-default">1</property>
|
||||||
|
<child>
|
||||||
|
<object class = "GtkBox">
|
||||||
|
<property name="orientation">vertical</property>
|
||||||
|
<property name="halign">3</property>
|
||||||
|
<property name="valign">3</property>
|
||||||
|
<child>
|
||||||
|
<object class = "GtkImage" id="image_btn1">
|
||||||
|
<property name="icon-name">My_GtkUI</property>
|
||||||
|
<property name="visible">0</property>
|
||||||
|
<property name="pixel-size">48</property>
|
||||||
|
</object>
|
||||||
|
</child>
|
||||||
|
<child>
|
||||||
|
<object class = "GtkLabel">
|
||||||
|
<property name="label" translatable="yes">1</property>
|
||||||
|
</object>
|
||||||
|
</child>
|
||||||
|
</object>
|
||||||
|
</child>
|
||||||
<layout>
|
<layout>
|
||||||
<property name="column">1</property>
|
<property name="column">1</property>
|
||||||
<property name="row">2</property>
|
<property name="row">2</property>
|
||||||
|
@ -31,11 +54,29 @@
|
||||||
</object>
|
</object>
|
||||||
</child>
|
</child>
|
||||||
<child>
|
<child>
|
||||||
<object class="GtkButton" id="btn_2">
|
<object class="GtkToggleButton" id="btn_2">
|
||||||
<property name="label" translatable="yes">2</property>
|
|
||||||
<property name="width-request">100</property>
|
<property name="width-request">100</property>
|
||||||
<property name="height-request">100</property>
|
<property name="height-request">100</property>
|
||||||
<property name="receives-default">1</property>
|
<property name="receives-default">1</property>
|
||||||
|
<child>
|
||||||
|
<object class = "GtkBox">
|
||||||
|
<property name="orientation">vertical</property>
|
||||||
|
<property name="halign">3</property>
|
||||||
|
<property name="valign">3</property>
|
||||||
|
<child>
|
||||||
|
<object class = "GtkImage" id="image_btn2">
|
||||||
|
<property name="icon-name">My_GtkUI</property>
|
||||||
|
<property name="visible">0</property>
|
||||||
|
<property name="pixel-size">48</property>
|
||||||
|
</object>
|
||||||
|
</child>
|
||||||
|
<child>
|
||||||
|
<object class = "GtkLabel">
|
||||||
|
<property name="label" translatable="yes">2</property>
|
||||||
|
</object>
|
||||||
|
</child>
|
||||||
|
</object>
|
||||||
|
</child>
|
||||||
<layout>
|
<layout>
|
||||||
<property name="column">3</property>
|
<property name="column">3</property>
|
||||||
<property name="row">2</property>
|
<property name="row">2</property>
|
||||||
|
@ -43,11 +84,29 @@
|
||||||
</object>
|
</object>
|
||||||
</child>
|
</child>
|
||||||
<child>
|
<child>
|
||||||
<object class="GtkButton" id="btn_3">
|
<object class="GtkToggleButton" id="btn_3">
|
||||||
<property name="label" translatable="yes">3</property>
|
|
||||||
<property name="width-request">100</property>
|
<property name="width-request">100</property>
|
||||||
<property name="height-request">100</property>
|
<property name="height-request">100</property>
|
||||||
<property name="receives-default">1</property>
|
<property name="receives-default">1</property>
|
||||||
|
<child>
|
||||||
|
<object class = "GtkBox">
|
||||||
|
<property name="orientation">vertical</property>
|
||||||
|
<property name="halign">3</property>
|
||||||
|
<property name="valign">3</property>
|
||||||
|
<child>
|
||||||
|
<object class = "GtkImage" id="image_btn3">
|
||||||
|
<property name="icon-name">My_GtkUI</property>
|
||||||
|
<property name="visible">0</property>
|
||||||
|
<property name="pixel-size">48</property>
|
||||||
|
</object>
|
||||||
|
</child>
|
||||||
|
<child>
|
||||||
|
<object class = "GtkLabel">
|
||||||
|
<property name="label" translatable="yes">3</property>
|
||||||
|
</object>
|
||||||
|
</child>
|
||||||
|
</object>
|
||||||
|
</child>
|
||||||
<layout>
|
<layout>
|
||||||
<property name="column">1</property>
|
<property name="column">1</property>
|
||||||
<property name="row">4</property>
|
<property name="row">4</property>
|
||||||
|
@ -55,11 +114,29 @@
|
||||||
</object>
|
</object>
|
||||||
</child>
|
</child>
|
||||||
<child>
|
<child>
|
||||||
<object class="GtkButton" id="btn_4">
|
<object class="GtkToggleButton" id="btn_4">
|
||||||
<property name="label" translatable="yes">4</property>
|
|
||||||
<property name="width-request">100</property>
|
<property name="width-request">100</property>
|
||||||
<property name="height-request">100</property>
|
<property name="height-request">100</property>
|
||||||
<property name="receives-default">1</property>
|
<property name="receives-default">1</property>
|
||||||
|
<child>
|
||||||
|
<object class = "GtkBox">
|
||||||
|
<property name="orientation">vertical</property>
|
||||||
|
<property name="halign">3</property>
|
||||||
|
<property name="valign">3</property>
|
||||||
|
<child>
|
||||||
|
<object class = "GtkImage" id="image_btn4">
|
||||||
|
<property name="icon-name">My_GtkUI</property>
|
||||||
|
<property name="visible">0</property>
|
||||||
|
<property name="pixel-size">48</property>
|
||||||
|
</object>
|
||||||
|
</child>
|
||||||
|
<child>
|
||||||
|
<object class = "GtkLabel">
|
||||||
|
<property name="label" translatable="yes">4</property>
|
||||||
|
</object>
|
||||||
|
</child>
|
||||||
|
</object>
|
||||||
|
</child>
|
||||||
<layout>
|
<layout>
|
||||||
<property name="column">3</property>
|
<property name="column">3</property>
|
||||||
<property name="row">4</property>
|
<property name="row">4</property>
|
||||||
|
|
|
@ -1,9 +1,13 @@
|
||||||
#include "GameWin.h"
|
#include "GameWin.h"
|
||||||
|
#include <ctime>
|
||||||
|
#include <cstdlib>
|
||||||
|
#include <cstring>
|
||||||
|
|
||||||
struct _GameWin
|
struct _GameWin
|
||||||
{
|
{
|
||||||
GtkWindow parent;
|
GtkWindow parent;
|
||||||
GtkWidget * btn_1, * btn_2, * btn_3, * btn_4;
|
GtkWidget * btn_1, * btn_2, * btn_3, * btn_4;
|
||||||
|
GtkWidget * image_btn1, * image_btn2, * image_btn3, * image_btn4;
|
||||||
GtkWidget * btn_go, * btn_exit;
|
GtkWidget * btn_go, * btn_exit;
|
||||||
GtkWidget * label_status;
|
GtkWidget * label_status;
|
||||||
int flag;
|
int flag;
|
||||||
|
@ -11,88 +15,91 @@ struct _GameWin
|
||||||
|
|
||||||
G_DEFINE_TYPE(GameWin,game_win,GTK_TYPE_WINDOW)
|
G_DEFINE_TYPE(GameWin,game_win,GTK_TYPE_WINDOW)
|
||||||
|
|
||||||
|
static void check_status(GtkToggleButton * togglebtn,GtkLabel * label){
|
||||||
|
if(gtk_toggle_button_get_active(togglebtn)){
|
||||||
|
gtk_label_set_label(label,"Good Luck!");
|
||||||
|
}else{
|
||||||
|
gtk_label_set_label(label,"The Button is here!");
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
// GObject *button[4];
|
static void btn_click(GtkWidget *widget,GameWin * win){
|
||||||
// GObject *label;
|
//When a button clicked, show image and check if the button with image is clicked
|
||||||
// const char *btn_index[4]={"0","1","2","3"};
|
switch(win->flag){
|
||||||
// int flag;
|
case 1:
|
||||||
|
gtk_widget_set_visible(win->image_btn1,TRUE);
|
||||||
|
check_status(GTK_TOGGLE_BUTTON(win->btn_1),GTK_LABEL(win->label_status));
|
||||||
|
break;
|
||||||
|
case 2:
|
||||||
|
gtk_widget_set_visible(win->image_btn2,TRUE);
|
||||||
|
check_status(GTK_TOGGLE_BUTTON(win->btn_2),GTK_LABEL(win->label_status));
|
||||||
|
break;
|
||||||
|
case 3:
|
||||||
|
gtk_widget_set_visible(win->image_btn3,TRUE);
|
||||||
|
check_status(GTK_TOGGLE_BUTTON(win->btn_3),GTK_LABEL(win->label_status));
|
||||||
|
break;
|
||||||
|
case 4:
|
||||||
|
gtk_widget_set_visible(win->image_btn4,TRUE);
|
||||||
|
check_status(GTK_TOGGLE_BUTTON(win->btn_4),GTK_LABEL(win->label_status));
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
|
||||||
// static void btn_click(GtkWidget *widget,gpointer data){
|
//disable all buttons
|
||||||
// //Get image
|
gtk_widget_set_sensitive(win->btn_1,FALSE);
|
||||||
// GdkPixbuf *pixbuf=gdk_pixbuf_new_from_resource("/gtk31/icon.jpg",NULL);
|
gtk_widget_set_sensitive(win->btn_2,FALSE);
|
||||||
// GdkPixbuf *sized=gdk_pixbuf_scale_simple(pixbuf,50,50,GDK_INTERP_BILINEAR);
|
gtk_widget_set_sensitive(win->btn_3,FALSE);
|
||||||
// GtkWidget *image=gtk_image_new_from_pixbuf(sized);
|
gtk_widget_set_sensitive(win->btn_4,FALSE);
|
||||||
// //Get button index
|
}
|
||||||
// char str[2];
|
|
||||||
// strcpy(str,(char*)data);
|
|
||||||
// //Set a image to the flag button and judge
|
|
||||||
// gtk_button_set_child((GtkButton*)button[flag],image);
|
|
||||||
// if(flag==str[0]-48){
|
|
||||||
// gtk_label_set_label(GTK_LABEL(label),"Good luck!");
|
|
||||||
// }else{
|
|
||||||
// gtk_label_set_label(GTK_LABEL(label),"Flag missed.");
|
|
||||||
// }
|
|
||||||
// for(int i=0;i<4;i++){
|
|
||||||
// gtk_widget_set_sensitive(GTK_WIDGET(button[i]),FALSE);
|
|
||||||
// }
|
|
||||||
// }
|
|
||||||
|
|
||||||
// static void buttons_init(GtkBuilder *builder){
|
|
||||||
// //Initalize buttons
|
|
||||||
// for(int i=0;i<4;i++){
|
|
||||||
// char str[6];
|
|
||||||
// sprintf(str,"btn_%d",i+1);
|
|
||||||
// button[i]=gtk_builder_get_object(builder,str);
|
|
||||||
// g_signal_connect(button[i],"clicked",G_CALLBACK(btn_click),(gpointer)btn_index[i]);
|
|
||||||
// //gtk_button_set_always_show_image(GTK_BUTTON(button[i]),TRUE);
|
|
||||||
// }
|
|
||||||
// }
|
|
||||||
|
|
||||||
static void btngo_click(GtkWidget * widget,GameWin * win){
|
static void btngo_click(GtkWidget * widget,GameWin * win){
|
||||||
//Reinitalize the buttons and the flag
|
//Reinitalize the buttons and the flag
|
||||||
gtk_label_set_label(GTK_LABEL(win->label_status),"Select a button");
|
gtk_label_set_label(GTK_LABEL(win->label_status),"Select a button");
|
||||||
|
|
||||||
|
//Reinitalize Button
|
||||||
|
gtk_widget_set_visible(win->image_btn1,FALSE);
|
||||||
|
gtk_widget_set_visible(win->image_btn2,FALSE);
|
||||||
|
gtk_widget_set_visible(win->image_btn3,FALSE);
|
||||||
|
gtk_widget_set_visible(win->image_btn4,FALSE);
|
||||||
|
|
||||||
|
//Enable All Buttons
|
||||||
|
gtk_widget_set_sensitive(win->btn_1,TRUE);
|
||||||
|
gtk_widget_set_sensitive(win->btn_2,TRUE);
|
||||||
|
gtk_widget_set_sensitive(win->btn_3,TRUE);
|
||||||
|
gtk_widget_set_sensitive(win->btn_4,TRUE);
|
||||||
|
|
||||||
|
//Set All Buttons to inactive
|
||||||
|
gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(win->btn_1),FALSE);
|
||||||
|
gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(win->btn_2),FALSE);
|
||||||
|
gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(win->btn_3),FALSE);
|
||||||
|
gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(win->btn_4),FALSE);
|
||||||
|
|
||||||
|
//Get a new flag
|
||||||
srand((unsigned)time(NULL));
|
srand((unsigned)time(NULL));
|
||||||
int x=rand();
|
int x=rand();
|
||||||
win->flag=x%4;
|
win->flag=x%4+1;
|
||||||
}
|
|
||||||
|
|
||||||
// static void gtkmain(GtkApplication *app,gpointer user_data){
|
|
||||||
// //Get objects from the Gtkbuilder and initalize the application
|
|
||||||
// GtkBuilder *builder=gtk_builder_new();
|
|
||||||
// GObject *window;
|
|
||||||
// GdkPixbuf *pixbuf=gdk_pixbuf_new_from_resource("/gtk31/icon.jpg",NULL);
|
|
||||||
// gtk_builder_add_from_resource(builder,"/gtk31/window.ui",NULL);
|
|
||||||
// window=gtk_builder_get_object(builder,"window");
|
|
||||||
// gtk_application_add_window(app,GTK_WINDOW(window));
|
|
||||||
// gtk_window_set_icon_name(GTK_WINDOW(window),"org.gtk.daleclack");
|
|
||||||
// //Get buttons from GtkBuilder
|
|
||||||
// buttons_init(builder);
|
|
||||||
// GObject *btn_go=gtk_builder_get_object(builder,"btn_go");
|
|
||||||
// g_signal_connect(btn_go,"clicked",G_CALLBACK(btngo_click),(gpointer)builder);
|
|
||||||
// GObject *btn_exit=gtk_builder_get_object(builder,"btn_exit");
|
|
||||||
// g_signal_connect_swapped(btn_exit,"clicked",G_CALLBACK(gtk_window_destroy),window);
|
|
||||||
// label=gtk_builder_get_object(builder,"label");
|
|
||||||
// //Initalize the flag
|
|
||||||
// srand((unsigned)time(NULL));
|
|
||||||
// int x=rand();
|
|
||||||
// flag=x%4;
|
|
||||||
|
|
||||||
// gtk_widget_show(GTK_WIDGET(window));
|
|
||||||
// g_object_unref(pixbuf);
|
|
||||||
// }
|
|
||||||
|
|
||||||
static gboolean game_win_close(GtkWindow * win){
|
|
||||||
gtk_widget_hide(GTK_WIDGET(win));
|
|
||||||
return TRUE;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
static void game_win_init(GameWin * game_win){
|
static void game_win_init(GameWin * game_win){
|
||||||
|
//Initalize Window
|
||||||
gtk_widget_init_template(GTK_WIDGET(game_win));
|
gtk_widget_init_template(GTK_WIDGET(game_win));
|
||||||
gtk_window_set_icon_name(GTK_WINDOW(game_win),"game");
|
gtk_window_set_icon_name(GTK_WINDOW(game_win),"game");
|
||||||
|
|
||||||
|
//Initalize Flag
|
||||||
|
srand((unsigned)time(NULL));
|
||||||
|
game_win->flag = (rand()%4) + 1;
|
||||||
|
|
||||||
|
//link signals
|
||||||
|
g_signal_connect(game_win->btn_1,"clicked",G_CALLBACK(btn_click),game_win);
|
||||||
|
g_signal_connect(game_win->btn_2,"clicked",G_CALLBACK(btn_click),game_win);
|
||||||
|
g_signal_connect(game_win->btn_3,"clicked",G_CALLBACK(btn_click),game_win);
|
||||||
|
g_signal_connect(game_win->btn_4,"clicked",G_CALLBACK(btn_click),game_win);
|
||||||
|
g_signal_connect(game_win->btn_go,"clicked",G_CALLBACK(btngo_click),game_win);
|
||||||
|
g_signal_connect_swapped(game_win->btn_exit,"clicked",G_CALLBACK(gtk_window_destroy),game_win);
|
||||||
}
|
}
|
||||||
|
|
||||||
static void game_win_class_init(GameWinClass * klass){
|
static void game_win_class_init(GameWinClass * klass){
|
||||||
GTK_WINDOW_CLASS(klass)->close_request=game_win_close;
|
//GTK_WINDOW_CLASS(klass)->close_request=game_win_close;
|
||||||
|
|
||||||
//Set template for the game window
|
//Set template for the game window
|
||||||
gtk_widget_class_set_template_from_resource(GTK_WIDGET_CLASS(klass),
|
gtk_widget_class_set_template_from_resource(GTK_WIDGET_CLASS(klass),
|
||||||
"/org/gtk/daleclack/game1.ui");
|
"/org/gtk/daleclack/game1.ui");
|
||||||
|
@ -104,6 +111,10 @@ static void game_win_class_init(GameWinClass * klass){
|
||||||
gtk_widget_class_bind_template_child(GTK_WIDGET_CLASS(klass),GameWin,btn_go);
|
gtk_widget_class_bind_template_child(GTK_WIDGET_CLASS(klass),GameWin,btn_go);
|
||||||
gtk_widget_class_bind_template_child(GTK_WIDGET_CLASS(klass),GameWin,btn_exit);
|
gtk_widget_class_bind_template_child(GTK_WIDGET_CLASS(klass),GameWin,btn_exit);
|
||||||
gtk_widget_class_bind_template_child(GTK_WIDGET_CLASS(klass),GameWin,label_status);
|
gtk_widget_class_bind_template_child(GTK_WIDGET_CLASS(klass),GameWin,label_status);
|
||||||
|
gtk_widget_class_bind_template_child(GTK_WIDGET_CLASS(klass),GameWin,image_btn1);
|
||||||
|
gtk_widget_class_bind_template_child(GTK_WIDGET_CLASS(klass),GameWin,image_btn2);
|
||||||
|
gtk_widget_class_bind_template_child(GTK_WIDGET_CLASS(klass),GameWin,image_btn3);
|
||||||
|
gtk_widget_class_bind_template_child(GTK_WIDGET_CLASS(klass),GameWin,image_btn4);
|
||||||
}
|
}
|
||||||
|
|
||||||
GameWin * game_win_new(GtkWindow * win){
|
GameWin * game_win_new(GtkWindow * win){
|
||||||
|
|
|
@ -1,9 +1,6 @@
|
||||||
#pragma once
|
#pragma once
|
||||||
|
|
||||||
#include <gtk/gtk.h>
|
#include <gtk/gtk.h>
|
||||||
#include <ctime>
|
|
||||||
#include <cstdlib>
|
|
||||||
#include <cstring>
|
|
||||||
|
|
||||||
G_DECLARE_FINAL_TYPE(GameWin,game_win,GAME,WIN,GtkWindow)
|
G_DECLARE_FINAL_TYPE(GameWin,game_win,GAME,WIN,GtkWindow)
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue