appearance: final version! Now the selected value is restored after program reopen

git-svn-id: svn://kolibrios.org@9524 a494cfbc-eb01-0410-851d-a64ba20cac60
This commit is contained in:
Kirill Lipatov (Leency) 2021-12-29 23:09:18 +00:00
parent 1f8ba94314
commit 3813663899
6 changed files with 126 additions and 79 deletions

View File

@ -1,5 +1,4 @@
//11.03.12 - start! //11.03.12 - start!
//TODO: select current value at startap
#define MEMSIZE 1024*70 #define MEMSIZE 1024*70
#include "../lib/mem.h" #include "../lib/mem.h"
@ -16,6 +15,8 @@
#include "../lib/patterns/simple_open_dialog.h" #include "../lib/patterns/simple_open_dialog.h"
#include "../lib/patterns/restart_process.h" #include "../lib/patterns/restart_process.h"
dword fmas;
#include "ui_elements_preview.h" #include "ui_elements_preview.h"
#include "const.h" #include "const.h"
@ -25,7 +26,7 @@
// // // //
//===================================================// //===================================================//
int active_skin, active_wallpaper, active_screensaver; int active_skin=-1, active_wallpaper=-1, active_screensaver=-1;
checkbox update_docky = { T_UPDATE_DOCK, false }; checkbox update_docky = { T_UPDATE_DOCK, false };
@ -37,6 +38,7 @@ char ss_available[200];
collection list; collection list;
//===================================================// //===================================================//
// // // //
// CODE // // CODE //
@ -178,91 +180,95 @@ void draw_timeout()
WriteTextWithBg(RIGHTx, PANEL_H, 0xD0, sc.work_text, #param, sc.work); WriteTextWithBg(RIGHTx, PANEL_H, 0xD0, sc.work_text, #param, sc.work);
} }
bool strreqi(dword _left, _right) void add_filesnames_into_the_list()
{ {
return strcmp(_left+strrchr(_left,'.'), _right); int j;
for (j=0; j<select_list.count; j++) {
miniprintf(#param,"%s/",#folder_path);
strcat(#param, io.dir.position(ESDWORD[j*4+fmas]));
list.add(#param);
}
} }
dword files_mas[400];
void Open_Dir() void Open_Dir()
{ {
int j; int j;
char fname[4096]; dword ext;
select_list.ClearList(); select_list.ClearList();
if(io.dir.buffer)free(io.dir.buffer);
if (io.dir.buffer) free(io.dir.buffer);
io.dir.load(#folder_path,DIR_ONLYREAL); io.dir.load(#folder_path,DIR_ONLYREAL);
if (fmas) free(fmas);
fmas = malloc(io.dir.count * 4);
for (j=0; j<io.dir.count; j++) for (j=0; j<io.dir.count; j++)
{ {
strcpy(#fname, io.dir.position(j)); strncpy(#param, io.dir.position(j), PATHLEN);
strlwr(#fname); strlwr(#param);
ext = #param + strrchr(#param,'.');
if (tabs.active_tab==TAB_SKINS) { if (tabs.active_tab==TAB_SKINS) {
if (strreqi(#fname,"skn")!=0) continue; if (!streq(ext,"skn")) continue;
} }
if (tabs.active_tab==TAB_WALLPAPERS) { if (tabs.active_tab==TAB_WALLPAPERS) {
if (strreqi(#fname,"png")!=0) if (!streq(ext,"png")) && (!streq(ext,"jpg"))
&& (strreqi(#fname,"jpg")!=0) && (!streq(ext,"jpeg")) && (!streq(ext,"bmp"))
&& (strreqi(#fname,"jpeg")!=0) && (!streq(ext,"gif")) continue;
&& (strreqi(#fname,"bmp")!=0)
&& (strreqi(#fname,"gif")!=0) continue;
} }
ESDWORD[select_list.count*4 + #files_mas] = j; ESDWORD[select_list.count*4 + fmas] = j;
select_list.count++; select_list.count++;
} }
Sort_by_Name(0, select_list.count-1); sort_by_name(0, select_list.count-1);
list.drop(); list.drop();
//save current item for tab change //save current item for tab change
//add default item //add default item
switch(tabs.active_tab) { if(tabs.active_tab == TAB_SKINS)
CASE TAB_SKINS: {
select_list.cur_y = active_skin;
select_list.count++; select_list.count++;
list.add(#default_skin); list.add(#default_skin);
BREAK; add_filesnames_into_the_list();
CASE TAB_WALLPAPERS: if (active_skin==-1) && (ESBYTE[#previous_skin])
select_list.cur_y = active_wallpaper; {
for (j=0; j<select_list.count; j++) {
if (streq(list.get(j), #previous_skin)) {
active_skin = j;
break;
}
}
}
select_list.cur_y = active_skin;
} else {
select_list.count++; select_list.count++;
list.add(#default_wallp); list.add(#default_wallp);
BREAK; add_filesnames_into_the_list();
CASE TAB_SCREENSAVERS: if (active_wallpaper==-1) && (ESBYTE[#previous_wallp]=='\\')
select_list.cur_y = active_screensaver; {
}
for (j=0; j<select_list.count; j++) { for (j=0; j<select_list.count; j++) {
miniprintf(#param,"%s/",#folder_path); if (streq(list.get(j), #previous_wallp+4)) {
strcat(#param, io.dir.position(files_mas[j])); active_wallpaper = j;
list.add(#param); break;
}
}
}
select_list.cur_y = active_wallpaper;
} }
if (!select_list.count) notify(T_NO_FILES); if (!select_list.count) notify(T_NO_FILES);
if (select_list.cur_y>select_list.visible) select_list.first=select_list.cur_y; if (select_list.cur_y>SL_VISIBLE) {
select_list.first = -SL_VISIBLE/2 + select_list.cur_y;
}
select_list.CheckDoesValuesOkey(); select_list.CheckDoesValuesOkey();
if (LIST_W) draw_window(); if (LIST_W) draw_window();
} }
void Sort_by_Name(int a, b) // for the first call: a = 0, b = sizeof(mas) - 1
{
int j;
int isn = a;
if (a >= b) return;
for (j = a; j <= b; j++) {
if (strcmpi(io.dir.position(files_mas[j]), io.dir.position(files_mas[b]))<=0) {
files_mas[isn] >< files_mas[j];
isn++;
}
}
Sort_by_Name(a, isn-2);
Sort_by_Name(isn, b);
}
void SelectList_DrawLine(dword i) void SelectList_DrawLine(dword i)
{ {
int draw_y = i*SELECT_LIST_ITEMH+PANEL_H; int draw_y = i*SELECT_LIST_ITEMH+PANEL_H;
int i_abs = select_list.first + i; int i_abs = select_list.first + i;
dword text_color = 0xFFFfff; dword text_color = 0xFFFfff;
dword bg_color = 0x000000; dword bg_color = 0x000000;
char filename_buf[4096]; char filename_buf[PATHLEN];
char* filename = #filename_buf; char* filename = #filename_buf;
strcpy(filename, list.get(i_abs)); strcpy(filename, list.get(i_abs));
@ -294,28 +300,20 @@ void SelectList_DrawLine(dword i)
WriteText(select_list.x+12,draw_y+select_list.text_y,select_list.font_type,bg_color, filename); WriteText(select_list.x+12,draw_y+select_list.text_y,select_list.font_type,bg_color, filename);
} }
void SelectList_LineChanged()
{
EventApply();
}
dword GetRealKolibriosPath()
{
char real_kolibrios_path[4096];
if (!dir_exists("/kolibrios")) return 0;
SetCurDir("/kolibrios");
GetCurDir(#real_kolibrios_path, sizeof(real_kolibrios_path));
return #real_kolibrios_path;
}
void GetIniSettings() void GetIniSettings()
{ {
ini.section = "screensaver";
ss_timeout.position = ini.GetInt("timeout", 10) - 1;
ini.GetString("available", #ss_available, sizeof(ss_available), 0);
ini.section = "style"; ini.section = "style";
ini.GetString("default_skin", #default_skin, PATHLEN, 0); ini.GetString("default_skin", #default_skin, PATHLEN, 0);
ini.GetString("default_wallp", #default_wallp, PATHLEN, 0); ini.GetString("default_wallp", #default_wallp, PATHLEN, 0);
ini.GetString("skin", #previous_skin, PATHLEN, 0);
ini.GetString("bg_param", #previous_wallp, PATHLEN, 0);
ini.section = "screensaver";
ss_timeout.position = ini.GetInt("timeout", 10) - 1;
ini.GetString("available", #ss_available, sizeof(ss_available), 0);
ini.GetString("program", #previous_ss, PATHLEN, 0);
} }
//===================================================// //===================================================//
@ -326,7 +324,7 @@ void GetIniSettings()
void EventTabSkinsClick() void EventTabSkinsClick()
{ {
miniprintf(#folder_path, "%s/res/skins", GetRealKolibriosPath()); miniprintf(#folder_path, "%s/res/skins", get_real_kolibrios_path());
Open_Dir(); Open_Dir();
} }
@ -335,7 +333,7 @@ void EventTabWallpappersClick()
if (opendir_path) { if (opendir_path) {
strcpy(#folder_path, #opendir_path); strcpy(#folder_path, #opendir_path);
} else { } else {
miniprintf(#folder_path, "%s/res/wallpapers", GetRealKolibriosPath()); miniprintf(#folder_path, "%s/res/wallpapers", get_real_kolibrios_path());
} }
Open_Dir(); Open_Dir();
} }
@ -359,6 +357,13 @@ void EventTabScreensaverClick()
select_list.count++; select_list.count++;
} while (j); } while (j);
if (active_screensaver == -1) && (ESBYTE[#previous_ss]) {
for (j=0; j<select_list.count; j++) {
if (strstr(list.get(j), #previous_ss)) active_screensaver = j;
}
}
select_list.cur_y = active_screensaver;
if (LIST_W) draw_window(); if (LIST_W) draw_window();
} }
@ -438,7 +443,7 @@ void EventOpenFile()
void EventExit() void EventExit()
{ {
if (GetRealKolibriosPath()) { if (get_real_kolibrios_path()) && (ESBYTE[#cur_skin_path]) {
ini.section = "style"; ini.section = "style";
ini.SetString("skin", #cur_skin_path, strlen(#cur_skin_path)); ini.SetString("skin", #cur_skin_path, strlen(#cur_skin_path));
} }
@ -457,7 +462,13 @@ void EventSetSs()
stop: stop:
char folder_path[PATHLEN]; char folder_path[PATHLEN];
char cur_file_path[PATHLEN]; char cur_file_path[PATHLEN];
char cur_skin_path[PATHLEN]; char cur_skin_path[PATHLEN];
char default_skin[PATHLEN]; char default_skin[PATHLEN];
char default_wallp[PATHLEN]; char default_wallp[PATHLEN];
char previous_skin[PATHLEN];
char previous_wallp[PATHLEN];
char previous_ss[PATHLEN];

View File

@ -37,10 +37,11 @@
#endif #endif
#define WIN_W 560 #define WIN_W 560
#define WIN_H 450 #define WIN_H 445
#define LIST_W 260 #define LIST_W 260
#define PANEL_H 50 #define PANEL_H 50
#define LP 6 //LIST_PADDING #define LP 6 //LIST_PADDING
#define SL_VISIBLE WIN_H - PANEL_H - LP / SELECT_LIST_ITEMH
#define RIGHTx LP + LIST_W + TAB_P + 30 #define RIGHTx LP + LIST_W + TAB_P + 30
#define RIGHTy PANEL_H #define RIGHTy PANEL_H
@ -70,3 +71,36 @@ _tabs tabs = { -sizeof(t_skins)-sizeof(t_wallpapers)-sizeof(t_screensaver)
scroll_bar ss_timeout = { RIGHTw-19,RIGHTx,15,RIGHTy+25,0,3,89,10,0,0xFFFfff, scroll_bar ss_timeout = { RIGHTw-19,RIGHTx,15,RIGHTy+25,0,3,89,10,0,0xFFFfff,
0xBBBbbb,0xeeeeee}; 0xBBBbbb,0xeeeeee};
void sort_by_name(int a, b) // for the first call: a = 0, b = sizeof(mas) - 1
{
int j;
int isn = a;
if (a >= b) return;
for (j = a; j <= b; j++) {
if (strcmpi(io.dir.position(ESDWORD[j*4+fmas]), io.dir.position(ESDWORD[b*4+fmas]))<=0) {
ESDWORD[isn*4+fmas] >< ESDWORD[j*4+fmas];
isn++;
}
}
sort_by_name(a, isn-2);
sort_by_name(isn, b);
}
dword get_real_kolibrios_path()
{
char real_kolibrios_path[256];
if (!dir_exists("/kolibrios")) return 0;
SetCurDir("/kolibrios");
GetCurDir(#real_kolibrios_path, sizeof(real_kolibrios_path));
return #real_kolibrios_path;
}
void SelectList_LineChanged()
{
EventApply();
}

View File

@ -1,2 +1,4 @@
if tup.getconfig("NO_FASM") ~= "" then return end if tup.getconfig("NO_FASM") ~= "" then return end
tup.rule("default.asm", 'fasm "%f" "%o" ' .. tup.getconfig("KPACK_CMD"), "Blacky.skn") tup.rule("default.dtp.asm", 'fasm "%f" "%o"', "default.dtp")
tup.rule({"default.asm", extra_inputs = {"default.dtp"}}, 'fasm "%f" "%o" ' .. tup.getconfig("KPACK_CMD"), "Blacky.skn")

View File

@ -5,10 +5,10 @@ SKIN_PARAMS \
margins = [6:5:65:3],\ ; margins [left:top:right:bottom] margins = [6:5:65:3],\ ; margins [left:top:right:bottom]
colors active = [binner=0x626262:\ ; border inner colors active = [binner=0x626262:\ ; border inner
bouter=0x010812:\ ; border outer bouter=0x010812:\ ; border outer
bframe=0x626262],\ ; border middle bframe=0x1E1E1E],\ ; border middle
colors inactive = [binner=0x626262:\ ; border inner colors inactive = [binner=0x626262:\ ; border inner
bouter=0x010812:\ ; border outer bouter=0x010812:\ ; border outer
bframe=0x626262],\ ; border middle bframe=0x1E1E1E],\ ; border middle
dtp = 'default.dtp' ; dtp colors dtp = 'default.dtp' ; dtp colors
SKIN_BUTTONS \ SKIN_BUTTONS \

Binary file not shown.