|
/*一个微型的物品管理程序:有物品显示栏,增加(减少)物品选项,增加(减少)物品的数量栏,增加(减少)物品的名称选项,和更新按钮*/
#include <gtk/gtk.h>
gint state=-1;/*说明是要增加还是要减少的状态,1是增加,-1是减少*/
gchar *quality; /*用于记录*/
gint quality_int;
gint i=0;
gchar *my_data="显示器";
gchar* itoa(gint i) /*定义itoa函数*/
{
gchar *a=malloc(42);
if (a) sprintf(a,"%d",i);
return a;
}
/*表格的定义*/
gchar *titles[]=
{
"名称","编号","数量"
};
gchar *rows[][3]=
{
{"显示器","BS111","12"},
{"键盘","KD152","3"},
{"鼠标","MU561","6"},
{"主机","BO987","56"},
{"音响","MK964","12"},
{"主板","YT432","45"},
{"软件","LINUX","1"}
};
/* 取得数据行数*/
gint row_count = sizeof(rows) > 0 ? sizeof(rows)/sizeof(rows[0]) : 0;
gchar *glist[]={"显示器","键盘","鼠标","主机","主板","音响","软件", NULL};
void quit_win(GtkWidget *window,gpointer *data)
{
gtk_main_quit();
}
gint click_button1(GtkWidget *widget,gpointer *data)
{
state=1;
g_print("%s ",(gchar *)data);
return state;
}
gint click_button2(GtkWidget *widget,gpointer *data)
{
state=-1;
g_print("%s ",(gchar *)data); /*state的值是获得了*/
return state;
}
/*获取选项里面的东西*/
gpointer my_callback_function(GtkWidget *widget,gpointer *data)
{
my_data= gtk_combo_box_get_active_text(GTK_COMBO_BOX(widget));
return my_data;
}
/*refresh_button所对应的函数*/
gchar refresh(GtkWidget *refresh_button,gpointer input_text)
{
guint tmp;
gint r;
quality=(gchar *)gtk_entry_get_text(GTK_ENTRY(input_text));
quality_int=atoi(quality);
for(i=0;i<row_count;i++)
{
r=strcmp(rows[0],my_data);
if(!r)
{
tmp=atoi(rows[2])+state*quality_int;
if(tmp<0)
{
tmp=0;
}
rows[2]=itoa(tmp);
g_printf("%d",tmp);
return rows[2];
}
}
}
gint main(gint argc,gchar **argv)
{
GtkWidget *window;
GtkWidget *refresh_button;
GtkWidget *hbox,*vbox,*hbox1;
GtkWidget *radio1,*radio2;
GtkWidget *group;
GtkWidget *combo;
GtkWidget *input_text;
GtkWidget *clist;
GtkWidget *add_button;
GtkWidget *delete_button;
/*初始化window*/
gtk_init(&argc,&argv);
window=gtk_window_new(GTK_WINDOW_TOPLEVEL);
gtk_window_set_title(GTK_WINDOW(window),"Shop-Manager");
gtk_window_set_position(GTK_WINDOW(window),GTK_WIN_POS_CENTER);
gtk_window_set_default_size(GTK_WINDOW(window),150,150);
/*设置输入框*/
input_text=gtk_entry_new_with_max_length(3);
/*表格*/
clist=gtk_clist_new_with_titles(3,titles);
gtk_clist_set_column_width(GTK_CLIST(clist),0,75);
gtk_clist_set_column_width(GTK_CLIST(clist),1,75);
gtk_clist_set_column_width(GTK_CLIST(clist),2,65);
/*表格内容的输入*/
for ( i=0; i< row_count; i++)
{
gtk_clist_append(GTK_CLIST(clist),rows);
}
/*关闭按钮*/
g_signal_connect(GTK_OBJECT(window),"destroy",GTK_SIGNAL_FUNC(quit_win),NULL);
/*设置radio按钮*/
radio1=gtk_radio_button_new_with_label(NULL,"增加");
g_signal_connect(GTK_OBJECT(radio1),"clicked",GTK_SIGNAL_FUNC(click_button1),"增加");
group=gtk_radio_button_group(GTK_RADIO_BUTTON(radio1));
radio2=gtk_radio_button_new_with_label(group,"减少");
g_signal_connect(GTK_OBJECT(radio2),"clicked",GTK_SIGNAL_FUNC(click_button2),"减少");
gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(radio2),TRUE);
gtk_widget_show(radio1);
gtk_widget_show(radio2);
vbox=gtk_vbox_new(FALSE,0);
hbox1=gtk_hbox_new(FALSE,0);
hbox=gtk_hbox_new(FALSE,0);
refresh_button=gtk_button_new_with_label("更新");
add_button=gtk_button_new_with_label("添加");
delete_button=gtk_button_new_with_label("删除");
gtk_container_add(GTK_CONTAINER(window),vbox);
/*设置组合框*/
combo = gtk_combo_box_new_text ();
for (i = 0; i < 7; i++)
{
gtk_combo_box_append_text (GTK_COMBO_BOX (combo), glist);
}
gtk_combo_box_set_active (GTK_COMBO_BOX (combo), 0);
gtk_box_pack_start(GTK_BOX(vbox),clist,TRUE,TRUE,2);
gtk_box_pack_start(GTK_BOX(hbox1),combo,TRUE,TRUE,0);
gtk_box_pack_start(GTK_BOX(hbox1),add_button,TRUE,TRUE,0);
gtk_box_pack_start(GTK_BOX(hbox1),delete_button,TRUE,TRUE,0);
gtk_box_pack_start(GTK_BOX(vbox),hbox1,FALSE,FALSE,0);
gtk_box_pack_start(GTK_BOX(hbox),radio1,FALSE,FALSE,2);
gtk_box_pack_start(GTK_BOX(hbox),radio2,FALSE,FALSE,2);
gtk_box_pack_start(GTK_BOX(hbox),input_text,FALSE,FALSE,0);
gtk_box_pack_start(GTK_BOX(vbox),hbox,FALSE,FALSE,2);
gtk_box_pack_start(GTK_BOX(vbox),refresh_button,FALSE,FALSE,2);
gtk_widget_show_all(window);
/*点击按钮更新数据*/
g_signal_connect(GTK_OBJECT(refresh_button),"clicked",GTK_SIGNAL_FUNC(refresh),input_text);
g_signal_connect(GTK_OBJECT(combo),"changed",G_CALLBACK(my_callback_function),NULL);
gtk_main();
return 0;
}
改了表格里面某项的值后,显示表格里面的内容并没有刷新,有什么办法解决啊?谢谢了~~ |
|