From fa595e9e5b9c7692f21df548a0d06b5a3671fbc1 Mon Sep 17 00:00:00 2001 From: Jed Barber Date: Mon, 14 Nov 2016 14:43:10 +1100 Subject: Edit and search menu items now grey themselves out when appropriate --- c_fl_menu.cpp | 15 +++++++++++++++ c_fl_menu.h | 3 +++ c_fl_text_buffer.cpp | 5 +++++ c_fl_text_buffer.h | 1 + fltk-text_buffers.adb | 15 +++++++++++++++ fltk-text_buffers.ads | 5 +++++ fltk-widgets-menus.adb | 47 +++++++++++++++++++++++++++++++++++++++++++++++ fltk-widgets-menus.ads | 14 ++++++++++++++ 8 files changed, 105 insertions(+) diff --git a/c_fl_menu.cpp b/c_fl_menu.cpp index 0455e51..f8c7b9e 100644 --- a/c_fl_menu.cpp +++ b/c_fl_menu.cpp @@ -10,6 +10,11 @@ int fl_menu_add(MENU m, const char * t, unsigned long s, void * c, void * u, uns } +const void * fl_menu_find_item(MENU m, const char * t) { + return reinterpret_cast(m)->find_item(t); +} + + const void * fl_menu_mvalue(MENU m) { return reinterpret_cast(m)->mvalue(); } @@ -21,3 +26,13 @@ int fl_menuitem_value(void * mi) { return reinterpret_cast(mi)->value(); } + +void fl_menuitem_activate(void * mi) { + reinterpret_cast(mi)->activate(); +} + + +void fl_menuitem_deactivate(void * mi) { + reinterpret_cast(mi)->deactivate(); +} + diff --git a/c_fl_menu.h b/c_fl_menu.h index 1599334..2b9aa68 100644 --- a/c_fl_menu.h +++ b/c_fl_menu.h @@ -9,10 +9,13 @@ typedef void* MENU; extern "C" int fl_menu_add(MENU m, const char * t, unsigned long s, void * c, void * u, unsigned long f); +extern "C" const void * fl_menu_find_item(MENU m, const char * t); extern "C" const void * fl_menu_mvalue(MENU m); extern "C" int fl_menuitem_value(void * mi); +extern "C" void fl_menuitem_activate(void * mi); +extern "C" void fl_menuitem_deactivate(void * mi); #endif diff --git a/c_fl_text_buffer.cpp b/c_fl_text_buffer.cpp index 623aea7..966f142 100644 --- a/c_fl_text_buffer.cpp +++ b/c_fl_text_buffer.cpp @@ -80,6 +80,11 @@ int fl_text_buffer_selection_position(TEXTBUFFER tb, int * s, int * e) { } +int fl_text_buffer_selected(TEXTBUFFER tb) { + return reinterpret_cast(tb)->selected(); +} + + int fl_text_buffer_skip_lines(TEXTBUFFER tb, int s, int l) { return reinterpret_cast(tb)->skip_lines(s, l); } diff --git a/c_fl_text_buffer.h b/c_fl_text_buffer.h index 4c5edb3..a7b954b 100644 --- a/c_fl_text_buffer.h +++ b/c_fl_text_buffer.h @@ -24,6 +24,7 @@ extern "C" int fl_text_buffer_search_forward(TEXTBUFFER tb, int start, const cha extern "C" int fl_text_buffer_search_backward(TEXTBUFFER tb, int start, const char * item, int * found, int mcase); extern "C" void fl_text_buffer_select(TEXTBUFFER tb, int s, int e); extern "C" int fl_text_buffer_selection_position(TEXTBUFFER tb, int * s, int * e); +extern "C" int fl_text_buffer_selected(TEXTBUFFER tb); extern "C" int fl_text_buffer_skip_lines(TEXTBUFFER tb, int s, int l); extern "C" int fl_text_buffer_rewind_lines(TEXTBUFFER tb, int s, int l); extern "C" unsigned int fl_text_buffer_char_at(TEXTBUFFER tb, int p); diff --git a/fltk-text_buffers.adb b/fltk-text_buffers.adb index 6ff5b55..38e6632 100644 --- a/fltk-text_buffers.adb +++ b/fltk-text_buffers.adb @@ -99,6 +99,11 @@ package body FLTK.Text_Buffers is return Interfaces.C.int; pragma Import (C, fl_text_buffer_selection_position, "fl_text_buffer_selection_position"); + function fl_text_buffer_selected + (TB : in System.Address) + return Interfaces.C.int; + pragma Import (C, fl_text_buffer_selected, "fl_text_buffer_selected"); + function fl_text_buffer_skip_lines (TB : in System.Address; S, L : in Interfaces.C.int) @@ -418,6 +423,16 @@ package body FLTK.Text_Buffers is + function Has_Selection + (This : in Text_Buffer) + return Boolean is + begin + return fl_text_buffer_selected (This.Void_Ptr) /= 0; + end Has_Selection; + + + + function Skip_Lines (This : in out Text_Buffer; Start, Lines : in Natural) diff --git a/fltk-text_buffers.ads b/fltk-text_buffers.ads index 582de1d..c17b020 100644 --- a/fltk-text_buffers.ads +++ b/fltk-text_buffers.ads @@ -106,6 +106,11 @@ package FLTK.Text_Buffers is return Boolean; + function Has_Selection + (This : in Text_Buffer) + return Boolean; + + -- only takes into account newline characters, not word wrap function Skip_Lines (This : in out Text_Buffer; diff --git a/fltk-widgets-menus.adb b/fltk-widgets-menus.adb index 169e71d..b1ffd9a 100644 --- a/fltk-widgets-menus.adb +++ b/fltk-widgets-menus.adb @@ -91,6 +91,12 @@ package body FLTK.Widgets.Menus is return Interfaces.C.int; pragma Import (C, fl_menu_add, "fl_menu_add"); + function fl_menu_find_item + (M : in System.Address; + T : in Interfaces.C.char_array) + return System.Address; + pragma Import (C, fl_menu_find_item, "fl_menu_find_item"); + function fl_menu_mvalue (M : in System.Address) return System.Address; @@ -101,6 +107,14 @@ package body FLTK.Widgets.Menus is return Interfaces.C.int; pragma Import (C, fl_menuitem_value, "fl_menuitem_value"); + procedure fl_menuitem_activate + (MI : in System.Address); + pragma Import (C, fl_menuitem_activate, "fl_menuitem_activate"); + + procedure fl_menuitem_deactivate + (MI : in System.Address); + pragma Import (C, fl_menuitem_deactivate, "fl_menuitem_deactivate"); + @@ -150,6 +164,21 @@ package body FLTK.Widgets.Menus is + function Find_Item + (This : in Menu'Class; + Name : in String) + return Menu_Item is + begin + return Item : Menu_Item do + Item.Void_Ptr := fl_menu_find_item + (This.Void_Ptr, + Interfaces.C.To_C (Name)); + end return; + end Find_Item; + + + + function Chosen (This : in Menu'Class) return Menu_Item is @@ -170,5 +199,23 @@ package body FLTK.Widgets.Menus is end Value; + + + procedure Activate + (Item : in Menu_Item) is + begin + fl_menuitem_activate (Item.Void_Ptr); + end Activate; + + + + + procedure Deactivate + (Item : in Menu_Item) is + begin + fl_menuitem_deactivate (Item.Void_Ptr); + end Deactivate; + + end FLTK.Widgets.Menus; diff --git a/fltk-widgets-menus.ads b/fltk-widgets-menus.ads index cf6fcf7..0346d2d 100644 --- a/fltk-widgets-menus.ads +++ b/fltk-widgets-menus.ads @@ -60,6 +60,12 @@ package FLTK.Widgets.Menus is Flags : in Menu_Flag := Flag_Normal); + function Find_Item + (This : in Menu'Class; + Name : in String) + return Menu_Item; + + function Chosen (This : in Menu'Class) return Menu_Item; @@ -70,6 +76,14 @@ package FLTK.Widgets.Menus is return Boolean; + procedure Activate + (Item : in Menu_Item); + + + procedure Deactivate + (Item : in Menu_Item); + + private -- cgit