Пример #1
0
Файл: e.c Проект: 8l/ted
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();
	}
}
Пример #2
0
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();
}
Пример #3
0
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();
    }
}
Пример #4
0
Файл: misc.c Проект: 8l/ted
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();
}
Пример #5
0
Файл: misc.c Проект: 8l/ted
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();
}
Пример #6
0
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;
}
Пример #7
0
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();
}
Пример #8
0
Файл: misc.c Проект: 8l/ted
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;
}
Пример #9
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;
}
Пример #10
0
Файл: misc.c Проект: 8l/ted
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();
}
Пример #11
0
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;
}