Subversion Repositories Kolibri OS

Compare Revisions

Regard whitespace Rev 7165 → Rev 7166

/programs/cmm/taskbar2/appicons.ini
0,0 → 1,123
[icons]
tmpdisk=36
vmode=7
netcfg=33
setup=5
calendar=52
appearance.kex=62
palitra=61
skincfg=80
@volume=64
panels_cfg=63
mousecfg=54
drvinst.kex=71
board=19
netstat=33
gmon=57
cpu=60
clipview=83
test=37
cpuid=37
disptest=7
fspeed=45
hdd_info=50
kbd=37
mgb=38
pcidev=38
tinypad=9
eolite=1
shell=2
kfar=16
rdsave=17
fb2read=44
animage=15
kpack=10
snake=32
mine=14
seawar=66
tetris=47
pong=12
15=34
docpack=8
board=19
hexedit=22
debug=39
pipes=26
sudoku=25
gomoku=24
xonix=21
checkers=20
kosilka=23
flood-it=59
fasm=10
clicks=18
webview=31
syspanel=6
app+=27
diff=84
textreader=85
calc=4
sdlquake=56
doom=43
doom=43
lasertank=72
lrl=41
kosilka=23
bomber=14
tanks=67
sw=66
almaz=81
klavisha=69
clicks=18
checkers=20
sudoku=25
mine=14
flood-it=59
knight=82
15=34
gomoku=24
msquare=25
lines=59
2048=53
fara=42
tetris=47
pipes=26
snake=32
xonix=21
freecell=68
pong=12
pong3=12
arcanii=12
tinypad=9
webview=31
t_edit=58
txtread=85
zsea=46
kiv=70
font_viewer=76
animage=15
pixie=65
fplay=40
ac97snd=64
midamp=74
rtfread=55
graph=28
heed=22
shell=2
fasm=10
kpack=10
view3ds=75
fb2read=44
cobj=2
eolite=1
@menu=49
 
[attached]
/sys/@menu=?
/sys/File managers/eolite=?
/sys/tinypad=?
/sys/media/pixie/pixie=?
/sys/network/webview=?
 
[taskbar]
attachement=0
/programs/cmm/taskbar2/compile.bat
0,0 → 1,5
C-- taskbar2.c
@del @taskbar
@rename taskbar2.com @taskbar
@del warning.txt
@pause
/programs/cmm/taskbar2/taskbar2.c
0,0 → 1,260
#define MEMSIZE 4096*20
 
//===================================================//
// //
// LIB //
// //
//===================================================//
 
#include "../lib/gui.h"
#include "../lib/list_box.h"
#include "../lib/io.h"
#include "../lib/collection.h"
#include "../lib/patterns/restart_process.h"
 
#include "../lib/mem.h"
 
#include "../lib/obj/libio.h"
#include "../lib/obj/libimg.h"
#include "../lib/obj/libini.h"
 
#include "../lib/patterns/libimg_load_skin.h"
 
 
//===================================================//
// //
// DATA //
// //
//===================================================//
 
int current_process_id = 0;
int proc_list[256];
collection attached;
 
llist list;
 
proc_info Form;
proc_info Process;
 
enum {
ATTACHEMENT_BOTTOM,
ATTACHEMENT_LEFT,
ATTACHEMENT_TOP,
ATTACHEMENT_RIGHT
};
int attachement = ATTACHEMENT_BOTTOM;
 
#define CELLW 40
#define CELLH 40
 
dword COLOR_BG = 0x3B3B3B;
dword COLOR_MENU_BG = 0x323232;
dword COLOR_OPENED = 0x999999;
dword COLOR_ACTIVE = 0x0099FF;
dword COLOR_TEXT = 0xFFFfff;
 
 
//===================================================//
// //
// CODE //
// //
//===================================================//
 
void main()
{
byte btn;
load_dll(libio, #libio_init,1);
load_dll(libimg, #libimg_init,1);
load_dll(libini, #lib_init,1);
 
Libimg_LoadImage(#skin, "/sys/icons32.png");
Libimg_FillTransparent(skin.image, skin.w, skin.h, COLOR_BG);
 
ini_get_int stdcall ("/sys/appicons.ini", "taskbar", "attachement", ATTACHEMENT_BOTTOM);
attachement = EAX;
 
SetAttachement();
GetAttachedItems();
GetProcessInfo(#Form, SelfInfo);
SetWindowLayerBehaviour(-1, ZPOS_DESKTOP);
SetEventMask(EVM_REDRAW+EVM_KEY+EVM_BUTTON+EVM_MOUSE+EVM_MOUSE_FILTER);
loop()
{
WaitEventTimeout(50);
switch(EAX & 0xFF)
{
case evMouse:
if (!CheckActiveProcess(Form.ID)) break;
mouse.get();
if (mouse.down) {}
//if (list.ProcessMouse()) DrawProcessList();
break;
case evKey:
GetKeys();
if (key_scancode == SCAN_CODE_ESC) {
RunProgram(#program_path, NULL);
ExitProcess();
}
break;
case evButton:
btn = GetButtonID();
btn -= 100;
if (btn < attached.count) RunProgram(attached.get(btn), NULL);
else EventSetActiveProcess(btn);
break;
case evReDraw:
DefineUnDragableWindow(NULL, NULL, NULL, NULL);
list.SetSizes(0, 0, Form.width+1, Form.height+2, CELLH);
default:
DrawProcessList();
}
}
}
 
 
void GetProcessList()
{
int i, j;
list.count=0;
 
for (i=0; i<attached.count; i++)
{
proc_list[list.count] = 0;
list.count++;
}
 
for (i=0; i<MAX_PROCESS_COUNT; i++)
{
GetProcessInfo(#Process, i);
if (Process.name)
{
for (j=0; j<11; j++) if (Process.name[j]!=' ') {
//do not show system process
if (Process.name[0]=='@') break;
if (!strcmp(#Process.name, "IDLE")) break;
if (!strcmp(#Process.name, "OS")) break;
if (!Process.width) && (!Process.height) break;
proc_list[list.count] = i;
list.count++;
break;
}
}
}
}
 
void DrawProcessList()
{
#define ACTIVE_SIZE 3
#define CELL_MARGIN_X 10
#define CELL_MARGIN_Y 4
#define CELL_PADDING 4
int i;
int posy=list.y;
int posx=list.x;
int icon_n;
dword status_color;
 
GetProcessList();
 
for (i=0; i<list.count; i++)
{
if (proc_list[i+list.first]==0) {
status_color = COLOR_BG;
ini_get_int stdcall (
"/sys/appicons.ini",
"icons",
attached.get(i+list.first)+strrchr(attached.get(i+list.first),'/'),
0
);
icon_n = EAX;
}
else {
GetProcessInfo(#Process, proc_list[i+list.first]);
strlwr(#Process.name);
ini_get_int stdcall ("/sys/appicons.ini", "icons", #Process.name, 0);
icon_n = EAX;
if (CheckActiveProcess(Process.ID)) && (Process.status_window!=2) {
current_process_id = Process.ID;
status_color = COLOR_ACTIVE;
}
else {
status_color = COLOR_OPENED;
}
}
DrawWideRectangle(posx, posy, 40, 40, CELL_PADDING, COLOR_BG);
DefineButton(posx, posy, CELLW-1, CELLH, 100+i+BT_HIDE+BT_NOFRAME, NULL);
img_draw stdcall(skin.image, posx+CELL_PADDING, posy+CELL_PADDING, 32, 32, 0, 32*icon_n);
 
if (ATTACHEMENT_BOTTOM==attachement) DrawBar(posx, posy+CELLH-ACTIVE_SIZE, CELLW, ACTIVE_SIZE, status_color);
if (ATTACHEMENT_LEFT ==attachement) DrawBar(posx, posy, ACTIVE_SIZE, CELLH, status_color);
if (ATTACHEMENT_TOP ==attachement) DrawBar(posx, posy, CELLW, ACTIVE_SIZE, status_color);
if (ATTACHEMENT_RIGHT ==attachement) DrawBar(posx+CELLW-ACTIVE_SIZE, posy, ACTIVE_SIZE, CELLH, status_color);
 
if (ATTACHEMENT_TOP==attachement) || (ATTACHEMENT_BOTTOM==attachement) {
posx += CELLW;
DrawBar(posx, posy, CELL_MARGIN_X, list.h, COLOR_BG);
posx += CELL_MARGIN_X;
}
if (ATTACHEMENT_LEFT==attachement) || (ATTACHEMENT_RIGHT==attachement) {
posy += CELLH;
DrawBar(posx, posy, list.w, CELL_MARGIN_Y, COLOR_BG);
posy += CELL_MARGIN_Y;
}
}
DrawBar(posx, posy, list.w, list.h, COLOR_BG);
}
 
void SetAttachement()
{
if (attachement==ATTACHEMENT_LEFT) {
DefineUnDragableWindow(0, 0, CELLW-1, screen.height);
SetClientScreenArea(CELLW, screen.width-CELLW, 0, screen.height);
}
if (attachement==ATTACHEMENT_RIGHT) {
DefineUnDragableWindow(screen.width - CELLW, 0, CELLW, screen.height);
SetClientScreenArea(0, screen.width-CELLW, 0, screen.height);
}
if (attachement==ATTACHEMENT_TOP) {
DefineUnDragableWindow(0, 0, screen.width, CELLH-1);
SetClientScreenArea(0, 0, CELLH, screen.height);
}
if (attachement==ATTACHEMENT_BOTTOM) {
DefineUnDragableWindow(0, screen.height, screen.width, CELLH);
SetClientScreenArea(0, 0, 0, screen.height - CELLH);
}
}
 
byte draw_icons_from_section(dword key_value, key_name, sec_name, f_name)
{
attached.add(key_name);
return true;
}
 
void GetAttachedItems()
{
attached.drop();
ini_enum_keys stdcall ("/sys/appicons.ini", "attached", #draw_icons_from_section);
}
//===================================================//
// //
// EVENTS //
// //
//===================================================//
 
//If we clicked on current active process then minimize it
//else set active
void EventSetActiveProcess(dword i)
{
GetProcessInfo(#Process, proc_list[i+list.first]);
Process.num_slot = GetProcessSlot(Process.ID);
if (Process.ID) ActivateWindow(Process.num_slot);
if (current_process_id == Process.ID) && (Process.status_window!=2) {
MinimizeWindow();
//TODO: make another window active
}
DrawProcessList();
}
 
 
stop: