clipview: rewrite and decrease the size twice (from 3847 bytes to 1958)

search: new app, alpha version

git-svn-id: svn://kolibrios.org@8933 a494cfbc-eb01-0410-851d-a64ba20cac60
This commit is contained in:
Kirill Lipatov (Leency) 2021-06-24 20:42:19 +00:00
parent 1aa78952d7
commit 804cb0b51c
13 changed files with 465 additions and 106 deletions

View File

@ -208,8 +208,7 @@ void DrawWindowContent()
tabs.x+TAB_PADDING, tabs.x+TAB_PADDING,
tabs.y+TAB_HEIGHT+TAB_PADDING, tabs.y+TAB_HEIGHT+TAB_PADDING,
list_w, list_w,
Form.cheight-LP-LP - TAB_PADDING - TAB_PADDING - TAB_HEIGHT, Form.cheight-LP-LP - TAB_PADDING - TAB_PADDING - TAB_HEIGHT
false
); );
select_list.cur_y = id; select_list.cur_y = id;

View File

@ -0,0 +1,5 @@
@del clipview
@c-- /D=LANG_ENG clipview.c
@rename clipview.com clipview
@del warning.txt
@pause

View File

@ -1,17 +1,11 @@
#ifndef AUTOBUILD #define ENTRY_POINT #main
?include "lang.h--"
#endif
#define MEMSIZE 4096*20 #define MEMSIZE 4096*20
#include "..\lib\mem.h"
#include "..\lib\strings.h" #include "..\lib\strings.h"
#include "..\lib\list_box.h"
#include "..\lib\clipboard.h" #include "..\lib\clipboard.h"
#include "..\lib\gui.h" #include "..\lib\gui.h"
#include "..\lib\obj\box_lib.h" #include "..\lib\fs.h"
#include "..\lib\patterns\select_list.h"
//===================================================// //===================================================//
// // // //
@ -19,28 +13,35 @@
// // // //
//===================================================// //===================================================//
?define WINDOW_HEADER "Clipboard Viewer"
?define T_DELETE_LAST_SLOT "Delete last slot"
?define T_DELETE_ALL_SLOTS "Delete all slots"
?define T_RESET_BUFFER_LOCK "Reset the lock buffer"
?define T_COLUMNS_TITLE "# | Data size | Data type | Contents" ?define T_COLUMNS_TITLE "# | Data size | Data type | Contents"
?define T_COLUMN_VIEW "| View" ?define T_COLUMN_VIEW "| View"
?define T_VIEW_OPTIONS "TEXT HEX"
?define DEFAULT_SAVE_PATH "/tmp0/1/clipview.tmp" ?define DEFAULT_SAVE_PATH "/tmp0/1/clipview.tmp"
char *data_type[] = { "Text", "Image", "RAW", "Unknown" }; char *data_type[] = { "Text", "Image", "RAW", "Unknown" };
enum { enum {
BT_DELETE_LAST_SLOT = 10, BT_DELETE_LAST = 10,
BT_DELETE_ALL_SLOTS, BT_DELETE_ALL,
BT_UNLOCK BT_UNLOCK,
BT_LIST_LEFT,
BT_LIST_RIGHT
}; };
#define PANEL_TOP_H 20 #define PANEL_BOTTOM_H 35
#define PANEL_BOTTOM_H 30 #define GAP 5
#define LIST_PADDING 12 #define LIST_Y 32
#define PANEL_TOP_H LIST_Y-2
#define LINE_H 20
#define TEXT_Y LINE_H - 14 / 2
proc_info Form; proc_info Form;
struct LIST {
int w,h;
int count;
int first;
int visible;
} list = 0;
//===================================================// //===================================================//
// // // //
// CODE // // CODE //
@ -49,66 +50,77 @@ proc_info Form;
void main() void main()
{ {
int id; mem_init();
@SetEventMask(EVM_REDRAW + EVM_KEY + EVM_BUTTON + EVM_MOUSE + EVM_MOUSE_FILTER); @SetEventMask(EVM_REDRAW + EVM_BUTTON);
#define NO_DLL_INIT
load_dll(boxlib, #box_lib_init,0);
loop() switch(@WaitEventTimeout(10)) loop() switch(@WaitEventTimeout(10))
{ {
case evMouse:
SelectList_ProcessMouse();
break;
case evButton: case evButton:
id = @GetButtonID(); @GetButtonID();
if (id==1) ExitProcess(); switch(EAX) {
if (id==BT_DELETE_LAST_SLOT) EventDeleteLastSlot(); case 1:
if (id==BT_DELETE_ALL_SLOTS) EventDeleteAllSlots(); ExitProcess();
if (id==BT_UNLOCK) EventResetBufferLock(); case BT_DELETE_LAST:
if (id>=100) && (id<300) EventOpenAsText(id-100); EventDeleteLastSlot();
if (id>=300) EventOpenAsHex(id-300); break;
break; case BT_DELETE_ALL:
EventDeleteAllSlots();
case evKey: break;
if (select_list.ProcessKey(@GetKeyScancode())) { case BT_UNLOCK:
ClipViewSelectListDraw(); EventResetBufferLock();
break;
case BT_LIST_LEFT:
list.first -= list.visible;
if (list.first <= 0) list.first = 0;
ClipViewSelectListDraw();
break;
case BT_LIST_RIGHT:
if (list.first + list.visible < list.count) list.first += list.visible;
ClipViewSelectListDraw();
break;
default:
if (EAX>=300) EventOpenAsHex(EAX-300);
else EventOpenAsText(EAX-100);
} }
break; break;
case evReDraw: case evReDraw:
sc.get(); sc.get();
DefineAndDrawWindow(screen.width-700/2,80,700,454+skin_height,0x73,0xE4DFE1,WINDOW_HEADER,0); DefineAndDrawWindow(GetScreenWidth()-600/2,80,600,400,0x73,NULL,"Clipboard Viewer",NULL);
GetProcessInfo(#Form, SelfInfo); GetProcessInfo(#Form, SelfInfo);
IF (Form.status_window>=2) break; IF (Form.status_window>=2) break;
IF (Form.height < 200) { MoveSize(OLD,OLD,OLD,200); break; } IF (Form.height < 200) { MoveSize(OLD,OLD,OLD,200); break; }
IF (Form.width < 570) { MoveSize(OLD,OLD,570,OLD); break; } IF (Form.width < 570) { MoveSize(OLD,OLD,570,OLD); break; }
SelectList_Init(
LIST_PADDING,
LIST_PADDING+PANEL_TOP_H,
Form.cwidth-LIST_PADDING-LIST_PADDING-scroll1.size_x,
Form.cheight-PANEL_BOTTOM_H-PANEL_TOP_H-LIST_PADDING-LIST_PADDING,
true
);
DrawWindowContent(); DrawWindowContent();
break; break;
default: default:
if (Clipboard__GetSlotCount() > select_list.count) ClipViewSelectListDraw(); if (Clipboard__GetSlotCount() > list.count) ClipViewSelectListDraw();
break;
} }
} }
void DrawWindowContent() void DrawWindowContent()
{ {
int button_x = select_list.x; list.w = Form.cwidth-GAP-GAP;
list.h = Form.cheight-PANEL_BOTTOM_H-LIST_Y-GAP;
list.visible = list.h / LINE_H;
if (list.first > list.count) list.first = list.count - list.visible;
DrawBar(0,0, Form.cwidth, PANEL_TOP_H, sc.work); DrawBar(0,0, Form.cwidth, PANEL_TOP_H, sc.work);
DrawBar(0,Form.cheight-PANEL_BOTTOM_H, Form.cwidth, PANEL_BOTTOM_H, sc.work); DrawBar(0,Form.cheight-PANEL_BOTTOM_H, Form.cwidth, PANEL_BOTTOM_H, sc.work);
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, sc.work); DrawWideRectangle(GAP-GAP, LIST_Y-GAP, GAP*2+list.w, GAP*2+list.h, GAP-2, sc.work);
button_x += DrawStandartCaptButton(button_x, select_list.y + select_list.h + 8, BT_DELETE_LAST_SLOT, T_DELETE_LAST_SLOT);
button_x += DrawStandartCaptButton(button_x, select_list.y + select_list.h + 8, BT_DELETE_ALL_SLOTS, T_DELETE_ALL_SLOTS); DefineButton(GAP, list.h + LIST_Y + 8, 110, 25, BT_DELETE_LAST, sc.button);
button_x += DrawStandartCaptButton(button_x, select_list.y + select_list.h + 8, BT_UNLOCK, T_RESET_BUFFER_LOCK); $inc edx
WriteText(select_list.x+12, select_list.y - 23, 0x90, sc.work_text, T_COLUMNS_TITLE); $add ebx, 130 << 16 //BT_DELETE_ALL
WriteText(select_list.x+select_list.w - 88-14, select_list.y - 23, 0x90, sc.work_text, T_COLUMN_VIEW); $int 64
$inc edx
$add ebx, 130 << 16 //BT_UNLOCK
$int 64
WriteText(GAP+10, LIST_Y + list.h + 14, 0x90, sc.button_text, "Delete last Delete all Unlock");
WriteText(GAP+12, LIST_Y - 23, 0x90, sc.work_text, T_COLUMNS_TITLE);
WriteText(GAP+list.w - 88-14, LIST_Y - 23, 0x90, sc.work_text, T_COLUMN_VIEW);
ClipViewSelectListDraw(); ClipViewSelectListDraw();
SelectList_DrawBorder(); SelectList_DrawBorder();
} }
@ -125,10 +137,16 @@ struct clipboard_data
void SelectList_DrawLine(dword i) void SelectList_DrawLine(dword i)
{ {
int yyy, length, slot_data_type_number; int yyy, slot_data_type_number;
dword line_text[2048];
slot_data = Clipboard__GetSlotData(select_list.first + i); yyy = i*LINE_H+LIST_Y;
DrawBar(GAP, yyy, list.w, LINE_H, -i%2 * 0x0E0E0E + 0xF1F1f1);
if (list.first + i >= list.count) {
return;
}
slot_data = Clipboard__GetSlotData(list.first + i);
cdata.size = ESDWORD[slot_data]; cdata.size = ESDWORD[slot_data];
cdata.type = ESDWORD[slot_data+4]; cdata.type = ESDWORD[slot_data+4];
if (cdata.type==SLOT_DATA_TYPE_TEXT) || (cdata.type==SLOT_DATA_TYPE_TEXT_BLOCK) if (cdata.type==SLOT_DATA_TYPE_TEXT) || (cdata.type==SLOT_DATA_TYPE_TEXT_BLOCK)
@ -137,22 +155,18 @@ void SelectList_DrawLine(dword i)
cdata.content_offset = 8; cdata.content_offset = 8;
cdata.content = slot_data + cdata.content_offset; cdata.content = slot_data + cdata.content_offset;
yyy = i*select_list.item_h+select_list.y; WriteText(GAP+12, yyy+TEXT_Y, 0x90, 0x000000, itoa(list.first + i));
DrawBar(select_list.x+1, yyy, select_list.w-1, select_list.item_h, -i%2 * 0x0E0E0E + 0xF1F1f1);
WriteText(select_list.x+12, yyy+select_list.text_y, 0x90, 0x000000, itoa(select_list.first + i));
EDX = ConvertSizeToKb(cdata.size); EDX = ConvertSizeToKb(cdata.size);
WriteText(select_list.x+44, yyy+select_list.text_y, 0x90, 0x000000, EDX); WriteText(GAP+44, yyy+TEXT_Y, 0x90, 0x000000, EDX);
slot_data_type_number = cdata.type; slot_data_type_number = cdata.type;
WriteText(select_list.x+140, yyy+select_list.text_y, 0x90, 0x000000, data_type[slot_data_type_number]); WriteText(GAP+140, yyy+TEXT_Y, 0x90, 0x000000, data_type[slot_data_type_number]);
WriteText(select_list.x+select_list.w - 88, yyy+select_list.text_y, 0x90, 0x006597, T_VIEW_OPTIONS); WriteText(GAP+list.w - 88, yyy+TEXT_Y, 0x90, 0x006597, "TEXT HEX");
DefineButton(select_list.x+select_list.w - 95, yyy, 50, select_list.item_h, 100+i+BT_HIDE, NULL); DefineButton(GAP+list.w - 98, yyy, 50, LINE_H, 100+i+BT_HIDE, NULL);
DefineButton(select_list.x+select_list.w - 95 + 51, yyy, 40, select_list.item_h, 300+i+BT_HIDE, NULL); DefineButton(GAP+list.w - 95 + 51, yyy, 40, LINE_H, 300+i+BT_HIDE, NULL);
length = select_list.w-236 - 95 / select_list.font_w - 2; ESI = list.w - 345 / 8;
if (cdata.size - cdata.content_offset < length) length = cdata.size - cdata.content_offset; if (cdata.size - cdata.content_offset < ESI) ESI = cdata.size - cdata.content_offset;
strlcpy(#line_text, cdata.content, length); WriteText(GAP+236, yyy+TEXT_Y, 0x30, 0x000000, cdata.content);
replace_char(#line_text, 0, 31, length); // 31 is a dot
WriteText(select_list.x+236, yyy+select_list.text_y, 0x90, 0x000000, #line_text);
} }
int SaveSlotContents(dword size, off) { int SaveSlotContents(dword size, off) {
@ -164,13 +178,42 @@ int SaveSlotContents(dword size, off) {
} }
} }
void ClipViewSelectListDraw() { void ClipViewSelectListDraw()
select_list.count = Clipboard__GetSlotCount(); {
SelectList_Draw(); int i, list_last;
list.count = Clipboard__GetSlotCount();
if (list.count > list.visible) list_last = list.visible; else list_last = list.count;
for (i=0; i<list_last; i++;) SelectList_DrawLine(i);
DrawBar(GAP,i*LINE_H+LIST_Y, list.w, -i*LINE_H+ list.h, 0xFFFfff);
if (!list.count) WriteText(list.w / 2 + GAP - 60,
list.h / 2 - 8 + LIST_Y, 0x90, 0x999999, "No data to show");
if (list.count > list.visible) {
param[0] = list.first / list.visible + '0';
DefineButton(Form.cwidth-84-GAP, list.h + LIST_Y + 8, 25, 25, BT_LIST_LEFT, sc.button); //BT_LEFT
$inc edx
$add ebx, 57 << 16 //BT_RIGHT
$int 64
WriteText(Form.cwidth-84-GAP+10, list.h + LIST_Y + 14, 0x90, sc.button_text, "< >");
$add ebx, 28 << 16
$mov edx, #param;
$mov edi, sc.work_text
$add ecx, 0x40 << 24
$int 64
}
} }
void SelectList_LineChanged() { void SelectList_DrawBorder() {
return; DrawRectangle3D(GAP-2, LIST_Y-2,
list.w+3, list.h+3,
sc.work_dark, sc.work_light);
DrawRectangle3D(GAP-1, LIST_Y-1,
list.w+1, list.h+1,
sc.work_graph, sc.work_graph);
} }
//===================================================// //===================================================//
@ -182,21 +225,24 @@ void SelectList_LineChanged() {
void EventDeleteLastSlot() void EventDeleteLastSlot()
{ {
int i; int i;
for (i=0; i<select_list.visible; i++;) DeleteButton(select_list.first + i + 100); for (i=0; i<list.visible; i++;) {
for (i=0; i<select_list.visible; i++;) DeleteButton(select_list.first + i + 300); DeleteButton(list.first + i + 100);
$add edx, 200
$int 64
}
Clipboard__DeleteLastSlot(); Clipboard__DeleteLastSlot();
ClipViewSelectListDraw(); DrawWindowContent();
} }
void EventDeleteAllSlots() void EventDeleteAllSlots()
{ {
while (Clipboard__GetSlotCount()) Clipboard__DeleteLastSlot(); while (Clipboard__GetSlotCount()) Clipboard__DeleteLastSlot();
ClipViewSelectListDraw(); DrawWindowContent();
} }
void EventResetBufferLock() { void EventResetBufferLock() {
Clipboard__ResetBlockingBuffer(); Clipboard__ResetBlockingBuffer();
ClipViewSelectListDraw(); DrawWindowContent();
} }
void EventOpenAsText(int slot_id) { void EventOpenAsText(int slot_id) {

View File

@ -1,9 +0,0 @@
@del lang.h--
@echo #define LANG_ENG 1 >lang.h--
@C-- clipview.c
@del clipview
@rename clipview.com clipview
@del warning.txt
@del lang.h--
@pause

View File

@ -141,11 +141,9 @@ void Draw_DriverListWindow()
int right_frame_x = Form.cwidth*46/100; int right_frame_x = Form.cwidth*46/100;
int readme_w = 0; int readme_w = 0;
//LEFT FRAME //LEFT FRAME
SelectList_Init(PADDING, SelectList_Init(PADDING, PADDING,
PADDING,
right_frame_x - PADDING - PADDING - 8 - scroll1.size_x, right_frame_x - PADDING - PADDING - 8 - scroll1.size_x,
Form.cheight - PADDING - PADDING, Form.cheight - PADDING - PADDING);
false);
SelectList_Draw(); SelectList_Draw();
SelectList_DrawBorder(); SelectList_DrawBorder();
//RIGHT FRAME //RIGHT FRAME

View File

@ -89,7 +89,7 @@ void CopyFilesListToClipboard(bool _cut_active)
if (cut_active) { if (cut_active) {
if (i>=files.first) && (i<files.first+files.visible) if (i>=files.first) && (i<files.first+files.visible)
PutShadow(files.x+4,i-files.first*files.item_h+files.y,16,files.item_h,1,-3); PutShadow(files.x+4,i-files.first*files.item_h+files.y,icons16_default,files.item_h,1,-3);
} }
} }
} }

View File

@ -146,7 +146,7 @@ void LoadIniSettings()
ini.path = GetIni(#eolite_ini_path, "app.ini"); ini.path = GetIni(#eolite_ini_path, "app.ini");
if (efm) ini.section = "EFM"; else ini.section = "Eolite"; if (efm) ini.section = "EFM"; else ini.section = "Eolite";
files.SetFont(6, 9, 10000000b); files.SetFont(8, 14, 10000000b);
show_dev_name.checked = ini.GetInt("ShowDeviceName", true); show_dev_name.checked = ini.GetInt("ShowDeviceName", true);
show_status_bar.checked = ini.GetInt("ShowStatusBar", true); show_status_bar.checked = ini.GetInt("ShowStatusBar", true);
big_icons.checked = ini.GetInt("BigIcons", false); BigIconsSwitch(); big_icons.checked = ini.GetInt("BigIcons", false); BigIconsSwitch();

View File

@ -3,9 +3,8 @@ scroll_bar scroll1 = { 18,200,398, 44,18,0,115,15,0,0xeeeeee,0xD2CED0,0x555555,0
?define T_SELECT_LIST_NO_DATA "No data to show" ?define T_SELECT_LIST_NO_DATA "No data to show"
void SelectList_Init(dword _x, _y, _w, _h, _no_selection) void SelectList_Init(dword _x, _y, _w, _h)
{ {
select_list.no_selection = _no_selection;
select_list.SetFont(8, 14, 0x90); select_list.SetFont(8, 14, 0x90);
select_list.SetSizes(_x, _y, _w, _h, 20); select_list.SetSizes(_x, _y, _w, _h, 20);
} }
@ -20,12 +19,11 @@ void SelectList_Draw()
for (i=0; i<list_last; i++;) for (i=0; i<list_last; i++;)
{ {
DrawBar(select_list.x,i*select_list.item_h+select_list.y,select_list.w, select_list.item_h, 0xFFFfff);
SelectList_DrawLine(i); //NEED TO BE IMPLEMENTED IN APP SelectList_DrawLine(i); //NEED TO BE IMPLEMENTED IN APP
} }
DrawBar(select_list.x,i*select_list.item_h+select_list.y, select_list.w, -i*select_list.item_h+ select_list.h, 0xFFFfff); DrawBar(select_list.x,i*select_list.item_h+select_list.y, select_list.w, -i*select_list.item_h+ select_list.h, 0xFFFfff);
if (!select_list.count) WriteText(-strlen(T_SELECT_LIST_NO_DATA)*select_list.font_w + select_list.w / 2 + select_list.x + 1, if (!select_list.count) WriteText(-15*8 + select_list.w / 2 + select_list.x + 1,
select_list.h / 2 - 8 + select_list.y, select_list.font_type, 0x999999, T_SELECT_LIST_NO_DATA); select_list.h / 2 - 8 + select_list.y, 0x90, 0x999999, T_SELECT_LIST_NO_DATA);
SelectList_DrawScroller(); SelectList_DrawScroller();
} }

View File

@ -0,0 +1,6 @@
if tup.getconfig("NO_CMM") ~= "" then return end
if tup.getconfig("LANG") == "ru"
then C_LANG = "LANG_RUS"
else C_LANG = "LANG_ENG" -- this includes default case without config
end
tup.rule("search.c", "c-- /D=AUTOBUILD /D=$(C_LANG) %f" .. tup.getconfig("KPACK_CMD"), "search.com")

View File

@ -0,0 +1,10 @@
@del search
@c-- /D=LANG_ENG search.c
@rename search.com search
@del warning.txt
if exist search (
@exit
) else (
@pause
)

View File

@ -0,0 +1,10 @@
@del search
@c-- /D=LANG_RUS search.c
@rename search.com search
@del warning.txt
if exist search (
@exit
) else (
@pause
)

View File

@ -0,0 +1,296 @@
#define MEMSIZE 100*1000
#include "../lib/fs.h"
#include "../lib/gui.h"
#include "../lib/list_box.h"
#include "../lib/obj/box_lib.h"
#include "../lib/obj/proc_lib.h"
#include "../lib/obj/libimg.h"
#include "../lib/obj/libini.h"
#include "../lib/patterns/select_list.h"
//===================================================//
// //
// DATA //
// //
//===================================================//
#ifdef LANG_RUS
?define T_WINDOW_HEADER "<EFBFBD>®¨áª"
?define T_BUTTON_SEARCH "<EFBFBD> ©â¨"
?define T_SEARCH_PATH "Š â «®£ ¯®¨áª :"
?define T_SEARCH_NAME "ˆ¬ï ä ©« :"
#else
?define T_WINDOW_HEADER "Search"
?define T_BUTTON_SEARCH "Search"
?define T_SEARCH_PATH "Search in:"
?define T_SEARCH_NAME "File name:"
#endif
char search_name[64];
char search_path[4096];
enum {
BTN_SEARCH = 10,
BTN_CHOOSE_PATH
};
proc_info Form;
#define TOOLBAR_H 100
edit_box edit_name = {230,13, 30,0xffffff,0x94AECE,0xffffff,0xffffff,0x10000000,sizeof(search_name)-2,#search_name,0, ed_focus,0,0};
edit_box edit_path = {310,260,30,0xffffff,0x94AECE,0xffffff,0xffffff,0x10000000,sizeof(search_path)-2,#search_path,0, 0b,0,0};
opendialog open_folder_dialog =
{
2, //0-file, 2-save, 3-select folder
#Form,
#communication_area_name,
0,
0, //dword opendir_path,
#search_path, //dword dir_default_path,
#open_dialog_path,
#draw_window,
0,
#search_path, //dword openfile_path,
0, //dword filename_area,
0, //dword filter_area,
420,
NULL,
320,
NULL
};
//===================================================//
// //
// RESULTS //
// //
//===================================================//
struct RESULTS {
collection name;
collection path;
collection_int type;
unsigned count;
void add();
void drop();
} results;
void RESULTS::add(dword _name, _path, _type)
{
name.add(_name);
path.add(_path);
type.add(_type);
count++;
}
void RESULTS::drop()
{
name.drop();
path.drop();
type.drop();
count = 0;
}
//===================================================//
// //
// CODE //
// //
//===================================================//
void main()
{
int prev_first, prev_cur_y;
load_dll(boxlib, #box_lib_init,0);
load_dll(libimg, #libimg_init,1);
load_dll(libini, #lib_init,1);
load_dll(Proc_lib, #OpenDialog_init,0);
OpenDialog_init stdcall (#open_folder_dialog);
edit_box_set_text stdcall (#edit_name, ".ini");
edit_box_set_text stdcall (#edit_path, "/kolibrios");
@SetEventMask(EVM_REDRAW + EVM_KEY + EVM_BUTTON + EVM_MOUSE + EVM_MOUSE_FILTER);
loop() switch(@WaitEvent())
{
case evMouse:
edit_box_mouse stdcall (#edit_name);
edit_box_mouse stdcall (#edit_path);
if (SelectList_ProcessMouse()) {
SelectList_Draw();
} else {
SelectList_DrawLine(select_list.cur_y);
}
if (mouse.key&MOUSE_RIGHT) && (mouse.up) && (select_list.MouseOver()) EventOpenFile(false);
break;
case evButton:
switch (@GetButtonID()) {
case 1: @ExitProcess(); break;
case BTN_SEARCH: EventSearch(); break;
case BTN_CHOOSE_PATH: EventChooseSearchInPath();
}
break;
case evKey:
@GetKeys();
edit_box_key stdcall (#edit_name);
edit_box_key stdcall (#edit_path);
if (edit_name.flags & ed_focus) || (edit_path.flags & ed_focus) {
if (SCAN_CODE_ENTER == key_scancode) EventSearch();
} else {
if (SCAN_CODE_ENTER == key_scancode) EventOpenFile(true);
prev_first = select_list.first;
prev_cur_y = select_list.cur_y;
if (select_list.ProcessKey(key_scancode)) {
if (prev_first == select_list.first) {
SelectList_DrawLine(prev_cur_y);
SelectList_DrawLine(select_list.cur_y);
} else {
SelectList_Draw();
}
}
}
break;
case evReDraw:
draw_window();
break;
}
}
void draw_window()
{
sc.get();
DefineAndDrawWindow(screen.width-600/2,100,640,600+skin_height,0x73,sc.work,T_WINDOW_HEADER,0);
GetProcessInfo(#Form, SelfInfo);
IF (Form.status_window>=2) return;
if (Form.width < 270) { MoveSize(OLD,OLD,270,OLD); return; }
if (Form.height < 200) { MoveSize(OLD,OLD,OLD,200); return; }
SelectList_Init( 0, TOOLBAR_H,
Form.cwidth-scroll1.size_x-1,
Form.cheight-TOOLBAR_H-1);
SelectList_Draw();
DrawBar(0, TOOLBAR_H-1, Form.cwidth, 1, sc.work_graph);
DrawBar(0, 0, Form.cwidth, TOOLBAR_H-1, sc.work);
DrawEditBox(#edit_name);
WriteText(edit_name.left-2, edit_name.top-20, 0x90, sc.work_text, T_SEARCH_NAME);
edit_path.width = Form.cwidth - 314;
DrawFileBox(#edit_path, T_SEARCH_PATH, BTN_CHOOSE_PATH);
DrawStandartCaptButton(10, 63, BTN_SEARCH, T_BUTTON_SEARCH);
}
_ini ini = { "/sys/File managers/icons.ini", "icons16" };
void SelectList_DrawLine(dword i)
{
int yyy = i*select_list.item_h+select_list.y;
dword bg = 0xFFFfff;
dword col = 0;
int icon;
char tname[4096];
if (!select_list.count) return;
if (select_list.cur_y-select_list.first==i)
{
bg = sc.button;
col = sc.button_text;
if (edit_name.flags & ed_focus) || (edit_path.flags & ed_focus) bg = 0xAAAaaa;
}
if (results.type.get(select_list.first + i)==true) {
icon=0;
} else {
strcpy(#tname, results.name.get(select_list.first + i));
strlwr(#tname);
icon = ini.GetInt(#tname + strrchr(#tname, '.'), 2);
}
#define ICONX 7
DrawBar(select_list.x, yyy, ICONX-1, select_list.item_h, 0xFFFfff);
DrawBar(select_list.x+ICONX+18, yyy, select_list.w-ICONX-18, select_list.item_h, bg);
DrawIcon16(select_list.x+ICONX, yyy+1, 0xFFFfff, icon);
WriteText(select_list.x + ICONX+18+4,yyy+select_list.text_y,0x90, col, results.name.get(select_list.first + i));
WriteText(select_list.x + ICONX+18+206,yyy+select_list.text_y,0x90, col, results.path.get(select_list.first + i));
}
void SelectList_LineChanged()
{
return;
}
//===================================================//
// //
// EVENTS //
// //
//===================================================//
void EventChooseSearchInPath()
{
OpenDialog_start stdcall (#open_folder_dialog);
if (open_folder_dialog.status) {
edit_box_set_text stdcall (#edit_path, #search_path);
}
}
void getfullpath(dword to, path, name) {
strcpy(to, path);
chrcat(to, '/');
strcat(to, name);
}
void EventOpenFile(int run_file_not_show_in_folder)
{
char full_path[4096];
int pos = select_list.cur_y;
getfullpath(#full_path, results.path.get(pos), results.name.get(pos));
if (run_file_not_show_in_folder) {
RunProgram("/sys/@open", #full_path);
} else {
RunProgram("/sys/file managers/eolite", #full_path);
}
}
void EventSearch()
{
results.drop();
find_loop(#search_path);
select_list.count = results.count;
SelectList_Draw();
}
void find_loop(dword way)
{
dword dirbuf, fcount, i, filename;
dword cur_file;
bool folder;
if (way) && (dir_exists(way))
{
cur_file = malloc(4096);
// In the process of recursive descent, memory must be allocated dynamically,
// because the static memory -> was a bug !!! But unfortunately pass away to sacrifice speed.
GetDir(#dirbuf, #fcount, way, DIRS_ONLYREAL);
for (i=0; i<fcount; i++)
{
filename = i*304+dirbuf+72;
getfullpath(cur_file,way,filename);
if (TestBit(ESDWORD[filename-40], 4) ) folder = true; else folder = false;
if (strstri(filename, #search_name)) {
results.add(filename, way, folder);
}
if (folder) {
find_loop(cur_file);
}
}
free(cur_file);
free(dirbuf);
}
}
stop:

View File

@ -149,7 +149,7 @@ void main()
//DrawTopPanelButton(BTN_ID_MENU, Form.cwidth-GAP-3, GAP, -1, burger_active); //DrawTopPanelButton(BTN_ID_MENU, Form.cwidth-GAP-3, GAP, -1, burger_active);
SelectList_Init(GAP, WIN_CONTENT_Y, PROCESS_LIST_W, SelectList_Init(GAP, WIN_CONTENT_Y, PROCESS_LIST_W,
Form.cheight-BOTPANEL_H-WIN_CONTENT_Y, false); Form.cheight-BOTPANEL_H-WIN_CONTENT_Y);
SelectList_DrawBorder(); SelectList_DrawBorder();
DrawBar(select_list.x-2, select_list.y+select_list.h+2, DrawBar(select_list.x-2, select_list.y+select_list.h+2,