mirror of
https://github.com/amyinspace/MagicSetEditor2.git
synced 2026-06-11 21:27:01 -04:00
Fixed some bugs to make GCC work. I needed to change SimpleValueAction to take the function as a variable as opposed to a template parameter - GCC won't accept pointers from a base class in templates.
git-svn-id: svn://svn.code.sf.net/p/magicseteditor/code/trunk@231 0fc631ac-6414-0410-93d0-97cfa31319b6
This commit is contained in:
+51
-51
@@ -53,35 +53,35 @@
|
||||
#define TYPEOF_CREF(Value) TypeOf<typeid(Value)>::const_reference
|
||||
|
||||
/// Declare typeof magic for a specific type
|
||||
#define DECLARE_TYPEOF(T) \
|
||||
#define DECLARE_TYPEOF(T) \
|
||||
template<> struct TypeOf<typeid(T)> { \
|
||||
typedef T type; \
|
||||
typedef T::iterator iterator; \
|
||||
typedef T::const_iterator const_iterator; \
|
||||
typedef T::reverse_iterator reverse_iterator; \
|
||||
typedef T::const_reverse_iterator const_reverse_iterator; \
|
||||
typedef T::reference reference; \
|
||||
typedef T::const_reference const_reference; \
|
||||
typedef T type; \
|
||||
typedef T::iterator iterator; \
|
||||
typedef T::const_iterator const_iterator; \
|
||||
typedef T::reverse_iterator reverse_iterator; \
|
||||
typedef T::const_reverse_iterator const_reverse_iterator; \
|
||||
typedef T::reference reference; \
|
||||
typedef T::const_reference const_reference; \
|
||||
}
|
||||
/// Declare typeof magic for a specific type that doesn't support reverse iterators
|
||||
#define DECLARE_TYPEOF_NO_REV(T) \
|
||||
#define DECLARE_TYPEOF_NO_REV(T) \
|
||||
template<> struct TypeOf<typeid(T)> { \
|
||||
typedef T type; \
|
||||
typedef T::iterator iterator; \
|
||||
typedef T::const_iterator const_iterator; \
|
||||
typedef T::reference reference; \
|
||||
typedef T::const_reference const_reference; \
|
||||
typedef T type; \
|
||||
typedef T::iterator iterator; \
|
||||
typedef T::const_iterator const_iterator; \
|
||||
typedef T::reference reference; \
|
||||
typedef T::const_reference const_reference; \
|
||||
}
|
||||
/// Declare typeof magic for a specific type, using const iterators
|
||||
#define DECLARE_TYPEOF_CONST(T) \
|
||||
#define DECLARE_TYPEOF_CONST(T) \
|
||||
template<> struct TypeOf<typeid(T)> { \
|
||||
typedef T type; \
|
||||
typedef T::const_iterator iterator; \
|
||||
typedef T::const_iterator const_iterator; \
|
||||
typedef T::const_reverse_iterator reverse_iterator; \
|
||||
typedef T::const_reverse_iterator const_reverse_iterator; \
|
||||
typedef T::const_reference reference; \
|
||||
typedef T::const_reference const_reference; \
|
||||
typedef T type; \
|
||||
typedef T::const_iterator iterator; \
|
||||
typedef T::const_iterator const_iterator; \
|
||||
typedef T::const_reverse_iterator reverse_iterator; \
|
||||
typedef T::const_reverse_iterator const_reverse_iterator; \
|
||||
typedef T::const_reference reference; \
|
||||
typedef T::const_reference const_reference; \
|
||||
}
|
||||
|
||||
/// Declare typeof magic for a specific std::vector type
|
||||
@@ -103,33 +103,33 @@
|
||||
/// Iterate over a collection, using an iterator it of type Type
|
||||
/** Usage: FOR_EACH_IT_T(Type,it,collect) { body-of-loop }
|
||||
*/
|
||||
#define FOR_EACH_IT_T(Type,Iterator,Collection) \
|
||||
for(Type Iterator = Collection.begin() ; \
|
||||
#define FOR_EACH_IT_T(Type,Iterator,Collection) \
|
||||
for(Type Iterator = Collection.begin() ; \
|
||||
Iterator != Collection.end() ; \
|
||||
++Iterator)
|
||||
|
||||
/// Iterate over a collection whos type must be declared with DECLARE_TYPEOF
|
||||
/** Usage: FOR_EACH_IT(it,collect) { body-of-loop }
|
||||
*/
|
||||
#define FOR_EACH_IT(Iterator,Collection) \
|
||||
#define FOR_EACH_IT(Iterator,Collection) \
|
||||
FOR_EACH_IT_T(TYPEOF_IT(Collection), Iterator, Collection)
|
||||
|
||||
/// Iterate over a collection whos type must be declared with DECLARE_TYPEOF
|
||||
/** Uses a const_iterator
|
||||
* Usage: FOR_EACH_IT(it,collect) { body-of-loop }
|
||||
*/
|
||||
#define FOR_EACH_CONST_IT(Iterator,Collection) \
|
||||
#define FOR_EACH_CONST_IT(Iterator,Collection) \
|
||||
FOR_EACH_IT_T(TYPEOF_CIT(Collection), Iterator, Collection)
|
||||
|
||||
/// Iterate over a collection in whos type must be declared with DECLARE_TYPEOF
|
||||
/** Iterates using a reverse_iterator
|
||||
* Usage: FOR_EACH_REVERSE_IT(it,collect) { body-of-loop }
|
||||
*/
|
||||
#define FOR_EACH_REVERSE_IT(Iterator,Collection) \
|
||||
for(TYPEOF_RIT(Collection) \
|
||||
Iterator = Collection.rbegin() ; \
|
||||
Iterator != Collection.rend() ; \
|
||||
++Iterator)
|
||||
#define FOR_EACH_REVERSE_IT(Iterator,Collection) \
|
||||
for(TYPEOF_RIT(Collection) \
|
||||
Iterator = Collection.rbegin() ; \
|
||||
Iterator != Collection.rend() ; \
|
||||
++Iterator)
|
||||
|
||||
// ----------------------------------------------------------------------------- : Looping macros
|
||||
|
||||
@@ -140,32 +140,32 @@
|
||||
* To do this we use a nested for loop that is only executed once, and which is optimized away.
|
||||
* To terminate this loop we need an extra bool, which we set to false after the first iteration.
|
||||
*/
|
||||
#define FOR_EACH_T(TypeIt,TypeElem,Elem,Collection, begin, end) \
|
||||
for(std::pair<TypeIt,bool> Elem##_IT(Collection.begin(), true) ; \
|
||||
Elem##_IT.second && Elem##_IT.first != Collection.end() ; \
|
||||
++Elem##_IT.first, Elem##_IT.second = !Elem##_IT.second) \
|
||||
for(TypeElem Elem = *Elem##_IT.first ; \
|
||||
Elem##_IT.second ; \
|
||||
#define FOR_EACH_T(TypeIt,TypeElem,Elem,Collection, begin, end) \
|
||||
for(std::pair<TypeIt,bool> Elem##_IT(Collection.begin(), true) ; \
|
||||
Elem##_IT.second && Elem##_IT.first != Collection.end() ; \
|
||||
++Elem##_IT.first, Elem##_IT.second = !Elem##_IT.second) \
|
||||
for(TypeElem Elem = *Elem##_IT.first ; \
|
||||
Elem##_IT.second ; \
|
||||
Elem##_IT.second = false)
|
||||
|
||||
/// Iterate over a collection whos type must be declared with DECLARE_TYPEOF
|
||||
/** Usage: FOR_EACH(e,collect) { body-of-loop }
|
||||
*/
|
||||
#define FOR_EACH(Elem,Collection) \
|
||||
#define FOR_EACH(Elem,Collection) \
|
||||
FOR_EACH_T(TYPEOF_IT(Collection), TYPEOF_REF(Collection), Elem, Collection, begin, end)
|
||||
|
||||
/// Iterate over a collection whos type must be declared with DECLARE_TYPEOF
|
||||
/** Uses a const iterator
|
||||
* Usage: FOR_EACH_CONST(e,collect) { body-of-loop }
|
||||
*/
|
||||
#define FOR_EACH_CONST(Elem,Collection) \
|
||||
#define FOR_EACH_CONST(Elem,Collection) \
|
||||
FOR_EACH_T(TYPEOF_CIT(Collection), TYPEOF_CREF(Collection), Elem, Collection, begin, end)
|
||||
|
||||
/// Iterate over a collection whos type must be declared with DECLARE_TYPEOF
|
||||
/** Iterates using a reverse_iterator
|
||||
* Usage: FOR_EACH_REVERSE(e,collect) { body-of-loop }
|
||||
*/
|
||||
#define FOR_EACH_REVERSE(Elem,Collection) \
|
||||
#define FOR_EACH_REVERSE(Elem,Collection) \
|
||||
FOR_EACH_T(TYPEOF_RIT(Collection), TYPEOF_REF(Collection), Elem, Collection, rbegin, rend)
|
||||
|
||||
/// Iterate over a collection whos type must be declared with DECLARE_TYPEOF
|
||||
@@ -181,31 +181,31 @@
|
||||
* Note: This has got to be one of the craziest pieces of code I have ever written :)
|
||||
* It is just an extension of the idea of FOR_EACH_T.
|
||||
*/
|
||||
#define FOR_EACH_2_T(TypeIt1,TypeElem1,Elem1,Coll1,TypeIt2,TypeElem2,Elem2,Coll2) \
|
||||
#define FOR_EACH_2_T(TypeIt1,TypeElem1,Elem1,Coll1,TypeIt2,TypeElem2,Elem2,Coll2) \
|
||||
for(std::pair<std::pair<TypeIt1,TypeIt2>, bool> \
|
||||
Elem1##_IT(make_pair(Coll1.begin(), Coll2.begin()), true) ; \
|
||||
Elem1##_IT.first.first != Coll1.end() && \
|
||||
Elem1##_IT.first.second != Coll2.end() ; \
|
||||
++Elem1##_IT.first.first, ++Elem1##_IT.first.second, \
|
||||
Elem1##_IT.second = true) \
|
||||
Elem1##_IT(make_pair(Coll1.begin(), Coll2.begin()), true) ; \
|
||||
Elem1##_IT.first.first != Coll1.end() && \
|
||||
Elem1##_IT.first.second != Coll2.end() ; \
|
||||
++Elem1##_IT.first.first, ++Elem1##_IT.first.second, \
|
||||
Elem1##_IT.second = true) \
|
||||
for(TypeElem1 Elem1 = *Elem1##_IT.first.first ; \
|
||||
Elem1##_IT.second ; \
|
||||
Elem1##_IT.second = false) \
|
||||
Elem1##_IT.second ; \
|
||||
Elem1##_IT.second = false) \
|
||||
for(TypeElem2 Elem2 = *Elem1##_IT.first.second ; \
|
||||
Elem1##_IT.second ; \
|
||||
Elem1##_IT.second ; \
|
||||
Elem1##_IT.second = false)
|
||||
|
||||
/// Iterate over two collections in parallel, their type must be declared with DECLARE_TYPEOF.
|
||||
/** Usage: FOR_EACH_2(e1,collect1, e2,collect2) { body-of-loop }
|
||||
*/
|
||||
#define FOR_EACH_2(Elem1,Collection1, Elem2,Collection2) \
|
||||
#define FOR_EACH_2(Elem1,Collection1, Elem2,Collection2) \
|
||||
FOR_EACH_2_T(TYPEOF_IT(Collection1), TYPEOF_REF(Collection1), Elem1, Collection1, \
|
||||
TYPEOF_IT(Collection2), TYPEOF_REF(Collection2), Elem2, Collection2)
|
||||
|
||||
/// Iterate over two constants collections in parallel, their type must be declared with DECLARE_TYPEOF.
|
||||
/** Usage: FOR_EACH_2_CONST(e1,collect1, e2,collect2) { body-of-loop }
|
||||
*/
|
||||
#define FOR_EACH_2_CONST(Elem1,Collection1, Elem2,Collection2) \
|
||||
#define FOR_EACH_2_CONST(Elem1,Collection1, Elem2,Collection2) \
|
||||
FOR_EACH_2_T(TYPEOF_CIT(Collection1), TYPEOF_CREF(Collection1), Elem1, Collection1, \
|
||||
TYPEOF_CIT(Collection2), TYPEOF_CREF(Collection2), Elem2, Collection2)
|
||||
|
||||
|
||||
@@ -125,7 +125,7 @@ void Package::saveAs(const String& name, bool removeUnused) {
|
||||
|
||||
// ----------------------------------------------------------------------------- : Package : inside
|
||||
|
||||
/*
|
||||
#if 0
|
||||
/// Class that is a wxZipInputStream over a wxFileInput stream
|
||||
/** Note that wxFileInputStream is also a base class, because it must be constructed first
|
||||
* This class requires a patch in wxWidgets (2.5.4)
|
||||
@@ -136,7 +136,7 @@ void Package::saveAs(const String& name, bool removeUnused) {
|
||||
* It seems that in 2.6.3 this is no longer necessary (TODO: test)
|
||||
*
|
||||
* NOTE: Not used with wx 2.6.3, since it doesn't support seeking
|
||||
* /
|
||||
*/
|
||||
class ZipFileInputStream : private wxFileInputStream, public wxZipInputStream {
|
||||
public:
|
||||
ZipFileInputStream(const String& filename, wxZipEntry* entry)
|
||||
@@ -146,7 +146,7 @@ class ZipFileInputStream : private wxFileInputStream, public wxZipInputStream {
|
||||
OpenEntry(*entry);
|
||||
}
|
||||
};
|
||||
*/
|
||||
#endif
|
||||
|
||||
InputStreamP Package::openIn(const String& file) {
|
||||
if (!file.empty() && file.GetChar(0) == _('/')) {
|
||||
|
||||
@@ -115,6 +115,9 @@ inline String format_string(const String& format, const String& a0) {
|
||||
inline String format_string(const String& format, const String& a0, const String& a1) {
|
||||
return String::Format(format, a0.c_str(), a1.c_str());
|
||||
}
|
||||
inline String format_string(const String& format, const String& a0, const String& a1, const String& a2) {
|
||||
return String::Format(format, a0.c_str(), a1.c_str(), a2.c_str());
|
||||
}
|
||||
|
||||
// ----------------------------------------------------------------------------- : EOF
|
||||
#endif
|
||||
|
||||
@@ -131,14 +131,14 @@ void RotatedDC::DrawText (const String& text, const RealPoint& pos) {
|
||||
draw_resampled_text(dc, r_ext, revX(), revY(), angle, text);
|
||||
} else {
|
||||
RealPoint p_ext = tr(pos);
|
||||
dc.DrawRotatedText(text, p_ext.x, p_ext.y, angle);
|
||||
dc.DrawRotatedText(text, (int) p_ext.x, (int) p_ext.y, angle);
|
||||
}
|
||||
}
|
||||
|
||||
void RotatedDC::DrawBitmap(const Bitmap& bitmap, const RealPoint& pos) {
|
||||
if (angle == 0) {
|
||||
RealPoint p_ext = tr(pos);
|
||||
dc.DrawBitmap(bitmap, p_ext.x, p_ext.y, true);
|
||||
dc.DrawBitmap(bitmap, (int) p_ext.x, (int) p_ext.y, true);
|
||||
} else {
|
||||
DrawImage(bitmap.ConvertToImage(), pos);
|
||||
}
|
||||
@@ -175,7 +175,7 @@ void RotatedDC::SetFont(const wxFont& font) {
|
||||
SetFont(font, font.GetPointSize());
|
||||
}
|
||||
void RotatedDC::SetFont(wxFont font, double size) {
|
||||
font.SetPointSize(trS(size) * (high_quality ? text_scaling : 1));
|
||||
font.SetPointSize((int) (trS(size) * (high_quality ? text_scaling : 1)));
|
||||
dc.SetFont(font);
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user