- rework two panes header
- use specific ini section for two-panes mode
- avoid double lines in scroll and table headers
- proper fix scroll issue
- do not save window size when the window is rolled-up
efm: yet another file manager :)
icons16.png: add scissors (cut) and paste icons


git-svn-id: svn://kolibrios.org@8764 a494cfbc-eb01-0410-851d-a64ba20cac60
This commit is contained in:
Kirill Lipatov (Leency) 2021-06-05 19:30:53 +00:00
parent 285d4483b0
commit 9d4b206358
12 changed files with 117 additions and 95 deletions

View File

@ -28,6 +28,7 @@ img_files = {
{"UNIMG", PROGS .. "/fs/unimg/unimg"},
{"3D/HOUSE.3DS", "common/3d/house.3ds"},
{"File Managers/ICONS.INI", "common/File Managers/icons.ini"},
{"File Managers/EFM", "common/File Managers/efm"},
{"File Managers/KFM.INI", "common/File Managers/kfm.ini"},
{"File Managers/FNAV/ABOUT.TXT", "common/File Managers/fNav/About.txt"},
{"File Managers/FNAV/FNAV", "common/File Managers/fNav/fNav.kex"},

Binary file not shown.

Binary file not shown.

Before

Width:  |  Height:  |  Size: 8.5 KiB

After

Width:  |  Height:  |  Size: 8.8 KiB

View File

@ -4,8 +4,11 @@ last_folder=
[Eolite]
ShowDeviceName=1
RealFileNamesCase=1
InfoAfterCopy=0
ShowStatusBar=1
LineHeight=20
[EFM]
ShowDeviceName=1
ShowStatusBar=1
LineHeight=20

View File

@ -3,8 +3,8 @@
// 70.5 - get volume info and label
#define TITLE "Eolite File Manager 4.51"
#define ABOUT_TITLE "EOLITE 4.51"
#define TITLE "Eolite File Manager 4.6"
#define ABOUT_TITLE "EOLITE 4.6"
#ifndef AUTOBUILD
#include "lang.h--"
@ -28,6 +28,7 @@
#include "../lib/obj/libimg.h"
#include "../lib/patterns/history.h"
#include "../lib/patterns/toolbar_button.h"
#include "imgs/images.h"
@ -74,6 +75,8 @@ struct Eolite_colors
} col;
dword waves_pal[256];
bool efm = false;
int toolbar_buttons_x[7]={9,46,85,134,167,203};
bool active_about = false;
@ -163,30 +166,50 @@ void handle_param()
//-p <path> : just show file/folder properties dialog
//-d <path> : delete file/folder
//-v : paste files/folder from clipboard
if (param) && (param[0]=='-') switch (param[1])
dword p = #param;
if (param[0]=='/') && (param[1]=='E') && (param[2]=='F') && (param[3]=='M') {
efm = true;
p += 4;
if (param[4]==' ') p++;
}
if (ESBYTE[p]=='\0') return;
if (ESBYTE[p]=='-') switch (ESBYTE[p+1])
{
case 'p':
strcpy(#file_path, #param + 3);
strcpy(#file_path, p + 3);
itdir = dir_exists(#file_path);
strcpy(#file_name, #param + strrchr(#param, '/'));
param[strrchr(#param, '/')-1] = '\0';
strcpy(#path, #param + 3);
strcpy(#file_name, p + strrchr(p, '/'));
ESBYTE[strrchr(p, '/')+p-1] = '\0';
strcpy(#path, p + 3);
properties_dialog();
ExitProcess();
return;
case 'd':
strcpy(#file_path, #param + 3);
strcpy(#file_path, p + 3);
itdir = dir_exists(#file_path);
DisplayOperationForm(DELETE_FLAG);
DeleteSingleElement();
ExitProcess();
return;
case 'v':
cut_active = param[2] - '0';
strcpy(#path, #param + 4);
cut_active = ESBYTE[p+2] - '0';
strcpy(#path, p + 4);
PasteThread();
ExitProcess();
return;
}
if (ESBYTE[strlen(p)+p-1]=='/') ESBYTE[strlen(p)+p-1]=NULL; //no "/" at the end
if (dir_exists(p)) {
strcpy(#path, p);
} else {
if (file_exists(p)) {
ESBYTE[strrchr(p, '/')+p-1] = '\0';
strcpy(#path, p);
SelectFileByName(p+strlen(p)+1);
} else {
notify(T_NOTIFY_APP_PARAM_WRONG);
}
}
}
@ -195,6 +218,9 @@ void main()
dword id;
int old_cur_y;
handle_param();
ESBYTE[0] = NULL;
rand_n = random(80);
load_libraries();
@ -203,27 +229,6 @@ void main()
LoadIniSettings();
SystemDiscs.Get();
handle_param();
ESBYTE[0] = NULL;
if (param)
{
if (strlen(#param)>1) && (param[strlen(#param)-1]=='/') param[strlen(#param)-1]=NULL; //no "/" at the end
if (dir_exists(#param)) {
strcpy(#path, #param);
} else {
if (file_exists(#param)) {
param[strrchr(#param, '/')-1] = '\0';
strcpy(#path, #param);
SelectFileByName(#param+strlen(#param)+1);
} else {
notify(T_NOTIFY_APP_PARAM_WRONG);
}
}
}
Open_Dir(#path,ONLY_OPEN);
strcpy(#inactive_path, #path);
llist_copy(#files_inactive, #files);
@ -307,7 +312,7 @@ void main()
//Scrooll
if (mouse.x>=files.x+files.w) && (mouse.x<=files.x+files.w+18) && (mouse.y>files.y) && (mouse.y<files.y+files.h-18) && (mouse.lkm) && (!scroll_used) {scroll_used=true; Scroll();}
if (scroll_used) && (mouse.up) { scroll_used=false; Scroll(); }
if (scroll_used) && (!mouse.key&MOUSE_LEFT) { scroll_used=false; Scroll(); }
if (scroll_used)
{
@ -525,7 +530,7 @@ void main()
DrawStatusBar();
List_ReDraw();
break;
case SCAN_CODE_F1...SCAN_CODE_F10:
case SCAN_CODE_F2...SCAN_CODE_F10:
FnProcess(key_scancode-58);
break;
default:
@ -560,26 +565,42 @@ void main()
void draw_window()
{
dword i;
incn x;
if (show_status_bar.checked) status_bar_h = STATUS_BAR_H; else status_bar_h = 0;
DefineAndDrawWindow(Form.left+rand_n,Form.top+rand_n,Form.width,Form.height,0x73,NULL,TITLE,0);
GetProcessInfo(#Form, SelfInfo);
if (Form.status_window>2) return;
if (Form.height < 350) { MoveSize(OLD,OLD,OLD,350); return; }
if (!two_panels.checked) && (Form.width < 480) { MoveSize(OLD,OLD,480,OLD); return; }
if ( two_panels.checked) && (Form.width < 573) { MoveSize(OLD,OLD,573,OLD); return; }
GetProcessInfo(#Form, SelfInfo);
SetAppColors();
if (two_panels.checked) {
if (Form.width < 573) { MoveSize(OLD,OLD,573,OLD); return; }
DrawBar(0, 0, Form.cwidth, 34, sc.work);
#define PAD 7
#define GAP_S 26+5
#define GAP_B 26+14
x.set(-GAP_S+8);
DrawTopPanelButton(21, x.inc(GAP_S), PAD, 30, false);
DrawTopPanelButton(22, x.inc(GAP_S), PAD, 31, false);
DrawTopPanelButton(23, x.inc(GAP_B), PAD, 01, false);
DrawTopPanelButton(24, x.inc(GAP_B), PAD, 55, false);
DrawTopPanelButton(25, x.inc(GAP_S), PAD, 20, false);
DrawTopPanelButton(26, x.inc(GAP_S), PAD, 56, false);
DrawTopPanelButton(51, Form.cwidth-GAP_S-PAD, PAD, -1, false); //burger menu
} else {
if (Form.width < 480) { MoveSize(OLD,OLD,480,OLD); return; }
ESDWORD[#toolbar_pal] = sc.work;
ESDWORD[#toolbar_pal+4] = MixColors(0, sc.work, 35);
PutPaletteImage(#toolbar, 246, 34, 0, 0, 8, #toolbar_pal);
DrawBar(127, 8, 1, 25, sc.work_graph);
for (i=0; i<3; i++) DefineHiddenButton(toolbar_buttons_x[i]+2,7,31-5,29-5,21+i);
for (i=3; i<6; i++) DefineHiddenButton(toolbar_buttons_x[i], 5,31, 29, 21+i);
DrawBar(127, 8, 1, 25, sc.work_graph);
DrawBar(246,0, Form.cwidth - 246, 34, sc.work);
DrawDot(Form.cwidth-17,12);
DrawDot(Form.cwidth-17,12+6);
DrawDot(Form.cwidth-17,12+12);
DefineHiddenButton(Form.cwidth-24,7,20,25,51+BT_NOFRAME); //dots
}
//main rectangles
DrawRectangle(1,40,Form.cwidth-3,Form.cheight - 42-status_bar_h,sc.work_graph);
DrawRectangle(0,39,Form.cwidth-1,-show_status_bar.checked*status_bar_h + Form.cheight - 40,col.work_gradient[4]); //bg
@ -597,7 +618,7 @@ void DrawList()
word sorting_arrow_x;
dword sorting_arrow_t = "\x19";
if (sort_desc) sorting_arrow_t = "\x18";
DrawFlatButtonSmall(files.x, files.y-17, files.w - 141,16,31,T_FILE);
DrawFlatButtonSmall(files.x - efm, files.y-17,files.w-141+efm,16,31,T_FILE);
DrawFlatButtonSmall(files.x + files.w - 141, files.y-17,73,16,32,T_TYPE);
DrawFlatButtonSmall(files.x + files.w - 68, files.y-17,68,16,33,T_SIZE);
DrawFlatButtonSmall(files.x + files.w, files.y-17,16,16, 0,"\x18");

View File

@ -2,6 +2,8 @@
PathShow_data PathShow = {0, 17,250, 6, 250, 0, 0, 0x0, 0xFFFfff, #path, #temp, 0};
void DrawPathBar()
{
PathShow.start_x = -efm*20 + 250;
PathShow.area_size_x = Form.cwidth-300;
DrawBar(PathShow.start_x-3, PathShow.start_y-6, PathShow.area_size_x+3, 19, col.odd_line);
DrawRectangle(PathShow.start_x-4,PathShow.start_y-7,PathShow.area_size_x+4,20,sc.work_graph);

View File

@ -160,7 +160,6 @@ void PasteThread()
path_offset += strlen(path_offset) + 1;
}
cut_active=false;
if (info_after_copy.checked) notify(INFO_AFTER_COPY);
DialogExit();
}

View File

@ -10,15 +10,15 @@ void Scroll() {
if (files.count<=0)
{
sc_slider_y = sc_y;
sc_slider_h = sc_h - 1;
sc_slider_y = sc_y - 1;
sc_slider_h = sc_h + 1;
}
else
{
sc_slider_y = files.first * sc_h / files.count + sc_y;
sc_slider_h = sc_h * files.visible - files.visible / files.count;
if (sc_slider_h < 20) sc_slider_h = 20; //minimal scroll width
if (sc_slider_h > sc_h-sc_slider_y+56) || (files.first+files.visible>=files.count) sc_slider_y= sc_y + sc_h - sc_slider_h - 1; //äëÿ áîëüøîãî ñïèñêà
sc_slider_y = files.first * sc_h / files.count + sc_y - 1;
sc_slider_h = sc_h * files.visible - files.visible / files.count + 2;
if (sc_slider_h < 20) sc_slider_h = 20; //minimal scroll height
if (sc_slider_h > sc_h-sc_slider_y+56) || (files.first+files.visible>=files.count) sc_slider_y= sc_y + sc_h - sc_slider_h; //äëÿ áîëüøîãî ñïèñêà
}
//slider
DrawRectangle(sc_x,sc_slider_y,16,sc_slider_h,sc.work_graph);
@ -72,8 +72,8 @@ void DrawEolitePopup(dword b1_text, b2_text)
int but_x;
int popin_x = files.w - popin_w / 2 + files.x ;
DrawPopup(popin_x, 160, popin_w, 95, 1, sc.work, sc.work_graph);
but_x = DrawStandartCaptButton(popin_x+23, 215, POPUP_BTN1, b1_text);
DrawStandartCaptButton(popin_x+23 + but_x, 215, POPUP_BTN2, b2_text);
DrawCaptButton(popin_x+23+000, 215, 100, 26, POPUP_BTN1, sc.button, sc.button_text, b1_text);
DrawCaptButton(popin_x+23+114, 215, 100, 26, POPUP_BTN2, sc.button, sc.button_text, b2_text);
}
void DrawDot(dword x,y) {

View File

@ -174,8 +174,6 @@ void _SystemDiscs::Draw()
if (two_panels.checked)
{
DrawBar(draw_x, draw_y, Form.cwidth - draw_x - 2, DEV_H_HOR, 0xFFFFFF);
DefineButton(Form.cwidth - 23, draw_y+2, 17,16, 60+BT_HIDE, 0xCCCccc);
_PutImage(Form.cwidth - 21, draw_y+4, 14,13, 2*14*13*3+#factions);
files.y = draw_y + DEV_H_HOR + 17;
} else {
DrawBar(draw_x+6, draw_y, 18, 1, 0xFFFfff);

View File

@ -26,7 +26,8 @@ char burger_menu_items[] =
"<EFBFBD>®¢®¥ ®ª­®|Ctrl+N
Žâªàëâì ª®­á®«ì|Ctrl+G
Ž¡­®¢¨âì ¯ ¯ªã|F5
Ž ¯à®£à ¬¬¥|F1";
<EFBFBD> áâனª¨|F10
Ž ¯à®£à ¬¬¥";
#elif LANG_EST
char file_actions[]=
@ -55,7 +56,8 @@ char burger_menu_items[] =
"New window|Ctrl+N
Open console here|Ctrl+G
Värskenda|F5
About|F1";
Settings|F10
About";
#else
char file_actions[]=
@ -84,7 +86,8 @@ char burger_menu_items[] =
"New window|Ctrl+N
Open console here|Ctrl+G
Refresh folder|F5
About|F1";
Settings|F10
About";
#endif
@ -119,7 +122,8 @@ void EventMenuClick(dword _id)
case 1: EventOpenNewEolite(); break;
case 2: EventOpenConsoleHere(); break;
case 3: EventRefreshDisksAndFolders(); break;
case 4: FnProcess(1); break;
case 4: FnProcess(10); break;
case 5: FnProcess(1); break;
}
active_menu = NULL;
}

View File

@ -3,7 +3,6 @@
?define TITLE_SETT "<EFBFBD> áâனª¨"
?define SHOW_DEVICE_CLASS "‚뢮¤¨âì ­ §¢ ­¨ï ª« áá  ãáâனáâ¢"
?define SHOW_STATUS_BAR "<EFBFBD>®ª §ë¢ âì áâ âãá ¡ à"
?define NOTIFY_COPY_END "“¢¥¤®¬«ïâì ® § ¢¥à襭¨¨ ª®¯¨à®¢ ­¨ï"
?define SHOW_BREADCRUMBS "ˆá¯®«ì§®¢ âì 'å«¥¡­ë¥ ªà®èª¨'"
?define BIG_ICONS "ˆá¯®«ì§®¢ âì ¡®«ì訥 ¨ª®­ª¨"
?define USE_TWO_PANELS "„¢¥ ¯ ­¥«¨"
@ -18,7 +17,6 @@
?define TITLE_SETT "Settings"
?define SHOW_DEVICE_CLASS "Show device class name"
?define SHOW_STATUS_BAR "Show status bar"
?define NOTIFY_COPY_END "Notify when copying finished"
?define SHOW_BREADCRUMBS "Show breadcrumbs"
?define BIG_ICONS "Big icons in list"
?define USE_TWO_PANELS "Two panels"
@ -39,7 +37,6 @@ more_less_box font_size = { NULL, 9, 22, FONT_SIZE_LABEL };
more_less_box line_height = { NULL, 16, 64, LIST_LINE_HEIGHT };
checkbox show_dev_name = { SHOW_DEVICE_CLASS };
checkbox show_status_bar = { SHOW_STATUS_BAR };
checkbox info_after_copy = { NOTIFY_COPY_END };
checkbox show_breadcrumb = { SHOW_BREADCRUMBS };
checkbox big_icons = { BIG_ICONS };
checkbox two_panels = { USE_TWO_PANELS };
@ -50,7 +47,7 @@ void settings_dialog()
{
proc_info Settings;
int id;
active_settings=1;
active_settings = true;
font_size.value = kfont.size.pt;
line_height.value = files.item_h;
SetEventMask(0x27);
@ -66,7 +63,7 @@ void settings_dialog()
if (1==id) { ExitSettings(); break; }
else if (id==5)
{
RunProgram("/sys/tinypad", "/sys/settings/assoc.ini");
RunProgram("/sys/@open", "/sys/settings/assoc.ini");
break;
}
else if (id==6)
@ -83,7 +80,6 @@ void settings_dialog()
break;
}
show_dev_name.click(id);
info_after_copy.click(id);
two_panels.click(id);
show_breadcrumb.click(id);
show_status_bar.click(id);
@ -108,7 +104,7 @@ void settings_dialog()
case evReDraw:
DefineAndDrawWindow(Form.cwidth-300/2+Form.left, Form.cheight-292/2+Form.top, 400,
435+skin_height,0x34,sc.work,TITLE_SETT,0);
365+skin_height,0x34,sc.work,TITLE_SETT,0);
GetProcessInfo(#Settings, SelfInfo);
DrawSettingsCheckBoxes();
}
@ -117,7 +113,7 @@ void settings_dialog()
void ExitSettings()
{
active_settings = 0;
active_settings = false;
settings_window = 0;
cmd_free = 4;
ExitProcess();
@ -130,10 +126,9 @@ void DrawSettingsCheckBoxes()
y.n = 0;
show_dev_name.draw(x, y.inc(14));
show_status_bar.draw(x, y.inc(25));
info_after_copy.draw(x, y.inc(25));
show_breadcrumb.draw(x, y.inc(25));
big_icons.draw(x, y.inc(25));
two_panels.draw(x, y.inc(25));
//two_panels.draw(x, y.inc(25));
colored_lines.draw(x, y.inc(25));
font_size.draw(x, y.inc(31));
line_height.draw(x, y.inc(31));
@ -152,21 +147,21 @@ void DrawSettingsCheckBoxes()
void LoadIniSettings()
{
ini.path = GetIni(#eolite_ini_path, "app.ini");
ini.section = "Eolite";
if (efm) ini.section = "EFM"; else ini.section = "Eolite";
two_panels.checked = efm;
files.SetFont(6, 9, 10000000b);
show_dev_name.checked = ini.GetInt("ShowDeviceName", true);
show_status_bar.checked = ini.GetInt("ShowStatusBar", true);
info_after_copy.checked = ini.GetInt("InfoAfterCopy", false);
big_icons.checked = ini.GetInt("BigIcons", false); BigIconsSwitch();
two_panels.checked = ini.GetInt("TwoPanels", false);
//two_panels.checked = ini.GetInt("TwoPanels", false);
colored_lines.checked = ini.GetInt("ColoredLines", false);
kfont.size.pt = ini.GetInt("FontSize", 13);
files.item_h = ini.GetInt("LineHeight", 19);
Form.left = ini.GetInt("WinX", 200);
Form.top = ini.GetInt("WinY", 50);
Form.width = ini.GetInt("WinW", 550);
Form.height = ini.GetInt("WinH", 503);
Form.left = ini.GetInt("WinX", 100);
Form.top = ini.GetInt("WinY", 30);
Form.width = ini.GetInt("WinW", efm*170+550);
Form.height = ini.GetInt("WinH", efm*116+503);
ini.GetString("DefaultPath", #path, 4096, "/rd/1");
ini.GetString("DefaultPath", #path_start, 4096, "/rd/1");
path_start_ed.size = path_start_ed.pos = strlen(#path_start);
@ -182,17 +177,18 @@ void SaveIniSettings()
{
ini.SetInt("ShowDeviceName", show_dev_name.checked);
ini.SetInt("ShowStatusBar", show_status_bar.checked);
ini.SetInt("InfoAfterCopy", info_after_copy.checked);
ini.SetInt("BigIcons", big_icons.checked);
ini.SetInt("TwoPanels", two_panels.checked);
//ini.SetInt("TwoPanels", two_panels.checked);
ini.SetInt("ColoredLines", colored_lines.checked);
ini.SetInt("FontSize", kfont.size.pt);
ini.SetInt("LineHeight", files.item_h);
if (Form.status_window<=2) {
ini.SetInt("WinX", Form.left);
ini.SetInt("WinY", Form.top);
ini.SetInt("WinW", Form.width);
ini.SetInt("WinH", Form.height);
}
}

View File

@ -9,7 +9,7 @@
?define T_NO "<EFBFBD>¥â"
?define T_CANCEL "Žâ¬¥­ "
?define T_CREATE "‘®§¤ âì"
?define T_RENAME "<EFBFBD>¥à¥¨¬¥­®¢ âì"
?define T_RENAME "<EFBFBD>¥à¥­ §¢ âì"
?define FS_ITEM_ALREADY_EXISTS "'<27>«¥¬¥­â á â ª¨¬ ¨¬¥­¥¬ 㦥 áãé¥áâ¢ã¥â' -E"
?define NOT_CREATE_FOLDER "'<27>¥ 㤠«®áì ᮧ¤ âì ¯ ¯ªã.' -E"
?define NOT_CREATE_FILE "'<27>¥ 㤠«®áì ᮧ¤ âì ä ©«.' -E"
@ -18,7 +18,6 @@
?define T_MOVE_WINDOW_TITLE "<EFBFBD>¥à¥¬¥é î..."
?define T_DELETE_WINDOW_TITLE "“¤ «ïî..."
?define T_ABORT_WINDOW_BUTTON "<EFBFBD>à¥à¢ âì"
?define INFO_AFTER_COPY "Š®¯¨à®¢ ­¨¥ § ¢¥à襭®"
?define T_CANCEL_PASTE "Š®¯¨à®¢ ­¨¥ ¯à¥ªà é¥­®. <20> ¯ª  ᪮¯¨à®¢ ­  ­¥ ¯®«­®áâìî."
?define T_SELECT_APP_TO_OPEN_WITH "‚ë¡¥à¨â¥ ¯à®£à ¬¬ã ¤«ï ®âªàëâ¨ï ä ©« "
?define DEL_MORE_FILES_1 "¢ë¡à ­­ë¥ í«¥¬¥­âë ("
@ -49,7 +48,6 @@
?define T_MOVE_WINDOW_TITLE "Moving..."
?define T_DELETE_WINDOW_TITLE "Deleting..."
?define T_ABORT_WINDOW_BUTTON "Abort"
?define INFO_AFTER_COPY "Copy finished"
?define T_CANCEL_PASTE "Copy process terminated. Folder copied incompletely."
?define T_SELECT_APP_TO_OPEN_WITH "Select application to open file"
?define DEL_MORE_FILES_1 "selected items("