/*
* $Id: window.h,v 1.6 2001/01/10 20:16:32 danny Exp $
*
* Copyright © 1992, 1993, 1999 Free Software Foundation, Inc.
*
* 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 this software; see the file COPYING. If not, write to
* the Free Software Foundation, 675 Mass Ave, Cambridge, MA 02139, USA.
*/
#ifndef WINDOWH
#define WINDOWH
#include "cell.h"
#include "line.h"
/* The tty windows datastructures: */
struct window
{
/* Do not change these directly. */
int id;
int win_over; /* Where the data in this window starts */
int win_down; /* on the screen. */
struct rng screen; /* Cells visible. recenter_* updates this. */
int flags; /* You must use io_set_win_flags and perhaps */
/* io_recenter_cur_win */
/* Number of lines of spreadsheet that can fit in this window.
This only changes when the screen is resized,
win->flags&WIN_EDGES changes, or a window is either
created or destroyed */
int numr;
/* Number of text columns that can fit in this window.
This changes when the screen is resized,
win->flags&WIN_EDGES changes, a window is created or
destoryed, or win->lh_wid changes. In the last case
win->numc+win->lh_wid remains a constant. */
int numc;
/*
* Number of columns and rows for right and bottom edges.
* As this changes, numc and numr change accordingly.
*/
int bottom_edge_r;
int right_edge_c;
/* These values may be changed at any time. */
/* -1 if this window isn't linked to any others, else
contains the index into wins of the window this one is
linked to */
int link;
/* Number of columns taken up by the row numbers at the
left hand edge of the screen. Zero if edges is
win->flags&WIN_EDGES is off (by definition). Seven (or
five) if win->flags&WIN_PAG_HZ (to make things easier).
Ranges between three "R9 " to seven "R32767 " depending on
the number of the highest row on the screen. */
int lh_wid;
/* Cursor row/column in this window */
/* Note that the external variables curow, cucol are used for
the currently active cursor position, so if you want
cwin->curow and cwin->cucol to be accurate, you have to
set them yourself. */
CELLREF win_curow;
CELLREF win_cucol;
VOIDSTAR *win_slops; /* Slops in this window (tty only) */
};
struct mouse_event
{
int seq;
int row;
int col;
int button;
int downp;
int location; /* See #defines, below. */
CELLREF r;
CELLREF c;
struct mouse_event * next;
struct mouse_event * prev;
};
/* Window flags:
0x01 Locked horizontally
0x02 Locked vertically
0x04 Page Horizontally
0x08 Page Vertically
0x10 Edges disabled
0x20 Edges standout
*/
#define WIN_LCK_HZ 0x01
#define WIN_LCK_VT 0x02
#define WIN_PAG_HZ 0x04
#define WIN_PAG_VT 0x08
#define WIN_EDGES 0x10
#define WIN_EDGE_REV 0x20
#if 0
#define scr_lines Global->scr_lines
#define scr_cols Global->scr_cols
#endif
/* These control the layout of input and status lines. */
#define user_input Global->user_input
#define user_status Global->user_status
/* #define input Global->input */
/* #define status Global->status */
#define input_rows Global->input_rows
#define status_rows Global->status_rows
/* These control the layout of edge labels. */
#define label_rows Global->label_rows
#define label_emcols Global->label_emcols
/* Temporary hacks for displaying multi-line messages. */
/* If this is non-0, it should be displayed instead of
* the windows of cells. This is a temporary hack.
* Use set_info to change this.
*/
/* #define current_info Global->current_info */
#define info_rows Global->info_rows
/* #define info_line Global->info_line */
#define info_over Global->info_over
/* Window borders: */
#define default_right_border Global->default_right_border
#define default_bottom_border Global->default_bottom_border
/* The window list. */
#define nwin Global->nwin
#define cwin Global->cwin
#define wins Global->wins
#define win_id Global->win_id
/* This is stored as the button number when a dequeue failes. */
#define MOUSE_QERROR -1
/* These are the possible mouse locations. */
#define MOUSE_ON_INPUT -1
#define MOUSE_ON_STATUS -2
#define MOUSE_ON_EDGE -3
#define MOUSE_CHAR '\034'
extern int win_label_cols (struct window * win, CELLREF hr);
extern int win_label_rows (struct window * win);
extern void io_set_label_size (int r, int c);
extern void io_set_scr_size (int lines, int cols);
extern void io_set_input_rows (int n);
extern void io_set_status_rows (int n);
extern void io_set_input_status (int inp, int stat, int redraw);
extern void io_set_cwin (struct window *win);
extern void io_pr_cell (CELLREF r, CELLREF c, CELL *cp);
extern void io_redo_region (struct rng * rng);
extern void io_win_open (int hv, int where);
extern void io_win_close (struct window *win);
extern void io_move_cell_cursor (CELLREF rr, CELLREF cc);
extern void io_shift_cell_cursor (int dirn, int repeat);
extern void io_scroll_cell_cursor (int magic, int repeat);
extern void io_recenter_cur_win (void);
extern void io_recenter_all_win (void);
extern void io_set_win_flags (struct window *w, int f);
extern void io_write_window_config (struct line * out);
extern void io_read_window_config (char * line);
extern int enqueue_mouse_event (int r, int c, int button, int downp);
extern void dequeue_mouse_event (struct mouse_event *out, int seq);
extern void io_init_windows (int sl, int sc, int ui, int us, int ir, int sr,
int lr, int lc) ;
#endif
syntax highlighted by Code2HTML, v. 0.9.1