Rev 4078 | Rev 4085 | 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! |
2 | |||
3 | #define MEMSIZE 0xFE800 |
||
4 | #include "..\lib\kolibri.h" |
||
5 | #include "..\lib\mem.h" |
||
6 | #include "..\lib\file_system.h" |
||
7 | #include "..\lib\strings.h" |
||
8 | #include "..\lib\list_box.h" |
||
9 | #include "..\lib\figures.h" |
||
10 | |||
11 | #define WINDOW_HEADER "Appearance" |
||
12 | |||
13 | #define PANEL_H 30 |
||
14 | #define SKINS_STANDART_PATH "/sys/skins/" |
||
15 | #define WALP_STANDART_PATH "/sys/wallpapers/" |
||
16 | |||
17 | llist list[2]; |
||
18 | int active; |
||
19 | enum { SKINS, WALLPAPERS }; |
||
20 | |||
21 | char folder_path[4096]; |
||
22 | char cur_file_path[4096]; |
||
23 | char temp_filename[4096]; |
||
24 | int files_mas[100]; |
||
25 | dword buf; |
||
26 | |||
27 | int cur; |
||
28 | |||
29 | system_colors sc; |
||
30 | proc_info Form; |
||
31 | |||
32 | #include "other.h" |
||
33 | |||
34 | //ADD PaNEL |
||
35 | |||
36 | |||
37 | //skins direktory, configurate, delete from list, delete from disk, make default |
||
38 | |||
39 | void Open_Dir() |
||
40 | { |
||
41 | int j, filesnum; |
||
42 | |||
43 | list[active].count = 0; |
||
44 | free(buf); |
||
45 | if (GetDir(#buf, #filesnum, #folder_path, DIRS_ONLYREAL)!=0) return; |
||
46 | |||
47 | for (j=0; j |
||
48 | { |
||
49 | strlwr(j*304 + buf+72); |
||
50 | strcpy(#temp_filename, j*304 + buf+72); |
||
51 | if (active==SKINS) if (strcmp(#temp_filename+strlen(#temp_filename)-4,".skn")!=0) continue; |
||
52 | if (active==WALLPAPERS) if (strcmp(#temp_filename+strlen(#temp_filename)-4,".txt")==0) continue; |
||
53 | cur = list[active].count; |
||
54 | files_mas[cur]=j; |
||
55 | if (!strcmp("default.skn",#temp_filename)) files_mas[0]> |
||
56 | list[active].count++; |
||
57 | } |
||
58 | Sort_by_Name(0, list[active].count-1); |
||
59 | } |
||
60 | |||
61 | void Draw_List() |
||
62 | { |
||
63 | int i; |
||
64 | list[SKINS].SetSizes(0, PANEL_H, Form.cwidth, Form.cheight-PANEL_H, 40, 20); |
||
65 | list[WALLPAPERS].SetSizes(0, PANEL_H, Form.cwidth, Form.cheight-PANEL_H, 40, 20); |
||
66 | |||
67 | for (i=0; i |
||
68 | { |
||
69 | cur = list[active].first; |
||
70 | strcpy(#temp_filename, files_mas[i+cur]*304 + buf+72); |
||
71 | |||
72 | if (list[active].current-list[active].first==i) |
||
73 | { |
||
74 | if (sc.work_button<>sc.work) |
||
75 | { |
||
76 | DrawBar(0, i*list[active].line_h+list[active].y, list[active].w, list[active].line_h, sc.work_button); |
||
77 | WriteText(11,i*list[active].line_h+list[active].text_y+list[active].y,0x80,sc.work_button_text, #temp_filename); |
||
78 | } |
||
79 | else |
||
80 | { |
||
81 | DrawBar(0, i*list[active].line_h+list[active].y, list[active].w, list[active].line_h, sc.grab_button); |
||
82 | WriteText(11,i*list[active].line_h+list[active].text_y+list[active].y,0x80,sc.grab_button_text, #temp_filename); |
||
83 | } |
||
84 | } |
||
85 | else |
||
86 | { |
||
87 | DrawBar(0,i*list[active].line_h+list[active].y,list[active].w, list[active].line_h, 0xFFFfff); |
||
88 | WriteText(11,i*list[active].line_h+list[active].text_y+list[active].y,0x80,0, #temp_filename); |
||
89 | } |
||
90 | } |
||
91 | DrawBar(0,list[active].visible*list[active].line_h+list[active].y, list[active].w, -list[active].visible*list[active].line_h+ list[active].h, 0xFFFfff); |
||
92 | } |
||
93 | |||
94 | void GetFiles(int set_active) |
||
95 | { |
||
96 | active = set_active; |
||
97 | if (active==SKINS) |
||
98 | { |
||
99 | strcpy(#folder_path, SKINS_STANDART_PATH); |
||
100 | Open_Dir(); |
||
101 | if (!list[active].count) notify("No skins were found"); |
||
102 | } |
||
103 | if (active==WALLPAPERS) |
||
104 | { |
||
105 | strcpy(#folder_path, WALP_STANDART_PATH); |
||
106 | Open_Dir(); |
||
107 | if (!list[active].count) notify("No wallpapers were found"); |
||
108 | } |
||
109 | } |
||
110 | |||
111 | void Apply() |
||
112 | { |
||
113 | if (active==SKINS) |
||
114 | { |
||
115 | strcpy(#cur_file_path, #folder_path); |
||
116 | cur = list[active].current; |
||
117 | strcat(#cur_file_path, files_mas[cur]*304 + buf+72); |
||
118 | SetSystemSkin(#cur_file_path); |
||
119 | } |
||
120 | if (active==WALLPAPERS) |
||
121 | { |
||
122 | strcpy(#cur_file_path, "\\S__"); |
||
123 | strcat(#cur_file_path, #folder_path); |
||
124 | cur = list[active].current; |
||
125 | strcat(#cur_file_path, files_mas[cur]*304 + buf+72); |
||
126 | RunProgram("/sys/media/kiv", #cur_file_path); |
||
127 | Draw_List(); |
||
128 | } |
||
129 | } |
||
130 | |||
131 | OpenFile() |
||
132 | { |
||
133 | if (active==SKINS) RunProgram("/sys/desktop", #cur_file_path); |
||
134 | if (active==WALLPAPERS) RunProgram("/sys/media/kiv", #cur_file_path); |
||
135 | } |
||
136 | |||
137 | |||
138 | void main() |
||
139 | { |
||
140 | int id, key, mouse_clicked; |
||
141 | mouse mm; |
||
142 | |||
143 | mem_Init(); |
||
144 | if (param) strcpy(#folder_path, #param); |
||
4081 | leency | 145 | list[SKINS].current = list[WALLPAPERS].current = -1; |
4078 | leency | 146 | list[SKINS].first = list[WALLPAPERS].first = 0; |
147 | GetFiles(WALLPAPERS); |
||
148 | list[active].SetSizes(0, 230, 350, 400-PANEL_H, 40, 18); |
||
149 | SetEventMask(0x27); |
||
150 | loop() |
||
151 | { |
||
152 | switch(WaitEvent()) |
||
153 | { |
||
154 | case evMouse: |
||
155 | mm.get(); |
||
156 | if (mm.vert) && (list[active].MouseScroll(mm.vert)) Draw_List(); |
||
157 | if (mouse_clicked) |
||
158 | { |
||
4081 | leency | 159 | if (!mm.lkm) && (active==SKINS) && (list[SKINS].ProcessMouse(mm.x, mm.y)) Apply(); |
160 | if (!mm.lkm) && (active==WALLPAPERS) && (list[WALLPAPERS].ProcessMouse(mm.x, mm.y)) Apply(); |
||
4078 | leency | 161 | mouse_clicked=0; |
162 | } |
||
4081 | leency | 163 | if (mm.lkm) && (list[SKINS].MouseOver(mm.x, mm.y)) mouse_clicked=1; |
4078 | leency | 164 | break; |
165 | |||
166 | case evButton: |
||
167 | id=GetButtonID(); |
||
168 | if (id==1) ExitProcess(); |
||
169 | if (id==2) TabClick(SKINS); |
||
170 | if (id==3) TabClick(WALLPAPERS); |
||
171 | break; |
||
172 | |||
173 | case evKey: |
||
174 | key = GetKey(); |
||
175 | if (active==SKINS) && (list[SKINS].ProcessKey(key)) Apply(); |
||
176 | if (active==WALLPAPERS) && (list[WALLPAPERS].ProcessKey(key)) Apply(); |
||
177 | IF (key==013) OpenFile(); |
||
178 | if (key==9) //Tab |
||
179 | { |
||
180 | if (active==SKINS) |
||
181 | TabClick(WALLPAPERS); |
||
182 | else |
||
183 | TabClick(SKINS); |
||
184 | } |
||
185 | IF (key==182) //Del |
||
186 | { |
||
187 | DeleteFile(#cur_file_path); |
||
188 | Open_Dir(); |
||
189 | Apply(); |
||
190 | } |
||
191 | break; |
||
192 | |||
193 | case evReDraw: |
||
194 | sc.get(); |
||
195 | DefineAndDrawWindow(30,80,list[active].w+9,list[active].h+4+GetSkinHeight(),0x73,0xE4DFE1,WINDOW_HEADER); |
||
196 | GetProcessInfo(#Form, SelfInfo); |
||
197 | IF (Form.status_window>=2) break; |
||
198 | DrawTabs(); |
||
199 | Draw_List(); |
||
200 | } |
||
201 | } |
||
202 | } |
||
203 | |||
204 | |||
205 | void DrawTabs() |
||
206 | { |
||
207 | dword col_bg, col_text; |
||
208 | DrawBar(0,0, Form.cwidth, PANEL_H-1, sc.work); |
||
209 | |||
210 | if (active==SKINS) {col_bg=sc.work_button; col_text=sc.work_button_text;} else {col_bg=sc.work; col_text=sc.work_text;} |
||
211 | DrawRectangle(10-1,7-1, 65+2, 21+2, sc.work_graph); |
||
212 | DrawCaptButton(10,7, 65, 21, 2, col_bg, col_text, "Skins"); //вокруг рисовать пмятоуг |
||
213 | if (active==WALLPAPERS) {col_bg=sc.work_button; col_text=sc.work_button_text;} else {col_bg=sc.work; col_text=sc.work_text;} |
||
214 | DrawRectangle(90-1,7-1, 95+2, 21+2, sc.work_graph); |
||
215 | DrawCaptButton(90,7, 95, 21, 3, col_bg, col_text, "Wallpappers"); |
||
216 | |||
217 | DrawBar(0,PANEL_H-2, Form.cwidth, 1, sc.work_graph); |
||
218 | DrawBar(0,PANEL_H-1, Form.cwidth, 1, 0xEEEeee); |
||
219 | } |
||
220 | |||
221 | void TabClick(int N) |
||
222 | { |
||
223 | GetFiles(N); |
||
224 | DrawTabs(); |
||
225 | Draw_List(); |
||
226 | } |
||
227 | |||
228 | |||
229 | |||
230 | |||
231 | stop:> |