summaryrefslogtreecommitdiffstats
path: root/src/edit.h
blob: 89019564f5a8afaaa7f281b438ef887ea8308099 (plain)
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
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
// * This file is part of the COLOBOT source code
// * Copyright (C) 2001-2008, Daniel ROUX & EPSITEC SA, www.epsitec.ch
// *
// * 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 3 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, see  http://www.gnu.org/licenses/.// edit.h

#ifndef _EDIT_H_
#define	_EDIT_H_


#include "control.h"


class CD3DEngine;
class CScroll;



#define EDITSTUDIOMAX	20000		// nb max de caract�res pour �diter CBOT
#define EDITLINEMAX		1000		// nb max total de lignes
#define EDITIMAGEMAX	50			// nb max total de lignes avec images
#define EDITLINKMAX		100			// nb max de liens
#define EDITHISTORYMAX	50			// nb max de niveaux concerv�s

#define EDITUNDOMAX		20			// nb max de undo successifs

typedef struct
{
	char*	text;			// texte original
	int		len;			// longueur du texte
	int		cursor1;		// offset curseur
	int		cursor2;		// offset curseur
	int		lineFirst;		// premi�re ligne affich�e.

}
EditUndo;

enum OperUndo
{
	OPERUNDO_SPEC	= 0,	// op�ration sp�ciale
	OPERUNDO_INSERT	= 1,	// insertion de caract�res
	OPERUNDO_DELETE	= 2,	// suppression de caract�res
};

typedef struct
{
	char	name[40];		// nom de l'image (sans diagram\)
	float	offset;			// offset vertical (v texture)
	float	height;			// hauteur de la tranche (dv texture)
	float	width;			// largeur
}
ImageLine;

typedef struct
{
	char	name[40];		// nom du fichier texte (sans help\)
	char	marker[20];		// nom du marqueur
}
HyperLink;

typedef struct
{
	char	name[20];		// nom du marqueur
	int		pos;			// position dans le texte
}
HyperMarker;

typedef struct
{
	char	filename[50];	// nom complet du fichier texte
	int		firstLine;		// rang de la premi�re ligne affich�e
}
HyperHistory;




class CEdit : public CControl
{
public:
	CEdit(CInstanceManager* iMan);
	~CEdit();

	BOOL		Create(FPOINT pos, FPOINT dim, int icon, EventMsg eventMsg);

	void		SetPos(FPOINT pos);
	void		SetDim(FPOINT dim);

	BOOL		EventProcess(const Event &event);
	void		Draw();

	void		SetText(char *text, BOOL bNew=TRUE);
	void		GetText(char *buffer, int max);
	char*		RetText();
	int			RetTextLength();

	BOOL		ReadText(char *filename, int addSize=0);
	BOOL		WriteText(char *filename);

	void		SetMaxChar(int max);
	int			RetMaxChar();

	void		SetEditCap(BOOL bMode);
	BOOL		RetEditCap();

	void		SetHiliteCap(BOOL bEnable);
	BOOL		RetHiliteCap();

	void		SetInsideScroll(BOOL bInside);
	BOOL		RetInsideScroll();

	void		SetSoluceMode(BOOL bSoluce);
	BOOL		RetSoluceMode();

	void		SetGenericMode(BOOL bGeneric);
	BOOL		RetGenericMode();

	void		SetAutoIndent(BOOL bMode);
	BOOL		RetAutoIndent();

	void		SetCursor(int cursor1, int cursor2);
	void		GetCursor(int &cursor1, int &cursor2);

	void		SetFirstLine(int rank);
	int			RetFirstLine();
	void		ShowSelect();

	void		SetDisplaySpec(BOOL bDisplay);
	BOOL		RetDisplaySpec();

	void		SetMultiFont(BOOL bMulti);
	BOOL		RetMultiFont();

	BOOL		Cut();
	BOOL		Copy();
	BOOL		Paste();
	BOOL		Undo();

	void		HyperFlush();
	void		HyperHome(char *filename);
	BOOL		HyperTest(EventMsg event);
	BOOL		HyperGo(EventMsg event);

	void		SetFontSize(float size);

	BOOL		ClearFormat();
	BOOL		SetFormat(int cursor1, int cursor2, int format);

protected:
	void		SendModifEvent();
	BOOL		IsLinkPos(FPOINT pos);
	void		MouseDoubleClick(FPOINT mouse);
	void		MouseClick(FPOINT mouse);
	void		MouseMove(FPOINT mouse);
	void		MouseRelease(FPOINT mouse);
	int			MouseDetect(FPOINT mouse);
	void		MoveAdjust();

	void		HyperJump(char *name, char *marker);
	BOOL		HyperAdd(char *filename, int firstLine);

	void		DrawImage(FPOINT pos, char *name, float width, float offset, float height, int nbLine);
	void		DrawBack(FPOINT pos, FPOINT dim);
	void		DrawPart(FPOINT pos, FPOINT dim, int icon);

	void		FreeImage();
	void		LoadImage(char *name);
	void		Scroll(int pos, BOOL bAdjustCursor);
	void		Scroll();
	void		MoveChar(int move, BOOL bWord, BOOL bSelect);
	void		MoveLine(int move, BOOL bWord, BOOL bSelect);
	void		MoveHome(BOOL bWord, BOOL bSelect);
	void		MoveEnd(BOOL bWord, BOOL bSelect);
	void		ColumnFix();
	void		Insert(char character);
	void		InsertOne(char character);
	void		Delete(int dir);
	void		DeleteOne(int dir);
	int			IndentCompute();
	int			IndentTabCount();
	void		IndentTabAdjust(int number);
	BOOL		Shift(BOOL bLeft);
	BOOL		MinMaj(BOOL bMaj);
	void		Justif();
	int			RetCursorLine(int cursor);

	void		UndoFlush();
	void		UndoMemorize(OperUndo oper);
	BOOL		UndoRecall();

protected:
	CScroll*	m_scroll;			// ascenseur vertical � droite

	int			m_maxChar;			// lg max du buffer m_text
	char*		m_text;				// texte (sans z�ro terminateur)
	char*		m_format;			// format des caract�res
	int			m_len;				// longueur utilis�e dans m_text
	int			m_cursor1;			// offset curseur
	int			m_cursor2;			// offset curseur

	BOOL		m_bMulti;			// TRUE -> multi lignes
	BOOL		m_bEdit;			// TRUE -> �ditable
	BOOL		m_bHilite;			// TRUE -> hilitable
	BOOL		m_bInsideScroll;	// TRUE -> ascenseur dans le cadre
	BOOL		m_bDisplaySpec;		// TRUE -> affiche les caract�res sp�ciaux
	BOOL		m_bMultiFont;		// TRUE -> plusieurs fontes possible
	BOOL		m_bSoluce;			// TRUE -> montre les liens-solution
	BOOL		m_bGeneric;			// TRUE -> g�n�rique qui d�file
	BOOL		m_bAutoIndent;		// TRUE -> indentation automatique
	float		m_lineHeight;		// hauteur d'une ligne
	float		m_lineAscent;		// hauteur au-dessus de la ligne de base
	float		m_lineDescent;		// hauteur au-dessous de la ligne de base
	int			m_lineVisible;		// nb total de ligne affichables
	int			m_lineFirst;		// premi�re ligne affich�e
	int			m_lineTotal;		// nb lignes utilis�es (ds m_lineOffset)
	int			m_lineOffset[EDITLINEMAX];
	char		m_lineIndent[EDITLINEMAX];
	int			m_imageTotal;
	ImageLine	m_image[EDITIMAGEMAX];
	HyperLink	m_link[EDITLINKMAX];
	int			m_markerTotal;
	HyperMarker	m_marker[EDITLINKMAX];
	int			m_historyTotal;
	int			m_historyCurrent;
	HyperHistory m_history[EDITHISTORYMAX];
	float		m_time;				// temps absolu
	float		m_timeBlink;
	float		m_timeLastClick;
	float		m_timeLastScroll;
	FPOINT		m_mouseFirstPos;
	FPOINT		m_mouseLastPos;
	float		m_column;

	BOOL		m_bCapture;

	BOOL		m_bUndoForce;
	OperUndo	m_undoOper;
	EditUndo	m_undo[EDITUNDOMAX];
};


#endif //_EDIT_H_