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/.
#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_
|