summaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
Diffstat (limited to 'src')
-rw-r--r--src/Fl_Help_View.cxx4
-rw-r--r--src/Fl_Int_Vector.H168
-rw-r--r--src/Fl_Int_Vector.cxx2
-rw-r--r--src/Fl_Message.cxx15
-rw-r--r--src/Fl_Message.h6
-rw-r--r--src/Fl_Preferences.cxx90
-rw-r--r--src/Fl_String.H133
-rw-r--r--src/Fl_String.cxx2
-rw-r--r--src/Fl_Table.cxx163
-rw-r--r--src/drivers/Wayland/Fl_Wayland_Screen_Driver.cxx2
-rw-r--r--src/filename_absolute.cxx56
-rw-r--r--src/fl_ask.cxx108
-rw-r--r--src/makedepend38
13 files changed, 621 insertions, 166 deletions
diff --git a/src/Fl_Help_View.cxx b/src/Fl_Help_View.cxx
index 26860987f..2dcf5fad9 100644
--- a/src/Fl_Help_View.cxx
+++ b/src/Fl_Help_View.cxx
@@ -50,8 +50,8 @@
#include <FL/Fl_Shared_Image.H>
#include <FL/Fl_Window.H>
#include <FL/Fl_Pixmap.H>
-#include <FL/Fl_Int_Vector.H>
-#include <FL/Fl_String.H>
+#include "Fl_Int_Vector.H"
+#include "Fl_String.H"
#include <stdio.h>
#include <stdlib.h>
diff --git a/src/Fl_Int_Vector.H b/src/Fl_Int_Vector.H
new file mode 100644
index 000000000..6d89f596e
--- /dev/null
+++ b/src/Fl_Int_Vector.H
@@ -0,0 +1,168 @@
+//
+// An STL-ish vector without templates for the Fast Light Tool Kit (FLTK).
+//
+// Copyright 2002 by Greg Ercolano.
+// Copyright 2022-2023 by Bill Spitzak and others.
+//
+// This library is free software. Distribution and use rights are outlined in
+// the file "COPYING" which should have been included with this file. If this
+// file is missing or damaged, see the license at:
+//
+// https://www.fltk.org/COPYING.php
+//
+// Please see the following page on how to report bugs and issues:
+//
+// https://www.fltk.org/bugs.php
+//
+
+#ifndef Fl_Int_Vector_H
+#define Fl_Int_Vector_H
+
+#include <FL/Fl_Export.H>
+
+/** \file src/Fl_Int_Vector.H
+ An STL-ish vector implemented without templates.
+*/
+
+/**
+ An STL-ish vector without templates.
+
+ Handles dynamic memory management of an integer array, and allows
+ array elements to be accessed with zero based indexing: v[0], v[1]..
+
+ Common use:
+ \code
+ #include <stdio.h>
+ #include "Fl_Int_Vector.H"
+ int main() {
+ Fl_Int_Vector v;
+
+ // Create an array of values 11,22,33:
+ v.push_back(11); // add first element
+ v.push_back(22); // add second element
+ v.push_back(33); // add third element
+
+ // Assignment by subscript
+ v[1] = 222; // changes 2nd element from 22 to 222
+
+ // Loop through printing the values
+ for ( unsigned int i=0; i<v.size(); i++ )
+ printf("%d ", v[i]); // access the elements
+ printf("\n");
+
+ // Clear the array
+ v.size(0);
+ }
+ \endcode
+
+ \todo
+ - Note: this class is only for internal use and deprecated by design.
+ It will be replaced with std::vector<int> in the next version after 1.4.x.
+ - Add other std::vector methods like erase(), etc.
+ - Make memory blocking size flexible, and add related methods like capacity(), reserve(), shrink_to_fit(), etc.
+ - Add non-std methods that are nevertheless needed, e.g. insert(index,val), delete(index), delete(start, end), swap(a_idx,b_idx)
+*/
+class FL_EXPORT Fl_Int_Vector {
+ int *arr_;
+ unsigned int size_;
+
+ /**
+ Initialize internals.
+ Private: For use internally by the class's ctors only.
+ */
+ void init() {
+ arr_ = 0;
+ size_ = 0;
+ }
+ void copy(int *newarr, unsigned int newsize);
+
+public:
+ /** Create an empty vector of integers. */
+ Fl_Int_Vector() {
+ init();
+ }
+
+ ~Fl_Int_Vector();
+
+ /** Copy constructor. */
+ Fl_Int_Vector(Fl_Int_Vector &o) {
+ init();
+ copy(o.arr_, o.size_);
+ }
+
+ /**
+ Assignment operator. Similar to the copy constructor,
+ creates a separate copy of the source array, freeing any
+ previous contents in the current integer array.
+ */
+ Fl_Int_Vector &operator=(Fl_Int_Vector &o) {
+ init();
+ copy(o.arr_, o.size_);
+ return *this;
+ }
+
+ /**
+ Access the specified integer element at index position \p x.
+ \warning No range checking is done on \p x, which must be less than size().
+ */
+ int operator[](int x) const {
+ return arr_[x];
+ }
+
+ /**
+ Access the specified integer element at index position \p x as a reference.
+
+ This allows assignment by index through the returned reference, e.g. arr[1] = 222;
+ where arr[1] ends up being a reference to ptr[1], and then 222 is assigned to that ref.
+
+ \warning No range checking is done on \p x, which must be less than size().
+ */
+ int &operator[](int x) {
+ return arr_[x];
+ }
+
+ /** Return the number of integer elements in the array. */
+ unsigned int size() const {
+ return size_;
+ }
+
+ void size(unsigned int count);
+
+ /**
+ Removes the last element the last element and returns its value.
+
+ \warning You must not call pop_back() if the array is empty, i.e. if (size() == 0).
+ \todo Internals should maybe assert(size_ != 0)
+ */
+ int pop_back() {
+ int tmp = arr_[size_ - 1];
+ size_--;
+ return tmp;
+ }
+
+ /** Appends \p val to the array, enlarging the array by one. */
+ void push_back(int val) {
+ unsigned int x = size_;
+ size(size_ + 1);
+ arr_[x] = val;
+ }
+
+ /**
+ Return the last element in the array.
+ \warning You must not call back() if the array is empty, i.e. if (size() == 0).
+ \todo Internals should maybe assert(size_ != 0)
+ */
+ int back() const {
+ return arr_[size_ - 1];
+ }
+
+ /**
+ Checks if array has no elements.
+ Same as a test for (size() == 0).
+ */
+ bool empty() const {
+ return (size_ == 0) ? true : false;
+ }
+};
+
+#endif // Fl_Int_Vector_H
diff --git a/src/Fl_Int_Vector.cxx b/src/Fl_Int_Vector.cxx
index 455dd381d..bbbf149dd 100644
--- a/src/Fl_Int_Vector.cxx
+++ b/src/Fl_Int_Vector.cxx
@@ -15,7 +15,7 @@
// https://www.fltk.org/bugs.php
//
-#include <FL/Fl_Int_Vector.H>
+#include "Fl_Int_Vector.H"
#include <stdlib.h>
#include <string.h>
diff --git a/src/Fl_Message.cxx b/src/Fl_Message.cxx
index 246835d6c..ee3f61cd3 100644
--- a/src/Fl_Message.cxx
+++ b/src/Fl_Message.cxx
@@ -445,9 +445,18 @@ Fl_Box *Fl_Message::message_icon() {
/**
Does all Fl_Message window internals for messages with a text input field.
+ \param[in] fmt printf style format used in the user function call
+ \param[in] ap argument list provided by the user function call
+ \param[in] defstr default string given by the user
+ \param[in] type either FL_NORMAL_INPUT or FL_SECRET_INPUT (password)
+ \param[in] maxchar max. number of allowed characters (not bytes)
+ \param[in] str true: return type is string, false: internal buffer
+
+ \returns pointer to string or NULL if cancel or escape were hit
+
\see innards()
*/
-const char *Fl_Message::input_innards(const char *fmt, va_list ap, const char *defstr, uchar type, int maxchar) {
+const char *Fl_Message::input_innards(const char *fmt, va_list ap, const char *defstr, uchar type, int maxchar, bool str) {
message_->position(60, 10);
input_->type(type);
input_->show();
@@ -465,7 +474,7 @@ const char *Fl_Message::input_innards(const char *fmt, va_list ap, const char *d
int size = input_->size() + 1;
- if (maxchar < 0) { // need to store the value in pre-allocated buffer
+ if (!str) { // need to store the value in pre-allocated buffer
// The allocated input buffer starts with size 0 and is allocated
// in multiples of 128 bytes >= size. If both the size and the pointer
@@ -485,7 +494,7 @@ const char *Fl_Message::input_innards(const char *fmt, va_list ap, const char *d
input_buffer_[input_->size()] = '\0';
return (input_buffer_);
- } else { // new version: return value() which will be copied
+ } else { // string version: return value() which will be copied
return input_->value();
}
diff --git a/src/Fl_Message.h b/src/Fl_Message.h
index 2f33df1d1..4b0581a8c 100644
--- a/src/Fl_Message.h
+++ b/src/Fl_Message.h
@@ -88,10 +88,6 @@ private:
// and fl_password() return their input text, we *need* to store
// the text in an internal (static) buffer. :-(
- // The newer functions fl_input_str() and fl_password_str() return the
- // text in an Fl_String object that must be allocated and free()'d by
- // the caller.
-
static char *input_buffer_; // points to the allocated text buffer
static int input_size_; // size of allocated text buffer
@@ -169,7 +165,7 @@ public:
int innards(const char *fmt, va_list ap, const char *b0, const char *b1, const char *b2);
- const char *input_innards(const char *fmt, va_list ap, const char *defstr, uchar type, int maxchar = -1);
+ const char *input_innards(const char *fmt, va_list ap, const char *defstr, uchar type, int maxchar = -1, bool str = false);
};
/**
diff --git a/src/Fl_Preferences.cxx b/src/Fl_Preferences.cxx
index 6a6150fad..f4a769d69 100644
--- a/src/Fl_Preferences.cxx
+++ b/src/Fl_Preferences.cxx
@@ -1,8 +1,8 @@
//
// Preferences methods for the Fast Light Tool Kit (FLTK).
//
-// Copyright 2011-2022 by Bill Spitzak and others.
// Copyright 2002-2010 by Matthias Melcher.
+// Copyright 2011-2023 by Bill Spitzak and others.
//
// This library is free software. Distribution and use rights are outlined in
// the file "COPYING" which should have been included with this file. If this
@@ -28,6 +28,9 @@
#include <stdlib.h>
#include <stdarg.h>
+#if (FLTK_USE_STD)
+#include <string>
+#endif
char Fl_Preferences::nameBuffer[128];
char Fl_Preferences::uuidBuffer[40];
@@ -844,46 +847,36 @@ char Fl_Preferences::get( const char *key, char *&text, const char *defaultValue
return ( v != defaultValue );
}
-// /**
-// Reads an entry from the group. A default value must be
-// supplied. The return value indicates if the value was available
-// (non-zero) or the default was used (0).
-//
-// \param[in] key name of entry
-// \param[out] value returned from preferences or default value if none was set
-// \param[in] defaultValue default value to be used if no preference was set
-// \return 0 if the default value was used
-// */
-//char Fl_Preferences::get( const char *key, Fl_String &value, const Fl_String &defaultValue ) {
-// const char *v = node->get( key );
-// if (v) {
-// if ( strchr( v, '\\' ) ) {
-// char *text = decodeText( v );
-// value = text;
-// ::free(text);
-// } else {
-// value = v;
-// }
-// return 1;
-// } else {
-// value = defaultValue;
-// return 0;
-// }
-//}
-
-// /**
-// Sets an entry (name/value pair). The return value indicates if there
-// was a problem storing the data in memory. However it does not
-// reflect if the value was actually stored in the preference file.
-//
-// \param[in] entry name of entry
-// \param[in] value set this entry to value (stops at the first nul character).
-// \return 0 if setting the value failed
-// */
-//char Fl_Preferences::set( const char *entry, const Fl_String &value ) {
-// return set(entry, value.c_str());
-//}
+#if (FLTK_USE_STD)
+/**
+ Reads an entry from the group. A default value must be
+ supplied. The return value indicates if the value was available
+ (non-zero) or the default was used (0).
+
+ \param[in] key name of entry
+ \param[out] value returned from preferences or default value if none was set
+ \param[in] defaultValue default value to be used if no preference was set
+ \return 0 if the default value was used
+ */
+char Fl_Preferences::get( const char *key, std::string &value, const std::string &defaultValue ) {
+ const char *v = node->get( key );
+ if (v) {
+ if ( strchr( v, '\\' ) ) {
+ char *text = decodeText( v );
+ value = text;
+ ::free(text);
+ } else {
+ value = v;
+ }
+ return 1;
+ } else {
+ value = defaultValue;
+ return 0;
+ }
+}
+
+#endif
/**
Sets an entry (name/value pair). The return value indicates if there
@@ -1055,6 +1048,23 @@ char Fl_Preferences::set( const char *key, const void *data, int dsize ) {
return 1;
}
+#if (FLTK_USE_STD)
+
+/**
+ Sets an entry (name/value pair). The return value indicates if there
+ was a problem storing the data in memory. However it does not
+ reflect if the value was actually stored in the preference file.
+
+ \param[in] entry name of entry
+ \param[in] value set this entry to value (stops at the first nul character).
+ \return 0 if setting the value failed
+ */
+char Fl_Preferences::set( const char *entry, const std::string &value ) {
+ return set(entry, value.c_str());
+}
+
+#endif // FLTK_USE_STD
+
/**
Returns the size of the value part of an entry.
diff --git a/src/Fl_String.H b/src/Fl_String.H
new file mode 100644
index 000000000..8c8569e8d
--- /dev/null
+++ b/src/Fl_String.H
@@ -0,0 +1,133 @@
+//
+// Basic Fl_String header for the Fast Light Tool Kit (FLTK).
+//
+// Copyright 2021-2023 by Bill Spitzak and others.
+//
+// This library is free software. Distribution and use rights are outlined in
+// the file "COPYING" which should have been included with this file. If this
+// file is missing or damaged, see the license at:
+//
+// https://www.fltk.org/COPYING.php
+//
+// Please see the following page on how to report bugs and issues:
+//
+// https://www.fltk.org/bugs.php
+//
+
+#ifndef _FL_Fl_String_H_
+#define _FL_Fl_String_H_
+
+/** \file src/Fl_String.H
+ Basic Fl_String class for FLTK.
+*/
+
+#include <FL/Fl_Export.H>
+
+// See: https://en.cppreference.com/w/cpp/string/basic_string/basic_string
+
+/**
+ Fl_String is the basic string class for FLTK.
+
+ In this version Fl_String can be used to store strings, copy strings,
+ move strings, and do basic string manipulation. Fl_String implements a
+ subset of std::string with a couple of extensions. std::string should be
+ a drop-in if we ever decide to allow templates and the std library.
+
+ Fl_String always maintains a trailing \e nul byte, but can also contain
+ \e nul bytes inside the string if the constructor
+ Fl_String(const char *str, int size) is used.
+
+ Assignment and copy constructors \b copy the string value such that the
+ source string can be freed immediately after the assignment.
+
+ c_str() and data() can be an empty string \c "", but never be \c NULL.
+
+ The method size() returns the full string size, whether the string contains
+ embedded \c nul bytes or not. The special method Fl_String::strlen() returns
+ the length of the string up to the first \e nul.
+
+ All methods of Fl_String work on a byte level. They are not UTF-8 aware,
+ but may hold and manipulate UTF-8 strings if done with care.
+
+ \since 1.4.0
+*/
+class FL_EXPORT Fl_String {
+
+private:
+ /*
+ FLTK does no small string optimization.
+ If the string is empty and capacity is not set, buffer_ will be NULL.
+ */
+ char *buffer_;
+ int size_;
+ int capacity_;
+
+ void init_();
+ void grow_(int n);
+ void shrink_(int n);
+ Fl_String &replace_(int at, int n_del, const char *src, int n_ins);
+
+protected:
+ static const char NUL;
+
+public:
+ static const int npos;
+
+ // ---- Assignment
+ Fl_String();
+ Fl_String(const Fl_String &str);
+ Fl_String(const char *cstr);
+ Fl_String(const char *str, int size);
+ ~Fl_String();
+ Fl_String& operator=(const Fl_String &str);
+ Fl_String& operator=(const char *cstr);
+ Fl_String &assign(const Fl_String &str);
+ Fl_String &assign(const char *cstr);
+ Fl_String &assign(const char *str, int size);
+
+ // ---- Element Access
+ char at(int pos) const;
+ char operator[](int n) const;
+ char &operator[](int n);
+ const char *data() const;
+ char *data();
+ const char *c_str() const;
+
+ // ---- Capacity
+ bool empty() const;
+ int size() const;
+ void reserve(int n);
+ int capacity() const;
+ void shrink_to_fit();
+
+ // --- Operations
+ void clear();
+ Fl_String &insert(int at, const char *src, int n_ins=npos);
+ Fl_String &insert(int at, const Fl_String &src);
+ Fl_String &erase(int at, int n_del);
+ void push_back(char c);
+ void pop_back();
+ Fl_String &append(const char *src, int n_ins=npos);
+ Fl_String &append(const Fl_String &src);
+ Fl_String &append(char c);
+ Fl_String &operator+=(const char *src);
+ Fl_String &operator+=(const Fl_String &src);
+ Fl_String &operator+=(char c);
+ int find(const Fl_String &needle, int start_pos=0) const;
+ Fl_String &replace(int at, int n_del, const char *src, int n_ins=npos);
+ Fl_String &replace(int at, int n_del, const Fl_String &src);
+ Fl_String substr(int pos=0, int n=npos) const;
+ void resize(int n);
+
+ // --- Non Standard
+ int strlen() const;
+ void debug(const char *info = 0) const;
+ void hexdump(const char *info = 0) const;
+}; // class Fl_String
+
+// ---- Non-member functions
+FL_EXPORT Fl_String operator+(const Fl_String& lhs, const Fl_String& rhs);
+FL_EXPORT Fl_String operator+(const Fl_String& lhs, const char* rhs);
+FL_EXPORT bool operator==(const Fl_String & lhs, const Fl_String & rhs);
+
+#endif // _FL_Fl_String_H_
diff --git a/src/Fl_String.cxx b/src/Fl_String.cxx
index e285519ff..c17578dd5 100644
--- a/src/Fl_String.cxx
+++ b/src/Fl_String.cxx
@@ -14,7 +14,7 @@
// https://www.fltk.org/bugs.php
//
-#include <FL/Fl_String.H>
+#include "Fl_String.H"
#include <stdio.h>
#include <stdlib.h>
diff --git a/src/Fl_Table.cxx b/src/Fl_Table.cxx
index 91ebe262e..09b4dbdf8 100644
--- a/src/Fl_Table.cxx
+++ b/src/Fl_Table.cxx
@@ -1,8 +1,9 @@
//
-// Fl_Table -- A table widget
+// Fl_Table -- A table widget for the Fast Light Tool Kit (FLTK).
//
// Copyright 2002 by Greg Ercolano.
// Copyright (c) 2004 O'ksi'D
+// Copyright 2023 by Bill Spitzak and others.
//
// This library is free software. Distribution and use rights are outlined in
// the file "COPYING" which should have been included with this file. If this
@@ -16,10 +17,22 @@
//
#include <FL/Fl_Table.H>
-
#include <FL/Fl.H>
#include <FL/fl_draw.H>
+// DEBUG - remove this when done, set to 0 to disable debug output
+#define DEBUG_ROW_COL_RESIZE 1
+
+// EXPERIMENTAL
+// We use either std::vector or the private class Fl_Int_Vector
+// depending on the build option OPTION_USE_STD or equivalent.
+// This option allows to use std::string and maybe std::vector
+// already in FLTK 1.4.x
+
+#if (!FLTK_USE_STD)
+#include "Fl_Int_Vector.H" // Note: MUST NOT be included in Fl_Table.H
+#endif
+
#include <sys/types.h>
#include <string.h> // memcpy
#include <stdio.h> // fprintf
@@ -144,6 +157,15 @@ Fl_Table::Fl_Table(int X, int Y, int W, int H, const char *l) : Fl_Group(X,Y,W,H
select_col = -1;
_scrollbar_size = 0;
flags_ = 0; // TABCELLNAV off
+
+#if (FLTK_USE_STDXX)
+ _colwidths = new std::vector<int>; // column widths in pixels
+ _rowheights = new std::vector<int>; // row heights in pixels
+#else
+ _colwidths = new Fl_Int_Vector(); // column widths in pixels
+ _rowheights = new Fl_Int_Vector(); // row heights in pixels
+#endif
+
box(FL_THIN_DOWN_FRAME);
vscrollbar = new Fl_Scrollbar(x()+w()-Fl::scrollbar_size(), y(),
@@ -177,6 +199,31 @@ Fl_Table::Fl_Table(int X, int Y, int W, int H, const char *l) : Fl_Group(X,Y,W,H
*/
Fl_Table::~Fl_Table() {
// The parent Fl_Group takes care of destroying scrollbars
+ delete _colwidths;
+ delete _rowheights;
+}
+
+
+/**
+ Returns the current number of columns.
+
+ This is equivalent to the size of the column widths vector.
+
+ \returns Number of columns.
+*/
+int Fl_Table::col_size() {
+ return int(_colwidths->size());
+}
+
+/**
+ Returns the current number of rows.
+
+ This is equivalent to the size of the row heights vector.
+
+ \returns Number of rows.
+*/
+int Fl_Table::row_size() {
+ return int(_rowheights->size());
}
/**
@@ -187,17 +234,21 @@ Fl_Table::~Fl_Table() {
*/
void Fl_Table::row_height(int row, int height) {
if ( row < 0 ) return;
- if ( row < (int)_rowheights.size() && _rowheights[row] == height ) {
+ if ( row < row_size() && (*_rowheights)[row] == height ) {
return; // OPTIMIZATION: no change? avoid redraw
}
// Add row heights, even if none yet
- int now_size = (int)_rowheights.size();
- if ( row >= now_size ) {
- _rowheights.size(row);
+ int now_size = row_size();
+ if (row >= now_size) {
+#if (FLTK_USE_STD)
+ _rowheights->resize(row, height);
+#else
+ _rowheights->size(row);
while (now_size < row)
- _rowheights[now_size++] = height;
+ (*_rowheights)[now_size++] = height;
+#endif // FLTK_USE_STD
}
- _rowheights[row] = height;
+ (*_rowheights)[row] = height;
table_resized();
if ( row <= botrow ) { // OPTIMIZATION: only redraw if onscreen or above screen
redraw();
@@ -216,18 +267,21 @@ void Fl_Table::row_height(int row, int height) {
void Fl_Table::col_width(int col, int width)
{
if ( col < 0 ) return;
- if ( col < (int)_colwidths.size() && _colwidths[col] == width ) {
+ if ( col < col_size() && (*_colwidths)[col] == width ) {
return; // OPTIMIZATION: no change? avoid redraw
}
// Add column widths, even if none yet
- int now_size = (int)_colwidths.size();
+ int now_size = col_size();
if ( col >= now_size ) {
- _colwidths.size(col+1);
- while (now_size < col) {
- _colwidths[now_size++] = width;
- }
+#if (FLTK_USE_STD)
+ _colwidths->resize(col+1, width);
+#else
+ _colwidths->size(col+1);
+ while (now_size < col)
+ (*_colwidths)[now_size++] = width;
+#endif
}
- _colwidths[col] = width;
+ (*_colwidths)[col] = width;
table_resized();
if ( col <= rightcol ) { // OPTIMIZATION: only redraw if onscreen or to the left
redraw();
@@ -635,14 +689,30 @@ void Fl_Table::scroll_cb(Fl_Widget*w, void *data) {
void Fl_Table::rows(int val) {
int oldrows = _rows;
_rows = val;
- {
- int default_h = ( _rowheights.size() > 0 ) ? _rowheights.back() : 25;
- int now_size = _rowheights.size();
- _rowheights.size(val); // enlarge or shrink as needed
- while ( now_size < val ) {
- _rowheights[now_size++] = default_h; // fill new
- }
- }
+
+ int default_h = row_size() > 0 ? _rowheights->back() : 25;
+ int now_size = row_size();
+
+#if DEBUG_ROW_COL_RESIZE
+ fprintf(stderr, "Fl_Table::rows(%d) from %d, FLTK_USE_STD = %d\n", val, now_size, FLTK_USE_STD);
+ fflush(stderr);
+ Fl_Timestamp start = Fl::now();
+#endif
+
+#if (FLTK_USE_STD)
+ if (now_size != val)
+ _rowheights->resize(val, default_h); // enlarge or shrink as needed
+#else
+ _rowheights->size(val); // enlarge or shrink as needed
+ while (now_size < val)
+ (*_rowheights)[now_size++] = default_h; // fill new
+#endif
+
+#if DEBUG_ROW_COL_RESIZE
+ fprintf(stderr, "Fl_Table::rows(%d) - done in %7.3f ms\n", val, Fl::seconds_since(start)*1000);
+ fflush(stderr);
+#endif
+
table_resized();
// OPTIMIZATION: redraw only if change is visible.
@@ -658,14 +728,31 @@ void Fl_Table::rows(int val) {
*/
void Fl_Table::cols(int val) {
_cols = val;
- {
- int default_w = ( _colwidths.size() > 0 ) ? _colwidths[_colwidths.size()-1] : 80;
- int now_size = _colwidths.size();
- _colwidths.size(val); // enlarge or shrink as needed
- while ( now_size < val ) {
- _colwidths[now_size++] = default_w; // fill new
- }
- }
+
+ int default_w = col_size() > 0 ? (*_colwidths)[col_size()-1] : 80;
+ int now_size = col_size();
+
+#if DEBUG_ROW_COL_RESIZE
+ fprintf(stderr, "Fl_Table::cols(%d) from %d, FLTK_USE_STD = %d\n", val, now_size, FLTK_USE_STD);
+ fflush(stderr);
+ Fl_Timestamp start = Fl::now();
+#endif
+
+#if (FLTK_USE_STD)
+ if (now_size != val)
+ _colwidths->resize(val, default_w); // enlarge or shrink as needed
+#else
+ _colwidths->size(val); // enlarge or shrink as needed
+ while (now_size < val)
+ (*_colwidths)[now_size++] = default_w; // fill new
+#endif
+
+#if DEBUG_ROW_COL_RESIZE
+ double delta = Fl::seconds_since(start) * 1000;
+ fprintf(stderr, "Fl_Table::cols(%d) - done in %7.3f ms\n", val, delta);
+ fflush(stderr);
+#endif
+
table_resized();
redraw();
}
@@ -1368,3 +1455,17 @@ void Fl_Table::draw() {
}
fl_pop_clip();
}
+
+/**
+ Returns the current height of the specified row as a value in pixels.
+*/
+int Fl_Table::row_height(int row) {
+ return((row < 0 || row >= row_size()) ? 0 : (*_rowheights)[row]);
+}
+
+/**
+ Returns the current width of the specified column in pixels.
+*/
+int Fl_Table::col_width(int col) {
+ return((col < 0 || col >= col_size()) ? 0 : (*_colwidths)[col]);
+}
diff --git a/src/drivers/Wayland/Fl_Wayland_Screen_Driver.cxx b/src/drivers/Wayland/Fl_Wayland_Screen_Driver.cxx
index 01c799fad..b42e17814 100644
--- a/src/drivers/Wayland/Fl_Wayland_Screen_Driver.cxx
+++ b/src/drivers/Wayland/Fl_Wayland_Screen_Driver.cxx
@@ -26,7 +26,7 @@
#include <FL/platform.H>
#include <FL/fl_ask.H>
#include <FL/filename.H>
-#include <FL/Fl_Int_Vector.H>
+#include "../../Fl_Int_Vector.H"
#include "../../print_button.h"
#include <dlfcn.h>
#include <linux/input.h>
diff --git a/src/filename_absolute.cxx b/src/filename_absolute.cxx
index c1a65ba91..da4dd816b 100644
--- a/src/filename_absolute.cxx
+++ b/src/filename_absolute.cxx
@@ -22,7 +22,6 @@
#include <FL/filename.H>
#include <FL/Fl.H>
-#include <FL/Fl_String.H>
#include <FL/fl_string_functions.h>
#include "Fl_System_Driver.H"
#include <stdlib.h>
@@ -165,8 +164,10 @@ int Fl_System_Driver::filename_absolute(char *to, int tolen, const char *from, c
\param[in] from absolute filename
\return 0 if no change, non zero otherwise
\see fl_filename_relative(char *to, int tolen, const char *from, const char *base)
- \see fl_filename_relative(const Fl_String &from, const Fl_String &base)
- \see fl_filename_relative(const Fl_String &from)
+ <!-- FIXME: added in 1.5 or higher ...
+ \see fl_filename_relative(const std::string &from, const std::string &base)
+ \see fl_filename_relative(const std::string &from)
+ -->
*/
int fl_filename_relative(char *to, int tolen, const char *from)
{
@@ -284,6 +285,10 @@ int Fl_System_Driver::filename_relative(char *to, int tolen, const char *dest_di
\endcond
*/
+// FIXME: '0 &&' => We can't do that in 1.4.x, enable this block in 1.5 or higher.
+// There would be too many naming conflicts with fluid's usage of these functions.
+
+#if (0 && FLTK_USE_STD)
/**
Return a new string that contains the name part of the filename.
@@ -291,8 +296,8 @@ int Fl_System_Driver::filename_relative(char *to, int tolen, const char *dest_di
\return the name part of a filename
\see fl_filename_name(const char *filename)
*/
-Fl_String fl_filename_name(const Fl_String &filename) {
- return Fl_String(fl_filename_name(filename.c_str()));
+std::string fl_filename_name(const std::string &filename) {
+ return std::string(fl_filename_name(filename.c_str()));
}
/**
@@ -301,13 +306,13 @@ Fl_String fl_filename_name(const Fl_String &filename) {
\return the path part of a filename without the name
\see fl_filename_name(const char *filename)
*/
-Fl_String fl_filename_path(const Fl_String &filename) {
+std::string fl_filename_path(const std::string &filename) {
const char *base = filename.c_str();
const char *name = fl_filename_name(base);
if (name) {
- return Fl_String(base, (int)(name-base));
+ return std::string(base, (int)(name-base));
} else {
- return Fl_String();
+ return std::string();
}
}
@@ -318,8 +323,8 @@ Fl_String fl_filename_path(const Fl_String &filename) {
string if the filename has no extension
\see fl_filename_ext(const char *buf)
*/
-Fl_String fl_filename_ext(const Fl_String &filename) {
- return Fl_String(fl_filename_ext(filename.c_str()));
+std::string fl_filename_ext(const std::string &filename) {
+ return std::string(fl_filename_ext(filename.c_str()));
}
/**
@@ -329,11 +334,11 @@ Fl_String fl_filename_ext(const Fl_String &filename) {
\return the new filename
\see fl_filename_setext(char *to, int tolen, const char *ext)
*/
-Fl_String fl_filename_setext(const Fl_String &filename, const Fl_String &new_extension) {
+std::string fl_filename_setext(const std::string &filename, const std::string &new_extension) {
char buffer[FL_PATH_MAX];
fl_strlcpy(buffer, filename.c_str(), FL_PATH_MAX);
fl_filename_setext(buffer, FL_PATH_MAX, new_extension.c_str());
- return Fl_String(buffer);
+ return std::string(buffer);
}
/**
@@ -342,10 +347,10 @@ Fl_String fl_filename_setext(const Fl_String &filename, const Fl_String &new_ext
\return the new, expanded filename
\see fl_filename_expand(char *to, int tolen, const char *from)
*/
-Fl_String fl_filename_expand(const Fl_String &from) {
+std::string fl_filename_expand(const std::string &from) {
char buffer[FL_PATH_MAX];
fl_filename_expand(buffer, FL_PATH_MAX, from.c_str());
- return Fl_String(buffer);
+ return std::string(buffer);
}
/**
@@ -354,10 +359,10 @@ Fl_String fl_filename_expand(const Fl_String &from) {
\return the new, absolute filename
\see fl_filename_absolute(char *to, int tolen, const char *from)
*/
-Fl_String fl_filename_absolute(const Fl_String &from) {
+std::string fl_filename_absolute(const std::string &from) {
char buffer[FL_PATH_MAX];
fl_filename_absolute(buffer, FL_PATH_MAX, from.c_str());
- return Fl_String(buffer);
+ return std::string(buffer);
}
/**
@@ -368,10 +373,10 @@ Fl_String fl_filename_absolute(const Fl_String &from) {
\return the new, absolute filename
\see fl_filename_absolute(char *to, int tolen, const char *from, const char *base)
*/
-Fl_String fl_filename_absolute(const Fl_String &from, const Fl_String &base) {
+std::string fl_filename_absolute(const std::string &from, const std::string &base) {
char buffer[FL_PATH_MAX];
fl_filename_absolute(buffer, FL_PATH_MAX, from.c_str(), base.c_str());
- return Fl_String(buffer);
+ return std::string(buffer);
}
/**
@@ -380,10 +385,10 @@ Fl_String fl_filename_absolute(const Fl_String &from, const Fl_String &base) {
\return the new, relative filename
\see fl_filename_relative(char *to, int tolen, const char *from)
*/
-Fl_String fl_filename_relative(const Fl_String &from) {
+std::string fl_filename_relative(const std::string &from) {
char buffer[FL_PATH_MAX];
fl_filename_relative(buffer, FL_PATH_MAX, from.c_str());
- return Fl_String(buffer);
+ return std::string(buffer);
}
/**
@@ -393,19 +398,20 @@ Fl_String fl_filename_relative(const Fl_String &from) {
\return the new, relative filename
\see fl_filename_relative(char *to, int tolen, const char *from, const char *base)
*/
-Fl_String fl_filename_relative(const Fl_String &from, const Fl_String &base) {
+std::string fl_filename_relative(const std::string &from, const std::string &base) {
char buffer[FL_PATH_MAX];
fl_filename_relative(buffer, FL_PATH_MAX, from.c_str(), base.c_str());
- return Fl_String(buffer);
+ return std::string(buffer);
}
/** Cross-platform function to get the current working directory
- as a UTF-8 encoded value in an Fl_String.
+ as a UTF-8 encoded value in an std::string.
\return the CWD encoded as UTF-8
*/
-Fl_String fl_getcwd() {
+std::string fl_getcwd() {
char buffer[FL_PATH_MAX];
fl_getcwd(buffer, FL_PATH_MAX);
- return Fl_String(buffer);
+ return std::string(buffer);
}
+#endif // FLTK_USE_STD
diff --git a/src/fl_ask.cxx b/src/fl_ask.cxx
index 6ed6b2667..29221d494 100644
--- a/src/fl_ask.cxx
+++ b/src/fl_ask.cxx
@@ -292,14 +292,10 @@ Fl_Widget *fl_message_icon() {
/** Shows an input dialog displaying the \p fmt message with variable arguments.
- This version of fl_input() is deprecated. The return value points
- to an internal allocated string that may be changed later. You must
- copy the string immediately after return from this method - at least
+ Returns the string in an internally allocated buffer that may be changed later.
+ You \b must copy the string immediately after return from this method - at least
before the next execution of the event loop.
- \deprecated Please use
- fl_input_str(int maxchar, const char *fmt, const char *defstr, ...) instead.
-
\code #include <FL/fl_ask.H> \endcode
\param[in] fmt can be used as an sprintf-like format and variables for the message text
@@ -313,11 +309,45 @@ const char *fl_input(const char *fmt, const char *defstr, ...) {
Fl_Message msg("?");
va_list ap;
va_start(ap, defstr);
- const char *r = msg.input_innards(fmt, ap, defstr, FL_NORMAL_INPUT, -1);
+ const char *r = msg.input_innards(fmt, ap, defstr, FL_NORMAL_INPUT, 0, false);
+ va_end(ap);
+ return r;
+}
+
+
+/** Shows an input dialog displaying the \p fmt message with variable arguments.
+
+ This is the same as const char *fl_input(const char *fmt, const char *defstr, ...)
+ except that it has an additional parameter to limit the number of characters
+ the user can input.
+
+ Returns the string in an internally allocated buffer that may be changed later.
+ You \b must copy the string immediately after return from this method - at least
+ before the next execution of the event loop.
+
+ \code #include <FL/fl_ask.H> \endcode
+
+ \param[in] fmt can be used as an sprintf-like format and variables for the message text
+ \param[in] defstr defines the default returned string if no text is entered
+
+ \return the user string input if OK was pushed
+ \retval NULL if Cancel was pushed or the window was closed by the user
+*/
+const char *fl_input(int maxchar, const char *fmt, const char *defstr, ...) {
+
+ Fl_Message msg("?");
+ if (maxchar < 0) maxchar = 0;
+ va_list ap;
+ va_start(ap, defstr);
+ const char *r = msg.input_innards(fmt, ap, defstr, FL_NORMAL_INPUT, maxchar, false);
va_end(ap);
return r;
}
+
+
+#if (FLTK_USE_STD)
+
/** Shows an input dialog displaying the \p fmt message with variable arguments.
Like fl_input(), but this method has the additional argument \p maxchar
@@ -326,7 +356,7 @@ const char *fl_input(const char *fmt, const char *defstr, ...) {
in the string is larger than \p maxchar.
Other than the deprecated fl_input() method w/o the \p maxchar argument, this one
- returns the string in an Fl_String object that must be released after use. This
+ returns the string in an std::string object that must be released after use. This
can be a local/automatic variable.
The \p ret variable is set to 0 if the user clicked OK, and to a negative
@@ -338,7 +368,7 @@ const char *fl_input(const char *fmt, const char *defstr, ...) {
Example:
\code
{ int ret;
- Fl_String str = fl_input_str(ret, 0, "Enter text:", "");
+ std::string str = fl_input_str(ret, 0, "Enter text:", "");
if (ret < 0)
printf("Text input was canceled.\n");
else
@@ -356,31 +386,33 @@ const char *fl_input(const char *fmt, const char *defstr, ...) {
\since 1.4.0
*/
-Fl_String fl_input_str(int &ret, int maxchar, const char *fmt, const char *defstr, ...) {
+std::string fl_input_str(int &ret, int maxchar, const char *fmt, const char *defstr, ...) {
Fl_Message msg("?");
if (maxchar < 0) maxchar = 0;
va_list ap;
va_start(ap, defstr);
- const char *r = msg.input_innards(fmt, ap, defstr, FL_NORMAL_INPUT, maxchar);
+ const char *r = msg.input_innards(fmt, ap, defstr, FL_NORMAL_INPUT, maxchar, true);
va_end(ap);
ret = (r == NULL) ? -1 : 0;
- return Fl_String(r);
+ return (r == NULL) ? std::string("") : std::string(r);
}
/** Shows an input dialog displaying the \p fmt message with variable arguments.
\note No information is given if the user canceled the dialog or clicked OK.
\see fl_input_str(int &ret, int maxchar, const char *label, const char *deflt = 0, ...)
*/
-Fl_String fl_input_str(int maxchar, const char *fmt, const char *defstr, ...) {
+std::string fl_input_str(int maxchar, const char *fmt, const char *defstr, ...) {
Fl_Message msg("?");
if (maxchar < 0) maxchar = 0;
va_list ap;
va_start(ap, defstr);
- const char *r = msg.input_innards(fmt, ap, defstr, FL_NORMAL_INPUT, maxchar);
+ const char *r = msg.input_innards(fmt, ap, defstr, FL_NORMAL_INPUT, maxchar, true);
va_end(ap);
- return Fl_String(r);
+ return (r == NULL) ? std::string("") : std::string(r);
}
+#endif // FLTK_USE_STD
+
/** Shows an input dialog displaying the \p fmt message with variable arguments.
Like fl_input() except the input text is not shown,
@@ -401,18 +433,44 @@ const char *fl_password(const char *fmt, const char *defstr, ...) {
Fl_Message msg("?");
va_list ap;
va_start(ap, defstr);
- const char *r = msg.input_innards(fmt, ap, defstr, FL_SECRET_INPUT);
+ const char *r = msg.input_innards(fmt, ap, defstr, FL_SECRET_INPUT, 0, false);
+ va_end(ap);
+ return r;
+}
+
+/** Shows an input dialog displaying the \p fmt message with variable arguments.
+
+ Like fl_input() except the input text is not shown,
+ '*' or similar replacement characters are displayed instead.
+
+ \code #include <FL/fl_ask.H> \endcode
+
+ \param[in] maxchar input lenght limit in chars, 0 = no limit
+ \param[in] fmt can be used as an sprintf-like format and variables for the message text
+ \param[in] defstr defines the default returned string if no text is entered
+
+ \return the user string input if OK was pushed
+ \retval NULL if Cancel was pushed or the window was closed by the user
+*/
+const char *fl_password(int maxchar, const char *fmt, const char *defstr, ...) {
+ Fl_Message msg("?");
+ if (maxchar < 0) maxchar = 0;
+ va_list ap;
+ va_start(ap, defstr);
+ const char *r = msg.input_innards(fmt, ap, defstr, FL_SECRET_INPUT, maxchar, false);
va_end(ap);
return r;
}
+#if (FLTK_USE_STD)
+
/** Shows an input dialog displaying the \p fmt message with variable arguments.
Like fl_input_str() except the input text is not shown,
'*' or similar replacement characters are displayed instead.
- Other than the deprecated fl_password() method w/o the \p maxchar argument, this
- one returns the string in an Fl_String object that must be released after use.
+ Other than the fl_password() method w/o the \p maxchar argument, this one
+ returns the string in an std::string object that must be released after use.
This can be a local/automatic variable.
For an example see fl_input_str()
@@ -429,31 +487,33 @@ const char *fl_password(const char *fmt, const char *defstr, ...) {
\since 1.4.0
*/
-Fl_String fl_password_str(int &ret, int maxchar, const char *fmt, const char *defstr, ...) {
+std::string fl_password_str(int &ret, int maxchar, const char *fmt, const char *defstr, ...) {
Fl_Message msg("?");
if (maxchar < 0) maxchar = 0;
va_list ap;
va_start(ap, defstr);
- const char *r = msg.input_innards(fmt, ap, defstr, FL_SECRET_INPUT, maxchar);
+ const char *r = msg.input_innards(fmt, ap, defstr, FL_SECRET_INPUT, maxchar, true);
va_end(ap);
ret = (r == NULL) ? -1 : 0;
- return Fl_String(r);
+ return (r == NULL) ? std::string("") : std::string(r);
}
/** Shows an input dialog displaying the \p fmt message with variable arguments.
\note No information is given if the user canceled the dialog or clicked OK.
\see fl_password_str(int &ret, int maxchar, const char *label, const char *deflt = 0, ...)
*/
-Fl_String fl_password_str(int maxchar, const char *fmt, const char *defstr, ...) {
+std::string fl_password_str(int maxchar, const char *fmt, const char *defstr, ...) {
Fl_Message msg("?");
if (maxchar < 0) maxchar = 0;
va_list ap;
va_start(ap, defstr);
- const char *r = msg.input_innards(fmt, ap, defstr, FL_SECRET_INPUT, maxchar);
+ const char *r = msg.input_innards(fmt, ap, defstr, FL_SECRET_INPUT, maxchar, true);
va_end(ap);
- return Fl_String(r);
+ return (r == NULL) ? std::string("") : std::string(r);
}
+#endif // FLTK_USE_STD
+
/** Sets the preferred position for the message box used in
many common dialogs like fl_message(), fl_alert(),
diff --git a/src/makedepend b/src/makedepend
index 0f973b847..bbb4fe04d 100644
--- a/src/makedepend
+++ b/src/makedepend
@@ -205,7 +205,6 @@ drivers/Posix/Fl_Posix_Printer_Driver.o: ../FL/Fl_Repeat_Button.H
drivers/Posix/Fl_Posix_Printer_Driver.o: ../FL/Fl_Return_Button.H
drivers/Posix/Fl_Posix_Printer_Driver.o: ../FL/Fl_Round_Button.H
drivers/Posix/Fl_Posix_Printer_Driver.o: ../FL/Fl_Spinner.H
-drivers/Posix/Fl_Posix_Printer_Driver.o: ../FL/Fl_String.H
drivers/Posix/Fl_Posix_Printer_Driver.o: ../FL/fl_string_functions.h
drivers/Posix/Fl_Posix_Printer_Driver.o: ../FL/fl_types.h
drivers/Posix/Fl_Posix_Printer_Driver.o: ../FL/fl_utf8.h
@@ -276,7 +275,6 @@ drivers/PostScript/Fl_PostScript.o: ../FL/Fl_PostScript.H
drivers/PostScript/Fl_PostScript.o: ../FL/Fl_Preferences.H
drivers/PostScript/Fl_PostScript.o: ../FL/Fl_Return_Button.H
drivers/PostScript/Fl_PostScript.o: ../FL/Fl_Shared_Image.H
-drivers/PostScript/Fl_PostScript.o: ../FL/Fl_String.H
drivers/PostScript/Fl_PostScript.o: ../FL/fl_string_functions.h
drivers/PostScript/Fl_PostScript.o: ../FL/Fl_Tile.H
drivers/PostScript/Fl_PostScript.o: ../FL/fl_types.h
@@ -531,7 +529,6 @@ drivers/X11/Fl_X11_Screen_Driver.o: ../FL/Fl_RGB_Image.H
drivers/X11/Fl_X11_Screen_Driver.o: ../FL/Fl_Scrollbar.H
drivers/X11/Fl_X11_Screen_Driver.o: ../FL/Fl_Shared_Image.H
drivers/X11/Fl_X11_Screen_Driver.o: ../FL/Fl_Slider.H
-drivers/X11/Fl_X11_Screen_Driver.o: ../FL/Fl_String.H
drivers/X11/Fl_X11_Screen_Driver.o: ../FL/Fl_Text_Buffer.H
drivers/X11/Fl_X11_Screen_Driver.o: ../FL/Fl_Text_Display.H
drivers/X11/Fl_X11_Screen_Driver.o: ../FL/Fl_Text_Editor.H
@@ -580,7 +577,6 @@ drivers/X11/Fl_X11_Window_Driver.o: ../FL/Fl_RGB_Image.H
drivers/X11/Fl_X11_Window_Driver.o: ../FL/Fl_Scrollbar.H
drivers/X11/Fl_X11_Window_Driver.o: ../FL/Fl_Shared_Image.H
drivers/X11/Fl_X11_Window_Driver.o: ../FL/Fl_Slider.H
-drivers/X11/Fl_X11_Window_Driver.o: ../FL/Fl_String.H
drivers/X11/Fl_X11_Window_Driver.o: ../FL/Fl_Text_Buffer.H
drivers/X11/Fl_X11_Window_Driver.o: ../FL/Fl_Text_Display.H
drivers/X11/Fl_X11_Window_Driver.o: ../FL/Fl_Text_Editor.H
@@ -901,7 +897,6 @@ filename_absolute.o: ../FL/fl_casts.H
filename_absolute.o: ../FL/fl_config.h
filename_absolute.o: ../FL/Fl_Export.H
filename_absolute.o: ../FL/Fl_Preferences.H
-filename_absolute.o: ../FL/Fl_String.H
filename_absolute.o: ../FL/fl_string_functions.h
filename_absolute.o: ../FL/fl_types.h
filename_absolute.o: ../FL/fl_utf8.h
@@ -1147,7 +1142,6 @@ fl_ask.o: ../FL/Fl_Rect.H
fl_ask.o: ../FL/Fl_RGB_Image.H
fl_ask.o: ../FL/Fl_Scrollbar.H
fl_ask.o: ../FL/Fl_Slider.H
-fl_ask.o: ../FL/Fl_String.H
fl_ask.o: ../FL/Fl_Text_Buffer.H
fl_ask.o: ../FL/Fl_Text_Display.H
fl_ask.o: ../FL/Fl_Text_Editor.H
@@ -1815,7 +1809,6 @@ Fl_File_Chooser.o: ../FL/Fl_Menu_Button.H
Fl_File_Chooser.o: ../FL/Fl_Menu_Item.H
Fl_File_Chooser.o: ../FL/Fl_Preferences.H
Fl_File_Chooser.o: ../FL/Fl_Return_Button.H
-Fl_File_Chooser.o: ../FL/Fl_String.H
Fl_File_Chooser.o: ../FL/Fl_Tile.H
Fl_File_Chooser.o: ../FL/fl_types.h
Fl_File_Chooser.o: ../FL/fl_utf8.h
@@ -1854,7 +1847,6 @@ Fl_File_Chooser2.o: ../FL/Fl_Menu_Item.H
Fl_File_Chooser2.o: ../FL/Fl_Preferences.H
Fl_File_Chooser2.o: ../FL/Fl_Return_Button.H
Fl_File_Chooser2.o: ../FL/Fl_Shared_Image.H
-Fl_File_Chooser2.o: ../FL/Fl_String.H
Fl_File_Chooser2.o: ../FL/fl_string_functions.h
Fl_File_Chooser2.o: ../FL/Fl_Tile.H
Fl_File_Chooser2.o: ../FL/fl_types.h
@@ -1896,7 +1888,6 @@ fl_file_dir.o: ../FL/Fl_Menu_Button.H
fl_file_dir.o: ../FL/Fl_Menu_Item.H
fl_file_dir.o: ../FL/Fl_Preferences.H
fl_file_dir.o: ../FL/Fl_Return_Button.H
-fl_file_dir.o: ../FL/Fl_String.H
fl_file_dir.o: ../FL/Fl_Tile.H
fl_file_dir.o: ../FL/fl_types.h
fl_file_dir.o: ../FL/fl_utf8.h
@@ -2305,7 +2296,6 @@ Fl_Help_Dialog.o: ../FL/Fl_RGB_Image.H
Fl_Help_Dialog.o: ../FL/Fl_Scrollbar.H
Fl_Help_Dialog.o: ../FL/Fl_Shared_Image.H
Fl_Help_Dialog.o: ../FL/Fl_Slider.H
-Fl_Help_Dialog.o: ../FL/Fl_String.H
Fl_Help_Dialog.o: ../FL/fl_types.h
Fl_Help_Dialog.o: ../FL/fl_utf8.h
Fl_Help_Dialog.o: ../FL/Fl_Valuator.H
@@ -2329,7 +2319,6 @@ Fl_Help_View.o: ../FL/Fl_Graphics_Driver.H
Fl_Help_View.o: ../FL/Fl_Group.H
Fl_Help_View.o: ../FL/Fl_Help_View.H
Fl_Help_View.o: ../FL/Fl_Image.H
-Fl_Help_View.o: ../FL/Fl_Int_Vector.H
Fl_Help_View.o: ../FL/Fl_Pixmap.H
Fl_Help_View.o: ../FL/Fl_Plugin.H
Fl_Help_View.o: ../FL/Fl_Preferences.H
@@ -2338,7 +2327,6 @@ Fl_Help_View.o: ../FL/Fl_RGB_Image.H
Fl_Help_View.o: ../FL/Fl_Scrollbar.H
Fl_Help_View.o: ../FL/Fl_Shared_Image.H
Fl_Help_View.o: ../FL/Fl_Slider.H
-Fl_Help_View.o: ../FL/Fl_String.H
Fl_Help_View.o: ../FL/fl_string_functions.h
Fl_Help_View.o: ../FL/fl_types.h
Fl_Help_View.o: ../FL/fl_utf8.h
@@ -2347,6 +2335,8 @@ Fl_Help_View.o: ../FL/Fl_Widget.H
Fl_Help_View.o: ../FL/Fl_Window.H
Fl_Help_View.o: ../FL/platform_types.h
Fl_Help_View.o: flstring.h
+Fl_Help_View.o: Fl_Int_Vector.H
+Fl_Help_View.o: Fl_String.H
Fl_ICO_Image.o: ../config.h
Fl_ICO_Image.o: ../FL/Enumerations.H
Fl_ICO_Image.o: ../FL/Fl.H
@@ -2460,7 +2450,6 @@ Fl_Input.o: ../FL/Fl_RGB_Image.H
Fl_Input.o: ../FL/Fl_Scrollbar.H
Fl_Input.o: ../FL/Fl_Secret_Input.H
Fl_Input.o: ../FL/Fl_Slider.H
-Fl_Input.o: ../FL/Fl_String.H
Fl_Input.o: ../FL/Fl_Text_Buffer.H
Fl_Input.o: ../FL/Fl_Text_Display.H
Fl_Input.o: ../FL/Fl_Text_Editor.H
@@ -2498,7 +2487,6 @@ Fl_Input_.o: ../FL/Fl_Rect.H
Fl_Input_.o: ../FL/Fl_RGB_Image.H
Fl_Input_.o: ../FL/Fl_Scrollbar.H
Fl_Input_.o: ../FL/Fl_Slider.H
-Fl_Input_.o: ../FL/Fl_String.H
Fl_Input_.o: ../FL/Fl_Text_Buffer.H
Fl_Input_.o: ../FL/Fl_Text_Display.H
Fl_Input_.o: ../FL/Fl_Text_Editor.H
@@ -2531,7 +2519,7 @@ Fl_Input_Choice.o: ../FL/fl_utf8.h
Fl_Input_Choice.o: ../FL/Fl_Widget.H
Fl_Input_Choice.o: ../FL/platform_types.h
Fl_Int_Vector.o: ../FL/Fl_Export.H
-Fl_Int_Vector.o: ../FL/Fl_Int_Vector.H
+Fl_Int_Vector.o: Fl_Int_Vector.H
Fl_JPEG_Image.o: ../config.h
Fl_JPEG_Image.o: ../FL/Enumerations.H
Fl_JPEG_Image.o: ../FL/Fl.H
@@ -2745,7 +2733,6 @@ Fl_Message.o: ../FL/Fl_Input.H
Fl_Message.o: ../FL/Fl_Input_.H
Fl_Message.o: ../FL/Fl_Return_Button.H
Fl_Message.o: ../FL/Fl_Secret_Input.H
-Fl_Message.o: ../FL/Fl_String.H
Fl_Message.o: ../FL/fl_string_functions.h
Fl_Message.o: ../FL/fl_types.h
Fl_Message.o: ../FL/fl_utf8.h
@@ -2798,7 +2785,6 @@ Fl_Native_File_Chooser.o: ../FL/Fl_Menu_Item.H
Fl_Native_File_Chooser.o: ../FL/Fl_Native_File_Chooser.H
Fl_Native_File_Chooser.o: ../FL/Fl_Preferences.H
Fl_Native_File_Chooser.o: ../FL/Fl_Return_Button.H
-Fl_Native_File_Chooser.o: ../FL/Fl_String.H
Fl_Native_File_Chooser.o: ../FL/Fl_Tile.H
Fl_Native_File_Chooser.o: ../FL/fl_types.h
Fl_Native_File_Chooser.o: ../FL/fl_utf8.h
@@ -2835,7 +2821,6 @@ Fl_Native_File_Chooser_FLTK.o: ../FL/Fl_Menu_Item.H
Fl_Native_File_Chooser_FLTK.o: ../FL/Fl_Native_File_Chooser.H
Fl_Native_File_Chooser_FLTK.o: ../FL/Fl_Preferences.H
Fl_Native_File_Chooser_FLTK.o: ../FL/Fl_Return_Button.H
-Fl_Native_File_Chooser_FLTK.o: ../FL/Fl_String.H
Fl_Native_File_Chooser_FLTK.o: ../FL/Fl_Tile.H
Fl_Native_File_Chooser_FLTK.o: ../FL/fl_types.h
Fl_Native_File_Chooser_FLTK.o: ../FL/fl_utf8.h
@@ -2886,7 +2871,6 @@ Fl_Native_File_Chooser_GTK.o: ../FL/Fl_RGB_Image.H
Fl_Native_File_Chooser_GTK.o: ../FL/Fl_Scrollbar.H
Fl_Native_File_Chooser_GTK.o: ../FL/Fl_Shared_Image.H
Fl_Native_File_Chooser_GTK.o: ../FL/Fl_Slider.H
-Fl_Native_File_Chooser_GTK.o: ../FL/Fl_String.H
Fl_Native_File_Chooser_GTK.o: ../FL/fl_string_functions.h
Fl_Native_File_Chooser_GTK.o: ../FL/Fl_Text_Buffer.H
Fl_Native_File_Chooser_GTK.o: ../FL/Fl_Text_Display.H
@@ -2950,7 +2934,6 @@ Fl_Native_File_Chooser_Kdialog.o: ../FL/Fl_Return_Button.H
Fl_Native_File_Chooser_Kdialog.o: ../FL/Fl_RGB_Image.H
Fl_Native_File_Chooser_Kdialog.o: ../FL/Fl_Scrollbar.H
Fl_Native_File_Chooser_Kdialog.o: ../FL/Fl_Slider.H
-Fl_Native_File_Chooser_Kdialog.o: ../FL/Fl_String.H
Fl_Native_File_Chooser_Kdialog.o: ../FL/Fl_Text_Buffer.H
Fl_Native_File_Chooser_Kdialog.o: ../FL/Fl_Text_Display.H
Fl_Native_File_Chooser_Kdialog.o: ../FL/Fl_Text_Editor.H
@@ -2996,7 +2979,6 @@ Fl_Native_File_Chooser_Zenity.o: ../FL/Fl_Menu_Item.H
Fl_Native_File_Chooser_Zenity.o: ../FL/Fl_Native_File_Chooser.H
Fl_Native_File_Chooser_Zenity.o: ../FL/Fl_Preferences.H
Fl_Native_File_Chooser_Zenity.o: ../FL/Fl_Return_Button.H
-Fl_Native_File_Chooser_Zenity.o: ../FL/Fl_String.H
Fl_Native_File_Chooser_Zenity.o: ../FL/Fl_Tile.H
Fl_Native_File_Chooser_Zenity.o: ../FL/fl_types.h
Fl_Native_File_Chooser_Zenity.o: ../FL/fl_utf8.h
@@ -3244,7 +3226,6 @@ Fl_Preferences.o: ../FL/fl_config.h
Fl_Preferences.o: ../FL/Fl_Export.H
Fl_Preferences.o: ../FL/Fl_Plugin.H
Fl_Preferences.o: ../FL/Fl_Preferences.H
-Fl_Preferences.o: ../FL/Fl_String.H
Fl_Preferences.o: ../FL/fl_string_functions.h
Fl_Preferences.o: ../FL/fl_types.h
Fl_Preferences.o: ../FL/fl_utf8.h
@@ -3734,7 +3715,7 @@ Fl_Spinner.o: ../FL/Fl_Repeat_Button.H
Fl_Spinner.o: ../FL/Fl_Spinner.H
Fl_Spinner.o: ../FL/Fl_Widget.H
Fl_String.o: ../FL/Fl_Export.H
-Fl_String.o: ../FL/Fl_String.H
+Fl_String.o: Fl_String.H
fl_string_functions.o: ../FL/Enumerations.H
fl_string_functions.o: ../FL/filename.H
fl_string_functions.o: ../FL/Fl.H
@@ -3849,7 +3830,6 @@ Fl_Table.o: ../FL/fl_config.h
Fl_Table.o: ../FL/fl_draw.H
Fl_Table.o: ../FL/Fl_Export.H
Fl_Table.o: ../FL/Fl_Group.H
-Fl_Table.o: ../FL/Fl_Int_Vector.H
Fl_Table.o: ../FL/Fl_Scroll.H
Fl_Table.o: ../FL/Fl_Scrollbar.H
Fl_Table.o: ../FL/Fl_Slider.H
@@ -3859,6 +3839,7 @@ Fl_Table.o: ../FL/fl_utf8.h
Fl_Table.o: ../FL/Fl_Valuator.H
Fl_Table.o: ../FL/Fl_Widget.H
Fl_Table.o: ../FL/platform_types.h
+Fl_Table.o: Fl_Int_Vector.H
Fl_Table_Row.o: ../FL/Enumerations.H
Fl_Table_Row.o: ../FL/Fl.H
Fl_Table_Row.o: ../FL/fl_attr.h
@@ -3868,7 +3849,6 @@ Fl_Table_Row.o: ../FL/fl_config.h
Fl_Table_Row.o: ../FL/fl_draw.H
Fl_Table_Row.o: ../FL/Fl_Export.H
Fl_Table_Row.o: ../FL/Fl_Group.H
-Fl_Table_Row.o: ../FL/Fl_Int_Vector.H
Fl_Table_Row.o: ../FL/Fl_Scroll.H
Fl_Table_Row.o: ../FL/Fl_Scrollbar.H
Fl_Table_Row.o: ../FL/Fl_Slider.H
@@ -3907,7 +3887,6 @@ Fl_Text_Buffer.o: ../FL/Fl_Cairo.H
Fl_Text_Buffer.o: ../FL/fl_casts.H
Fl_Text_Buffer.o: ../FL/fl_config.h
Fl_Text_Buffer.o: ../FL/Fl_Export.H
-Fl_Text_Buffer.o: ../FL/Fl_String.H
Fl_Text_Buffer.o: ../FL/fl_string_functions.h
Fl_Text_Buffer.o: ../FL/Fl_Text_Buffer.H
Fl_Text_Buffer.o: ../FL/fl_types.h
@@ -3971,7 +3950,6 @@ Fl_Text_Editor.o: ../FL/Fl_Rect.H
Fl_Text_Editor.o: ../FL/Fl_RGB_Image.H
Fl_Text_Editor.o: ../FL/Fl_Scrollbar.H
Fl_Text_Editor.o: ../FL/Fl_Slider.H
-Fl_Text_Editor.o: ../FL/Fl_String.H
Fl_Text_Editor.o: ../FL/Fl_Text_Buffer.H
Fl_Text_Editor.o: ../FL/Fl_Text_Display.H
Fl_Text_Editor.o: ../FL/Fl_Text_Editor.H
@@ -4490,7 +4468,6 @@ Fl_x.o: ../FL/Fl_RGB_Image.H
Fl_x.o: ../FL/Fl_Scrollbar.H
Fl_x.o: ../FL/Fl_Shared_Image.H
Fl_x.o: ../FL/Fl_Slider.H
-Fl_x.o: ../FL/Fl_String.H
Fl_x.o: ../FL/Fl_Text_Buffer.H
Fl_x.o: ../FL/Fl_Text_Display.H
Fl_x.o: ../FL/Fl_Text_Editor.H
@@ -4595,7 +4572,6 @@ forms_bitmap.o: ../FL/Fl_RGB_Image.H
forms_bitmap.o: ../FL/Fl_Round_Button.H
forms_bitmap.o: ../FL/fl_show_colormap.H
forms_bitmap.o: ../FL/Fl_Slider.H
-forms_bitmap.o: ../FL/Fl_String.H
forms_bitmap.o: ../FL/Fl_Tile.H
forms_bitmap.o: ../FL/Fl_Timer.H
forms_bitmap.o: ../FL/fl_types.h
@@ -4655,7 +4631,6 @@ forms_compatibility.o: ../FL/Fl_RGB_Image.H
forms_compatibility.o: ../FL/Fl_Round_Button.H
forms_compatibility.o: ../FL/fl_show_colormap.H
forms_compatibility.o: ../FL/Fl_Slider.H
-forms_compatibility.o: ../FL/Fl_String.H
forms_compatibility.o: ../FL/Fl_Tile.H
forms_compatibility.o: ../FL/Fl_Timer.H
forms_compatibility.o: ../FL/fl_types.h
@@ -4727,7 +4702,6 @@ forms_fselect.o: ../FL/Fl_RGB_Image.H
forms_fselect.o: ../FL/Fl_Round_Button.H
forms_fselect.o: ../FL/fl_show_colormap.H
forms_fselect.o: ../FL/Fl_Slider.H
-forms_fselect.o: ../FL/Fl_String.H
forms_fselect.o: ../FL/Fl_Tile.H
forms_fselect.o: ../FL/Fl_Timer.H
forms_fselect.o: ../FL/fl_types.h
@@ -4787,7 +4761,6 @@ forms_pixmap.o: ../FL/Fl_RGB_Image.H
forms_pixmap.o: ../FL/Fl_Round_Button.H
forms_pixmap.o: ../FL/fl_show_colormap.H
forms_pixmap.o: ../FL/Fl_Slider.H
-forms_pixmap.o: ../FL/Fl_String.H
forms_pixmap.o: ../FL/Fl_Tile.H
forms_pixmap.o: ../FL/Fl_Timer.H
forms_pixmap.o: ../FL/fl_types.h
@@ -4846,7 +4819,6 @@ forms_timer.o: ../FL/Fl_RGB_Image.H
forms_timer.o: ../FL/Fl_Round_Button.H
forms_timer.o: ../FL/fl_show_colormap.H
forms_timer.o: ../FL/Fl_Slider.H
-forms_timer.o: ../FL/Fl_String.H
forms_timer.o: ../FL/Fl_Tile.H
forms_timer.o: ../FL/Fl_Timer.H
forms_timer.o: ../FL/fl_types.h