From 7991a8b0e253f174a2534ceb94fc37a590ad8523 Mon Sep 17 00:00:00 2001 From: E01 Date: Sun, 21 Mar 2004 07:20:29 +0000 Subject: [PATCH] =?utf8?q?BottleChainListFrame.dfm=201.15=20ReplacePresetE?= =?utf8?q?ditor.pas=201.8=20ReplacePresetEditor.dfm=201.5=20StrReplace.pas?= =?utf8?q?=201.8=20ConstEditor.pas=201.11=20StrReplaceFrame.dfm=201.4=20St?= =?utf8?q?rReplaceFrame.pas=201.3=20StrReplaceDialog.pas=201.2=20=E3=83=9E?= =?utf8?q?=E3=83=BC=E3=82=B8?= MIME-Version: 1.0 Content-Type: text/plain; charset=utf8 Content-Transfer-Encoding: 8bit --- bottleclient/BottleChainListFrame.dfm | 47 ++--- bottleclient/ConstEditor.pas | 18 +- bottleclient/MainForm.dfm | 12 +- bottleclient/ReplacePresetEditor.dfm | 210 ++++++++++++++++----- bottleclient/ReplacePresetEditor.pas | 331 ++++++++++++++++++++++++++++++++-- bottleclient/StrReplace.pas | 135 +++++++++++--- bottleclient/StrReplaceDialog.pas | 18 +- bottleclient/StrReplaceFrame.dfm | 6 + bottleclient/StrReplaceFrame.pas | 92 ++++++++-- 9 files changed, 715 insertions(+), 154 deletions(-) diff --git a/bottleclient/BottleChainListFrame.dfm b/bottleclient/BottleChainListFrame.dfm index 790bfd5..d967d8a 100755 --- a/bottleclient/BottleChainListFrame.dfm +++ b/bottleclient/BottleChainListFrame.dfm @@ -1,17 +1,17 @@ object frmBottleChainList: TfrmBottleChainList Left = 0 Top = 0 - Width = 362 - Height = 260 + Width = 423 + Height = 265 TabOrder = 0 DesignSize = ( - 362 - 260) + 423 + 265) object lstRules: TCheckListBox Left = 0 Top = 0 - Width = 289 - Height = 260 + Width = 351 + Height = 265 OnClickCheck = lstRulesClickCheck Align = alLeft Anchors = [akLeft, akTop, akRight, akBottom] @@ -23,61 +23,66 @@ object frmBottleChainList: TfrmBottleChainList OnMeasureItem = lstRulesMeasureItem end object btnDelete: TButton - Left = 294 - Top = 200 + Left = 356 + Top = 205 Width = 65 Height = 25 + Hint = #12523#12540#12523#12434#21066#38500 Anchors = [akRight, akBottom] Caption = #21066#38500'(&D)' TabOrder = 5 OnClick = btnDeleteClick end object btnAdd: TButton - Left = 294 - Top = 232 + Left = 356 + Top = 235 Width = 65 Height = 25 + Hint = #26032#12375#12356#12523#12540#12523#12434#36861#21152 Anchors = [akRight, akBottom] Caption = #36861#21152'(&A)' TabOrder = 6 OnClick = btnAddClick end object btnDown: TButton - Left = 294 - Top = 96 - Width = 67 + Left = 356 + Top = 101 + Width = 65 Height = 25 + Hint = #19979#12395#31227#21205 Anchors = [akRight, akBottom] Caption = #19979#12408'(&D)' TabOrder = 2 OnClick = btnDownClick end object btnUp: TButton - Left = 294 - Top = 64 - Width = 67 + Left = 356 + Top = 69 + Width = 65 Height = 25 + Hint = #12523#12540#12523#12434#19978#12395#31227#21205 Anchors = [akRight, akBottom] Caption = #19978#12408'(&U)' TabOrder = 1 OnClick = btnUpClick end object btnEdit: TButton - Left = 294 - Top = 136 + Left = 356 + Top = 141 Width = 65 Height = 25 + Hint = #29694#22312#12398#12523#12540#12523#12434#32232#38598 Anchors = [akRight, akBottom] Caption = #32232#38598'(&E)' TabOrder = 3 OnClick = EditRule end object btnDuplicate: TButton - Left = 294 - Top = 168 + Left = 356 + Top = 173 Width = 65 Height = 25 - Hint = #12523#12540#12523#12434#35079#35069#12375#12414#12377 + Hint = #29694#22312#12398#12523#12540#12523#12434#35079#35069 Anchors = [akRight, akBottom] Caption = #12467#12500#12540'(&C)' TabOrder = 4 diff --git a/bottleclient/ConstEditor.pas b/bottleclient/ConstEditor.pas index 4a44892..3f6f8ad 100755 --- a/bottleclient/ConstEditor.pas +++ b/bottleclient/ConstEditor.pas @@ -190,26 +190,10 @@ begin end; procedure TfrmConstEditor.FormCreate(Sender: TObject); -var c: char; - i: integer; begin if Application.Terminated then Exit; //ƒƒjƒ…[ì¬ - for c := 'A' to 'Z' do begin - cbxConstShortCut.Items.Add('Ctrl+' + c); - end; - for c := 'A' to 'Z' do begin - cbxConstShortCut.Items.Add('Shift+Ctrl+' + c); - end; - for c := 'A' to 'Z' do begin - cbxConstShortCut.Items.Add('Alt+Ctrl+' + c); - end; - for i := 1 to 12 do begin - cbxConstShortCut.Items.Add('F' + IntToStr(i)); - end; - for i := 1 to 12 do begin - cbxConstShortCut.Items.Add('Shift+F' + IntToStr(i)); - end; + BuildShortCutList(cbxConstShortCut.Items); tvwConst.DoubleBuffered := true; end; diff --git a/bottleclient/MainForm.dfm b/bottleclient/MainForm.dfm index 99e4d8d..3c2622d 100755 --- a/bottleclient/MainForm.dfm +++ b/bottleclient/MainForm.dfm @@ -27,7 +27,7 @@ object frmSender: TfrmSender TextHeight = 12 object StatusBar: TStatusBar Left = 0 - Top = 233 + Top = 241 Width = 526 Height = 19 Panels = < @@ -170,14 +170,14 @@ object frmSender: TfrmSender Left = 0 Top = 46 Width = 526 - Height = 162 + Height = 170 Align = alClient BevelOuter = bvNone BorderWidth = 2 TabOrder = 4 object tabChannel: TTabControl Left = 2 - Top = 134 + Top = 142 Width = 522 Height = 26 Align = alBottom @@ -201,7 +201,7 @@ object frmSender: TfrmSender Left = 2 Top = 2 Width = 522 - Height = 132 + Height = 140 Cursor = crIBeam Align = alClient Caret.AutoCursor = True @@ -338,7 +338,7 @@ object frmSender: TfrmSender end object pnlPanel: TPanel Left = 0 - Top = 208 + Top = 216 Width = 526 Height = 25 Align = alBottom @@ -668,7 +668,7 @@ object frmSender: TfrmSender object actExitClient: TAction Category = #12501#12449#12452#12523 Caption = 'Client'#32066#20102'(&X)' - Hint = 'SSTP Bottle Client'#12398#32066#20102 + Hint = 'Yasagure Client'#12398#32066#20102 ImageIndex = 14 OnExecute = actExitClientExecute end diff --git a/bottleclient/ReplacePresetEditor.dfm b/bottleclient/ReplacePresetEditor.dfm index 9c039c3..9bc9fa9 100644 --- a/bottleclient/ReplacePresetEditor.dfm +++ b/bottleclient/ReplacePresetEditor.dfm @@ -1,73 +1,197 @@ object frmReplacePresetEditor: TfrmReplacePresetEditor - Left = 0 - Top = 0 - Width = 377 - Height = 274 - TabOrder = 0 - object tvwPresets: TTreeView + Left = 511 + Top = 373 + AutoSize = True + BorderStyle = bsDialog + Caption = #25991#23383#21015#12398#32622#25563#12503#12522#12475#12483#12488 + ClientHeight = 391 + ClientWidth = 377 + Color = clBtnFace + Font.Charset = SHIFTJIS_CHARSET + Font.Color = clWindowText + Font.Height = -12 + Font.Name = #65325#65331' '#65328#12468#12471#12483#12463 + Font.Style = [] + OldCreateOrder = True + Position = poDesktopCenter + OnCreate = FormCreate + PixelsPerInch = 96 + TextHeight = 12 + object pnlPairsEditor: TPanel Left = 0 Top = 0 Width = 377 - Height = 161 + Height = 273 Align = alTop - Indent = 19 + BevelOuter = bvNone + BorderWidth = 5 TabOrder = 0 + object lvwPairs: TListView + Left = 5 + Top = 5 + Width = 367 + Height = 124 + Align = alTop + Columns = < + item + Caption = #32622#25563#21069 + Width = 125 + end + item + Caption = #32622#25563#24460 + Width = 125 + end + item + Caption = #27491#35215#34920#29694 + Width = 45 + end + item + Caption = #22823#25991#23383#12539#23567#25991#23383#12398#21306#21029 + Width = 45 + end> + HideSelection = False + ReadOnly = True + RowSelect = True + TabOrder = 0 + ViewStyle = vsReport + OnChange = lvwPairsChange + end + object btnAdd: TButton + Left = 77 + Top = 136 + Width = 67 + Height = 25 + Hint = #32622#25563#12527#12540#12489#12398#12506#12450#12434#36861#21152 + Caption = #36861#21152'(&I)' + TabOrder = 1 + OnClick = btnAddClick + end + object btnDelete: TButton + Left = 149 + Top = 136 + Width = 67 + Height = 25 + Hint = #32622#25563#12527#12540#12489#12398#12506#12450#12434#21066#38500 + Caption = #21066#38500'(&D)' + TabOrder = 2 + OnClick = btnDeleteClick + end + object btnMoveUp: TButton + Left = 229 + Top = 136 + Width = 67 + Height = 25 + Hint = #19978#12395#31227#21205 + Caption = #19978#12408'(&U)' + TabOrder = 3 + OnClick = btnMoveUpClick + end + object btnMoveDown: TButton + Left = 301 + Top = 136 + Width = 67 + Height = 25 + Hint = #19979#12395#31227#21205 + Caption = #19979#12408'(&W)' + TabOrder = 4 + OnClick = btnMoveDownClick + end + inline StrReplaceFrame: TfrmStrReplaceFrame + Left = 12 + Top = 168 + Width = 354 + Height = 100 + Enabled = False + TabOrder = 5 + end end - object PageControl: TPageControl + object pnlPresetProperties: TPanel Left = 0 - Top = 161 + Top = 273 Width = 377 - Height = 113 - ActivePage = tstPreset - Align = alClient - Style = tsButtons + Height = 79 + Align = alTop + BevelOuter = bvNone + BorderWidth = 5 TabOrder = 1 - object tstPreset: TTabSheet - Caption = #12503#12522#12475#12483#12488 - TabVisible = False - object Label1: TLabel - Left = 8 - Top = 16 - Width = 54 + Visible = False + object gbxPresetProperties: TGroupBox + Left = 5 + Top = 5 + Width = 367 + Height = 69 + Align = alClient + Caption = #12503#12522#12475#12483#12488#12398#35373#23450 + TabOrder = 0 + object lblTitle: TLabel + Left = 16 + Top = 24 + Width = 56 Height = 12 - Caption = #35373#23450#21517'(&N):' + Caption = #12479#12452#12488#12523'(&T):' FocusControl = edtTitle end - object Label2: TLabel - Left = 8 + object lblShortCut: TLabel + Left = 16 Top = 48 Width = 83 Height = 12 Caption = #12471#12519#12540#12488#12459#12483#12488'(&S):' FocusControl = cbxShortCut end - object edtTitle: TEdit - Left = 96 - Top = 8 - Width = 265 - Height = 20 - TabOrder = 0 - end object cbxShortCut: TComboBox - Left = 96 + Left = 112 Top = 40 Width = 145 Height = 20 + Hint = #12461#12540#12508#12540#12489#12471#12519#12540#12488#12459#12483#12488#12398#35373#23450 ItemHeight = 12 + TabOrder = 0 + end + object edtTitle: TEdit + Left = 112 + Top = 16 + Width = 185 + Height = 20 + Hint = #12513#12491#12517#12540#12395#34920#31034#12373#12428#12427#12503#12522#12475#12483#12488#12398#12479#12452#12488#12523#12434#35373#23450 TabOrder = 1 end end - object tstPair: TTabSheet - Caption = #12506#12450 - ImageIndex = 1 - TabVisible = False - inline frmStrReplaceFrame: TfrmStrReplaceFrame - Left = 8 - Top = 3 - Width = 354 - Height = 100 - TabOrder = 0 - end + end + object pnlOkCancelButtons: TPanel + Left = 0 + Top = 352 + Width = 377 + Height = 39 + Align = alTop + BevelOuter = bvNone + TabOrder = 2 + DesignSize = ( + 377 + 39) + object btnOk: TButton + Left = 285 + Top = 6 + Width = 83 + Height = 25 + Hint = #22793#26356#20869#23481#12434#30906#23450#12375#12390#12480#12452#12450#12525#12464#12434#38281#12376#12427 + Anchors = [akRight, akBottom] + Caption = '&OK' + Default = True + TabOrder = 0 + OnClick = btnOkClick + end + object btnCancel: TButton + Left = 205 + Top = 6 + Width = 75 + Height = 25 + Hint = #22793#26356#20869#23481#12434#12461#12515#12531#12475#12523#12375#12390#12480#12452#12450#12525#12464#12434#38281#12376#12427 + Anchors = [akRight, akBottom] + Cancel = True + Caption = #12461#12515#12531#12475#12523 + TabOrder = 1 + OnClick = btnCancelClick end end end diff --git a/bottleclient/ReplacePresetEditor.pas b/bottleclient/ReplacePresetEditor.pas index c09bbaa..21465a8 100644 --- a/bottleclient/ReplacePresetEditor.pas +++ b/bottleclient/ReplacePresetEditor.pas @@ -3,28 +3,333 @@ unit ReplacePresetEditor; interface uses - Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, - Dialogs, ComCtrls, StrReplaceFrame, StdCtrls, StrReplace; + Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, + Dialogs, ComCtrls, StrReplaceFrame, StdCtrls, StrReplace, ExtCtrls, + Menus, BottleDef; + +{ + ƒtƒH[ƒ€‚ÌAutoSize = true‚ɐݒ肳‚ê‚Ä‚¢‚邽‚߁A + ƒtƒH[ƒ€‚Í’†–¡‚ɉž‚¶‚ÄŽ©“®“I‚ɏk‚ށB + + ‚³‚ç‚ɁAƒtƒH[ƒ€‚́A‚·‚×‚Ä Align = alTop ‚ɐݒ肳‚ꂽ3‚Â‚Ì + ƒpƒlƒ‹‚É‚æ‚Á‚Ä‹æØ‚ç‚ê‚Ä‚¢‚éB + + ˆê”ԏã‚̃pƒlƒ‹ pnlPairsEditor ‚ƁA + ˆê”Ô‰º‚̃pƒlƒ‹ pnlOkCancelButtons ‚́Aí‚É•\Ž¦‚³‚ê‚Ä‚¢‚邪A + ^‚ñ’†‚̃pƒlƒ‹ pnlPresetProperties ‚́AAskForTitleƒvƒƒpƒeƒB‚É + ‰ž‚¶‚āA•\Ž¦‚³‚ꂽ‚è‰B‚ꂽ‚è‚·‚éB + ‚±‚ê‚ç‚ÌŒ‹‰ÊAƒtƒH[ƒ€Ž©g‚ªŽ©“®“I‚ɐL‚яk‚Ý‚·‚é‚悤‚É‚È‚Á‚Ä‚¢‚éB + + ƒtƒH[ƒ€‚Ì‘å‚«‚³‚ð•ÏX‚µ‚½‚¢A‚Æ‚¢‚Á‚½ê‡‚ɂ́A + ˆê’U AutoSize = false ‚É‚µ‚ăTƒCƒY•ÏX‚µ‚½Œã‚ŁA + •K‚¸ AutoSize = true ‚É–ß‚µ‚Ä‚¨‚­‚±‚ƁB +} type - TfrmReplacePresetEditor = class(TFrame) - tvwPresets: TTreeView; - PageControl: TPageControl; - tstPreset: TTabSheet; - tstPair: TTabSheet; - frmStrReplaceFrame: TfrmStrReplaceFrame; - Label1: TLabel; - Label2: TLabel; - edtTitle: TEdit; + TfrmReplacePresetEditor = class(TForm) + pnlPairsEditor: TPanel; + lvwPairs: TListView; + btnAdd: TButton; + btnDelete: TButton; + btnMoveUp: TButton; + btnMoveDown: TButton; + StrReplaceFrame: TfrmStrReplaceFrame; + pnlPresetProperties: TPanel; + pnlOkCancelButtons: TPanel; + btnOk: TButton; + btnCancel: TButton; + gbxPresetProperties: TGroupBox; cbxShortCut: TComboBox; + edtTitle: TEdit; + lblTitle: TLabel; + lblShortCut: TLabel; + procedure btnAddClick(Sender: TObject); + procedure btnDeleteClick(Sender: TObject); + procedure btnMoveUpClick(Sender: TObject); + procedure btnMoveDownClick(Sender: TObject); + procedure lvwPairsChange(Sender: TObject; Item: TListItem; + Change: TItemChange); + procedure btnOkClick(Sender: TObject); + procedure btnCancelClick(Sender: TObject); + procedure FormCreate(Sender: TObject); private - { Private éŒ¾ } + FPairs: TReplacePairCollection; + procedure SetPairs(const Value: TReplacePairCollection); + function GetAskForTitle: Boolean; + function GetShortCut: TShortCut; + function GetTitle: string; + procedure SetAskForTitle(const Value: Boolean); + procedure SetShortCut(const Value: TShortCut); + procedure SetTitle(const Value: string); + protected + procedure MoveItem(const Delta: Integer); + procedure UpdateControls; + procedure UpdateListViewItem(Target: TListItem); + procedure FollowEdit; + procedure FrameUpdate(Sender: TObject); public - { Public éŒ¾ } + constructor Create(AOwner: TCOmponent); override; + destructor Destroy; override; + property Pairs: TReplacePairCollection read FPairs write SetPairs; + property Title: string read GetTitle write SetTitle; + property ShortCut: TShortCut read GetShortCut write SetShortCut; + property AskForTitle: Boolean read GetAskForTitle write SetAskForTitle; + function Execute: Boolean; end; implementation {$R *.dfm} +{ TfrmReplacePresetEditor } + +constructor TfrmReplacePresetEditor.Create(AOwner: TCOmponent); +begin + inherited; + FPairs := TReplacePairCollection.Create(TReplacePair); +end; + +destructor TfrmReplacePresetEditor.Destroy; +begin + FPairs.Free; + inherited; +end; + +procedure TfrmReplacePresetEditor.SetPairs(const Value: TReplacePairCollection); +begin + FPairs.Assign(Value); + UpdateControls; +end; + +procedure TfrmReplacePresetEditor.UpdateControls; +var + i, SelectedIndex: Integer; +begin + if lvwPairs.Selected <> nil then + SelectedIndex := lvwPairs.Selected.Index + else + SelectedIndex := -1; + with lvwPairs.Items do + begin + Clear; + BeginUpdate; + try + for i := 0 to FPairs.Count-1 do + begin + UpdateListViewItem(Add); + end; + if (SelectedIndex > -1) and (lvwPairs.Selected <> nil) then + if (lvwPairs.Selected.Index <> SelectedIndex) and + (lvwPairs.Items.Count-1 > SelectedIndex) then + lvwPairs.Items[SelectedIndex].Selected := true; + finally + EndUpdate; + end; + end; +end; + +procedure TfrmReplacePresetEditor.btnAddClick(Sender: TObject); +var + New: TListItem; +begin + // V‚µ‚­‰Á‚¦‚Ä‚»‚ê‚ð‘I‘ð + StrReplaceFrame.OnContentUpdate := nil; + try + StrReplaceFrame.Pair := FPairs.Add; + New := lvwPairs.Items.Add; + lvwPairs.Selected := New; + UpdateListViewItem(New); + // ƒtƒH[ƒJƒXˆÚ“®A•ÒWŠJŽn + StrReplaceFrame.edtOldPattern.SetFocus; + finally + StrReplaceFrame.OnContentUpdate := FrameUpdate; + end; +end; + +procedure TfrmReplacePresetEditor.UpdateListViewItem(Target: TListItem); +var + Pair: TReplacePair; +begin + with Target do + begin + lvwPairs.Items.BeginUpdate; + try + Pair := FPairs[Target.Index]; + Caption := Pair.BeforeStr; + SubItems.Clear; + SubItems.Add(Pair.AfterStr); + if Pair.UseRegExp then + SubItems.Add('Y') + else + SubItems.Add('-'); + if not Pair.IgnoreCase then + SubItems.Add('Y') + else + SubItems.Add('-'); + finally + lvwPairs.Items.EndUpdate; + end; + end; +end; + +procedure TfrmReplacePresetEditor.btnDeleteClick(Sender: TObject); +var + TargetIndex: Integer; +begin + if lvwPairs.Selected = nil then + Exit; + TargetIndex := lvwPairs.Selected.Index; + FPairs.Delete(TargetIndex); + lvwPairs.Items.Delete(TargetIndex); +end; + +procedure TfrmReplacePresetEditor.btnMoveUpClick(Sender: TObject); +begin + MoveItem(-1); +end; + +procedure TfrmReplacePresetEditor.btnMoveDownClick(Sender: TObject); +begin + MoveItem(1); +end; + +procedure TfrmReplacePresetEditor.lvwPairsChange(Sender: TObject; + Item: TListItem; Change: TItemChange); +begin + if Change <> ctState then + Exit; + with StrReplaceFrame do + begin + if lvwPairs.Selected = nil then + begin + Enabled := false; + end else + begin + Enabled := true; + Pair := FPairs[lvwPairs.Selected.Index]; + end; + end; +end; + +function TfrmReplacePresetEditor.Execute: Boolean; +begin + UpdateControls; + StrReplaceFrame.OnContentUpdate := FrameUpdate; + if lvwPairs.Items.Count > 0 then + begin + lvwPairs.Items[0].Selected := true; + end; + Result := ShowModal = mrOk; +end; + +procedure TfrmReplacePresetEditor.btnOkClick(Sender: TObject); +var + i: integer; +begin + if Pairs.Count = 0 then + begin + ShowMessage('Å’á1‚‚̒uŠ·ƒ‹[ƒ‹‚ðÝ’肵‚Ä‚­‚¾‚³‚¢'); + Exit; + end; + for i := 0 to Pairs.Count-1 do + if not Pairs[i].IsValidPair then + begin + ShowMessage(Format('%d”Ô–Ú‚Ì•¶Žš—ñƒyƒA‚ɃGƒ‰[‚ª‚ ‚è‚Ü‚·', [i+1])); + Exit; + end; + if AskForTitle and (Title = '') then + begin + ShowMessage('ƒvƒŠƒZƒbƒg‚̃^ƒCƒgƒ‹‚ðŽw’肵‚Ä‚­‚¾‚³‚¢'); + Exit; + end; + ModalResult := mrOk; +end; + +procedure TfrmReplacePresetEditor.btnCancelClick(Sender: TObject); +begin + ModalResult := mrCancel; +end; + +procedure TfrmReplacePresetEditor.FollowEdit; +var + CurrentPair: TReplacePair; +begin + if lvwPairs.Selected <> nil then + begin + CurrentPair := FPairs[lvwPairs.Selected.Index]; + CurrentPair.Assign(StrReplaceFrame.Pair); + UpdateListViewItem(lvwPairs.Selected); + end; +end; + +procedure TfrmReplacePresetEditor.FrameUpdate(Sender: TObject); +begin + FollowEdit; +end; + +procedure TfrmReplacePresetEditor.MoveItem(const Delta: Integer); +var + TargetIndex: Integer; + Item: TReplacePair; +begin + if lvwPairs.Selected = nil then + Exit; + StrReplaceFrame.OnContentUpdate := nil; + try + TargetIndex := lvwPairs.Selected.Index; + // ”͈̓`ƒFƒbƒN + if (Delta < 0) and (TargetIndex < -Delta) then + Exit; + if (Delta > 0) and (TargetIndex >= Pairs.Count-Delta) then + Exit; + if Delta = 0 then + Exit; // ˆê‰ž + // ˆê’UƒRƒŒƒNƒVƒ‡ƒ“‚©‚çŠO‚µ‚Ä + Item := FPairs.Items[TargetIndex]; + Item.Collection := nil; + // V‚µ‚­INSERT‚µ‚½V‹K€–Ú‚É‘ã“ü + FPairs.Insert(TargetIndex + Delta).Assign(Item); + UpdateControls; + // ƒŠƒXƒgƒrƒ…[‚Ì‘I‘ðƒAƒCƒeƒ€‚ð“®‚©‚· + lvwPairs.Items[TargetIndex + Delta].Selected := true; + finally + StrReplaceFrame.OnContentUpdate := FrameUpdate; + end; +end; + +function TfrmReplacePresetEditor.GetAskForTitle: Boolean; +begin + Result := pnlPresetProperties.Visible; +end; + +function TfrmReplacePresetEditor.GetShortCut: TShortCut; +begin + Result := TextToShortCut(cbxShortCut.Text); +end; + +function TfrmReplacePresetEditor.GetTitle: string; +begin + Result := edtTitle.Text; +end; + +procedure TfrmReplacePresetEditor.SetAskForTitle(const Value: Boolean); +begin + pnlPresetProperties.Visible := Value; +end; + +procedure TfrmReplacePresetEditor.SetShortCut(const Value: TShortCut); +begin + cbxShortCut.Text := ShortCutToText(Value); +end; + +procedure TfrmReplacePresetEditor.SetTitle(const Value: string); +begin + edtTitle.Text := Value; +end; + +procedure TfrmReplacePresetEditor.FormCreate(Sender: TObject); +begin + BuildShortCutList(cbxShortCut.Items); +end; + end. diff --git a/bottleclient/StrReplace.pas b/bottleclient/StrReplace.pas index 1deb1c0..b19744a 100644 --- a/bottleclient/StrReplace.pas +++ b/bottleclient/StrReplace.pas @@ -7,7 +7,7 @@ unit StrReplace; interface -uses Classes, SysUtils, Forms, Menus, RegexUtils; +uses Classes, SysUtils, Forms, Menus, RegexUtils, Contnrs; type // ˆÈ‰º‚Ì5‚‚̃Nƒ‰ƒX‚Ì’è‹`‚́A¬‚³‚¢•û‚©‚灨‘å‚«‚¢•û‚ցA‚Æ @@ -15,8 +15,8 @@ type // ŒŸõŒê‚Æ’uŠ·Œê‚̃yƒA‚Æ‚»‚̃IƒvƒVƒ‡ƒ“‚ð‹L˜^‚·‚é\‘¢‘Ì TReplacePairRec = record - BeforeStr: String; - AfterStr: String; + BeforeStr: string; + AfterStr: string; IgnoreCase: boolean; UseRegExp: boolean; end; @@ -25,52 +25,64 @@ type TReplacePair = class(TCollectionItem) private FPairRec: TReplacePairRec; - procedure SetAfterStr(const Value: String); - procedure SetBeforeStr(const Value: String); + procedure SetAfterStr(const Value: string); + procedure SetBeforeStr(const Value: string); procedure SetIgnoreCase(const Value: boolean); procedure SetUseRegExp(const Value: boolean); - function GetAfterStr: String; - function GetBeforeStr: String; + function GetAfterStr: string; + function GetBeforeStr: string; function GetIgnoreCase: boolean; function GetUseRegExp: boolean; public - function ExecuteReplace(TargetStr: String): String; + constructor Create(Collection: TCollection); override; + function ExecuteReplace(TargetStr: string): string; procedure Assign(Source: TPersistent); override; + procedure Clear; + function IsValidPair: Boolean; published - property BeforeStr: String read GetBeforeStr write SetBeforeStr; - property AfterStr: String read GetAfterStr write SetAfterStr; - property IgnoreCase: boolean read GetIgnoreCase write SetIgnoreCase; - property UseRegExp: boolean read GetUseRegExp write SetUseRegExp; + property BeforeStr: string read GetBeforeStr write SetBeforeStr; + property AfterStr: string read GetAfterStr write SetAfterStr; + property IgnoreCase: boolean read GetIgnoreCase write SetIgnoreCase default false; + property UseRegExp: boolean read GetUseRegExp write SetUseRegExp default false; end; - // TReplacePair‚̃RƒŒƒNƒVƒ‡ƒ“ƒNƒ‰ƒX + // TReplacePair‚̃RƒŒƒNƒVƒ‡ƒ“ƒNƒ‰ƒXB TReplacePairCollection = class(TCollection) + private + function GetItem(Index: Integer): TReplacePair; public - function ExecuteReplace(TargetStr: String): String; + function Add: TReplacePair; + property Items[Index: Integer]: TReplacePair read GetItem; default; + function ExecuteReplace(TargetStr: string): string; + function StringExpression: string; end; // TReplacePair‚̃RƒŒƒNƒVƒ‡ƒ“‚ð•ÛŽ‚µAƒ^ƒCƒgƒ‹‚È‚Ç‚ð‚Ü‚Æ‚ß‚Ä // 1‚‚̃vƒŠƒZƒbƒgÝ’荀–Ú‚ð•\Œ»‚·‚éƒNƒ‰ƒX TReplacePreset = class(TCollectionItem) private - FTitle: String; + FTitle: string; FPairs: TReplacePairCollection; FShortCut: TShortCut; procedure SetPairs(const Value: TReplacePairCollection); procedure SetShortCut(const Value: TShortCut); - procedure SetTitle(const Value: String); + procedure SetTitle(const Value: string); public constructor Create(Collection: TCollection); override; destructor Destroy; override; procedure Assign(Source: TPersistent); override; published property Pairs: TReplacePairCollection read FPairs write SetPairs; - property Title: String read FTitle write SetTitle; + property Title: string read FTitle write SetTitle; property ShortCut: TShortCut read FShortCut write SetShortCut; end; - // ƒvƒŠƒZƒbƒgÝ’荀–ÚTReplacePreset‚̃RƒŒƒNƒVƒ‡ƒ“ƒNƒ‰ƒX TReplacePresetCollection = class(TCollection) + private + function GetItem(Index: Integer): TReplacePreset; + public + function Add: TReplacePreset; + property Items[Index: Integer]: TReplacePreset read GetItem; default; end; // ÅI“I‚É‚±‚ê‚ðƒVƒŠƒAƒ‰ƒCƒY‚·‚é @@ -98,7 +110,24 @@ begin FPairRec := (Source as TReplacePair).FPairRec; end; -function TReplacePair.ExecuteReplace(TargetStr: String): String; +procedure TReplacePair.Clear; +begin + with FPairRec do + begin + BeforeStr := ''; + AfterStr := ''; + UseRegExp := false; + IgnoreCase := false; + end; +end; + +constructor TReplacePair.Create(Collection: TCollection); +begin + inherited; + IgnoreCase := true; +end; + +function TReplacePair.ExecuteReplace(TargetStr: string): string; var Options: TReplaceFlags; begin @@ -113,12 +142,12 @@ begin Result := StringReplace(Result, BeforeStr, AfterStr, Options); end; -function TReplacePair.GetAfterStr: String; +function TReplacePair.GetAfterStr: string; begin Result := FPairRec.AfterStr; end; -function TReplacePair.GetBeforeStr: String; +function TReplacePair.GetBeforeStr: string; begin Result := FPairRec.BeforeStr; end; @@ -133,12 +162,25 @@ begin Result := FPairRec.UseRegExp; end; -procedure TReplacePair.SetAfterStr(const Value: String); +function TReplacePair.IsValidPair: Boolean; +begin + Result := true; + if BeforeStr = '' then + Result := false + else + try + ExecuteReplace(' ') + except + Result := false; + end; +end; + +procedure TReplacePair.SetAfterStr(const Value: string); begin FPairRec.AfterStr := Value; end; -procedure TReplacePair.SetBeforeStr(const Value: String); +procedure TReplacePair.SetBeforeStr(const Value: string); begin FPairRec.BeforeStr := Value; end; @@ -192,7 +234,7 @@ begin FShortCut := Value; end; -procedure TReplacePreset.SetTitle(const Value: String); +procedure TReplacePreset.SetTitle(const Value: string); begin FTitle := Value; end; @@ -200,15 +242,12 @@ end; { TReplacePresets } procedure TReplacePresets.Assign(Source: TPersistent); -var - Src: TReplacePresets; begin if not (Source is TReplacePresets) then inherited else begin - Src := Source as TReplacePresets; - Presets.Assign(Src.Presets); + FPresets.Assign((Source as TReplacePresets).FPresets); end; end; @@ -232,9 +271,14 @@ end; { TReplacePairCollection } -function TReplacePairCollection.ExecuteReplace(TargetStr: String): String; +function TReplacePairCollection.Add: TReplacePair; +begin + Result := inherited Add as TReplacePair; +end; + +function TReplacePairCollection.ExecuteReplace(TargetStr: string): string; var - i: integer; + i: Integer; begin Result := TargetStr; for i := 0 to Count-1 do @@ -243,6 +287,37 @@ begin end; end; +function TReplacePairCollection.GetItem(Index: Integer): TReplacePair; +begin + Result := (inherited GetItem(Index)) as TReplacePair; +end; + +function TReplacePairCollection.StringExpression: string; +var + i: Integer; +begin + Result := ''; + for i := 0 to Count-1 do + begin + if i > 0 then + Result := Result + 'A'; + Result := Result + Format('u%sv¨u%sv', + [Items[i].BeforeStr, Items[i].AfterStr]); + end; +end; + +{ TReplacePresetCollection } + +function TReplacePresetCollection.Add: TReplacePreset; +begin + Result := inherited Add as TReplacePreset; +end; + +function TReplacePresetCollection.GetItem(Index: Integer): TReplacePreset; +begin + Result := inherited GetItem(Index) as TReplacePreset; +end; + initialization Classes.RegisterClass(TReplacePresets); diff --git a/bottleclient/StrReplaceDialog.pas b/bottleclient/StrReplaceDialog.pas index e48e02f..40f6233 100644 --- a/bottleclient/StrReplaceDialog.pas +++ b/bottleclient/StrReplaceDialog.pas @@ -14,11 +14,11 @@ type procedure btnCancelClick(Sender: TObject); procedure btnOkClick(Sender: TObject); private - function GetPairRec: TReplacePairRec; - procedure SetPairRec(const Value: TReplacePairRec); + function GetPair: TReplacePair; + procedure SetPair(const Value: TReplacePair); { Private éŒ¾ } public - property PairRec: TReplacePairRec read GetPairRec write SetPairRec; + property Pair: TReplacePair read GetPair write SetPair; function Execute: boolean; end; @@ -36,11 +36,9 @@ end; procedure TfrmStrReplaceDialog.btnOkClick(Sender: TObject); var - PairRec: TReplacePairRec; Dummy: String; begin - PairRec := frmStrReplaceFrame.PairRec; - with PairRec do + with Pair do begin if UseRegExp and (SafeAndCheckRegExpSubst(BeforeStr, AfterStr, [rfReplaceAll], Dummy) <> '') then @@ -62,14 +60,14 @@ begin Result := ShowModal = mrOk; end; -function TfrmStrReplaceDialog.GetPairRec: TReplacePairRec; +function TfrmStrReplaceDialog.GetPair: TReplacePair; begin - Result := frmStrReplaceFrame.PairRec; + Result := frmStrReplaceFrame.Pair; end; -procedure TfrmStrReplaceDialog.SetPairRec(const Value: TReplacePairRec); +procedure TfrmStrReplaceDialog.SetPair(const Value: TReplacePair); begin - frmStrReplaceFrame.PairRec := Value; + frmStrReplaceFrame.Pair := Value; end; end. diff --git a/bottleclient/StrReplaceFrame.dfm b/bottleclient/StrReplaceFrame.dfm index 3f9b595..e63ba95 100644 --- a/bottleclient/StrReplaceFrame.dfm +++ b/bottleclient/StrReplaceFrame.dfm @@ -30,6 +30,7 @@ object frmStrReplaceFrame: TfrmStrReplaceFrame Height = 20 Anchors = [akLeft, akTop, akRight] TabOrder = 1 + OnChange = ContentUpdate end object edtOldPattern: TEdit Left = 111 @@ -38,21 +39,26 @@ object frmStrReplaceFrame: TfrmStrReplaceFrame Height = 20 Anchors = [akLeft, akTop, akRight] TabOrder = 0 + OnChange = ContentUpdate end object cbxUseRegExp: TCheckBox Left = 0 Top = 56 Width = 193 Height = 17 + Hint = #26908#32034#26465#20214#12395#27491#35215#34920#29694#12434#20351#29992#21487#33021#12395#12375#12414#12377 Caption = #27491#35215#34920#29694'(&R)' TabOrder = 2 + OnClick = ContentUpdate end object cbxDontIgnoreCase: TCheckBox Left = 0 Top = 80 Width = 193 Height = 17 + Hint = #26908#32034#26178#12395#22823#25991#23383#12539#23567#25991#23383#12434#21306#21029#12375#12414#12377 Caption = #22823#25991#23383#12539#23567#25991#23383#12434#21306#21029#12377#12427'(&C)' TabOrder = 3 + OnClick = ContentUpdate end end diff --git a/bottleclient/StrReplaceFrame.pas b/bottleclient/StrReplaceFrame.pas index f097c0f..c197134 100644 --- a/bottleclient/StrReplaceFrame.pas +++ b/bottleclient/StrReplaceFrame.pas @@ -14,14 +14,26 @@ type lblNewPattern: TLabel; cbxUseRegExp: TCheckBox; cbxDontIgnoreCase: TCheckBox; + procedure ContentUpdate(Sender: TObject); private - FPairRec: TReplacePairRec; - procedure SetPairRec(const Value: TReplacePairRec); + FPair: TReplacePair; + FOnContentUpdate: TNotifyEvent; + FUpdateCount: Integer; + procedure SetPairRec(const Value: TReplacePair); procedure UpdateControls; procedure ControlsToData; - function GetPairRec: TReplacePairRec; + function GetPairRec: TReplacePair; + procedure SetOnContentUpdate(const Value: TNotifyEvent); + protected + procedure BeginUpdate; + procedure EndUpdate; + procedure SetEnabled(Value: boolean); override; public - property PairRec: TReplacePairRec read GetPairRec write SetPairRec; + constructor Create(AOwner: TComponent); override; + destructor Destroy; override; + property Pair: TReplacePair read GetPairRec write SetPairRec; + property OnContentUpdate: TNotifyEvent read FOnContentUpdate + write SetOnContentUpdate; end; implementation @@ -32,7 +44,7 @@ implementation procedure TfrmStrReplaceFrame.ControlsToData; begin - with FPairRec do + with FPair do begin BeforeStr := edtOldPattern.Text; AfterStr := edtNewPattern.Text; @@ -41,26 +53,78 @@ begin end; end; -function TfrmStrReplaceFrame.GetPairRec: TReplacePairRec; +constructor TfrmStrReplaceFrame.Create(AOwner: TComponent); +begin + inherited; + FPair := TReplacePair.Create(nil); +end; + +destructor TfrmStrReplaceFrame.Destroy; +begin + FPair.Free; + inherited; +end; + +function TfrmStrReplaceFrame.GetPairRec: TReplacePair; begin ControlsToData; - Result := FPairRec; + Result := FPair; end; -procedure TfrmStrReplaceFrame.SetPairRec(const Value: TReplacePairRec); +procedure TfrmStrReplaceFrame.SetOnContentUpdate(const Value: TNotifyEvent); begin - FPairRec := Value; + FOnContentUpdate := Value; +end; + +procedure TfrmStrReplaceFrame.SetPairRec(const Value: TReplacePair); +begin + FPair.Assign(Value); UpdateControls; end; procedure TfrmStrReplaceFrame.UpdateControls; begin - with FPairRec do + with FPair do + begin + BeginUpdate; + try + edtOldPattern.Text := BeforeStr; + edtNewPattern.Text := AfterStr; + cbxUseRegExp.Checked := UseRegExp; + cbxDontIgnoreCase.Checked := not IgnoreCase; + finally + EndUpdate; + end; + end; +end; + +procedure TfrmStrReplaceFrame.ContentUpdate(Sender: TObject); +begin + if Assigned(FOnContentUpdate) and (FUpdateCount = 0) then + FOnContentUpdate(Self); +end; + +procedure TfrmStrReplaceFrame.BeginUpdate; +begin + Inc(FUpdateCount); +end; + +procedure TfrmStrReplaceFrame.EndUpdate; +begin + Dec(FUpdateCount); + if FUpdateCount = 0 then + ContentUpdate(Self); +end; + +procedure TfrmStrReplaceFrame.SetEnabled(Value: boolean); +begin + if Enabled <> Value then begin - edtOldPattern.Text := BeforeStr; - edtNewPattern.Text := AfterStr; - cbxUseRegExp.Checked := UseRegExp; - cbxDontIgnoreCase.Checked := not IgnoreCase; + edtOldPattern.Enabled := Value; + edtNewPattern.Enabled := Value; + cbxUseRegExp.Enabled := Value; + cbxDontIgnoreCase.Enabled := Value; + inherited SetEnabled(Value); end; end; -- 2.11.0