Subversion Repositories Kolibri OS

Rev

Details | Last modification | View Log | RSS feed

Rev Author Line No. Line
3042 leency 1
#include "..\lib\mem.h"
2
#include "..\lib\dll.h"
3
#include "..\lib\edit_box_lib.h"
4
 
5
 
6
#ifdef LANG_RUS
7
	char *but_text[]={
8
	"Добавить диск"w,
9
	"Удалить диск"w,
10
	"Помощь"w,
11
	0};
12
#else
13
	char *but_text[]={
14
	"Add disk",
15
	"Delete disk",
16
	"Help",
17
	0};
18
#endif
19
 
3044 leency 20
unsigned char icons[14*56] = FROM "icons.raw";
3042 leency 21
 
22
struct path_string {
23
unsigned char Item[256];
24
};
25
 
26
path_string disk_list[40];
27
dword devbuf;
28
int disk_num;
29
int selected;
30
 
31
system_colors sc;
32
proc_info Form;
33
 
34
int mouse_dd;
35
unsigned char dsize[30];
36
edit_box edit1= {200,20,16,0xffffff,0x94AECE,0x94AECE,0x94AECE,0,248,#dsize,#mouse_dd,100000000000010b};
37
 
38
 
39
 
40
void Main_Window()
41
{
42
	unsigned int id;
43
	unsigned char key;
44
	unsigned int i, j, bbreak;
45
 
46
   	mem_Init();
47
	if (load_dll2(boxlib, #edit_box_draw,0)!=0)
48
	{
49
		notify("error: library doesn't exists /rd/1/lib/box_lib.obj");
50
		ExitProcess();
51
	}
52
	SetEventMask(0x27);
53
	loop()
54
	{
55
		switch(WaitEvent())
56
		{
57
		case evMouse:
58
			//edit_box_mouse stdcall (#edit1);
59
			break;
60
		case evButton:
61
            id=GetButtonID();
62
			if (id==1) ExitProcess();
63
			if (id==10) //add
64
			{
65
				_ADD_DISK:
66
				if (disk_num>=10)
67
				{
68
					notify("Достигнут предел количества виртуальных дисков"w);
69
					break;
70
				}
71
				param[0]='a';
72
				//
73
				for (i=0; i<9; i++)
74
				{
75
					bbreak = true;
76
					for (j=0; j<=disk_num; j++)
77
					{
78
						if (i+48==disk_list[j].Item[3]) bbreak=false;
79
					}
80
					if (bbreak) break;
81
				}
82
				param[1]=i+48;
83
				Console_Work();
84
				Pause(5);
85
				GetDisks();
86
				DrawTmpDisks();
87
			}
88
			if (id==11) //del
89
			{
90
				_DEL_DISK:
91
				if (disk_num==0)
92
				{
93
					notify("Для начала добавьте хотя бы один диск"w);
94
					break;
95
				}
96
				param[0]='d';
97
				param[1]=disk_list[selected].Item[3];
98
				Console_Work();
99
				Pause(15);
100
				GetDisks();
101
				DrawTmpDisks();
102
			}
103
			if (id==12) //help
104
			{
105
				notify("Раздел в разработке"w);
106
			}
107
			if (id>=20)
108
			{
109
				if (selected==id-20) OpenTmpDisk();
110
				selected=id-20;
111
				DrawTmpDisks();
112
			}
113
            break;
114
        case evKey:
115
			key = GetKey();
116
			if (key==182) if (disk_num<>0) goto _DEL_DISK;
117
			if (key==14) goto _ADD_DISK;
118
			if (key==178)
119
			{
120
				if (selected==0) break;
121
				selected--;
122
				DrawTmpDisks();
123
			}
124
			if (key==177)
125
			{
126
				if (selected+2>disk_num) break;
127
				selected++;
128
				DrawTmpDisks();
129
			}
130
			if (key==176)
131
			{
132
				if (selected<3) break;
133
				selected-=3;
134
				DrawTmpDisks();
135
			}
136
			if (key==179)
137
			{
138
				if (selected+4>disk_num) break;
139
				selected+=3;
140
				DrawTmpDisks();
141
			}
142
			if (key==013)
143
			{
144
				OpenTmpDisk();
145
			}
146
			break;
147
         case evReDraw:
148
			Draw_Window();
149
		}
150
	}
151
}
152
 
153
 
154
void OpenTmpDisk()
155
{
156
	unsigned char eol_param[256];
157
	if (!disk_num) return;
158
	strcpy(#eol_param, "/tmp#/1/");
159
	eol_param[4]=disk_list[selected].Item[3];
160
	RunProgram("/sys/File managers/Eolite", #eol_param);
161
}
162
 
163
 
164
void GetDisks()
165
{
166
	unsigned int j, fcount=30;
167
	unsigned char disk_name[256];
168
 
169
	mem_Free(devbuf);
170
	devbuf= mem_Alloc(32);
171
	ReadDir(0, devbuf, "/");
172
	fcount=ESDWORD[devbuf+8];
173
	mem_Free(devbuf);
174
	devbuf = mem_Alloc(fcount+1*304+32);
175
	ReadDir(fcount, devbuf, "/");
176
 
177
	disk_num=0;
178
	for (j=0; j
179
	{
180
		strcpy(#disk_name, j*304+devbuf+72);
181
		if (disk_name[0]!='t') continue;
182
		strcpy(#disk_list[disk_num].Item, #disk_name);
183
		disk_num++;
184
	}
185
	if (disk_num>12) disk_num=12;
186
}
187
 
188
 
189
unsigned int disk_pos_x[]={13,13,13,83,83,83,153,153,153,223,223,223};
190
unsigned int disk_pos_y[]={40,65,90,40,65,90,40,65,90,40,65,90};
191
void DrawTmpDisks()
192
{
193
	int i;
194
	DrawBar(0,31, Form.width-9,Form.height-GetSkinHeight()-5-30, 0xFFFFFF);
195
	if (disk_num==0)
196
	{
197
		WriteText(17,45,    0x90, 0x777777, "Здесь будет отображаться список"w, 0);
198
		WriteText(17,45+15, 0x90, 0x777777, "виртуальных дисков в системе."w, 0);
199
		WriteText(17,45+42, 0x90, 0x777777, "Попробуйте добавить один..."w, 0);
200
		return;
201
	};
202
	if (selected>=disk_num) selected=disk_num-1; //восстанавливает выделение - хорошая фича
203
	for (i=0; i
204
	{
205
		DefineButton(disk_pos_x[i], disk_pos_y[i], 60, 20, 20+i, 0xFFFfff);
206
		WriteText(disk_pos_x[i]+25,disk_pos_y[i]+6, 0x90, 0, #disk_list[i].Item, 0);
207
		_PutImage(disk_pos_x[i]+5,disk_pos_y[i]+4, 14,14, 3*14*14*3+#icons);
208
		if (selected==i) DrawRegion(disk_pos_x[i], disk_pos_y[i], 60-1, 20-1, 0x00459A);
209
	}
210
}
211
 
212
void Draw_Window()
213
{
214
	int i, x;
215
 
216
	sc.get();
217
	DefineAndDrawWindow(170,150,314,250,0x74,sc.work,"Virtual Disk Manager 0.35");
218
	GetProcessInfo(#Form, SelfInfo);
219
	if (Form.status_window>2) return; //если свернуто в заголовок, ничего не рисуем
220
 
221
	//рисуем панель
222
	DrawBar(0,0,  Form.width-9,30, sc.work);
223
	DrawBar(0,30, Form.width-9,1,  sc.work_graph);
224
	x=6;
225
	for (i=0; i<3; i++)
226
	{
227
		DefineButton(x,5, strlen(but_text[i])*6+28,19, 10+i, sc.work_button);
228
		_PutImage(x+3,8,  14,14,   i*14*14*3+#icons);
229
		WriteText(x+22,11, 0x80, sc.work_button_text, but_text[i], 0);
230
		x+=strlen(but_text[i])*6+37;
231
	}
232
 
233
	//получаем список доступных дисков
234
	GetDisks();
235
	//выводим доступные диски
236
	DrawTmpDisks();
237
	//дополнительная панель
238
}
239