From 36709ab2223dc9a871f81d5dacf3df1e77a23281 Mon Sep 17 00:00:00 2001 From: Jed Barber Date: Tue, 27 Mar 2018 14:30:46 +1100 Subject: Added FLTK.Tooltips --- progress.txt | 13 ++- src/c_fl_tooltip.cpp | 111 ++++++++++++++++++ src/c_fl_tooltip.h | 41 +++++++ src/fltk-tooltips.adb | 313 ++++++++++++++++++++++++++++++++++++++++++++++++++ src/fltk-tooltips.ads | 93 +++++++++++++++ 5 files changed, 569 insertions(+), 2 deletions(-) create mode 100644 src/c_fl_tooltip.cpp create mode 100644 src/c_fl_tooltip.h create mode 100644 src/fltk-tooltips.adb create mode 100644 src/fltk-tooltips.ads diff --git a/progress.txt b/progress.txt index c5a0557..2d47916 100644 --- a/progress.txt +++ b/progress.txt @@ -30,6 +30,7 @@ FLTK.Images.RGB.BMP FLTK.Images.RGB.JPEG FLTK.Images.RGB.PNG FLTK.Images.RGB.PNM +FLTK.Tooltips FLTK.Widgets.Boxes FLTK.Widgets.Buttons FLTK.Widgets.Buttons.Enter @@ -120,11 +121,10 @@ FL_File_Browser FL_Hold_Browser FL_Multi_Browser FL_Select_Browser -FL_Help_View (several methods have ABI_VERSION bugs) +FL_Help_View FL_Table FL_Table_Row FL_Tree -FL_Tooltip FL_Preferences FL_Label @@ -136,6 +136,15 @@ FL_Label +Bugs to fix: + +Fl_Help_View ABI_VERSION checks +Fl_Tooltip ABI_VERSION checks +Fl_Wizard draw() method private/protected + + + + Never: FL_FormsBitmap diff --git a/src/c_fl_tooltip.cpp b/src/c_fl_tooltip.cpp new file mode 100644 index 0000000..a281333 --- /dev/null +++ b/src/c_fl_tooltip.cpp @@ -0,0 +1,111 @@ + + +#include +#include +#include "c_fl_tooltip.h" + + + + +void * fl_tooltip_get_current(void) { + return Fl_Tooltip::current(); +} + +void fl_tooltip_set_current(void * i) { + Fl_Tooltip::current(reinterpret_cast(i)); +} + +int fl_tooltip_enabled(void) { + return Fl_Tooltip::enabled(); +} + +void fl_tooltip_enable(int v) { + Fl_Tooltip::enable(v); +} + +void fl_tooltip_enter_area(void * i, int x, int y, int w, int h, const char * t) { + Fl_Tooltip::enter_area(reinterpret_cast(i),x,y,w,h,t); +} + + + + +float fl_tooltip_get_delay(void) { + return Fl_Tooltip::delay(); +} + +void fl_tooltip_set_delay(float v) { + Fl_Tooltip::delay(v); +} + +float fl_tooltip_get_hoverdelay(void) { + return Fl_Tooltip::hoverdelay(); +} + +void fl_tooltip_set_hoverdelay(float v) { + Fl_Tooltip::hoverdelay(v); +} + + + + +unsigned int fl_tooltip_get_color(void) { + return Fl_Tooltip::color(); +} + +void fl_tooltip_set_color(unsigned int v) { + Fl_Tooltip::color(v); +} + +int fl_tooltip_get_margin_height(void) { + return Fl_Tooltip::margin_height(); +} + +//void fl_tooltip_set_margin_height(int v) { +// Fl_Tooltip::margin_height(v); +//} + +int fl_tooltip_get_margin_width(void) { + return Fl_Tooltip::margin_width(); +} + +//void fl_tooltip_set_margin_width(int v) { +// Fl_Tooltip::margin_width(v); +//} + +int fl_tooltip_get_wrap_width(void) { + return Fl_Tooltip::wrap_width(); +} + +//void fl_tooltip_set_wrap_width(int v) { +// Fl_Tooltip::wrap_width(v); +//} + + + + +unsigned int fl_tooltip_get_textcolor(void) { + return Fl_Tooltip::textcolor(); +} + +void fl_tooltip_set_textcolor(unsigned int v) { + Fl_Tooltip::textcolor(v); +} + +int fl_tooltip_get_font(void) { + return Fl_Tooltip::font(); +} + +void fl_tooltip_set_font(int v) { + Fl_Tooltip::font(v); +} + +int fl_tooltip_get_size(void) { + return Fl_Tooltip::size(); +} + +void fl_tooltip_set_size(int v) { + Fl_Tooltip::size(v); +} + + diff --git a/src/c_fl_tooltip.h b/src/c_fl_tooltip.h new file mode 100644 index 0000000..b5a3644 --- /dev/null +++ b/src/c_fl_tooltip.h @@ -0,0 +1,41 @@ + + +#ifndef FL_TOOLTIP_GUARD +#define FL_TOOLTIP_GUARD + + + + +extern "C" void * fl_tooltip_get_current(void); +extern "C" void fl_tooltip_set_current(void * i); +extern "C" int fl_tooltip_enabled(void); +extern "C" void fl_tooltip_enable(int v); +extern "C" void fl_tooltip_enter_area(void * i, int x, int y, int w, int h, const char * t); + + +extern "C" float fl_tooltip_get_delay(void); +extern "C" void fl_tooltip_set_delay(float v); +extern "C" float fl_tooltip_get_hoverdelay(void); +extern "C" void fl_tooltip_set_hoverdelay(float v); + + +extern "C" unsigned int fl_tooltip_get_color(void); +extern "C" void fl_tooltip_set_color(unsigned int v); +extern "C" int fl_tooltip_get_margin_height(void); +//extern "C" void fl_tooltip_set_margin_height(int v); +extern "C" int fl_tooltip_get_margin_width(void); +//extern "C" void fl_tooltip_set_margin_width(int v); +extern "C" int fl_tooltip_get_wrap_width(void); +//extern "C" void fl_tooltip_set_wrap_width(int v); + + +extern "C" unsigned int fl_tooltip_get_textcolor(void); +extern "C" void fl_tooltip_set_textcolor(unsigned int v); +extern "C" int fl_tooltip_get_font(void); +extern "C" void fl_tooltip_set_font(int v); +extern "C" int fl_tooltip_get_size(void); +extern "C" void fl_tooltip_set_size(int v); + + +#endif + diff --git a/src/fltk-tooltips.adb b/src/fltk-tooltips.adb new file mode 100644 index 0000000..38bcf66 --- /dev/null +++ b/src/fltk-tooltips.adb @@ -0,0 +1,313 @@ + + +with + + Interfaces.C, + System.Address_To_Access_Conversions; + +use type + + Interfaces.C.int; + + +package body FLTK.Tooltips is + + + function fl_tooltip_get_current + return System.Address; + pragma Import (C, fl_tooltip_get_current, "fl_tooltip_get_current"); + + procedure fl_tooltip_set_current + (I : in System.Address); + pragma Import (C, fl_tooltip_set_current, "fl_tooltip_set_current"); + + function fl_tooltip_enabled + return Interfaces.C.int; + pragma Import (C, fl_tooltip_enabled, "fl_tooltip_enabled"); + + procedure fl_tooltip_enable + (V : in Interfaces.C.int); + pragma Import (C, fl_tooltip_enable, "fl_tooltip_enable"); + + procedure fl_tooltip_enter_area + (I : in System.Address; + X, Y, W, H : in Interfaces.C.int; + T : in Interfaces.C.char_array); + pragma Import (C, fl_tooltip_enter_area, "fl_tooltip_enter_area"); + + + + + function fl_tooltip_get_delay + return Interfaces.C.C_float; + pragma Import (C, fl_tooltip_get_delay, "fl_tooltip_get_delay"); + + procedure fl_tooltip_set_delay + (V : in Interfaces.C.C_float); + pragma Import (C, fl_tooltip_set_delay, "fl_tooltip_set_delay"); + + function fl_tooltip_get_hoverdelay + return Interfaces.C.C_float; + pragma Import (C, fl_tooltip_get_hoverdelay, "fl_tooltip_get_hoverdelay"); + + procedure fl_tooltip_set_hoverdelay + (V : in Interfaces.C.C_float); + pragma Import (C, fl_tooltip_set_hoverdelay, "fl_tooltip_set_hoverdelay"); + + + + + function fl_tooltip_get_color + return Interfaces.C.unsigned; + pragma Import (C, fl_tooltip_get_color, "fl_tooltip_get_color"); + + procedure fl_tooltip_set_color + (V : in Interfaces.C.unsigned); + pragma Import (C, fl_tooltip_set_color, "fl_tooltip_set_color"); + + function fl_tooltip_get_margin_height + return Interfaces.C.int; + pragma Import (C, fl_tooltip_get_margin_height, "fl_tooltip_get_margin_height"); + + -- procedure fl_tooltip_set_margin_height + -- (V : in Interfaces.C.int); + -- pragma Import (C, fl_tooltip_set_margin_height, "fl_tooltip_set_margin_height"); + + function fl_tooltip_get_margin_width + return Interfaces.C.int; + pragma Import (C, fl_tooltip_get_margin_width, "fl_tooltip_get_margin_width"); + + -- procedure fl_tooltip_set_margin_width + -- (V : in Interfaces.C.int); + -- pragma Import (C, fl_tooltip_set_margin_width, "fl_tooltip_set_margin_width"); + + function fl_tooltip_get_wrap_width + return Interfaces.C.int; + pragma Import (C, fl_tooltip_get_wrap_width, "fl_tooltip_get_wrap_width"); + + -- procedure fl_tooltip_set_wrap_width + -- (V : in Interfaces.C.int); + -- pragma Import (C, fl_tooltip_set_wrap_width, "fl_tooltip_set_wrap_width"); + + + + + function fl_tooltip_get_textcolor + return Interfaces.C.unsigned; + pragma Import (C, fl_tooltip_get_textcolor, "fl_tooltip_get_textcolor"); + + procedure fl_tooltip_set_textcolor + (V : in Interfaces.C.unsigned); + pragma Import (C, fl_tooltip_set_textcolor, "fl_tooltip_set_textcolor"); + + function fl_tooltip_get_font + return Interfaces.C.int; + pragma Import (C, fl_tooltip_get_font, "fl_tooltip_get_font"); + + procedure fl_tooltip_set_font + (V : in Interfaces.C.int); + pragma Import (C, fl_tooltip_set_font, "fl_tooltip_set_font"); + + function fl_tooltip_get_size + return Interfaces.C.int; + pragma Import (C, fl_tooltip_get_size, "fl_tooltip_get_size"); + + procedure fl_tooltip_set_size + (V : in Interfaces.C.int); + pragma Import (C, fl_tooltip_set_size, "fl_tooltip_set_size"); + + + + + function fl_widget_get_user_data + (W : in System.Address) + return System.Address; + pragma Import (C, fl_widget_get_user_data, "fl_widget_get_user_data"); + + package Widget_Convert is new + System.Address_To_Access_Conversions (FLTK.Widgets.Widget'Class); + + + + + function Get_Target + return access FLTK.Widgets.Widget'Class + is + Widget_Ptr : System.Address := fl_tooltip_get_current; + Actual_Widget : access FLTK.Widgets.Widget'Class := + Widget_Convert.To_Pointer (fl_widget_get_user_data (Widget_Ptr)); + begin + return Actual_Widget; + end Get_Target; + + + procedure Set_Target + (To : in FLTK.Widgets.Widget'Class) is + begin + fl_tooltip_set_current (Wrapper (To).Void_Ptr); + end Set_Target; + + + function Is_Enabled + return Boolean is + begin + return fl_tooltip_enabled /= 0; + end Is_Enabled; + + + procedure Set_Enabled + (To : in Boolean) is + begin + fl_tooltip_enable (Boolean'Pos (To)); + end Set_Enabled; + + + procedure Enter_Area + (Item : in FLTK.Widgets.Widget'Class; + X, Y, W, H : in Integer; + Tip : in String) is + begin + fl_tooltip_enter_area + (Wrapper (Item).Void_Ptr, + Interfaces.C.int (X), + Interfaces.C.int (Y), + Interfaces.C.int (W), + Interfaces.C.int (H), + Interfaces.C.To_C (Tip)); + end Enter_Area; + + + + + function Get_Delay + return Float is + begin + return Float (fl_tooltip_get_delay); + end Get_Delay; + + + procedure Set_Delay + (To : in Float) is + begin + fl_tooltip_set_delay (Interfaces.C.C_float (To)); + end Set_Delay; + + + function Get_Hover_Delay + return Float is + begin + return Float (fl_tooltip_get_hoverdelay); + end Get_Hover_Delay; + + + procedure Set_Hover_Delay + (To : in Float) is + begin + fl_tooltip_set_hoverdelay (Interfaces.C.C_float (To)); + end Set_Hover_Delay; + + + + + function Get_Background_Color + return Color is + begin + return Color (fl_tooltip_get_color); + end Get_Background_Color; + + + procedure Set_Background_Color + (To : in Color) is + begin + fl_tooltip_set_color (Interfaces.C.unsigned (To)); + end Set_Background_Color; + + + function Get_Margin_Height + return Natural is + begin + return Natural (fl_tooltip_get_margin_height); + end Get_Margin_Height; + + + -- procedure Set_Margin_Height + -- (To : in Natural) is + -- begin + -- fl_tooltip_set_margin_height (Interfaces.C.int (To)); + -- end Set_Margin_Height; + + + function Get_Margin_Width + return Natural is + begin + return Natural (fl_tooltip_get_margin_width); + end Get_Margin_Width; + + + -- procedure Set_Margin_Width + -- (To : in Natural) is + -- begin + -- fl_tooltip_set_margin_width (Interfaces.C.int (To)); + -- end Set_Margin_Width; + + + function Get_Wrap_Width + return Natural is + begin + return Natural (fl_tooltip_get_wrap_width); + end Get_Wrap_Width; + + + -- procedure Set_Wrap_Width + -- (To : in Natural) is + -- begin + -- fl_tooltip_set_wrap_width (Interfaces.C.int (To)); + -- end Set_Wrap_Width; + + + + + function Get_Text_Color + return Color is + begin + return Color (fl_tooltip_get_textcolor); + end Get_Text_Color; + + + procedure Set_Text_Color + (To : in Color) is + begin + fl_tooltip_set_textcolor (Interfaces.C.unsigned (To)); + end Set_Text_Color; + + + function Get_Text_Font + return Font_Kind is + begin + return Font_Kind'Val (fl_tooltip_get_font); + end Get_Text_Font; + + + procedure Set_Text_Font + (To : in Font_Kind) is + begin + fl_tooltip_set_font (Font_Kind'Pos (To)); + end Set_Text_Font; + + + function Get_Text_Size + return Font_Size is + begin + return Font_Size (fl_tooltip_get_size); + end Get_Text_Size; + + + procedure Set_Text_Size + (To : in Font_Size) is + begin + fl_tooltip_set_size (Interfaces.C.int (To)); + end Set_Text_Size; + + +end FLTK.Tooltips; + diff --git a/src/fltk-tooltips.ads b/src/fltk-tooltips.ads new file mode 100644 index 0000000..153825f --- /dev/null +++ b/src/fltk-tooltips.ads @@ -0,0 +1,93 @@ + + +with + + FLTK.Widgets; + + +package FLTK.Tooltips is + + + function Get_Target + return access FLTK.Widgets.Widget'Class; + + procedure Set_Target + (To : in FLTK.Widgets.Widget'Class); + + function Is_Enabled + return Boolean; + + procedure Set_Enabled + (To : in Boolean); + + procedure Enter_Area + (Item : in FLTK.Widgets.Widget'Class; + X, Y, W, H : in Integer; + Tip : in String); + + + + + function Get_Delay + return Float; + + procedure Set_Delay + (To : in Float); + + function Get_Hover_Delay + return Float; + + procedure Set_Hover_Delay + (To : in Float); + + + + + function Get_Background_Color + return Color; + + procedure Set_Background_Color + (To : in Color); + + function Get_Margin_Height + return Natural; + + -- procedure Set_Margin_Height + -- (To : in Natural); + + function Get_Margin_Width + return Natural; + + -- procedure Set_Margin_Width + -- (To : in Natural); + + function Get_Wrap_Width + return Natural; + + -- procedure Set_Wrap_Width + -- (To : in Natural); + + + + + function Get_Text_Color + return Color; + + procedure Set_Text_Color + (To : in Color); + + function Get_Text_Font + return Font_Kind; + + procedure Set_Text_Font + (To : in Font_Kind); + + function Get_Text_Size + return Font_Size; + + procedure Set_Text_Size + (To : in Font_Size); + + +end FLTK.Tooltips; + -- cgit