ncurses 5.2
[ncurses.git] / Ada95 / samples / sample-menu_demo-handler.adb
index aa0c10ea0f5da097b5254e2cdb55cf83cc84c328..e7b1bf8a0ac5105c7da51b27028279beb2faeebd 100644 (file)
@@ -6,26 +6,41 @@
 --                                                                          --
 --                                 B O D Y                                  --
 --                                                                          --
---  Version 00.92                                                           --
+------------------------------------------------------------------------------
+-- Copyright (c) 1998 Free Software Foundation, Inc.                        --
+--                                                                          --
+-- Permission is hereby granted, free of charge, to any person obtaining a  --
+-- copy of this software and associated documentation files (the            --
+-- "Software"), to deal in the Software without restriction, including      --
+-- without limitation the rights to use, copy, modify, merge, publish,      --
+-- distribute, distribute with modifications, sublicense, and/or sell       --
+-- copies of the Software, and to permit persons to whom the Software is    --
+-- furnished to do so, subject to the following conditions:                 --
 --                                                                          --
---  The ncurses Ada95 binding is copyrighted 1996 by                        --
---  Juergen Pfeifer, Email: Juergen.Pfeifer@T-Online.de                     --
+-- The above copyright notice and this permission notice shall be included  --
+-- in all copies or substantial portions of the Software.                   --
 --                                                                          --
---  Permission is hereby granted to reproduce and distribute this           --
---  binding by any means and for any fee, whether alone or as part          --
---  of a larger distribution, in source or in binary form, PROVIDED         --
---  this notice is included with any such distribution, and is not          --
---  removed from any of its header files. Mention of ncurses and the        --
---  author of this binding in any applications linked with it is            --
---  highly appreciated.                                                     --
+-- THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS  --
+-- OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF               --
+-- MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.   --
+-- IN NO EVENT SHALL THE ABOVE COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM,   --
+-- DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR    --
+-- OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR    --
+-- THE USE OR OTHER DEALINGS IN THE SOFTWARE.                               --
 --                                                                          --
---  This binding comes AS IS with no warranty, implied or expressed.        --
+-- Except as contained in this notice, the name(s) of the above copyright   --
+-- holders shall not be used in advertising or otherwise to promote the     --
+-- sale, use or other dealings in this Software without prior written       --
+-- authorization.                                                           --
 ------------------------------------------------------------------------------
+--  Author: Juergen Pfeifer <juergen.pfeifer@gmx.net> 1996
 --  Version Control
---  $Revision: 1.2 $
+--  $Revision: 1.10 $
+--  Binding Version 01.00
 ------------------------------------------------------------------------------
 with Sample.Menu_Demo.Aux;
-with Sample.Explanation; use Sample.Explanation;
+with Sample.Manifest; use Sample.Manifest;
+with Terminal_Interface.Curses.Mouse;  use Terminal_Interface.Curses.Mouse;
 
 package body Sample.Menu_Demo.Handler is
 
@@ -48,9 +63,14 @@ package body Sample.Menu_Demo.Handler is
                        Col   : in Column_Position;
                        Title : in String := "")
    is
-      Pan : Panel := Aux.Create (M, Title, Lin, Col);
-      V   : Cursor_Visibility := Invisible;
+      Mask : Event_Mask := No_Events;
+      Old  : Event_Mask;
+      Pan  : Panel := Aux.Create (M, Title, Lin, Col);
+      V    : Cursor_Visibility := Invisible;
    begin
+      --  We are only interested in Clicks with the left button
+      Register_Reportable_Events (Left, All_Clicks, Mask);
+      Old := Start_Mouse (Mask);
       Set_Cursor_Visibility (V);
       loop
          declare
@@ -60,14 +80,27 @@ package body Sample.Menu_Demo.Handler is
             case R is
                when Menu_Ok => null;
                when Unknown_Request =>
-                  if My_Driver (M, K, Pan) then
-                     exit;
-                  end if;
+                  declare
+                     I : constant Item := Current (M);
+                     O : Item_Option_Set;
+                  begin
+                     if K = Key_Mouse then
+                        K := SELECT_ITEM;
+                     end if;
+                     Get_Options (I, O);
+                     if K = SELECT_ITEM and then not O.Selectable then
+                        Beep;
+                     else
+                        if My_Driver (M, K, Pan) then
+                           exit;
+                        end if;
+                     end if;
+                  end;
                when others => Beep;
             end case;
          end;
       end loop;
-      Set_Cursor_Visibility (V);
+      End_Mouse (Old);
       Aux.Destroy (M, Pan);
    end Drive_Me;