仅实现动态列表的主题功能,对于列表的控制自行解决,菜鸟我还在琢磨中
也希望高手指点....................
void go_to(void)
{
while(1){
select(sockfd+1, &sockset, NULL, NULL, NULL);
if (FD_ISSET(sockfd, &sockset)){
status=read(sockfd, string, MAX_LINE); //接收服务器的广播消息
if(status==0){
sprintf(string,"#0");
//close(sockfd);
//exit(0);
}
string[status]='\0';
//printf("%s\n", string);
char myser_ip[20];
char myser_port[20];
int n,m=0,p=0,k;
for(n=0;n if(string[n]=='*'){
for(k=n+1;k myser_port[m++]=string[k];
}
string[n]='\0';
strcpy(myser_ip, string);
//printf("%saaa\n",myser_ip);
gchar *my_obj_ip=(gchar *)myser_ip;
//gint my_obj_port=5555;
//printf("%sbbb\n",myser_ip);
cli_sockfd=initial_client(my_obj_ip, atoi(myser_port));
if (cli_sockfd==0){
printf("初始化客户端套接字时出错!\n");
fflush(stdout);
//printf("连接对方失败!\n");
close(sockfd);
//exit(1);
}
set_address(&cli_sockset, cli_sockfd);
write(cli_sockfd, string_obj, strlen(string_obj));
//printf("%s!",string_obj);
//g_thread_create( G_THREAD_FUNC(receive_obj), NULL, FALSE, NULL) ;
}else{
GtkTreeStore *store;
GtkTreeIter toplevel, child;
store = GTK_TREE_STORE(gtk_tree_view_get_model(GTK_TREE_VIEW(treeview_friends)));
if(top==0){
printf("%d\n",top);
gtk_tree_store_append(store, &toplevel, NULL);
gtk_tree_store_set(store, &toplevel, COLUMN, "在线好友", -1);
top++;
printf("%d\n",top);
}
gtk_tree_store_append(store, &child, &toplevel);
gtk_tree_store_set(store, &child, COLUMN, string, -1);
}
}
fflush(stdout);
}
set_address(&sockset, sockfd);
}
return;
}
static GtkWidget *create_view_and_model(void)
{
GtkTreeViewColumn *col;
GtkCellRenderer *renderer;
GtkTreeStore *treestore;
GtkTreeModel *model;
treestore = gtk_tree_store_new(NUM_COLS, G_TYPE_STRING);
col = gtk_tree_view_column_new();
gtk_tree_view_column_set_title(col, "好友列表");
gtk_tree_view_append_column(GTK_TREE_VIEW(treeview_friends), col);
renderer = gtk_cell_renderer_text_new();
gtk_tree_view_column_pack_start(col, renderer, TRUE);
gtk_tree_view_column_add_attribute(col, renderer, "text", COLUMN);
model = GTK_TREE_MODEL(treestore);
gtk_tree_view_set_model(GTK_TREE_VIEW(treeview_friends), model);
g_object_unref(model);
printf("11111\n");
return treeview_friends;
}
void mainframe(void)
{
GtkBuilder *builder_main;
GtkWidget *window_main;
GtkWidget *entry_mood;
GtkWidget *entry_friend;
GtkWidget *button_search;
GtkWidget *scrolledwindow1;
//GtkWidget *treeview_friends;
GtkTreeSelection *selection;
//GtkWidget *notebook;
//GtkTreeStore *treestore;
//GtkTreeIter toplevel;
//GtkTreeModel *Model;
GtkWidget *label_friends;
//GtkTreeViewColumn *col;
//GtkCellRenderer *renderer;
GtkWidget *statusbar;
//gtk_init(&argc, &argv);
builder_main = gtk_builder_new();
gtk_builder_add_from_file(builder_main, "mainframe.glade", NULL);
window_main = GTK_WIDGET(gtk_builder_get_object(builder_main, "window_main"));
gtk_window_set_position(GTK_WINDOW(window_main), GTK_WIN_POS_CENTER);
//treestore = gtk_tree_store_new(NUM_COLS, G_TYPE_STRING);
entry_mood = GTK_WIDGET(gtk_builder_get_object(builder_main, "entry_mood"));
entry_friend = GTK_WIDGET(gtk_builder_get_object(builder_main, "entry_friend"));
button_search= GTK_WIDGET(gtk_builder_get_object(builder_main, "button_search"));
scrolledwindow1 = GTK_WIDGET(gtk_builder_get_object(builder_main, "scrolledwindow1"));
treeview_friends = GTK_WIDGET(gtk_builder_get_object(builder_main, "treeview_friends"));
statusbar = GTK_WIDGET(gtk_builder_get_object(builder_main, "statusbar"));
create_view_and_model();
selection = gtk_tree_view_get_selection(GTK_TREE_VIEW(treeview_friends));
g_thread_create ( G_THREAD_FUNC(go_to), NULL, FALSE, NULL) ;
gtk_widget_show_all(window_main);
printf("2222\n");
g_signal_connect(window_main, "destroy", G_CALLBACK(gtk_main_quit), NULL);
g_signal_connect(selection, "changed", G_CALLBACK(on_changed), statusbar);
return;
}
阅读(2659) | 评论(0) | 转发(0) |