wxFrame::CreateToolBar() stuff

wxDC::SetBackground from Chris Breeze
zillions of compile fixes


git-svn-id: https://svn.wxwidgets.org/svn/wx/wxWidgets/trunk@364 c3d73ce0-8a6f-49c7-b76d-6d57e0e08775
This commit is contained in:
Robert Roebling
1998-07-24 19:05:25 +00:00
parent d602f1d8b6
commit 46dc76ba35
53 changed files with 645 additions and 376 deletions

View File

@@ -18,6 +18,7 @@
#include "wx/postscrp.h"
#include "wx/intl.h"
#include "wx/log.h"
#include "wx/memory.h"
#include "unistd.h"
@@ -285,6 +286,18 @@ int wxEntry( int argc, char *argv[] )
wxClassInfo::InitializeClasses();
#if (WXDEBUG && USE_MEMORY_TRACING) || USE_DEBUG_CONTEXT
#if !defined(_WINDLL)
streambuf* sBuf = new wxDebugStreamBuf;
#else
streambuf* sBuf = NULL;
#endif
ostream* oStr = new ostream(sBuf) ;
wxDebugContext::SetStream(oStr, sBuf);
#endif
if (!wxTheApp)
{
if (!wxApp::GetInitializerFunction())
@@ -347,6 +360,20 @@ int wxEntry( int argc, char *argv[] )
wxApp::CommonCleanUp();
#if (WXDEBUG && USE_MEMORY_TRACING) || USE_DEBUG_CONTEXT
// At this point we want to check if there are any memory
// blocks that aren't part of the wxDebugContext itself,
// as a special case. Then when dumping we need to ignore
// wxDebugContext, too.
if (wxDebugContext::CountObjectsLeft() > 0)
{
wxTrace("There were memory leaks.\n");
wxDebugContext::Dump();
wxDebugContext::PrintStatistics();
}
wxDebugContext::SetStream(NULL, NULL);
#endif
return retValue;
};

View File

@@ -649,6 +649,46 @@ void wxPaintDC::SetBrush( const wxBrush &brush )
};
};
// CMB 21/7/98: Added SetBackground. Sets background brush
// for Clear() and bg colour for shapes filled with cross-hatch brush
void wxPaintDC::SetBackground( const wxBrush &brush )
{
if (!Ok()) return;
if (m_backgroundBrush == brush) return;
m_backgroundBrush = brush;
if (!m_backgroundBrush.Ok()) return;
m_backgroundBrush.GetColour().CalcPixel( m_cmap );
gdk_gc_set_background( m_brushGC, m_backgroundBrush.GetColour().GetColor() );
gdk_gc_set_foreground( m_bgGC, m_backgroundBrush.GetColour().GetColor() );
GdkFill fillStyle = GDK_SOLID;
switch (m_backgroundBrush.GetStyle())
{
case wxSOLID:
case wxTRANSPARENT:
break;
default:
fillStyle = GDK_STIPPLED;
};
gdk_gc_set_fill( m_bgGC, fillStyle );
if (m_backgroundBrush.GetStyle() == wxSTIPPLE)
{
gdk_gc_set_stipple( m_bgGC, m_backgroundBrush.GetStipple()->GetPixmap() );
};
if (IS_HATCH(m_backgroundBrush.GetStyle()))
{
int num = m_backgroundBrush.GetStyle() - wxBDIAGONAL_HATCH;
gdk_gc_set_stipple( m_bgGC, hatches[num] );
};
};
void wxPaintDC::SetLogicalFunction( int function )
{
if (m_logicalFunction == function) return;
@@ -693,6 +733,14 @@ void wxPaintDC::SetTextBackground( const wxColour &col )
void wxPaintDC::SetBackgroundMode( int mode )
{
m_backgroundMode = mode;
// CMB 21/7/98: fill style of cross-hatch brushes is affected by
// transparent/solid background mode
if (m_brush.GetStyle() != wxSOLID && m_brush.GetStyle() != wxTRANSPARENT)
{
gdk_gc_set_fill( m_brushGC,
(m_backgroundMode == wxTRANSPARENT) ? GDK_STIPPLED : GDK_OPAQUE_STIPPLED);
}
};
void wxPaintDC::SetPalette( const wxPalette& WXUNUSED(palette) )

View File

@@ -77,7 +77,9 @@ wxFrame::wxFrame()
m_doingOnSize = FALSE;
m_frameMenuBar = NULL;
m_frameStatusBar = NULL;
m_frameToolBar = NULL;
m_sizeSet = FALSE;
m_addPrivateChild = FALSE;
wxTopLevelWindows.Insert( this );
};
@@ -85,7 +87,12 @@ wxFrame::wxFrame( wxWindow *parent, wxWindowID id, const wxString &title,
const wxPoint &pos, const wxSize &size,
long style, const wxString &name )
{
m_doingOnSize = FALSE;
m_frameMenuBar = NULL;
m_frameStatusBar = NULL;
m_frameToolBar = NULL;
m_sizeSet = FALSE;
m_addPrivateChild = FALSE;
Create( parent, id, title, pos, size, style, name );
wxTopLevelWindows.Insert( this );
};
@@ -131,9 +138,6 @@ bool wxFrame::Create( wxWindow *parent, wxWindowID id, const wxString &title,
gtk_container_add( GTK_CONTAINER(m_mainWindow), m_wxwindow );
m_frameMenuBar = NULL;
m_frameStatusBar = NULL;
gtk_signal_connect( GTK_OBJECT(m_widget), "size_allocate",
GTK_SIGNAL_FUNC(gtk_frame_size_callback), (gpointer)this );
@@ -195,6 +199,12 @@ void wxFrame::GetClientSize( int *width, int *height ) const
{
if (m_frameMenuBar) (*height) -= wxMENU_HEIGHT;
if (m_frameStatusBar) (*height) -= wxSTATUS_HEIGHT;
if (m_frameToolBar)
{
int y = 0;
m_frameToolBar->GetSize( NULL, &y );
(*height) -= y;
}
};
};
@@ -236,6 +246,12 @@ void wxFrame::GtkOnSize( int x, int y, int width, int height )
main_height -= wxMENU_HEIGHT;
};
int toolbar_height = 0;
if (m_frameToolBar) m_frameToolBar->GetSize( NULL, &toolbar_height );
main_y += toolbar_height;
main_height -= toolbar_height;
gtk_widget_set_uposition( GTK_WIDGET(m_wxwindow), main_x, main_y );
gtk_widget_set_usize( GTK_WIDGET(m_wxwindow), main_width, main_height );
@@ -245,6 +261,12 @@ void wxFrame::GtkOnSize( int x, int y, int width, int height )
gtk_widget_set_usize( m_frameMenuBar->m_widget, width-2, wxMENU_HEIGHT-2 );
};
if (m_frameToolBar)
{
gtk_widget_set_uposition( m_frameToolBar->m_widget, 1, wxMENU_HEIGHT );
gtk_widget_set_usize( m_frameToolBar->m_widget, width-2, toolbar_height );
};
if (m_frameStatusBar)
{
m_frameStatusBar->SetSize( 0, main_height-wxSTATUS_HEIGHT, width, wxSTATUS_HEIGHT );
@@ -265,7 +287,7 @@ void wxFrame::OnSize( wxSizeEvent &WXUNUSED(event) )
// no child: go out !
if (!GetChildren()->First())
return;
// do we have exactly one child?
wxWindow *child = NULL;
for(wxNode *node = GetChildren()->First(); node; node = node->Next())
@@ -273,8 +295,9 @@ void wxFrame::OnSize( wxSizeEvent &WXUNUSED(event) )
wxWindow *win = (wxWindow *)node->Data();
if (!win->IsKindOf(CLASSINFO(wxFrame)) &&
!win->IsKindOf(CLASSINFO(wxDialog))
#if 0 // not in m_children anyway
#if 0 // not in m_children anyway
&& (win != m_frameMenuBar) &&
(win != m_frameToolBar) &&
(win != m_frameStatusBar)
#endif
)
@@ -293,6 +316,25 @@ void wxFrame::OnSize( wxSizeEvent &WXUNUSED(event) )
}
};
void wxFrame::AddChild( wxWindow *child )
{
if (m_addPrivateChild)
{
gtk_myfixed_put( GTK_MYFIXED(m_mainWindow), child->m_widget, child->m_x, child->m_y );
gtk_widget_set_usize( child->m_widget, child->m_width, child->m_height );
}
else
{
m_children.Append( child );
if (m_wxwindow)
gtk_myfixed_put( GTK_MYFIXED(m_wxwindow), child->m_widget, child->m_x, child->m_y );
gtk_widget_set_usize( child->m_widget, child->m_width, child->m_height );
}
};
static void SetInvokingWindow( wxMenu *menu, wxWindow *win )
{
menu->SetInvokingWindow( win );
@@ -329,6 +371,27 @@ void wxFrame::SetMenuBar( wxMenuBar *menuBar )
}
};
wxMenuBar *wxFrame::GetMenuBar(void)
{
return m_frameMenuBar;
};
wxToolBar *wxFrame::CreateToolBar( int style, int WXUNUSED(orientation), int WXUNUSED(rowsOrColumns) )
{
m_addPrivateChild = TRUE;
m_frameToolBar = new wxToolBar( this, -1, wxDefaultPosition, wxDefaultSize, style );
m_addPrivateChild = FALSE;
return m_frameToolBar;
};
wxToolBar *wxFrame::GetToolBar(void)
{
return m_frameToolBar;
};
bool wxFrame::CreateStatusBar( int number )
{
if (m_frameStatusBar)
@@ -350,25 +413,20 @@ void wxFrame::SetStatusWidths( int n, int *width )
if (m_frameStatusBar) m_frameStatusBar->SetStatusWidths( n, width );
};
wxStatusBar *wxFrame::GetStatusBar()
wxStatusBar *wxFrame::GetStatusBar(void)
{
return m_frameStatusBar;
};
wxMenuBar *wxFrame::GetMenuBar()
{
return m_frameMenuBar;
};
void wxFrame::SetTitle( const wxString &title )
{
m_title = title;
gtk_window_set_title( GTK_WINDOW(m_widget), title );
};
void wxFrame::SetSizeHints(int minW, int minH, int maxW, int maxH, int incW)
void wxFrame::SetSizeHints(int minW, int minH, int maxW, int maxH, int WXUNUSED(incW) )
{
// VZ: I don't know a way to set the max size for the window in GTK and have
// no idea about what incW might be
gtk_widget_set_usize(m_widget, minW, minH);
if (m_wxwindow)
gdk_window_set_hints( m_wxwindow->window, -1, -1,
minW, minH, maxW, maxH, GDK_HINT_MIN_SIZE | GDK_HINT_MIN_SIZE );
}

View File

@@ -69,7 +69,6 @@ wxMDIParentFrame::wxMDIParentFrame(void)
m_clientWindow = NULL;
m_currentChild = NULL;
m_parentFrameActive = TRUE;
m_toolBar = NULL;
};
wxMDIParentFrame::wxMDIParentFrame( wxWindow *parent,
@@ -80,7 +79,6 @@ wxMDIParentFrame::wxMDIParentFrame( wxWindow *parent,
m_clientWindow = NULL;
m_currentChild = NULL;
m_parentFrameActive = TRUE;
m_toolBar = NULL;
Create( parent, id, title, pos, size, style, name );
};
@@ -132,16 +130,6 @@ void wxMDIParentFrame::GetClientSize(int *width, int *height ) const
wxFrame::GetClientSize( width, height );
};
void wxMDIParentFrame::SetToolBar( wxToolBar *toolbar )
{
m_toolBar = toolbar;
};
wxWindow *wxMDIParentFrame::GetToolBar(void) const
{
return m_toolBar;
};
wxMDIChildFrame *wxMDIParentFrame::GetActiveChild(void) const
{
return m_currentChild;
@@ -250,7 +238,8 @@ static void SetInvokingWindow( wxMenu *menu, wxWindow *win )
while (node)
{
wxMenuItem *menuitem = (wxMenuItem*)node->Data();
if (menuitem->GetSubMenu()) SetInvokingWindow( menuitem->GetSubMenu(), win );
if (menuitem->IsSubMenu())
SetInvokingWindow( menuitem->GetSubMenu(), win );
node = node->Next();
};
};
@@ -346,7 +335,7 @@ void wxMDIClientWindow::AddChild( wxWindow *child )
gtk_signal_connect( GTK_OBJECT(child->m_widget), "size_allocate",
GTK_SIGNAL_FUNC(gtk_page_size_callback), (gpointer)child );
gtk_notebook_append_page( GTK_NOTEBOOK(m_widget), child->m_widget, label_widget );
mdi_child->m_page = (GtkNotebookPage*) (g_list_last(GTK_NOTEBOOK(m_widget)->children)->data);

View File

@@ -106,9 +106,17 @@ bool wxToolBar::Create( wxWindow *parent, wxWindowID id,
bool wxToolBar::OnLeftClick( int toolIndex, bool toggleDown )
{
wxCommandEvent event( wxEVENT_TYPE_MENU_COMMAND, toolIndex );
event.SetEventObject( this );
event.SetInt( toolIndex );
event.SetExtraLong( (long) toggleDown);
/*
wxCommandEvent event(wxEVT_COMMAND_TOOL_CLICKED, toolIndex);
event.SetEventObject(this);
event.SetInt( toolIndex );
event.SetExtraLong((long) toggleDown);
*/
GetEventHandler()->ProcessEvent(event);
@@ -117,8 +125,9 @@ bool wxToolBar::OnLeftClick( int toolIndex, bool toggleDown )
void wxToolBar::OnRightClick( int toolIndex, float WXUNUSED(x), float WXUNUSED(y) )
{
wxCommandEvent event(wxEVT_COMMAND_TOOL_RCLICKED, toolIndex);
event.SetEventObject(this);
wxCommandEvent event( wxEVENT_TYPE_MENU_COMMAND, toolIndex );
event.SetEventObject( this );
event.SetInt( toolIndex );
GetEventHandler()->ProcessEvent(event);
};
@@ -127,6 +136,7 @@ void wxToolBar::OnMouseEnter( int toolIndex )
{
wxCommandEvent event(wxEVT_COMMAND_TOOL_ENTER, toolIndex);
event.SetEventObject(this);
event.SetInt( toolIndex );
GetEventHandler()->ProcessEvent(event);
};
@@ -169,6 +179,29 @@ void wxToolBar::ClearTools(void)
{
};
void wxToolBar::Layout(void)
{
m_x = 0;
m_y = 0;
m_width = 100;
m_height = 0;
wxNode *node = m_tools.First();
while (node)
{
wxToolBarTool *tool = (wxToolBarTool*)node->Data();
if (tool->m_bitmap1.Ok())
{
int tool_height = tool->m_bitmap1.GetHeight();
if (tool_height > m_height) m_height = tool_height;
};
node = node->Next();
};
m_height += 10;
};
void wxToolBar::EnableTool(int toolIndex, bool enable)
{
};

View File

@@ -308,7 +308,7 @@ void wxTextCtrl::OnChar( wxKeyEvent &WXUNUSED(event) )
{
};
int wxTextCtrl::overflow(int c)
int wxTextCtrl::overflow( int WXUNUSED(c) )
{
int len = pptr() - pbase();
char *txt = new char[len+1];

View File

@@ -1417,7 +1417,6 @@ void wxWindow::SetFocus(void)
bool wxWindow::OnClose(void)
{
printf( "OnClose event.\n" );
return TRUE;
};
@@ -1431,6 +1430,21 @@ void wxWindow::AddChild( wxWindow *child )
// for wxFrame, wxDialog, wxWindow and
// wxMDIParentFrame.
// wxFrame and wxDialog as children aren't placed into the parents
if (child->IsKindOf(CLASSINFO(wxFrame)) || child->IsKindOf(CLASSINFO(wxDialog)))
{
m_children.Append( child );
if ((child->m_x != -1) && (child->m_y != -1))
gtk_widget_set_uposition( child->m_widget, child->m_x, child->m_y );
return;
}
// In the case of an wxMDIChildFrame descendant, we use the
// client windows's AddChild()
if (IsKindOf(CLASSINFO(wxMDIParentFrame)))
{
if (child->IsKindOf(CLASSINFO(wxMDIChildFrame)))
@@ -1440,30 +1454,32 @@ void wxWindow::AddChild( wxWindow *child )
{
client->AddChild( child );
return;
};
};
};
}
}
}
// wxNotebooks are very special, so they have their own AddChild
// wxNotebook is very special, so it has a private AddChild()
if (IsKindOf(CLASSINFO(wxNotebook)))
{
wxNotebook *tab = (wxNotebook*)this;
tab->AddChild( child );
return;
};
}
// wxFrame has a private AddChild
if (IsKindOf(CLASSINFO(wxFrame)))
{
wxFrame *frame = (wxFrame*)this;
frame->AddChild( child );
return;
}
// All the rest
m_children.Append( child );
if (child->IsKindOf(CLASSINFO(wxFrame)) || child->IsKindOf(CLASSINFO(wxDialog)))
{
if ((child->m_x != -1) && (child->m_y != -1))
gtk_widget_set_uposition( child->m_widget, child->m_x, child->m_y );
}
else
{
if (m_wxwindow)
gtk_myfixed_put( GTK_MYFIXED(m_wxwindow), child->m_widget, child->m_x, child->m_y );
};
if (m_wxwindow) gtk_myfixed_put( GTK_MYFIXED(m_wxwindow), child->m_widget, child->m_x, child->m_y );
gtk_widget_set_usize( child->m_widget, child->m_width, child->m_height );
};