forked from KolibriOS/kolibrios
Eolite 1.99: Just OpenWith. F*ck Yea.
git-svn-id: svn://kolibrios.org@4049 a494cfbc-eb01-0410-851d-a64ba20cac60
This commit is contained in:
parent
4c545a80b6
commit
eedc7e81df
@ -6,7 +6,7 @@
|
||||
#endif
|
||||
|
||||
//libraries
|
||||
#define MEMSIZE 0xA0000
|
||||
#define MEMSIZE 0xD0000
|
||||
#include "..\lib\kolibri.h"
|
||||
#include "..\lib\strings.h"
|
||||
#include "..\lib\mem.h"
|
||||
@ -38,6 +38,7 @@
|
||||
?define T_PASTE_WINDOW "Š®¯¨àãî..."
|
||||
?define T_PASTE_WINDOW_TEXT "Š®¯¨àã¥âáï ä ©«:"
|
||||
?define T_CANCEL_PASTE "Š®¯¨à®¢ ¨¥ ¯à¥ªà 饮. <20> ¯ª ᪮¯¨à®¢ ¥ ¯®«®áâìî."
|
||||
?define T_SELECT_APP_TO_OPEN_WITH "‚ë¡¥à¨â¥ ¯à®£à ¬¬ã ¤«ï ®âªàëâ¨ï ä ©« "
|
||||
#elif LANG_EST
|
||||
?define T_FILE "Fail"
|
||||
?define T_TYPE "Tüüp"
|
||||
@ -55,6 +56,7 @@
|
||||
?define T_PASTE_WINDOW "Kopeerin..."
|
||||
?define T_PASTE_WINDOW_TEXT "Kopeerin faili:"
|
||||
?define T_CANCEL_PASTE "Copy process terminated. Folder copied incompletely."
|
||||
?define T_SELECT_APP_TO_OPEN_WITH "Select application to open file"
|
||||
#else
|
||||
?define T_FILE "File"
|
||||
?define T_TYPE "Type"
|
||||
@ -72,12 +74,13 @@
|
||||
?define T_PASTE_WINDOW "Copying..."
|
||||
?define T_PASTE_WINDOW_TEXT "Copying file:"
|
||||
?define T_CANCEL_PASTE "Copy process terminated. Folder copied incompletely."
|
||||
?define T_SELECT_APP_TO_OPEN_WITH "Select application to open file"
|
||||
#endif
|
||||
|
||||
enum {ONLY_SHOW, WITH_REDRAW, ONLY_OPEN}; //OpenDir
|
||||
|
||||
#define TITLE "Eolite File Manager v1.98.8"
|
||||
#define ABOUT_TITLE "Eolite v1.98.8"
|
||||
#define TITLE "Eolite File Manager v1.99"
|
||||
#define ABOUT_TITLE "Eolite v1.99"
|
||||
dword col_work = 0xE4DFE1;
|
||||
dword col_border = 0x9098B0; //A0A0B8; //0x819FC5;
|
||||
dword col_padding = 0xC8C9C9;
|
||||
@ -422,7 +425,6 @@ void menu_action(dword id)
|
||||
if (id==100) Open();
|
||||
if (id==201)
|
||||
{
|
||||
pause(10);
|
||||
SwitchToAnotherThread();
|
||||
CreateThread(#OpenWith,#open_with_stak);
|
||||
}
|
||||
@ -570,14 +572,14 @@ void Line_ReDraw(dword color, filenum){
|
||||
|
||||
if (! TestBit(attr, 4) ) //file or folder?
|
||||
{
|
||||
Put_icon(off+_strrchr(off,'.'), files.line_h/2-7+y, color);
|
||||
Put_icon(off+_strrchr(off,'.'), files.x+3, files.line_h/2-7+y, color);
|
||||
WriteText(7-strlen(ConvertMemSize(ESDWORD[off-8]))*6+onLeft(75,0),files.line_h-6/2+y,0x80,0,ConvertMemSize(ESDWORD[off-8])); //size
|
||||
}
|
||||
else
|
||||
if (!strcmp("..",off))
|
||||
Put_icon("..", files.line_h/2-7+y, color);
|
||||
Put_icon("..", files.x+3, files.line_h/2-7+y, color);
|
||||
else
|
||||
Put_icon("<DIR>", files.line_h/2-7+y, color);
|
||||
Put_icon("<DIR>", files.x+3, files.line_h/2-7+y, color);
|
||||
if ( TestBit(attr, 1) ) || ( TestBit(attr, 2) ) text_col=0xA6A6B7; //system or hiden?
|
||||
if (color!=0xFFFfff)
|
||||
{
|
||||
|
@ -30,14 +30,14 @@ char *ext[]={
|
||||
|
||||
#include "imgs\icons.txt"
|
||||
|
||||
void Put_icon(dword extension, yy, fairing_color)
|
||||
void Put_icon(dword extension, xx, yy, fairing_color)
|
||||
{
|
||||
int icon_n=0, i;
|
||||
for (i=0; ext[i]!=0; i+=2;) if (!strcmp(extension, ext[i])) { icon_n = ext[i+1]; break; }
|
||||
|
||||
ficons_pal[0] = fairing_color;
|
||||
PutPaletteImage(icon_n*16*15+#ficons,16,15,files.x+3,yy,8,#ficons_pal);
|
||||
if (fairing_color!=0xFFFfff) IconFairing(icon_n, files.x+3, yy, fairing_color);
|
||||
PutPaletteImage(icon_n*16*15+#ficons,16,15,xx,yy,8,#ficons_pal);
|
||||
if (fairing_color!=0xFFFfff) IconFairing(icon_n, xx, yy, fairing_color);
|
||||
if (icon_n<>17) && (strlen(extension)<9) WriteText(-strlen(extension)*3+Form.cwidth-120,yy+4,0x80,0,extension);
|
||||
}
|
||||
|
||||
@ -49,16 +49,16 @@ void IconFairing(dword filenum, x,y, color)
|
||||
case 0...1: //file
|
||||
case 3: //íàñòðîéêè
|
||||
RIGHT_PAINT:
|
||||
DrawBar(205,y,4,1,color);
|
||||
DrawBar(206,y+1,3,1,color);
|
||||
DrawBar(207,y+2,2,1,color);
|
||||
PutPixel(208,y+3,color);
|
||||
PutPixel(x+10,y,color);
|
||||
PutPixel(x+11,y+1,color);
|
||||
PutPixel(x+12,y+2,color);
|
||||
PutPixel(x+13,y+3,color);
|
||||
return;
|
||||
case 2: //html
|
||||
DrawBar(195,y,1,7,color);
|
||||
DrawBar(196,y,1,6,color);
|
||||
DrawBar(195,y+10,1,5,color);
|
||||
DrawBar(196,y+11,1,4,color);
|
||||
DrawBar(x,y,1,7,color);
|
||||
DrawBar(x+1,y,1,6,color);
|
||||
DrawBar(x,y+10,1,5,color);
|
||||
DrawBar(x+1,y+11,1,4,color);
|
||||
GOTO RIGHT_PAINT;
|
||||
case 9: //inc
|
||||
DrawBar(208,y,1,3,color);
|
||||
@ -75,7 +75,7 @@ void IconFairing(dword filenum, x,y, color)
|
||||
PutPixel(209,y+5,color);
|
||||
return;
|
||||
case 10: //font
|
||||
DrawBar(196,y+1,1,13,color);
|
||||
DrawBar(x+1,y+1,1,13,color);
|
||||
DrawBar(197,y+1,1,11,color);
|
||||
DrawBar(198,y+1,1,10,color);
|
||||
DrawBar(199,y+1,1,9,color);
|
||||
@ -104,42 +104,42 @@ void IconFairing(dword filenum, x,y, color)
|
||||
PutPixel(210,y,color);
|
||||
return;
|
||||
case 16...17: //folder
|
||||
DrawBar(195,y,1,15,color);
|
||||
DrawBar(x,y,1,15,color);
|
||||
DrawBar(203,y,8,2,color);
|
||||
IF (filenum==17) PutPixel(206,y+1,0x1A7B17); //green arrow part
|
||||
DrawBar(196,y+13,15,2,color);
|
||||
PutPixel(196,y,color); //.òî÷êè
|
||||
DrawBar(x+1,y+13,15,2,color);
|
||||
PutPixel(x+1,y,color); //.òî÷êè
|
||||
PutPixel(202,y,color);
|
||||
PutPixel(210,y+2,color);
|
||||
PutPixel(196,y+12,color);
|
||||
PutPixel(x+1,y+12,color);
|
||||
PutPixel(210,y+12,color);
|
||||
return;
|
||||
case 18: //êàðòðèäæ
|
||||
DrawBar(195,y+11,1,2,color);
|
||||
DrawBar(x,y+11,1,2,color);
|
||||
DrawBar(210,y+11,1,2,color);
|
||||
DrawBar(195,y+13,16,1,color);
|
||||
DrawBar(x,y+13,16,1,color);
|
||||
return;
|
||||
case 24: //îáðàç
|
||||
DrawBar(195,y,6,1,color);
|
||||
DrawBar(195,y+1,4,1,color);
|
||||
DrawBar(195,y+2,3,1,color);
|
||||
DrawBar(195,y+3,2,2,color);
|
||||
DrawBar(x,y,6,1,color);
|
||||
DrawBar(x,y+1,4,1,color);
|
||||
DrawBar(x,y+2,3,1,color);
|
||||
DrawBar(x,y+3,2,2,color);
|
||||
|
||||
DrawBar(195,y+5,1,5,color);
|
||||
DrawBar(x,y+5,1,5,color);
|
||||
|
||||
DrawBar(195,y+10,2,2,color);
|
||||
DrawBar(195,y+12,3,1,color);
|
||||
DrawBar(195,y+13,4,1,color);
|
||||
DrawBar(195,y+14,6,1,color);
|
||||
DrawBar(x,y+10,2,2,color);
|
||||
DrawBar(x,y+12,3,1,color);
|
||||
DrawBar(x,y+13,4,1,color);
|
||||
DrawBar(x,y+14,6,1,color);
|
||||
|
||||
DrawBar(195+11,y,5,1,color);
|
||||
DrawBar(195+13,y+1,3,1,color);
|
||||
DrawBar(195+14,y+2,2,1,color);
|
||||
DrawBar(195+15,y+3,1,2,color);
|
||||
DrawBar(x+11,y,5,1,color);
|
||||
DrawBar(x+13,y+1,3,1,color);
|
||||
DrawBar(x+14,y+2,2,1,color);
|
||||
DrawBar(x+15,y+3,1,2,color);
|
||||
|
||||
DrawBar(195+15,y+10,1,2,color);
|
||||
DrawBar(195+14,y+12,2,1,color);
|
||||
DrawBar(195+13,y+13,3,1,color);
|
||||
DrawBar(195+11,y+14,5,1,color);
|
||||
DrawBar(x+15,y+10,1,2,color);
|
||||
DrawBar(x+14,y+12,2,1,color);
|
||||
DrawBar(x+13,y+13,3,1,color);
|
||||
DrawBar(x+11,y+14,5,1,color);
|
||||
}
|
||||
}
|
||||
|
@ -13,31 +13,20 @@ void GetIni(byte onload)
|
||||
char bukva[2];
|
||||
int errornum, tj;
|
||||
static dword buff, fsize;
|
||||
//÷èòàåì ôàéë
|
||||
if (onload==1)
|
||||
{
|
||||
free(buff);
|
||||
if (!GetFile(#buff, #fsize, abspath("Eolite.ini"))) notify("Eolite.ini not found. Defaults will be used.");
|
||||
}
|
||||
//ïàðñèì åãî
|
||||
for (tj=0; tj<fsize; tj++;)
|
||||
{
|
||||
bukva = ESBYTE[buff+tj];
|
||||
switch (bukva)
|
||||
{
|
||||
case ';':
|
||||
InfType=COMMENT;
|
||||
break;
|
||||
case '[':
|
||||
InfType=SECTION;
|
||||
section=NULL;
|
||||
break;
|
||||
case ']':
|
||||
InfType=PARAM;
|
||||
break;
|
||||
case '=':
|
||||
InfType=OPTION;
|
||||
break;
|
||||
case ';': InfType=COMMENT; break;
|
||||
case '[': InfType=SECTION; section=NULL; break;
|
||||
case ']': InfType=PARAM; break;
|
||||
case '=': InfType=OPTION; break;
|
||||
case 0x0a:
|
||||
case 0x0d:
|
||||
InfType=PARAM;
|
||||
@ -45,16 +34,10 @@ void GetIni(byte onload)
|
||||
IF (!strcmp(#parametr,"LineHeight")) files.line_h = atoi(#option);
|
||||
IF (!strcmp(#parametr,"ShowDeviceName")) show_dev_name=atoi(#option);
|
||||
|
||||
/*if (!strcmp(#section,"UserDirectories")) && (parametr) && (onload)
|
||||
{
|
||||
copystr(#parametr, #disk_list[disc_num].Item);
|
||||
disc_num++;
|
||||
}*/
|
||||
|
||||
IF (parametr) && (!strcmp(#file_name+strrchr(#file_name,'.'),#parametr)) && (!onload)
|
||||
{
|
||||
errornum=RunProgram(#option,#file_path);
|
||||
IF (errornum<0) Write_Error(errornum); //åñëè îøèáî÷êà âûøëà ïðè çàïóñêå
|
||||
IF (errornum<0) Write_Error(errornum);
|
||||
return;
|
||||
}
|
||||
parametr=option=NULL;
|
||||
@ -68,7 +51,8 @@ void GetIni(byte onload)
|
||||
if (file_path) && (!onload)
|
||||
{
|
||||
errornum=RunProgram(#file_path,NULL);
|
||||
if (errornum<0) Write_Error(errornum); //åñëè îøèáî÷êà âûøëà ïðè çàïóñêå
|
||||
if (errornum==-31) menu_action(201); else if (errornum<0) Write_Error(errornum);
|
||||
return;
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -1,17 +1,75 @@
|
||||
//Leency 2013
|
||||
|
||||
llist app_list;
|
||||
struct app_list_string { char item[1024]; char icon; };
|
||||
app_list_string app_paths[100];
|
||||
|
||||
int GetListOfPrograms()
|
||||
{
|
||||
byte section[32], parametr[32], option[256], InfType=0;
|
||||
char bukva[2];
|
||||
int tj, ti;
|
||||
static dword buff, fsize;
|
||||
|
||||
debug("GetListOfPrograms()");
|
||||
|
||||
free(buff);
|
||||
if (!GetFile(#buff, #fsize, abspath("Eolite.ini")))
|
||||
{
|
||||
notify("Eolite.ini not found. Don't know any programm.");
|
||||
return -1;
|
||||
}
|
||||
|
||||
for (tj=0; tj<fsize; tj++;)
|
||||
{
|
||||
bukva = ESBYTE[buff+tj];
|
||||
switch (bukva)
|
||||
{
|
||||
case ';': InfType=COMMENT; break;
|
||||
case '[': InfType=SECTION; section=NULL; break;
|
||||
case ']': InfType=PARAM; break;
|
||||
case '=': InfType=OPTION; break;
|
||||
case 0x0a:
|
||||
case 0x0d:
|
||||
InfType=PARAM;
|
||||
if (!strcmp(#section,"Associations")) && (option)
|
||||
{
|
||||
for (ti=0; ti<app_list.count; ti++) //do not add duplications
|
||||
{
|
||||
if (strcmp(#app_paths[ti].item, #option)==0) GOTO _OUT;
|
||||
}
|
||||
// for (i=0; ext[i]!=0; i+=2;) if (!strcmp(extension, ext[i])) { icon_n = ext[i+1]; break; }
|
||||
strcpy(#app_paths[app_list.count].item, #option);
|
||||
app_list.count++;
|
||||
}
|
||||
_OUT:
|
||||
parametr=option=NULL;
|
||||
break;
|
||||
default:
|
||||
IF (InfType==SECTION) chrcat(#section, bukva);
|
||||
IF (InfType==PARAM) chrcat(#parametr, bukva);
|
||||
IF (InfType==OPTION) chrcat(#option, bukva);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
|
||||
void OpenWith()
|
||||
{
|
||||
?define OPEN_LIST_W 300
|
||||
?define OPEN_LIST_H 300
|
||||
#define WIN_W 290
|
||||
#define OPEN_LIST_VISIBLE_N 12
|
||||
#define OPEN_LIST_LINE_H 20
|
||||
#define PANEL_H 40
|
||||
#define PADDING 8;
|
||||
int WIN_H;
|
||||
mouse mm;
|
||||
word key, slot, index, start_y;
|
||||
llist app_list;
|
||||
word key, slot;
|
||||
proc_info MenuForm;
|
||||
int texty, newi;
|
||||
|
||||
app_list.ClearList();
|
||||
app_list.SetSizes(files.w-OPEN_LIST_W/2+files.x+Form.left+4,files.h-OPEN_LIST_H/2+files.y+Form.top+GetSkinHeight(),OPEN_LIST_W,OPEN_LIST_H,150,18);
|
||||
app_list.SetSizes(PADDING,PANEL_H+1,WIN_W-PADDING-PADDING,OPEN_LIST_VISIBLE_N*OPEN_LIST_LINE_H,150,OPEN_LIST_LINE_H);
|
||||
if (!app_list.count) if (GetListOfPrograms()==-1) return;
|
||||
SetEventMask(100111b);
|
||||
goto _APP_LIST_DRAW;
|
||||
|
||||
@ -21,7 +79,22 @@ void OpenWith()
|
||||
slot = GetProcessSlot(MenuForm.ID);
|
||||
if (slot != GetActiveProcess()) ExitProcess();
|
||||
mm.get();
|
||||
if (mm.lkm) ExitProcess();
|
||||
//if (mm.lkm) ExitProcess();
|
||||
if (mm.vert)
|
||||
{
|
||||
app_list.MouseScroll(mm.vert);
|
||||
DrawAppList();
|
||||
}
|
||||
if (mm.x>app_list.x) && (mm.x<app_list.x+app_list.w) && (mm.y>app_list.y) && (mm.y<app_list.y+app_list.h)
|
||||
{
|
||||
app_list.current_temp = mm.y - app_list.y / app_list.line_h + app_list.first;
|
||||
if (app_list.current_temp != app_list.current)
|
||||
{
|
||||
app_list.current = app_list.current_temp;
|
||||
DrawAppList();
|
||||
}
|
||||
}
|
||||
|
||||
break;
|
||||
|
||||
case evKey:
|
||||
@ -29,15 +102,36 @@ void OpenWith()
|
||||
if (key==27) ExitProcess();
|
||||
break;
|
||||
|
||||
case evReDraw: _APP_LIST_DRAW:
|
||||
DefineAndDrawWindow(app_list.x, app_list.y,app_list.w+3,app_list.h+6,0x01, 0, 0, 0x01fffFFF);
|
||||
GetProcessInfo(#MenuForm, SelfInfo);
|
||||
DrawPopup(0,0,app_list.w,app_list.h,0, col_work,col_border);
|
||||
WriteText(10,10, 0x80, 0, "Select application to open file"w);
|
||||
WriteText(10,23, 0x80, 0, #file_name);
|
||||
WriteTextB(app_list.w/2-25,app_list.h/2, 0x90, 0, "S O O N");
|
||||
|
||||
_APP_LIST_ITEMS_DRAW:
|
||||
case evButton:
|
||||
RunProgram(#app_paths[GetButtonID()-10].item, #file_path);
|
||||
ExitProcess();
|
||||
break;
|
||||
|
||||
case evReDraw: _APP_LIST_DRAW:
|
||||
WIN_H = app_list.h+PANEL_H+PADDING+2;
|
||||
DefineAndDrawWindow(files.w-WIN_W/2+files.x+Form.left+6,
|
||||
files.h-WIN_H/2+files.y+Form.top+GetSkinHeight(),WIN_W+1,WIN_H,0x01, 0, 0, 0x01fffFFF);
|
||||
GetProcessInfo(#MenuForm, SelfInfo);
|
||||
DrawPopup(0,0,MenuForm.width-2,MenuForm.height-2,0, col_work, col_border);
|
||||
DrawRectangle(app_list.x-1, app_list.y-2, app_list.w+1, app_list.h+2, col_border);
|
||||
|
||||
Put_icon(#file_name+_strrchr(#file_name,'.'), 10, 13, col_work);
|
||||
WriteText(35,10, 0x80, 0, T_SELECT_APP_TO_OPEN_WITH);
|
||||
WriteText(35,23, 0x80, 0, #file_name);
|
||||
|
||||
DrawAppList();
|
||||
}
|
||||
}
|
||||
|
||||
void DrawAppList()
|
||||
{
|
||||
dword index, col_bg;
|
||||
for (index = 0; (index<app_list.visible) && (index+app_list.first<app_list.count); index++)
|
||||
{
|
||||
DefineButton(app_list.x, index*app_list.line_h+app_list.y, app_list.w, app_list.line_h-1, index+app_list.first+10+BT_HIDE+BT_NOFRAME, 0);
|
||||
if (index+app_list.first==app_list.current) col_bg = col_selec; else col_bg = 0xFFFfff;
|
||||
DrawBar(app_list.x, index*app_list.line_h+app_list.y, app_list.w, app_list.line_h, col_bg);
|
||||
Put_icon("kex", app_list.x+4, index*app_list.line_h+app_list.y+2, col_bg);
|
||||
WriteText(app_list.x+23, index*app_list.line_h+app_list.y+7, 0x80, 0, #app_paths[index+app_list.first].item);
|
||||
}
|
||||
}
|
@ -2,9 +2,9 @@
|
||||
|
||||
struct llist
|
||||
{
|
||||
int x, y, w, h, min_h;
|
||||
int line_h;
|
||||
int x, y, w, h, min_h, line_h;
|
||||
int count, visible, first, current;
|
||||
int current_temp;
|
||||
void ClearList();
|
||||
void SetSizes(int xx, yy, ww, hh, min_hh, line_hh);
|
||||
int MouseScroll(dword scroll_state);
|
||||
|
Loading…
Reference in New Issue
Block a user