anchor.diff:    Result := IfThen(Value > 0, IntToStr(Value), '');
   end;
   
  +
  +{ TKMGUIGameSpectatorItemLineWareFare }
  +constructor TKMGUIGameSpectatorItemLineWareFare.Create(aParent: TKMPanel; AHandIndex: Integer; aOnJumpToPlayer: TIntegerEvent);
  +begin
  +  inherited Create(aParent, AHandIndex, aOnJumpToPlayer);
  +  FShowEmptyItems := True;
  +end;
  +
  +function TKMGUIGameSpectatorItemLineWareFare.CreateItem(AHandIndex: Integer; ATag: Integer): TKMGUIGameSpectatorItem;
  +begin
  +  Result := TKMGUIGameSpectatorItem.Create(Self, ATag,
  +                                           TKMGUIGameSpectatorItemLineWareFare.GetIcon(ATag),
  +                                           TKMGUIGameSpectatorItemLineWareFare.GetTitle(ATag), FHandIndex);
  +  Result.Visible := False;
  +end;
  +
  +class function TKMGUIGameSpectatorItemLineWareFare.GetIcon(aTag: Integer): Word;
  +begin
  +  if aTag = -1 then
  +    Result := gRes.Units[ut_Recruit].GUIIcon
  +  else
  +    Result := gRes.Wares[TKMWareType(ATag)].GUIIcon;
  +end;
  +
  +class function TKMGUIGameSpectatorItemLineWareFare.GetTitle(aTag: Integer): UnicodeString;
  +begin
  +  if aTag = -1 then
  +    Result := gRes.Units[ut_Recruit].GUIName
  +  else
  +    Result := gRes.Wares[TKMWareType(ATag)].Title;
  +end;
  +
  +function TKMGUIGameSpectatorItemLineWareFare.GetTagCount: Integer;
  +begin
  +  Result := Integer(WARFARE_MAX) - Integer(WARFARE_MIN) + 1 + 1; //+1 for recruit
  +end;
  +
  +function TKMGUIGameSpectatorItemLineWareFare.GetTag(AIndex: Integer): Integer;
  +begin
  +  Result := IfThen(AIndex = 0, -1, Integer(WARFARE_MAX) - AIndex + 1); //Recruit is the last
  +end;
  +
  +function TKMGUIGameSpectatorItemLineWareFare.GetValue(AHandIndex: Integer; ATag: Integer): String;
  +var
  +  Value: Integer;
  +begin
  +  if aTag = -1 then
  +    Value := gHands[AHandIndex].Stats.GetUnitQty(ut_Recruit)
  +  else
  +    Value := gHands[AHandIndex].Stats.GetWareBalance(TKMWareType(ATag));
  +
  +  Result := IfThen(Value > 0, IntToStr(Value), '');
  +end;
  +
   { TKMGUIGameSpectatorItemLineCustomBuildings }
   function TKMGUIGameSpectatorItemLineCustomBuildings.CreateItem(AHandIndex: Integer; ATag: Integer): TKMGUIGameSpectatorItem;
   begin
  
positive.code:   OnDoubleClick := DoubleClicked;
    Anchors := [anTop, anRight];
    FAnimStep := 0;
    Focusable := false;
    FHandIndex := AHandIndex;
    SetLength(fItems, GetTagCount);
    for i := 0 to GetTagCount - 1 do
  
negative.code: 
    TKMGUIGameSpectatorItemLine = class(TKMPanel)
    protected
      FShowEmptyItems: Boolean;
      FOnJumpToPlayer: TIntegerEvent;
      FHandIndex: Integer;
      FAnimStep: Cardinal;
  