(svn r15369) -Codechange: generalise the GUIList a bit so peter can write filters for cargo type, speed and mass ;)

This commit is contained in:
rubidium 2009-02-06 10:38:57 +00:00
parent 6252c74584
commit 2ab6fffccc

View File

@ -32,11 +32,11 @@ struct Filtering {
byte criteria; ///< Filtering criteria byte criteria; ///< Filtering criteria
}; };
template <typename T, typename F = char> template <typename T, typename F = const char*>
class GUIList : public SmallVector<T, 32> { class GUIList : public SmallVector<T, 32> {
public: public:
typedef int CDECL SortFunction(const T*, const T*); typedef int CDECL SortFunction(const T*, const T*);
typedef bool CDECL FilterFunction(const T*, const F*); typedef bool CDECL FilterFunction(const T*, F);
protected: protected:
SortFunction * const *sort_func_list; ///< the sort criteria functions SortFunction * const *sort_func_list; ///< the sort criteria functions
@ -316,7 +316,7 @@ public:
* @param filter_data Additional data passed to the filter function * @param filter_data Additional data passed to the filter function
* @return true if the list has been altered by filtering * @return true if the list has been altered by filtering
*/ */
bool Filter(FilterFunction *decide, const F *filter_data) bool Filter(FilterFunction *decide, F filter_data)
{ {
/* Do not filter if the filter bit is not set */ /* Do not filter if the filter bit is not set */
if (!HASBITS(this->flags, VL_FILTER)) return false; if (!HASBITS(this->flags, VL_FILTER)) return false;
@ -349,7 +349,7 @@ public:
* @param filter_data Additional data passed to the filter function. * @param filter_data Additional data passed to the filter function.
* @return true if the list has been altered by filtering * @return true if the list has been altered by filtering
*/ */
bool Filter(const F *filter_data) bool Filter(F filter_data)
{ {
if (this->filter_func_list == NULL) return false; if (this->filter_func_list == NULL) return false;
return this->Filter(this->filter_func_list[this->filter_type], filter_data); return this->Filter(this->filter_func_list[this->filter_type], filter_data);