w*h interface revisions

git-svn-id: https://svn.wxwidgets.org/svn/wx/wxWidgets/trunk@55892 c3d73ce0-8a6f-49c7-b76d-6d57e0e08775
This commit is contained in:
Francesco Montorsi
2008-09-25 21:31:45 +00:00
parent 674d80a76f
commit e25cd7750c
3 changed files with 640 additions and 546 deletions

View File

@@ -1,33 +1,35 @@
///////////////////////////////////////////////////////////////////////////// /////////////////////////////////////////////////////////////////////////////
// Name: weakref.h // Name: weakref.h
// Purpose: interface of wxWeakRefDynamic<T> // Purpose: interface of wxWeakRefDynamic<T>, wxWeakRef<T>
// Author: wxWidgets team // Author: wxWidgets team
// RCS-ID: $Id$ // RCS-ID: $Id$
// Licence: wxWindows license // Licence: wxWindows license
///////////////////////////////////////////////////////////////////////////// /////////////////////////////////////////////////////////////////////////////
/** /**
@class wxWeakRefDynamic<T>
wxWeakRefDynamic<T> is a template class for weak references that is used in wxWeakRefDynamic<T> is a template class for weak references that is used in
the same way as wxWeakRef<T>. The only difference is that wxWeakRefDynamic the same way as wxWeakRef<T>. The only difference is that wxWeakRefDynamic
defaults to using @c dynamic_cast for establishing the object defaults to using @c dynamic_cast for establishing the object reference
reference (while wxWeakRef defaults to @c static_cast). (while wxWeakRef defaults to @c static_cast).
So, wxWeakRef will detect a type mismatch during compile time and will So, wxWeakRef will detect a type mismatch during compile time and will
have a little better run-time performance. The role of wxWeakRefDynamic have a little better run-time performance. The role of wxWeakRefDynamic
is to handle objects which derived type one does not know. is to handle objects which derived type one does not know.
@note wxWeakRef<T> selects an implementation based on the static type @note wxWeakRef<T> selects an implementation based on the static type of T.
of T. If T does not have wxTrackable statically, it defaults to to a mixed- If T does not have wxTrackable statically, it defaults to to a mixed-
mode operation, where it uses @c dynamic_cast as the last measure (if mode operation, where it uses @c dynamic_cast as the last measure
available from the compiler and enabled when building wxWidgets). (if available from the compiler and enabled when building wxWidgets).
For general cases, wxWeakRef<T> is the better choice. For general cases, wxWeakRef<T> is the better choice.
For API documentation, see: wxWeakRef<T> For API documentation, see: wxWeakRef<T>.
@library{wxcore} @nolibrary
@category{FIXME} @category{misc}
*/ */
template<typename T> template<typename T>
class wxWeakRefDynamic<T> class wxWeakRefDynamic<T>
@@ -39,12 +41,12 @@ public:
/** /**
@class wxWeakRef<T>
wxWeakRef is a template class for weak references to wxWidgets objects, wxWeakRef<T> is a template class for weak references to wxWidgets objects,
such as wxEvtHandler, wxWindow and such as wxEvtHandler, wxWindow and wxObject.
wxObject. A weak reference behaves much like an ordinary A weak reference behaves much like an ordinary pointer, but when the object
pointer, but when the object pointed is destroyed, the weak reference is pointed is destroyed, the weak reference is automatically reset to a @NULL pointer.
automatically reset to a @NULL pointer.
wxWeakRef<T> can be used whenever one must keep a pointer to an object wxWeakRef<T> can be used whenever one must keep a pointer to an object
that one does not directly own, and that may be destroyed before the object that one does not directly own, and that may be destroyed before the object
@@ -53,32 +55,33 @@ public:
wxWeakRef<T> is a small object and the mechanism behind it is fast wxWeakRef<T> is a small object and the mechanism behind it is fast
(@b O(1)). So the overall cost of using it is small. (@b O(1)). So the overall cost of using it is small.
Example Example:
@code @code
wxWindow *wnd = new wxWindow( parent, wxID_ANY, "wxWindow" ); wxWindow *wnd = new wxWindow( parent, wxID_ANY, "wxWindow" );
wxWeakRef<wxWindow> wr = wnd; wxWeakRef<wxWindow> wr = wnd;
wxWindowRef wr2 = wnd; // Same as above, but using a typedef wxWindowRef wr2 = wnd; // Same as above, but using a typedef
// Do things with window // Do things with window
wnd->Show( true ); wnd->Show( true );
// Weak ref is used like an ordinary pointer // Weak ref is used like an ordinary pointer
wr->Show( false ); wr->Show( false );
wnd->Destroy(); wnd->Destroy();
// Now the weak ref has been reset, so we don't risk accessing // Now the weak ref has been reset, so we don't risk accessing
// a dangling pointer: // a dangling pointer:
wxASSERT( wr==NULL ); wxASSERT( wr==NULL );
@endcode @endcode
wxWeakRef<T> works for any objects that are derived from wxTrackable. By default, wxWeakRef<T> works for any objects that are derived from wxTrackable.
wxEvtHandler and wxWindow derive from wxTrackable. However, wxObject does not, so By default, wxEvtHandler and wxWindow derive from wxTrackable.
types like wxFont and wxColour are not trackable. The example below shows how to However, wxObject does not, so types like wxFont and wxColour are not
create a wxObject derived class that is trackable: trackable. The example below shows how to create a wxObject derived class
that is trackable:
@code @code
class wxMyTrackableObject : public wxObject, public wxTrackable class wxMyTrackableObject : public wxObject, public wxTrackable
{ {
// ... other members here // ... other members here
}; };
@endcode @endcode
The following types of weak references are predefined: The following types of weak references are predefined:
@@ -88,14 +91,13 @@ public:
typedef wxWeakRef<wxWindow> wxWindowRef; typedef wxWeakRef<wxWindow> wxWindowRef;
@endcode @endcode
@nolibrary
@library{wxbase} @category{misc}
@category{FIXME}
@see wxSharedPtr<T>, wxScopedPtr<T> @see wxSharedPtr<T>, wxScopedPtr<T>
*/ */
template<typename T> template<typename T>
class wxWeakRef<T> class wxWeakRef<T> : public wxTrackerNode
{ {
public: public:
/** /**
@@ -107,7 +109,7 @@ public:
Copy constructor. Copy constructor.
*/ */
wxWeakRef(const wxWeakRef<T>& wr); wxWeakRef(const wxWeakRef<T>& wr);
/** /**
Destructor. Destructor.
*/ */
@@ -115,8 +117,8 @@ public:
/** /**
Called when the tracked object is destroyed. Be default sets Called when the tracked object is destroyed. Be default sets
internal pointer to @NULL. You need to call this method if internal pointer to @NULL.
you override it. You need to call this method if you override it.
*/ */
virtual void OnObjectDestroy(); virtual void OnObjectDestroy();
@@ -137,21 +139,21 @@ public:
T* operator =(wxWeakRef<T>& wr); T* operator =(wxWeakRef<T>& wr);
/** /**
Implicit conversion to T*. Returns pointer to the tracked Implicit conversion to T*.
object or @NULL. Returns pointer to the tracked object or @NULL.
*/ */
T* operator*() const; T* operator*() const;
/** /**
Returns a reference to the tracked object. If the internal pointer is @NULL Returns a reference to the tracked object.
this method will cause an assert in debug mode. If the internal pointer is @NULL this method will cause an assert in debug mode.
*/ */
T operator*() const; T& operator*() const;
/** /**
Smart pointer member access. Returns a pointer to the Smart pointer member access.
tracked object. If the internal pointer is @NULL this Returns a pointer to the tracked object.
method will cause an assert in debug mode. If the internal pointer is @NULL this method will cause an assert in debug mode.
*/ */
T* operator-(); T* operator-();

View File

@@ -9,8 +9,8 @@
/** /**
@class wxTempFileOutputStream @class wxTempFileOutputStream
wxTempFileOutputStream is an output stream based on wxTempFile. It wxTempFileOutputStream is an output stream based on wxTempFile.
provides a relatively safe way to replace the contents of the It provides a relatively safe way to replace the contents of the
existing file. existing file.
@library{wxbase} @library{wxbase}
@@ -23,18 +23,19 @@ class wxTempFileOutputStream : public wxOutputStream
public: public:
/** /**
Associates wxTempFileOutputStream with the file to be replaced and opens it. Associates wxTempFileOutputStream with the file to be replaced and opens it.
You should use You should use wxStreamBase::IsOk() to verify if the constructor succeeded.
wxStreamBase::IsOk to verify if the constructor succeeded.
Call Commit() or wxOutputStream::Close to Call Commit() or wxOutputStream::Close() to replace the old file and close
replace the old file and close this one. Calling Discard() this one. Calling Discard() (or allowing the destructor to do it) will
(or allowing the destructor to do it) will discard the changes. discard the changes.
*/ */
wxTempFileOutputStream(const wxString& fileName); wxTempFileOutputStream(const wxString& fileName);
/** /**
Validate changes: deletes the old file of the given name and renames the new Validate changes: deletes the old file of the given name and renames the new
file to the old name. Returns @true if both actions succeeded. If @false is file to the old name. Returns @true if both actions succeeded.
returned it may unfortunately mean two quite different things: either that
If @false is returned it may unfortunately mean two quite different things: either that
either the old file couldn't be deleted or that the new file couldn't be renamed either the old file couldn't be deleted or that the new file couldn't be renamed
to the old name. to the old name.
*/ */
@@ -52,14 +53,12 @@ public:
/** /**
@class wxFFileOutputStream @class wxFFileOutputStream
This class represents data written to a file. There are actually This class represents data written to a file.
two such groups of classes: this one is based on wxFFile There are actually two such groups of classes: this one is based on wxFFile
whereas wxFileInputStream is based in whereas wxFileInputStream is based in the wxFile class.
the wxFile class.
Note that wxOutputStream::SeekO Note that wxOutputStream::SeekO() can seek beyond the end of the stream
can seek beyond the end of the stream (file) and will thus not return (file) and will thus not return ::wxInvalidOffset for that.
@e wxInvalidOffset for that.
@library{wxbase} @library{wxbase}
@category{streams} @category{streams}
@@ -69,15 +68,21 @@ public:
class wxFFileOutputStream : public wxOutputStream class wxFFileOutputStream : public wxOutputStream
{ {
public: public:
//@{
/** /**
Initializes a file stream in write-only mode using the file descriptor @e fp. Initializes a file stream in write-only mode using the file descriptor @e fp.
*/ */
wxFFileOutputStream(const wxString& filename, wxFFileOutputStream(const wxString& filename,
const wxString& mode = "wb"); const wxString& mode = "w+b");
/**
Initializes a file stream in write-only mode using the file I/O object file.
*/
wxFFileOutputStream(wxFFile& file); wxFFileOutputStream(wxFFile& file);
/**
Initializes a file stream in write-only mode using the file descriptor fp.
*/
wxFFileOutputStream(FILE* fp); wxFFileOutputStream(FILE* fp);
//@}
/** /**
Destructor. Destructor.
@@ -95,14 +100,12 @@ public:
/** /**
@class wxFileOutputStream @class wxFileOutputStream
This class represents data written to a file. There are actually This class represents data written to a file.
two such groups of classes: this one is based on wxFile There are actually two such groups of classes: this one is based on wxFile
whereas wxFFileInputStream is based in whereas wxFFileInputStream is based in the wxFFile class.
the wxFFile class.
Note that wxOutputStream::SeekO Note that wxOutputStream::SeekO() can seek beyond the end of the stream
can seek beyond the end of the stream (file) and will thus not return (file) and will thus not return ::wxInvalidOffset for that.
@e wxInvalidOffset for that.
@library{wxbase} @library{wxbase}
@category{streams} @category{streams}
@@ -112,14 +115,20 @@ public:
class wxFileOutputStream : public wxOutputStream class wxFileOutputStream : public wxOutputStream
{ {
public: public:
//@{ /**
Creates a new file with ofilename name and initializes the stream in write-only mode.
*/
wxFileOutputStream(const wxString& ofileName);
/**
Initializes a file stream in write-only mode using the file I/O object file.
*/
wxFileOutputStream(wxFile& file);
/** /**
Initializes a file stream in write-only mode using the file descriptor @e fd. Initializes a file stream in write-only mode using the file descriptor @e fd.
*/ */
wxFileOutputStream(const wxString& ofileName);
wxFileOutputStream(wxFile& file);
wxFileOutputStream(int fd); wxFileOutputStream(int fd);
//@}
/** /**
Destructor. Destructor.
@@ -137,14 +146,12 @@ public:
/** /**
@class wxFileInputStream @class wxFileInputStream
This class represents data read in from a file. There are actually This class represents data read in from a file.
two such groups of classes: this one is based on wxFile There are actually two such groups of classes: this one is based on wxFile
whereas wxFFileInputStream is based in whereas wxFFileInputStream is based in the wxFFile class.
the wxFFile class.
Note that wxInputStream::SeekI Note that wxInputStream::SeekI() can seek beyond the end of the stream (file)
can seek beyond the end of the stream (file) and will thus not return and will thus not return ::wxInvalidOffset for that.
@e wxInvalidOffset for that.
@library{wxbase} @library{wxbase}
@category{streams} @category{streams}
@@ -154,14 +161,20 @@ public:
class wxFileInputStream : public wxInputStream class wxFileInputStream : public wxInputStream
{ {
public: public:
//@{ /**
Opens the specified file using its ifilename name in read-only mode.
*/
wxFileInputStream(const wxString& ifileName);
/**
Initializes a file stream in read-only mode using the file I/O object file.
*/
wxFileInputStream(wxFile& file);
/** /**
Initializes a file stream in read-only mode using the specified file descriptor. Initializes a file stream in read-only mode using the specified file descriptor.
*/ */
wxFileInputStream(const wxString& ifileName);
wxFileInputStream(wxFile& file);
wxFileInputStream(int fd); wxFileInputStream(int fd);
//@}
/** /**
Destructor. Destructor.
@@ -179,14 +192,12 @@ public:
/** /**
@class wxFFileInputStream @class wxFFileInputStream
This class represents data read in from a file. There are actually This class represents data read in from a file.
two such groups of classes: this one is based on wxFFile There are actually two such groups of classes: this one is based on wxFFile
whereas wxFileInputStream is based in whereas wxFileInputStream is based in the wxFile class.
the wxFile class.
Note that wxInputStream::SeekI Note that wxInputStream::SeekI() can seek beyond the end of the stream (file)
can seek beyond the end of the stream (file) and will thus not return and will thus not return ::wxInvalidOffset for that.
@e wxInvalidOffset for that.
@library{wxbase} @library{wxbase}
@category{streams} @category{streams}
@@ -196,16 +207,21 @@ public:
class wxFFileInputStream : public wxInputStream class wxFFileInputStream : public wxInputStream
{ {
public: public:
//@{
/** /**
Initializes a file stream in read-only mode using the specified file pointer @e Opens the specified file using its filename name using the specified mode.
fp.
*/ */
wxFFileInputStream(const wxString& filename, wxFFileInputStream(const wxString& filename,
const wxString& mode = "rb"); const wxString& mode = "rb");
/**
Initializes a file stream in read-only mode using the file I/O object file.
*/
wxFFileInputStream(wxFFile& file); wxFFileInputStream(wxFFile& file);
/**
Initializes a file stream in read-only mode using the specified file pointer @a fp.
*/
wxFFileInputStream(FILE* fp); wxFFileInputStream(FILE* fp);
//@}
/** /**
Destructor. Destructor.
@@ -223,9 +239,10 @@ public:
/** /**
@class wxFFileStream @class wxFFileStream
@todo describe this class.
@library{wxbase} @library{wxbase}
@category{FIXME} @category{streams}
@see wxStreamBuffer @see wxStreamBuffer
*/ */
@@ -234,7 +251,7 @@ class wxFFileStream : public wxFFileOutputStream
public: public:
/** /**
Initializes a new file stream in read-write mode using the specified Initializes a new file stream in read-write mode using the specified
@e iofilename name. @a iofilename name.
*/ */
wxFFileStream(const wxString& iofileName, const wxString& mode = "w+b"); wxFFileStream(const wxString& iofileName, const wxString& mode = "w+b");
}; };
@@ -244,9 +261,10 @@ public:
/** /**
@class wxFileStream @class wxFileStream
@todo describe this class.
@library{wxbase} @library{wxbase}
@category{FIXME} @category{streams}
@see wxStreamBuffer @see wxStreamBuffer
*/ */
@@ -255,7 +273,7 @@ class wxFileStream : public wxFileOutputStream
public: public:
/** /**
Initializes a new file stream in read-write mode using the specified Initializes a new file stream in read-write mode using the specified
@e iofilename name. @a iofilename name.
*/ */
wxFileStream(const wxString& iofileName); wxFileStream(const wxString& iofileName);
}; };

File diff suppressed because it is too large Load Diff