Plugin:Clist modern/en/Skin development guide

From Miranda NG
< Modern contact list‎ | Modern contact list
Revision as of 19:00, 18 March 2021 by Dart Raiden (talk | contribs) (→‎Buttons description)
(diff) ← Older revision | Latest revision (diff) | Newer revision → (diff)
Jump to navigation Jump to search

Common definitions

Skin engine is based on next definitions and concepts:

  • Object — component of skin. All skin objects are created during module loading. Objects describe what and how is need to paint as a reply to the request.
  • Glyph — some image. Now time is supported BMP, JPG, and PNG (with transparency). The size of a glyph is defined by image size. Glyph picture loads to memory only at the first attempt to paint it and is kept in memory till module unloading or another skin loading.
  • Rule — a rule which object corresponds to request.
  • Request — request from a module (this or other) to paint one of the corresponding objects at a specific place and size.

Work algorithm

Skin engine sequence is next:

  1. Module generates request string as soon as it needs to paint something and give it to skin engine.
  2. Skin engine tries to find the first rule that corresponds to the given request and select an object that is pointed by this rule.
  3. If the selected object is Solid type: the requested area is painted by the corresponding color with specified alpha.
  4. If the selected object is an Image: such image is transformed to requested region size and paints.

Rules and requests

A rule consists of:

  1. number;
  2. name of an object to point;
  3. couple of parameters delimited by ",".

Each parameter is a union of:

  • parameter’s name (first parameter has name "Module" and that always skipped);
  • condition ("=" means "is equal", "^" means "is not equal");
  • parameter value.

A request has the same part as the rule except for number.

The rule corresponds to the request if:

  1. Request contains all the rule's parameters (also request can contain the parameter that is not mentioned in rule).
  2. All values of common parameters are the same if the rule's parameters condition is "equal" and not the same if the rule's condition is "not equal".

Rule parameter values can contain wildcards "*" and "?". Rule parameter names and values can contain up to 24 chars. Values can not contain "," (comma) all commas are replaced by "." (dots). Names and values are case-sensitive.

Glyph transformation

Example: We need to paint glyph with sizes 70х70 at the rectangle size 100х100.

Define for margins: Left, Top, Right, Bottom. These margins divide glyph at 9 areas:

  • 4 corners;
  • 4 edges;
  • center.

Glyph transformation example (before transformation).png

Transformation rules:

  1. Corner areas of the glyph are painted as-it-is at the destination corners without any resizing.
  2. Edge parts transform in a direction along their nearest edges and keeping perpendicular to edge size as is.
  3. Center area transforms in both directions.

After transformation (StretchBoth mode)

Glyph transformation example (after transformation).png

There are 4 transformation modes:

  • StretchBoth — stretch at both directions;
  • TileHorz — tile horizontal, but stretch vertical;
  • TileVert — tile vertical but stretch horizontal;
  • TileBoth — tile in both directions.

Skin definition

Skin is the union of a skin description file (*.msf) and folder with graphic resources. The folder name should be the same as the name of the descriptor file (without extension). All files inside the descriptor should be referenced without a path.

Descriptor file is the common ini file with changed extension. All keys imports to database during skin loading. File formats is next:

[db_section_name]
; comments
  Key=#Value
  Key2=#Value2

"#" is a placeholder for one of the key type data marks. They can be one of following

  • "b" — byte;
  • "w" — word;
  • "d" — dword;
  • "s" — string.

All modern skin objects and rules are kept in [ModernSkin] section with string type value. So in this section all keys have "s" after "=" e.g.:

$hotopengroup=sGlyph,Image,hotopengroup.png,StretchBoth,2,2,2,2,250
@0=s$window:Main,ID=Background

Spaces inside are not allowed (only for string parameters like …,Name=First Name,…).

Objects description

So skin consists of several parts. One of them describes objects.

Objects are described in next way:

$object_name=sGlyph,object_type,parameters,…

object_name — object name used to point from rules.

object_type — one of types: Image or Solid.

parameters,… — list of parameters, the order of which is determined depending on the type of object:


for solid type:

$object_name =sGlyph,Solid,RedValue,GreenValue,BlueValue,AlphaValue

RedValue, GreenValue, BlueValue, AlphaValue — red, green, blue, and alpha transparency values.


for image:

$object_name =sGlyph,Image,File_Name,Fit_Mode,Left,Top,Right,Bottom,AlphaValue

File_Name — glyph image file name.

Fit_Mode — transform mode: StretchBoth, TileHorz, TileVert, TileBoth.

Left, Top, Right, Bottom — transform margins.


Examples:

$window=sGlyph,Image,back.bmp,TileBoth,1,1,1,1,150
$closed_miranda_group=sGlyph,Solid,0,0,255,200

Rule description

Next part describes rules. Rules are described in next way:

@rule_number=s$object_name:Module_parameter_value,param_name=value,parameter_name^value,…

rule_number — number. Numbers should starts from zero and be in sequence without skipping.

Example:

@0=s$window:Main,ID=Background
@1=s$closed_miranda_group:CL,ID=Row,Type=Group,Open^True,Name=Mir*a*

For this example object $window (image back.bmp) will be painted if the request contains the first parameter value "Main" and parameter "ID" value will be "Background".

Object $closed_miranda_group (fill it with blue and alpha 200) will be painted if request will contain first parameter "CL", and "ID" equal to "Row", "Type" equal "Group", parameter "Open" NOT equal to "True" and "Name" like "Mir*a*" (e.g Miranda-IM).

Buttons description

Next part describes buttons. Buttons can be placed in any area of the window (but prefer on margins, otherwise, they will be covered by frames.

Buttons can be to types Push and Switch.

Push button description is:

#name=sPush,ServiceNameToCall,fromLeft,fromTop,fromRight,fromBottom,Flags,MinWindowWidth,MinWindowHeigh,HintText

Switch button description is:

#name=sSwitch,ServiceNameToCall,StateDBKey,ValueTypeandDefault,fromLeft,fromTop,fromRight,fromBottom,Flags,MinWindowWidth,MinWindowHeigh,HintText

ServiceNameToCall — the name of service to be called on key pressure.

StateDBKey — the name of the key to be quoted in request to draw.

ValueTypeandDefault — type of parameter (first char (b, w, d or s)) and default value.

fromLeft,fromTop — position of left-top corner relativity to specified in flags.

fromRight,fromBottom — position of right-bottom corner relative to specified in flags.

Flags — relativity and behavior flags is a sequence of chars in next order: "ABCDE": A — relativity of left edge, B — top edge, C — right edge, D — from the bottom (value is "R" — from the right (for A and C), "B" — from the bottom (for B and D), or "-" from left (A&C) and top (B&D)), E — can be "I" immediately call service as user press button, or "-" wait till he releases it.

MinWindowWidth, MinWindowHeigh — minimal window size to show button (otherwise hide it).

HintText — tooltip text to show ("," (comma) is not allowed).


Then module is need to paint button it form request like (button was desribed like: #statusmenu=sPush,CList/ShowStatusMenu,24,4,40,20,-----,100,0,Show Status Menu)

MButton,ID=statusmenu,Hovered=1,Down=0

If the switch button is specified it add value: Value=0 (database key value instead of ‘0’)

Modern paint request sequence

  1. Paint backgrounds via request
    Main,ID=Background
  2. Paint StatusBar, Frame captions backgrounds via
    Main,ID=StatusBar
    Main,ID=FrameCaption
  3. Paint buttons via request
    MButton,ID=buttonname,Hovered=x,Down=y,Value=z
    MButton,ID=buttonname,Hovered=x,Down=y
  4. Paint contact list in next sequence:
    • a. Paint contact list background
      CL,ID=Background
    • b. Paint row background (request forms according to row content)
      CL,ID=Row,Type=Contact,Selected=True,…
    • c. Paint common selection if selected
      CL,ID=Selection
    • d. Paint common hottracking if hot
      CL,ID=HotTracking
    • e. Draw row content (avatar, text, icons)
    • f. Paint row overlay (request forms according to row content)
      CL,ID=Ovl,Type=Contact,Selected=True,…
    • Repeats b.—f. for each row
  5. Paint scroll bar in next
    • Paint scroll bar background
      Main,ID=ScrollBar,Part=Back
    • Paint scroll bar items
      Main,ID=ScrollBar,Part= UpLineButton
      Main,ID=ScrollBar,Part= DownLineButton
      Main,ID=ScrollBar,Part= Thumb

Table of available params and values

Param Value Description
Module Main Main window parts
ID Background

StatusBar

FrameCaption

Window back

Status bar back

Frame caption back

ID ScrollBar Scrollbar
Part Back

UpLineButton

DownLineButton

Thumb

Scroll bar parts
Module CL Contact list objects
ID Row

Ovl

For each row back is generated with param ID=Row, for overlay with ID=Ovl
Type Group

Contact

MetaContact

SubContact

Divider

Info

Type of row: group name, contact, metacontact, etc.
GroupPos


SubPos

First

First-Single

Middle

Last

Position of contact in parent group or position of subcontact in metacontact and its parent meta in group
Open

Selected

Hot

Odd

True

False

Collapse, selection, hot and odd values of the row
Index

Indent

Number Number of the line in the list

Indent of row (0 — in the root, 1 — in first leveled group, etc.)

Status OFFLINE

ONLINE

AWAY

DND

NA

OCCUPIED

FREECHAT

INVISIBLE

IDLE

Status of contact
Protocol

Name

GroupName

Text Names of protocol, nick (row text), parent group (parent row text)

(commas replace to dots)

ID GreyAlternate

Selection

HotTracking

Common objects for Selection, Hot and Odd
Module MButton Buttons
ID Text Button name (without "#")
Down

Hovered

0

1

Pressure and hot states
Value Text Value of associated with a triggered button database key

Example of dump of Crystal skin at real list

Time stamp Request Painted object
120817359: Main,ID=FrameCaption
120817375: Main,ID=StatusBar
120817375: CL,ID=Background
120817375: CL,ID=Row,Type=Group,Open=True,GroupPos=First,Selected=False,Hot=False,Odd=False,Indent=0,Index=0,Name=Friends $normalopengroup
120817375: CL,ID=Ovl,Type=Group,Open=True,GroupPos=First,Selected=False,Hot=False,Odd=False,Indent=0,Index=0,Name=Friends
120817375: CL,ID=Row,Type=Contact,Protocol=ICQ,Status=ONLINE,HasAvatar=True,GroupPos=First,Selected=False,Hot=False,Odd=True,Indent=1,Index=1,Name=Олег,Group=Friends $normalcontact
120817390: CL,ID=Ovl,Type=Contact,Protocol=ICQ,Status=ONLINE,HasAvatar=True,GroupPos=First,Selected=False,Hot=False,Odd=True,Indent=1,Index=1,Name=Олег,Group=Friends
120817390: CL,ID=Row,Type=Contact,Protocol=ICQ,Status=NA,HasAvatar=True,GroupPos=Last,Selected=False,Hot=False,Odd=False,Indent=1,Index=2,Name=Юля,Group=Friends $normalcontact
120817390: CL,ID=Ovl,Type=Contact,Protocol=ICQ,Status=NA,HasAvatar=True,GroupPos=Last,Selected=False,Hot=False,Odd=False,Indent=1,Index=2,Name=Юля,Group=Friends
120817406: CL,ID=Row,Type=Group,Open=True,GroupPos=Mid,Selected=False,Hot=False,Odd=True,Indent=0,Index=3,Name=MIRANDA $normalopengroup
120817406: CL,ID=Ovl,Type=Group,Open=True,GroupPos=Mid,Selected=False,Hot=False,Odd=True,Indent=0,Index=3,Name=MIRANDA
120817406: CL,ID=Row,Type=Group,Open=False,GroupPos=First,Selected=False,Hot=False,Odd=False,Indent=1,Index=4,Name=Bugs reporters,Group=Friends $normalclosedgroup
120817406: CL,ID=Ovl,Type=Group,Open=False,GroupPos=First,Selected=False,Hot=False,Odd=False,Indent=1,Index=4,Name=Bugs reporters,Group=Friends
120817406: CL,ID=Row,Type=Group,Open=True,GroupPos=Mid,Selected=False,Hot=False,Odd=True,Indent=1,Index=5,Name=Developers,Group=Friends $normalopengroup
120817406: CL,ID=Ovl,Type=Group,Open=True,GroupPos=Mid,Selected=False,Hot=False,Odd=True,Indent=1,Index=5,Name=Developers,Group=Friends
120817406: CL,ID=Row,Type=Contact,Protocol=ICQ,Status=NA,HasAvatar=True,GroupPos=First,Selected=False,Hot=False,Odd=False,Indent=2,Index=6,Name=Joe,Group=Bugs reporters $normalcontact
120817421: CL,ID=Ovl,Type=Contact,Protocol=ICQ,Status=NA,HasAvatar=True,GroupPos=First,Selected=False,Hot=False,Odd=False,Indent=2,Index=6,Name=Joe,Group=Bugs reporters
120817421: CL,ID=Row,Type=Contact,Protocol=ICQ,Status=ONLINE,HasAvatar=True,GroupPos=Last,Selected=False,Hot=False,Odd=True,Indent=2,Index=10,Name=Bio,Group=Bugs reporters $normalcontact
120817421: CL,ID=Ovl,Type=Contact,Protocol=ICQ,Status=ONLINE,HasAvatar=True,GroupPos=Last,Selected=False,Hot=False,Odd=True,Indent=2,Index=10,Name=Bio,Group=Bugs reporters
120817421: CL,ID=Row,Type=Contact,Protocol=ICQ,Status=ONLINE,HasAvatar=False,GroupPos=Mid,Selected=False,Hot=False,Odd=False,Indent=1,Index=11,Name=LexSys,Group=Friends $normalcontact
120817421: CL,ID=Ovl,Type=Contact,Protocol=ICQ,Status=ONLINE,HasAvatar=False,GroupPos=Mid,Selected=False,Hot=False,Odd=False,Indent=1,Index=11,Name=LexSys,Group=Friends
120817437: CL,ID=Row,Type=Contact,Protocol=ICQ,Status=ONLINE,HasAvatar=True,GroupPos=Last,Selected=False,Hot=False,Odd=True,Indent=1,Index=12,Name=NullBie,Group=Friends $normalcontact
120817437: CL,ID=Ovl,Type=Contact,Protocol=ICQ,Status=ONLINE,HasAvatar=True,GroupPos=Last,Selected=False,Hot=False,Odd=True,Indent=1,Index=12,Name=NullBie,Group=Friends
120817437: CL,ID=Row,Type=Group,Open=True,GroupPos=Last,Selected=False,Hot=False,Odd=False,Indent=0,Index=13,Name=>Developers $normalopengroup
120817437: CL,ID=Ovl,Type=Group,Open=True,GroupPos=Last,Selected=False,Hot=False,Odd=False,Indent=0,Index=13,Name=>Developers
120817437: CL,ID=Row,Type=Contact,Protocol=ICQ,Status=ONLINE,HasAvatar=True,GroupPos=First,Selected=False,Hot=False,Odd=True,Indent=1,Index=14,Name=Артем,Group=Friends $normalcontact
120817437: CL,ID=Ovl,Type=Contact,Protocol=ICQ,Status=ONLINE,HasAvatar=True,GroupPos=First,Selected=False,Hot=False,Odd=True,Indent=1,Index=14,Name=Артем,Group=Friends
120817437: CL,ID=Row,Type=Contact,Protocol=ICQ,Status=ONLINE,HasAvatar=True,GroupPos=Last,Selected=False,Hot=False,Odd=False,Indent=1,Index=15,Name=Angi,Group=Friends $normalcontact
120817453: CL,ID=Ovl,Type=Contact,Protocol=ICQ,Status=ONLINE,HasAvatar=True,GroupPos=Last,Selected=False,Hot=False,Odd=False,Indent=1,Index=15,Name=Angi,Group=Friends
120817453: MButton,ID=close,Down=0,Focused=0,Hovered=0 $BTNclosenorm
120817453: MButton,ID=minimize,Down=0,Focused=0,Hovered=0 $BTNminnorm
120817453: MButton,ID=hideoffline,Down=0,Focused=0,Hovered=0,Value=1 $BTNstatusDn
120820296: Main,ID=FrameCaption
120820296: Main,ID=Background $window
120820343: Main,ID=FrameCaption
120820343: MButton,ID=close,Down=0,Focused=0,Hovered=0 $BTNclosenorm
120820343: MButton,ID=minimize,Down=0,Focused=0,Hovered=0 $BTNminnorm
120820343: MButton,ID=hideoffline,Down=0,Focused=0,Hovered=0,Value=1 $BTNstatusDn
120820359: Main,ID=Background $window
120820390: Main,ID=FrameCaption
120820406: Main,ID=StatusBar
120820406: CL,ID=Background
120820406: CL,ID=Row,Type=Group,Open=True,GroupPos=First,Selected=False,Hot=False,Odd=False,Indent=0,Index=0,Name=Friends $normalopengroup
120820406: CL,ID=Ovl,Type=Group,Open=True,GroupPos=First,Selected=False,Hot=False,Odd=False,Indent=0,Index=0,Name=Friends
120820406: CL,ID=Row,Type=Contact,Protocol=ICQ,Status=ONLINE,HasAvatar=True,GroupPos=First,Selected=False,Hot=False,Odd=True,Indent=1,Index=1,Name=Олег,Group=Friends $normalcontact
120820421: CL,ID=Ovl,Type=Contact,Protocol=ICQ,Status=ONLINE,HasAvatar=True,GroupPos=First,Selected=False,Hot=False,Odd=True,Indent=1,Index=1,Name=Олег,Group=Friends
120820421: CL,ID=Row,Type=Contact,Protocol=ICQ,Status=NA,HasAvatar=True,GroupPos=Last,Selected=False,Hot=False,Odd=False,Indent=1,Index=2,Name=Юля,Group=Friends $normalcontact
120820421: CL,ID=Ovl,Type=Contact,Protocol=ICQ,Status=NA,HasAvatar=True,GroupPos=Last,Selected=False,Hot=False,Odd=False,Indent=1,Index=2,Name=Юля,Group=Friends
120820421: CL,ID=Row,Type=Group,Open=True,GroupPos=Mid,Selected=False,Hot=False,Odd=True,Indent=0,Index=3,Name=MIRANDA $normalopengroup
120820421: CL,ID=Ovl,Type=Group,Open=True,GroupPos=Mid,Selected=False,Hot=False,Odd=True,Indent=0,Index=3,Name=MIRANDA
120820421: CL,ID=Row,Type=Group,Open=False,GroupPos=First,Selected=False,Hot=False,Odd=False,Indent=1,Index=4,Name=Bugs reporters,Group=Friends $normalclosedgroup
120820437: CL,ID=Ovl,Type=Group,Open=False,GroupPos=First,Selected=False,Hot=False,Odd=False,Indent=1,Index=4,Name=Bugs reporters,Group=Friends
120820437: CL,ID=Row,Type=Group,Open=True,GroupPos=Mid,Selected=False,Hot=False,Odd=True,Indent=1,Index=5,Name=Developers,Group=Friends $normalopengroup
120820437: CL,ID=Ovl,Type=Group,Open=True,GroupPos=Mid,Selected=False,Hot=False,Odd=True,Indent=1,Index=5,Name=Developers,Group=Friends
120820437: CL,ID=Row,Type=Contact,Protocol=ICQ,Status=NA,HasAvatar=True,GroupPos=First,Selected=False,Hot=False,Odd=False,Indent=2,Index=6,Name=Joe,Group=Bugs reporters $normalcontact
120820437: CL,ID=Ovl,Type=Contact,Protocol=ICQ,Status=NA,HasAvatar=True,GroupPos=First,Selected=False,Hot=False,Odd=False,Indent=2,Index=6,Name=Joe,Group=Bugs reporters
120820437: CL,ID=Row,Type=Contact,Protocol=ICQ,Status=ONLINE,HasAvatar=True,GroupPos=Last,Selected=False,Hot=False,Odd=True,Indent=2,Index=10,Name=Bio,Group=Bugs reporters $normalcontact
120820453: CL,ID=Ovl,Type=Contact,Protocol=ICQ,Status=ONLINE,HasAvatar=True,GroupPos=Last,Selected=False,Hot=False,Odd=True,Indent=2,Index=10,Name=Bio,Group=Bugs reporters
120820453: CL,ID=Row,Type=Contact,Protocol=ICQ,Status=ONLINE,HasAvatar=False,GroupPos=Mid,Selected=False,Hot=False,Odd=False,Indent=1,Index=11,Name=LexSys,Group=Friends $normalcontact
120820453: CL,ID=Ovl,Type=Contact,Protocol=ICQ,Status=ONLINE,HasAvatar=False,GroupPos=Mid,Selected=False,Hot=False,Odd=False,Indent=1,Index=11,Name=LexSys,Group=Friends
120820453: CL,ID=Row,Type=Contact,Protocol=ICQ,Status=ONLINE,HasAvatar=True,GroupPos=Last,Selected=False,Hot=False,Odd=True,Indent=1,Index=12,Name=NullBie,Group=Friends $normalcontact
120820453: CL,ID=Ovl,Type=Contact,Protocol=ICQ,Status=ONLINE,HasAvatar=True,GroupPos=Last,Selected=False,Hot=False,Odd=True,Indent=1,Index=12,Name=NullBie,Group=Friends
120820453: CL,ID=Row,Type=Group,Open=True,GroupPos=Last,Selected=False,Hot=False,Odd=False,Indent=0,Index=13,Name=>Developers $normalopengroup
120820468: CL,ID=Ovl,Type=Group,Open=True,GroupPos=Last,Selected=False,Hot=False,Odd=False,Indent=0,Index=13,Name=>Developers
120820468: CL,ID=Row,Type=Contact,Protocol=ICQ,Status=ONLINE,HasAvatar=True,GroupPos=First,Selected=False,Hot=False,Odd=True,Indent=1,Index=14,Name=Артем,Group=Friends $normalcontact
120820468: CL,ID=Ovl,Type=Contact,Protocol=ICQ,Status=ONLINE,HasAvatar=True,GroupPos=First,Selected=False,Hot=False,Odd=True,Indent=1,Index=14,Name=Артем,Group=Friends
120820468: CL,ID=Row,Type=Contact,Protocol=ICQ,Status=ONLINE,HasAvatar=True,GroupPos=Last,Selected=False,Hot=False,Odd=False,Indent=1,Index=15,Name=Angi,Group=Friends $normalcontact
120820468: CL,ID=Ovl,Type=Contact,Protocol=ICQ,Status=ONLINE,HasAvatar=True,GroupPos=Last,Selected=False,Hot=False,Odd=False,Indent=1,Index=15,Name=Angi,Group=Friends
120820468: MButton,ID=close,Down=0,Focused=0,Hovered=0 $BTNclosenorm
120820484: MButton,ID=minimize,Down=0,Focused=0,Hovered=0 $BTNminnorm
120820484: MButton,ID=hideoffline,Down=0,Focused=0,Hovered=0,Value=1 $BTNstatusDn
120820500: Main,ID=FrameCaption
120820500: Main,ID=Background $window
120820546: Main,ID=FrameCaption
120820546: Main,ID=StatusBar
120820546: CL,ID=Background
120820562: CL,ID=Row,Type=Group,Open=True,GroupPos=First,Selected=False,Hot=False,Odd=False,Indent=0,Index=0,Name=Friends $normalopengroup
120820562: CL,ID=Ovl,Type=Group,Open=True,GroupPos=First,Selected=False,Hot=False,Odd=False,Indent=0,Index=0,Name=Friends
120820562: CL,ID=Row,Type=Contact,Protocol=ICQ,Status=ONLINE,HasAvatar=True,GroupPos=First,Selected=False,Hot=False,Odd=True,Indent=1,Index=1,Name=Олег,Group=Friends $normalcontact
120820562: CL,ID=Ovl,Type=Contact,Protocol=ICQ,Status=ONLINE,HasAvatar=True,GroupPos=First,Selected=False,Hot=False,Odd=True,Indent=1,Index=1,Name=Олег,Group=Friends
120820562: CL,ID=Row,Type=Contact,Protocol=ICQ,Status=NA,HasAvatar=True,GroupPos=Last,Selected=False,Hot=False,Odd=False,Indent=1,Index=2,Name=Юля,Group=Friends $normalcontact
120820562: CL,ID=Ovl,Type=Contact,Protocol=ICQ,Status=NA,HasAvatar=True,GroupPos=Last,Selected=False,Hot=False,Odd=False,Indent=1,Index=2,Name=Юля,Group=Friends
120820562: CL,ID=Row,Type=Group,Open=True,GroupPos=Mid,Selected=False,Hot=False,Odd=True,Indent=0,Index=3,Name=MIRANDA $normalopengroup
120820578: CL,ID=Ovl,Type=Group,Open=True,GroupPos=Mid,Selected=False,Hot=False,Odd=True,Indent=0,Index=3,Name=MIRANDA
120820578: CL,ID=Row,Type=Group,Open=False,GroupPos=First,Selected=False,Hot=False,Odd=False,Indent=1,Index=4,Name=Bugs reporters,Group=Friends $normalclosedgroup
120820578: CL,ID=Ovl,Type=Group,Open=False,GroupPos=First,Selected=False,Hot=False,Odd=False,Indent=1,Index=4,Name=Bugs reporters,Group=Friends
120820578: CL,ID=Row,Type=Group,Open=True,GroupPos=Mid,Selected=False,Hot=False,Odd=True,Indent=1,Index=5,Name=Developers,Group=Friends $normalopengroup
120820578: CL,ID=Ovl,Type=Group,Open=True,GroupPos=Mid,Selected=False,Hot=False,Odd=True,Indent=1,Index=5,Name=Developers,Group=Friends
120820578: CL,ID=Row,Type=Contact,Protocol=ICQ,Status=NA,HasAvatar=True,GroupPos=First,Selected=False,Hot=False,Odd=False,Indent=2,Index=6,Name=Joe,Group=Bugs reporters $normalcontact
120820593: CL,ID=Ovl,Type=Contact,Protocol=ICQ,Status=NA,HasAvatar=True,GroupPos=First,Selected=False,Hot=False,Odd=False,Indent=2,Index=6,Name=Joe,Group=Bugs reporters
120820593: CL,ID=Row,Type=Contact,Protocol=ICQ,Status=ONLINE,HasAvatar=True,GroupPos=Last,Selected=False,Hot=False,Odd=True,Indent=2,Index=10,Name=Bio,Group=Bugs reporters $normalcontact
120820593: CL,ID=Ovl,Type=Contact,Protocol=ICQ,Status=ONLINE,HasAvatar=True,GroupPos=Last,Selected=False,Hot=False,Odd=True,Indent=2,Index=10,Name=Bio,Group=Bugs reporters
120820593: CL,ID=Row,Type=Contact,Protocol=ICQ,Status=ONLINE,HasAvatar=False,GroupPos=Mid,Selected=False,Hot=False,Odd=False,Indent=1,Index=11,Name=LexSys,Group=Friends $normalcontact
120820593: CL,ID=Ovl,Type=Contact,Protocol=ICQ,Status=ONLINE,HasAvatar=False,GroupPos=Mid,Selected=False,Hot=False,Odd=False,Indent=1,Index=11,Name=LexSys,Group=Friends
120820593: CL,ID=Row,Type=Contact,Protocol=ICQ,Status=ONLINE,HasAvatar=True,GroupPos=Last,Selected=False,Hot=False,Odd=True,Indent=1,Index=12,Name=NullBie,Group=Friends $normalcontact
120820609: CL,ID=Ovl,Type=Contact,Protocol=ICQ,Status=ONLINE,HasAvatar=True,GroupPos=Last,Selected=False,Hot=False,Odd=True,Indent=1,Index=12,Name=NullBie,Group=Friends
120820609: CL,ID=Row,Type=Group,Open=True,GroupPos=Last,Selected=False,Hot=False,Odd=False,Indent=0,Index=13,Name=>Developers $normalopengroup
120820609: CL,ID=Ovl,Type=Group,Open=True,GroupPos=Last,Selected=False,Hot=False,Odd=False,Indent=0,Index=13,Name=>Developers
120820609: CL,ID=Row,Type=Contact,Protocol=ICQ,Status=ONLINE,HasAvatar=True,GroupPos=First,Selected=False,Hot=False,Odd=True,Indent=1,Index=14,Name=Артем,Group=Friends $normalcontact
120820625: CL,ID=Ovl,Type=Contact,Protocol=ICQ,Status=ONLINE,HasAvatar=True,GroupPos=First,Selected=False,Hot=False,Odd=True,Indent=1,Index=14,Name=Артем,Group=Friends
120820625: CL,ID=Row,Type=Contact,Protocol=ICQ,Status=ONLINE,HasAvatar=True,GroupPos=Last,Selected=False,Hot=False,Odd=False,Indent=1,Index=15,Name=Angi,Group=Friends $normalcontact
120820625: CL,ID=Ovl,Type=Contact,Protocol=ICQ,Status=ONLINE,HasAvatar=True,GroupPos=Last,Selected=False,Hot=False,Odd=False,Indent=1,Index=15,Name=Angi,Group=Friends
120820625: MButton,ID=close,Down=0,Focused=0,Hovered=0 $BTNclosenorm
120820625: MButton,ID=minimize,Down=0,Focused=0,Hovered=0 $BTNminnorm
120820625: MButton,ID=hideoffline,Down=0,Focused=0,Hovered=0,Value=1 $BTNstatusDn
120820640: MButton,ID=close,Down=0,Focused=0,Hovered=0 $BTNclosenorm
120820640: MButton,ID=minimize,Down=0,Focused=0,Hovered=0 $BTNminnorm
120820640: MButton,ID=hideoffline,Down=0,Focused=0,Hovered=0,Value=1 $BTNstatusDn
120820640: Main,ID=StatusBar
120820640: CL,ID=Background
120820640: CL,ID=Row,Type=Group,Open=True,GroupPos=First,Selected=False,Hot=False,Odd=False,Indent=0,Index=0,Name=Friends $normalopengroup
120820656: CL,ID=Ovl,Type=Group,Open=True,GroupPos=First,Selected=False,Hot=False,Odd=False,Indent=0,Index=0,Name=Friends
120820656: CL,ID=Row,Type=Contact,Protocol=ICQ,Status=ONLINE,HasAvatar=True,GroupPos=First,Selected=False,Hot=False,Odd=True,Indent=1,Index=1,Name=Олег,Group=Friends $normalcontact
120820656: CL,ID=Ovl,Type=Contact,Protocol=ICQ,Status=ONLINE,HasAvatar=True,GroupPos=First,Selected=False,Hot=False,Odd=True,Indent=1,Index=1,Name=Олег,Group=Friends
120820656: CL,ID=Row,Type=Contact,Protocol=ICQ,Status=NA,HasAvatar=True,GroupPos=Last,Selected=False,Hot=False,Odd=False,Indent=1,Index=2,Name=Юля,Group=Friends $normalcontact
120820656: CL,ID=Ovl,Type=Contact,Protocol=ICQ,Status=NA,HasAvatar=True,GroupPos=Last,Selected=False,Hot=False,Odd=False,Indent=1,Index=2,Name=Юля,Group=Friends
120820656: CL,ID=Row,Type=Group,Open=True,GroupPos=Mid,Selected=False,Hot=False,Odd=True,Indent=0,Index=3,Name=MIRANDA $normalopengroup
120820671: CL,ID=Ovl,Type=Group,Open=True,GroupPos=Mid,Selected=False,Hot=False,Odd=True,Indent=0,Index=3,Name=MIRANDA
120820671: CL,ID=Row,Type=Group,Open=False,GroupPos=First,Selected=False,Hot=False,Odd=False,Indent=1,Index=4,Name=Bugs reporters,Group=Friends $normalclosedgroup
120820671: CL,ID=Ovl,Type=Group,Open=False,GroupPos=First,Selected=False,Hot=False,Odd=False,Indent=1,Index=4,Name=Bugs reporters,Group=Friends
120820671: CL,ID=Row,Type=Group,Open=True,GroupPos=Mid,Selected=False,Hot=False,Odd=True,Indent=1,Index=5,Name=Developers,Group=Friends $normalopengroup
120820671: CL,ID=Ovl,Type=Group,Open=True,GroupPos=Mid,Selected=False,Hot=False,Odd=True,Indent=1,Index=5,Name=Developers,Group=Friends
120820671: CL,ID=Row,Type=Contact,Protocol=ICQ,Status=NA,HasAvatar=True,GroupPos=First,Selected=False,Hot=False,Odd=False,Indent=2,Index=6,Name=Joe,Group=Bugs reporters $normalcontact
120820687: CL,ID=Ovl,Type=Contact,Protocol=ICQ,Status=NA,HasAvatar=True,GroupPos=First,Selected=False,Hot=False,Odd=False,Indent=2,Index=6,Name=Joe,Group=Bugs reporters
120820687: CL,ID=Row,Type=Contact,Protocol=ICQ,Status=ONLINE,HasAvatar=True,GroupPos=Last,Selected=False,Hot=False,Odd=True,Indent=2,Index=10,Name=Bio,Group=Bugs reporters $normalcontact
120820687: CL,ID=Ovl,Type=Contact,Protocol=ICQ,Status=ONLINE,HasAvatar=True,GroupPos=Last,Selected=False,Hot=False,Odd=True,Indent=2,Index=10,Name=Bio,Group=Bugs reporters
120820703: CL,ID=Row,Type=Contact,Protocol=ICQ,Status=ONLINE,HasAvatar=False,GroupPos=Mid,Selected=False,Hot=False,Odd=False,Indent=1,Index=11,Name=LexSys,Group=Friends $normalcontact
120820703: CL,ID=Ovl,Type=Contact,Protocol=ICQ,Status=ONLINE,HasAvatar=False,GroupPos=Mid,Selected=False,Hot=False,Odd=False,Indent=1,Index=11,Name=LexSys,Group=Friends
120820703: CL,ID=Row,Type=Contact,Protocol=ICQ,Status=ONLINE,HasAvatar=True,GroupPos=Last,Selected=False,Hot=False,Odd=True,Indent=1,Index=12,Name=NullBie,Group=Friends $normalcontact
120820703: CL,ID=Ovl,Type=Contact,Protocol=ICQ,Status=ONLINE,HasAvatar=True,GroupPos=Last,Selected=False,Hot=False,Odd=True,Indent=1,Index=12,Name=NullBie,Group=Friends
120820703: CL,ID=Row,Type=Group,Open=True,GroupPos=Last,Selected=False,Hot=False,Odd=False,Indent=0,Index=13,Name=>Developers $normalopengroup
120820703: CL,ID=Ovl,Type=Group,Open=True,GroupPos=Last,Selected=False,Hot=False,Odd=False,Indent=0,Index=13,Name=>Developers
120820718: CL,ID=Row,Type=Contact,Protocol=ICQ,Status=ONLINE,HasAvatar=True,GroupPos=First,Selected=False,Hot=False,Odd=True,Indent=1,Index=14,Name=Артем,Group=Friends $normalcontact
120820718: CL,ID=Ovl,Type=Contact,Protocol=ICQ,Status=ONLINE,HasAvatar=True,GroupPos=First,Selected=False,Hot=False,Odd=True,Indent=1,Index=14,Name=Артем,Group=Friends
120820718: CL,ID=Row,Type=Contact,Protocol=ICQ,Status=ONLINE,HasAvatar=True,GroupPos=Last,Selected=False,Hot=False,Odd=False,Indent=1,Index=15,Name=Angi,Group=Friends $normalcontact
120820718: CL,ID=Ovl,Type=Contact,Protocol=ICQ,Status=ONLINE,HasAvatar=True,GroupPos=Last,Selected=False,Hot=False,Odd=False,Indent=1,Index=15,Name=Angi,Group=Friends
120820718: MButton,ID=close,Down=0,Focused=0,Hovered=0 $BTNclosenorm
120820734: MButton,ID=minimize,Down=0,Focused=0,Hovered=0 $BTNminnorm
120820734: MButton,ID=hideoffline,Down=0,Focused=0,Hovered=0,Value=1 $BTNstatusDn
120823812: Main,ID=FrameCaption
120823828: Main,ID=StatusBar
120823843: CL,ID=Background
120823843: CL,ID=Row,Type=Group,Open=True,GroupPos=First,Selected=False,Hot=False,Odd=False,Indent=0,Index=0,Name=Friends $normalopengroup
120823843: CL,ID=Ovl,Type=Group,Open=True,GroupPos=First,Selected=False,Hot=False,Odd=False,Indent=0,Index=0,Name=Friends
120823843: CL,ID=Row,Type=Contact,Protocol=ICQ,Status=ONLINE,HasAvatar=True,GroupPos=First,Selected=False,Hot=False,Odd=True,Indent=1,Index=1,Name=Олег,Group=Friends $normalcontact
120823843: CL,ID=Ovl,Type=Contact,Protocol=ICQ,Status=ONLINE,HasAvatar=True,GroupPos=First,Selected=False,Hot=False,Odd=True,Indent=1,Index=1,Name=Олег,Group=Friends
120823843: CL,ID=Row,Type=Contact,Protocol=ICQ,Status=NA,HasAvatar=True,GroupPos=Last,Selected=False,Hot=False,Odd=False,Indent=1,Index=2,Name=Юля,Group=Friends $normalcontact
120823859: CL,ID=Ovl,Type=Contact,Protocol=ICQ,Status=NA,HasAvatar=True,GroupPos=Last,Selected=False,Hot=False,Odd=False,Indent=1,Index=2,Name=Юля,Group=Friends
120823859: CL,ID=Row,Type=Group,Open=True,GroupPos=Mid,Selected=False,Hot=False,Odd=True,Indent=0,Index=3,Name=MIRANDA $normalopengroup
120823859: CL,ID=Ovl,Type=Group,Open=True,GroupPos=Mid,Selected=False,Hot=False,Odd=True,Indent=0,Index=3,Name=MIRANDA
120823859: CL,ID=Row,Type=Group,Open=False,GroupPos=First,Selected=False,Hot=False,Odd=False,Indent=1,Index=4,Name=Bugs reporters,Group=Friends $normalclosedgroup
120823875: CL,ID=Ovl,Type=Group,Open=False,GroupPos=First,Selected=False,Hot=False,Odd=False,Indent=1,Index=4,Name=Bugs reporters,Group=Friends
120823875: CL,ID=Row,Type=Group,Open=True,GroupPos=Mid,Selected=False,Hot=False,Odd=True,Indent=1,Index=5,Name=Developers,Group=Friends $normalopengroup
120823875: CL,ID=Ovl,Type=Group,Open=True,GroupPos=Mid,Selected=False,Hot=False,Odd=True,Indent=1,Index=5,Name=Developers,Group=Friends
120823875: CL,ID=Row,Type=Contact,Protocol=ICQ,Status=NA,HasAvatar=True,GroupPos=First,Selected=False,Hot=False,Odd=False,Indent=2,Index=6,Name=Joe,Group=Bugs reporters $normalcontact
120823890: CL,ID=Ovl,Type=Contact,Protocol=ICQ,Status=NA,HasAvatar=True,GroupPos=First,Selected=False,Hot=False,Odd=False,Indent=2,Index=6,Name=Joe,Group=Bugs reporters
120823890: CL,ID=Row,Type=Contact,Protocol=ICQ,Status=ONLINE,HasAvatar=True,GroupPos=Last,Selected=False,Hot=False,Odd=True,Indent=2,Index=10,Name=Bio,Group=Bugs reporters $normalcontact
120823890: CL,ID=Ovl,Type=Contact,Protocol=ICQ,Status=ONLINE,HasAvatar=True,GroupPos=Last,Selected=False,Hot=False,Odd=True,Indent=2,Index=10,Name=Bio,Group=Bugs reporters
120823890: CL,ID=Row,Type=Contact,Protocol=ICQ,Status=ONLINE,HasAvatar=False,GroupPos=Mid,Selected=False,Hot=False,Odd=False,Indent=1,Index=11,Name=LexSys,Group=Friends $normalcontact
120823890: CL,ID=Ovl,Type=Contact,Protocol=ICQ,Status=ONLINE,HasAvatar=False,GroupPos=Mid,Selected=False,Hot=False,Odd=False,Indent=1,Index=11,Name=LexSys,Group=Friends
120823890: CL,ID=Row,Type=Contact,Protocol=ICQ,Status=ONLINE,HasAvatar=True,GroupPos=Last,Selected=False,Hot=False,Odd=True,Indent=1,Index=12,Name=NullBie,Group=Friends $normalcontact
120823906: CL,ID=Ovl,Type=Contact,Protocol=ICQ,Status=ONLINE,HasAvatar=True,GroupPos=Last,Selected=False,Hot=False,Odd=True,Indent=1,Index=12,Name=NullBie,Group=Friends
120823906: CL,ID=Row,Type=Group,Open=True,GroupPos=Last,Selected=False,Hot=False,Odd=False,Indent=0,Index=13,Name=>Developers $normalopengroup
120823906: CL,ID=Ovl,Type=Group,Open=True,GroupPos=Last,Selected=False,Hot=False,Odd=False,Indent=0,Index=13,Name=>Developers
120823906: CL,ID=Row,Type=Contact,Protocol=ICQ,Status=ONLINE,HasAvatar=True,GroupPos=First,Selected=False,Hot=False,Odd=True,Indent=1,Index=14,Name=Артем,Group=Friends $normalcontact
120823906: CL,ID=Ovl,Type=Contact,Protocol=ICQ,Status=ONLINE,HasAvatar=True,GroupPos=First,Selected=False,Hot=False,Odd=True,Indent=1,Index=14,Name=Артем,Group=Friends
120823906: CL,ID=Row,Type=Contact,Protocol=ICQ,Status=ONLINE,HasAvatar=True,GroupPos=Last,Selected=False,Hot=False,Odd=False,Indent=1,Index=15,Name=Angi,Group=Friends $normalcontact
120823906: CL,ID=Ovl,Type=Contact,Protocol=ICQ,Status=ONLINE,HasAvatar=True,GroupPos=Last,Selected=False,Hot=False,Odd=False,Indent=1,Index=15,Name=Angi,Group=Friends
120823921: MButton,ID=close,Down=0,Focused=0,Hovered=0 $BTNclosenorm
120823921: MButton,ID=minimize,Down=0,Focused=0,Hovered=0 $BTNminnorm
120823921: MButton,ID=hideoffline,Down=0,Focused=0,Hovered=0,Value=1 $BTNstatusDn