Browse Source

+ Cut/Copy/Paste added to TEditorInputLine

pierre 22 years ago
parent
commit
09b12ce0ad
1 changed files with 84 additions and 22 deletions
  1. 84 22
      ide/weditor.pas

+ 84 - 22
ide/weditor.pas

@@ -6809,28 +6809,87 @@ end;
 
 
 procedure TEditorInputLine.HandleEvent(var Event : TEvent);
 procedure TEditorInputLine.HandleEvent(var Event : TEvent);
 var
 var
-  s : string;
+  s,s2 : string;
   i : longint;
   i : longint;
 begin
 begin
-     If (Event.What=evKeyDown) and
-        (Event.KeyCode=kbRight) and
-        (CurPos = Length(Data^)) and
-        Assigned(FindReplaceEditor) then
-       Begin
-         s:=FindReplaceEditor^.GetDisplayText(FindReplaceEditor^.CurPos.Y);
-         s:=Copy(s,FindReplaceEditor^.CurPos.X + 1 -length(Data^),high(s));
-         i:=pos(Data^,s);
-         if i>0 then
+     If (Event.What=evKeyDown) then
+       begin
+         if (Event.KeyCode=kbRight) and
+            (CurPos = Length(Data^)) and
+            Assigned(FindReplaceEditor) then
+           Begin
+             s:=FindReplaceEditor^.GetDisplayText(FindReplaceEditor^.CurPos.Y);
+             s:=Copy(s,FindReplaceEditor^.CurPos.X + 1 -length(Data^),high(s));
+             i:=pos(Data^,s);
+             if i>0 then
+               begin
+                 s:=Data^+s[i+length(Data^)];
+                 If not assigned(validator) or
+                    Validator^.IsValidInput(s,False)  then
+                   Begin
+                     Event.CharCode:=s[length(s)];
+                     Event.Scancode:=0;
+                     Inherited HandleEvent(Event);
+                   End;
+               end;
+             ClearEvent(Event);
+           End
+         else if (Event.KeyCode=kbShiftIns)  and
+                 Assigned(Clipboard) and (Clipboard^.ValidBlock) then
+           { paste from clipboard }
            begin
            begin
-             s:=Data^+s[i+length(Data^)];
-             If not assigned(validator) or
-                Validator^.IsValidInput(s,False)  then
-               Begin
-                 Event.CharCode:=s[length(s)];
-                 Event.Scancode:=0;
-                 Inherited HandleEvent(Event);
-               End;
-           end;
+             i:=Clipboard^.SelStart.Y;
+             s:=Clipboard^.GetDisplayText(i);
+             i:=Clipboard^.SelStart.X;
+             if i>0 then
+              s:=copy(s,i+1,high(s));
+             if (Clipboard^.SelStart.Y=Clipboard^.SelEnd.Y) then
+               begin
+                 i:=Clipboard^.SelEnd.X-i;
+                 s:=copy(s,1,i);
+               end;
+             for i:=1 to length(s) do
+               begin
+                 s2:=Data^+s[i];
+                 If not assigned(validator) or
+                    Validator^.IsValidInput(s2,False)  then
+                   Begin
+                     Event.What:=evKeyDown;
+                     Event.CharCode:=s[i];
+                     Event.Scancode:=0;
+                     Inherited HandleEvent(Event);
+                   End;
+               end;
+             ClearEvent(Event);
+           end
+         else if (Event.KeyCode=kbCtrlIns)  and
+                 Assigned(Clipboard) then
+           { Copy to clipboard }
+           begin
+             s:=GetStr(Data);
+             s:=copy(s,selstart+1,selend-selstart);
+             Clipboard^.SelStart:=Clipboard^.CurPos;
+             Clipboard^.InsertText(s);
+             Clipboard^.SelEnd:=Clipboard^.CurPos;
+             ClearEvent(Event);
+           end
+         else if (Event.KeyCode=kbShiftDel)  and
+                 Assigned(Clipboard) then
+           { Cut to clipboard }
+           begin
+             s:=GetStr(Data);
+             s:=copy(s,selstart+1,selend-selstart);
+             Clipboard^.SelStart:=Clipboard^.CurPos;
+             Clipboard^.InsertText(s);
+             Clipboard^.SelEnd:=Clipboard^.CurPos;
+             s2:=GetStr(Data);
+             { now remove the selected part }
+             Event.keyCode:=kbDel;
+             inherited HandleEvent(Event);
+             ClearEvent(Event);
+           end
+         else
+           Inherited HandleEvent(Event);
        End
        End
      else
      else
        Inherited HandleEvent(Event);
        Inherited HandleEvent(Event);
@@ -6914,7 +6973,7 @@ var R,R1,R2: TRect;
     D: PDialog;
     D: PDialog;
     Control : PView;
     Control : PView;
     IL1: PEditorInputLine;
     IL1: PEditorInputLine;
-    IL2: PInputLine;
+    IL2: PEditorInputLine;
     CB1: PCheckBoxes;
     CB1: PCheckBoxes;
     RB1,RB2,RB3: PRadioButtons;
     RB1,RB2,RB3: PRadioButtons;
 begin
 begin
@@ -7001,7 +7060,7 @@ function CreateGotoLineDialog(Info: pointer): PDialog;
 var D: PDialog;
 var D: PDialog;
     R,R1,R2: TRect;
     R,R1,R2: TRect;
     Control : PView;
     Control : PView;
-    IL: PInputLine;
+    IL: PEditorInputLine;
 begin
 begin
   R.Assign(0,0,40,7);
   R.Assign(0,0,40,7);
   New(D, Init(R, dialog_gotoline));
   New(D, Init(R, dialog_gotoline));
@@ -7191,7 +7250,10 @@ end;
 END.
 END.
 {
 {
   $Log$
   $Log$
-  Revision 1.38  2002-12-17 13:48:28  pierre
+  Revision 1.39  2002-12-18 01:18:10  pierre
+   + Cut/Copy/Paste added to TEditorInputLine
+
+  Revision 1.38  2002/12/17 13:48:28  pierre
    * fix web bug 2012
    * fix web bug 2012
 
 
   Revision 1.37  2002/12/16 15:13:58  pierre
   Revision 1.37  2002/12/16 15:13:58  pierre