Motif wxNotebook about done; added print/preview to OGLEdit sample

git-svn-id: https://svn.wxwidgets.org/svn/wx/wxWidgets/trunk@925 c3d73ce0-8a6f-49c7-b76d-6d57e0e08775
This commit is contained in:
Julian Smart
1998-10-27 17:58:46 +00:00
parent 31811e1aca
commit 0280030162
20 changed files with 290 additions and 65 deletions

View File

@@ -40,8 +40,8 @@ public:
inline void SetLabel(const wxString& str) { m_controlLabel = str; } inline void SetLabel(const wxString& str) { m_controlLabel = str; }
inline wxString GetLabel(void) const { return m_controlLabel; } inline wxString GetLabel(void) const { return m_controlLabel; }
inline void SetFont(wxFont *f) { m_labelFont = f; } inline void SetFont(const wxFont& f) { m_labelFont = f; }
inline wxFont *GetFont(void) const { return m_labelFont; } inline wxFont *GetFont(void) const { return (wxFont*) & m_labelFont; }
inline void SetSelected(bool sel) { m_isSelected = sel; } inline void SetSelected(bool sel) { m_isSelected = sel; }
inline bool IsSelected(void) const { return m_isSelected; } inline bool IsSelected(void) const { return m_isSelected; }
@@ -68,7 +68,7 @@ protected:
wxTabView* m_view; wxTabView* m_view;
wxString m_controlLabel; wxString m_controlLabel;
bool m_isSelected; bool m_isSelected;
wxFont* m_labelFont; wxFont m_labelFont;
int m_offsetX; // Offsets from top-left of tab view area (the area below the tabs) int m_offsetX; // Offsets from top-left of tab view area (the area below the tabs)
int m_offsetY; int m_offsetY;
int m_width; int m_width;
@@ -188,11 +188,11 @@ public:
inline void SetVerticalTabTextSpacing(int s) { m_tabVerticalTextSpacing = s; } inline void SetVerticalTabTextSpacing(int s) { m_tabVerticalTextSpacing = s; }
inline int GetVerticalTabTextSpacing() const { return m_tabVerticalTextSpacing; } inline int GetVerticalTabTextSpacing() const { return m_tabVerticalTextSpacing; }
inline wxFont *GetTabFont() const { return m_tabFont; } inline wxFont *GetTabFont() const { return (wxFont*) & m_tabFont; }
inline void SetTabFont(wxFont *f) { m_tabFont = f; } inline void SetTabFont(const wxFont& f) { m_tabFont = f; }
inline wxFont *GetSelectedTabFont() const { return m_tabSelectedFont; } inline wxFont *GetSelectedTabFont() const { return (wxFont*) & m_tabSelectedFont; }
inline void SetSelectedTabFont(wxFont *f) { m_tabSelectedFont = f; } inline void SetSelectedTabFont(const wxFont& f) { m_tabSelectedFont = f; }
// Find the node and the column at which this control is positioned. // Find the node and the column at which this control is positioned.
wxNode *FindTabNodeAndColumn(wxTabControl *control, int *col) const ; wxNode *FindTabNodeAndColumn(wxTabControl *control, int *col) const ;
@@ -253,8 +253,8 @@ protected:
wxPen* m_backgroundPen; wxPen* m_backgroundPen;
wxBrush* m_backgroundBrush; wxBrush* m_backgroundBrush;
wxFont* m_tabFont; wxFont m_tabFont;
wxFont* m_tabSelectedFont; wxFont m_tabSelectedFont;
int m_noTabs; int m_noTabs;

View File

@@ -49,6 +49,9 @@ public:
int GetSelection() const { return m_nSel; } int GetSelection() const { return m_nSel; }
int GetOldSelection() const { return m_nOldSel; } int GetOldSelection() const { return m_nOldSel; }
void SetSelection(int sel) { m_nSel = sel; }
void SetOldSelection(int oldSel) { m_nOldSel = oldSel; }
private: private:
int m_nSel, // currently selected page int m_nSel, // currently selected page
m_nOldSel; // previously selected page m_nOldSel; // previously selected page
@@ -73,22 +76,7 @@ public:
// Called when a tab is activated // Called when a tab is activated
virtual void OnTabActivate(int activateId, int deactivateId); virtual void OnTabActivate(int activateId, int deactivateId);
/*
// Specific to this class
void AddTabWindow(int id, wxWindow *window);
wxWindow *GetTabWindow(int id) const ;
void ClearWindows(bool deleteWindows = TRUE);
inline wxWindow *GetCurrentWindow() const { return m_currentWindow; }
void ShowWindowForTab(int id);
*/
protected: protected:
/*
// List of panels, one for each tab. Indexed
// by tab ID.
wxList m_tabWindows;
wxWindow* m_currentWindow;
*/
wxNotebook* m_notebook; wxNotebook* m_notebook;
}; };
@@ -204,6 +192,7 @@ public:
virtual void ChangeFont(bool keepOriginalSize = TRUE); virtual void ChangeFont(bool keepOriginalSize = TRUE);
virtual void ChangeBackgroundColour(); virtual void ChangeBackgroundColour();
virtual void ChangeForegroundColour(); virtual void ChangeForegroundColour();
virtual wxRect GetAvailableClientSize();
protected: protected:
// common part of all ctors // common part of all ctors

View File

@@ -190,6 +190,7 @@ END_EVENT_TABLE()
MyCanvas::MyCanvas(wxWindow *parent, const wxPoint& pos, const wxSize& size): MyCanvas::MyCanvas(wxWindow *parent, const wxPoint& pos, const wxSize& size):
wxScrolledWindow(parent, -1, pos, size, wxSUNKEN_BORDER|wxVSCROLL|wxHSCROLL) wxScrolledWindow(parent, -1, pos, size, wxSUNKEN_BORDER|wxVSCROLL|wxHSCROLL)
{ {
SetBackgroundColour(wxColour("WHITE"));
} }
// Define the repainting behaviour // Define the repainting behaviour

View File

@@ -81,12 +81,14 @@ void MyApp::InitTabView(wxNotebook* notebook, wxWindow* window)
// Add some panels // Add some panels
wxPanel *panel1 = new wxPanel(notebook, -1); wxPanel *panel1 = new wxPanel(notebook, -1);
// panel1->SetBackgroundColour(wxColour("RED"));
(void)new wxButton(panel1, -1, "Press me", wxPoint(10, 10)); (void)new wxButton(panel1, -1, "Press me", wxPoint(10, 10));
(void)new wxTextCtrl(panel1, -1, "1234", wxPoint(10, 40), wxSize(120, 150)); (void)new wxTextCtrl(panel1, -1, "1234", wxPoint(10, 40), wxSize(120, 150));
notebook->AddPage(panel1, "Cat"); notebook->AddPage(panel1, "Cat");
wxPanel *panel2 = new wxPanel(notebook, -1); wxPanel *panel2 = new wxPanel(notebook, -1);
panel2->SetBackgroundColour(wxColour("BLUE"));
wxString animals[] = { "Fox", "Hare", "Rabbit", "Sabre-toothed tiger", "T Rex" }; wxString animals[] = { "Fox", "Hare", "Rabbit", "Sabre-toothed tiger", "T Rex" };
(void)new wxListBox(panel2, -1, wxPoint(5, 5), wxSize(170, 80), 5, animals); (void)new wxListBox(panel2, -1, wxPoint(5, 5), wxSize(170, 80), 5, animals);
@@ -95,6 +97,14 @@ void MyApp::InitTabView(wxNotebook* notebook, wxWindow* window)
wxTE_MULTILINE); wxTE_MULTILINE);
notebook->AddPage(panel2, "Dog"); notebook->AddPage(panel2, "Dog");
wxPanel *panel3 = new wxPanel(notebook, -1);
panel3->SetBackgroundColour(wxColour("WHITE"));
notebook->AddPage(panel3, "Goat");
wxPanel *panel4 = new wxPanel(notebook, -1);
panel4->SetBackgroundColour(wxColour("YELLOW"));
notebook->AddPage(panel4, "Sheep");
} }
BEGIN_EVENT_TABLE(MyDialog, wxDialog) BEGIN_EVENT_TABLE(MyDialog, wxDialog)

View File

@@ -1087,7 +1087,7 @@ void wxListMainWindow::OnRenameAccept()
void wxListMainWindow::OnMouse( wxMouseEvent &event ) void wxListMainWindow::OnMouse( wxMouseEvent &event )
{ {
if (GetParent()->ProcessEvent( event)) return; if (GetParent()->GetEventHandler()->ProcessEvent( event)) return;
if (!m_current) return; if (!m_current) return;
if (m_dirty) return; if (m_dirty) return;
@@ -1402,7 +1402,7 @@ void wxListMainWindow::OnSetFocus( wxFocusEvent &WXUNUSED(event) )
wxFocusEvent event( wxEVT_SET_FOCUS, GetParent()->GetId() ); wxFocusEvent event( wxEVT_SET_FOCUS, GetParent()->GetId() );
event.SetEventObject( GetParent() ); event.SetEventObject( GetParent() );
GetParent()->ProcessEvent( event ); GetParent()->GetEventHandler()->ProcessEvent( event );
} }
void wxListMainWindow::OnKillFocus( wxFocusEvent &WXUNUSED(event) ) void wxListMainWindow::OnKillFocus( wxFocusEvent &WXUNUSED(event) )
@@ -2054,7 +2054,7 @@ void wxListMainWindow::SortItems( wxListCtrlCompare fn, long data )
bool wxListMainWindow::OnListNotify( wxListEvent &event ) bool wxListMainWindow::OnListNotify( wxListEvent &event )
{ {
if (GetParent()) GetParent()->ProcessEvent( event ); if (GetParent()) GetParent()->GetEventHandler()->ProcessEvent( event );
return FALSE; return FALSE;
} }

View File

@@ -43,7 +43,6 @@ wxTabControl::wxTabControl(wxTabView *v)
{ {
m_view = v; m_view = v;
m_isSelected = FALSE; m_isSelected = FALSE;
m_labelFont = (wxFont *) NULL;
m_offsetX = 0; m_offsetX = 0;
m_offsetY = 0; m_offsetY = 0;
m_width = 0; m_width = 0;
@@ -86,7 +85,11 @@ void wxTabControl::OnDraw(wxDC& dc, bool lastInRow)
dc.SetBrush(*m_view->GetBackgroundBrush()); dc.SetBrush(*m_view->GetBackgroundBrush());
// Add 1 because the pen is transparent. Under Motif, may be different. // Add 1 because the pen is transparent. Under Motif, may be different.
#ifdef __WXMOTIF__
dc.DrawRectangle(tabX, tabY, (GetWidth()+1), (GetHeight() + tabHeightInc));
#else
dc.DrawRectangle(tabX, tabY, (GetWidth()+1), (GetHeight() + 1 + tabHeightInc)); dc.DrawRectangle(tabX, tabY, (GetWidth()+1), (GetHeight() + 1 + tabHeightInc));
#endif
} }
// Draw highlight and shadow // Draw highlight and shadow
@@ -152,6 +155,10 @@ void wxTabControl::OnDraw(wxDC& dc, bool lastInRow)
if ( GetRowPosition() < (maxPositions - 1) ) if ( GetRowPosition() < (maxPositions - 1) )
topY = tabY + GetHeight() + tabHeightInc; topY = tabY + GetHeight() + tabHeightInc;
#ifdef __WXMOTIF__
topY -= 1;
#endif
// Shadow // Shadow
dc.DrawLine((tabX + GetWidth()), tabY, (tabX + GetWidth()), topY); dc.DrawLine((tabX + GetWidth()), tabY, (tabX + GetWidth()), topY);
// Draw black line to emphasize shadow // Draw black line to emphasize shadow
@@ -170,6 +177,10 @@ void wxTabControl::OnDraw(wxDC& dc, bool lastInRow)
if (tabBeneath && tabBeneath->IsSelected()) if (tabBeneath && tabBeneath->IsSelected())
subtractThis = (m_view->GetTabSelectionHeight() - m_view->GetTabHeight()); subtractThis = (m_view->GetTabSelectionHeight() - m_view->GetTabHeight());
#ifdef __WXMOTIF__
subtractThis += 1;
#endif
// Draw only to next tab down. // Draw only to next tab down.
dc.DrawLine((tabX + GetWidth()), tabY, dc.DrawLine((tabX + GetWidth()), tabY,
(tabX + GetWidth()), (tabY + GetHeight() + tabHeightInc - subtractThis)); (tabX + GetWidth()), (tabY + GetHeight() + tabHeightInc - subtractThis));
@@ -185,9 +196,9 @@ void wxTabControl::OnDraw(wxDC& dc, bool lastInRow)
int textY = tabY + m_view->GetVerticalTabTextSpacing() + tabHeightInc; int textY = tabY + m_view->GetVerticalTabTextSpacing() + tabHeightInc;
if (m_isSelected) if (m_isSelected)
dc.SetFont(*m_view->GetSelectedTabFont()); dc.SetFont(* m_view->GetSelectedTabFont());
else else
dc.SetFont(*GetFont()); dc.SetFont(* GetFont());
wxColour col(m_view->GetTextColour()); wxColour col(m_view->GetTextColour());
dc.SetTextForeground(col); dc.SetTextForeground(col);
@@ -510,13 +521,14 @@ wxTabView::wxTabView(long style)
m_shadowPen = wxGREY_PEN; m_shadowPen = wxGREY_PEN;
m_backgroundPen = wxLIGHT_GREY_PEN; m_backgroundPen = wxLIGHT_GREY_PEN;
m_backgroundBrush = wxLIGHT_GREY_BRUSH; m_backgroundBrush = wxLIGHT_GREY_BRUSH;
m_tabFont = wxTheFontList->FindOrCreateFont(9, wxSWISS, wxNORMAL, wxNORMAL); m_tabFont = wxSystemSettings::GetSystemFont(wxSYS_DEFAULT_GUI_FONT);
m_tabSelectedFont = wxTheFontList->FindOrCreateFont(9, wxSWISS, wxNORMAL, wxBOLD); m_tabSelectedFont = wxSystemSettings::GetSystemFont(wxSYS_DEFAULT_GUI_FONT);
m_window = (wxWindow *) NULL; m_window = (wxWindow *) NULL;
} }
wxTabView::~wxTabView() wxTabView::~wxTabView()
{ {
ClearTabs(TRUE);
} }
// Automatically positions tabs // Automatically positions tabs
@@ -578,7 +590,7 @@ wxTabControl *wxTabView::AddTab(int id, const wxString& label, wxTabControl *exi
tabControl->SetSize(GetTabWidth(), GetTabHeight()); tabControl->SetSize(GetTabWidth(), GetTabHeight());
tabControl->SetId(id); tabControl->SetId(id);
tabControl->SetLabel(label); tabControl->SetLabel(label);
tabControl->SetFont(GetTabFont()); tabControl->SetFont(* GetTabFont());
tabLayer->Append(tabControl); tabLayer->Append(tabControl);
m_noTabs ++; m_noTabs ++;
@@ -779,7 +791,12 @@ void wxTabView::Draw(wxDC& dc)
dc.DrawLine( dc.DrawLine(
(GetViewRect().x), (GetViewRect().x),
(GetViewRect().y + GetViewRect().height + 1), (GetViewRect().y + GetViewRect().height + 1),
#if defined(__WXMOTIF__)
(GetViewRect().x + GetViewRect().width + 1),
#else
(GetViewRect().x + GetViewRect().width + 2), (GetViewRect().x + GetViewRect().width + 2),
#endif
(GetViewRect().y + GetViewRect().height + 1) (GetViewRect().y + GetViewRect().height + 1)
); );

View File

@@ -112,8 +112,6 @@ bool wxListBox::Create(wxWindow *parent, wxWindowID id,
AttachWidget (parent, m_mainWidget, (WXWidget) NULL, pos.x, pos.y, width, height); AttachWidget (parent, m_mainWidget, (WXWidget) NULL, pos.x, pos.y, width, height);
m_backgroundColour = wxSystemSettings::GetSystemColour(wxSYS_COLOUR_WINDOW);
ChangeBackgroundColour(); ChangeBackgroundColour();
return TRUE; return TRUE;
@@ -751,10 +749,41 @@ void wxListBox::ChangeFont(bool keepOriginalSize)
void wxListBox::ChangeBackgroundColour() void wxListBox::ChangeBackgroundColour()
{ {
wxWindow::ChangeBackgroundColour(); wxWindow::ChangeBackgroundColour();
Widget parent = XtParent ((Widget) m_mainWidget);
Widget hsb, vsb;
XtVaGetValues (parent,
XmNhorizontalScrollBar, &hsb,
XmNverticalScrollBar, &vsb,
NULL);
/* TODO: should scrollbars be affected? Should probably have separate
* function to change them (by default, taken from wxSystemSettings)
DoChangeBackgroundColour((WXWidget) hsb, m_backgroundColour, TRUE);
DoChangeBackgroundColour((WXWidget) vsb, m_backgroundColour, TRUE);
*/
DoChangeBackgroundColour((WXWidget) parent, m_backgroundColour, TRUE);
} }
void wxListBox::ChangeForegroundColour() void wxListBox::ChangeForegroundColour()
{ {
wxWindow::ChangeForegroundColour(); wxWindow::ChangeForegroundColour();
Widget parent = XtParent ((Widget) m_mainWidget);
Widget hsb, vsb;
XtVaGetValues (parent,
XmNhorizontalScrollBar, &hsb,
XmNverticalScrollBar, &vsb,
NULL);
/* TODO: should scrollbars be affected? Should probably have separate
* function to change them (by default, taken from wxSystemSettings)
DoChangeForegroundColour((WXWidget) hsb, m_foregroundColour);
DoChangeForegroundColour((WXWidget) vsb, m_foregroundColour);
DoChangeForegroundColour((WXWidget) parent, m_foregroundColour);
*/
} }

View File

@@ -26,6 +26,9 @@
#include <wx/notebook.h> #include <wx/notebook.h>
#include <wx/dcclient.h> #include <wx/dcclient.h>
#include <Xm/Xm.h>
#include <wx/motif/private.h>
// ---------------------------------------------------------------------------- // ----------------------------------------------------------------------------
// macros // macros
// ---------------------------------------------------------------------------- // ----------------------------------------------------------------------------
@@ -96,16 +99,9 @@ bool wxNotebook::Create(wxWindow *parent,
{ {
// base init // base init
SetName(name); SetName(name);
SetParent(parent);
m_windowId = id == -1 ? NewControlId() : id; m_windowId = id == -1 ? NewControlId() : id;
// style
m_windowStyle = style;
if ( parent != NULL )
parent->AddChild(this);
// It's like a normal window... // It's like a normal window...
if (!wxWindow::Create(parent, id, pos, size, style, name)) if (!wxWindow::Create(parent, id, pos, size, style, name))
return FALSE; return FALSE;
@@ -137,6 +133,9 @@ int wxNotebook::GetRowCount() const
int wxNotebook::SetSelection(int nPage) int wxNotebook::SetSelection(int nPage)
{ {
if (nPage == -1)
return 0;
wxASSERT( IS_VALID_PAGE(nPage) ); wxASSERT( IS_VALID_PAGE(nPage) );
ChangePage(m_nSelection, nPage); ChangePage(m_nSelection, nPage);
@@ -250,6 +249,7 @@ bool wxNotebook::InsertPage(int nPage,
wxCHECK( IS_VALID_PAGE(nPage) || nPage == GetPageCount(), FALSE ); wxCHECK( IS_VALID_PAGE(nPage) || nPage == GetPageCount(), FALSE );
m_tabView->AddTab(nPage, strText); m_tabView->AddTab(nPage, strText);
pPage->Show(FALSE);
/* /*
if (bSelect) if (bSelect)
@@ -323,10 +323,14 @@ void wxNotebook::OnSize(wxSizeEvent& event)
unsigned int nCount = m_aPages.Count(); unsigned int nCount = m_aPages.Count();
for ( unsigned int nPage = 0; nPage < nCount; nPage++ ) { for ( unsigned int nPage = 0; nPage < nCount; nPage++ ) {
wxNotebookPage *pPage = m_aPages[nPage]; wxNotebookPage *pPage = m_aPages[nPage];
pPage->SetSize(rect.x + 2, rect.y + 2, rect.width - 2, rect.height - 2); if (pPage->IsShown())
{
wxRect clientRect = GetAvailableClientSize();
pPage->SetSize(clientRect.x, clientRect.y, clientRect.width, clientRect.height);
if ( pPage->GetAutoLayout() ) if ( pPage->GetAutoLayout() )
pPage->Layout(); pPage->Layout();
} }
}
Refresh(); Refresh();
} }
@@ -401,12 +405,20 @@ void wxNotebook::ChangePage(int nOldSel, int nSel)
if ( nOldSel != -1 ) { if ( nOldSel != -1 ) {
m_aPages[nOldSel]->Show(FALSE); m_aPages[nOldSel]->Show(FALSE);
m_aPages[nOldSel]->Lower();
} }
wxNotebookPage *pPage = m_aPages[nSel]; wxNotebookPage *pPage = m_aPages[nSel];
wxRect clientRect = GetAvailableClientSize();
pPage->SetSize(clientRect.x, clientRect.y, clientRect.width, clientRect.height);
pPage->Show(TRUE); pPage->Show(TRUE);
pPage->Raise();
pPage->SetFocus(); pPage->SetFocus();
Refresh();
m_nSelection = nSel; m_nSelection = nSel;
} }
@@ -438,6 +450,23 @@ void wxNotebook::OnPaint(wxPaintEvent& WXUNUSED(event) )
m_tabView->Draw(dc); m_tabView->Draw(dc);
} }
wxRect wxNotebook::GetAvailableClientSize()
{
int cw, ch;
GetClientSize(& cw, & ch);
int tabHeight = m_tabView->GetTotalTabHeight();
// TODO: these margins should be configurable.
wxRect rect;
rect.x = 6;
rect.y = tabHeight + 6;
rect.width = cw - 12;
rect.height = ch - 4 - rect.y ;
return rect;
}
/* /*
* wxNotebookTabView * wxNotebookTabView
*/ */
@@ -448,8 +477,6 @@ wxNotebookTabView::wxNotebookTabView(wxNotebook *notebook, long style): wxTabVie
{ {
m_notebook = notebook; m_notebook = notebook;
// m_currentWindow = (wxWindow *) NULL;
m_notebook->SetTabView(this); m_notebook->SetTabView(this);
SetWindow(m_notebook); SetWindow(m_notebook);
@@ -457,7 +484,6 @@ wxNotebookTabView::wxNotebookTabView(wxNotebook *notebook, long style): wxTabVie
wxNotebookTabView::~wxNotebookTabView(void) wxNotebookTabView::~wxNotebookTabView(void)
{ {
// ClearWindows(TRUE);
} }
// Called when a tab is activated // Called when a tab is activated
@@ -466,15 +492,43 @@ void wxNotebookTabView::OnTabActivate(int activateId, int deactivateId)
if (!m_notebook) if (!m_notebook)
return; return;
wxNotebookEvent event(wxEVT_COMMAND_NOTEBOOK_PAGE_CHANGED, m_notebook->GetId());
event.SetEventObject(m_notebook);
event.SetSelection(activateId);
event.SetOldSelection(deactivateId);
m_notebook->GetEventHandler()->ProcessEvent(event);
/*
wxWindow *oldWindow = ((deactivateId == -1) ? 0 : m_notebook->GetPage(deactivateId)); wxWindow *oldWindow = ((deactivateId == -1) ? 0 : m_notebook->GetPage(deactivateId));
wxWindow *newWindow = m_notebook->GetPage(activateId); wxWindow *newWindow = m_notebook->GetPage(activateId);
if (oldWindow) if (oldWindow)
{
oldWindow->Show(FALSE); oldWindow->Show(FALSE);
oldWindow->Lower();
}
if (newWindow) if (newWindow)
{
newWindow->Show(TRUE); newWindow->Show(TRUE);
newWindow->Raise();
int cw, ch;
m_notebook->GetClientSize(& cw, & ch);
int tabHeight = GetTotalTabHeight();
wxRect rect;
rect.x = 4;
rect.y = tabHeight + 4;
rect.width = cw - 8;
rect.height = ch - 4 - rect.y ;
newWindow->SetSize(rect.x + 2, rect.y + 2, rect.width - 2, rect.height - 2);
newWindow->Refresh();
}
// TODO: only refresh the tab area.
m_notebook->Refresh(); m_notebook->Refresh();
*/
} }
#if 0 #if 0

View File

@@ -74,7 +74,8 @@ wxColour wxSystemSettings::GetSystemColour(int index)
case wxSYS_COLOUR_INFOBK: case wxSYS_COLOUR_INFOBK:
case wxSYS_COLOUR_APPWORKSPACE: case wxSYS_COLOUR_APPWORKSPACE:
{ {
return *wxWHITE; return wxColour("LIGHT GREY");
// return *wxWHITE;
} }
} }
return *wxWHITE; return *wxWHITE;

View File

@@ -646,11 +646,47 @@ void wxTextCtrl::ChangeFont(bool keepOriginalSize)
void wxTextCtrl::ChangeBackgroundColour() void wxTextCtrl::ChangeBackgroundColour()
{ {
wxWindow::ChangeBackgroundColour(); wxWindow::ChangeBackgroundColour();
Widget parent = XtParent ((Widget) m_mainWidget);
Widget hsb, vsb;
XtVaGetValues (parent,
XmNhorizontalScrollBar, &hsb,
XmNverticalScrollBar, &vsb,
NULL);
/* TODO: should scrollbars be affected? Should probably have separate
* function to change them (by default, taken from wxSystemSettings)
if (hsb)
DoChangeBackgroundColour((WXWidget) hsb, m_backgroundColour, TRUE);
if (vsb)
DoChangeBackgroundColour((WXWidget) vsb, m_backgroundColour, TRUE);
*/
DoChangeBackgroundColour((WXWidget) parent, m_backgroundColour, TRUE);
} }
void wxTextCtrl::ChangeForegroundColour() void wxTextCtrl::ChangeForegroundColour()
{ {
wxWindow::ChangeForegroundColour(); wxWindow::ChangeForegroundColour();
Widget parent = XtParent ((Widget) m_mainWidget);
Widget hsb, vsb;
XtVaGetValues (parent,
XmNhorizontalScrollBar, &hsb,
XmNverticalScrollBar, &vsb,
NULL);
/* TODO: should scrollbars be affected? Should probably have separate
* function to change them (by default, taken from wxSystemSettings)
if (hsb)
DoChangeForegroundColour((WXWidget) hsb, m_foregroundColour);
if (vsb)
DoChangeForegroundColour((WXWidget) vsb, m_foregroundColour);
*/
DoChangeForegroundColour((WXWidget) parent, m_foregroundColour);
} }
static void wxTextWindowChangedProc (Widget w, XtPointer clientData, XtPointer ptr) static void wxTextWindowChangedProc (Widget w, XtPointer clientData, XtPointer ptr)

View File

@@ -740,6 +740,8 @@ bool wxWindow::Show(bool show)
{ {
if (m_borderWidget || m_scrolledWindow) if (m_borderWidget || m_scrolledWindow)
{ {
if (m_drawingArea)
XtMapWidget((Widget) m_drawingArea);
XtMapWidget(m_borderWidget ? (Widget) m_borderWidget : (Widget) m_scrolledWindow); XtMapWidget(m_borderWidget ? (Widget) m_borderWidget : (Widget) m_scrolledWindow);
} }
else else
@@ -751,6 +753,8 @@ bool wxWindow::Show(bool show)
{ {
if (m_borderWidget || m_scrolledWindow) if (m_borderWidget || m_scrolledWindow)
{ {
if (m_drawingArea)
XtUnmapWidget((Widget) m_drawingArea);
XtUnmapWidget(m_borderWidget ? (Widget) m_borderWidget : (Widget) m_scrolledWindow); XtUnmapWidget(m_borderWidget ? (Widget) m_borderWidget : (Widget) m_scrolledWindow);
} }
else else
@@ -1387,7 +1391,18 @@ void wxWindow::RemoveChild(wxWindow *child)
void wxWindow::DestroyChildren() void wxWindow::DestroyChildren()
{ {
if (GetChildren()) { if (GetChildren())
{
wxNode *node = GetChildren()->First();
while (node)
{
wxNode* next = node->Next();
wxWindow* child = (wxWindow*) node->Data();
delete child;
node = next;
}
GetChildren()->Clear();
#if 0
wxNode *node; wxNode *node;
while ((node = GetChildren()->First()) != (wxNode *)NULL) { while ((node = GetChildren()->First()) != (wxNode *)NULL) {
wxWindow *child; wxWindow *child;
@@ -1397,6 +1412,7 @@ void wxWindow::DestroyChildren()
delete node; delete node;
} }
} /* while */ } /* while */
#endif
} }
} }

View File

@@ -854,7 +854,7 @@ bool wxApp::SendIdleEvents(wxWindow* win)
wxIdleEvent event; wxIdleEvent event;
event.SetEventObject(win); event.SetEventObject(win);
win->ProcessEvent(event); win->GetEventHandler()->ProcessEvent(event);
if (event.MoreRequested()) if (event.MoreRequested())
needMore = TRUE; needMore = TRUE;

View File

@@ -242,7 +242,7 @@ bool wxControl::MSWNotify(WXWPARAM wParam, WXLPARAM lParam)
event.SetEventType(eventType); event.SetEventType(eventType);
event.SetEventObject(this); event.SetEventObject(this);
if ( !ProcessEvent(event) ) if ( !GetEventHandler()->ProcessEvent(event) )
return FALSE; return FALSE;
return TRUE; return TRUE;
#else #else

View File

@@ -544,7 +544,7 @@ void wxFrame::OnSysColourChanged(wxSysColourChangedEvent& event)
{ {
wxSysColourChangedEvent event2; wxSysColourChangedEvent event2;
event2.SetEventObject( m_frameStatusBar ); event2.SetEventObject( m_frameStatusBar );
m_frameStatusBar->ProcessEvent(event2); m_frameStatusBar->GetEventHandler()->ProcessEvent(event2);
} }
// Propagate the event to the non-top-level children // Propagate the event to the non-top-level children

View File

@@ -508,7 +508,7 @@ void wxMenu::ProcessCommand(wxCommandEvent & event)
// Try the window the menu was popped up from (and up // Try the window the menu was popped up from (and up
// through the hierarchy) // through the hierarchy)
if ( !processed && GetInvokingWindow()) if ( !processed && GetInvokingWindow())
processed = GetInvokingWindow()->ProcessEvent(event); processed = GetInvokingWindow()->GetEventHandler()->ProcessEvent(event);
} }
extern wxMenu *wxCurrentPopupMenu; extern wxMenu *wxCurrentPopupMenu;

View File

@@ -398,7 +398,7 @@ void wxNotebook::OnNavigationKey(wxNavigationKeyEvent& event)
// pass to the parent // pass to the parent
if ( GetParent() ) { if ( GetParent() ) {
event.SetCurrentFocus(this); event.SetCurrentFocus(this);
GetParent()->ProcessEvent(event); GetParent()->GetEventHandler()->ProcessEvent(event);
} }
} }
} }
@@ -453,7 +453,7 @@ bool wxNotebook::MSWNotify(WXWPARAM wParam, WXLPARAM lParam)
event.SetEventObject(this); event.SetEventObject(this);
event.SetInt(LOWORD(wParam)); event.SetInt(LOWORD(wParam));
return ProcessEvent(event); return GetEventHandler()->ProcessEvent(event);
} }
// ---------------------------------------------------------------------------- // ----------------------------------------------------------------------------

View File

@@ -252,7 +252,7 @@ bool wxSpinButton::MSWNotify(WXWPARAM wParam, WXLPARAM lParam)
event.eventObject = this; event.eventObject = this;
event.SetEventType(eventType); event.SetEventType(eventType);
if ( !ProcessEvent(event) ) if ( !GetEventHandler()->ProcessEvent(event) )
return FALSE; return FALSE;
*/ */
return TRUE; return TRUE;

View File

@@ -1034,7 +1034,7 @@ bool wxTextCtrl::MSWCommand(WXUINT param, WXWORD WXUNUSED(id))
: wxEVT_SET_FOCUS, : wxEVT_SET_FOCUS,
m_windowId); m_windowId);
event.SetEventObject( this ); event.SetEventObject( this );
ProcessEvent(event); GetEventHandler()->ProcessEvent(event);
} }
break; break;
@@ -1083,7 +1083,7 @@ bool wxTextCtrl::MSWNotify(WXWPARAM wParam, WXLPARAM lParam)
event.SetEventObject( this ); event.SetEventObject( this );
event.SetEventType(eventType); event.SetEventType(eventType);
if ( !ProcessEvent(event) ) if ( !GetEventHandler()->ProcessEvent(event) )
return FALSE; return FALSE;
return TRUE; return TRUE;

View File

@@ -3575,7 +3575,7 @@ void wxWindow::OnChar(wxKeyEvent& event)
// propagate the TABs to the parent - it's up to it to decide what // propagate the TABs to the parent - it's up to it to decide what
// to do with it // to do with it
if ( GetParent() ) { if ( GetParent() ) {
if ( GetParent()->ProcessEvent(event) ) if ( GetParent()->GetEventHandler()->ProcessEvent(event) )
return; return;
} }
} }

View File

@@ -66,10 +66,81 @@ bool DiagramView::OnCreate(wxDocument *doc, long flags)
return TRUE; return TRUE;
} }
#define CENTER FALSE // Place the drawing to the center of the page
// Sneakily gets used for default print/preview // Sneakily gets used for default print/preview
// as well as drawing on the screen. // as well as drawing on the screen.
void DiagramView::OnDraw(wxDC *dc) void DiagramView::OnDraw(wxDC *dc)
{ {
/* You might use THIS code if you were scaling
* graphics of known size to fit on the page.
*/
float w, h;
// We need to adjust for the graphic size, a formula will be added
float maxX = 900;
float maxY = 700;
// A better way of find the maxium values would be to search through
// the linked list
// Let's have at least 10 device units margin
float marginX = 10;
float marginY = 10;
// Add the margin to the graphic size
maxX += (2 * marginX);
maxY += (2 * marginY);
// Get the size of the DC in pixels
dc->GetSize (&w, &h);
// Calculate a suitable scaling factor
float scaleX = (float) (w / maxX);
float scaleY = (float) (h / maxY);
// Use x or y scaling factor, whichever fits on the DC
float actualScale = wxMin (scaleX, scaleY);
float posX, posY;
// Calculate the position on the DC for centring the graphic
if (CENTER == TRUE) // center the drawing
{
posX = (float) ((w - (200 * actualScale)) / 2.0);
posY = (float) ((h - (200 * actualScale)) / 2.0);
}
else // Use defined presets
{
posX = 10;
posY = 35;
}
// Set the scale and origin
dc->SetUserScale (actualScale, actualScale);
dc->SetDeviceOrigin (posX, posY);
// This part was added to preform the print preview and printing functions
dc->BeginDrawing(); // Allows optimization of drawing code under MS Windows.
wxDiagram *diagram_p=((DiagramDocument*)GetDocument())->GetDiagram(); // Get the current diagram
if (diagram_p->GetShapeList())
{
wxCursor *old_cursor = NULL;
wxNode *current = diagram_p->GetShapeList()->First();
while (current) // Loop through the entire list of shapes
{
wxShape *object = (wxShape *)current->Data();
if (!object->GetParent())
{
object->Draw(* dc); // Draw the shape onto our printing dc
}
current = current->Next(); // Procede to the next shape in the list
}
}
dc->EndDrawing(); // Allows optimization of drawing code under MS Windows.
} }
void DiagramView::OnUpdate(wxView *sender, wxObject *hint) void DiagramView::OnUpdate(wxView *sender, wxObject *hint)
@@ -167,6 +238,7 @@ void DiagramView::OnEditLabel(wxCommandEvent& event)
} }
} }
/* /*
* Window implementations * Window implementations
*/ */