Subversion Repositories Kolibri OS

Rev

Rev 9261 | Details | Compare with Previous | Last modification | View Log | RSS feed

Rev Author Line No. Line
9261 leency 1
// Mouse Configuration Utility ver 1.7
5857 leency 2
 
7434 leency 3
#define MEMSIZE 4096*11
4
 
9261 leency 5
#include "..\lib\strings.h"
6
#include "..\lib\mem.h"
7219 leency 7
#include "..\lib\fs.h"
5622 leency 8
#include "..\lib\gui.h"
5857 leency 9
#include "..\lib\obj\libini.h"
5622 leency 10
#include "..\lib\patterns\restart_process.h"
11
 
7051 leency 12
// Translatiions
5630 leency 13
#ifdef LANG_RUS
14
	?define WINDOW_TITLE "Проверка и настройка параметров мыши"
15
	?define CHECK_MOUSE_1 "Нажмите на этой области"
16
	?define CHECK_MOUSE_2 "для проверки кнопок мыши"
6231 pathoswith 17
	?define POINTER_SPEED "Делитель скорости указателя мыши"
18
	?define ACCELERATION_TEXT "Чувствительность указателя мыши"
5970 leency 19
	?define DOUBLE_CLICK_TEXT "Задержка двойного клика мышью"
9261 leency 20
	?define MOUSE_EMULATION "Управление указателем мыши через клавиатуру (F1)"
21
	?define COMMOUSE "Загрузить драйвер мыши для COM-порта (F2)"
5654 leency 22
	?define MADMOUSE "Сквозные для курсора стороны экрана"
7646 leency 23
	?define COMMOUSE_LOADED "'Драйвер для COM мыши был загружен' -O"
24
	?define COMMOUSE_CAN_NOT_UNLOAD "'Остановка драйвера невозможна' -W"
5630 leency 25
#else
26
	?define WINDOW_TITLE "Mouse testing and configuration"
27
	?define CHECK_MOUSE_1 "Click on this area to"
28
	?define CHECK_MOUSE_2 "check your mouse buttons"
6231 pathoswith 29
	?define POINTER_SPEED "Mouse pointer speed divider"
30
	?define ACCELERATION_TEXT "Mouse pointer sensitivity"
5970 leency 31
	?define DOUBLE_CLICK_TEXT "Mouse double click delay"
9261 leency 32
	?define MOUSE_EMULATION "Enable mouse emulation using keyboard NumPad (F1)"
33
	?define COMMOUSE "Load mouse driver for COM-port (F2)"
5630 leency 34
	?define MADMOUSE "Through screen sides for pointer"
7646 leency 35
	?define COMMOUSE_LOADED "'Driver for COM mouse loaded' -O"
36
	?define COMMOUSE_CAN_NOT_UNLOAD "'Driver stop is impossible' -W"
7227 leency 37
#endif
5622 leency 38
 
7646 leency 39
#define FRAME_X 18
40
#define FRAME_Y 18
41
:block mouse_frame = { FRAME_X, FRAME_Y, NULL, 130 };
7434 leency 42
:more_less_box pointer_speed      = { NULL, 0, 64, POINTER_SPEED };
43
:more_less_box acceleration       = { NULL, 0, 64, ACCELERATION_TEXT };
44
:more_less_box double_click_delay = { NULL, 0, 999, DOUBLE_CLICK_TEXT, 8 };
45
:checkbox emulation = { MOUSE_EMULATION, NULL };
46
:checkbox madmouse = { MADMOUSE, NULL };
7646 leency 47
:checkbox com_mouse = { COMMOUSE, NULL };
7244 leency 48
 
7991 leency 49
char ini_path[] = "/sys/settings/system.ini";
50
_ini ini_drivers = { #ini_path, "loaded drivers" };
51
_ini ini_mouse = { #ini_path, "mouse" };
5630 leency 52
 
5622 leency 53
void main() {
7434 leency 54
	proc_info Form;
7249 leency 55
	int id;
9261 leency 56
 
5857 leency 57
	load_dll(libini, #lib_init,1);
9261 leency 58
 
5622 leency 59
	LoadCfg();
60
 
9261 leency 61
	SetEventMask(EVM_REDRAW+EVM_KEY+EVM_BUTTON+EVM_MOUSE+EVM_MOUSE_FILTER);
7051 leency 62
 
7991 leency 63
	loop() switch(@WaitEvent())
5622 leency 64
	{
5630 leency 65
		case evMouse:
5640 pavelyakov 66
				mouse.get();
7437 leency 67
				IF (mouse_frame.hovered()) DrawMouseImage(mouse.lkm,mouse.pkm,mouse.mkm,mouse.vert);
7500 leency 68
				IF (mouse.click) || (mouse.up) DrawMouseImage(0,0,0,0);
5630 leency 69
				break;
70
 
9261 leency 71
		CASE evButton:
7991 leency 72
				id = @GetButtonID();
7434 leency 73
				IF (1 == id) ExitApp();
74
				else IF (pointer_speed.click(id)) ApplyCfg();
75
				else IF (acceleration.click(id)) ApplyCfg();
76
				else IF (double_click_delay.click(id)) ApplyCfg();
7646 leency 77
				else IF (emulation.click(id)) {
9261 leency 78
					EventClickEmulation();
5622 leency 79
				}
9261 leency 80
				else IF (madmouse.click(id)) {
7434 leency 81
					IF (madmouse.checked == true) RunProgram("/sys/madmouse", 0);
7612 leency 82
					ELSE KillProcessByName("madmouse", SINGLE);
7371 pavelyakov 83
					break;
7244 leency 84
				}
7646 leency 85
				else IF (id == com_mouse.id) {
86
					EventClickComMouse();
87
				}
5622 leency 88
				break;
7051 leency 89
 
5622 leency 90
		case evKey:
7991 leency 91
				@GetKeyScancode();
92
				IF (AL == SCAN_CODE_ESC) ExitApp();
9261 leency 93
				IF (AL == SCAN_CODE_F1) {
94
					emulation.click(emulation.id);
95
					EventClickEmulation();
96
				}
97
				IF (AL == SCAN_CODE_F2) EventClickComMouse();
5622 leency 98
				break;
9261 leency 99
 
5622 leency 100
		case evReDraw:
7806 leency 101
				sc.get();
9597 leency 102
				DefineAndDrawWindow(430, 150, 460, 343+skin_h,0x34,sc.work,WINDOW_TITLE,0);
5622 leency 103
				GetProcessInfo(#Form, SelfInfo);
8946 leency 104
				if (Form.status_window&ROLLED_UP) break;
7646 leency 105
				mouse_frame.w = - FRAME_X * 2 + Form.cwidth;
9261 leency 106
				DefineButton(FRAME_X, FRAME_Y, mouse_frame.w,
7227 leency 107
					mouse_frame.h, 99+BT_NOFRAME, 0xF0F2F3); //needed to handle mouse_up and refresh mouse image
7646 leency 108
				WriteText(FRAME_X + 110, FRAME_Y + 25, 0x90, 0x2C343C, CHECK_MOUSE_1);
109
				WriteText(FRAME_X + 110, FRAME_Y + 45, 0x90, 0x2C343C, CHECK_MOUSE_2);
7434 leency 110
				DrawMouseImage(0,0,0,0);
5642 leency 111
				DrawControls();
5622 leency 112
	}
113
}
114
 
7434 leency 115
:byte panels_img_data[] = FROM "mouse_image.raw";
5622 leency 116
 
7434 leency 117
#define red    0xff0000
118
#define yellow 0xfff600
119
#define white  0xffffff
120
#define dgrey  0x2d353d
121
 
7437 leency 122
:struct IMG_PAL{ dword back, shad1, contour, left,  right, middle, mwhite; }
123
         pal = { 0xF0F2F3,0xABB0B2, dgrey,   white, white, dgrey,  white  };
7434 leency 124
 
125
void DrawMouseImage(dword l,r,m,v) {
126
	#define IMG_W 59
7991 leency 127
	#define IMG_H 100
7434 leency 128
 
129
	IF (l) pal.left = red;
130
	IF (m) pal.middle = red;
131
	IF (r) pal.right = red;
132
	IF (v) pal.middle = yellow;
133
 
7991 leency 134
	PutPaletteImage(#panels_img_data,IMG_W,IMG_H,18+30,18+16,8,#pal);
7434 leency 135
	pal.left = pal.right = white;
136
	pal.middle = dgrey;
7437 leency 137
	IF (v) {
7434 leency 138
		pause(10);
7437 leency 139
		DrawMouseImage(l,r,m,0);
7434 leency 140
	}
5630 leency 141
}
5622 leency 142
 
5642 leency 143
void DrawControls() {
7244 leency 144
	incn y;
7646 leency 145
	y.n = FRAME_Y+115;
146
	pointer_speed.draw(FRAME_X, y.inc(30));
147
	acceleration.draw(FRAME_X, y.inc(30));
148
	double_click_delay.draw(FRAME_X, y.inc(30));
149
	emulation.draw(FRAME_X, y.inc(33));
9261 leency 150
	com_mouse.draw(FRAME_X, y.inc(27));
7646 leency 151
	madmouse.draw(FRAME_X, y.inc(27));
5642 leency 152
}
153
 
5622 leency 154
void LoadCfg() {
7991 leency 155
	acceleration.value = @GetMouseAcceleration();
156
	pointer_speed.value = @GetMouseSpeed();
157
	double_click_delay.value = @GetMouseDoubleClickDelay();
158
	com_mouse.checked = ini_drivers.GetInt("com_mouse", 0);
7244 leency 159
	madmouse.checked = CheckProcessExists("MADMOUSE");
160
	emulation.checked = CheckProcessExists("MOUSEMUL");
5622 leency 161
}
162
 
5857 leency 163
void ExitApp() {
7991 leency 164
	ini_drivers.SetInt("com_mouse", com_mouse.checked);
165
	ini_mouse.SetInt("speed", pointer_speed.value);
166
	ini_mouse.SetInt("acceleration", acceleration.value);
167
	ini_mouse.SetInt("double_click_delay", double_click_delay.value);
168
	@ExitProcess();
5857 leency 169
}
5630 leency 170
 
7051 leency 171
void ApplyCfg() {
7991 leency 172
	@SetMouseSpeed(pointer_speed.value);
173
	@SetMouseAcceleration(acceleration.value);
174
	@SetMouseDoubleClickDelay(double_click_delay.value);
7051 leency 175
}
5630 leency 176
 
7646 leency 177
void EventClickComMouse()
178
{
9261 leency 179
	if (!com_mouse.checked)
7646 leency 180
	{
181
		if (RunProgram("/sys/loaddrv", "COMMOUSE")>=0) {
182
			notify(COMMOUSE_LOADED);
183
			com_mouse.click(com_mouse.id);
7991 leency 184
		} else {
7646 leency 185
			notify("'Error running LOADDRV' -E");
186
		}
7991 leency 187
	} else {
7646 leency 188
		notify(COMMOUSE_CAN_NOT_UNLOAD);
189
	}
190
}
191
 
9261 leency 192
void EventClickEmulation()
193
{
194
	IF (emulation.checked == true) {
195
		RunProgram("/sys/mousemul", 0);
196
	}	ELSE {
197
		KillProcessByName("mousemul", SINGLE);
198
	}
199
}
200
 
7434 leency 201
stop: