summaryrefslogtreecommitdiff
path: root/src/adapad.adb
diff options
context:
space:
mode:
Diffstat (limited to 'src/adapad.adb')
-rw-r--r--src/adapad.adb241
1 files changed, 236 insertions, 5 deletions
diff --git a/src/adapad.adb b/src/adapad.adb
index 2f4c483..f1425f9 100644
--- a/src/adapad.adb
+++ b/src/adapad.adb
@@ -18,17 +18,36 @@ function AdaPad return Integer is
Pad : aliased Editor_Window := Create (0, 0, 640, 400, "AdaPad");
- Buffer : Text_Buffer := Create;
+ Buff : aliased Text_Buffer := Create;
+
+
type Editor_Callback is abstract new Widget_Callback with
record
- Editor : access Editor_Window;
+ Editor : access Editor_Window := Pad'Access;
+ Buffer : access Text_Buffer := Buff'Access;
end record;
+
+
+ type New_Callback is new Editor_Callback with null record;
+ New_CB : aliased New_Callback;
+
+
+ overriding procedure Call
+ (This : in New_Callback;
+ Item : in out Widget'Class) is
+ begin
+ Ada.Text_IO.Put_Line ("New callback executed.");
+ end Call;
+
+
+
+
type Open_Callback is new Editor_Callback with null record;
- Open_CB : aliased Open_Callback := (Editor => Pad'Access);
+ Open_CB : aliased Open_Callback;
overriding procedure Call
@@ -39,17 +58,229 @@ function AdaPad return Integer is
end Call;
+
+
+ type Save_Callback is new Editor_Callback with null record;
+ Save_CB : aliased Save_Callback;
+
+
+ overriding procedure Call
+ (This : in Save_Callback;
+ Item : in out Widget'Class) is
+ begin
+ Ada.Text_IO.Put_Line ("Save callback executed.");
+ end Call;
+
+
+
+
+ type Save_As_Callback is new Editor_Callback with null record;
+ Save_As_CB : aliased Save_As_Callback;
+
+
+ overriding procedure Call
+ (This : in Save_As_Callback;
+ Item : in out Widget'Class) is
+ begin
+ Ada.Text_IO.Put_Line ("Save As callback executed.");
+ end Call;
+
+
+
+
+ type Quit_Callback is new Editor_Callback with null record;
+ Quit_CB : aliased Quit_Callback;
+
+
+ overriding procedure Call
+ (This : in Quit_Callback;
+ Item : in out Widget'Class) is
+ begin
+ Ada.Text_IO.Put_Line ("Quit callback executed.");
+ end Call;
+
+
+
+
+ type Undo_Callback is new Editor_Callback with null record;
+ Undo_CB : aliased Undo_Callback;
+
+
+ overriding procedure Call
+ (This : in Undo_Callback;
+ Item : in out Widget'Class) is
+ begin
+ Ada.Text_IO.Put_Line ("Undo callback executed.");
+ end Call;
+
+
+
+
+ type Cut_Callback is new Editor_Callback with null record;
+ Cut_CB : aliased Cut_Callback;
+
+
+ overriding procedure Call
+ (This : in Cut_Callback;
+ Item : in out Widget'Class) is
+ begin
+ This.Editor.Cut;
+ end Call;
+
+
+
+
+ type Copy_Callback is new Editor_Callback with null record;
+ Copy_CB : aliased Copy_Callback;
+
+
+ overriding procedure Call
+ (This : in Copy_Callback;
+ Item : in out Widget'Class) is
+ begin
+ This.Editor.Copy;
+ end Call;
+
+
+
+
+ type Paste_Callback is new Editor_Callback with null record;
+ Paste_CB : aliased Paste_Callback;
+
+
+ overriding procedure Call
+ (This : in Paste_Callback;
+ Item : in out Widget'Class) is
+ begin
+ This.Editor.Paste;
+ end Call;
+
+
+
+
+ type Delete_Callback is new Editor_Callback with null record;
+ Delete_CB : aliased Delete_Callback;
+
+
+ overriding procedure Call
+ (This : in Delete_Callback;
+ Item : in out Widget'Class) is
+ begin
+ This.Editor.Delete;
+ end Call;
+
+
+
+
+ type Find_Callback is new Editor_Callback with null record;
+ Find_CB : aliased Find_Callback;
+
+
+ overriding procedure Call
+ (This : in Find_Callback;
+ Item : in out Widget'Class) is
+ begin
+ Ada.Text_IO.Put_Line ("Find callback executed.");
+ end Call;
+
+
+
+
+ type Replace_Callback is new Editor_Callback with null record;
+ Replace_CB : aliased Replace_Callback;
+
+
+ overriding procedure Call
+ (This : in Replace_Callback;
+ Item : in out Widget'Class) is
+ begin
+ Ada.Text_IO.Put_Line ("Replace callback executed.");
+ end Call;
+
+
+
+
+ type About_Callback is new Editor_Callback with null record;
+ About_CB : aliased About_Callback;
+
+
+ overriding procedure Call
+ (This : in About_Callback;
+ Item : in out Widget'Class) is
+ begin
+ Ada.Text_IO.Put_Line ("About callback executed.");
+ end Call;
+
+
+
+
+ type Mod_Callback is new Modify_Callback with null record;
+ Mod_CB : aliased Mod_Callback;
+
+
+ overriding procedure Call
+ (This : in Mod_Callback;
+ Action : in Modification;
+ Place : in Position;
+ Length : in Natural;
+ Deleted_Text : in String) is
+ begin
+ Ada.Text_IO.Put_Line ("Modify of Type: " & Modification'Image (Action) &
+ " Place: " & Position'Image (Place) &
+ " Length: " & Integer'Image (Length));
+ end Call;
+
+
+
+
+ type Pre_Callback is new Predelete_Callback with null record;
+ Pre_CB : aliased Pre_Callback;
+
+
+ overriding procedure Call
+ (This : in Pre_Callback;
+ Place : in Position;
+ Length : in Natural) is
+ begin
+ Ada.Text_IO.Put_Line ("Predelete at Place: " & Position'Image (Place) &
+ " Length: " & Integer'Image (Length));
+ end Call;
+
+
begin
+ Buff.Add_Modify_Callback (Mod_CB'Access);
+ Buff.Add_Predelete_Callback (Pre_CB'Access);
+
+
declare
Bar : Menu_Cursor := Pad.Get_Menu;
begin
- Bar.Add ("File/Open", Open_CB'Access);
+ Bar.Add (Text => "&File", Shortcut => Mod_Alt + 'f', Flags => Flag_Submenu);
+ Bar.Add ("File/&New", New_CB'Access, Mod_Ctrl + 'n');
+ Bar.Add ("File/&Open...", Open_CB'Access, Mod_Ctrl + 'o');
+ Bar.Add ("File/&Save", Save_CB'Access, Mod_Ctrl + 's');
+ Bar.Add ("File/Save &As...", Save_As_CB'Access, Mod_Shift + Mod_Ctrl + 's');
+ Bar.Add ("File/&Quit", Quit_CB'Access, Mod_Ctrl + 'q');
+
+ Bar.Add (Text => "&Edit", Shortcut => Mod_Alt + 'e', Flags => Flag_Submenu);
+ Bar.Add ("Edit/&Undo", Undo_CB'Access, Mod_Ctrl + 'z');
+ Bar.Add ("Edit/Cu&t", Cut_CB'Access, Mod_Ctrl + 'x');
+ Bar.Add ("Edit/&Copy", Copy_CB'Access, Mod_Ctrl + 'c');
+ Bar.Add ("Edit/&Paste", Paste_CB'Access, Mod_Ctrl + 'v');
+ Bar.Add ("Edit/&Delete", Delete_CB'Access);
+
+ Bar.Add (Text => "&Search", Shortcut => Mod_Alt + 's', Flags => Flag_Submenu);
+ Bar.Add ("Search/&Find...", Find_CB'Access, Mod_Ctrl + 'f');
+ Bar.Add ("Search/&Replace...", Replace_CB'Access, Mod_Ctrl + 'h');
+
+ Bar.Add (Text => "&Help", Shortcut => Mod_Alt + 'h', Flags => Flag_Submenu);
+ Bar.Add ("Help/&About", About_CB'Access);
end;
- Pad.Set_Buffer (Buffer);
+ Pad.Set_Buffer (Buff);
Pad.Show;
return FLTK.Run;