Subversion Repositories Kolibri OS

Rev

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

Rev Author Line No. Line
4078 leency 1
//11.03.12 - start!
6212 leency 2
//ver 2.0
4078 leency 3
 
4085 leency 4
#ifndef AUTOBUILD
5
	?include "lang.h--"
6
#endif
7
 
4078 leency 8
#define MEMSIZE 0xFE800
9
#include "..\lib\mem.h"
4085 leency 10
#include "..\lib\strings.h"
5654 leency 11
#include "..\lib\io.h"
4078 leency 12
#include "..\lib\list_box.h"
6212 leency 13
#include "..\lib\menu.h"
5499 leency 14
#include "..\lib\gui.h"
15
#include "..\lib\obj\box_lib.h"
6651 leency 16
#include "..\lib\patterns\select_list.h"
4078 leency 17
 
6212 leency 18
 
19
//===================================================//
20
//                                                   //
21
//                       DATA                        //
22
//                                                   //
23
//===================================================//
24
 
4085 leency 25
#ifdef LANG_RUS
6212 leency 26
	?define WINDOW_HEADER "Настройки оформления"
6264 leency 27
	?define T_SKINS       "Стиль окон"
28
	?define T_WALLPAPERS  "Обои"
4085 leency 29
#else
30
	?define WINDOW_HEADER "Appearance"
6264 leency 31
	?define T_SKINS       "Skins"
32
	?define T_WALLPAPERS  "Wallpappers"
4085 leency 33
#endif
4078 leency 34
 
6212 leency 35
#define PANEL_H 40
36
#define LIST_PADDING 20
5765 leency 37
#define SKINS_STANDART_PATH "/kolibrios/res/skins"
4885 leency 38
#define WALP_STANDART_PATH "/kolibrios/res/wallpapers"
4078 leency 39
 
6264 leency 40
signed int active_skin=-1, active_wallpaper=-1;
6212 leency 41
enum { SKINS=2, WALLPAPERS };
4078 leency 42
 
43
char folder_path[4096];
44
char cur_file_path[4096];
45
char temp_filename[4096];
6096 leency 46
int files_mas[400];
4078 leency 47
 
48
int cur;
49
 
50
proc_info Form;
51
 
6212 leency 52
//===================================================//
53
//                                                   //
54
//                       CODE                        //
55
//                                                   //
56
//===================================================//
5548 leency 57
 
4078 leency 58
void main()
59
{
5705 punk_joker 60
	int id, mouse_clicked;
4078 leency 61
 
4410 leency 62
	SetEventMask(0x27);
5626 leency 63
	load_dll(boxlib, #box_lib_init,0);
6212 leency 64
	EventTabClick(SKINS);
6096 leency 65
	loop() switch(WaitEvent())
4078 leency 66
	{
67
	  	case evMouse:
4085 leency 68
			if (!CheckActiveProcess(Form.ID)) break;
5656 pavelyakov 69
			mouse.get();
4085 leency 70
			scrollbar_v_mouse (#scroll1);
6651 leency 71
			if (select_list.first != scroll1.position)
4085 leency 72
			{
6651 leency 73
				select_list.first = scroll1.position;
74
				DrawSelectList(select_list.count);
4085 leency 75
				break;
76
			}
4410 leency 77
 
6651 leency 78
	  		if (mouse.vert) && (select_list.MouseScroll(mouse.vert)) DrawSelectList(select_list.count);
4410 leency 79
 
5656 pavelyakov 80
	  		if (mouse.up)&&(mouse_clicked)
4078 leency 81
	  		{
6651 leency 82
	  			if (mouse.lkm) && (select_list.ProcessMouse(mouse.x, mouse.y)) EventApply();
5656 pavelyakov 83
	  			mouse_clicked=false;
4078 leency 84
	  		}
6651 leency 85
	  		else if (mouse.down)&&(mouse.lkm) && (select_list.MouseOver(mouse.x, mouse.y)) mouse_clicked=true;
6212 leency 86
 
87
	  		if (mouse.down)&&(mouse.pkm) {
6651 leency 88
	  			select_list.ProcessMouse(mouse.x, mouse.y);
89
				DrawSelectList(select_list.count);
6212 leency 90
	  			menu.show(Form.left+mouse.x, Form.top+mouse.y+skin_height, 136, "Open file     Enter\nDelete          Del", 10);
91
	  		}
92
 
4078 leency 93
	  		break;
94
 
4410 leency 95
 
4078 leency 96
		case evButton:
97
			id=GetButtonID();
98
			if (id==1) ExitProcess();
6212 leency 99
			if (id==SKINS) EventTabClick(SKINS);
100
			if (id==WALLPAPERS) EventTabClick(WALLPAPERS);
4078 leency 101
			break;
102
 
103
		case evKey:
5706 leency 104
			GetKeys();
6651 leency 105
			if (select_list.ProcessKey(key_scancode)) EventApply();
6212 leency 106
			if (key_scancode==SCAN_CODE_ENTER) EventOpenFile();
6264 leency 107
			if (key_scancode==SCAN_CODE_TAB) if (tabs.active_tab==SKINS) EventTabClick(WALLPAPERS); else EventTabClick(SKINS);
6212 leency 108
			if (key_scancode==SCAN_CODE_DEL) EventDeleteFile();
6651 leency 109
			for (id=select_list.cur_y+1; id
4078 leency 110
			{
6212 leency 111
				strcpy(#temp_filename, io.dir.position(files_mas[id]));
112
				if (temp_filename[0]==key_ascii) || (temp_filename[0]==key_ascii-32)
113
				{
6651 leency 114
					select_list.cur_y = id - 1;
115
					select_list.KeyDown();
6212 leency 116
					EventApply();
117
					break;
118
				}
4078 leency 119
			}
120
			break;
121
 
122
		 case evReDraw:
5674 pavelyakov 123
			system.color.get();
6212 leency 124
			DefineAndDrawWindow(screen.width-400/2,80,400,404+skin_height,0x73,0xE4DFE1,WINDOW_HEADER,0);
4078 leency 125
			GetProcessInfo(#Form, SelfInfo);
126
			IF (Form.status_window>=2) break;
6212 leency 127
		 	DrawWindowContent();
128
	 		if (menu.list.cur_y) {
129
				if (menu.list.cur_y == 10) EventOpenFile();
130
				if (menu.list.cur_y == 11) EventDeleteFile();
131
				menu.list.cur_y = 0;
132
			};
4078 leency 133
   }
134
}
135
 
6212 leency 136
void DrawWindowContent()
137
{
138
	int id;
6651 leency 139
	id = select_list.cur_y;
140
	InitSelectList(LIST_PADDING, PANEL_H, Form.cwidth-scroll1.size_x-LIST_PADDING-LIST_PADDING, Form.cheight-PANEL_H-LIST_PADDING, false);
141
	select_list.cur_y = id;
4078 leency 142
 
6212 leency 143
	DrawBar(0,0, Form.cwidth, PANEL_H-LIST_PADDING, system.color.work);
6651 leency 144
	DrawRectangle3D(select_list.x-2, select_list.y-2, select_list.w+3+scroll1.size_x, select_list.h+3, system.color.work_dark, system.color.work_light);
145
	DrawWideRectangle(select_list.x-LIST_PADDING, select_list.y-LIST_PADDING, LIST_PADDING*2+select_list.w+scroll1.size_x, LIST_PADDING*2+select_list.h, LIST_PADDING-2, system.color.work);
146
	tabs.draw(select_list.x+10, select_list.y, SKINS, T_SKINS);
147
	if (dir_exists(WALP_STANDART_PATH)) tabs.draw(strlen(T_SKINS)*8+TAB_PADDING+select_list.x+21, select_list.y, WALLPAPERS, T_WALLPAPERS);
148
	DrawRectangle(select_list.x-1, select_list.y-1, select_list.w+1+scroll1.size_x, select_list.h+1, system.color.work_graph);
6212 leency 149
 
6651 leency 150
	DrawSelectList(select_list.count);
6212 leency 151
}
152
 
4410 leency 153
 
6212 leency 154
 
155
void Open_Dir()
4078 leency 156
{
6212 leency 157
	int j;
6651 leency 158
	select_list.count = 0;
6212 leency 159
	if(io.dir.buffer)free(io.dir.buffer);
160
	io.dir.load(#folder_path,DIR_ONLYREAL);
161
	for (j=0; j
4410 leency 162
	{
6212 leency 163
		strcpy(#temp_filename, io.dir.position(j));
164
		strlwr(#temp_filename);
6264 leency 165
		if (tabs.active_tab==SKINS) if (strcmpi(#temp_filename+strlen(#temp_filename)-4,".skn")!=0) continue;
166
		if (tabs.active_tab==WALLPAPERS) if (strcmpi(#temp_filename+strlen(#temp_filename)-4,".txt")==0) continue;
6651 leency 167
		cur = select_list.count;
6212 leency 168
		files_mas[cur]=j;
6651 leency 169
		if (!strcmpi("default.skn",#temp_filename)) files_mas[0]>
170
		select_list.count++;
4410 leency 171
	}
6212 leency 172
}
173
 
6651 leency 174
void DrawSelectList_Line(dword i)
6212 leency 175
{
6651 leency 176
	int yyy, list_last;
6212 leency 177
 
6651 leency 178
	cur = select_list.first + i;
179
	strcpy(#temp_filename, io.dir.position(files_mas[cur]));
180
	temp_filename[strlen(#temp_filename)-4] = 0;
181
	yyy = i*select_list.item_h+select_list.y;
182
 
183
	if (select_list.cur_y-select_list.first==i)
4410 leency 184
	{
6651 leency 185
		DrawBar(select_list.x, yyy, select_list.w, select_list.item_h, system.color.work_button);
186
		WriteText(select_list.x+12,yyy+select_list.text_y,select_list.font_type,system.color.work_button_text, #temp_filename);
4410 leency 187
	}
6651 leency 188
	else
189
	{
190
		DrawBar(select_list.x,yyy,select_list.w, select_list.item_h, 0xFFFfff);
191
		WriteText(select_list.x+12,yyy+select_list.text_y,select_list.font_type,0, #temp_filename);
192
	}
4078 leency 193
}
194
 
6212 leency 195
//===================================================//
196
//                                                   //
197
//                     EVENTS                        //
198
//                                                   //
199
//===================================================//
4078 leency 200
 
6212 leency 201
void EventTabClick(int N)
4085 leency 202
{
6264 leency 203
	tabs.click(N);
204
	if (tabs.active_tab == SKINS)
6212 leency 205
	{
6651 leency 206
		active_wallpaper = select_list.cur_y;
6212 leency 207
		strcpy(#folder_path, SKINS_STANDART_PATH);
6651 leency 208
		select_list.ClearList();
6212 leency 209
		Open_Dir();
6651 leency 210
		if (!select_list.count) notify("'No skins were found' -E");
211
		select_list.cur_y = active_skin;
6212 leency 212
	}
6264 leency 213
	if (tabs.active_tab == WALLPAPERS)
6212 leency 214
	{
6651 leency 215
		active_skin = select_list.cur_y;
6212 leency 216
		strcpy(#folder_path, WALP_STANDART_PATH);
6651 leency 217
		select_list.ClearList();
6212 leency 218
		Open_Dir();
6651 leency 219
		if (!select_list.count) notify("'No wallpapers were found' -E");
220
		select_list.cur_y = active_wallpaper;
6212 leency 221
	}
6651 leency 222
	if (select_list.cur_y>select_list.visible) select_list.first=select_list.cur_y; select_list.CheckDoesValuesOkey();
223
	if (select_list.w) DrawWindowContent();
6212 leency 224
}
4078 leency 225
 
6212 leency 226
void EventDeleteFile()
227
{
228
	io.del(#cur_file_path);
229
	Open_Dir();
230
	EventApply();
231
}
4078 leency 232
 
6212 leency 233
void EventApply()
234
{
6264 leency 235
	if (tabs.active_tab==SKINS)
6212 leency 236
	{
6651 leency 237
		cur = select_list.cur_y;
6212 leency 238
		sprintf(#cur_file_path,"%s/%s",#folder_path,io.dir.position(files_mas[cur]));
239
		SetSystemSkin(#cur_file_path);
240
	}
6264 leency 241
	if (tabs.active_tab==WALLPAPERS)
6212 leency 242
	{
6651 leency 243
		cur = select_list.cur_y;
6212 leency 244
		sprintf(#cur_file_path,"\\S__%s/%s",#folder_path,io.dir.position(files_mas[cur]));
245
		RunProgram("/sys/media/kiv", #cur_file_path);
6651 leency 246
		DrawSelectList(select_list.count);
6212 leency 247
	}
248
}
4085 leency 249
 
6212 leency 250
void EventOpenFile()
251
{
6264 leency 252
	if (tabs.active_tab==SKINS) RunProgram("/sys/skincfg", #cur_file_path);
253
	if (tabs.active_tab==WALLPAPERS) RunProgram("/sys/media/kiv", #cur_file_path);
4085 leency 254
}
255
 
4078 leency 256
stop: