from C to FB
Thank you!
Code: Select all
#include <gtk-2.0/gtk/gtk.h>
#define NAME "root"
#define PWD "123456"
//structure of main window
struct login_widget{
GtkWidget *window; //main window
GtkWidget *label_tips; //tooltip
GtkWidget *button_login; //Two buttons, one for login, one exit
GtkWidget *button_exit;
GtkWidget *entry_username; //two text boxes for username and password
GtkWidget *entry_pwd;
GtkWidget *label_username; //two labels for showing username and password text box tooltips
GtkWidget *label_pwd;
GtkWidget *vbox; //vertical box,contains three horizontal boxes
GtkWidget *hbox_username; //include username tooltip and username text box. HBOX is similar
GtkWidget *hbox_pwd;
GtkWidget *hbox_button;
}wgt;
void gtk_win_destroy(GtkWidget *widget,gpointer data)
{
gtk_main_quit();
}
//login verification , when login button clicked
void login(GtkWidget *widget,gpointer data)
{
gchar *name;
gchar *pwd;
struct login_widget *wgt;
wgt = (struct loging_widget *)data;
//get input text
name = gtk_entry_get_text(GTK_ENTRY(wgt->entry_username));
pwd = gtk_entry_get_text(GTK_ENTRY(wgt->entry_pwd));
if((strcmp(name,NAME) == 0) && (strcmp(pwd,PWD) == 0))
{
gtk_label_set_text(GTK_LABEL(wgt->label_tips),"Welcome to GTK+-2.0");
}
else
{
gtk_label_set_text(GTK_LABEL(wgt->label_tips),"Invalid user name or password.");
}
}
void init_login_widget()
{
wgt.window = gtk_window_new(GTK_WINDOW_TOPLEVEL);
wgt.label_tips = gtk_label_new("Welcome,please login first");
wgt.button_login = gtk_button_new_with_label("login");
wgt.button_exit = gtk_button_new_with_label("exit");
wgt.entry_username = gtk_entry_new_with_max_length(10);
wgt.entry_pwd = gtk_entry_new_with_max_length(10);
wgt.label_username = gtk_label_new("User name :");
wgt.label_pwd = gtk_label_new("Password :");
wgt.vbox = gtk_vbox_new(FALSE,20);
wgt.hbox_username = gtk_hbox_new(FALSE,20);
wgt.hbox_pwd = gtk_hbox_new(FALSE,20);
wgt.hbox_button = gtk_hbox_new(FALSE,20);
//setup window
gtk_window_set_title(GTK_WINDOW(wgt.window),"System login");
gtk_window_set_resizable(GTK_WINDOW(wgt.window),FALSE);
//setup vboxes and hboxes
gtk_box_pack_start(GTK_BOX(wgt.hbox_username),wgt.label_username,TRUE,FALSE,10);
gtk_box_pack_start(GTK_BOX(wgt.hbox_username),wgt.entry_username,TRUE,FALSE,10);
gtk_box_pack_start(GTK_BOX(wgt.hbox_pwd),wgt.label_pwd,TRUE,FALSE,10);
gtk_box_pack_start(GTK_BOX(wgt.hbox_pwd),wgt.entry_pwd,TRUE,FALSE,10);
gtk_box_pack_start(GTK_BOX(wgt.hbox_button),wgt.button_login,TRUE,FALSE,10);
gtk_box_pack_start(GTK_BOX(wgt.hbox_button),wgt.button_exit,TRUE,FALSE,10);
gtk_box_pack_start(GTK_BOX(wgt.vbox),wgt.label_tips,TRUE,FALSE,10);
gtk_box_pack_start(GTK_BOX(wgt.vbox),wgt.hbox_username,TRUE,FALSE,10);
gtk_box_pack_start(GTK_BOX(wgt.vbox),wgt.hbox_pwd,TRUE,FALSE,10);
gtk_box_pack_start(GTK_BOX(wgt.vbox),wgt.hbox_button,TRUE,FALSE,10);
//password invisible,show“#” when typing
gtk_entry_set_visibility(GTK_ENTRY(wgt.entry_pwd),FALSE);
gtk_entry_set_invisible_char(GTK_ENTRY(wgt.entry_pwd),'#');
g_signal_connect(GTK_OBJECT(wgt.button_login),"clicked",GTK_SIGNAL_FUNC(login),&wgt);
g_signal_connect(GTK_OBJECT(wgt.window),"destroy",GTK_SIGNAL_FUNC(gtk_win_destroy),NULL);
g_signal_connect(GTK_OBJECT(wgt.button_exit),"clicked",GTK_SIGNAL_FUNC(gtk_win_destroy),NULL);
gtk_container_add(GTK_CONTAINER(wgt.window),wgt.vbox);
gtk_widget_show_all(wgt.window);
}
int main(int argc,char *argv[])
{
gtk_init(&argc,&argv);
init_login_widget();
gtk_main();
return 0;
}