Changeset 4 for trunk/UMainForm.pas


Ignore:
Timestamp:
Feb 3, 2011, 8:01:00 AM (13 years ago)
Author:
chronos
Message:
  • Fixed: Add and edit operations.
File:
1 edited

Legend:

Unmodified
Added
Removed
  • trunk/UMainForm.pas

    r3 r4  
    77uses
    88  Classes, SysUtils, FileUtil, Forms, Controls, Graphics, Dialogs, ComCtrls,
    9   StdCtrls, ActnList, Contnrs, USource, UInstance, UOptions,
     9  StdCtrls, ActnList, Menus, Contnrs, USource, UInstance, UOptions,
    1010  DOM, XMLWrite, XMLRead, HTTPSend;
    1111
     
    1414  SourceURL = 'http://tv.zdechov.net/fpc/SourceList.xml';
    1515
     16const
     17  BooleanText: array[Boolean] of string = ('No', 'Yes');
     18
    1619type
    1720
     
    2124    AAdd: TAction;
    2225    ACompile: TAction;
    23     AOptions: TAction;
     26    AUpdate: TAction;
     27    AEdit: TAction;
    2428    ARemove: TAction;
    2529    AStart: TAction;
    26     AUpdate: TAction;
     30    ADownload: TAction;
    2731    ActionList1: TActionList;
    2832    Button1: TButton;
     
    3135    Button4: TButton;
    3236    Button5: TButton;
     37    ButtonEdit: TButton;
    3338    Button6: TButton;
    3439    Label1: TLabel;
    3540    ListView1: TListView;
     41    MenuItem1: TMenuItem;
     42    MenuItem2: TMenuItem;
     43    MenuItem3: TMenuItem;
     44    MenuItem4: TMenuItem;
     45    MenuItem5: TMenuItem;
     46    MenuItem6: TMenuItem;
     47    PopupMenu1: TPopupMenu;
    3648    procedure AAddExecute(Sender: TObject);
    3749    procedure ACompileExecute(Sender: TObject);
     50    procedure AEditExecute(Sender: TObject);
    3851    procedure ARemoveExecute(Sender: TObject);
    3952    procedure AStartExecute(Sender: TObject);
     53    procedure ADownloadExecute(Sender: TObject);
    4054    procedure AUpdateExecute(Sender: TObject);
    4155    procedure FormCreate(Sender: TObject);
     
    5064    procedure SaveInstanceList;
    5165  public
    52     Instances: TObjectList;
     66    Instances: TInstanceList;
    5367    Sources: TSourceList;
    5468  end;
     
    6579procedure TMainForm.FormCreate(Sender: TObject);
    6680begin
    67   Instances := TObjectList.Create;
     81  Instances := TInstanceList.Create;
    6882  Sources := TSourceList.Create;
    6983  LoadInstanceList;
     
    7286procedure TMainForm.AAddExecute(Sender: TObject);
    7387begin
    74   OptionsForm.ShowModal;
     88  OptionsForm.Instance := nil;
     89  if OptionsForm.ShowModal = mrOK then begin
     90    Instances.Add(OptionsForm.Instance);
     91    ReloadList;
     92  end;
    7593end;
    7694
     
    84102end;
    85103
     104procedure TMainForm.AEditExecute(Sender: TObject);
     105begin
     106  if Assigned(ListView1.Selected) then begin
     107    OptionsForm.Instance := ListView1.Selected.Data;
     108    if OptionsForm.ShowModal = mrYes then
     109      ReloadList;
     110  end;
     111end;
     112
    86113procedure TMainForm.ARemoveExecute(Sender: TObject);
    87114begin
     
    98125    if ListView1.Selected.Index < Instances.Count then begin
    99126      TInstance(Instances[ListView1.Selected.Index]).Start;
     127      ReloadList;
     128    end;
     129end;
     130
     131procedure TMainForm.ADownloadExecute(Sender: TObject);
     132begin
     133  if Assigned(ListView1.Selected) then
     134    if ListView1.Selected.Index < Instances.Count then begin
     135      TInstance(Instances[ListView1.Selected.Index]).Download;
    100136      ReloadList;
    101137    end;
     
    120156procedure TMainForm.FormShow(Sender: TObject);
    121157begin
     158  ReloadList;
    122159  ListView1SelectItem(nil, nil, False);
    123160end;
     
    129166    Item.Caption := Name;
    130167    Item.Data := Instances[Item.Index];
    131     Item.SubItems.Add(FPCRevision);
    132     Item.SubItems.Add(IDERevision);
     168    if Assigned(FPCSource) then
     169      Item.SubItems.Add(FPCSource.Name + ' ' + FPCSource.VersionNumber)
     170      else Item.SubItems.Add('');
     171    if Assigned(IDESource) then
     172      Item.SubItems.Add(IDESource.Name + ' ' + IDESource.VersionNumber)
     173      else Item.SubItems.Add('');
     174    Item.SubItems.Add(BooleanText[Downloaded]);
     175    Item.SubItems.Add(BooleanText[Compiled]);
    133176  end;
    134177end;
     
    137180  Selected: Boolean);
    138181begin
    139   ACompile.Enabled := Assigned(ListView1.Selected);
    140   AUpdate.Enabled := Assigned(ListView1.Selected);
    141   AStart.Enabled := Assigned(ListView1.Selected);
    142   ARemove.Enabled := Assigned(ListView1.Selected);
    143   AOptions.Enabled := Assigned(ListView1.Selected);
     182  if Assigned(ListView1.Selected) then
     183  with TInstance(ListView1.Selected.Data) do begin
     184    AEdit.Enabled := True;
     185    ACompile.Enabled := Downloaded;
     186    ADownload.Enabled := True;
     187    AStart.Enabled := Downloaded and Compiled;
     188    ARemove.Enabled := True;
     189  end else begin
     190    AEdit.Enabled := False;
     191    ACompile.Enabled := False;
     192    ADownload.Enabled := False;
     193    AStart.Enabled := False;
     194    ARemove.Enabled := False;
     195  end;
    144196end;
    145197
     
    164216    ReadXMLFile(Doc, UTF8Decode(ConfigFileName));
    165217
    166     Instances.Free;
    167     Sources.Free;
     218    Instances.Clear;
     219    Sources.Clear;
    168220
    169221    NewNode := Doc.DocumentElement.FindNode('Sources');
     
    172224      NewSource := TSource.Create;
    173225      with NewSource do begin
    174         NewNode := Doc.DocumentElement.FindNode('Id');
     226        NewNode := Child.FindNode('Id');
    175227        if Assigned(NewNode) then
    176228          Id := StrToInt(NewNode.TextContent);
    177         NewNode := Doc.DocumentElement.FindNode('Name');
     229        NewNode := Child.FindNode('Name');
    178230        if Assigned(NewNode) then
    179231          Name := UTF8Encode(string(NewNode.TextContent));
    180         NewNode := Doc.DocumentElement.FindNode('SubversionURL');
     232        NewNode := Child.FindNode('SubversionURL');
    181233        if Assigned(NewNode) then
    182234          SubversionURL := UTF8Encode(string(NewNode.TextContent));
    183         NewNode := Doc.DocumentElement.FindNode('VersionNumber');
     235        NewNode := Child.FindNode('VersionNumber');
    184236        if Assigned(NewNode) then
    185237          VersionNumber := UTF8Encode(string(NewNode.TextContent));
    186         NewNode := Doc.DocumentElement.FindNode('VersionType');
     238        NewNode := Child.FindNode('VersionType');
    187239        if Assigned(NewNode) then
    188240          VersionType := UTF8Encode(string(NewNode.TextContent));
    189         NewNode := Doc.DocumentElement.FindNode('SourceType');
     241        NewNode := Child.FindNode('SourceType');
    190242        if Assigned(NewNode) then
    191243          SourceType := TSourceType(StrToInt(NewNode.TextContent));
    192244      end;
     245      Sources.Add(NewSource);
    193246      Child := Child.NextSibling;
    194247    end;
     
    199252      NewInstance := TInstance.Create;
    200253      with NewInstance do begin
    201         NewNode := Doc.DocumentElement.FindNode('Id');
     254        NewNode := Child.FindNode('Id');
    202255        if Assigned(NewNode) then
    203256          Id := StrToInt(NewNode.TextContent);
    204         NewNode := Doc.DocumentElement.FindNode('Name');
     257        NewNode := Child.FindNode('Name');
    205258        if Assigned(NewNode) then
    206259          Name := UTF8Encode(string(NewNode.TextContent));
    207         NewNode := Doc.DocumentElement.FindNode('IDEDate');
     260        NewNode := Child.FindNode('IDEDate');
    208261        if Assigned(NewNode) then
    209262          IDEDate := StrToDateTime(string(NewNode.TextContent));
    210         NewNode := Doc.DocumentElement.FindNode('IDERevision');
     263        NewNode := Child.FindNode('IDERevision');
    211264        if Assigned(NewNode) then
    212265          IDERevision := UTF8Encode(string(NewNode.TextContent));
    213         NewNode := Doc.DocumentElement.FindNode('IDESource');
     266        NewNode := Child.FindNode('IDESource');
    214267        if Assigned(NewNode) then
    215268          IDESource := Sources.FindById(StrToInt(NewNode.TextContent));
    216         NewNode := Doc.DocumentElement.FindNode('FPCDate');
     269        NewNode := Child.FindNode('FPCDate');
    217270        if Assigned(NewNode) then
    218271          FPCDate := StrToDateTime(string(NewNode.TextContent));
    219         NewNode := Doc.DocumentElement.FindNode('FPCRevision');
     272        NewNode := Child.FindNode('FPCRevision');
    220273        if Assigned(NewNode) then
    221274          FPCRevision := UTF8Encode(string(NewNode.TextContent));
    222         NewNode := Doc.DocumentElement.FindNode('FPCSource');
     275        NewNode := Child.FindNode('FPCSource');
    223276        if Assigned(NewNode) then
    224277          FPCSource := Sources.FindById(StrToInt(NewNode.TextContent));
    225278      end;
     279      Instances.Add(NewInstance);
    226280      Child := Child.NextSibling;
    227281    end;
     
    238292  NewNode: TDOMNode;
    239293  NewNode2: TDOMNode;
     294  NewNode3: TDOMNode;
    240295begin
    241296  Doc := TXMLDocument.Create;
     
    249304      for I := 0 to Instances.Count - 1 do
    250305      with TInstance(Instances[I]) do begin
     306        NewNode3 := OwnerDocument.CreateElement('Id');
     307        with NewNode3 do begin
    251308        NewNode2 := OwnerDocument.CreateElement('Id');
    252309        NewNode2.TextContent := IntToStr(Id);
    253         AppendChild(NewNode);
     310        AppendChild(NewNode2);
    254311        NewNode2 := OwnerDocument.CreateElement('Name');
    255312        NewNode2.TextContent := UTF8Decode(Name);
    256         AppendChild(NewNode);
     313        AppendChild(NewNode2);
    257314        NewNode2 := OwnerDocument.CreateElement('IDEDate');
    258315        NewNode2.TextContent := DateTimeToStr(IDEDate);
    259         AppendChild(NewNode);
     316        AppendChild(NewNode2);
    260317        NewNode2 := OwnerDocument.CreateElement('IDERevision');
    261318        NewNode2.TextContent := UTF8Decode(IDERevision);
    262         AppendChild(NewNode);
     319        AppendChild(NewNode2);
    263320        NewNode2 := OwnerDocument.CreateElement('IDESource');
    264         NewNode2.TextContent := IntToStr(IDESource.Id);
    265         AppendChild(NewNode);
     321        if Assigned(IDESource) then NewNode2.TextContent := IntToStr(IDESource.Id)
     322          else NewNode2.TextContent := '0';
     323        AppendChild(NewNode2);
    266324        NewNode2 := OwnerDocument.CreateElement('FPCDate');
    267325        NewNode2.TextContent := DateTimeToStr(FPCDate);
    268         AppendChild(NewNode);
     326        AppendChild(NewNode2);
    269327        NewNode2 := OwnerDocument.CreateElement('FPCRevision');
    270328        NewNode2.TextContent := UTF8Decode(FPCRevision);
    271         AppendChild(NewNode);
     329        AppendChild(NewNode2);
    272330        NewNode2 := OwnerDocument.CreateElement('FPCSource');
    273         NewNode2.TextContent := IntToStr(FPCSource.Id);
    274         AppendChild(NewNode);
     331        if Assigned(IDESource) then NewNode2.TextContent := IntToStr(FPCSource.Id)
     332          else NewNode2.TextContent := '0';
     333        AppendChild(NewNode2);
     334        end;
     335        AppendChild(NewNode3);
    275336      end;
    276337      AppendChild(NewNode);
     
    280341      for I := 0 to Sources.Count - 1 do
    281342      with TSource(Sources[I]) do begin
     343        NewNode3 := OwnerDocument.CreateElement('Item');
     344        with NewNode3 do begin
    282345        NewNode2 := OwnerDocument.CreateElement('Id');
    283346        NewNode2.TextContent := IntToStr(Id);
    284         AppendChild(NewNode);
     347        AppendChild(NewNode2);
    285348        NewNode2 := OwnerDocument.CreateElement('Name');
    286349        NewNode2.TextContent := UTF8Decode(Name);
    287         AppendChild(NewNode);
     350        AppendChild(NewNode2);
    288351        NewNode2 := OwnerDocument.CreateElement('SubversionURL');
    289352        NewNode2.TextContent := UTF8Decode(SubversionURL);
    290         AppendChild(NewNode);
     353        AppendChild(NewNode2);
    291354        NewNode2 := OwnerDocument.CreateElement('VersionType');
    292355        NewNode2.TextContent := UTF8Decode(VersionType);
    293         AppendChild(NewNode);
     356        AppendChild(NewNode2);
    294357        NewNode2 := OwnerDocument.CreateElement('VersionNumber');
    295358        NewNode2.TextContent := UTF8Decode(VersionNumber);
    296         AppendChild(NewNode);
     359        AppendChild(NewNode2);
    297360        NewNode2 := OwnerDocument.CreateElement('SourceType');
    298361        NewNode2.TextContent := IntToStr(Byte(SourceType));
    299         AppendChild(NewNode);
     362        AppendChild(NewNode2);
     363        end;
     364        AppendChild(NewNode3);
    300365      end;
    301366      AppendChild(NewNode);
Note: See TracChangeset for help on using the changeset viewer.