/* # skkinput (Simple Kana-Kanji Input)
 * SeparateWinP.h --- Separate Window Style
 * This file is part of skkinput.
 * Copyright (C) 1997
 * Takashi SAKAMOTO (sakamoto@yajima.kuis.kyoto-u.ac.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 skkinput; see the file COPYING.  If not, write to
 * the Free Software Foundation, 675 Mass Ave, Cambridge, MA 02139, USA.
 */
#ifndef SeparateWinP_h
#define SeparateWinP_h

#include "commondef.h"
#include "buffers.h"
#include "skkbuf.h"
#include "skkkey.h"
#include "SeparateWin.h"
#include "HistMgr.h"
#include "FontMgr.h"
#include "attrs.h"
#include <X11/CoreP.h>

typedef struct {
	Pixel		puppixel ;	/* foreground pixel */
	/* fontset の名前が入る文字列。こいつを convert して fontset に叩き
	 * 込むことになる。 */
	String	fontset_string ;
	String	minibuf_fontset_string ;
	/* 利用しているフォント。補助漢字も入れるのかなあ？ */
	struct skkinputManagedFont	*fontset[ NUMBER_OF_CHARSET ] ;
	struct skkinputManagedFont	*minibuf_fontset[ NUMBER_OF_CHARSET ] ;
	/* 画面を描画するのに用いる GC */
	GC		gc, rgc ;
	/* フォントの情報…毎回抜き出しているのはしんどいので。*/
	int		font_height, font_ascent ;
	/* カーソルの大きさ。下に文字があるときは、その文字の大きさにあわせ
	 * るが、それが無かった場合にどの程度の幅にするのかを指定。 */
	int		cursor_width ;
	/* 反転表示するか否か */
	Boolean	reverse_video ;
	Boolean	overthespotLikeInput ;
	/* Shift + Space で閉じるかどうか。*/
	Boolean	compatible_close_skkinputkey ;
	Boolean	clearMinibuffer ;
	Boolean	south_cursor ;
	Boolean	m_fInputFocus ;

	Window	focus_window ;
	Window	client_window ;
	/* クライアントから送られてきた情報を受ける変数。*/
	struct ConvAttrsMesg *camsg ;

	/* */
	Widget	canvas, canvas_popup ;
	int		canvas_probe ;
	int		conversion_set_focus, conversion_unset_focus ;
	
	/* フォーカスが合っているかどうか。*/
	int		is_focus ;

	/* 差分描画に用いるバッファ。ここが結構メモリを喰ってるんだ…*/
	struct myChar pwrite_string[ TEXTBUFSIZE ] ;
	struct myChar pmtextbuffer[ TEXTBUFSIZE ] ;
	
	/* Callback …こんなに一杯ある…。*/
	XtCallbackList endcallback ;	/* Widget を破壊する時に利用。*/
	XtCallbackList fixcallback ;	/* 変換後の文字列を送るのに利用。*/
	XtCallbackList keybackcallback ;	/* キーを押し戻すのに利用。*/
	XtCallbackList			m_lstTextCallback ;
	
	/* 履歴情報の受渡しに使う変数(ポインタ)。*/
	HistoryListNode *historyAttribute ;
	
	/* skkinput の buffer */
	struct skkinputBuffer	buffer ;
	unsigned long prev_modeline ;
}	SeparateWinPart ;

typedef struct _SeparateWinRec {
  CorePart 		core ;
  SeparateWinPart	separateWin ;
} SeparateWinRec ;

/* New fields for the My widget class record */
typedef struct {
  int dummy ;
} SeparateWinClassPart ;

typedef struct _SeparateWinClassRec {
  CoreClassPart		core_class ;
  SeparateWinClassPart	separateWin_class ;
} SeparateWinClassRec ;

extern SeparateWinClassRec separateWinClassRec ;

/*
 * その他…大域変数宣言。( SeparateWin.c の中だけで有効。)
 */
static unsigned char *modelineFullStrings[] = {
  "--SKK:E.:--", "--全英E.:--", "--カナE.:--", "--かなE.:--",
} ;

/* 辞書の修正によって違うモードライン。*/
static unsigned char *modelineDirtyStrings[] = {
  "--", "**", 
} ;

static unsigned char *majorModeStrings[] = {
  "(Fundamental", "(Chatadapter", 
} ;

static unsigned char *minorModeStrings[] = {
  ")--All-------------",
  " egg-nl)--All------",	/* 1 */
  " Ovspt)--All-------",	/* 2 */
  " Ovspt egg-nl)--All",
} ;


#endif
