⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 editor.h

📁 SEAL是DOS 下的32位保护模式的GUI程序
💻 H
字号:
/******************************************************************
 * SEAL 2.0                                                       *
 * Copyright (c) 1999-2002 SEAL Developers. All Rights Reserved.  *
 *                                                                *
 * Web site: http://sealsystem.sourceforge.net/                   *
 * E-mail (current maintainer): orudge@users.sourceforge.net      *
 ******************************************************************/

/*
   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 of the License, 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 program; if not, write to the Free Software
   Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
*/

#ifndef __EDITOR_H_INCLUDED__
#define __EDITOR_H_INCLUDED__

#ifdef __cplusplus
extern "C" {
#endif

#include <stdarg.h>
#include "scroller.h"

/* info texts */

#ifndef TXT_NOTENOUGHMEMORY
#define TXT_NOTENOUGHMEMORY    INI_TEXT("Not enough memory")
#endif


/* editor' init flags */

#define  EF_REWRITEUNABLE    0x01
#define  EF_FIXEDFONT        0x02  /* font has fixed width of chars */
#define  EF_HAVEBEENEDITED   0x04


#define  EDITOR_CHAR_ENTER      '\n'  /* ascii 10 */
#define  EDITOR_LINE_SIZE       1
#define  EDITOR_TAB_SIZE        5


extern l_color  pal_editor[];

typedef struct t_editor *p_editor;

typedef struct t_editor {

   struct t_scroller obclass;

   l_text            text;
   l_text            line_ptr;
   l_long            line_from;
   l_long            line_num;
   l_long            line;
   l_long            line_pos;
   l_long            line_pos_from;
   l_long            line_longest;
   l_int             cursor_visible;

   t_rect            sel_from;
   t_point           sel_old;
   l_long            sel_ok;

   l_int             flags;

   l_text          (*lntxtlen) ( p_editor o, l_long line, l_long *len );
   l_long          (*lnmax) ( p_editor o, l_long *longest );
   l_text          (*lnptr) ( p_editor o, l_long line );
   l_text          (*posptr) ( p_editor o, l_long line, l_long pos );
   l_long          (*sizeto) ( l_text from, l_long deltaln, l_long deltapos );
   l_long          (*lnlen) ( p_editor o, l_long line );
   l_long          (*lnlenptr) ( p_editor o, l_text ptr );
   l_long          (*xsize_of_line) ( p_editor o, l_long line, l_long max );
   l_long          (*ysize_of_line) ( p_editor o, l_long line, l_long h, l_long (*p) );
   void            (*draw_cursor) ( p_editor o, l_long oldline, l_long oldpos );
   void            (*draw_cursor_ex) ( p_editor o, l_long line, l_long pos, l_int active );
   void            (*show_cursor) ( p_editor o, l_bool show );
   t_rect          (*get_cursor_rect) ( p_editor o, l_long oldline, l_long oldpos );
   l_long          (*charsin_size) ( p_editor o, l_rect size, l_long line, l_long pos, l_int plus );
   l_long          (*charsin) ( p_editor o, l_long line, l_long pos, l_int plus );
   l_long          (*linesin) ( p_editor o, l_long line, l_int plus );
   l_long          (*linesin_size) ( p_editor o, l_rect size, l_long line, l_int plus );
   l_int           (*lines_inpage) ( p_editor o );
   void            (*draw_select) ( p_editor o, t_rect dst, t_rect src );

   l_bool          (*insstr) ( p_editor o, l_long pos, l_text str );
   l_bool          (*delstr) ( p_editor o, l_long pos, l_long size );
   l_int           (*delchr) ( p_editor o, l_long line, l_long pos );
   l_bool          (*inschr) ( p_editor o, l_char chr, l_long line, l_long pos );

   l_bool          (*set_text) ( p_editor o, l_text txt );
   t_rect          (*line_rect) ( p_editor o, l_long line );

   void            (*draw_box_ex) ( p_editor o, l_long linefrom );
   void            (*draw_box) ( p_editor o );
   void            (*draw_line) ( p_editor o, l_long line );

   void            (*realpos) ( p_editor o, l_long *line, l_long *pos );
   void            (*redraw_text) ( p_editor o, l_long newline, l_long newpos, l_int keycode );

   t_point         (*cursor_mouse_pos) ( p_editor o, t_point where );

} t_editor;

#define EDITOR(o) ((p_editor)(o))

#define ed_sel_clear(o) ((o)->sel_from = rect_empty)
#define ed_is_wable(o)  (!((o)->flags & EF_REWRITEUNABLE))
#define ed_is_sel(o)    ((o)->sel_from.a.x != (o)->sel_from.b.x || (o)->sel_from.a.y != (o)->sel_from.b.y && ((o)->sel_from.a.x >= 0 && (o)->sel_from.a.y >= 0))

p_editor  _editor_init ( p_editor o, t_rect r, l_int flags );
extern p_editor  (*editor_init) ( p_editor o, t_rect r, l_int flags );

l_bool  editor_set_data ( p_object o, t_data *rec );
l_bool  editor_get_data ( p_object o, t_data *rec );
void    editor_set_state ( p_object o, l_dword st, l_bool set );
void    editor_set_options ( p_object o, l_dword op, l_bool set );
void    editor_translate_event ( p_object o, t_event *event );

t_rect  editor_size_limits ( p_view o );
void    editor_draw ( p_view o );
l_bool  editor_drag_where ( p_view o, t_data *rec, t_point where );


l_text  editor_lntxtlen ( p_editor o, l_long line, l_long *len );
l_long  editor_lnmax ( p_editor o, l_long *longest );
l_text  editor_lnptr ( p_editor o, l_long line );
l_text  editor_posptr ( p_editor o, l_long line, l_long pos );
l_long  editor_sizeto ( l_text from, l_long deltaln, l_long deltapos );
l_long  editor_lnlen ( p_editor o, l_long line );
l_long  editor_lnlenptr ( p_editor o, l_text ptr );
l_long  editor_xsize_of_line ( p_editor o, l_long line, l_long max );
l_long  editor_ysize_of_line ( p_editor o, l_long line, l_long h, l_long (*p) );
void    editor_draw_cursor ( p_editor o, l_long oldline, l_long oldpos );
void    editor_draw_cursor_ex ( p_editor o, l_long line, l_long pos, l_int active );
void    editor_show_cursor ( p_editor o, l_bool show );
t_rect  editor_get_cursor_rect ( p_editor o, l_long oldline, l_long oldpos );
l_long  editor_charsin_size ( p_editor o, l_rect size, l_long line, l_long pos, l_int plus );
l_long  editor_charsin ( p_editor o, l_long line, l_long pos, l_int plus );
l_long  editor_linesin ( p_editor o, l_long line, l_int plus );
l_long  editor_linesin_size ( p_editor o, l_rect size, l_long line, l_int plus );
l_int   editor_lines_inpage ( p_editor o );
void    editor_draw_select ( p_editor o, t_rect dst, t_rect src );

l_bool  editor_insstr ( p_editor o, l_long pos, l_text str );
l_bool  editor_delstr ( p_editor o, l_long pos, l_long size );
l_int   editor_delchr ( p_editor o, l_long line, l_long pos );
l_bool  editor_inschr ( p_editor o, l_char chr, l_long line, l_long pos );

l_bool  editor_set_text ( p_editor o, l_text txt );

t_rect  editor_line_rect ( p_editor o, l_long line );

void    editor_draw_box_ex ( p_editor o, l_long linefrom );
void    editor_draw_box ( p_editor o );
void    editor_draw_line ( p_editor o, l_long line );

void    editor_realpos ( p_editor o, l_long *line, l_long *pos );
void    editor_redraw_text ( p_editor o, l_long newline, l_long newpos, l_int keycode );

t_point editor_cursor_mouse_pos ( p_editor o, t_point where );

t_rect editor_scroll_limits ( p_scroller o );
void   editor_scroll_size ( p_scroller o, l_long *x, l_long *y );
void   editor_recalc_positions ( p_scroller o, l_long x, l_long y );

void set_edited ( p_editor o );
void set_notedited ( p_editor o );

#ifdef __cplusplus
   }
#endif

#endif

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -