From 1209e9dcd7e1e97bedc747d06ba4eea837562158 Mon Sep 17 00:00:00 2001 From: Albrecht Schlosser Date: Sun, 22 Oct 2023 19:30:37 +0200 Subject: Make Fl_String and Fl_Int_Vector private (#789) - add CMake option 'OPTION_USE_STD' - add configure option '--enable-use_std' - move FL/Fl_String.H to src/Fl_String.H - move FL/Fl_Int_Vector.H to src/Fl_Int_Vector.H - remove Fl_String from demo program examples/callbacks.cxx - remove Fl_Int_Vector from public header FL/Fl_Table.H - some methods of Fl_Table are no longer inline - add CMake option OPTION_USE_STD to allow std::string in some selected functions and methods Experimental, may be removed before release: - use either Fl_Int_Vector or std::vector in Fl_Table depending on CMake OPTION_USE_STD or configure --enable-use_std Move all fl_filename* functions that use Fl_String to fluid Main changes in fluid: - add fluid_filename.h and .cxx - include "fluid_filename.h" rather than Update fl_input(), fl_password() and test/ask - add maxchar parameter to fl_input() and fl_password() - fl_input_str() and fl_password_str() are optional and return std::string if enabled (FLTK_USE_STD) --- src/Fl_Help_View.cxx | 4 +- src/Fl_Int_Vector.H | 168 +++++++++++++++++++++++ src/Fl_Int_Vector.cxx | 2 +- src/Fl_Message.cxx | 15 +- src/Fl_Message.h | 6 +- src/Fl_Preferences.cxx | 90 ++++++------ src/Fl_String.H | 133 ++++++++++++++++++ src/Fl_String.cxx | 2 +- src/Fl_Table.cxx | 163 +++++++++++++++++----- src/drivers/Wayland/Fl_Wayland_Screen_Driver.cxx | 2 +- src/filename_absolute.cxx | 56 ++++---- src/fl_ask.cxx | 108 +++++++++++---- src/makedepend | 38 +---- 13 files changed, 621 insertions(+), 166 deletions(-) create mode 100644 src/Fl_Int_Vector.H create mode 100644 src/Fl_String.H (limited to 'src') 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 #include #include -#include -#include +#include "Fl_Int_Vector.H" +#include "Fl_String.H" #include #include 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 + +/** \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 + #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 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 +#include "Fl_Int_Vector.H" #include #include 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 #include +#if (FLTK_USE_STD) +#include +#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 + +// 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 +#include "Fl_String.H" #include #include 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 - #include #include +// 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 #include // memcpy #include // 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; // column widths in pixels + _rowheights = new std::vector; // 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 #include #include -#include +#include "../../Fl_Int_Vector.H" #include "../../print_button.h" #include #include 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 #include -#include #include #include "Fl_System_Driver.H" #include @@ -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) + */ 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 \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 \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 \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 -- cgit v1.2.3