Subversion Repositories Kolibri OS

Rev

Rev 7466 | Go to most recent revision | Details | Compare with Previous | Last modification | View Log | RSS feed

Rev Author Line No. Line
5962 leency 1
#define MEMSIZE 4096*25
5819 leency 2
 
7466 leency 3
//===================================================//
4
//                                                   //
5
//                       LIB                         //
6
//                                                   //
7
//===================================================//
8
 
5886 pavelyakov 9
#include "../lib/io.h"
7288 leency 10
#include "../lib/gui.h"
5819 leency 11
#include "../lib/list_box.h"
7286 leency 12
#include "../lib/kfont.h"
7230 leency 13
 
5819 leency 14
#include "../lib/obj/box_lib.h"
15
#include "../lib/obj/libini.h"
7230 leency 16
#include "../lib/obj/libimg.h"
5819 leency 17
#include "../lib/obj/iconv.h"
18
#include "../lib/obj/proc_lib.h"
7230 leency 19
 
5819 leency 20
#include "../lib/patterns/simple_open_dialog.h"
21
 
7466 leency 22
//===================================================//
23
//                                                   //
24
//                       DATA                        //
25
//                                                   //
26
//===================================================//
27
 
5819 leency 28
#define TOOLBAR_H 34
5923 leency 29
#define TOOLBAR_ICON_WIDTH  26
30
#define TOOLBAR_ICON_HEIGHT 24
5819 leency 31
 
5923 leency 32
#define DEFAULT_EDITOR "/sys/tinypad"
33
 
5980 leency 34
#define INTRO_TEXT "This is a plain Text Reader.\nTry to open some text file."
7466 leency 35
#define VERSION "Text Reader v1.3"
5962 leency 36
#define ABOUT "Idea: Leency, punk_joker
37
Code: Leency, Veliant, KolibriOS Team
5923 leency 38
 
5962 leency 39
Hotkeys:
40
Ctrl+O - open file
7218 leency 41
Ctrl+I - show file properties
5962 leency 42
Ctrl+Up - bigger font
43
Ctrl+Down - smaller font
44
Ctrl+Tab - select charset
7462 leency 45
Ctrl+E - reopen current file in another app
5962 leency 46
 
47
Press any key..."
48
 
7466 leency 49
dword color_schemes[] = {
50
0xFFFfff, 0,
51
0xF0F0F0, 0,
52
0xE9E5DA, 0,
53
0xF0F0C7, 0,
54
0xFCF0DA, 0x574531,
7468 leency 55
0xFDF6E3, 0x101A21,
7466 leency 56
0x282C34, 0xABB2BF,
57
0x282923, 0xD8D8D2
58
};
59
 
60
char color_scheme_names[] =
61
"White & Black
62
Grey & Black      RtfRead
63
Khaki & Black     QNX
64
Lemon & Black     Fb2Read
65
Antique & Black   Pocket
66
Linen & Black     Horst
67
DarkGrey & Grey   Godot
68
DarkGrey & Grey   Monokai";
69
 
5819 leency 70
char default_dir[] = "/rd/1";
7286 leency 71
od_filter filter2 = { 8, "TXT\0\0" };
5819 leency 72
 
73
scroll_bar scroll = { 15,200,398,44,0,2,115,15,0,0xeeeeee,0xBBBbbb,0xeeeeee,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1};
74
llist list;
75
 
76
proc_info Form;
77
char title[4196];
78
 
7218 leency 79
bool help_opened = false;
7466 leency 80
int charsets_mx;
81
int reopenin_mx;
82
int colscheme_mx;
5819 leency 83
 
7466 leency 84
int curcol_scheme;
85
 
5819 leency 86
enum {
5962 leency 87
	OPEN_FILE,
5819 leency 88
	MAGNIFY_MINUS,
89
	MAGNIFY_PLUS,
90
	CHANGE_ENCODING,
91
	RUN_EDIT,
92
	SHOW_INFO,
7466 leency 93
	SHOW_FILE_PROPERTIES,
94
	COLOR_SCHEME
5819 leency 95
};
96
 
7051 leency 97
int encoding;
98
 
7466 leency 99
dword bg_color;
100
dword text_color;
7462 leency 101
 
7466 leency 102
//===================================================//
103
//                                                   //
104
//                 INTERNAL INCLUDES                 //
105
//                                                   //
106
//===================================================//
107
 
5819 leency 108
#include "ini.h"
5980 leency 109
#include "prepare_page.h"
5819 leency 110
 
7466 leency 111
//===================================================//
112
//                                                   //
113
//                       CODE                        //
114
//                                                   //
115
//===================================================//
116
 
5923 leency 117
void InitDlls()
118
{
119
	load_dll(boxlib,    #box_lib_init,   0);
120
	load_dll(libio,     #libio_init,     1);
121
	load_dll(libimg,    #libimg_init,    1);
122
	load_dll(libini,    #lib_init,       1);
123
	load_dll(iconv_lib, #iconv_open,     0);
124
	load_dll(Proc_lib,  #OpenDialog_init,0);
125
}
126
 
5819 leency 127
void main()
5923 leency 128
{
5987 leency 129
	InitDlls();
5819 leency 130
	OpenDialog_init stdcall (#o_dialog);
7286 leency 131
	LoadIniSettings();
7466 leency 132
	EventSetColorScheme(curcol_scheme);
6806 leency 133
	kfont.init(DEFAULT_FONT);
5819 leency 134
	Libimg_LoadImage(#skin, abspath("toolbar.png"));
135
	OpenFile(#param);
136
	list.no_selection = true;
7227 leency 137
	SetEventMask(EVM_REDRAW + EVM_KEY + EVM_BUTTON + EVM_MOUSE + EVM_MOUSE_FILTER);
5819 leency 138
	loop()
139
	{
5923 leency 140
		switch(WaitEvent())
141
		{
142
			case evMouse:
143
				HandleMouseEvent();
5819 leency 144
				break;
5923 leency 145
			case evKey:
146
				HandleKeyEvent();
147
				break;
148
			case evButton:
149
				HandleButtonEvent();
150
				break;
151
			case evReDraw:
7462 leency 152
				EventMenuClick();
5923 leency 153
				draw_window();
154
		}
5819 leency 155
	}
156
}
157
 
7466 leency 158
//===================================================//
159
//                                                   //
160
//                      EVENTS                       //
161
//                                                   //
162
//===================================================//
5980 leency 163
 
164
void HandleButtonEvent()
5819 leency 165
{
5923 leency 166
 
5980 leency 167
	byte btn = GetButtonID();
168
	if (btn==1) {
169
		SaveIniSettings();
170
		ExitProcess();
171
	}
172
	btn-=10;
173
	switch(btn)
5923 leency 174
	{
5980 leency 175
		case OPEN_FILE:
176
			EventOpenFile();
177
			break;
7218 leency 178
		case SHOW_FILE_PROPERTIES:
179
			EventShowFileProperties();
180
			break;
5980 leency 181
		case MAGNIFY_PLUS:
182
			EventMagnifyPlus();
183
			break;
184
		case MAGNIFY_MINUS:
185
			EventMagnifyMinus();
186
			break;
187
		case CHANGE_ENCODING:
7462 leency 188
			EventShowEncodingList();
5980 leency 189
			break;
190
		case RUN_EDIT:
7466 leency 191
			EventShowReopenMenu();
5980 leency 192
			break;
7466 leency 193
		case COLOR_SCHEME:
194
			EventShowColorSchemesList();
195
			break;
5980 leency 196
		case SHOW_INFO:
197
			EventShowInfo();
198
			break;
5923 leency 199
	}
5819 leency 200
}
201
 
202
 
5980 leency 203
void HandleKeyEvent()
5819 leency 204
{
5980 leency 205
	if (help_opened) {
206
		help_opened = false;
207
		DrawPage();
208
		return;
209
	}
210
	GetKeys();
7218 leency 211
	if (key_scancode == SCAN_CODE_F1) {
5980 leency 212
		EventShowInfo();
213
		return;
214
	}
215
	if (key_modifier & KEY_LCTRL) || (key_modifier & KEY_RCTRL) {
216
		switch (key_scancode)
217
		{
7218 leency 218
			case SCAN_CODE_KEY_O:
5980 leency 219
				EventOpenFile();
220
				break;
7218 leency 221
			case SCAN_CODE_KEY_I:
222
				EventShowFileProperties();
223
				break;
5980 leency 224
			case SCAN_CODE_UP:
225
				EventMagnifyPlus();
226
				break;
227
			case SCAN_CODE_DOWN:
228
				EventMagnifyMinus();
229
				break;
7218 leency 230
			case SCAN_CODE_KEY_E:
7466 leency 231
				EventShowReopenMenu();
5980 leency 232
				break;
233
			case SCAN_CODE_TAB:
234
				EventChangeEncoding();
235
				break;
5819 leency 236
		}
5980 leency 237
		return;
5819 leency 238
	}
5980 leency 239
	if (list.ProcessKey(key_scancode))
240
		DrawPage();
241
}
5819 leency 242
 
243
 
5980 leency 244
void HandleMouseEvent()
245
{
246
	mouse.get();
247
	list.wheel_size = 7;
248
	if (list.MouseScroll(mouse.vert)) {
249
		DrawPage();
250
		return;
5819 leency 251
	}
5980 leency 252
	scrollbar_v_mouse (#scroll);
253
	if (list.first != scroll.position) {
254
		list.first = scroll.position;
255
		DrawPage();
256
	}
5819 leency 257
}
258
 
5980 leency 259
/* ----------------------------------------------------- */
260
 
261
void EventOpenFile()
5819 leency 262
{
5980 leency 263
	OpenDialog_start stdcall (#o_dialog);
7286 leency 264
	if (o_dialog.status) {
265
		OpenFile(#openfile_path);
266
		PreparePage();
267
	}
5819 leency 268
}
269
 
7218 leency 270
void EventShowFileProperties()
271
{
272
	char ss_param[4096];
273
	if (!param) return;
274
	sprintf(#ss_param, "-p %s", #param);
7462 leency 275
	RunProgram("/sys/File managers/Eolite", #ss_param);
7218 leency 276
}
277
 
5980 leency 278
void EventMagnifyPlus()
5819 leency 279
{
6806 leency 280
	kfont.size.pt++;
281
	if(!kfont.changeSIZE())
282
		kfont.size.pt--;
5980 leency 283
	else
284
		PreparePage();
5819 leency 285
}
286
 
5980 leency 287
void EventMagnifyMinus()
288
{
6806 leency 289
	kfont.size.pt--;
290
	if(!kfont.changeSIZE())
291
		kfont.size.pt++;
5980 leency 292
	else
293
		PreparePage();
294
}
295
 
7466 leency 296
void EventShowEncodingList()
5980 leency 297
{
7466 leency 298
	menu.selected = encoding + 1;
299
	menu.show(Form.left+5 + charsets_mx, Form.top+29+skin_height, 130,
300
		"UTF-8\nKOI8-RU\nCP1251\nCP1252\nISO8859-5\nCP866", 10);
301
}
302
 
303
void EventShowReopenMenu()
304
{
7462 leency 305
	menu.selected = 0;
7466 leency 306
	menu.show(Form.left+5 + reopenin_mx, Form.top+29+skin_height, 130,
307
		"Tinypad\nTextEdit\nWebView\nFB2Read\nHexView\nOther", 20);
5980 leency 308
}
309
 
7466 leency 310
void EventShowColorSchemesList()
5980 leency 311
{
7466 leency 312
	menu.selected = curcol_scheme + 1;
313
	menu.show(Form.left+5 + colscheme_mx, Form.top+29+skin_height, 175, #color_scheme_names, 30);
5980 leency 314
}
315
 
7466 leency 316
void EventSetColorScheme(dword _setn)
317
{
318
	curcol_scheme = _setn;
319
	bg_color   = color_schemes[curcol_scheme*2];
320
	text_color = color_schemes[curcol_scheme*2+1];
321
}
322
 
5980 leency 323
void EventShowInfo() {
324
	help_opened = true;
325
	DrawBar(list.x, list.y, list.w, list.h, 0xFFFfff);
326
	WriteText(list.x + 10, list.y + 10, 10000001b, 0x555555, VERSION);
327
	WriteTextLines(list.x + 10, list.y+40, 10110000b, 0, ABOUT, 20);
328
}
329
 
7462 leency 330
void EventChangeEncoding(dword id)
331
{
332
	encoding = id;
333
	OpenFile(#openfile_path);
334
	PreparePage();
335
	draw_window();
336
}
337
 
338
void EventOpenFileInAnotherProgram(dword _app)
339
{
340
	RunProgram(_app, #param);
341
}
342
 
343
void EventMenuClick()
344
{
7466 leency 345
	byte open_param[4096];
7462 leency 346
	switch(menu.cur_y)
347
	{
348
		//Encoding
349
		case 10...15:
350
			EventChangeEncoding(menu.cur_y-10);
351
			break;
352
		//Reopen
353
		case 20:
354
			EventOpenFileInAnotherProgram("/sys/tinypad");
355
			break;
356
		case 21:
357
			EventOpenFileInAnotherProgram("/sys/develop/t_edit");
358
			break;
359
		case 22:
360
			EventOpenFileInAnotherProgram("/sys/network/webview");
361
			break;
362
		case 23:
363
			EventOpenFileInAnotherProgram("/sys/fb2read");
364
			break;
365
		case 24:
366
			EventOpenFileInAnotherProgram("/sys/develop/heed");
367
			break;
7466 leency 368
		case 25:
369
			sprintf(#open_param,"~%s",#param);
370
			RunProgram("/sys/@open", #open_param);
371
			break;
372
		//ColorSchemes
373
		case 30...38:
374
			EventSetColorScheme(menu.cur_y-30);
375
			PreparePage();
376
			break;
7462 leency 377
	}
378
	menu.cur_y = 0;
379
}
380
 
7466 leency 381
//===================================================//
382
//                                                   //
383
//               DRAWS AND OTHER FUNCS               //
384
//                                                   //
385
//===================================================//
5980 leency 386
 
5819 leency 387
void OpenFile(dword f_path)
388
{
389
	int tmp;
390
	if (ESBYTE[f_path]) {
391
		strcpy(#param, f_path);
392
		io.read(#param);
393
		strcpy(#title, #param);
394
		strcat(#title, " - Text Reader");
395
	}
396
	else {
397
		if (list.count) return;
5923 leency 398
		io.buffer_data = INTRO_TEXT;
5819 leency 399
		strcpy(#title, "Text Reader");
400
	}
401
	if (encoding!=CH_CP866) ChangeCharset(charsets[encoding], "CP866", io.buffer_data);
402
	list.KeyHome();
403
	list.ClearList();
404
}
405
 
5980 leency 406
void draw_window()
407
{
7466 leency 408
	#define BUTTONS_GAP 6
409
	#define BLOCKS_GAP 15
7218 leency 410
	#define TOOLBAR_BUTTON_WIDTH 26
411
	incn x;
6746 leency 412
	DefineAndDrawWindow(Form.left,Form.top,Form.width,Form.height,0x73,0,#title,0);
5980 leency 413
	GetProcessInfo(#Form, SelfInfo);
414
	if (Form.status_window>2) return;
415
 
416
	if (Form.width  < 200) { MoveSize(OLD,OLD,200,OLD); return; }
417
	if (Form.height < 200) { MoveSize(OLD,OLD,OLD,200); return; }
418
 
419
	DrawBar(0, 0, Form.cwidth, TOOLBAR_H - 1, 0xe1e1e1);
420
	DrawBar(0, TOOLBAR_H - 1, Form.cwidth, 1, 0x7F7F7F);
421
 
7218 leency 422
	x.n = 0;
423
	DrawToolbarButton(OPEN_FILE,       x.inc(8));
7466 leency 424
	DrawToolbarButton(SHOW_FILE_PROPERTIES, x.inc(TOOLBAR_BUTTON_WIDTH + BUTTONS_GAP));
425
 
426
	DrawToolbarButton(MAGNIFY_MINUS,   x.inc(TOOLBAR_BUTTON_WIDTH + BLOCKS_GAP));
7428 leency 427
	DrawToolbarButton(MAGNIFY_PLUS,    x.inc(TOOLBAR_BUTTON_WIDTH - 1));
7466 leency 428
	DrawToolbarButton(COLOR_SCHEME,    x.inc(TOOLBAR_BUTTON_WIDTH + BUTTONS_GAP)); colscheme_mx = x.n;
429
 
430
	DrawToolbarButton(CHANGE_ENCODING, x.inc(TOOLBAR_BUTTON_WIDTH + BLOCKS_GAP)); charsets_mx = x.n;
431
	DrawToolbarButton(RUN_EDIT,        x.inc(TOOLBAR_BUTTON_WIDTH + BLOCKS_GAP)); reopenin_mx = x.n;
5980 leency 432
	DrawToolbarButton(SHOW_INFO,       Form.cwidth - 34);
433
 
434
	if ((Form.cwidth-scroll.size_x-1 == list.w) &&
435
		(Form.cheight-TOOLBAR_H == list.h) &&
436
		(list.count)
437
	)
438
	{
439
		DrawPage();
440
	} else {
441
		PreparePage();
7466 leency 442
	}
443
 
5980 leency 444
	DrawRectangle(scroll.start_x, scroll.start_y, scroll.size_x, scroll.size_y-1, scroll.bckg_col);
5923 leency 445
}
5980 leency 446
 
447
void DrawPage()
448
{
6808 leency 449
	kfont.ShowBufferPart(list.x, list.y, list.w, list.h, list.first*list.item_h*list.w);
5980 leency 450
	DrawScroller();
7286 leency 451
}
452
 
453
void DrawToolbarButton(char image_id, int x)
454
{
455
	DefineButton(x+1, 6, TOOLBAR_ICON_WIDTH-2, TOOLBAR_ICON_HEIGHT-2, 10+image_id + BT_HIDE, 0);
7428 leency 456
	img_draw stdcall(skin.image, x, 5, TOOLBAR_ICON_WIDTH, TOOLBAR_ICON_HEIGHT, TOOLBAR_ICON_WIDTH-1*image_id, 0);
7286 leency 457
}
458
 
459
void DrawScroller()
460
{
461
	scroll.max_area = list.count;
462
	scroll.cur_area = list.visible;
463
	scroll.position = list.first;
464
	scroll.all_redraw = 0;
465
	scroll.start_x = list.x + list.w;
466
	scroll.start_y = list.y;
467
	scroll.size_y = list.h;
468
	scrollbar_v_draw(#scroll);
5980 leency 469
}