Changeset 674 for trunk/LocalPlayer


Ignore:
Timestamp:
Jul 26, 2025, 8:45:36 AM (3 days ago)
Author:
chronos
Message:
  • Modified: Select dialog refactored for better readability.
  • Modified: Evaluate Escape key in Settings dialog.
Location:
trunk/LocalPlayer
Files:
3 edited

Legend:

Unmodified
Added
Removed
  • trunk/LocalPlayer/Nego.pas

    r622 r674  
    392392    if MainScreen.ModalSelectDlg.OnlyChoice(kChooseModel) <> mixAll then
    393393      MyAllowed := MyAllowed + [opAllModel shr 24];
    394     if MainScreen.ModalSelectDlg.OnlyChoice(kChooseEModel) <> mixAll then
     394    if MainScreen.ModalSelectDlg.OnlyChoice(kChooseEnemyModel) <> mixAll then
    395395      OppoAllowed := OppoAllowed + [opAllModel shr 24];
    396396  end;
     
    762762                Exit;
    763763            end;
    764           MainScreen.ModalSelectDlg.ShowNewContent(wmModal, kEShipPart);
     764          MainScreen.ModalSelectDlg.ShowNewContent(wmModal, kEnemyShipPart);
    765765          if MainScreen.ModalSelectDlg.Result < 0 then
    766766            Exit;
     
    784784      opAllTech:
    785785        begin // choose technology
    786           MainScreen.ModalSelectDlg.ShowNewContent(wmModal, kChooseETech);
     786          MainScreen.ModalSelectDlg.ShowNewContent(wmModal, kChooseEnemyTech);
    787787          if MainScreen.ModalSelectDlg.Result < 0 then
    788788            Exit;
     
    794794      opAllModel:
    795795        begin // choose model
    796           MainScreen.ModalSelectDlg.ShowNewContent(wmModal, kChooseEModel);
     796          MainScreen.ModalSelectDlg.ShowNewContent(wmModal, kChooseEnemyModel);
    797797          if MainScreen.ModalSelectDlg.Result < 0 then
    798798            Exit;
  • trunk/LocalPlayer/Select.pas

    r672 r674  
    66uses
    77  Protocol, ClientTools, ScreenTools, PVSB, BaseWin, LCLIntf, LCLType, Messages,
    8   SysUtils, Classes, ButtonB, ButtonBase, Types, Math,
     8  SysUtils, Classes, ButtonB, ButtonBase, Types, Math, Generics.Collections,
    99  {$IFDEF DPI}Dpi.Graphics, Dpi.Controls, Dpi.Forms, Dpi.ExtCtrls, Dpi.Menus,
    1010  Dpi.Common, System.UITypes{$ELSE}
     
    1313type
    1414  TListKind = (kProject, kAdvance, kFarAdvance, kCities, kCityEvents, kModels,
    15     kEModels, kAllEModels, kTribe, kScience, kShipPart, kEShipPart, kChooseTech,
    16     kChooseETech, kChooseModel, kChooseEModel, kChooseCity, kChooseECity,
    17     kStealTech, kGov, kMission);
     15    kEnemyModels, kAllEnemyModels, kTribe, kScience, kShipPart, kEnemyShipPart,
     16    kChooseTech, kChooseEnemyTech, kChooseModel, kChooseEnemyModel, kChooseCity,
     17    kChooseEnemyCity, kStealTech, kGovernment, kMission);
    1818
    1919  TLayerIndex = (laImprovements, laWonders, laClasses);
     20
     21  { TLine }
     22
     23  TLine = class
     24    Code: Integer;
     25    Model: Integer;
     26    ModelSortValue: Integer;
     27    procedure Assign(Source: TLine);
     28  end;
    2029
    2130  { TLayer }
     
    2332  TLayer = class
    2433    Index: TLayerIndex;
    25     Lines: Integer;
    2634    FirstShrinkedLine: Integer;
    27     Code: array [0..4095] of Integer;
    28     procedure SwapCode(I, J: Integer);
     35    Lines: TObjectList<TLine>;
     36    procedure AddLine(Code: Integer; Model: Integer = 0; ModelSortValue: Integer = 0);
     37    procedure SwapLine(I, J: Integer);
     38    procedure SortModels;
     39    procedure SortCities;
     40    procedure SortTechs;
    2941    constructor Create(AIndex: TLayerIndex);
    30     procedure AddCode(Value: Integer);
     42    destructor Destroy; override;
    3143  end;
    3244
     
    6274    MaxLines: Integer;
    6375    cixProject: Integer;
    64     pView: Integer;
     76    PlayerView: Integer;
    6577    Selected: Integer;
    6678    DispLines: Integer;
     
    7890    procedure ScrollBarUpdate(Sender: TObject);
    7991    procedure InitLines;
    80     procedure Line(ca: TCanvas; L: Integer; NonText, Lit: Boolean);
     92    procedure PaintLine(ca: TCanvas; L: Integer; NonText, Lit: Boolean);
    8193    function RenameModel(mix: Integer): Boolean;
    8294    procedure OnScroll(var Msg: TMessage); message WM_VSCROLL;
     
    91103    procedure ShowNewContent(NewMode: TWindowMode; ListKind: TListKind);
    92104    procedure ShowNewContent_CityProject(NewMode: TWindowMode; cix: Integer);
    93     procedure ShowNewContent_MilReport(NewMode: TWindowMode; P: Integer);
     105    procedure ShowNewContent_MilReport(NewMode: TWindowMode; Player: Integer);
    94106    procedure EcoChange;
    95107    procedure TechChange;
     
    116128  CityNameSpace = 127;
    117129
    118   MustChooseKind = [kTribe, kStealTech, kGov];
     130  MustChooseKind = [kTribe, kStealTech, kGovernment];
     131
     132{ TLine }
     133
     134procedure TLine.Assign(Source: TLine);
     135begin
     136  Code := Source.Code;
     137  Model := Source.Model;
     138  ModelSortValue := Source.ModelSortValue;
     139end;
    119140
    120141{ TLayer }
    121142
    122 procedure TLayer.SwapCode(I, J: Integer);
     143procedure TLayer.AddLine(Code: Integer; Model: Integer = 0; ModelSortValue: Integer = 0);
    123144var
    124   Temp: Integer;
    125 begin
    126   Temp := Code[I];
    127   Code[I] := Code[J];
    128   Code[J] := Temp;
     145  NewLine: TLine;
     146begin
     147  NewLine := TLine.Create;
     148  NewLine.Code := Code;
     149  NewLine.Model := Model;
     150  NewLine.ModelSortValue := ModelSortValue;
     151  Lines.Add(NewLine);
     152end;
     153
     154procedure TLayer.SwapLine(I, J: Integer);
     155var
     156  Temp: TLine;
     157begin
     158  Temp := TLine.Create;
     159  Temp.Assign(Lines[I]);
     160  Lines[I].Assign(Lines[J]);
     161  Lines[J].Assign(Temp);
     162  Temp.Free;
     163end;
     164
     165procedure TLayer.SortModels;
     166var
     167  I, J: Integer;
     168begin
     169  for I := 0 to Lines.Count - 2 do
     170    for J := I + 1 to Lines.Count - 1 do
     171      if Lines[I].ModelSortValue > Lines[J].ModelSortValue then
     172      begin
     173        SwapLine(I, J);
     174      end;
     175end;
     176
     177procedure TLayer.SortTechs;
     178var
     179  I, J: Integer;
     180begin // sort by advancedness
     181  for I := 0 to Lines.Count - 2 do
     182    if Lines[I].Code < adMilitary then
     183      for J := I + 1 to Lines.Count - 1 do
     184        if AdvValue[Lines[I].Code] * nAdv + Lines[I].Code < AdvValue[Lines[J].Code] *
     185          nAdv + Lines[J].Code then
     186        begin
     187          SwapLine(I, J);
     188        end;
     189end;
     190
     191procedure TLayer.SortCities;
     192var
     193  I, J: Integer;
     194begin
     195  for I := 0 to Lines.Count - 2 do
     196    for J := I + 1 to Lines.Count - 1 do
     197      if CityName(MyCity[Lines[I].Code].ID) > CityName(MyCity[Lines[J].Code].ID) then
     198      begin
     199        SwapLine(I, J);
     200      end;
    129201end;
    130202
    131203constructor TLayer.Create(AIndex: TLayerIndex);
    132204begin
     205  Lines := TObjectList<TLine>.Create;
    133206  Index := AIndex;
    134207end;
    135208
    136 procedure TLayer.AddCode(Value: Integer);
    137 begin
    138   Code[Lines] := Value;
    139   Inc(Lines);
     209destructor TLayer.Destroy;
     210begin
     211  FreeAndNil(Lines);
     212  inherited;
    140213end;
    141214
     
    195268  if not Closable and (Selected <> -2) then
    196269  begin
    197     Line(Canvas, Selected, False, False);
     270    PaintLine(Canvas, Selected, False, False);
    198271    Selected := -2;
    199272  end;
     
    207280  Canvas.Font.Assign(UniFont[ftNormal]);
    208281  if Selected <> -2 then
    209     Line(Canvas, Selected, False, True);
     282    PaintLine(Canvas, Selected, False, True);
    210283  S := '';
    211284  if (Kind = kAdvance) and (MyData.FarTech <> adNone) then
     
    214287  else if Kind = kModels then
    215288    S := Tribe[Me].TPhrase('SHORTNAME')
    216   else if Kind = kEModels then
    217     S := Tribe[pView].TPhrase('SHORTNAME') + ' (' +
    218       TurnToString(MyRO.EnemyReport[pView].TurnOfMilReport) + ')';
     289  else if Kind = kEnemyModels then
     290    S := Tribe[PlayerView].TPhrase('SHORTNAME') + ' (' +
     291      TurnToString(MyRO.EnemyReport[PlayerView].TurnOfMilReport) + ')';
    219292  if S <> '' then
    220293    LoweredTextOut(Canvas, -1, MainTexture,
     
    228301end;
    229302
    230 procedure TListDlg.Line(ca: TCanvas; L: Integer; NonText, Lit: Boolean);
     303procedure TListDlg.PaintLine(ca: TCanvas; L: Integer; NonText, Lit: Boolean);
    231304// paint a line
    232305
     
    283356  CanGrow: Boolean;
    284357begin
    285   lix := Layer.Code[ScrollBar.Position + L];
     358  lix := Layer.Lines[ScrollBar.Position + L].Code;
    286359  y0 := 2 + (L + 1) * LineDistance;
     360
    287361  if ScrollBar.Position + L >= Layer.FirstShrinkedLine then
    288362    ofs := (ScrollBar.Position + L - Layer.FirstShrinkedLine) and 1 * 33
    289   else { if FirstShrinkedLine[Layer] < Lines[Layer] then }
     363  else { if Layers[Layer].FirstShrinkedLine < Layers[Layer].Lines.Count then }
    290364    ofs := 33;
    291365
     
    408482        else
    409483        begin
    410           { s:=IntToStr(CityReport.FoodSurplus);
    411             ReplaceText(X+(CityNameSpace+4+48)-BiColorTextWidth(ca,S),Y,TextColor,S); }
     484          { s := IntToStr(CityReport.FoodSurplus);
     485            ReplaceText(X + (CityNameSpace + 4 + 48) - BiColorTextWidth(ca, S), Y, TextColor, S); }
    412486          S := IntToStr(CityReport.Science);
    413487          ReplaceText(X + CityNameSpace + 4 + 370 + 48 - BiColorTextWidth(ca,
     
    418492          if NonText then
    419493          begin
    420             // Sprite(offscreen,HGrSystem,x+CityNameSpace+4+333+1,y+6,10,10,66,115);
     494            // Sprite(offscreen, HGrSystem, x + CityNameSpace + 4 + 333 + 1, y + 6, 10, 10, 66, 115);
    421495            Sprite(Offscreen, HGrSystem, X + CityNameSpace + 4 + 370 + 48 + 1,
    422496              Y + 6, 10, 10, 77, 126);
     
    428502        ReplaceText(X + CityNameSpace + 4 + 370 - BiColorTextWidth(ca, S), Y,
    429503          TextColor, S);
    430         // if Project and (cpImp+cpIndex)<>cpImp+imTrGoods then
    431         // ReplaceText(x+CityNameSpace+4+333+1,y,TextColor,Format('%d/%d',[TrueProd,CityReport.ProjectCost]));
     504        // if Project and (cpImp + cpIndex) <> cpImp + imTrGoods then
     505        // ReplaceText(x + CityNameSpace + 4 + 333 + 1, y, TextColor, Format('%d/%d', [TrueProd,CityReport.ProjectCost]));
    432506        if NonText then
    433507        begin
     
    463537      end;
    464538    end
    465   else if Kind in [kModels, kEModels] then
     539  else if Kind in [kModels, kEnemyModels] then
    466540  begin
    467541    X := 104;
     
    491565    else
    492566    begin
    493       Available := MyRO.EnemyReport[pView].UnCount[lix];
     567      Available := MyRO.EnemyReport[PlayerView].UnCount[lix];
    494568      if MainScreen.mNames.Checked then
    495         S := Tribe[pView].ModelName[lix]
     569        S := Tribe[PlayerView].ModelName[lix]
    496570      else
    497         S := Format(Tribe[pView].TPhrase('GENMODEL'), [lix]);
     571        S := Format(Tribe[PlayerView].TPhrase('GENMODEL'), [lix]);
    498572      if NonText then
    499         with Tribe[pView].ModelPicture[lix] do
     573        with Tribe[PlayerView].ModelPicture[lix] do
    500574          Sprite(Offscreen, HGr, 8 + ofs, y0 - 15, 64, 48, pix mod 10 * 65 + 1,
    501575            pix div 10 * 49 + 1);
     
    509583  begin
    510584    case Kind of
    511       kAllEModels, kChooseEModel:
     585      kAllEnemyModels, kChooseEnemyModel:
    512586        if lix = mixAll then
    513587          S := Phrases.Lookup('PRICECAT_ALLMODEL')
     
    518592          begin
    519593            S := Tribe[mox.Owner].ModelName[mox.mix];
    520             if (Kind = kAllEModels) and (Layers[laWonders].Code[ScrollBar.Position + L] = 0) then
     594            if (Kind = kAllEnemyModels) and (Layers[laImprovements].Lines[ScrollBar.Position + L].Model = 0) then
    521595              S := Format(Tribe[mox.Owner].TPhrase('OWNED'), [S]);
    522596          end
     
    561635            DisplayProject(8 + ofs, y0 - 15, lix);
    562636        end;
    563       kAdvance, kFarAdvance, kScience, kChooseTech, kChooseETech, kStealTech:
     637      kAdvance, kFarAdvance, kScience, kChooseTech, kChooseEnemyTech, kStealTech:
    564638        begin
    565639          if lix = adAll then
     
    706780            DisplayProject(8 + ofs, y0 - 15, cpImp + imShipComp + lix);
    707781        end;
    708       kEShipPart:
     782      kEnemyShipPart:
    709783        begin
    710784          S := Phrases.Lookup('IMPROVEMENTS', imShipComp + lix) + ' (' +
     
    713787            DisplayProject(8 + ofs, y0 - 15, cpImp + imShipComp + lix);
    714788        end;
    715       kGov:
     789      kGovernment:
    716790        begin
    717791          S := Phrases.Lookup('GOVERNMENT', lix);
     
    730804    case Kind of
    731805      kTribe, kMission: // center text
    732         if Layers[laImprovements].Lines > MaxLines then
     806        if Layers[laImprovements].Lines.Count > MaxLines then
    733807          X := (InnerWidth - GetSystemMetrics(SM_CXVSCROLL)) div 2 -
    734808            BiColorTextWidth(ca, S) div 2
    735809        else
    736810          X := InnerWidth div 2 - BiColorTextWidth(ca, S) div 2;
    737       kAdvance, kFarAdvance, kScience, kChooseTech, kChooseETech,
    738         kStealTech, kGov:
     811      kAdvance, kFarAdvance, kScience, kChooseTech, kChooseEnemyTech,
     812        kStealTech, kGovernment:
    739813        X := 104 - 33;
    740       kAllEModels:
     814      kAllEnemyModels:
    741815        X := 104;
    742816    else
     
    753827    else
    754828      TextColor := -1;
    755     { if Kind=kTribe then ReplaceText_Tribe(x,y,TextColor,
    756       Integer(TribeNames.Objects[lix]),S)
     829    { if Kind = kTribe then ReplaceText_Tribe(X, Y, TextColor,
     830      Integer(TribeNames.Objects[lix]), S)
    757831      else } ReplaceText(X, Y, TextColor, S);
    758832  end;
     
    803877
    804878    for I := -1 to DispLines do
    805       if (I + ScrollBar.Position >= 0) and (I + ScrollBar.Position < Layer.Lines) then
    806         Self.Line(Offscreen.Canvas, I, True, False);
     879      if (I + ScrollBar.Position >= 0) and (I + ScrollBar.Position < Layer.Lines.Count) then
     880        PaintLine(Offscreen.Canvas, I, True, False);
    807881  end;
    808882  MarkUsedOffscreen(InnerWidth, 8 + 48 + DispLines * LineDistance);
     
    825899    Selected := -2;
    826900  if (Selected < -1) or (Selected > DispLines) or (Selected + i0 < 0) or
    827     (Selected + i0 >= Layer.Lines) then
     901    (Selected + i0 >= Layer.Lines.Count) then
    828902    Selected := -2;
    829903  if Selected <> Sel0 then begin
    830904    if Sel0 <> -2 then
    831       Line(Canvas, Sel0, False, False);
     905      PaintLine(Canvas, Sel0, False, False);
    832906    if Selected <> -2 then
    833       Line(Canvas, Selected, False, True);
     907      PaintLine(Canvas, Selected, False, True);
    834908  end;
    835909
     
    9521026begin
    9531027  if ScrollBar.Position + Selected >= 0 then
    954     lix := Layer.Code[ScrollBar.Position + Selected];
    955   if Kind in [kScience, kCities, kCityEvents, kModels, kEModels, kAllEModels]
     1028    lix := Layer.Lines[ScrollBar.Position + Selected].Code;
     1029  if Kind in [kScience, kCities, kCityEvents, kModels, kEnemyModels, kAllEnemyModels]
    9561030  then
    9571031    Include(Shift, ssShift); // don't close list window
     
    9771051          if lix <> mixAll then
    9781052            MainScreen.UnitStatDlg.ShowNewContent_OwnModel(wmPersistent, lix);
    979         kEModels:
     1053        kEnemyModels:
    9801054          MainScreen.UnitStatDlg.ShowNewContent_EnemyModel(wmPersistent,
    981             Layers[laWonders].Code[ScrollBar.Position + Selected]);
    982         kAllEModels, kChooseEModel:
     1055            Layers[laImprovements].Lines[ScrollBar.Position + Selected].Code);
     1056        kAllEnemyModels, kChooseEnemyModel:
    9831057          if lix <> mixAll then
    9841058            MainScreen.UnitStatDlg.ShowNewContent_EnemyModel(wmPersistent, lix);
    985         kAdvance, kFarAdvance, kScience, kChooseTech, kChooseETech, kStealTech:
     1059        kAdvance, kFarAdvance, kScience, kChooseTech, kChooseEnemyTech, kStealTech:
    9861060          if lix = adMilitary then
    9871061            MainScreen.HelpDlg.ShowNewContent(wmPersistent, hkText,
     
    9991073            MainScreen.HelpDlg.ShowNewContent(wmPersistent, hkImp,
    10001074              lix and cpIndex);
    1001         kGov:
     1075        kGovernment:
    10021076          MainScreen.HelpDlg.ShowNewContent(wmPersistent, hkMisc,
    10031077            Integer(miscGovList));
    1004         kShipPart, kEShipPart:
     1078        kShipPart, kEnemyShipPart:
    10051079          ;
    10061080      end;
     
    10331107    then
    10341108    begin
    1035       Layer.Code[Layer.Lines] := Project;
    1036       Inc(Layer.Lines);
     1109      Layer.AddLine(Project);
    10371110    end;
    10381111  end;
    10391112
    1040   procedure SortTechs;
    1041   var
    1042     I, J: Integer;
    1043   begin // sort by advancedness
    1044     for I := 0 to Layers[laImprovements].Lines - 2 do
    1045       if Layers[laImprovements].Code[I] < adMilitary then
    1046         for J := I + 1 to Layers[laImprovements].Lines - 1 do
    1047           if AdvValue[Layers[laImprovements].Code[I]] * nAdv + Layers[laImprovements].Code[I] < AdvValue[Layers[laImprovements].Code[J]] *
    1048             nAdv + Layers[laImprovements].Code[J] then
    1049           begin
    1050             Layers[laImprovements].SwapCode(I, J);
    1051           end;
    1052   end;
    1053 
    1054   procedure SortCities;
    1055   var
    1056     I, J: Integer;
    1057   begin
    1058     for I := 0 to Layers[laImprovements].Lines - 2 do
    1059       for J := I + 1 to Layers[laImprovements].Lines - 1 do
    1060         if CityName(MyCity[Layers[laImprovements].Code[I]].ID) > CityName(MyCity[Layers[laImprovements].Code[J]].ID)
    1061         then
    1062           Layers[laImprovements].SwapCode(I, J);
    1063   end;
    1064 
    1065   function ModelSortValue(const mi: TModelInfo;
     1113  function ModelSortValue(const ModelInfo: TModelInfo;
    10661114    MixPlayers: Boolean = False): Integer;
    10671115  begin
    1068     Result := (mi.Domain + 1) shl 28 - mi.mix;
     1116    Result := (ModelInfo.Domain + 1) shl 28 - ModelInfo.mix;
    10691117    if MixPlayers then
    1070       Dec(Result, ModelCode(mi) shl 16);
    1071   end;
    1072 
    1073   procedure SortModels;
    1074   var
    1075     I, J, Swap: Integer;
    1076   begin // sort by code[2]
    1077     for I := 0 to Layers[laImprovements].Lines - 2 do
    1078       for J := I + 1 to Layers[laImprovements].Lines - 1 do
    1079         if Layers[laClasses].Code[I] > Layers[laClasses].Code[J] then
    1080         begin
    1081           Layers[laImprovements].SwapCode(I, J);
    1082           Layers[laWonders].SwapCode(I, J);
    1083           Layers[laClasses].SwapCode(I, J);
    1084         end;
     1118      Dec(Result, ModelCode(ModelInfo) shl 16);
    10851119  end;
    10861120
     
    11001134  L: TLayerIndex;
    11011135  Loc1, I, J, p1, dx, dy, mix, emix, EnemyType, TestEnemyType: Integer;
    1102   mi: TModelInfo;
     1136  ModelInfo: TModelInfo;
    11031137  PPicture, PTestPicture: ^TModelPicture;
    11041138  ModelOk: array [0 .. 4095] of Boolean;
     1139  Model: Integer;
    11051140  Ok: Boolean;
    11061141begin
    11071142  for L := Low(TLayerIndex) to High(TLayerIndex) do
    11081143  begin
    1109     Layers[L].Lines := 0;
     1144    Layers[L].Lines.Clear;
    11101145    Layers[L].FirstShrinkedLine := MaxInt;
    11111146  end;
     
    11151150      begin
    11161151        // improvements
    1117         Layers[laImprovements].AddCode(cpImp + imTrGoods);
     1152        Layers[laImprovements].AddLine(cpImp + imTrGoods);
    11181153        for I := nWonder to nImp - 1 do
    11191154          if Imp[I].Kind = ikCommon then
     
    11251160        for I := 0 to nCityType - 1 do
    11261161          if MyData.ImpOrder[I, 0] >= 0 then
    1127             Layers[laImprovements].AddCode(cpType + I);
     1162            Layers[laImprovements].AddLine(cpType + I);
    11281163
    11291164        // wonders
     
    11341169        for I := 0 to MyRO.nModel - 1 do
    11351170        begin
    1136           { if MyModel[i].Kind=mkSlaves then
    1137             Ok:= MyRO.Wonder[woPyramids].EffectiveOwner=Me
     1171          { if MyModel[i].Kind = mkSlaves then
     1172            Ok := MyRO.Wonder[woPyramids].EffectiveOwner = Me
    11381173            else } if MyModel[I].Domain = dSea then
    11391174          begin
     
    11581193            if MyModel[I].Status and msObsolete = 0 then
    11591194            begin
    1160               Layers[laClasses].AddCode(I);
     1195              Layers[laClasses].AddLine(I);
    11611196            end;
    11621197            if MyModel[I].Status and msAllowConscripts <> 0 then
    11631198            begin
    1164               Layers[laClasses].AddCode(I + cpConscripts);
     1199              Layers[laClasses].AddLine(I + cpConscripts);
    11651200            end;
    11661201          end;
     
    11811216            ((MyData.FarTech = adNone) or (Required[I] > 0)) then
    11821217          begin
    1183             Layers[laImprovements].AddCode(I);
    1184           end;
    1185         SortTechs;
    1186         if Layers[laImprovements].Lines = 0 then // no more techs -- offer nexus
    1187           Layers[laImprovements].AddCode(adNexus);
     1218            Layers[laImprovements].AddLine(I);
     1219          end;
     1220        Layers[laImprovements].SortTechs;
     1221        if Layers[laImprovements].Lines.Count = 0 then // no more techs -- offer nexus
     1222          Layers[laImprovements].AddLine(adNexus);
    11881223        Ok := False;
    11891224        for I := 0 to nDomains - 1 do
     
    11941229            end;
    11951230        if Ok then { new unit class }
    1196           Layers[laImprovements].AddCode(adMilitary);
     1231          Layers[laImprovements].AddLine(adMilitary);
    11971232      end;
    11981233    kFarAdvance:
    11991234      begin
    1200         Layers[laImprovements].AddCode(adNone);
     1235        Layers[laImprovements].AddLine(adNone);
    12011236        for I := 0 to nAdv - 1 do
    12021237          if not (I in FutureTech) and (MyRO.Tech[I] < tsApplicable) and
     
    12041239            ((AdvValue[I] < 1000) or (MyRO.Tech[adScience] > tsNA)) then
    12051240          begin
    1206             Layers[laImprovements].AddCode(I);
    1207           end;
    1208         SortTechs;
     1241            Layers[laImprovements].AddLine(I);
     1242          end;
     1243        Layers[laImprovements].SortTechs;
    12091244      end;
    12101245    kChooseTech:
     
    12141249            (MyRO.EnemyReport[DipMem[Me].pContact].Tech[I] < tsSeen) then
    12151250          begin
    1216             Layers[laImprovements].AddCode(I);
    1217           end;
    1218         SortTechs;
    1219         // if Lines[0] > 1 then
    1220         begin
    1221           Layers[laImprovements].AddCode(adAll);
    1222         end;
    1223       end;
    1224     kChooseETech:
     1251            Layers[laImprovements].AddLine(I);
     1252          end;
     1253        Layers[laImprovements].SortTechs;
     1254        // if Layers[0].Lines.Count > 1 then
     1255        begin
     1256          Layers[laImprovements].AddLine(adAll);
     1257        end;
     1258      end;
     1259    kChooseEnemyTech:
    12251260      begin
    12261261        for I := 0 to nAdv - 1 do
     
    12281263            (MyRO.EnemyReport[DipMem[Me].pContact].Tech[I] >= tsApplicable) then
    12291264          begin
    1230             Layers[laImprovements].AddCode(I);
    1231           end;
    1232         SortTechs;
    1233         // if Lines[0] > 1 then
    1234         begin
    1235           Layers[laImprovements].AddCode(adAll);
     1265            Layers[laImprovements].AddLine(I);
     1266          end;
     1267        Layers[laImprovements].SortTechs;
     1268        // if LAyers[0].Lines.Count > 1 then
     1269        begin
     1270          Layers[laImprovements].AddLine(adAll);
    12361271        end;
    12371272      end;
     
    12411276          if Server(sStealTech - sExecute, Me, I, nil^) >= rExecuted then
    12421277          begin
    1243             Layers[laImprovements].AddCode(I);
    1244           end;
    1245         SortTechs;
     1278            Layers[laImprovements].AddLine(I);
     1279          end;
     1280        Layers[laImprovements].SortTechs;
    12461281      end;
    12471282    kScience:
     
    12771312                Ok := True;
    12781313          if Ok then
    1279             Layers[laImprovements].AddCode(I);
    1280         end;
    1281         SortTechs;
     1314            Layers[laImprovements].AddLine(I);
     1315        end;
     1316        Layers[laImprovements].SortTechs;
    12821317
    12831318        Ok := MyRO.ResearchTech = adMilitary;
     
    12901325              end;
    12911326        if Ok then
    1292           Layers[laImprovements].AddCode(adMilitary);
     1327          Layers[laImprovements].AddLine(adMilitary);
    12931328      end;
    12941329    kCities { , kChooseCity } :
     
    12981333            if MyCity[I].Loc >= 0 then
    12991334            begin
    1300               Layers[laImprovements].AddCode(I);
     1335              Layers[laImprovements].AddLine(I);
    13011336            end;
    1302         SortCities;
     1337        Layers[laImprovements].SortCities;
    13031338        Layers[laImprovements].FirstShrinkedLine := 0;
    13041339      end;
     
    13081343          if (MyCity[I].Loc >= 0) and (MyCity[I].Flags and CityRepMask <> 0)
    13091344          then begin
    1310             Layers[laImprovements].AddCode(I);
    1311           end;
    1312         SortCities;
     1345            Layers[laImprovements].AddLine(I);
     1346          end;
     1347        Layers[laImprovements].SortCities;
    13131348        Layers[laImprovements].FirstShrinkedLine := 0;
    13141349      end;
    1315     { kChooseECity:
     1350    { kChooseEnemyCity:
    13161351      begin
    13171352      for I := 0 to MyRO.nEnemyCity - 1 do
     
    13271362        for mix := 0 to MyRO.nModel - 1 do
    13281363        begin
    1329           Layers[laImprovements].Code[mix] := mix;
    1330           MakeModelInfo(Me, mix, MyModel[mix], mi);
    1331           Layers[laClasses].Code[mix] := ModelSortValue(mi);
    1332         end;
    1333         Layers[laImprovements].Lines := MyRO.nModel;
    1334         SortModels;
     1364          MakeModelInfo(Me, mix, MyModel[mix], ModelInfo);
     1365          Layers[laImprovements].AddLine(mix, 0, ModelSortValue(ModelInfo));
     1366        end;
     1367        Layers[laImprovements].SortModels;
    13351368        Layers[laImprovements].FirstShrinkedLine := 0;
    13361369      end;
     
    13391372        for mix := 3 to MyRO.nModel - 1 do
    13401373        begin // check if opponent already has this model
    1341           MakeModelInfo(Me, mix, MyModel[mix], mi);
     1374          MakeModelInfo(Me, mix, MyModel[mix], ModelInfo);
    13421375          Ok := True;
    13431376          for emix := 0 to MyRO.nEnemyModel - 1 do
    13441377            if (MyRO.EnemyModel[emix].Owner = DipMem[Me].pContact) and
    1345               IsSameModel(MyRO.EnemyModel[emix], mi) then begin
     1378              IsSameModel(MyRO.EnemyModel[emix], ModelInfo) then begin
    13461379                Ok := False;
    13471380                Break;
     
    13491382          if Ok then
    13501383          begin
    1351             Layers[laImprovements].Code[Layers[laImprovements].Lines] := mix;
    1352             MakeModelInfo(Me, mix, MyModel[mix], mi);
    1353             Layers[laClasses].Code[Layers[laImprovements].Lines] := ModelSortValue(mi);
    1354             Inc(Layers[laImprovements].Lines);
    1355           end;
    1356         end;
    1357         SortModels;
    1358           Layers[laImprovements].AddCode(mixAll);
    1359           Layers[laImprovements].FirstShrinkedLine := 0;
    1360       end;
    1361     kChooseEModel:
     1384            MakeModelInfo(Me, mix, MyModel[mix], ModelInfo);
     1385            Layers[laImprovements].AddLine(mix, 0, ModelSortValue(ModelInfo));
     1386          end;
     1387        end;
     1388        Layers[laImprovements].SortModels;
     1389        Layers[laImprovements].AddLine(mixAll);
     1390        Layers[laImprovements].FirstShrinkedLine := 0;
     1391      end;
     1392    kChooseEnemyModel:
    13621393      begin
    13631394        if MyRO.TestFlags and tfUncover <> 0 then
     
    13671398        for mix := 0 to MyRO.nModel - 1 do
    13681399        begin // don't list models I already have
    1369           MakeModelInfo(Me, mix, MyModel[mix], mi);
     1400          MakeModelInfo(Me, mix, MyModel[mix], ModelInfo);
    13701401          for emix := 0 to MyRO.nEnemyModel - 1 do
    13711402            ModelOk[emix] := ModelOk[emix] and
    1372               not IsSameModel(MyRO.EnemyModel[emix], mi);
     1403              not IsSameModel(MyRO.EnemyModel[emix], ModelInfo);
    13731404        end;
    13741405        for emix := 0 to MyRO.nEnemyModel - 1 do
     
    13781409              [MyRO.EnemyModel[emix].mix].HGr) then
    13791410              InitEnemyModel(emix);
    1380             Layers[laImprovements].Code[Layers[laImprovements].Lines] := emix;
    1381             Layers[laClasses].Code[Layers[laImprovements].Lines] := ModelSortValue(MyRO.EnemyModel[emix]);
    1382             Inc(Layers[laImprovements].Lines);
    1383           end;
    1384         SortModels;
     1411            Layers[laImprovements].AddLine(emix, 0, ModelSortValue(MyRO.EnemyModel[emix]));
     1412          end;
     1413        Layers[laImprovements].SortModels;
    13851414        // if not IsMilReportNew(DipMem[me].pContact) or (Layers[laImprovements].Lines > 1) then
    13861415        begin
    1387           Layers[laImprovements].AddCode(mixAll);
     1416          Layers[laImprovements].AddLine(mixAll);
    13881417        end;
    13891418        Layers[laImprovements].FirstShrinkedLine := 0;
    13901419      end;
    1391     kEModels:
    1392       begin
    1393         for I := 0 to MyRO.EnemyReport[pView].nModelCounted - 1 do
    1394         begin
    1395           Layers[laWonders].Code[Layers[laImprovements].Lines] := MyRO.nEnemyModel - 1;
    1396           while (Layers[laWonders].Code[Layers[laImprovements].Lines] >= 0) and
    1397             not ((MyRO.EnemyModel[Layers[laWonders].Code[Layers[laImprovements].Lines]].Owner = pView) and
    1398             (MyRO.EnemyModel[Layers[laWonders].Code[Layers[laImprovements].Lines]].mix = I)) do
    1399             Dec(Layers[laWonders].Code[Layers[laImprovements].Lines]);
    1400           if not Assigned(Tribe[pView].ModelPicture[I].HGr) then
    1401             InitEnemyModel(Layers[laWonders].Code[Layers[laImprovements].Lines]);
    1402           Layers[laImprovements].Code[Layers[laImprovements].Lines] := I;
    1403           Layers[laClasses].Code[Layers[laImprovements].Lines] :=
    1404             ModelSortValue(MyRO.EnemyModel[Layers[laWonders].Code[Layers[laImprovements].Lines]]);
    1405           Inc(Layers[laImprovements].Lines);
    1406         end;
    1407         SortModels;
     1420    kEnemyModels:
     1421      begin
     1422        for I := 0 to MyRO.EnemyReport[PlayerView].nModelCounted - 1 do
     1423        begin
     1424          Model := MyRO.nEnemyModel - 1;
     1425
     1426          while (Model >= 0) and
     1427            not ((MyRO.EnemyModel[Model].Owner = PlayerView) and
     1428            (MyRO.EnemyModel[Model].mix = I)) do
     1429            Dec(Model);
     1430
     1431          if not Assigned(Tribe[PlayerView].ModelPicture[I].HGr) then
     1432            InitEnemyModel(Model);
     1433
     1434          Layers[laImprovements].AddLine(I, Model, ModelSortValue(MyRO.EnemyModel[Model]));
     1435        end;
     1436        Layers[laImprovements].SortModels;
    14081437        Layers[laImprovements].FirstShrinkedLine := 0;
    14091438      end;
    1410     kAllEModels:
     1439    kAllEnemyModels:
    14111440      begin
    14121441        if (MyRO.TestFlags and tfUncover <> 0) or (G.Difficulty[Me] = 0) then
     
    14231452            Ok := True;
    14241453            if MainScreen.mNames.Checked then
    1425               for J := 0 to Layers[laImprovements].Lines - 1 do
     1454              for J := 0 to Layers[laImprovements].Lines.Count - 1 do
    14261455              begin
    1427                 PTestPicture := @Tribe[MyRO.EnemyModel[Layers[laImprovements].Code[J]].Owner]
    1428                   .ModelPicture[MyRO.EnemyModel[Layers[laImprovements].Code[J]].mix];
     1456                Model := Layers[laImprovements].Lines[J].Code;
     1457                PTestPicture := @Tribe[MyRO.EnemyModel[Model].Owner]
     1458                  .ModelPicture[MyRO.EnemyModel[Model].mix];
    14291459                if (PPicture.HGr = PTestPicture.HGr) and
    14301460                  (PPicture.pix = PTestPicture.pix) and
    14311461                  (ModelHash(MyRO.EnemyModel[emix])
    1432                   = ModelHash(MyRO.EnemyModel[Layers[laImprovements].Code[J]])) then
     1462                  = ModelHash(MyRO.EnemyModel[Model])) then
    14331463                begin
    1434                   Layers[laWonders].Code[J] := 1;
     1464                  Layers[laImprovements].Lines[J].Model := 1;
    14351465                  Ok := False;
    14361466                  Break;
    14371467                end;
    14381468              end;
    1439             if Ok then
    1440             begin
    1441               Layers[laImprovements].Code[Layers[laImprovements].Lines] := emix;
    1442               Layers[laWonders].Code[Layers[laImprovements].Lines] := 0;
    1443               Layers[laClasses].Code[Layers[laImprovements].Lines] := ModelSortValue(MyRO.EnemyModel[emix], True);
    1444               Inc(Layers[laImprovements].Lines);
     1469            if Ok then begin
     1470              Layers[laImprovements].AddLine(emix, 0, ModelSortValue(MyRO.EnemyModel[emix], True));
    14451471            end;
    14461472          end;
    1447         SortModels;
     1473        Layers[laImprovements].SortModels;
    14481474        Layers[laImprovements].FirstShrinkedLine := 0;
    14491475      end;
     
    14511477      for I := 0 to TribeNames.Count - 1 do
    14521478      begin
    1453         Layers[laImprovements].AddCode(I);
     1479        Layers[laImprovements].AddLine(I);
    14541480      end;
    14551481    (* kDeliver:
    1456       if MyRO.Treaty[DipMem[Me].pContact]<trAlliance then
     1482      if MyRO.Treaty[DipMem[Me].pContact] < trAlliance then
    14571483      begin // suggest next treaty level
    1458       Code[0,Lines[0]]:=opTreaty+MyRO.Treaty[DipMem[Me].pContact]+1;
    1459       Inc(Lines[0]);
    1460       end;
    1461       if MyRO.Treaty[DipMem[Me].pContact]=trNone then
     1484        Layers[laImprovements].AddLine(opTreaty + MyRO.Treaty[DipMem[Me].pContact] + 1);
     1485      end;
     1486      if MyRO.Treaty[DipMem[Me].pContact] = trNone then
    14621487      begin // suggest peace
    1463       Code[0,Lines[0]]:=opTreaty+trPeace;
    1464       Inc(Lines[0]);
    1465       end;
    1466       if MyRO.Treaty[DipMem[Me].pContact]>trNone then
     1488        Layers[laImprovements].AddLine(opTreaty + trPeace);
     1489      end;
     1490      if MyRO.Treaty[DipMem[Me].pContact] > trNone then
    14671491      begin // suggest next treaty level
    1468       Code[0,Lines[0]]:=opTreaty+MyRO.Treaty[DipMem[Me].pContact]-1;
    1469       Inc(Lines[0]);
     1492        Layers[laImprovements].AddLine(opTreaty + MyRO.Treaty[DipMem[Me].pContact] - 1);
    14701493      end; *)
    14711494    kShipPart:
    14721495      begin
    1473         Layers[laImprovements].Lines := 0;
     1496        Layers[laImprovements].Lines.Clear;
    14741497        for I := 0 to nShipPart - 1 do
    14751498          if MyRO.Ship[Me].Parts[I] > 0 then
    14761499          begin
    1477             Layers[laImprovements].AddCode(I);
    1478           end;
    1479       end;
    1480     kEShipPart:
    1481       begin
    1482         Layers[laImprovements].Lines := 0;
     1500            Layers[laImprovements].AddLine(I);
     1501          end;
     1502      end;
     1503    kEnemyShipPart:
     1504      begin
     1505        Layers[laImprovements].Lines.Clear;
    14831506        for I := 0 to nShipPart - 1 do
    14841507          if MyRO.Ship[DipMem[Me].pContact].Parts[I] > 0 then
    14851508          begin
    1486             Layers[laImprovements].AddCode(I);
    1487           end;
    1488       end;
    1489     kGov:
     1509            Layers[laImprovements].AddLine(I);
     1510          end;
     1511      end;
     1512    kGovernment:
    14901513      for I := 1 to nGov - 1 do
    14911514        if (GovPreq[I] <> preNA) and
     
    14931516        then
    14941517        begin
    1495           Layers[laImprovements].AddCode(I);
     1518          Layers[laImprovements].AddLine(I);
    14961519        end;
    14971520    kMission:
    14981521      for I := 0 to nSpyMission - 1 do
    14991522      begin
    1500         Layers[laImprovements].AddCode(I);
     1523        Layers[laImprovements].AddLine(I);
    15011524      end;
    15021525  end;
     
    15041527  // Test if choice fitting to one screen
    15051528  if Kind = kProject then
    1506     if Layers[laImprovements].Lines + Layers[laWonders].Lines + Layers[laClasses].Lines <= MaxLines then
     1529    if Layers[laImprovements].Lines.Count + Layers[laWonders].Lines.Count + Layers[laClasses].Lines.Count <= MaxLines then
    15071530    begin
    15081531      // Add wonders to first page
    1509       for I := 0 to Layers[laWonders].Lines - 1 do
    1510         Layers[laImprovements].AddCode(Layers[laWonders].Code[I]);
    1511       Layers[laWonders].Lines := 0;
    1512 
    1513       Layers[laImprovements].FirstShrinkedLine := Layers[laImprovements].Lines;
     1532      for I := 0 to Layers[laWonders].Lines.Count - 1 do
     1533        Layers[laImprovements].AddLine(Layers[laWonders].Lines[I].Code, Layers[laWonders].Lines[I].Model, Layers[laWonders].Lines[I].ModelSortValue);
     1534      Layers[laWonders].Lines.Clear;
     1535
     1536      Layers[laImprovements].FirstShrinkedLine := Layers[laImprovements].Lines.Count;
    15141537
    15151538      // Add models to first page
    1516       for I := 0 to Layers[laClasses].Lines - 1 do
    1517         Layers[laImprovements].AddCode(Layers[laClasses].Code[I]);
    1518       Layers[laClasses].Lines := 0;
     1539      for I := 0 to Layers[laClasses].Lines.Count - 1 do
     1540        Layers[laImprovements].AddLine(Layers[laClasses].Lines[I].Code, Layers[laClasses].Lines[I].Model, Layers[laClasses].Lines[I].ModelSortValue);
     1541      Layers[laClasses].Lines.Clear;
    15191542    end;
    15201543end;
     
    15241547  Kind := TestKind;
    15251548  InitLines;
    1526   if Layers[laImprovements].Lines = 0 then
     1549  if Layers[laImprovements].Lines.Count = 0 then
    15271550    Result := -2
    1528   else if Layers[laImprovements].Lines > 1 then
     1551  else if Layers[laImprovements].Lines.Count > 1 then
    15291552    Result := -1
    15301553  else
    1531     Result := Layers[laImprovements].Code[0];
     1554    Result := Layers[laImprovements].Lines[0].Code;
    15321555end;
    15331556
     
    15561579  MultiPage := False;
    15571580  for L := laWonders to High(TLayerIndex) do
    1558     if Layers[L].Lines > 0 then begin
     1581    if Layers[L].Lines.Count > 0 then begin
    15591582      MultiPage := True;
    15601583      Break;
     
    15651588    (Kind in [kProject, kAdvance, kFarAdvance]);
    15661589  if (Kind = kAdvance) and (MyData.FarTech <> adNone) or (Kind = kModels) or
    1567     (Kind = kEModels) then begin
     1590    (Kind = kEnemyModels) then begin
    15681591    ScrollBar.SetBorderSpacing(56, 10, 10);
    15691592    TitleHeight := WideFrame + 20;
     
    15731596  end;
    15741597
    1575   DispLines := Layers[laImprovements].Lines;
     1598  DispLines := Layers[laImprovements].Lines.Count;
    15761599  for L := Low(TLayerIndex) to High(TLayerIndex) do
    1577     if Layers[L].Lines > DispLines then
    1578       DispLines := Layers[L].Lines;
     1600    if Layers[L].Lines.Count > DispLines then
     1601      DispLines := Layers[L].Lines.Count;
    15791602  if WideBottom then
    15801603  begin
     
    15951618  TechNameSpace := 224;
    15961619  case Kind of
    1597     kGov:
     1620    kGovernment:
    15981621      InnerWidth := 272;
    15991622    kCities, kCityEvents:
    16001623      InnerWidth := 640 - 18;
    16011624    kTribe:
    1602       if Layers[laImprovements].Lines > MaxLines then
     1625      if Layers[laImprovements].Lines.Count > MaxLines then
    16031626        InnerWidth := 280 + GetSystemMetrics(SM_CXVSCROLL)
    16041627      else
     
    16171640      InnerWidth := 104 - 33 + 15 + 8 + TechNameSpace + 24 +
    16181641        GetSystemMetrics(SM_CXVSCROLL);
    1619     kChooseTech, kChooseETech, kStealTech:
     1642    kChooseTech, kChooseEnemyTech, kStealTech:
    16201643      InnerWidth := 104 - 33 + 15 + 8 + TechNameSpace +
    16211644        GetSystemMetrics(SM_CXVSCROLL);
     
    16441667  end;
    16451668
    1646   LayerImprovementsButton.Visible := MultiPage and (Layers[laImprovements].Lines > 0);
    1647   LayerWondersButton.Visible := MultiPage and (Layers[laWonders].Lines > 0);
    1648   LayerClassesButton.Visible := MultiPage and (Layers[laClasses].Lines > 0);
     1669  LayerImprovementsButton.Visible := MultiPage and (Layers[laImprovements].Lines.Count > 0);
     1670  LayerWondersButton.Visible := MultiPage and (Layers[laWonders].Lines.Count > 0);
     1671  LayerClassesButton.Visible := MultiPage and (Layers[laClasses].Lines.Count > 0);
    16491672
    16501673  if Kind = kProject then
     
    16641687  Selected := -2;
    16651688  ScienceNation := -1;
    1666   ScrollBar.Init(Layer.Lines - 1, DispLines);
     1689  ScrollBar.Init(Layer.Lines.Count - 1, DispLines);
    16671690
    16681691  OffscreenPaint;
     
    16771700    not ((Kind = kCities) and (ListKind = kCityEvents)) and
    16781701    not ((Kind = kCityEvents) and (ListKind = kCities)) and
    1679     not ((Kind = kModels) and (ListKind = kEModels)) and
    1680     not ((Kind = kEModels) and (ListKind = kModels));
     1702    not ((Kind = kModels) and (ListKind = kEnemyModels)) and
     1703    not ((Kind = kEnemyModels) and (ListKind = kModels));
    16811704
    16821705  Kind := ListKind;
     
    16891712    kFarAdvance:
    16901713      Caption := Phrases.Lookup('TITLE_FARTECH');
    1691     kModels, kEModels:
     1714    kModels, kEnemyModels:
    16921715      Caption := Phrases.Lookup('FRMILREP');
    1693     kAllEModels:
     1716    kAllEnemyModels:
    16941717      Caption := Phrases.Lookup('TITLE_EMODELS');
    16951718    kTribe:
     
    16971720    kScience:
    16981721      Caption := Phrases.Lookup('TITLE_SCIENCE');
    1699     kShipPart, kEShipPart:
     1722    kShipPart, kEnemyShipPart:
    17001723      Caption := Phrases.Lookup('TITLE_CHOOSESHIPPART');
    1701     kChooseTech, kChooseETech:
     1724    kChooseTech, kChooseEnemyTech:
    17021725      Caption := Phrases.Lookup('TITLE_CHOOSETECH');
    1703     kChooseModel, kChooseEModel:
     1726    kChooseModel, kChooseEnemyModel:
    17041727      Caption := Phrases.Lookup('TITLE_CHOOSEMODEL');
    17051728    kStealTech:
    17061729      Caption := Phrases.Lookup('TITLE_CHOOSETECH');
    1707     kGov:
     1730    kGovernment:
    17081731      Caption := Phrases.Lookup('TITLE_GOV');
    17091732    kMission:
     
    17501773    end;
    17511774  ToggleBtn.Visible := (Kind = kCities) and not Supervising or (Kind = kAdvance)
    1752     and ShowFocus or (Kind = kModels) or (Kind = kEModels);
     1775    and ShowFocus or (Kind = kModels) or (Kind = kEnemyModels);
    17531776  CloseBtn.Visible := not (Kind in MustChooseKind);
    17541777
     
    17621785end;
    17631786
    1764 procedure TListDlg.ShowNewContent_MilReport(NewMode: TWindowMode; P: Integer);
    1765 begin
    1766   pView := P;
    1767   if P = Me then
     1787procedure TListDlg.ShowNewContent_MilReport(NewMode: TWindowMode; Player: Integer);
     1788begin
     1789  PlayerView := Player;
     1790  if Player = Me then
    17681791    ShowNewContent(NewMode, kModels)
    17691792  else
    1770     ShowNewContent(NewMode, kEModels);
     1793    ShowNewContent(NewMode, kEnemyModels);
    17711794end;
    17721795
     
    17771800  else
    17781801  begin
    1779     Kind := kEModels;
    1780     pView := TComponent(Sender).Tag;
     1802    Kind := kEnemyModels;
     1803    PlayerView := TComponent(Sender).Tag;
    17811804  end;
    17821805  InitLines;
    17831806  Selected := -2;
    1784   ScrollBar.Init(Layer.Lines - 1, DispLines);
     1807  ScrollBar.Init(Layer.Lines.Count - 1, DispLines);
    17851808  OffscreenPaint;
    17861809  Invalidate;
     
    17951818
    17961819  Selected := -2;
    1797   ScrollBar.Init(Layer.Lines - 1, DispLines);
     1820  ScrollBar.Init(Layer.Lines.Count - 1, DispLines);
    17981821  SmartUpdateContent;
    17991822end;
     
    18201843        Invalidate;
    18211844      end;
    1822     kModels, kEModels:
     1845    kModels, kEnemyModels:
    18231846      begin
    18241847        EmptyMenu(Popup.Items);
     
    18431866            M.Tag := p1;
    18441867            M.OnClick := PlayerClick;
    1845             if (Kind = kEModels) and (p1 = pView) then
     1868            if (Kind = kEnemyModels) and (p1 = PlayerView) then
    18461869              M.Checked := True;
    18471870            Popup.Items.Add(M);
     
    18671890begin
    18681891  if Index < 0 then Index := 0;
    1869   if Index > Layer.Lines - 1 then Index := Layer.Lines - 1;
     1892  if Index > Layer.Lines.Count - 1 then Index := Layer.Lines.Count - 1;
    18701893
    18711894  NewSelected := Index - ScrollBar.Position;
    18721895  NewScrollBarPos := ScrollBar.Position;
    18731896
    1874   Over := NewSelected - Min(DispLines, Layer.Lines - NewScrollBarPos);
     1897  Over := NewSelected - Min(DispLines, Layer.Lines.Count - NewScrollBarPos);
    18751898  if Over > 0 then begin
    18761899    Inc(NewScrollBarPos, Over);
     
    18851908
    18861909  if (NewSelected <> Selected) or (NewScrollBarPos <> ScrollBar.Position) then begin
    1887     if Selected >= 0 then Line(Canvas, Selected, False, False);
     1910    if Selected >= 0 then PaintLine(Canvas, Selected, False, False);
    18881911
    18891912    ScrollBar.Position := NewScrollBarPos;
    18901913    Selected := NewSelected;
    18911914
    1892     Line(Canvas, Selected, False, True);
     1915    PaintLine(Canvas, Selected, False, True);
    18931916  end;
    18941917end;
     
    19041927      if Layer = Layers[laImprovements] then Layer := Layers[laClasses]
    19051928      else if Layer = Layers[laClasses] then Layer := Layers[laWonders];
    1906       if Layer.Lines = 0 then Layer := Layers[laWonders];
     1929      if Layer.Lines.Count = 0 then Layer := Layers[laWonders];
    19071930      LayerImprovementsButton.Down := Layer = Layers[laImprovements];
    19081931      LayerWondersButton.Down := Layer = Layers[laWonders];
    19091932      LayerClassesButton.Down := Layer = Layers[laClasses];
    1910       ScrollBar.Init(Layer.Lines - 1, DispLines);
     1933      ScrollBar.Init(Layer.Lines.Count - 1, DispLines);
    19111934      SetSelectionIndex(LastSelectionIndex);
    19121935      SmartUpdateContent;
     
    19181941      if Layer = Layers[laWonders] then Layer := Layers[laClasses]
    19191942      else if Layer = Layers[laClasses] then Layer := Layers[laImprovements];
    1920       if Layer.Lines = 0 then Layer := Layers[laImprovements];
     1943      if Layer.Lines.Count = 0 then Layer := Layers[laImprovements];
    19211944      LayerImprovementsButton.Down := Layer = Layers[laImprovements];
    19221945      LayerWondersButton.Down := Layer = Layers[laWonders];
    19231946      LayerClassesButton.Down := Layer = Layers[laClasses];
    1924       ScrollBar.Init(Layer.Lines - 1, DispLines);
     1947      ScrollBar.Init(Layer.Lines.Count - 1, DispLines);
    19251948      SetSelectionIndex(LastSelectionIndex);
    19261949      SmartUpdateContent;
     
    19371960  end else
    19381961  if (Key = VK_END) or (Key = VK_NUMPAD1) then begin
    1939     SetSelectionIndex(Layer.Lines);
     1962    SetSelectionIndex(Layer.Lines.Count);
    19401963  end else
    19411964  if (Key = VK_PRIOR) or (Key = VK_NUMPAD9) then begin
     
    19481971    PaintBox1MouseDown(Self, TMouseButton.mbLeft, [ssLeft], 0, 0);
    19491972  end else
    1950   if (Key = VK_F2) and (Kind in [kModels, kEModels]) then // my key
     1973  if (Key = VK_F2) and (Kind in [kModels, kEnemyModels]) then // my key
    19511974    // !!! toggle
    19521975  else if (Key = VK_F3) and (Kind in [kCities, kCityEvents]) then // my key
  • trunk/LocalPlayer/Term.pas

    r670 r674  
    23002300    if MyRO.Happened and phChangeGov <> 0 then
    23012301    begin
    2302       ModalSelectDlg.ShowNewContent(wmModal, kGov);
     2302      ModalSelectDlg.ShowNewContent(wmModal, kGovernment);
    23032303      Play('NEWGOV');
    23042304      Server(sSetGovernment, Me, ModalSelectDlg.Result, nil^);
     
    38063806begin
    38073807  if MyRO.nEnemyModel > 0 then
    3808     ListDlg.ShowNewContent(wmPersistent, kAllEModels);
     3808    ListDlg.ShowNewContent(wmPersistent, kAllEnemyModels);
    38093809end;
    38103810
     
    40424042      if MyRO.Happened and phChangeGov <> 0 then
    40434043      begin
    4044         ModalSelectDlg.ShowNewContent(wmModal, kGov);
     4044        ModalSelectDlg.ShowNewContent(wmModal, kGovernment);
    40454045        if ModalSelectDlg.Result >= 0 then
    40464046        begin
Note: See TracChangeset for help on using the changeset viewer.