Tried to fix wxPanel bug (windows now set the panel current focus window on deletion);
undid wxMSW wxRadioBox::SetSize changes that made it resizeable because it just doesn't work (see notes in radiobox.cpp); fixed wxTextCtrl enter processing bug; fixed Dialog Editor wxRadioBox-writing bug git-svn-id: https://svn.wxwidgets.org/svn/wx/wxWidgets/trunk@1641 c3d73ce0-8a6f-49c7-b76d-6d57e0e08775
This commit is contained in:
parent
306dfc2b3d
commit
1f916a19f1
@ -28,6 +28,31 @@ utils/ogl/samples/ogledit/bitmaps/*.gif
|
||||
utils/ogl/samples/ogledit/bitmaps/*.xbm
|
||||
utils/ogl/samples/ogledit/bitmaps/*.xpm
|
||||
|
||||
utils/ogl/samples/studio/*.cpp
|
||||
utils/ogl/samples/studio/*.h
|
||||
utils/ogl/samples/studio/*.rc
|
||||
utils/ogl/samples/studio/*.def
|
||||
utils/ogl/samples/studio/*.xbm
|
||||
utils/ogl/samples/studio/make*.*
|
||||
utils/ogl/samples/studio/Makefile
|
||||
utils/ogl/samples/studio/*.txt
|
||||
utils/ogl/samples/studio/*.ico
|
||||
utils/ogl/samples/studio/*.bmp
|
||||
utils/ogl/samples/studio/*.xpm
|
||||
utils/ogl/samples/studio/*.wxr
|
||||
utils/ogl/samples/studio/bitmaps/*.bmp
|
||||
utils/ogl/samples/studio/bitmaps/*.gif
|
||||
utils/ogl/samples/studio/bitmaps/*.xbm
|
||||
utils/ogl/samples/studio/bitmaps/*.xpm
|
||||
utils/ogl/samples/studio/manual/*.tex
|
||||
utils/ogl/samples/studio/manual/*.ini
|
||||
utils/ogl/samples/studio/manual/*.gif
|
||||
utils/ogl/samples/studio/manual/*.bmp
|
||||
utils/ogl/samples/studio/manual/*.htm
|
||||
utils/ogl/samples/studio/manual/*.hlp
|
||||
utils/ogl/samples/studio/manual/*.cnt
|
||||
utils/ogl/samples/studio/manual/Makefile
|
||||
|
||||
utils/ogl/distrib/*.rsp
|
||||
utils/ogl/distrib/*.bat
|
||||
|
||||
|
@ -70,6 +70,7 @@ public:
|
||||
|
||||
// called by wxWindow whenever it gets focus
|
||||
void SetLastFocus(wxWindow *focus) { m_lastFocus = focus; }
|
||||
wxWindow* GetLastFocus() const { return m_lastFocus; }
|
||||
|
||||
protected:
|
||||
// the child which had the focus last time this panel was activated
|
||||
|
@ -24,7 +24,7 @@
|
||||
|
||||
#include "wx/ioswrap.h"
|
||||
|
||||
class wxProcess;
|
||||
class WXDLLEXPORT wxProcess;
|
||||
|
||||
#ifdef __X__
|
||||
#ifndef __VMS__
|
||||
|
@ -444,7 +444,8 @@ MyPanel::MyPanel( wxFrame *frame, int x, int y, int w, int h )
|
||||
|
||||
panel = new wxPanel(m_notebook);
|
||||
m_textentry = new MyTextCtrl( panel, -1, "Write text here.", wxPoint(10,10), wxSize(320,28),
|
||||
0);//wxTE_PROCESS_ENTER);
|
||||
//0);
|
||||
wxTE_PROCESS_ENTER);
|
||||
(*m_textentry) << " More text."; // this text is appended
|
||||
m_textentry->SetInsertionPoint(0);
|
||||
m_textentry->WriteText("Less text."); // this text is prepended
|
||||
|
@ -1508,6 +1508,14 @@ bool wxWindow::Create( wxWindow *parent, wxWindowID id,
|
||||
|
||||
wxWindow::~wxWindow()
|
||||
{
|
||||
// Remove potential dangling pointer
|
||||
if (GetParent() && GetParent()->IsKindOf(CLASSINFO(wxPanel)))
|
||||
{
|
||||
wxPanel* panel = (wxPanel*) GetParent();
|
||||
if (panel->GetLastFocus() == this)
|
||||
panel->SetLastFocus((wxWindow*) NULL);
|
||||
}
|
||||
|
||||
m_hasVMT = FALSE;
|
||||
|
||||
#if wxUSE_DRAG_AND_DROP
|
||||
|
@ -1508,6 +1508,14 @@ bool wxWindow::Create( wxWindow *parent, wxWindowID id,
|
||||
|
||||
wxWindow::~wxWindow()
|
||||
{
|
||||
// Remove potential dangling pointer
|
||||
if (GetParent() && GetParent()->IsKindOf(CLASSINFO(wxPanel)))
|
||||
{
|
||||
wxPanel* panel = (wxPanel*) GetParent();
|
||||
if (panel->GetLastFocus() == this)
|
||||
panel->SetLastFocus((wxWindow*) NULL);
|
||||
}
|
||||
|
||||
m_hasVMT = FALSE;
|
||||
|
||||
#if wxUSE_DRAG_AND_DROP
|
||||
|
@ -142,6 +142,14 @@ wxWindow::wxWindow()
|
||||
// Destructor
|
||||
wxWindow::~wxWindow()
|
||||
{
|
||||
// Remove potential dangling pointer
|
||||
if (GetParent() && GetParent()->IsKindOf(CLASSINFO(wxPanel)))
|
||||
{
|
||||
wxPanel* panel = (wxPanel*) GetParent();
|
||||
if (panel->GetLastFocus() == this)
|
||||
panel->SetLastFocus((wxWindow*) NULL);
|
||||
}
|
||||
|
||||
//// Motif-specific
|
||||
|
||||
if (GetMainWidget())
|
||||
|
@ -388,6 +388,17 @@ wxString wxRadioBox::GetString(int N) const
|
||||
return wxString(wxBuffer);
|
||||
}
|
||||
|
||||
/* NOTE. The contributed code to size the group box according to the
|
||||
* given size simply didn't work (try it in e.g. Dialog Editor)
|
||||
* so sorry, I'm removing it. If you reinstate it, please make sure
|
||||
* it's bullet-proof in Dialog Editor. Meanwhile, it's better to have it
|
||||
* working with a calculated size, than supposedly flexibly but
|
||||
* actually broken. This is rather important when it comes to releasing
|
||||
* stable software. Suggestion: if you modify this, rewrite it completely.
|
||||
* -- JACS 7/2/99
|
||||
*/
|
||||
|
||||
#if 0
|
||||
void wxRadioBox::SetSize(int x, int y, int width, int height, int sizeFlags)
|
||||
{
|
||||
int currentX, currentY;
|
||||
@ -413,7 +424,7 @@ void wxRadioBox::SetSize(int x, int y, int width, int height, int sizeFlags)
|
||||
|
||||
// number of radio boxes in both directions
|
||||
int nbHor, nbVer;
|
||||
if (m_windowStyle & wxRA_VERTICAL)
|
||||
if (m_windowStyle & wxRA_SPECIFY_ROWS)
|
||||
{
|
||||
nbVer = m_majorDim ;
|
||||
nbHor = (m_noItems+m_majorDim-1)/m_majorDim ;
|
||||
@ -432,6 +443,7 @@ void wxRadioBox::SetSize(int x, int y, int width, int height, int sizeFlags)
|
||||
|
||||
// if we're given the width or height explicitly do not recalculate it, but
|
||||
// use what we have
|
||||
|
||||
bool calcWidth = maxWidth == -1,
|
||||
calcHeight = maxHeight == -1;
|
||||
|
||||
@ -510,7 +522,7 @@ void wxRadioBox::SetSize(int x, int y, int width, int height, int sizeFlags)
|
||||
// Bidimensional radio adjustment
|
||||
if (i&&((i%m_majorDim)==0)) // Why is this omitted for i = 0?
|
||||
{
|
||||
if (m_windowStyle & wxRA_VERTICAL)
|
||||
if (m_windowStyle & wxRA_SPECIFY_ROWS)
|
||||
{
|
||||
y_offset = startY;
|
||||
x_offset += maxWidth + cx1 ;
|
||||
@ -544,7 +556,7 @@ void wxRadioBox::SetSize(int x, int y, int width, int height, int sizeFlags)
|
||||
}
|
||||
|
||||
MoveWindow((HWND) m_radioButtons[i],x_offset,y_offset,eachWidth,eachHeight,TRUE);
|
||||
if (m_windowStyle & wxRA_VERTICAL)
|
||||
if (m_windowStyle & wxRA_SPECIFY_ROWS)
|
||||
{
|
||||
y_offset += maxHeight;
|
||||
if (m_radioWidth[0]>0)
|
||||
@ -554,6 +566,149 @@ void wxRadioBox::SetSize(int x, int y, int width, int height, int sizeFlags)
|
||||
x_offset += maxWidth + cx1;
|
||||
}
|
||||
}
|
||||
#endif
|
||||
|
||||
// Restored old code.
|
||||
void wxRadioBox::SetSize(int x, int y, int width, int height, int sizeFlags)
|
||||
{
|
||||
int currentX, currentY;
|
||||
GetPosition(¤tX, ¤tY);
|
||||
int xx = x;
|
||||
int yy = y;
|
||||
|
||||
if (x == -1 || (sizeFlags & wxSIZE_ALLOW_MINUS_ONE))
|
||||
xx = currentX;
|
||||
if (y == -1 || (sizeFlags & wxSIZE_ALLOW_MINUS_ONE))
|
||||
yy = currentY;
|
||||
|
||||
char buf[400];
|
||||
|
||||
int y_offset = yy;
|
||||
int x_offset = xx;
|
||||
int current_width, cyf;
|
||||
|
||||
int cx1,cy1 ;
|
||||
wxGetCharSize(m_hWnd, &cx1, &cy1, & GetFont());
|
||||
// Attempt to have a look coherent with other platforms:
|
||||
// We compute the biggest toggle dim, then we align all
|
||||
// items according this value.
|
||||
int maxWidth = -1;
|
||||
int maxHeight = -1 ;
|
||||
|
||||
int i;
|
||||
for (i = 0 ; i < m_noItems; i++)
|
||||
{
|
||||
int eachWidth;
|
||||
int eachHeight ;
|
||||
if (m_radioWidth[i]<0)
|
||||
{
|
||||
// It's a labelled toggle
|
||||
GetWindowText((HWND) m_radioButtons[i], buf, 300);
|
||||
GetTextExtent(buf, ¤t_width, &cyf,NULL,NULL, & GetFont());
|
||||
eachWidth = (int)(current_width + RADIO_SIZE);
|
||||
eachHeight = (int)((3*cyf)/2);
|
||||
}
|
||||
else
|
||||
{
|
||||
eachWidth = m_radioWidth[i] ;
|
||||
eachHeight = m_radioHeight[i] ;
|
||||
}
|
||||
if (maxWidth<eachWidth) maxWidth = eachWidth ;
|
||||
if (maxHeight<eachHeight) maxHeight = eachHeight ;
|
||||
}
|
||||
|
||||
if (m_hWnd)
|
||||
{
|
||||
int totWidth ;
|
||||
int totHeight;
|
||||
|
||||
int nbHor,nbVer;
|
||||
|
||||
if (m_windowStyle & wxRA_SPECIFY_ROWS)
|
||||
{
|
||||
nbVer = m_majorDim ;
|
||||
nbHor = (m_noItems+m_majorDim-1)/m_majorDim ;
|
||||
}
|
||||
else
|
||||
{
|
||||
nbHor = m_majorDim ;
|
||||
nbVer = (m_noItems+m_majorDim-1)/m_majorDim ;
|
||||
}
|
||||
|
||||
// this formula works, but I don't know why.
|
||||
// Please, be sure what you do if you modify it!!
|
||||
if (m_radioWidth[0]<0)
|
||||
totHeight = (nbVer * maxHeight) + cy1/2 ;
|
||||
else
|
||||
totHeight = nbVer * (maxHeight+cy1/2) ;
|
||||
totWidth = nbHor * (maxWidth+cx1) ;
|
||||
|
||||
#if (!CTL3D)
|
||||
// Requires a bigger group box in plain Windows
|
||||
MoveWindow((HWND) m_hWnd,x_offset,y_offset,totWidth+cx1,totHeight+(3*cy1)/2,TRUE) ;
|
||||
#else
|
||||
MoveWindow((HWND) m_hWnd,x_offset,y_offset,totWidth+cx1,totHeight+cy1,TRUE) ;
|
||||
#endif
|
||||
x_offset += cx1;
|
||||
y_offset += cy1;
|
||||
}
|
||||
|
||||
#if (!CTL3D)
|
||||
y_offset += (int)(cy1/2); // Fudge factor since buttons overlapped label
|
||||
// JACS 2/12/93. CTL3D draws group label quite high.
|
||||
#endif
|
||||
int startX = x_offset ;
|
||||
int startY = y_offset ;
|
||||
|
||||
for ( i = 0 ; i < m_noItems; i++)
|
||||
{
|
||||
// Bidimensional radio adjustment
|
||||
if (i&&((i%m_majorDim)==0)) // Why is this omitted for i = 0?
|
||||
{
|
||||
if (m_windowStyle & wxRA_VERTICAL)
|
||||
{
|
||||
y_offset = startY;
|
||||
x_offset += maxWidth + cx1 ;
|
||||
}
|
||||
else
|
||||
{
|
||||
x_offset = startX ;
|
||||
y_offset += maxHeight ;
|
||||
if (m_radioWidth[0]>0)
|
||||
y_offset += cy1/2 ;
|
||||
}
|
||||
}
|
||||
int eachWidth ;
|
||||
int eachHeight ;
|
||||
if (m_radioWidth[i]<0)
|
||||
{
|
||||
// It's a labeled item
|
||||
GetWindowText((HWND) m_radioButtons[i], buf, 300);
|
||||
GetTextExtent(buf, ¤t_width, &cyf,NULL,NULL, & GetFont());
|
||||
|
||||
// How do we find out radio button bitmap size!!
|
||||
// By adjusting them carefully, manually :-)
|
||||
eachWidth = (int)(current_width + RADIO_SIZE);
|
||||
eachHeight = (int)((3*cyf)/2);
|
||||
}
|
||||
else
|
||||
{
|
||||
eachWidth = m_radioWidth[i] ;
|
||||
eachHeight = m_radioHeight[i] ;
|
||||
}
|
||||
|
||||
MoveWindow((HWND) m_radioButtons[i],x_offset,y_offset,eachWidth,eachHeight,TRUE);
|
||||
if (m_windowStyle & wxRA_SPECIFY_ROWS)
|
||||
{
|
||||
y_offset += maxHeight;
|
||||
if (m_radioWidth[0]>0)
|
||||
y_offset += cy1/2 ;
|
||||
}
|
||||
else
|
||||
x_offset += maxWidth + cx1;
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
void wxRadioBox::GetSize(int *width, int *height) const
|
||||
{
|
||||
|
@ -970,9 +970,10 @@ void wxTextCtrl::OnChar(wxKeyEvent& event)
|
||||
break;
|
||||
|
||||
case WXK_RETURN:
|
||||
{
|
||||
wxASSERT_MSG( m_windowStyle & wxTE_PROCESS_ENTER,
|
||||
"this text ctrl should never receive return" );
|
||||
if ( m_windowStyle & wxTE_MULTILINE == 0 )
|
||||
if ( (m_windowStyle & wxTE_MULTILINE) == 0 )
|
||||
{
|
||||
wxCommandEvent event(wxEVT_COMMAND_TEXT_ENTER, m_windowId);
|
||||
event.SetEventObject( this );
|
||||
@ -982,7 +983,7 @@ void wxTextCtrl::OnChar(wxKeyEvent& event)
|
||||
//else: multiline controls need Enter for themselves
|
||||
|
||||
break;
|
||||
|
||||
}
|
||||
case WXK_TAB:
|
||||
// only produce navigation event if we don't process TAB ourself or
|
||||
// if it's a Shift-Tab keypress (we assume nobody will ever need
|
||||
|
@ -302,6 +302,14 @@ wxWindow::wxWindow()
|
||||
// Destructor
|
||||
wxWindow::~wxWindow()
|
||||
{
|
||||
// Remove potential dangling pointer
|
||||
if (GetParent() && GetParent()->IsKindOf(CLASSINFO(wxPanel)))
|
||||
{
|
||||
wxPanel* panel = (wxPanel*) GetParent();
|
||||
if (panel->GetLastFocus() == this)
|
||||
panel->SetLastFocus((wxWindow*) NULL);
|
||||
}
|
||||
|
||||
m_isBeingDeleted = TRUE;
|
||||
|
||||
// first of all, delete the things on which nothing else depends
|
||||
|
@ -857,12 +857,11 @@ bool wxBitmapButtonPropertyInfo::SetProperty(wxString& name, wxProperty *propert
|
||||
char *s = property->GetValue().StringValue();
|
||||
if (s && wxFileExists(s))
|
||||
{
|
||||
s = copystring(s);
|
||||
wxBitmap *bitmap = new wxBitmap(s, wxBITMAP_TYPE_BMP);
|
||||
wxString str(s);
|
||||
wxBitmap *bitmap = new wxBitmap(str, wxBITMAP_TYPE_BMP);
|
||||
if (!bitmap->Ok())
|
||||
{
|
||||
delete bitmap;
|
||||
delete[] s;
|
||||
return FALSE;
|
||||
}
|
||||
else
|
||||
@ -871,7 +870,7 @@ bool wxBitmapButtonPropertyInfo::SetProperty(wxString& name, wxProperty *propert
|
||||
if (resource)
|
||||
{
|
||||
wxString oldResource(resource->GetValue4());
|
||||
wxString resName = wxResourceManager::GetCurrentResourceManager()->AddBitmapResource(s);
|
||||
wxString resName = wxResourceManager::GetCurrentResourceManager()->AddBitmapResource(str);
|
||||
resource->SetValue4(resName);
|
||||
|
||||
if (!oldResource.IsNull())
|
||||
@ -879,7 +878,6 @@ bool wxBitmapButtonPropertyInfo::SetProperty(wxString& name, wxProperty *propert
|
||||
}
|
||||
|
||||
button->SetLabel(* bitmap);
|
||||
delete[] s;
|
||||
return TRUE;
|
||||
}
|
||||
}
|
||||
@ -956,13 +954,12 @@ bool wxStaticBitmapPropertyInfo::SetProperty(wxString& name, wxProperty *propert
|
||||
char *s = property->GetValue().StringValue();
|
||||
if (s && wxFileExists(s))
|
||||
{
|
||||
s = copystring(s);
|
||||
wxString str(s);
|
||||
|
||||
wxBitmap *bitmap = new wxBitmap(s, wxBITMAP_TYPE_BMP);
|
||||
wxBitmap *bitmap = new wxBitmap(str, wxBITMAP_TYPE_BMP);
|
||||
if (!bitmap->Ok())
|
||||
{
|
||||
delete bitmap;
|
||||
delete[] s;
|
||||
return FALSE;
|
||||
}
|
||||
else
|
||||
@ -971,7 +968,7 @@ bool wxStaticBitmapPropertyInfo::SetProperty(wxString& name, wxProperty *propert
|
||||
if (resource)
|
||||
{
|
||||
wxString oldResource(resource->GetValue4());
|
||||
wxString resName = wxResourceManager::GetCurrentResourceManager()->AddBitmapResource(s);
|
||||
wxString resName = wxResourceManager::GetCurrentResourceManager()->AddBitmapResource(str);
|
||||
resource->SetValue4(resName);
|
||||
|
||||
if (!oldResource.IsNull())
|
||||
@ -979,7 +976,6 @@ bool wxStaticBitmapPropertyInfo::SetProperty(wxString& name, wxProperty *propert
|
||||
}
|
||||
|
||||
message->SetBitmap(* bitmap);
|
||||
delete[] s;
|
||||
return TRUE;
|
||||
}
|
||||
}
|
||||
|
@ -98,9 +98,12 @@ int g_WindowStylesRadioButtonCount = sizeof(g_WindowStylesRadioButton)/sizeof(wx
|
||||
/* wxRadioBox */
|
||||
static wxWindowStylePair g_WindowStylesRadioBox[] = {
|
||||
{ "wxRA_SPECIFY_COLS", wxRA_SPECIFY_COLS },
|
||||
{ "wxRA_SPECIFY_ROWS", wxRA_SPECIFY_ROWS },
|
||||
{ "wxRA_SPECIFY_ROWS", wxRA_SPECIFY_ROWS }
|
||||
/*
|
||||
,
|
||||
{ "wxRA_HORIZONTAL", wxRA_HORIZONTAL },
|
||||
{ "wxRA_VERTICAL", wxRA_VERTICAL }
|
||||
*/
|
||||
};
|
||||
|
||||
int g_WindowStylesRadioBoxCount = sizeof(g_WindowStylesRadioBox)/sizeof(wxWindowStylePair) ;
|
||||
|
Loading…
Reference in New Issue
Block a user