Ignore:
Timestamp:
Aug 8, 2017, 11:15:41 PM (7 years ago)
Author:
chronos
Message:
  • Added: Rule items can be managed.
  • Added: Show BNF syntax on main form.
Location:
branches/generator/Forms
Files:
2 added
4 edited

Legend:

Unmodified
Added
Removed
  • branches/generator/Forms/UFormMain.lfm

    r109 r110  
    55  Width = 1050
    66  Caption = 'Language generator'
     7  ClientHeight = 646
     8  ClientWidth = 1050
    79  Menu = MainMenu1
     10  OnShow = FormShow
    811  LCLVersion = '1.6.4.0'
     12  object MemoBNF: TMemo
     13    Left = 0
     14    Height = 646
     15    Top = 0
     16    Width = 1050
     17    Align = alClient
     18    TabOrder = 0
     19  end
    920  object MainMenu1: TMainMenu
    1021    left = 240
  • branches/generator/Forms/UFormMain.pas

    r109 r110  
    2020    ActionList1: TActionList;
    2121    MainMenu1: TMainMenu;
     22    MemoBNF: TMemo;
    2223    MenuItem1: TMenuItem;
    2324    MenuItem2: TMenuItem;
     
    3334    procedure ARulesExecute(Sender: TObject);
    3435    procedure ASaveAsExecute(Sender: TObject);
     36    procedure FormShow(Sender: TObject);
    3537  private
    3638    { private declarations }
     
    5557begin
    5658  FormRules.Rules := Core.Rules;
    57   FormRules.Show;
     59  FormRules.ShowModal;
     60  MemoBNF.Lines.Text := Core.Rules.GetBNF;
    5861end;
    5962
    6063procedure TFormMain.ASaveAsExecute(Sender: TObject);
    6164begin
     65  SaveDialog1.FileName := Core.Rules.FileName;
    6266  if SaveDialog1.Execute then begin
    6367    Core.Rules.SaveToXmlFile(SaveDialog1.FileName);
    6468  end;
     69end;
     70
     71procedure TFormMain.FormShow(Sender: TObject);
     72begin
     73  MemoBNF.Lines.Text := Core.Rules.GetBNF;
    6574end;
    6675
     
    7281procedure TFormMain.AOpenExecute(Sender: TObject);
    7382begin
     83  OpenDialog1.FileName := Core.Rules.FileName;
    7484  if OpenDialog1.Execute then begin
    7585    Core.Rules.LoadFromXmlFile(OpenDialog1.FileName);
  • branches/generator/Forms/UFormRule.lfm

    r109 r110  
    1313    Left = 376
    1414    Height = 25
    15     Top = 328
     15    Top = 360
    1616    Width = 75
     17    Anchors = [akLeft, akBottom]
    1718    Caption = 'Ok'
    1819    ModalResult = 1
     
    2021  end
    2122  object ButtonCancel: TButton
    22     Left = 176
     23    Left = 168
    2324    Height = 25
    24     Top = 328
     25    Top = 360
    2526    Width = 75
     27    Anchors = [akLeft, akBottom]
    2628    Caption = 'Cancel'
    2729    ModalResult = 2
     
    4345    TabOrder = 2
    4446  end
     47  object ListView: TListView
     48    Left = 16
     49    Height = 264
     50    Top = 80
     51    Width = 624
     52    Anchors = [akTop, akLeft, akBottom]
     53    Columns = <   
     54      item
     55        Caption = 'Name'
     56        Width = 604
     57      end>
     58    MultiSelect = True
     59    OwnerData = True
     60    PopupMenu = PopupMenu1
     61    ReadOnly = True
     62    RowSelect = True
     63    TabOrder = 3
     64    ViewStyle = vsReport
     65    OnData = ListViewData
     66    OnDblClick = ListViewDblClick
     67    OnKeyPress = ListViewKeyPress
     68    OnSelectItem = ListViewSelectItem
     69  end
     70  object ActionList1: TActionList
     71    left = 347
     72    top = 187
     73    object AAdd: TAction
     74      Caption = 'Add'
     75      OnExecute = AAddExecute
     76    end
     77    object AModify: TAction
     78      Caption = 'Modify'
     79      OnExecute = AModifyExecute
     80    end
     81    object ARemove: TAction
     82      Caption = 'Remove'
     83      OnExecute = ARemoveExecute
     84    end
     85  end
     86  object PopupMenu1: TPopupMenu
     87    left = 118
     88    top = 185
     89    object MenuItem1: TMenuItem
     90      Action = AAdd
     91    end
     92    object MenuItem2: TMenuItem
     93      Action = AModify
     94    end
     95    object MenuItem3: TMenuItem
     96      Action = ARemove
     97    end
     98  end
    4599end
  • branches/generator/Forms/UFormRule.pas

    r109 r110  
    77uses
    88  Classes, SysUtils, FileUtil, Forms, Controls, Graphics, Dialogs, StdCtrls,
    9   URules;
     9  ComCtrls, ActnList, Menus, URules;
    1010
    1111type
     
    1414
    1515  TFormRule = class(TForm)
     16    AAdd: TAction;
     17    AModify: TAction;
     18    ARemove: TAction;
     19    ActionList1: TActionList;
    1620    ButtonOk: TButton;
    1721    ButtonCancel: TButton;
    1822    EditName: TEdit;
    1923    Label1: TLabel;
     24    ListView: TListView;
     25    MenuItem1: TMenuItem;
     26    MenuItem2: TMenuItem;
     27    MenuItem3: TMenuItem;
     28    PopupMenu1: TPopupMenu;
     29    procedure AAddExecute(Sender: TObject);
     30    procedure AModifyExecute(Sender: TObject);
     31    procedure ARemoveExecute(Sender: TObject);
    2032    procedure FormShow(Sender: TObject);
     33    procedure ListViewData(Sender: TObject; Item: TListItem);
     34    procedure ListViewDblClick(Sender: TObject);
     35    procedure ListViewKeyPress(Sender: TObject; var Key: char);
     36    procedure ListViewSelectItem(Sender: TObject; Item: TListItem;
     37      Selected: Boolean);
    2138  private
    2239    { private declarations }
    2340  public
     41    RuleItems: TRuleItems;
     42    procedure UpdateInterface;
     43    procedure ReloadList;
    2444    procedure LoadData(Rule: TRule);
    2545    procedure SaveData(Rule: TRule);
     
    2949  FormRule: TFormRule;
    3050
     51
    3152implementation
    3253
    3354{$R *.lfm}
     55
     56uses
     57  UFormRuleItem;
    3458
    3559{ TFormRule }
     
    3862begin
    3963  EditName.SetFocus;
     64  ReloadList;
     65  UpdateInterface;
     66end;
     67
     68procedure TFormRule.ListViewData(Sender: TObject; Item: TListItem);
     69begin
     70  if (Item.Index >= 0) and (Item.Index < RuleItems.Count) then begin
     71    Item.Caption := RuleItems[Item.Index].Name;
     72    Item.Data := RuleItems[Item.Index];
     73  end;
     74end;
     75
     76procedure TFormRule.ListViewDblClick(Sender: TObject);
     77begin
     78  AModify.Execute;
     79end;
     80
     81procedure TFormRule.ListViewKeyPress(Sender: TObject; var Key: char);
     82begin
     83  if Key = #13 then AModify.Execute;
     84end;
     85
     86procedure TFormRule.ListViewSelectItem(Sender: TObject; Item: TListItem;
     87  Selected: Boolean);
     88begin
     89  UpdateInterface;
     90end;
     91
     92procedure TFormRule.AAddExecute(Sender: TObject);
     93var
     94  NewRuleItem: TRuleItem;
     95begin
     96  NewRuleItem := TRuleItem.Create;
     97  FormRuleItem.LoadData(NewRuleItem);
     98  if FormRuleItem.ShowModal = mrOk then begin
     99    FormRuleItem.SaveData(NewRuleItem);
     100    RuleItems.Add(NewRuleItem);
     101    ReloadList;
     102  end else FreeAndNil(NewRuleItem);
     103end;
     104
     105procedure TFormRule.AModifyExecute(Sender: TObject);
     106var
     107  RuleItem: TRuleItem;
     108begin
     109  RuleItem := TRuleItem(ListView.Selected.Data);
     110  FormRuleItem.LoadData(RuleItem);
     111  if FormRuleItem.ShowModal = mrOk then begin
     112    FormRuleItem.SaveData(RuleItem);
     113    ReloadList;
     114  end;
     115end;
     116
     117procedure TFormRule.ARemoveExecute(Sender: TObject);
     118var
     119  Item: TListItem;
     120begin
     121  for Item in ListView.Items do
     122  if Item.Selected then
     123    RuleItems.Remove(TRuleItem(Item.Data));
     124  ReloadList;
     125end;
     126
     127procedure TFormRule.UpdateInterface;
     128begin
     129  AModify.Enabled := Assigned(ListView.Selected);
     130  ARemove.Enabled := Assigned(ListView.Selected);
     131end;
     132
     133procedure TFormRule.ReloadList;
     134begin
     135  ListView.Items.Count := RuleItems.Count;
     136  ListView.Refresh;
    40137end;
    41138
     
    43140begin
    44141  EditName.Text := Rule.Name;
     142  RuleItems := Rule.Items;
    45143end;
    46144
Note: See TracChangeset for help on using the changeset viewer.