Subversion Repositories Kolibri OS

Rev

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

Rev Author Line No. Line
7224 leency 1
#define MEMSIZE 1024 * 50
5598 pavelyakov 2
#include "../lib/kolibri.h"
3
#include "../lib/strings.h"
4
#include "../lib/mem.h"
5
#include "../lib/gui.h"
5520 leency 6
 
7220 leency 7
#include "../lib/obj/libimg.h"
7224 leency 8
#include "../lib/obj/box_lib.h"
7245 leency 9
#include "../lib/obj/proc_lib.h"
7220 leency 10
 
5520 leency 11
#ifndef AUTOBUILD
12
	#include "lang.h--"
13
#endif
14
 
7221 leency 15
/* === TRANSLATIONS === */
16
 
7259 leency 17
#define T_WTITLE "EasyShot v1.1"
7224 leency 18
 
7221 leency 19
#ifdef LANG_RUS
7224 leency 20
	?define T_TAKE_SCREENSHOT "  Сделать скриншот"
7245 leency 21
	?define T_SETTINGS "Настройки"
22
	?define T_EDITBOX_FRAME " Путь сохранения скриншота "
7259 leency 23
	?define T_CONTINUOUS_SHOOTING "Continuous shooting"
7245 leency 24
	?define T_DELAY "Задержка в секундах"
25
	?define T_NO_DIR "'Папка не существует!' -E"
26
	?define T_SET_PATH "Задать"
7221 leency 27
#else
7224 leency 28
	?define T_TAKE_SCREENSHOT "  Take a screenshot"
7245 leency 29
	?define T_SETTINGS "Settings"
30
	?define T_EDITBOX_FRAME " Save path "
7259 leency 31
	?define T_CONTINUOUS_SHOOTING "Continuous shooting"
7245 leency 32
	?define T_DELAY "Delay in seconds"
33
	?define T_NO_DIR "'Directory does not exists!' -E"
34
	?define T_SET_PATH "Set"
7221 leency 35
#endif
36
 
7235 leency 37
/* === DATA === */
5520 leency 38
 
39
proc_info Form;
7246 leency 40
proc_info Settings;
5520 leency 41
 
7235 leency 42
dword screenshot;
43
int screenshot_length;
5520 leency 44
 
7220 leency 45
enum {
46
	BTN_MAKE_SCREENSHOT=10,
7224 leency 47
	BTN_SETTINGS
7220 leency 48
};
5520 leency 49
 
7224 leency 50
#define PD 18 //padding
7220 leency 51
 
7245 leency 52
char save_path[4096];
53
char save_path_stable[4096];
54
char open_dir[4096];
7224 leency 55
 
7245 leency 56
edit_box edit_save = {250,25,100,0xffffff,0x94AECE,0xFFFfff,0xffffff,
7506 leency 57
	0x10000000,sizeof(save_path)-2,#save_path,0, 0b};
7244 leency 58
 
7245 leency 59
more_less_box delay = { 1, 0, 64, T_DELAY };
7259 leency 60
checkbox continuous_shooting = { T_CONTINUOUS_SHOOTING, true };
7244 leency 61
 
62
 
7245 leency 63
opendialog open_folder_dialog =
64
{
65
  2, //0-file, 2-save, 3-select folder
66
  #Settings,
67
  #communication_area_name,
68
  0,
69
  0, //dword opendir_path,
70
  #open_dir, //dword dir_default_path,
71
  #open_dialog_path,
72
  #DrawSettingsWindow,
73
  0,
74
  #open_dir, //dword openfile_path,
75
  0, //dword filename_area,
76
  0, //dword filter_area,
77
  420,
78
  NULL,
79
  320,
80
  NULL
81
};
82
 
5520 leency 83
/* === CODE === */
84
 
85
void main()
86
{
7249 leency 87
	int id;
7221 leency 88
 
7224 leency 89
	load_dll(libio,  #libio_init,  1);
7221 leency 90
	load_dll(libimg, #libimg_init, 1);
7224 leency 91
	load_dll(boxlib, #box_lib_init,0);
7245 leency 92
	load_dll(Proc_lib,  #OpenDialog_init,0);
93
	OpenDialog_init stdcall (#open_folder_dialog);
7221 leency 94
 
7245 leency 95
	system.color.get();
7224 leency 96
	Libimg_LoadImage(#skin, "/sys/icons16.png");
7245 leency 97
	Libimg_ReplaceColor(skin.image, skin.w, skin.h, 0xffFFFfff, system.color.work_button);
98
	Libimg_ReplaceColor(skin.image, skin.w, skin.h, 0xffCACBD6, MixColors(system.color.work_button, 0, 200));
7221 leency 99
	screenshot_length = screen.width * screen.height * 3;
7244 leency 100
	screenshot = malloc(screenshot_length);
5520 leency 101
 
7245 leency 102
	strcpy(#save_path_stable, "/tmp0/1");
103
	strcpy(#save_path, #save_path_stable);
104
	edit_save.size = strlen(#save_path);
105
 
7220 leency 106
	loop() switch(WaitEvent())
5520 leency 107
	{
7220 leency 108
	case evButton:
109
		id = GetButtonID();
110
		if (id == CLOSE_BTN) ExitProcess();
111
		if (id == BTN_MAKE_SCREENSHOT) EventTakeScreenshot();
7244 leency 112
		if (id == BTN_SETTINGS) CreateThread(#SettingsWindow,#settings_stak+4092);
7220 leency 113
		break;
114
 
115
	case evKey:
116
		GetKeys();
117
		if (SCAN_CODE_ENTER == key_scancode) EventTakeScreenshot();
118
		break;
119
 
120
	case evReDraw:
7235 leency 121
		DefineAndDrawWindow(screen.width/4, screen.height-100/3, 270,
122
			skin_height + 27+PD+PD, 0x34, system.color.work, T_WTITLE,0);
7220 leency 123
		GetProcessInfo(#Form, SelfInfo);
7224 leency 124
		DrawMainContent();
7220 leency 125
	}
5520 leency 126
}
127
 
7224 leency 128
void DrawMainContent()
129
{
130
	int take_scr_btn_width;
7259 leency 131
	take_scr_btn_width = DrawIconButton(PD, PD, BTN_MAKE_SCREENSHOT, T_TAKE_SCREENSHOT, 45);
7235 leency 132
	DrawIconButton(PD+take_scr_btn_width, PD, BTN_SETTINGS, " ", 10);
7224 leency 133
}
134
 
7220 leency 135
void EventTakeScreenshot() {
7771 leency 136
	MinimizeWindow();
7244 leency 137
	pause(delay.value*100);
7221 leency 138
	CopyScreen(screenshot, 0, 0, screen.width, screen.height);
5520 leency 139
	ActivateWindow(GetProcessSlot(Form.ID));
7235 leency 140
	EventSaveImageFile();
5520 leency 141
}
142
 
7224 leency 143
void EventSaveImageFile()
7220 leency 144
{
7221 leency 145
	int i=0;
146
	char save_file_name[4096];
147
	do {
148
		i++;
7771 leency 149
		//sprintf(, "%s/screen_%i.png", #save_path_stable, i);
150
		strcpy(#save_file_name, #save_path_stable);
151
		strcat(#save_file_name, "/screen_");
152
		strcat(#save_file_name, itoa(i));
153
		strcat(#save_file_name, ".png");
7221 leency 154
	} while (file_exists(#save_file_name));
7224 leency 155
	save_image(screenshot, screen.width, screen.height, #save_file_name);
7220 leency 156
}
157
 
158
 
7224 leency 159
void SettingsWindow()
160
{
7245 leency 161
	#define BTN_OD 10
162
	#define BTN_SET 11
163
	int id, butw;
164
	SetEventMask(EVM_REDRAW+EVM_KEY+EVM_BUTTON+EVM_MOUSE+EVM_MOUSE_FILTER);
7224 leency 165
	loop() switch(WaitEvent())
166
	{
167
	case evMouse:
7245 leency 168
		edit_box_mouse stdcall (#edit_save);
7224 leency 169
		break;
7220 leency 170
 
7224 leency 171
	case evKey:
172
		GetKeys();
173
		if (SCAN_CODE_ESC == key_scancode) ExitProcess();
7771 leency 174
		EAX = key_editbox;
7245 leency 175
		edit_box_key stdcall (#edit_save);
7224 leency 176
		break;
7220 leency 177
 
7224 leency 178
	case evButton:
179
		id = GetButtonID();
7244 leency 180
		if (CLOSE_BTN == id) ExitProcess();
7245 leency 181
		if (BTN_OD == id) {
182
			OpenDialog_start stdcall (#open_folder_dialog);
183
			if (open_folder_dialog.status) {
184
				strcpy(#save_path, open_folder_dialog.opendir_path);
185
				edit_save.size = edit_save.pos = edit_save.shift
186
					= edit_save.shift_old = strlen(#save_path);
187
			}
188
		}
189
		if (BTN_SET == id) {
190
			if (save_path[0]) && (dir_exists(#save_path)) {
191
				strcpy(#save_path_stable, #save_path);
192
				strrtrim(#save_path_stable);
193
				if (save_path_stable[strlen(#save_path_stable)-1]=='/')
194
				    save_path_stable[strlen(#save_path_stable)-1]=NULL; //no "/" at the end
195
			}
196
			else notify(T_NO_DIR);
197
 
198
		}
7243 leency 199
		delay.click(id);
7224 leency 200
		break;
201
 
202
	case evReDraw:
7245 leency 203
		DrawSettingsWindow();
7220 leency 204
	}
205
}
206
 
7245 leency 207
void DrawSettingsWindow()
208
{
209
	DefineAndDrawWindow(Form.left+100, Form.top-40, 400, 230, 0x34, system.color.work, T_SETTINGS, 0);
210
	GetProcessInfo(#Settings, SelfInfo);
7771 leency 211
	delay.draw(15, 30);
7245 leency 212
	DrawFrame(15, 85, 360, 95, T_EDITBOX_FRAME);
213
		DrawEditBoxPos(32, 110, #edit_save);
214
		DrawStandartCaptButton(edit_save.left + edit_save.width + 15, edit_save.top-3, BTN_OD, "...");
215
		DrawStandartCaptButton(edit_save.left, edit_save.top+32, BTN_SET, T_SET_PATH);
216
}
217
 
7224 leency 218
int DrawIconButton(dword x, y, id, text, icon)
219
{
220
	int btwidth;
221
	btwidth = DrawStandartCaptButton(x, y, id, text);
222
	img_draw stdcall(skin.image, x+12, y+5, 16, 16, 0, icon*16);
223
	return btwidth;
224
}
5520 leency 225
 
7224 leency 226
stop:
7221 leency 227
 
7224 leency 228
char settings_stak[4096];