static void on_reorder (void) { GArray *new_contents; gint *shuffle_array; gint i; shuffle_array = g_new (int, contents->len); for (i = 0; i < contents->len; i++) shuffle_array[i] = i; for (i = 0; i + 1 < contents->len; i++) { gint pos = g_random_int_range (i, contents->len); gint tmp; tmp = shuffle_array[i]; shuffle_array[i] = shuffle_array[pos]; shuffle_array[pos] = tmp; } gtk_list_store_reorder (model, shuffle_array); new_contents = g_array_new (FALSE, FALSE, sizeof (char)); for (i = 0; i < contents->len; i++) g_array_append_val (new_contents, g_array_index (contents, char, shuffle_array[i])); g_array_free (contents, TRUE); contents = new_contents; combochange_log ("Reordered array"); g_free (shuffle_array); }
static void on_insert (void) { GtkTreeIter iter; int insert_pos; char new_value[2]; new_value[0] = next_value++; new_value[1] = '\0'; if (next_value > 'Z') next_value = 'A'; if (contents->len) insert_pos = g_random_int_range (0, contents->len + 1); else insert_pos = 0; gtk_list_store_insert (model, &iter, insert_pos); gtk_list_store_set (model, &iter, 0, new_value, -1); g_array_insert_val (contents, insert_pos, new_value); combochange_log ("Inserted '%c' at position %d", new_value[0], insert_pos); }
static void on_delete (void) { GtkTreeIter iter; int delete_pos; char old_val; if (!contents->len) return; delete_pos = g_random_int_range (0, contents->len); gtk_tree_model_iter_nth_child (GTK_TREE_MODEL (model), &iter, NULL, delete_pos); gtk_list_store_remove (model, &iter); old_val = g_array_index (contents, char, delete_pos); g_array_remove_index (contents, delete_pos); combochange_log ("Deleted '%c' from position %d", old_val, delete_pos); }
void send_button_clicked(GtkWidget * widget, gpointer data) { char *text; int num = (int) data; GtkTextIter start, end; gtk_text_buffer_get_bounds(GTK_TEXT_BUFFER(allmsg[num].buffer_down), &start, &end); /*获得缓冲区开始和结束位置的Iter */ const GtkTextIter s = start, e = end; text = (char *)gtk_text_buffer_get_text(GTK_TEXT_BUFFER(allmsg[num].buffer_down), &s, &e, FALSE); /*获得文本框缓冲区文本 */ char send_text[MAXLEN]; sprintf(send_text, "to %s : ", allmsg[num].to_name); strcat(send_text, text); printf("%s\n",send_text); client_parse_input(cli, send_text); //发送信息 sprintf(send_text, "%s : ", cli->name); strcat(send_text, text); combochange_log(num, send_text); //在聊天窗口显示 gtk_text_buffer_set_text(GTK_TEXT_BUFFER(allmsg[num].buffer_down), "", -1); //清空缓冲区 }