inline void SetBorderWrap(bool on) { m_wrap = on; };
// cells
- inline bool IsAlive(int i, int j) const;
- inline bool IsAlive(Cell c) const;
- inline int GetX(Cell c) const;
- inline int GetY(Cell c) const;
+ bool IsAlive(int i, int j) const;
+ bool IsAlive(Cell c) const;
+ int GetX(Cell c) const;
+ int GetY(Cell c) const;
const CellArray* GetCells() const { return &m_cells; };
const CellArray* GetChangedCells() const { return &m_changed; };
</tr>
</table>
+<H3>January 14th, 2000</H3><P>
+
+<ul>
+<li>A 2.1.12 release is not far off.
+<li>Mumit Khan of Mingw32 fame has been testing wxWindows against Mingw32,
+to eliminate some bugs in both products and get wxWindows compilation as a DLL working
+for Mingw32.
+<li>Vadim has added his wxDateTime and wxCalendarCtrl classes and samples to the CVS archive.
+<li>TIFF support has been added, and wxImage speeded up.
+<li>Guillermo Rodriguez Garcia has added a new Game of Life demo.
+<li>The DDE sample now works in socket mode, at last.
+<li>Vadim has got clipboard copy and paste working for metafiles, by adding an enhanced
+metafile class.
+<li>The wxWindows web site is now hosted on SourceGear's server, with a bug tracker and
+other facilities to follow shortly.
+</ul>
+
+
<H3><a name="release2_1_11">November 9th, 1999</a></H3><P>
<a href="download.htm" target=wxmain>wxWindows 2.1.11</a> is now available for Windows, Motif and GTK.
class WXDLLEXPORT wxCalendarDateAttr
{
+protected:
+ // This has to be before the use of Init(), for MSVC++ 1.5
+ void Init(wxCalendarDateBorder border = wxCAL_BORDER_NONE)
+ {
+ m_border = border;
+ m_holiday = FALSE;
+ }
+
public:
// ctors
wxCalendarDateAttr() { Init(); }
const wxFont& GetFont() const { return m_font; }
wxCalendarDateBorder GetBorder() const { return m_border; }
-protected:
- void Init(wxCalendarDateBorder border = wxCAL_BORDER_NONE)
- {
- m_border = border;
- m_holiday = FALSE;
- }
-
private:
wxColour m_colText,
m_colBack,
# ifdef __BORLANDC__
# ifdef __WIN32__
-# define CASTWNDPROC
+ typedef int (pascal * WndProcCast) ();
+# define CASTWNDPROC (WndProcCast)
+// # define CASTWNDPROC
# else
typedef int (pascal * WndProcCast) ();
# define CASTWNDPROC (WndProcCast)
virtual bool Initialize(void);
virtual wxPropertyListPanel *OnCreatePanel(wxFrame *parent, wxPropertyListView *v);
inline virtual wxPropertyListPanel *GetPropertyPanel(void) const { return m_propertyPanel; }
+ inline wxPropertyListView* GetView() const { return m_view; }
private:
wxPropertyListView* m_view;
private:
wxDialUpManager *m_dial;
- DECLARE_EVENT_TABLE();
+ DECLARE_EVENT_TABLE()
};
// Define a new frame type: this is going to be our main frame
wxFont guiFont = settings.GetSystemFont(wxSYS_DEFAULT_GUI_FONT);
#ifdef __WXMSW__
- wxFont *boringFont = wxTheFontList->FindOrCreateFont(guiFont.GetPointSize(), wxMODERN, wxNORMAL, wxNORMAL, FALSE, "Courier New");
+ wxFont *boringFont = wxTheFontList->FindOrCreateFont(guiFont.GetPointSize()+1, wxMODERN, wxNORMAL, wxNORMAL, FALSE, "Courier New");
#else
wxFont *boringFont = wxTheFontList->FindOrCreateFont(guiFont.GetPointSize(), wxTELETYPE, wxNORMAL, wxNORMAL);
#endif
{
if (!bmp.Ok())
return;
-
- bool needsPixelCopy = false ;
- bool isPrinter = false ;
+
+ bool needsPixelCopy = FALSE ;
+ bool isPrinter = FALSE ;
if (IsKindOf(CLASSINFO(wxPrinterDC)) )
{
- isPrinter = true ;
- if ( ::GetDeviceCaps((HDC) m_hDC, RASTERCAPS) & RC_STRETCHDIB )
+ isPrinter = TRUE ;
+ if ( ::GetDeviceCaps((HDC) m_hDC, RASTERCAPS) & RC_STRETCHDIB )
{
- }
+ }
else
{
- needsPixelCopy = true ;
+ needsPixelCopy = TRUE ;
}
- }
+ }
// If we're not drawing transparently, and not drawing to a printer,
// optimize this function to use Windows functions.
if (!useMask && !needsPixelCopy)
{
- if ( isPrinter )
- {
- BITMAPINFO *info = (BITMAPINFO *) malloc( sizeof( BITMAPINFOHEADER ) + 256 * sizeof(RGBQUAD ) ) ;
- int iBitsSize = ((bmp.GetWidth() + 3 ) & ~3 ) * bmp.GetHeight() ;
-
- void* bits = malloc( iBitsSize ) ;
-
- memset( info , 0 , sizeof( BITMAPINFOHEADER ) ) ;
-
- info->bmiHeader.biSize = sizeof( BITMAPINFOHEADER ) ;
- info->bmiHeader.biWidth = bmp.GetWidth() ;
- info->bmiHeader.biHeight = bmp.GetHeight() ;
- info->bmiHeader.biPlanes = 1 ;
- info->bmiHeader.biBitCount = 8 ;
- info->bmiHeader.biCompression = BI_RGB ;
-
- HDC display = GetDC( NULL ) ;
- if ( GetDIBits( display , (HBITMAP) bmp.GetHBITMAP( ) , 0 , bmp.GetHeight() , bits , info , DIB_RGB_COLORS ) )
- {
- StretchDIBits( (HDC) m_hDC,
- x, y, bmp.GetWidth(), bmp.GetHeight() ,
- 0 , 0 ,bmp.GetWidth(), bmp.GetHeight() ,
- bits , info , DIB_RGB_COLORS , SRCCOPY ) ;
- }
- ReleaseDC( NULL , display ) ;
- free ( bits ) ;
- free( info ) ;
- }
- else
- {
- HDC cdc = GetHdc();
- HDC memdc = ::CreateCompatibleDC( cdc );
- HBITMAP hbitmap = (HBITMAP) bmp.GetHBITMAP( );
-
- wxASSERT_MSG( hbitmap, wxT("bitmap is ok but HBITMAP is NULL?") );
-
- ::SelectObject( memdc, hbitmap );
- ::BitBlt( cdc, x, y, bmp.GetWidth(), bmp.GetHeight(), memdc, 0, 0, SRCCOPY);
- ::DeleteDC( memdc );
+ if ( isPrinter )
+ {
+ BITMAPINFO *info = (BITMAPINFO *) malloc( sizeof( BITMAPINFOHEADER ) + 256 * sizeof(RGBQUAD ) ) ;
+ int iBitsSize = ((bmp.GetWidth() + 3 ) & ~3 ) * bmp.GetHeight() ;
+
+ void* bits = malloc( iBitsSize ) ;
+
+ memset( info , 0 , sizeof( BITMAPINFOHEADER ) ) ;
+
+ info->bmiHeader.biSize = sizeof( BITMAPINFOHEADER ) ;
+ info->bmiHeader.biWidth = bmp.GetWidth() ;
+ info->bmiHeader.biHeight = bmp.GetHeight() ;
+ info->bmiHeader.biPlanes = 1 ;
+ info->bmiHeader.biBitCount = 8 ;
+ info->bmiHeader.biCompression = BI_RGB ;
+
+ HDC display = GetDC( NULL ) ;
+ if ( GetDIBits( display , (HBITMAP) bmp.GetHBITMAP( ) , 0 , bmp.GetHeight() , bits , info , DIB_RGB_COLORS ) )
+ {
+ StretchDIBits( (HDC) m_hDC,
+ x, y, bmp.GetWidth(), bmp.GetHeight() ,
+ 0 , 0 ,bmp.GetWidth(), bmp.GetHeight() ,
+ bits , info , DIB_RGB_COLORS , SRCCOPY ) ;
+ }
+ ReleaseDC( NULL , display ) ;
+ free ( bits ) ;
+ free( info ) ;
+ }
+ else
+ {
+ HDC cdc = GetHdc();
+ HDC memdc = ::CreateCompatibleDC( cdc );
+ HBITMAP hbitmap = (HBITMAP) bmp.GetHBITMAP( );
+
+ wxASSERT_MSG( hbitmap, wxT("bitmap is ok but HBITMAP is NULL?") );
+
+ ::SelectObject( memdc, hbitmap );
+ ::BitBlt( cdc, x, y, bmp.GetWidth(), bmp.GetHeight(), memdc, 0, 0, SRCCOPY);
+ ::DeleteDC( memdc );
}
}
else
// Rather than reproduce wxDC::Blit, let's do it at the wxWin API level
wxMemoryDC memDC;
memDC.SelectObject(bmp);
-
+
/* Not sure if we need this. The mask should leave the
* masked areas as per the original background of this DC.
*/
memDC.SetBackground(* GetBackground());
memDC.Clear();
*/
-
+
Blit(x, y, bmp.GetWidth(), bmp.GetHeight(), & memDC, 0, 0, wxCOPY, useMask);
-
+
memDC.SelectObject(wxNullBitmap);
}
}
}
}
- return ::CallWindowProc(gs_wndprocToolTip, hwndTT, msg, wParam, lParam);
+ return ::CallWindowProc(CASTWNDPROC gs_wndprocToolTip, hwndTT, msg, wParam, lParam);
}
#endif // wxUSE_TTM_WINDOWFROMPOINT
/////////////////////////////////////////////////////////////////////////////
-// Name: mse/utils.cpp
+// Name: msw/utils.cpp
// Purpose: Various utilities
// Author: Julian Smart
// Modified by:
if ( !theText )
return NULL;
- wxChar *s = copystring(theText);
+ // Not all compilers put a zero at the end of the resource (e.g. BC++ doesn't).
+ // so we need to find the length of the resource.
+ int len = ::SizeofResource(wxGetInstance(), hResource);
+ wxChar *s = new wxChar[len+1];
+ wxStrncpy(s,theText,len);
+ s[len]=0;
+
+ // wxChar *s = copystring(theText);
// Obsolete in WIN32
#ifndef __WIN32__
# End Source File
# Begin Source File
+SOURCE=.\msw\enhmeta.cpp
+# End Source File
+# Begin Source File
+
SOURCE=.\msw\filedlg.cpp
# End Source File
# Begin Source File
# End Source File
# Begin Source File
+SOURCE=.\msw\enhmeta.cpp
+# End Source File
+# Begin Source File
+
SOURCE=.\msw\filedlg.cpp
# End Source File
# Begin Source File
m_resourceAssociations.Put((long)resource, win);
wxNode *node = resource->GetChildren().First();
- while (node)
+ wxNode* node2 = win->GetChildren().First();
+ while (node && node2)
{
wxItemResource *child = (wxItemResource *)node->Data();
+ wxWindow* childWindow = (wxWindow*) node2->Data();
+
+ if (child->GetId() != childWindow->GetId())
+ {
+ wxString msg;
+ msg.Printf("AssociateResource: error when associating child window %ld with resource %ld", child->GetId(), childWindow->GetId());
+ wxMessageBox(msg, "Dialog Editor problem", wxOK);
+ }
+ else if (childWindow->GetName() != child->GetName())
+ {
+ wxString msg;
+ msg.Printf("AssociateResource: error when associating child window with resource %s", child->GetName() ? (const char*) child->GetName() : "(unnamed)");
+ wxMessageBox(msg, "Dialog Editor problem", wxOK);
+ }
+ else
+ {
+ AssociateResource(child, childWindow);
+ }
+
+ // New code to avoid the problem of duplicate ids and names. We simply
+ // traverse the child windows and child resources in parallel,
+ // checking for any mismatch.
+#if 0
wxWindow *childWindow = (wxWindow *)m_resourceAssociations.Get((long)child);
if (!childWindow)
- childWindow = win->FindWindow(child->GetName());
+ // childWindow = win->FindWindow(child->GetName());
+ childWindow = win->FindWindow(child->GetId());
if (childWindow)
AssociateResource(child, childWindow);
else
{
- char buf[200];
- sprintf(buf, "AssociateResource: cannot find child window %s", child->GetName() ? (const char*) child->GetName() : "(unnamed)");
- wxMessageBox(buf, "Dialog Editor problem", wxOK);
+ wxString msg;
+ msg.Printf("AssociateResource: cannot find child window %s", child->GetName() ? (const char*) child->GetName() : "(unnamed)");
+ wxMessageBox(msg, "Dialog Editor problem", wxOK);
}
-
+#endif
node = node->Next();
+ node2 = node2->Next();
}
}
{
item->SetSize(-1, -1, firstW, firstH);
+ int fw = firstW;
+ int fh = firstH;
+
wxItemResource* resource = wxResourceManager::GetCurrentResourceManager()->FindResourceForWindow(item);
wxItemResource* parentResource = wxResourceManager::GetCurrentResourceManager()->FindResourceForWindow(item->GetParent());
if (parentResource->GetResourceStyle() & wxRESOURCE_DIALOG_UNITS)
{
wxSize sz = item->GetParent()->ConvertPixelsToDialog(wxSize(firstW, firstH));
- firstW = sz.x; firstH = sz.y;
+ fw = sz.x; fh = sz.y;
}
- resource->SetSize(resource->GetX(), resource->GetY(), firstW, firstH);
+ resource->SetSize(resource->GetX(), resource->GetY(), fw, fh);
}
}
{
delete m_propSheet;
delete m_propInfo;
- wxPropertyInfo::sm_propertyWindow = NULL;
+ if (wxPropertyInfo::sm_propertyWindow == this)
+ wxPropertyInfo::sm_propertyWindow = NULL;
}
/*
// might be.
bool wxPropertyInfo::Edit(wxWindow *WXUNUSED(parent), const wxString& title)
{
- if (sm_propertyWindow)
- {
+ if (sm_propertyWindow)
+ {
+ wxWindowPropertyInfo* thisProp = (wxWindowPropertyInfo*) this;
+ wxWindowPropertyInfo* oldProp = (wxWindowPropertyInfo*) (((wxDialogEditorPropertyListFrame *) sm_propertyWindow)->GetInfo());
+ if (oldProp->GetWindow() == thisProp->GetWindow())
+ {
sm_propertyWindow->Raise();
return TRUE;
- }
+ }
+ else
+ {
+ int w, h, x, y;
+ sm_propertyWindow->GetSize(& w, & h);
+ sm_propertyWindow->GetPosition(& x, & y);
+
+ wxResourceManager::GetCurrentResourceManager()->GetPropertyWindowSize().width = w;
+ wxResourceManager::GetCurrentResourceManager()->GetPropertyWindowSize().height = h;
+ wxResourceManager::GetCurrentResourceManager()->GetPropertyWindowSize().x = x;
+ wxResourceManager::GetCurrentResourceManager()->GetPropertyWindowSize().y = y;
+
+ // Close the window, so we can create a new one for the different window
+ sm_propertyWindow->Destroy();
+ sm_propertyWindow = (wxDialogEditorPropertyListFrame *) NULL;
+ }
+ }
int width = wxResourceManager::GetCurrentResourceManager()->GetPropertyWindowSize().width;
int height = wxResourceManager::GetCurrentResourceManager()->GetPropertyWindowSize().height;
wxString str(m_propertyWindow->GetName());
resource->SetName(str);
-#if 0
+#if 0 // Why did we comment this out? Possibly because of rounding errors
+ // that will build up as the conversion is repeatedly done.
+ // so only do the conversion when a resize happens.
int x, y, w, h;
if (m_propertyWindow->IsKindOf(CLASSINFO(wxPanel)))
bool wxStaticTextPropertyInfo::SetProperty(wxString& name, wxProperty *property)
{
- return wxItemPropertyInfo::SetProperty(name, property);
+ wxStaticText* itemWindow = (wxStaticText*) m_propertyWindow;
+ if (name == "label")
+ {
+ // Because setting a wxStaticText control's label may change the
+ // size, we must get the size and instantiate the resource immediately.
+ itemWindow->SetLabel(property->GetValue().StringValue());
+ int w, h;
+
+ wxItemResource *resource = wxResourceManager::GetCurrentResourceManager()->FindResourceForWindow(itemWindow);
+
+ m_propertyWindow->GetSize(&w, &h);
+ // m_propertyWindow->GetPosition(&x, &y);
+
+ // We need to convert to dialog units if
+ // the parent resource specifies dialog units.
+ if (m_propertyWindow->GetParent())
+ {
+ wxItemResource* parentResource = wxResourceManager::GetCurrentResourceManager()->FindResourceForWindow(m_propertyWindow->GetParent());
+ if (parentResource->GetResourceStyle() & wxRESOURCE_DIALOG_UNITS)
+ {
+ // wxPoint pt = m_propertyWindow->GetParent()->ConvertPixelsToDialog(wxPoint(x, y));
+ // x = pt.x; y = pt.y;
+ wxSize sz = m_propertyWindow->GetParent()->ConvertPixelsToDialog(wxSize(w, h));
+ w = sz.x; h = sz.y;
+ }
+ }
+ resource->SetSize(resource->GetX(), resource->GetY(), w, h);
+ return TRUE;
+ }
+ else
+ return wxItemPropertyInfo::SetProperty(name, property);
}
void wxStaticTextPropertyInfo::GetPropertyNames(wxStringList& names)
long style = wxDEFAULT_FRAME_STYLE, const wxString& name = "frame");
~wxDialogEditorPropertyListFrame();
+ wxPropertyInfo* GetInfo() const { return m_propInfo; }
+
private:
wxPropertySheet* m_propSheet;
wxPropertyValidatorRegistry m_registry;
// Set the window style
void SetWindowStyle(wxWindow* win, long style, bool set);
+ wxWindow* GetWindow() const { return m_propertyWindow; }
+ wxItemResource* GetResource() const { return m_propertyResource; }
+
protected:
wxWindow* m_propertyWindow;
wxItemResource* m_propertyResource;