Ignore:
Timestamp:
Oct 9, 2012, 11:48:44 AM (12 years ago)
Author:
chronos
Message:
  • Added: Load and save module list to registry.
  • Added: Installation and uninstallation of modules are now performed in two steps as BeforeStart, BeforeStop and AfterStart, AfterStop.
  • Fixed: Demo works again.
File:
1 edited

Legend:

Unmodified
Added
Removed
  • ModularSystem/Demo/UMainForm.pas

    r397 r428  
    1515  TMainForm = class(TForm)
    1616  published
     17    AModuleStart: TAction;
     18    AModuleStop: TAction;
    1719    AModuleInstall: TAction;
    1820    AModuleUninstall: TAction;
     
    2224    ButtonUninstall: TButton;
    2325    ButtonInstall: TButton;
     26    ButtonUpdate1: TButton;
     27    ButtonUpdate2: TButton;
    2428    ListViewModules: TListView;
    2529    MenuItem1: TMenuItem;
    2630    MenuItem2: TMenuItem;
    2731    MenuItem3: TMenuItem;
     32    MenuItem4: TMenuItem;
     33    MenuItem5: TMenuItem;
    2834    PopupMenu1: TPopupMenu;
     35    procedure AModuleStartExecute(Sender: TObject);
     36    procedure AModuleStopExecute(Sender: TObject);
    2937    procedure ButtonInstallClick(Sender: TObject);
    3038    procedure ButtonUninstallClick(Sender: TObject);
     
    4452
    4553const
    46   InstalledText: array[Boolean] of string = ('Not installed', 'Installed');
     54  BoolText: array[Boolean] of string = ('No', 'Yes');
    4755
    4856var
     
    6674    Item.Caption := Title;
    6775    Item.Data := ModuleManager.Modules[Item.Index];
    68     Item.SubItems.Add(Name);
     76    Item.SubItems.Add(Identification);
    6977    Item.SubItems.Add(Version);
    70     Item.SubItems.Add(InstalledText[Installed]);
     78    Item.SubItems.Add(BoolText[Installed]);
     79    Item.SubItems.Add(BoolText[Running]);
    7180    Item.SubItems.Add(License);
    7281    Item.SubItems.Add(StringReplace(Dependencies.Text, LineEnding, ', ', [rfReplaceAll]));
     
    7988var
    8089  Installed: Boolean;
     90  Running: Boolean;
    8191begin
    8292  if Assigned(ListViewModules.Selected) then Installed := TModule(ListViewModules.Selected.Data).Installed;
     93  if Assigned(ListViewModules.Selected) then Running := TModule(ListViewModules.Selected.Data).Running;
    8394  AModuleInstall.Enabled := Assigned(ListViewModules.Selected) and not Installed;
    8495  AModuleUninstall.Enabled := Assigned(ListViewModules.Selected) and Installed;
    8596  AModuleUpdate.Enabled := Assigned(ListViewModules.Selected) and Installed;
     97  AModuleStart.Enabled := Assigned(ListViewModules.Selected) and not Running;
     98  AModuleStop.Enabled := Assigned(ListViewModules.Selected) and Running;
    8699end;
    87100
    88101procedure TMainForm.RegisterModules;
    89102begin
    90   ModuleManager.RegisterModule(TModuleUser.Create);
    91   ModuleManager.RegisterModule(TModuleBase.Create);
    92   ModuleManager.RegisterModule(TModuleACL.Create);
     103  ModuleManager.RegisterModule(TModuleUser.Create(nil));
     104  ModuleManager.RegisterModule(TModuleBase.Create(nil));
     105  ModuleManager.RegisterModule(TModuleACL.Create(nil));
    93106end;
    94107
     
    129142end;
    130143
     144procedure TMainForm.AModuleStartExecute(Sender: TObject);
     145var
     146  ModuleList: TStringList;
     147begin
     148  if Assigned(ListViewModules.Selected) then begin
     149    try
     150      ModuleList := TStringList.Create;
     151      TModule(ListViewModules.Selected.Data).EnumModulesStart(ModuleList);
     152      if ModuleList.Count > 0 then begin
     153        if MessageDlg('These modules will be started in addition to ' +
     154          TModule(ListViewModules.Selected.Data).Name + ': ' +
     155          StringReplace(ModuleList.Text, LineEnding, ', ', [rfReplaceAll]),
     156          mtConfirmation, [mbYes, mbNo], 0) = mrYes then
     157           TModule(ListViewModules.Selected.Data).Start;
     158      end else TModule(ListViewModules.Selected.Data).Start;
     159    finally
     160      ModuleList.Free;
     161    end;
     162    RefreshList;
     163  end;
     164end;
     165
     166procedure TMainForm.AModuleStopExecute(Sender: TObject);
     167var
     168  ModuleList: TStringList;
     169begin
     170  if Assigned(ListViewModules.Selected) then begin
     171    try
     172      ModuleList := TStringList.Create;
     173      TModule(ListViewModules.Selected.Data).EnumModulesStop(ModuleList);
     174      if ModuleList.Count > 0 then begin
     175        if MessageDlg('These modules will be stopped in addition to ' +
     176          TModule(ListViewModules.Selected.Data).Name + ': ' +
     177          StringReplace(ModuleList.Text, LineEnding, ', ', [rfReplaceAll]),
     178          mtConfirmation, [mbYes, mbNo], 0) = mrYes then
     179            TModule(ListViewModules.Selected.Data).Stop;
     180      end else TModule(ListViewModules.Selected.Data).Stop;
     181    finally
     182      ModuleList.Free;
     183    end;
     184
     185    RefreshList;
     186  end;
     187end;
     188
    131189procedure TMainForm.ButtonUninstallClick(Sender: TObject);
    132190var
     
    155213begin
    156214  if Assigned(ListViewModules.Selected) then begin
    157     TModule(ListViewModules.Selected.Data).Update;
     215    TModule(ListViewModules.Selected.Data).Upgrade;
    158216    RefreshList;
    159217  end;
     
    162220procedure TMainForm.FormDestroy(Sender: TObject);
    163221begin
    164   ModuleManager.Free;
     222  FreeAndNil(ModuleManager);
    165223end;
    166224
Note: See TracChangeset for help on using the changeset viewer.