From ae82edc42a3c93c400775b314b65a8662f181b67 Mon Sep 17 00:00:00 2001 From: Jed Barber Date: Thu, 19 Apr 2018 21:30:43 +1000 Subject: Completed and polished Window widgets, and fixed some associated oddities --- doc/fl_double_window.html | 3 +- doc/fl_menu_window.html | 3 +- doc/fl_single_window.html | 3 +- doc/fl_window.html | 647 ++++++++++++++++++++++++ progress.txt | 4 +- src/c_fl_double_window.cpp | 4 +- src/c_fl_double_window.h | 2 +- src/c_fl_menu_window.cpp | 4 +- src/c_fl_menu_window.h | 2 +- src/c_fl_single_window.cpp | 4 +- src/c_fl_single_window.h | 2 +- src/c_fl_window.cpp | 127 ++++- src/c_fl_window.h | 74 ++- src/fltk-widgets-groups-windows-double.adb | 9 +- src/fltk-widgets-groups-windows-double.ads | 3 +- src/fltk-widgets-groups-windows-single-menu.adb | 9 +- src/fltk-widgets-groups-windows-single-menu.ads | 3 +- src/fltk-widgets-groups-windows-single.adb | 9 +- src/fltk-widgets-groups-windows-single.ads | 3 +- src/fltk-widgets-groups-windows.adb | 478 ++++++++++++++--- src/fltk-widgets-groups-windows.ads | 184 ++++++- src/fltk-widgets.adb | 2 +- src/fltk-widgets.ads | 2 +- 23 files changed, 1439 insertions(+), 142 deletions(-) create mode 100644 doc/fl_window.html diff --git a/doc/fl_double_window.html b/doc/fl_double_window.html index 88656a4..cc8a75b 100644 --- a/doc/fl_double_window.html +++ b/doc/fl_double_window.html @@ -52,7 +52,8 @@ Fl_Double_Window(int W, int H, const char *L=0);
 function Create
-       (W, H : in Integer)
+       (W, H : in Integer;
+        Text : in String)
     return Double_Window;
 
diff --git a/doc/fl_menu_window.html b/doc/fl_menu_window.html index 74ca9b7..9237db5 100644 --- a/doc/fl_menu_window.html +++ b/doc/fl_menu_window.html @@ -52,7 +52,8 @@ Fl_Menu_Window(int W, int H, const char *L=0);
 function Create
-       (W, H : in Integer)
+       (W, H : in Integer;
+        Text : in String)
     return Menu_Window;
 
diff --git a/doc/fl_single_window.html b/doc/fl_single_window.html index 4044d5c..f3ce48b 100644 --- a/doc/fl_single_window.html +++ b/doc/fl_single_window.html @@ -52,7 +52,8 @@ Fl_Single_Window(int W, int H, const char *L=0);
 function Create
-       (W, H : in Integer)
+       (W, H : in Integer;
+        Text : in String)
     return Single_Window;
 
diff --git a/doc/fl_window.html b/doc/fl_window.html new file mode 100644 index 0000000..a1a5bb8 --- /dev/null +++ b/doc/fl_window.html @@ -0,0 +1,647 @@ + + + + + + + Fl_Window Binding Map + + + + + + +

Fl_Window Binding Map

+ + + + + + + + + + +
Package name
Fl_WindowFLTK.Widgets.Groups.Windows
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
Types
Fl_WindowWindow
 Window_Reference
 Border_State
 Modal_State
 Cursor
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
Functions and Procedures
+Fl_Window(int w, int h, const char *title=0);
+
+function Create
+       (W, H : in Integer;
+        Text : in String)
+    return Window;
+
+Fl_Window(int x, int y, int w, int h, const char *title=0);
+
+function Create
+       (X, Y, W, H : in Integer;
+        Text       : in String)
+    return Window;
+
+virtual Fl_Window * as_window();
+
Use view conversion and tag membership tests instead
+void border(int b);
+
+procedure Set_Border_State
+       (This : in out Window;
+        To   : in     Border_State);
+
+unsigned int border() const;
+
+function Get_Border_State
+       (This : in Window)
+    return Border_State;
+
+void clear_border();
+
 
+void clear_modal_states();
+
+procedure Set_Modal_State
+       (This : in out Window;
+        To   : in     Modal_State);
+
+void copy_label(const char *a);
+
 
+static Fl_Window * current();
+
+function Last_Made_Current
+    return access Window'Class;
+
+void cursor(Fl_Cursor);
+
+procedure Set_Cursor
+       (This : in out Window;
+        To   : in     Cursor);
+
+void cursor(const Fl_RGB_Image *, int, int);
+
+procedure Set_Cursor
+       (This         : in out Window;
+        Pic          : in out FLTK.Images.RGB.RGB_Image'Class;
+        Hot_X, Hot_Y : in     Integer);
+
+void cursor(Fl_Cursor c, Fl_Color, Fl_Color=FL_WHITE);
+
 
+int decorated_h();
+
+function Get_Decorated_H
+       (This : in Window)
+    return Integer;
+
+int decorated_w();
+
+function Get_Decorated_W
+       (This : in Window)
+    return Integer;
+
+void default_cursor(Fl_Cursor);
+
+procedure Set_Default_Cursor
+       (This : in out Window;
+        To   : in     Cursor);
+
+void default_cursor(Fl_Cursor c, Fl_Color, Fl_Color=FL_WHITE);
+
 
+static void default_icon(const Fl_RGB_Image *);
+
+procedure Set_Default_Icon
+       (Pic : in out FLTK.Images.RGB.RGB_Image'Class);
+
+virtual void draw();
+
+procedure Draw
+       (This : in out Window);
+
+void free_position();
+
+procedure Free_Position
+       (This : in out Window);
+
+void fullscreen();
+
+procedure Fullscreen_On
+       (This : in out Window);
+
+unsigned int fullscreen_active() const;
+
+function Is_Fullscreen
+       (This : in Window)
+    return Boolean;
+
+void fullscreen_off();
+
+procedure Fullscreen_Off
+       (This : in out Window);
+
+void fullscreen_off(int X, int Y, int W, int H);
+
+procedure Fullscreen_Off
+       (This       : in out Window;
+        X, Y, W, H : in     Integer);
+
+void fullscreen_screens(int top, int bottom, int left, int right);
+
+procedure Fullscreen_Screens
+       (This                     : in out Window;
+        Top, Bottom, Left, Right : in     Natural);
+
+virtual int handle(int);
+
+function Handle
+       (This  : in out Window;
+        Event : in     Event_Kind)
+    return Event_Outcome;
+
+virtual void hide();
+
+procedure Hide
+       (This : in out Window);
+
+void hotspot(int x, int y, int offscreen=0);
+
+procedure Hotspot
+       (This      : in out Window;
+        X, Y      : in     Integer;
+        Offscreen : in     Boolean := False);
+
+void hotspot(const Fl_Widget *, int offscreen=0);
+void hotspot(const Fl_Widget &p, int offscreen=0);
+
+procedure Hotspot
+       (This      : in out Window;
+        Item      : in     Widget'Class;
+        Offscreen : in     Boolean := False);
+
+void icon(const Fl_RGB_Image *);
+
+procedure Set_Icon
+       (This : in out Window;
+        Pic  : in out FLTK.Images.RGB.RGB_Image'Class);
+
+const void * icon() const;
+
 
+void icon(const void *ic);
+
 
+void iconize();
+
+procedure Iconify
+       (This : in out Window);
+
+const char * iconlabel() const;
+
+function Get_Icon_Label
+       (This : in Window)
+    return String;
+
+void iconlabel(const char *);
+
+procedure Set_Icon_Label
+       (This : in out Window;
+        To   : in     String);
+
+void icons(const Fl_RGB_Image *[], int);
+
 
+const char * label() const;
+
+function Get_Label
+       (This : in Window)
+    return String;
+
+void label(const char *);
+
+procedure Set_Label
+       (This : in out Window;
+        Text : in     String);
+
+void label(const char *label, const char *iconlabel);
+
 
+void make_current();
+
+procedure Make_Current
+       (This : in out Window);
+
+unsigned int menu_window() const;
+
Use tag membership tests instead
+unsigned int modal() const;
+
+function Get_Modal_State
+       (This : in Window)
+    return Modal_State;
+
+unsigned int non_modal() const;
+
See unsigned int modal() const;
+unsigned int override() const;
+
+function Is_Override
+       (This : in Window)
+    return Boolean;
+
+virtual void resize(int X, int Y, int W, int H);
+
 
+void set_menu_window();
+
 
+void set_modal();
+
See void clear_modal_states();
+void set_non_modal();
+
See void clear_modal_states();
+void set_override();
+
+procedure Set_Override
+       (This : in out Window);
+
+void set_tooltip_window();
+
 
+void shape(const Fl_Image *img);
+void shape(const Fl_Image &b);
+
+procedure Shape
+       (This : in out Window;
+        Pic  : in out FLTK.Images.Image'Class);
+
+virtual void show();
+
+procedure Show
+       (This : in out Window);
+
+void show(int argc, char **argv);
+
 
+int shown();
+
+function Is_Shown
+       (This : in Window)
+    return Boolean;
+
+void size_range(int minw, int minh, int maxw=0, int maxh=0, int dw=0, int dh=0, int aspect=0);
+
+procedure Set_Size_Range
+       (This                           : in out Window;
+        Min_W, Min_H                   : in     Integer;
+        Max_W, Max_H, Incre_W, Incre_H : in     Integer := 0;
+        Keep_Aspect                    : in     Boolean := False);
+
+unsigned int tooltip_window() const;
+
 
+void wait_for_expose();
+
+procedure Wait_For_Expose
+       (This : in out Window);
+
+int x_root() const;
+
+function Get_X_Root
+       (This : in Window)
+    return Integer;
+
+const char * xclass() const;
+
 
+void xclass(const char *c);
+
 
+int y_root() const;
+
+function Get_Y_Root
+       (This : in Window)
+    return Integer;
+
+ + + + + diff --git a/progress.txt b/progress.txt index 7724f4c..75c5bc4 100644 --- a/progress.txt +++ b/progress.txt @@ -28,6 +28,7 @@ FLTK.Widgets.Buttons.Toggle FLTK.Widgets.Clocks FLTK.Widgets.Clocks.Updated FLTK.Widgets.Clocks.Updated.Round +FLTK.Widgets.Groups.Windows FLTK.Widgets.Groups.Windows.Double FLTK.Widgets.Groups.Windows.Single FLTK.Widgets.Groups.Windows.Single.Menu @@ -105,7 +106,6 @@ FLTK.Text_Buffers FLTK.Widgets FLTK.Widgets.Groups FLTK.Widgets.Groups.Text_Displays (94%) -FLTK.Widgets.Groups.Windows FLTK.Widgets.Menus @@ -142,7 +142,7 @@ FL_Cairo_Window - make sure all C++ reinterpret_cast for methods is to the Fl object, not the My object, because inheriting - consistent unicode utf-8 support (is this even fully supported by FLTK? if not, nevermind...) - check FLTK library internals to see which char* return values need dealloc -- remove custom exception types in favour of Program_Error? +- remove custom exception types in favour of Program_Error? or at least a generic FLTK_Error? - qualify all C++ virtual method calls with the class name to prevent dynamic dispatch on C++ side - provide documentation for how C++ methods map to Ada functions and procedures diff --git a/src/c_fl_double_window.cpp b/src/c_fl_double_window.cpp index 4bed936..389ce6a 100644 --- a/src/c_fl_double_window.cpp +++ b/src/c_fl_double_window.cpp @@ -63,8 +63,8 @@ DOUBLEWINDOW new_fl_double_window(int x, int y, int w, int h, char* label) { return d; } -DOUBLEWINDOW new_fl_double_window2(int w, int h) { - My_Double_Window *d = new My_Double_Window(w, h); +DOUBLEWINDOW new_fl_double_window2(int w, int h, char* label) { + My_Double_Window *d = new My_Double_Window(w, h, label); return d; } diff --git a/src/c_fl_double_window.h b/src/c_fl_double_window.h index 8334058..4867fd2 100644 --- a/src/c_fl_double_window.h +++ b/src/c_fl_double_window.h @@ -20,7 +20,7 @@ extern "C" inline int fl_double_window_handle(DOUBLEWINDOW n, int e); extern "C" inline DOUBLEWINDOW new_fl_double_window(int x, int y, int w, int h, char* label); -extern "C" inline DOUBLEWINDOW new_fl_double_window2(int w, int h); +extern "C" inline DOUBLEWINDOW new_fl_double_window2(int w, int h, char* label); extern "C" inline void free_fl_double_window(DOUBLEWINDOW d); diff --git a/src/c_fl_menu_window.cpp b/src/c_fl_menu_window.cpp index 3505483..77b07ae 100644 --- a/src/c_fl_menu_window.cpp +++ b/src/c_fl_menu_window.cpp @@ -63,8 +63,8 @@ MENUWINDOW new_fl_menu_window(int x, int y, int w, int h, char* label) { return m; } -MENUWINDOW new_fl_menu_window2(int w, int h) { - My_Menu_Window *m = new My_Menu_Window(w, h); +MENUWINDOW new_fl_menu_window2(int w, int h, char* label) { + My_Menu_Window *m = new My_Menu_Window(w, h, label); return m; } diff --git a/src/c_fl_menu_window.h b/src/c_fl_menu_window.h index cd7a0f4..dacc873 100644 --- a/src/c_fl_menu_window.h +++ b/src/c_fl_menu_window.h @@ -20,7 +20,7 @@ extern "C" inline int fl_menu_window_handle(MENUWINDOW n, int e); extern "C" inline MENUWINDOW new_fl_menu_window(int x, int y, int w, int h, char* label); -extern "C" inline MENUWINDOW new_fl_menu_window2(int w, int h); +extern "C" inline MENUWINDOW new_fl_menu_window2(int w, int h, char* label); extern "C" inline void free_fl_menu_window(MENUWINDOW m); diff --git a/src/c_fl_single_window.cpp b/src/c_fl_single_window.cpp index f51fb92..35bdd29 100644 --- a/src/c_fl_single_window.cpp +++ b/src/c_fl_single_window.cpp @@ -63,8 +63,8 @@ SINGLEWINDOW new_fl_single_window(int x, int y, int w, int h, char* label) { return sw; } -SINGLEWINDOW new_fl_single_window2(int x, int y) { - My_Single_Window *sw = new My_Single_Window(x, y); +SINGLEWINDOW new_fl_single_window2(int x, int y, char* label) { + My_Single_Window *sw = new My_Single_Window(x, y, label); return sw; } diff --git a/src/c_fl_single_window.h b/src/c_fl_single_window.h index 31ca7d3..4040313 100644 --- a/src/c_fl_single_window.h +++ b/src/c_fl_single_window.h @@ -20,7 +20,7 @@ extern "C" inline int fl_single_window_handle(SINGLEWINDOW n, int e); extern "C" inline SINGLEWINDOW new_fl_single_window(int x, int y, int w, int h, char* label); -extern "C" inline SINGLEWINDOW new_fl_single_window2(int x, int y); +extern "C" inline SINGLEWINDOW new_fl_single_window2(int x, int y, char* label); extern "C" inline void free_fl_single_window(SINGLEWINDOW w); diff --git a/src/c_fl_window.cpp b/src/c_fl_window.cpp index 83f19f1..d6bb262 100644 --- a/src/c_fl_window.cpp +++ b/src/c_fl_window.cpp @@ -64,8 +64,8 @@ WINDOW new_fl_window(int x, int y, int w, int h, char* label) { return n; } -WINDOW new_fl_window2(int w, int h) { - My_Window *n = new My_Window(w, h); +WINDOW new_fl_window2(int w, int h, char* label) { + My_Window *n = new My_Window(w, h, label); return n; } @@ -77,17 +77,89 @@ void free_fl_window(WINDOW n) { void fl_window_show(WINDOW n) { - reinterpret_cast(n)->show(); + // virtual, so disable dispatch + reinterpret_cast(n)->Fl_Window::show(); } void fl_window_hide(WINDOW n) { - reinterpret_cast(n)->hide(); + // virtual, so disable dispatch + reinterpret_cast(n)->Fl_Window::hide(); +} + +int fl_window_shown(WINDOW n) { + return reinterpret_cast(n)->shown(); +} + +void fl_window_wait_for_expose(WINDOW n) { + reinterpret_cast(n)->wait_for_expose(); +} + +void fl_window_iconize(WINDOW n) { + reinterpret_cast(n)->iconize(); } void fl_window_make_current(WINDOW n) { reinterpret_cast(n)->make_current(); } +void fl_window_free_position(WINDOW n) { + reinterpret_cast(n)->free_position(); +} + + + + +unsigned int fl_window_fullscreen_active(WINDOW n) { + return reinterpret_cast(n)->fullscreen_active(); +} + +void fl_window_fullscreen(WINDOW n) { + reinterpret_cast(n)->fullscreen(); +} + +void fl_window_fullscreen_off(WINDOW n) { + reinterpret_cast(n)->fullscreen_off(); +} + +void fl_window_fullscreen_off2(WINDOW n, int x, int y, int w, int h) { + reinterpret_cast(n)->fullscreen_off(x,y,w,h); +} + +void fl_window_fullscreen_screens(WINDOW n, int t, int b, int l, int r) { + reinterpret_cast(n)->fullscreen_screens(t,b,l,r); +} + + + + +void fl_window_set_icon(WINDOW n, void * img) { + reinterpret_cast(n)->icon(reinterpret_cast(img)); +} + +void fl_window_default_icon(void * img) { + Fl_Window::default_icon(reinterpret_cast(img)); +} + +const char * fl_window_get_iconlabel(WINDOW n) { + return reinterpret_cast(n)->iconlabel(); +} + +void fl_window_set_iconlabel(WINDOW n, const char * s) { + reinterpret_cast(n)->iconlabel(s); +} + +void fl_window_set_cursor(WINDOW n, int c) { + reinterpret_cast(n)->cursor(static_cast(c)); +} + +void fl_window_set_cursor2(WINDOW n, void * img, int x, int y) { + reinterpret_cast(n)->cursor(reinterpret_cast(img),x,y); +} + +void fl_window_set_default_cursor(WINDOW n, int c) { + reinterpret_cast(n)->default_cursor(static_cast(c)); +} + @@ -99,16 +171,24 @@ void fl_window_set_border(WINDOW n, int b) { reinterpret_cast(n)->border(b); } -void fl_window_set_label(WINDOW n, char* text) { - reinterpret_cast(n)->copy_label(text); +unsigned int fl_window_get_override(WINDOW n) { + return reinterpret_cast(n)->override(); } -void fl_window_size_range(WINDOW n, int lw, int lh, int hw, int hh, int dw, int dh, int a) { - reinterpret_cast(n)->size_range(lw, lh, hw, hh, dw, dh, a); +void fl_window_set_override(WINDOW n) { + reinterpret_cast(n)->set_override(); } -void fl_window_set_icon(WINDOW n, void * img) { - reinterpret_cast(n)->icon(reinterpret_cast(img)); +unsigned int fl_window_modal(WINDOW n) { + return reinterpret_cast(n)->modal(); +} + +unsigned int fl_window_non_modal(WINDOW n) { + return reinterpret_cast(n)->non_modal(); +} + +void fl_window_clear_modal_states(WINDOW n) { + reinterpret_cast(n)->clear_modal_states(); } void fl_window_set_modal(WINDOW n) { @@ -119,12 +199,31 @@ void fl_window_set_non_modal(WINDOW n) { reinterpret_cast(n)->set_non_modal(); } -void fl_window_set_cursor(WINDOW n, int c) { - reinterpret_cast(n)->cursor(static_cast(c)); + + + +const char * fl_window_get_label(WINDOW n) { + return reinterpret_cast(n)->label(); } -void fl_window_set_default_cursor(WINDOW n, int c) { - reinterpret_cast(n)->default_cursor(static_cast(c)); +void fl_window_set_label(WINDOW n, char* text) { + reinterpret_cast(n)->copy_label(text); +} + +void fl_window_hotspot(WINDOW n, int x, int y, int s) { + reinterpret_cast(n)->hotspot(x,y,s); +} + +void fl_window_hotspot2(WINDOW n, void * i, int s) { + reinterpret_cast(n)->hotspot(reinterpret_cast(i),s); +} + +void fl_window_size_range(WINDOW n, int lw, int lh, int hw, int hh, int dw, int dh, int a) { + reinterpret_cast(n)->size_range(lw, lh, hw, hh, dw, dh, a); +} + +void fl_window_shape(WINDOW n, void * p) { + reinterpret_cast(n)->shape(reinterpret_cast(p)); } diff --git a/src/c_fl_window.h b/src/c_fl_window.h index bbf4448..f66876a 100644 --- a/src/c_fl_window.h +++ b/src/c_fl_window.h @@ -11,41 +11,69 @@ typedef void* WINDOW; -extern "C" void window_set_draw_hook(WINDOW n, void * d); -extern "C" void fl_window_draw(WINDOW n); -extern "C" void window_set_handle_hook(WINDOW n, void * h); -extern "C" int fl_window_handle(WINDOW n, int e); +extern "C" inline void window_set_draw_hook(WINDOW n, void * d); +extern "C" inline void fl_window_draw(WINDOW n); +extern "C" inline void window_set_handle_hook(WINDOW n, void * h); +extern "C" inline int fl_window_handle(WINDOW n, int e); -extern "C" WINDOW new_fl_window(int x, int y, int w, int h, char* label); -extern "C" WINDOW new_fl_window2(int w, int h); -extern "C" void free_fl_window(WINDOW n); +extern "C" inline WINDOW new_fl_window(int x, int y, int w, int h, char* label); +extern "C" inline WINDOW new_fl_window2(int w, int h, char* label); +extern "C" inline void free_fl_window(WINDOW n); -extern "C" void fl_window_show(WINDOW n); -extern "C" void fl_window_hide(WINDOW n); -extern "C" void fl_window_make_current(WINDOW n); +extern "C" inline void fl_window_show(WINDOW n); +extern "C" inline void fl_window_hide(WINDOW n); +extern "C" inline int fl_window_shown(WINDOW n); +extern "C" inline void fl_window_wait_for_expose(WINDOW n); +extern "C" inline void fl_window_iconize(WINDOW n); +extern "C" inline void fl_window_make_current(WINDOW n); +extern "C" inline void fl_window_free_position(WINDOW n); -extern "C" unsigned int fl_window_get_border(WINDOW n); -extern "C" void fl_window_set_border(WINDOW n, int b); -extern "C" void fl_window_set_label(WINDOW n, char* text); -extern "C" void fl_window_size_range(WINDOW n, int lw, int lh, int hw, int hh, int dw, int dh, int a); -extern "C" void fl_window_set_icon(WINDOW n, void * img); -extern "C" void fl_window_set_modal(WINDOW n); -extern "C" void fl_window_set_non_modal(WINDOW n); -extern "C" void fl_window_set_cursor(WINDOW n, int c); -extern "C" void fl_window_set_default_cursor(WINDOW n, int c); +extern "C" inline unsigned int fl_window_fullscreen_active(WINDOW n); +extern "C" inline void fl_window_fullscreen(WINDOW n); +extern "C" inline void fl_window_fullscreen_off(WINDOW n); +extern "C" inline void fl_window_fullscreen_off2(WINDOW n, int x, int y, int w, int h); +extern "C" inline void fl_window_fullscreen_screens(WINDOW n, int t, int b, int l, int r); -extern "C" int fl_window_get_x_root(WINDOW n); -extern "C" int fl_window_get_y_root(WINDOW n); -extern "C" int fl_window_get_decorated_w(WINDOW n); -extern "C" int fl_window_get_decorated_h(WINDOW n); +extern "C" inline void fl_window_set_icon(WINDOW n, void * img); +extern "C" inline void fl_window_default_icon(void * img); +extern "C" inline const char * fl_window_get_iconlabel(WINDOW n); +extern "C" inline void fl_window_set_iconlabel(WINDOW n, const char * s); +extern "C" inline void fl_window_set_cursor(WINDOW n, int c); +extern "C" inline void fl_window_set_cursor2(WINDOW n, void * img, int x, int y); +extern "C" inline void fl_window_set_default_cursor(WINDOW n, int c); + + +extern "C" inline unsigned int fl_window_get_border(WINDOW n); +extern "C" inline void fl_window_set_border(WINDOW n, int b); +extern "C" inline unsigned int fl_window_get_override(WINDOW n); +extern "C" inline void fl_window_set_override(WINDOW n); +extern "C" inline unsigned int fl_window_modal(WINDOW n); +extern "C" inline unsigned int fl_window_non_modal(WINDOW n); +extern "C" inline void fl_window_clear_modal_states(WINDOW n); +extern "C" inline void fl_window_set_modal(WINDOW n); +extern "C" inline void fl_window_set_non_modal(WINDOW n); + + +extern "C" inline const char * fl_window_get_label(WINDOW n); +extern "C" inline void fl_window_set_label(WINDOW n, char* text); +extern "C" inline void fl_window_hotspot(WINDOW n, int x, int y, int s); +extern "C" inline void fl_window_hotspot2(WINDOW n, void * i, int s); +extern "C" inline void fl_window_size_range(WINDOW n, int lw, int lh, int hw, int hh, int dw, int dh, int a); +extern "C" inline void fl_window_shape(WINDOW n, void * p); + + +extern "C" inline int fl_window_get_x_root(WINDOW n); +extern "C" inline int fl_window_get_y_root(WINDOW n); +extern "C" inline int fl_window_get_decorated_w(WINDOW n); +extern "C" inline int fl_window_get_decorated_h(WINDOW n); #endif diff --git a/src/fltk-widgets-groups-windows-double.adb b/src/fltk-widgets-groups-windows-double.adb index 9e87d56..515e149 100644 --- a/src/fltk-widgets-groups-windows-double.adb +++ b/src/fltk-widgets-groups-windows-double.adb @@ -34,7 +34,8 @@ package body FLTK.Widgets.Groups.Windows.Double is pragma Inline (new_fl_double_window); function new_fl_double_window2 - (X, Y : in Interfaces.C.int) + (X, Y : in Interfaces.C.int; + Text : in Interfaces.C.char_array) return System.Address; pragma Import (C, new_fl_double_window2, "new_fl_double_window2"); pragma Inline (new_fl_double_window2); @@ -121,13 +122,15 @@ package body FLTK.Widgets.Groups.Windows.Double is function Create - (W, H : in Integer) + (W, H : in Integer; + Text : in String) return Double_Window is begin return This : Double_Window do This.Void_Ptr := new_fl_double_window2 (Interfaces.C.int (W), - Interfaces.C.int (H)); + Interfaces.C.int (H), + Interfaces.C.To_C (Text)); fl_group_end (This.Void_Ptr); fl_widget_set_user_data (This.Void_Ptr, diff --git a/src/fltk-widgets-groups-windows-double.ads b/src/fltk-widgets-groups-windows-double.ads index 216419d..697b72b 100644 --- a/src/fltk-widgets-groups-windows-double.ads +++ b/src/fltk-widgets-groups-windows-double.ads @@ -18,7 +18,8 @@ package FLTK.Widgets.Groups.Windows.Double is return Double_Window; function Create - (W, H : in Integer) + (W, H : in Integer; + Text : in String) return Double_Window; end Forge; diff --git a/src/fltk-widgets-groups-windows-single-menu.adb b/src/fltk-widgets-groups-windows-single-menu.adb index 85026f2..7a3d0c2 100644 --- a/src/fltk-widgets-groups-windows-single-menu.adb +++ b/src/fltk-widgets-groups-windows-single-menu.adb @@ -35,7 +35,8 @@ package body FLTK.Widgets.Groups.Windows.Single.Menu is pragma Inline (new_fl_menu_window); function new_fl_menu_window2 - (W, H : in Interfaces.C.int) + (W, H : in Interfaces.C.int; + Text : in Interfaces.C.char_array) return System.Address; pragma Import (C, new_fl_menu_window2, "new_fl_menu_window2"); pragma Inline (new_fl_menu_window2); @@ -141,13 +142,15 @@ package body FLTK.Widgets.Groups.Windows.Single.Menu is function Create - (W, H : in Integer) + (W, H : in Integer; + Text : in String) return Menu_Window is begin return This : Menu_Window do This.Void_Ptr := new_fl_menu_window2 (Interfaces.C.int (W), - Interfaces.C.int (H)); + Interfaces.C.int (H), + Interfaces.C.To_C (Text)); fl_group_end (This.Void_Ptr); fl_widget_set_user_data (This.Void_Ptr, diff --git a/src/fltk-widgets-groups-windows-single-menu.ads b/src/fltk-widgets-groups-windows-single-menu.ads index 0d82bf8..2b5d272 100644 --- a/src/fltk-widgets-groups-windows-single-menu.ads +++ b/src/fltk-widgets-groups-windows-single-menu.ads @@ -19,7 +19,8 @@ package FLTK.Widgets.Groups.Windows.Single.Menu is return Menu_Window; function Create - (W, H : in Integer) + (W, H : in Integer; + Text : in String) return Menu_Window; end Forge; diff --git a/src/fltk-widgets-groups-windows-single.adb b/src/fltk-widgets-groups-windows-single.adb index 0dec8f1..6ef2cc7 100644 --- a/src/fltk-widgets-groups-windows-single.adb +++ b/src/fltk-widgets-groups-windows-single.adb @@ -34,7 +34,8 @@ package body FLTK.Widgets.Groups.Windows.Single is pragma Inline (new_fl_single_window); function new_fl_single_window2 - (W, H : in Interfaces.C.int) + (W, H : in Interfaces.C.int; + Text : in Interfaces.C.char_array) return System.Address; pragma Import (C, new_fl_single_window2, "new_fl_single_window2"); pragma Inline (new_fl_single_window2); @@ -116,13 +117,15 @@ package body FLTK.Widgets.Groups.Windows.Single is function Create - (W, H : in Integer) + (W, H : in Integer; + Text : in String) return Single_Window is begin return This : Single_Window do This.Void_Ptr := new_fl_single_window2 (Interfaces.C.int (W), - Interfaces.C.int (H)); + Interfaces.C.int (H), + Interfaces.C.To_C (Text)); fl_group_end (This.Void_Ptr); fl_widget_set_user_data (This.Void_Ptr, diff --git a/src/fltk-widgets-groups-windows-single.ads b/src/fltk-widgets-groups-windows-single.ads index 67acf9b..7817325 100644 --- a/src/fltk-widgets-groups-windows-single.ads +++ b/src/fltk-widgets-groups-windows-single.ads @@ -19,7 +19,8 @@ package FLTK.Widgets.Groups.Windows.Single is return Single_Window; function Create - (W, H : in Integer) + (W, H : in Integer; + Text : in String) return Single_Window; end Forge; diff --git a/src/fltk-widgets-groups-windows.adb b/src/fltk-widgets-groups-windows.adb index 13a2aa1..a4da35b 100644 --- a/src/fltk-widgets-groups-windows.adb +++ b/src/fltk-widgets-groups-windows.adb @@ -2,12 +2,14 @@ with - Interfaces.C, + Interfaces.C.Strings, System, FLTK.Images.RGB; use type + Interfaces.C.int, + Interfaces.C.unsigned, System.Address; @@ -17,10 +19,12 @@ package body FLTK.Widgets.Groups.Windows is procedure window_set_draw_hook (W, D : in System.Address); pragma Import (C, window_set_draw_hook, "window_set_draw_hook"); + pragma Inline (window_set_draw_hook); procedure window_set_handle_hook (W, H : in System.Address); pragma Import (C, window_set_handle_hook, "window_set_handle_hook"); + pragma Inline (window_set_handle_hook); @@ -30,15 +34,19 @@ package body FLTK.Widgets.Groups.Windows is Text : in Interfaces.C.char_array) return System.Address; pragma Import (C, new_fl_window, "new_fl_window"); + pragma Inline (new_fl_window); function new_fl_window2 - (W, H : in Interfaces.C.int) + (W, H : in Interfaces.C.int; + Text : in Interfaces.C.char_array) return System.Address; pragma Import (C, new_fl_window2, "new_fl_window2"); + pragma Inline (new_fl_window2); procedure free_fl_window (W : in System.Address); pragma Import (C, free_fl_window, "free_fl_window"); + pragma Inline (free_fl_window); @@ -46,14 +54,112 @@ package body FLTK.Widgets.Groups.Windows is procedure fl_window_show (W : in System.Address); pragma Import (C, fl_window_show, "fl_window_show"); + pragma Inline (fl_window_show); procedure fl_window_hide (W : in System.Address); pragma Import (C, fl_window_hide, "fl_window_hide"); + pragma Inline (fl_window_hide); + + function fl_window_shown + (W : in System.Address) + return Interfaces.C.int; + pragma Import (C, fl_window_shown, "fl_window_shown"); + pragma Inline (fl_window_shown); + + procedure fl_window_wait_for_expose + (W : in System.Address); + pragma Import (C, fl_window_wait_for_expose, "fl_window_wait_for_expose"); + pragma Inline (fl_window_wait_for_expose); + + procedure fl_window_iconize + (W : in System.Address); + pragma Import (C, fl_window_iconize, "fl_window_iconize"); + pragma Inline (fl_window_iconize); procedure fl_window_make_current (W : in System.Address); pragma Import (C, fl_window_make_current, "fl_window_make_current"); + pragma Inline (fl_window_make_current); + + procedure fl_window_free_position + (W : in System.Address); + pragma Import (C, fl_window_free_position, "fl_window_free_position"); + pragma Inline (fl_window_free_position); + + + + + function fl_window_fullscreen_active + (W : in System.Address) + return Interfaces.C.unsigned; + pragma Import (C, fl_window_fullscreen_active, "fl_window_fullscreen_active"); + pragma Inline (fl_window_fullscreen_active); + + procedure fl_window_fullscreen + (W : in System.Address); + pragma Import (C, fl_window_fullscreen, "fl_window_fullscreen"); + pragma Inline (fl_window_fullscreen); + + procedure fl_window_fullscreen_off + (W : in System.Address); + pragma Import (C, fl_window_fullscreen_off, "fl_window_fullscreen_off"); + pragma Inline (fl_window_fullscreen_off); + + procedure fl_window_fullscreen_off2 + (N : in System.Address; + X, Y, W, H : in Interfaces.C.int); + pragma Import (C, fl_window_fullscreen_off2, "fl_window_fullscreen_off2"); + pragma Inline (fl_window_fullscreen_off2); + + procedure fl_window_fullscreen_screens + (W : in System.Address; + T, B, L, R : in Interfaces.C.int); + pragma Import (C, fl_window_fullscreen_screens, "fl_window_fullscreen_screens"); + pragma Inline (fl_window_fullscreen_screens); + + + + + procedure fl_window_set_icon + (W, P : in System.Address); + pragma Import (C, fl_window_set_icon, "fl_window_set_icon"); + pragma Inline (fl_window_set_icon); + + procedure fl_window_default_icon + (P : in System.Address); + pragma Import (C, fl_window_default_icon, "fl_window_default_icon"); + pragma Inline (fl_window_default_icon); + + function fl_window_get_iconlabel + (W : in System.Address) + return Interfaces.C.Strings.chars_ptr; + pragma Import (C, fl_window_get_iconlabel, "fl_window_get_iconlabel"); + pragma Inline (fl_window_get_iconlabel); + + procedure fl_window_set_iconlabel + (W : in System.Address; + S : in Interfaces.C.char_array); + pragma Import (C, fl_window_set_iconlabel, "fl_window_set_iconlabel"); + pragma Inline (fl_window_set_iconlabel); + + procedure fl_window_set_cursor + (W : in System.Address; + C : in Interfaces.C.int); + pragma Import (C, fl_window_set_cursor, "fl_window_set_cursor"); + pragma Inline (fl_window_set_cursor); + + procedure fl_window_set_cursor2 + (W, P : in System.Address; + X, Y : in Interfaces.C.int); + pragma Import (C, fl_window_set_cursor2, "fl_window_set_cursor2"); + pragma Inline (fl_window_set_cursor2); + + procedure fl_window_set_default_cursor + (W : in System.Address; + C : in Interfaces.C.int); + pragma Import (C, fl_window_set_default_cursor, "fl_window_set_default_cursor"); + pragma Inline (fl_window_set_default_cursor); @@ -62,43 +168,89 @@ package body FLTK.Widgets.Groups.Windows is (W : in System.Address) return Interfaces.C.unsigned; pragma Import (C, fl_window_get_border, "fl_window_get_border"); + pragma Inline (fl_window_get_border); procedure fl_window_set_border (W : in System.Address; S : in Interfaces.C.int); pragma Import (C, fl_window_set_border, "fl_window_set_border"); + pragma Inline (fl_window_set_border); - procedure fl_window_set_label - (W : in System.Address; - T : in Interfaces.C.char_array); - pragma Import (C, fl_window_set_label, "fl_window_set_label"); + function fl_window_get_override + (W : in System.Address) + return Interfaces.C.unsigned; + pragma Import (C, fl_window_get_override, "fl_window_get_override"); + pragma Inline (fl_window_get_override); - procedure fl_window_size_range - (W : in System.Address; - LW, LH, HW, HH, DW, DH, A : in Interfaces.C.int); - pragma Import (C, fl_window_size_range, "fl_window_size_range"); + procedure fl_window_set_override + (W : in System.Address); + pragma Import (C, fl_window_set_override, "fl_window_set_override"); + pragma Inline (fl_window_set_override); - procedure fl_window_set_icon - (W, P : in System.Address); - pragma Import (C, fl_window_set_icon, "fl_window_set_icon"); + function fl_window_modal + (W : in System.Address) + return Interfaces.C.unsigned; + pragma Import (C, fl_window_modal, "fl_window_modal"); + pragma Inline (fl_window_modal); + + function fl_window_non_modal + (W : in System.Address) + return Interfaces.C.unsigned; + pragma Import (C, fl_window_non_modal, "fl_window_non_modal"); + pragma Inline (fl_window_non_modal); + + procedure fl_window_clear_modal_states + (W : in System.Address); + pragma Import (C, fl_window_clear_modal_states, "fl_window_clear_modal_states"); + pragma Inline (fl_window_clear_modal_states); procedure fl_window_set_modal (W : in System.Address); pragma Import (C, fl_window_set_modal, "fl_window_set_modal"); + pragma Inline (fl_window_set_modal); procedure fl_window_set_non_modal (W : in System.Address); pragma Import (C, fl_window_set_non_modal, "fl_window_set_non_modal"); + pragma Inline (fl_window_set_non_modal); - procedure fl_window_set_cursor - (W : in System.Address; - C : in Interfaces.C.int); - pragma Import (C, fl_window_set_cursor, "fl_window_set_cursor"); - procedure fl_window_set_default_cursor + + + function fl_window_get_label + (W : in System.Address) + return Interfaces.C.Strings.chars_ptr; + pragma Import (C, fl_window_get_label, "fl_window_get_label"); + pragma Inline (fl_window_get_label); + + procedure fl_window_set_label (W : in System.Address; - C : in Interfaces.C.int); - pragma Import (C, fl_window_set_default_cursor, "fl_window_set_default_cursor"); + T : in Interfaces.C.char_array); + pragma Import (C, fl_window_set_label, "fl_window_set_label"); + pragma Inline (fl_window_set_label); + + procedure fl_window_hotspot + (W : in System.Address; + X, Y, S : in Interfaces.C.int); + pragma Import (C, fl_window_hotspot, "fl_window_hotspot"); + pragma Inline (fl_window_hotspot); + + procedure fl_window_hotspot2 + (W, I : in System.Address; + S : in Interfaces.C.int); + pragma Import (C, fl_window_hotspot2, "fl_window_hotspot2"); + pragma Inline (fl_window_hotspot2); + + procedure fl_window_size_range + (W : in System.Address; + LW, LH, HW, HH, DW, DH, A : in Interfaces.C.int); + pragma Import (C, fl_window_size_range, "fl_window_size_range"); + pragma Inline (fl_window_size_range); + + procedure fl_window_shape + (W, P : in System.Address); + pragma Import (C, fl_window_shape, "fl_window_shape"); + pragma Inline (fl_window_shape); @@ -107,21 +259,25 @@ package body FLTK.Widgets.Groups.Windows is (W : in System.Address) return Interfaces.C.int; pragma Import (C, fl_window_get_x_root, "fl_window_get_x_root"); + pragma Inline (fl_window_get_x_root); function fl_window_get_y_root (W : in System.Address) return Interfaces.C.int; pragma Import (C, fl_window_get_y_root, "fl_window_get_y_root"); + pragma Inline (fl_window_get_y_root); function fl_window_get_decorated_w (W : in System.Address) return Interfaces.C.int; pragma Import (C, fl_window_get_decorated_w, "fl_window_get_decorated_w"); + pragma Inline (fl_window_get_decorated_w); function fl_window_get_decorated_h (W : in System.Address) return Interfaces.C.int; pragma Import (C, fl_window_get_decorated_h, "fl_window_get_decorated_h"); + pragma Inline (fl_window_get_decorated_h); @@ -129,12 +285,14 @@ package body FLTK.Widgets.Groups.Windows is procedure fl_window_draw (W : in System.Address); pragma Import (C, fl_window_draw, "fl_window_draw"); + pragma Inline (fl_window_draw); function fl_window_handle (W : in System.Address; E : in Interfaces.C.int) return Interfaces.C.int; pragma Import (C, fl_window_handle, "fl_window_handle"); + pragma Inline (fl_window_handle); @@ -180,13 +338,15 @@ package body FLTK.Widgets.Groups.Windows is function Create - (W, H : in Integer) + (W, H : in Integer; + Text : in String) return Window is begin return This : Window do This.Void_Ptr := new_fl_window2 (Interfaces.C.int (W), - Interfaces.C.int (H)); + Interfaces.C.int (H), + Interfaces.C.To_C (Text)); fl_group_end (This.Void_Ptr); fl_widget_set_user_data (This.Void_Ptr, @@ -215,55 +375,100 @@ package body FLTK.Widgets.Groups.Windows is end Hide; + function Is_Shown + (This : in Window) + return Boolean is + begin + return fl_window_shown (This.Void_Ptr) /= 0; + end Is_Shown; + + + procedure Wait_For_Expose + (This : in out Window) is + begin + fl_window_wait_for_expose (This.Void_Ptr); + end Wait_For_Expose; + + + procedure Iconify + (This : in out Window) is + begin + fl_window_iconize (This.Void_Ptr); + end Iconify; + + procedure Make_Current (This : in out Window) is begin fl_window_make_current (This.Void_Ptr); + Last_Current := This'Unchecked_Access; end Make_Current; + function Last_Made_Current + return access Window'Class is + begin + return Last_Current; + end Last_Made_Current; + + + procedure Free_Position + (This : in out Window) is + begin + fl_window_free_position (This.Void_Ptr); + end Free_Position; + - function Get_Border + + function Is_Fullscreen (This : in Window) - return Border_State is + return Boolean is begin - return Border_State'Val (fl_window_get_border (This.Void_Ptr)); - end Get_Border; + return fl_window_fullscreen_active (This.Void_Ptr) /= 0; + end Is_Fullscreen; - procedure Set_Border - (This : in out Window; - To : in Border_State) is + procedure Fullscreen_On + (This : in out Window) is begin - fl_window_set_border (This.Void_Ptr, Border_State'Pos (To)); - end Set_Border; + fl_window_fullscreen (This.Void_Ptr); + end Fullscreen_On; - procedure Set_Label - (This : in out Window; - Text : in String) is + procedure Fullscreen_Off + (This : in out Window) is begin - fl_window_set_label (This.Void_Ptr, Interfaces.C.To_C (Text)); - end Set_Label; + fl_window_fullscreen_off (This.Void_Ptr); + end Fullscreen_Off; - procedure Set_Size_Range - (This : in out Window; - Min_W, Min_H : in Integer; - Max_W, Max_H, Incre_W, Incre_H : in Integer := 0; - Keep_Aspect : in Boolean := False) is + procedure Fullscreen_Off + (This : in out Window; + X, Y, W, H : in Integer) is begin - fl_window_size_range - (This.Void_Ptr, - Interfaces.C.int (Min_W), - Interfaces.C.int (Min_H), - Interfaces.C.int (Max_W), - Interfaces.C.int (Max_H), - Interfaces.C.int (Incre_W), - Interfaces.C.int (Incre_H), - Boolean'Pos (Keep_Aspect)); - end Set_Size_Range; + fl_window_fullscreen_off2 + (This.Void_Ptr, + Interfaces.C.int (X), + Interfaces.C.int (Y), + Interfaces.C.int (W), + Interfaces.C.int (H)); + end Fullscreen_Off; + + + procedure Fullscreen_Screens + (This : in out Window; + Top, Bottom, Left, Right : in Natural) is + begin + fl_window_fullscreen_screens + (This.Void_Ptr, + Interfaces.C.int (Top), + Interfaces.C.int (Bottom), + Interfaces.C.int (Left), + Interfaces.C.int (Right)); + end Fullscreen_Screens; + + procedure Set_Icon @@ -276,18 +481,28 @@ package body FLTK.Widgets.Groups.Windows is end Set_Icon; - procedure Set_Modal - (This : in out Window) is + procedure Set_Default_Icon + (Pic : in out FLTK.Images.RGB.RGB_Image'Class) is begin - fl_window_set_modal (This.Void_Ptr); - end Set_Modal; + fl_window_default_icon (Wrapper (Pic).Void_Ptr); + end Set_Default_Icon; - procedure Set_Non_Modal - (This : in out Window) is + function Get_Icon_Label + (This : in Window) + return String is + begin + -- pointer to internal buffer only, so no Free required + return Interfaces.C.Strings.Value (fl_window_get_iconlabel (This.Void_Ptr)); + end Get_Icon_Label; + + + procedure Set_Icon_Label + (This : in out Window; + To : in String) is begin - fl_window_set_non_modal (This.Void_Ptr); - end Set_Non_Modal; + fl_window_set_iconlabel (This.Void_Ptr, Interfaces.C.To_C (To)); + end Set_Icon_Label; procedure Set_Cursor @@ -298,6 +513,19 @@ package body FLTK.Widgets.Groups.Windows is end Set_Cursor; + procedure Set_Cursor + (This : in out Window; + Pic : in out FLTK.Images.RGB.RGB_Image'Class; + Hot_X, Hot_Y : in Integer) is + begin + fl_window_set_cursor2 + (This.Void_Ptr, + Wrapper (Pic).Void_Ptr, + Interfaces.C.int (Hot_X), + Interfaces.C.int (Hot_Y)); + end Set_Cursor; + + procedure Set_Default_Cursor (This : in out Window; To : in Cursor) is @@ -308,6 +536,138 @@ package body FLTK.Widgets.Groups.Windows is + function Get_Border_State + (This : in Window) + return Border_State is + begin + return Border_State'Val (fl_window_get_border (This.Void_Ptr)); + end Get_Border_State; + + + procedure Set_Border_State + (This : in out Window; + To : in Border_State) is + begin + fl_window_set_border (This.Void_Ptr, Border_State'Pos (To)); + end Set_Border_State; + + + function Is_Override + (This : in Window) + return Boolean is + begin + return fl_window_get_override (This.Void_Ptr) /= 0; + end Is_Override; + + + procedure Set_Override + (This : in out Window) is + begin + fl_window_set_override (This.Void_Ptr); + end Set_Override; + + + function Get_Modal_State + (This : in Window) + return Modal_State is + begin + if fl_window_modal (This.Void_Ptr) /= 0 then + return Modal; + elsif fl_window_non_modal (This.Void_Ptr) /= 0 then + return Non_Modal; + else + return Normal; + end if; + end Get_Modal_State; + + + procedure Set_Modal_State + (This : in out Window; + To : in Modal_State) is + begin + case To is + when Normal => + fl_window_clear_modal_states (This.Void_Ptr); + when Non_Modal => + fl_window_set_non_modal (This.Void_Ptr); + when Modal => + fl_window_set_modal (This.Void_Ptr); + end case; + end Set_Modal_State; + + + + + function Get_Label + (This : in Window) + return String is + begin + -- pointer to internal buffer only, so no Free required + return Interfaces.C.Strings.Value (fl_window_get_label (This.Void_Ptr)); + end Get_Label; + + + procedure Set_Label + (This : in out Window; + Text : in String) is + begin + fl_window_set_label (This.Void_Ptr, Interfaces.C.To_C (Text)); + end Set_Label; + + + procedure Hotspot + (This : in out Window; + X, Y : in Integer; + Offscreen : in Boolean := False) is + begin + fl_window_hotspot + (This.Void_Ptr, + Interfaces.C.int (X), + Interfaces.C.int (Y), + Boolean'Pos (Offscreen)); + end Hotspot; + + + procedure Hotspot + (This : in out Window; + Item : in Widget'Class; + Offscreen : in Boolean := False) is + begin + fl_window_hotspot2 + (This.Void_Ptr, + Item.Void_Ptr, + Boolean'Pos (Offscreen)); + end Hotspot; + + + procedure Set_Size_Range + (This : in out Window; + Min_W, Min_H : in Integer; + Max_W, Max_H, Incre_W, Incre_H : in Integer := 0; + Keep_Aspect : in Boolean := False) is + begin + fl_window_size_range + (This.Void_Ptr, + Interfaces.C.int (Min_W), + Interfaces.C.int (Min_H), + Interfaces.C.int (Max_W), + Interfaces.C.int (Max_H), + Interfaces.C.int (Incre_W), + Interfaces.C.int (Incre_H), + Boolean'Pos (Keep_Aspect)); + end Set_Size_Range; + + + procedure Shape + (This : in out Window; + Pic : in out FLTK.Images.Image'Class) is + begin + fl_window_shape (This.Void_Ptr, Wrapper (Pic).Void_Ptr); + end Shape; + + + + function Get_X_Root (This : in Window) return Integer is diff --git a/src/fltk-widgets-groups-windows.ads b/src/fltk-widgets-groups-windows.ads index 3ea38c1..1199ec7 100644 --- a/src/fltk-widgets-groups-windows.ads +++ b/src/fltk-widgets-groups-windows.ads @@ -14,8 +14,13 @@ package FLTK.Widgets.Groups.Windows is type Window is new Group with private; + type Window_Reference (Data : not null access Window'Class) is limited null record + with Implicit_Dereference => Data; + type Border_State is (None, Visible); + type Modal_State is (Normal, Non_Modal, Modal); + type Cursor is (Default, Arrow, Crosshair, Wait, Insert, Hand, Help, Move, @@ -34,7 +39,8 @@ package FLTK.Widgets.Groups.Windows is return Window; function Create - (W, H : in Integer) + (W, H : in Integer; + Text : in String) return Window; end Forge; @@ -48,44 +54,73 @@ package FLTK.Widgets.Groups.Windows is procedure Hide (This : in out Window); + function Is_Shown + (This : in Window) + return Boolean; + + procedure Wait_For_Expose + (This : in out Window); + + procedure Iconify + (This : in out Window); + procedure Make_Current (This : in out Window); + function Last_Made_Current + return access Window'Class; + + procedure Free_Position + (This : in out Window); + - function Get_Border + function Is_Fullscreen (This : in Window) - return Border_State; + return Boolean; + + procedure Fullscreen_On + (This : in out Window); + + procedure Fullscreen_Off + (This : in out Window); + + procedure Fullscreen_Off + (This : in out Window; + X, Y, W, H : in Integer); + + procedure Fullscreen_Screens + (This : in out Window; + Top, Bottom, Left, Right : in Natural); - procedure Set_Border - (This : in out Window; - To : in Border_State); - procedure Set_Label - (This : in out Window; - Text : in String); - procedure Set_Size_Range - (This : in out Window; - Min_W, Min_H : in Integer; - Max_W, Max_H, Incre_W, Incre_H : in Integer := 0; - Keep_Aspect : in Boolean := False); procedure Set_Icon (This : in out Window; Pic : in out FLTK.Images.RGB.RGB_Image'Class); - procedure Set_Modal - (This : in out Window); + procedure Set_Default_Icon + (Pic : in out FLTK.Images.RGB.RGB_Image'Class); - procedure Set_Non_Modal - (This : in out Window); + function Get_Icon_Label + (This : in Window) + return String; + + procedure Set_Icon_Label + (This : in out Window; + To : in String); procedure Set_Cursor (This : in out Window; To : in Cursor); + procedure Set_Cursor + (This : in out Window; + Pic : in out FLTK.Images.RGB.RGB_Image'Class; + Hot_X, Hot_Y : in Integer); + procedure Set_Default_Cursor (This : in out Window; To : in Cursor); @@ -93,6 +128,63 @@ package FLTK.Widgets.Groups.Windows is + function Get_Border_State + (This : in Window) + return Border_State; + + procedure Set_Border_State + (This : in out Window; + To : in Border_State); + + function Is_Override + (This : in Window) + return Boolean; + + procedure Set_Override + (This : in out Window); + + function Get_Modal_State + (This : in Window) + return Modal_State; + + procedure Set_Modal_State + (This : in out Window; + To : in Modal_State); + + + + + function Get_Label + (This : in Window) + return String; + + procedure Set_Label + (This : in out Window; + Text : in String); + + procedure Hotspot + (This : in out Window; + X, Y : in Integer; + Offscreen : in Boolean := False); + + procedure Hotspot + (This : in out Window; + Item : in Widget'Class; + Offscreen : in Boolean := False); + + procedure Set_Size_Range + (This : in out Window; + Min_W, Min_H : in Integer; + Max_W, Max_H, Incre_W, Incre_H : in Integer := 0; + Keep_Aspect : in Boolean := False); + + procedure Shape + (This : in out Window; + Pic : in out FLTK.Images.Image'Class); + + + + function Get_X_Root (This : in Window) return Integer; @@ -132,6 +224,57 @@ private + pragma Inline (Show); + pragma Inline (Hide); + pragma Inline (Is_Shown); + pragma Inline (Wait_For_Expose); + pragma Inline (Iconify); + pragma Inline (Make_Current); + pragma Inline (Last_Made_Current); + pragma Inline (Free_Position); + + + pragma Inline (Is_Fullscreen); + pragma Inline (Fullscreen_On); + pragma Inline (Fullscreen_Off); + pragma Inline (Fullscreen_Screens); + + + pragma Inline (Set_Icon); + pragma Inline (Set_Default_Icon); + pragma Inline (Get_Icon_Label); + pragma Inline (Set_Icon_Label); + pragma Inline (Set_Cursor); + pragma Inline (Set_Default_Cursor); + + + pragma Inline (Get_Border_State); + pragma Inline (Set_Border_State); + pragma Inline (Is_Override); + pragma Inline (Set_Override); + pragma Inline (Get_Modal_State); + pragma Inline (Set_Modal_State); + + + pragma Inline (Get_Label); + pragma Inline (Set_Label); + pragma Inline (Hotspot); + pragma Inline (Set_Size_Range); + pragma Inline (Shape); + + + pragma Inline (Get_X_Root); + pragma Inline (Get_Y_Root); + pragma Inline (Get_Decorated_W); + pragma Inline (Get_Decorated_H); + + + pragma Inline (Draw); + pragma Inline (Handle); + + + + -- What delightful magic numbers FLTK cursors are! -- (These correspond to the enum found in Enumerations.H) Cursor_Values : array (Cursor) of Interfaces.C.int := @@ -158,5 +301,10 @@ private None => 255); + + + Last_Current : access Window'Class := null; + + end FLTK.Widgets.Groups.Windows; diff --git a/src/fltk-widgets.adb b/src/fltk-widgets.adb index 5d1e5d8..28bbb24 100644 --- a/src/fltk-widgets.adb +++ b/src/fltk-widgets.adb @@ -405,7 +405,7 @@ package body FLTK.Widgets is function Get_Label - (This : in out Widget) + (This : in Widget) return String is begin return Interfaces.C.Strings.Value (fl_widget_get_label (This.Void_Ptr)); diff --git a/src/fltk-widgets.ads b/src/fltk-widgets.ads index e4069c1..671cfa0 100644 --- a/src/fltk-widgets.ads +++ b/src/fltk-widgets.ads @@ -97,7 +97,7 @@ package FLTK.Widgets is Box : in Box_Kind); function Get_Label - (This : in out Widget) + (This : in Widget) return String; procedure Set_Label -- cgit