Mercurial > freewnn
diff Xwnmo/xjutil/xw_touroku.c @ 0:bbc77ca4def5
initial import
author | Yoshiki Yazawa <yaz@cc.rim.or.jp> |
---|---|
date | Thu, 13 Dec 2007 04:30:14 +0900 |
parents | |
children |
line wrap: on
line diff
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/Xwnmo/xjutil/xw_touroku.c Thu Dec 13 04:30:14 2007 +0900 @@ -0,0 +1,262 @@ +/* + * $Id: xw_touroku.c,v 1.2 2001/06/14 18:16:13 ura Exp $ + */ + +/* + * FreeWnn is a network-extensible Kana-to-Kanji conversion system. + * This file is part of FreeWnn. + * + * Copyright OMRON Corporation. 1987, 1988, 1989, 1990, 1991, 1992, 1999 + * Copyright 1991, 1992 by Massachusetts Institute of Technology + * + * Author: OMRON SOFTWARE Co., Ltd. <freewnn@rd.kyoto.omronsoft.co.jp> + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; either version 2, or (at your option) + * any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with GNU Emacs; see the file COPYING. If not, write to the + * Free Software Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. + * + * Commentary: + * + * Change log: + * + * Last modified date: 8,Feb.1999 + * + * Code: + * + */ + +#include <stdio.h> +#include <string.h> +#include "commonhd.h" +#include "sdefine.h" +#include "xjutil.h" +#include "sxheader.h" +#include "xext.h" + +void +xw_jutil_write_msg (msg) + unsigned char *msg; +{ + int wc_len; + + while (1) + { + wc_len = char_to_wchar (xjutil->xlc, msg, wc_buf, strlen ((char *) msg), wc_buf_max); + if (wc_len < -1) + { + return; + } + else if (wc_len == -1) + { + if (realloc_wc_buf () < 0) + return; + } + else + { + break; + } + } + JW1Mputwc (wc_buf, wc_len); + if (cur_text->currentcol > cur_text->max_pos) + { + cur_text->max_pos = cur_text->currentcol; + } + XFlush (dpy); +} + +void +init_jutil (title, exec_t, cnt, t1, mes1) + unsigned char *title, *exec_t; + int cnt; + unsigned char *t1[]; + unsigned char *mes1[]; +{ + register JutilRec *jutil = cur_root->jutil; + register BoxRec *box; + register JutilTextRec *text; + int width, height, x_cood, y_cood; +#ifdef nodef + int save_x, save_y; + Window root, child; + int win_x, win_y; + unsigned int keys_buttons; +#endif + int i; + int len_t, max_mes_t; + int max_columns; + + xjutil->mode |= JUTIL_MODE; + + jutil->title->string = title; + jutil->button[EXEC_W]->string = exec_t; + jutil->max_mes = cnt; + for (i = 0; i < jutil->max_mes; i++) + jutil->mes_button[i]->string = NULL; + + moveresize_box (jutil->title, FontWidth, FontHeight / 2, (FontWidth * (len_t = strlen ((char *) title)) + IN_BORDER * 2), (FontHeight + IN_BORDER * 2)); + len_t += 1; + moveresize_box (jutil->button[CANCEL_W], + (FontWidth * (len_t += SPACING)), FontHeight / 2, (FontWidth * strlen ((char *) jutil->button[CANCEL_W]->string) + IN_BORDER * 2), FontHeight + IN_BORDER * 2); + len_t += strlen ((char *) jutil->button[CANCEL_W]->string); + moveresize_box (jutil->button[EXEC_W], (FontWidth * (len_t += SPACING)), FontHeight / 2, (FontWidth * strlen ((char *) jutil->button[EXEC_W]->string) + IN_BORDER * 2), FontHeight + IN_BORDER * 2); + XSetWindowBackground (dpy, jutil->w, cur_root->bg); + changecolor_box (jutil->title, cur_root->fg, cur_root->bg, cur_root->fg, BoxAll); + changecolor_box (jutil->button[CANCEL_W], cur_root->fg, cur_root->bg, cur_root->fg, BoxAll); + changecolor_box (jutil->button[EXEC_W], cur_root->fg, cur_root->bg, cur_root->fg, BoxAll); + + jutil->mode = MESSAGE1; + max_mes_t = 0; + for (i = 0; i < jutil->max_mes; i++) + { + box = jutil->mes_button[i]; + box->string = t1[i]; + if (jutil->max_mes > 1) + { + box->cb = jutil_mode_set; + box->cb_data = (int *) i; + box->do_ret = True; + } + else + { + freeze_box (box); + box->cb = NULL; + box->cb_data = NULL; + box->do_ret = False; + } + moveresize_box (box, (FontWidth - IN_BORDER), (FontHeight * (3 + i * 2) - IN_BORDER), (FontWidth * (len_t = strlen ((char *) box->string)) + IN_BORDER * 2), (FontHeight + IN_BORDER * 2)); + changecolor_box (box, cur_root->fg, cur_root->bg, cur_root->bg, BoxAll); + map_box (box); + + len_t += SPACING; + if (len_t > max_mes_t) + max_mes_t = len_t; + } + + width = FontWidth * (TEXT_WIDTH + max_mes_t + SPACING); + height = FontHeight * (3 + cnt * 2); + if (width >= DisplayWidth (dpy, cur_root->screen) - cur_root->bw) + { + width = DisplayWidth (dpy, cur_root->screen) - cur_root->bw; + max_columns = width / FontWidth - (max_mes_t + SPACING); + } + else + { + max_columns = TEXT_WIDTH; + } + + for (i = 0; i < jutil->max_mes; i++) + { + text = jutil->mes_text[i]; + text->max_columns = max_columns; + text->width = max_columns * FontWidth; + XMoveResizeWindow (dpy, text->wp, (FontWidth * max_mes_t), (FontHeight * (3 + i * 2)), (FontWidth * text->max_columns), FontHeight); + XSetWindowBackground (dpy, text->wp, cur_root->bg); + XClearWindow (dpy, text->wp); + resize_text (text); + XMapWindow (dpy, text->wp); + cur_text = text; + JWMline_clear (0); + if (mes1 && mes1[i] && *mes1[i]) + { + xw_jutil_write_msg (mes1[i]); + } + } + + moveresize_box (jutil->rk_mode, (width - FontWidth * (MHL0 + SPACING)), FontHeight / 2, (FontWidth * MHL0 + IN_BORDER * 2), (FontHeight + IN_BORDER * 2)); + changecolor_box (jutil->rk_mode, cur_root->fg, cur_root->bg, cur_root->fg, BoxAll); + decide_position (width, height, cur_root->bw, &x_cood, &y_cood); +#ifdef nodef + XQueryPointer (dpy, cur_root->root_window, &root, &child, &save_x, &save_y, &win_x, &win_y, &keys_buttons); + jutil->save_p.x = (short) save_x; + jutil->save_p.y = (short) save_y; + XWarpPointer (dpy, None, cur_root->root_window, 0, 0, 0, 0, x_cood + FontWidth * 2, y_cood + FontHeight); +#endif + + XMoveResizeWindow (dpy, jutil->w, x_cood - 2, y_cood - 2, width, height); + set_wm_properties (jutil->w, x_cood - 2, y_cood - 2, width, height, CenterGravity, NULL, NULL, 0, 0, 0, 0, 0); + XRaiseWindow (dpy, jutil->w); + XMapWindow (dpy, jutil->w); + + disp_mode (); + XFlush (dpy); + +} + +static void +clear_jutil_buf (buf) + int *buf; +{ + register int *x; + + x = buf; + for (; *x != 0; x++) + { + *x = 0; + } +} + +void +end_jutil () +{ + int i; + JutilRec *jutil = cur_root->jutil; + + for (i = 0; i < jutil->max_mes; i++) + { + clear_jutil_buf (jutil->mes_text[i]->buf); + unmap_box (jutil->mes_button[i]); + XUnmapWindow (dpy, jutil->mes_text[i]->wp); + } + XWithdrawWindow (dpy, jutil->w, DefaultScreen (dpy)); +/* + XUnmapWindow(dpy, jutil->w); +*/ +#ifdef nodef + if (jutil->save_p.x > -1) + { + XWarpPointer (dpy, None, cur_root->root_window, 0, 0, 0, 0, jutil->save_p.x, jutil->save_p.y); + jutil->save_p.x = jutil->save_p.y = -1; + } + XFlush (dpy); +#endif + jutil->button[EXEC_W]->in = jutil->button[CANCEL_W]->in = 0; + xjutil->mode &= ~JUTIL_MODE; + xjutil->sel_ret = -1; +} + +void +change_cur_jutil (cur) + int cur; +{ + cur_text = cur_root->jutil->mes_text[cur]; +} + +void +hanten_jutil_mes_title (mes, rev) + int mes; + int rev; +{ + cur_root->jutil->mes_button[mes]->in = rev; + redraw_box (cur_root->jutil->mes_button[mes]); +} + +void +change_mes_title (mes, msg, rev) + int mes; + unsigned char *msg; + int rev; +{ + cur_root->jutil->mes_button[mes]->string = msg; + hanten_jutil_mes_title (mes, rev); + +}