void adj_page_col() { if (cur_x<0) { page_col=page_col+cur_x; cur_x=0; if (page_col<0) page_col=0; disp_page(); } else if (cur_x>=page_width) { int dd=cur_x-page_width+1; page_col+=dd; cur_x-=dd; disp_page(); } }
static void cb_button_download(GtkButton *button, gpointer user_data) { ts_download(); load_ts_phrase(); gtk_range_set_range(GTK_RANGE(scroll_bar), 0, tsN); disp_page(); }
static void cb_button_find_ok(GtkButton *button, gpointer user_data) { txt[0]=0; strcpy(txt, gtk_entry_get_text(GTK_ENTRY(find_textentry))); // gtk_widget_destroy(last_row); // last_row = NULL; if (!txt[0]) return; int row; for(row=page_ofs+1; row < tsN; row++) { u_int64_t phbuf[MAX_PHRASE_LEN]; char chbuf[MAX_PHRASE_LEN * CH_SZ + 1]; char clen; usecount_t usecount; load_tsin_at_ts_idx(row, &clen, &usecount, phbuf, (u_char *)chbuf); if (strstr(chbuf, txt)) break; } if (row==tsN) { GtkWidget *dia = gtk_message_dialog_new(NULL,GTK_DIALOG_MODAL,GTK_MESSAGE_INFO,GTK_BUTTONS_OK,"%s not found", txt); gtk_dialog_run (GTK_DIALOG (dia)); gtk_widget_destroy (dia); } else { page_ofs = row; disp_page(); } }
K_MarkWord(char *sep_str) { char *ss,*tt,*uu,*vv; int mlen,len; chg_mark_owner(); ss=edbf[cursor_row].cstr; len=edbf[cursor_row].len; if (!len) return; vv=ss+len; tt=uu=ss+cursor_col; if (strchr(sep_str,*tt)) while (tt>ss && strchr(sep_str,*(tt-1))) tt--; else while (tt>ss && !strchr(sep_str,*(tt-1))) tt--; if (strchr(sep_str,*uu)) while (uu<vv && strchr(sep_str,*uu)) uu++; else while (uu<vv && !strchr(sep_str,*uu)) uu++; mlen=uu-tt; mblk_row0=mblk_row1=cursor_row; mblk_col0=tt-ss; mblk_col1=uu-ss-1; if (mblk_col1<mblk_col0) mblk_col1=mblk_col0; disp_page(); show_cursor_w(); }
void goto_line(int row) { if (row >= Lines || row<0) { disp_page(); message(4,"Only %d lines",Lines); return; } hide_cursor_w(); cursor_col=0; cursor_row=row; page_row=cursor_row-(page_len/2); if (page_row<0)page_row=0; pos_cur(); disp_page(); disp_cur_pos(); show_cursor_w(); }
gboolean cb_scroll_bar(GtkRange *range, GtkScrollType scroll, gdouble value, gpointer user_data) { page_ofs = (int)value; if (page_ofs > tsN - PAGE_LEN) page_ofs = tsN - PAGE_LEN; if (page_ofs < 0) page_ofs = 0; disp_page(); return TRUE; }
static void cb_button_delete(GtkButton *button, gpointer user_data) { int i; if (b_contrib) { FILE *fw; if ((fw=fopen(private_file_src, "a"))==NULL) p_err("cannot write %s", private_file_src); for(i=0; i < PAGE_LEN; i++) { if (!gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(button_check[i]))) continue; gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(button_check[i]), FALSE); char len; usecount_t usecount; phokey_t pho[MAX_PHRASE_LEN]; unsigned char str[MAX_PHRASE_STR_LEN]; load_tsin_at_ts_idx(page_ofs+i, &len, &usecount, pho, str); write_tsin_src(fw, len, pho, (char*)str); } fclose(fw); load_tsin_contrib(); load_ts_phrase(); } else { for(i=0; i < PAGE_LEN; i++) { if (!gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(button_check[i]))) continue; gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(button_check[i]), FALSE); del_ofs[del_ofsN++] = ts_idx[page_ofs+i]; ts_idx[page_ofs+i]=-1; } int ntsN=0; for(i=0; i<tsN; i++) if (ts_idx[i]>=0) ts_idx[ntsN++]=ts_idx[i]; tsN = ntsN; } disp_page(); }
K_GotoTag(int key) { if (key<0||key>=MAXTAG) return 1; if (tag[key].fno<0) return 1; hide_cursor_w(); if (tag[key].fno!=cur_file) { goto_file(tag[key].fno); } if (tag[key].page_row>=Lines || tag[key].cursor_row>=Lines) return; page_row=tag[key].page_row; page_col=tag[key].page_col; cursor_row=tag[key].cursor_row; cursor_col=tag[key].cursor_col; disp_page(); disp_cur_pos(); pos_cur(); show_cursor_w(); return 0; }
gboolean key_press_event(GtkWidget *widget, GdkEventKey *event, gpointer user_data) { if (last_row) return FALSE; // dbg("key_press_event %x\n", event->keyval); switch (event->keyval) { case GDK_Up: case GDK_KP_Up: if (page_ofs>0) page_ofs--; break; case GDK_Down: case GDK_KP_Down: if (page_ofs<tsN-1) page_ofs++; break; case GDK_KP_Page_Up: case GDK_Page_Up: page_up(); break; case GDK_KP_Page_Down: case GDK_Page_Down: page_down(); break; case GDK_Home: case GDK_KP_Home: page_ofs = 0; break; case GDK_End: case GDK_KP_End: page_ofs = tsN - PAGE_LEN; break; } disp_page(); return TRUE; }
void mark_word_xy(int x, int y) { char *ss,*tt,*uu,*vv; int mlen,len; int row; int col; x-=win_x; y-=win_y; if (x<0 || y<0 || x>=page_width || y>=page_len) return; row=page_row+y; if (row>=Lines) return; col=page_col+x; chg_mark_owner(); untab_lines(row,row); ss=edbf[row].cstr; len=edbf[row].len; if (!ss || col>=len) return; vv=ss+len; tt=uu=ss+col; if (in_sep_ch(*tt)) while (tt>ss && in_sep_ch(*(tt-1))) tt--; else while (tt>ss && !in_sep_ch(*(tt-1))) tt--; if (in_sep_ch(*uu)) while (uu<vv && in_sep_ch(*uu)) uu++; else while (uu<vv && !in_sep_ch(*uu)) uu++; mlen=uu-tt; mblk_row0=mblk_row1=row; mblk_col0=tt-ss; mblk_col1=uu-ss-1; if (mblk_col1<mblk_col0) mblk_col1=mblk_col0; disp_page(); show_cursor_w(); }
int main(int argc, char **argv) { #if WIN32 WORD wVersionRequested; WSADATA wsaData; int err; wVersionRequested = MAKEWORD(2, 2); err = WSAStartup(wVersionRequested, &wsaData); #endif dbg("%s\n", argv[0]); b_contrib = strstr(argv[0], "ts-contribute")!=NULL; if (b_contrib) dbg("b_contrib\n"); set_is_chs(); load_setttings(); init_TableDir(); b_pinyin = is_pinyin_kbm(); gtk_init (&argc, &argv); load_gtab_list(TRUE); char gcin_dir[512]; get_gcin_dir(gcin_dir); if (argc < 2) { #if UNIX chdir(gcin_dir); #else _chdir(gcin_dir); #endif } #if GCIN_i18n_message bind_textdomain_codeset(GETTEXT_PACKAGE, "UTF-8"); textdomain(GETTEXT_PACKAGE); #endif get_gcin_user_fname(DOWNLOADED_PHRASES, downloaded_file_src); strcat(downloaded_file_src, ".src"); pinmd = &inmd[default_input_method]; if (pinmd->method_type == method_type_TSIN) { dbg("is tsin\n"); pho_load(); if (b_contrib) { load_tsin_contrib(); } else { if (argc > 1) load_tsin_db_ex(&tsin_hand, argv[1], FALSE, FALSE, FALSE); else load_tsin_db(); } ph_key_sz = 2; } else if (pinmd->filename) { if (b_contrib) p_err("Currently %s only supports tsin", argv[0]); dbg("gtab filename %s\n", pinmd->filename); init_gtab(default_input_method); is_gtab = TRUE; init_tsin_table_fname(pinmd, gtab_tsin_fname); load_tsin_db0(gtab_tsin_fname, TRUE); } else p_err("Your default input method %s doesn't use phrase database", pinmd->cname); dbg("ph_key_sz: %d\n", ph_key_sz); #if UNIX dpy = GDK_DISPLAY(); #endif load_ts_phrase(); mainwin = gtk_window_new (GTK_WINDOW_TOPLEVEL); gtk_window_set_position(GTK_WINDOW(mainwin), GTK_WIN_POS_CENTER); g_signal_connect (G_OBJECT (mainwin), "key-press-event", G_CALLBACK (key_press_event), NULL); gtk_window_set_has_resize_grip(GTK_WINDOW(mainwin), FALSE); // gtk_window_set_default_size(GTK_WINDOW (mainwin), 640, 520); set_window_gcin_icon(mainwin); vbox_top = gtk_vbox_new (FALSE, 0); gtk_container_add (GTK_CONTAINER(mainwin), vbox_top); GtkWidget *hbox_page = gtk_hbox_new (FALSE, 0); gtk_box_pack_start (GTK_BOX (vbox_top), hbox_page, TRUE, FALSE, 0); GtkWidget *align_page = gtk_alignment_new(0, 0, 1.0, 1.0); gtk_box_pack_start (GTK_BOX (hbox_page), align_page, TRUE, TRUE, 0); GtkWidget *vbox_page = gtk_vbox_new (TRUE, 0); gtk_container_add (GTK_CONTAINER(align_page), vbox_page); scroll_bar = gtk_vscrollbar_new( GTK_ADJUSTMENT(gtk_adjustment_new(tsN - PAGE_LEN,0, tsN, 1,PAGE_LEN,PAGE_LEN))); gtk_box_pack_start (GTK_BOX (hbox_page), scroll_bar, FALSE, FALSE, 0); g_signal_connect(G_OBJECT(scroll_bar), "change-value", G_CALLBACK(cb_scroll_bar), NULL); int i; for(i=0; i<PAGE_LEN; i++) { GtkWidget *hbox; hbox = gtk_hbox_new (FALSE, 0); gtk_box_pack_start (GTK_BOX (vbox_page), hbox, TRUE, TRUE, 0); button_check[i] = gtk_check_button_new(); gtk_box_pack_start (GTK_BOX (hbox), button_check[i], FALSE, FALSE, 0); labels[i]=gtk_label_new(NULL); GtkWidget *align = gtk_alignment_new (0, 0, 0, 0); gtk_container_add(GTK_CONTAINER(align), labels[i]); gtk_box_pack_start (GTK_BOX (hbox), align, FALSE, FALSE, 0); } hbox_buttons = gtk_hbox_new (FALSE, 0); gtk_box_pack_start (GTK_BOX (vbox_top), hbox_buttons, FALSE, FALSE, 0); GtkWidget *button_delete = b_contrib ? gtk_button_new_with_label(_(_L("私密詞不上載"))):gtk_button_new_from_stock (GTK_STOCK_DELETE); gtk_box_pack_start (GTK_BOX (hbox_buttons), button_delete, FALSE, FALSE, 0); g_signal_connect (G_OBJECT (button_delete), "clicked", G_CALLBACK (cb_button_delete), NULL); GtkWidget *button_find = gtk_button_new_from_stock (GTK_STOCK_FIND); gtk_box_pack_start (GTK_BOX (hbox_buttons), button_find, FALSE, FALSE, 0); g_signal_connect (G_OBJECT (button_find), "clicked", G_CALLBACK (cb_button_find), NULL); #if 0 GtkWidget *button_edit = gtk_button_new_from_stock (GTK_STOCK_EDIT); gtk_box_pack_start (GTK_BOX (hbox_buttons), button_edit, FALSE, FALSE, 0); g_signal_connect (G_OBJECT (button_edit), "clicked", G_CALLBACK (cb_button_edit), NULL); #endif GtkWidget *button_save = b_contrib ? gtk_button_new_with_label(_(_L("上載詞"))) :gtk_button_new_from_stock (GTK_STOCK_SAVE); gtk_box_pack_start (GTK_BOX (hbox_buttons), button_save, FALSE, FALSE, 0); g_signal_connect (G_OBJECT (button_save), "clicked", G_CALLBACK (cb_button_save), NULL); GtkWidget *button_quit = gtk_button_new_from_stock (GTK_STOCK_QUIT); gtk_box_pack_start (GTK_BOX (hbox_buttons), button_quit, FALSE, FALSE, 0); g_signal_connect (G_OBJECT (button_quit), "clicked", G_CALLBACK (do_exit), NULL); if (!b_contrib && !is_gtab) { GtkWidget *button_download = gtk_button_new_with_label(_(_L("下載共享詞庫"))); gtk_box_pack_start (GTK_BOX (hbox_buttons), button_download, FALSE, FALSE, 0); g_signal_connect (G_OBJECT (button_download), "clicked", G_CALLBACK (cb_button_download), NULL); } g_signal_connect (G_OBJECT (mainwin), "delete_event", G_CALLBACK (do_exit), NULL); gtk_widget_realize (mainwin); gtk_widget_show_all(mainwin); // load_ts_phrase(); disp_page(); #if 0 GdkWindow *gdkwin=gtk_widget_get_window(mainwin); gdk_window_set_events(gdkwin, GDK_BUTTON_PRESS_MASK|GDK_SCROLL_MASK| gdk_window_get_events(gdkwin)); #endif gtk_main(); return 0; }