File: phrase-save-menu.cpp

package info (click to toggle)
gcin 2.9.4%2Bdfsg1-5
  • links: PTS, VCS
  • area: main
  • in suites: forky, sid
  • size: 21,812 kB
  • sloc: cpp: 34,326; ansic: 9,319; makefile: 648; sh: 556
file content (105 lines) | stat: -rw-r--r-- 2,590 bytes parent folder | download | duplicates (7)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
#include "gcin.h"
#include "pho.h"
#include "win-sym.h"
#include "gst.h"
#include "tsin.h"


static GtkWidget *phrase_save_win;

void destroy_phrase_save_menu()
{
  if (!phrase_save_win)
    return;
  gtk_widget_destroy(phrase_save_win);
  phrase_save_win = NULL;
}

void save_phrase(int save_frm, int len);
static void cb_clicked(GtkWidget *widget, gpointer data)
{
  destroy_phrase_save_menu();

  int v = GPOINTER_TO_INT(data);
  int len = v & 0xff;
  int idx = v >> 8;

  if (!len)
    return;

  save_phrase(idx, len);
}

void chpho_extract(CHPHO *chph, int len, phokey_t *pho, char *ch);

static void add_button(GtkWidget *vbox, char *s, int idx, int len)
{
  int data = (int)((idx << 8) | len);

  GtkWidget *but = gtk_button_new_with_label(s);
  gtk_box_pack_start (GTK_BOX (vbox), but, FALSE, FALSE, 0);
  g_signal_connect (G_OBJECT (but), "clicked",  G_CALLBACK (cb_clicked), GINT_TO_POINTER(data));
}

void create_phrase_save_menu(GdkEventButton * event)
{
  destroy_phrase_save_menu();

  int len = tss.c_len - tss.c_idx;
  if ((len < 2 || len > MAX_PHRASE_LEN) && tss.c_idx < 2)
    return;

  phrase_save_win = gtk_window_new (GTK_WINDOW_TOPLEVEL);
  gtk_window_set_has_resize_grip(GTK_WINDOW(phrase_save_win), FALSE);
#if WIN32
  set_no_focus(phrase_save_win);
#endif
  gtk_widget_realize (phrase_save_win);

#if UNIX
  set_no_focus(phrase_save_win);
#else
  win32_init_win(phrase_save_win);
#endif
  GtkWidget *vbox = gtk_vbox_new (FALSE, 0);
  gtk_container_add(GTK_CONTAINER(phrase_save_win), vbox);
  char tt[512];

  add_button(vbox, _(_L("關閉")), 0, 0);

  GtkWidget *label = gtk_label_new(_(_L("--- 加到詞庫 ---")));
  gtk_box_pack_start (GTK_BOX (vbox), label, FALSE, FALSE, 0);


  if (len > 1 && len < MAX_PHRASE_LEN) {
    phokey_t phs[MAX_PHRASE_LEN];
    char str[MAX_PHRASE_STR_LEN];
    chpho_extract(&tss.chpho[tss.c_idx], len, phs, str);
    sprintf(tt, _(_L("%s shift-Enter")), str);
    add_button(vbox, tt, tss.c_idx, len);
  }

  if (tss.c_idx > 1) {
    for(len=2; len <= tss.c_idx && len <= 5; len++) {
      phokey_t phs[MAX_PHRASE_LEN];
      char str[MAX_PHRASE_STR_LEN];
      chpho_extract(&tss.chpho[tss.c_idx - len], len, phs, str);
      sprintf(tt, _(_L("%s Ctrl-%d")), str, len);
      add_button(vbox, tt, tss.c_idx, len);
    }
  }

  gtk_widget_show_all(phrase_save_win);
  int x, y, w_xl, w_yl;

  get_win_size(phrase_save_win, &w_xl, &w_yl);
  x = win_x;
  if (x + w_xl > dpy_xl)
    x = dpy_xl - w_xl;

  y = win_y + win_yl;
  if (y + w_yl > dpy_yl)
    y = win_y - w_yl;

  gtk_window_move(GTK_WINDOW(phrase_save_win), x, y);
}