void str_to_all_phokey_chars(char *u8_str, char *out) { out[0]=0; while (*u8_str) { phokey_t phos[32]; int n=utf8_pho_keys(u8_str, phos); #if 0 utf8_putchar(u8_str); dbg("n %d\n", n); #endif int i; for(i=0; i < n; i++) { char *pstr = phokey_to_str(phos[i]); strcat(out, pstr); if (i < n -1) strcat(out, " "); } u8_str+=utf8_sz(u8_str); if (*u8_str) strcat(out, " | "); } }
void get_key_str(void *key, int idx, char *out_str) { char t[128]; char *phostr; if (is_gtab) { int tlen; u_int64_t key64; if (ph_key_sz == 4) { u_int32_t key32; cp_ph_key(key, idx, &key32); key64 = key32; } else cp_ph_key(key, idx, &key64); gtab_key2name(pinmd, key64, t, &tlen); phostr = t; } else { phokey_t k; cp_ph_key(key, idx, &k); phostr = b_pinyin? phokey2pinyin(k):phokey_to_str(k); } strcpy(out_str, phostr); }
GtkWidget *create_pho_sel_area() { hbox_pho_sel = gtk_hbox_new (FALSE, 0); int i; for(i=0; i < bigphoN; i++) { bigpho[i].opt_menu = gtk_combo_box_new_text (); gtk_box_pack_start (GTK_BOX (hbox_pho_sel), bigpho[i].opt_menu, FALSE, FALSE, 0); int j; for(j=0; j < bigpho[i].phokeysN; j++) { char t[128]; char *phostr; if (is_gtab) { int tlen; u_int64_t key64; if (ph_key_sz == 4) { u_int32_t key32; cp_ph_key(bigpho[i].phokeys,j, &key32); key64 = key32; } else cp_ph_key(bigpho[i].phokeys,j, &key64); gtab_key2name(pinmd, key64, t, &tlen); // dbg("%d,%d] %s\n", i,j, t); phostr = t; } else { phokey_t k; cp_ph_key(bigpho[i].phokeys, j, &k); phostr = b_pinyin? phokey2pinyin(k):phokey_to_str(k); } gtk_combo_box_append_text (GTK_COMBO_BOX_TEXT (bigpho[i].opt_menu), phostr); } gtk_combo_box_set_active (GTK_COMBO_BOX(bigpho[i].opt_menu), 0); } GtkWidget *button_ok = gtk_button_new_with_label("OK to add"); gtk_box_pack_start (GTK_BOX (hbox_pho_sel), button_ok, FALSE, FALSE, 20); g_signal_connect (G_OBJECT (button_ok), "clicked", G_CALLBACK (cb_button_ok), NULL); GtkWidget *button_cancel = gtk_button_new_from_stock (GTK_STOCK_CANCEL); gtk_box_pack_start (GTK_BOX (hbox_pho_sel), button_cancel, FALSE, FALSE, 20); g_signal_connect (G_OBJECT (button_cancel), "clicked", G_CALLBACK (cb_button_cancel), NULL); return hbox_pho_sel; }
static void selection_received(GtkClipboard *pclip, const gchar *text, gpointer data) { if (!text) return; char *outtext = NULL; int outlen = 0; while (*text) { char tt[CH_SZ * 5 * MAX_SAME_PHO + 1]; int len = u8cpy(tt, (char *)text); tt[len]=0; phokey_t phokeys[MAX_SAME_PHO]; int phokeysN = utf8_pho_keys((char *)text, phokeys); int i; for(i=0; i <phokeysN ;i++) { char *phostr; if (b_pinyin) phostr = phokey2pinyin(phokeys[i]); else phostr = phokey_to_str(phokeys[i]); strcat(tt, phostr); } int ttlen = strlen(tt); outtext = (char *)realloc(outtext, outlen + ttlen + 1); memcpy(outtext + outlen, tt, ttlen); outlen+=ttlen; text += len; } outtext[outlen]=0; gtk_text_buffer_set_text (buffer, outtext, -1); free(outtext); all_wrap(); }
void create_win_save_phrase(WSP_S *wsp, int wspN) { #if WIN32 if (test_mode) return; #endif if (!wspN) return; SAVE_SESS *sess = tzmalloc(SAVE_SESS, 1); GtkWidget *main_window = gtk_window_new (GTK_WINDOW_TOPLEVEL); gtk_window_set_has_resize_grip(GTK_WINDOW(main_window), FALSE); sess->win = main_window; gtk_window_set_default_size(GTK_WINDOW (main_window), 20, 10); gtk_window_set_title(GTK_WINDOW(main_window), _(_L("加片語到詞庫"))); #if 0 g_signal_connect (G_OBJECT (main_window), "delete_event", G_CALLBACK (delete_event), sess); #endif GtkWidget *vbox = gtk_vbox_new (FALSE, 0); gtk_orientable_set_orientation(GTK_ORIENTABLE(vbox), GTK_ORIENTATION_VERTICAL); gtk_container_add (GTK_CONTAINER (main_window), vbox); char tt[512]; tt[0] = 0; wsp_str(wsp, wspN, tt); gtk_box_pack_start (GTK_BOX (vbox), gtk_label_new(tt), FALSE, FALSE, 0); int i; for(i=0; i<wspN; i++) { if (ph_key_sz==2) strcat(tt, phokey_to_str(wsp[i].key)); strcat(tt, " "); } if (tt[0]) gtk_box_pack_start (GTK_BOX (vbox), gtk_label_new(tt), FALSE, FALSE, 0); sess->mywsp = tmemdup(wsp, WSP_S, wspN); sess->mywspN = wspN; GtkWidget *hbox_cancel_ok = gtk_hbox_new (FALSE, 10); gtk_box_pack_start (GTK_BOX (vbox), hbox_cancel_ok , FALSE, FALSE, 5); GtkWidget *button_ok = gtk_button_new_from_stock (GTK_STOCK_OK); gtk_box_pack_start (GTK_BOX (hbox_cancel_ok), button_ok, TRUE, TRUE, 5); GtkWidget *button_cancel = gtk_button_new_from_stock (GTK_STOCK_CANCEL); gtk_box_pack_start (GTK_BOX (hbox_cancel_ok), button_cancel, TRUE, TRUE, 0); sess->label_countdown = gtk_label_new(NULL); gtk_box_pack_start (GTK_BOX (vbox), sess->label_countdown, FALSE, FALSE, 5); #if 1 #if WIN32 set_no_focus(main_window); #endif gtk_widget_realize(main_window); #if UNIX set_no_focus(main_window); #else win32_init_win(main_window); #endif #endif // dbg("mmmmmmmmmmmmm\n"); GTK_WIDGET_SET_FLAGS (button_ok, GTK_CAN_DEFAULT); gtk_widget_grab_default (button_ok); #if 1 // dbg("main_window %x\n", main_window); g_signal_connect (G_OBJECT (button_cancel), "clicked", G_CALLBACK (close_win_save_phrase), sess); g_signal_connect (G_OBJECT (button_ok), "clicked", G_CALLBACK (cb_ok), sess); #endif gtk_window_present(GTK_WINDOW(main_window)); gtk_window_set_keep_above(GTK_WINDOW(main_window), TRUE); // gtk_window_set_modal(GTK_WINDOW(main_window), TRUE); sess->countdown = 3; disp_countdown(sess); sess->countdown_handle = g_timeout_add(1000, timeout_countdown, sess); gtk_widget_show_all(main_window); }