new sample: statbar

git-svn-id: https://svn.wxwidgets.org/svn/wx/wxWidgets/trunk@5841 c3d73ce0-8a6f-49c7-b76d-6d57e0e08775
This commit is contained in:
Vadim Zeitlin
2000-02-04 20:27:10 +00:00
parent 14e40b5aac
commit 2286341c8d
28 changed files with 689 additions and 35 deletions

View File

@@ -919,6 +919,11 @@ SAMPLES_DIST: ALL_GUI_DIST
cp $(SAMPDIR)/splitter/Makefile.in $(DISTDIR)/samples/splitter cp $(SAMPDIR)/splitter/Makefile.in $(DISTDIR)/samples/splitter
cp $(SAMPDIR)/splitter/*.cpp $(DISTDIR)/samples/splitter cp $(SAMPDIR)/splitter/*.cpp $(DISTDIR)/samples/splitter
mkdir $(DISTDIR)/samples/statbar
cp $(SAMPDIR)/statbar/Makefile.in $(DISTDIR)/samples/statbar
cp $(SAMPDIR)/statbar/*.cpp $(DISTDIR)/samples/statbar
cp $(SAMPDIR)/statbar/*.xpm $(DISTDIR)/samples/statbar
mkdir $(DISTDIR)/samples/text mkdir $(DISTDIR)/samples/text
cp $(SAMPDIR)/text/Makefile.in $(DISTDIR)/samples/text cp $(SAMPDIR)/text/Makefile.in $(DISTDIR)/samples/text
cp $(SAMPDIR)/text/makefile.unx $(DISTDIR)/samples/text cp $(SAMPDIR)/text/makefile.unx $(DISTDIR)/samples/text

6
configure vendored
View File

@@ -12853,6 +12853,8 @@ if test "$wxUSE_STATUSBAR" = "yes"; then
#define wxUSE_STATUSBAR 1 #define wxUSE_STATUSBAR 1
EOF EOF
SAMPLES_SUBDIRS="$SAMPLES_SUBDIRS statbar"
fi fi
if test "$wxUSE_TABDIALOG" = "yes"; then if test "$wxUSE_TABDIALOG" = "yes"; then
@@ -13126,7 +13128,7 @@ SAMPLES_SUBDIRS="`echo $SAMPLES_SUBDIRS | tr -s ' ' | tr ' ' '\n' | sort | uniq
echo $ac_n "checking whether ${MAKE-make} sets \${MAKE}""... $ac_c" 1>&6 echo $ac_n "checking whether ${MAKE-make} sets \${MAKE}""... $ac_c" 1>&6
echo "configure:13130: checking whether ${MAKE-make} sets \${MAKE}" >&5 echo "configure:13132: checking whether ${MAKE-make} sets \${MAKE}" >&5
set dummy ${MAKE-make}; ac_make=`echo "$2" | sed 'y%./+-%__p_%'` set dummy ${MAKE-make}; ac_make=`echo "$2" | sed 'y%./+-%__p_%'`
if eval "test \"`echo '$''{'ac_cv_prog_make_${ac_make}_set'+set}'`\" = set"; then if eval "test \"`echo '$''{'ac_cv_prog_make_${ac_make}_set'+set}'`\" = set"; then
echo $ac_n "(cached) $ac_c" 1>&6 echo $ac_n "(cached) $ac_c" 1>&6
@@ -13157,7 +13159,7 @@ fi
if test "$wxUSE_GUI" = "yes"; then if test "$wxUSE_GUI" = "yes"; then
echo $ac_n "checking glcanvas subdirectory to use""... $ac_c" 1>&6 echo $ac_n "checking glcanvas subdirectory to use""... $ac_c" 1>&6
echo "configure:13161: checking glcanvas subdirectory to use" >&5 echo "configure:13163: checking glcanvas subdirectory to use" >&5
if eval "test \"`echo '$''{'wx_cv_path_glcanvas'+set}'`\" = set"; then if eval "test \"`echo '$''{'wx_cv_path_glcanvas'+set}'`\" = set"; then
echo $ac_n "(cached) $ac_c" 1>&6 echo $ac_n "(cached) $ac_c" 1>&6
else else

View File

@@ -3068,6 +3068,8 @@ fi
if test "$wxUSE_STATUSBAR" = "yes"; then if test "$wxUSE_STATUSBAR" = "yes"; then
AC_DEFINE(wxUSE_STATUSBAR) AC_DEFINE(wxUSE_STATUSBAR)
SAMPLES_SUBDIRS="$SAMPLES_SUBDIRS statbar"
fi fi
if test "$wxUSE_TABDIALOG" = "yes"; then if test "$wxUSE_TABDIALOG" = "yes"; then

View File

@@ -35,7 +35,7 @@ from an {\bf OnSize} event handler.
\wxheading{See also} \wxheading{See also}
\helpref{wxFrame}{wxframe} \helpref{wxFrame}{wxframe}, \helpref{Status bar sample}{samplestatbar}
\latexignore{\rtfignore{\wxheading{Members}}} \latexignore{\rtfignore{\wxheading{Members}}}

View File

@@ -294,6 +294,16 @@ The sockets sample is work in progress. Coming soon:
\end{itemize} \end{itemize}
\subsection{Statbar sample}\label{samplestatbar}
This sample shows how to create and use wxStaticBar. Although most of the
samples have a statusbar, they usually only create a default one and only
do it once.
Here you can see how to recreate the statusbar (with possibly different number
of fields) and how to use it to show icons/bitmaps and/or put arbitrary
controls into it.
\subsection{Text sample}\label{sampletext} \subsection{Text sample}\label{sampletext}
This sample demonstrates four features: firstly the use and many variants of This sample demonstrates four features: firstly the use and many variants of

4
samples/configure vendored
View File

@@ -1,6 +1,6 @@
#! /bin/sh #! /bin/sh
# From configure.in Id # From configure.in Id: configure.in
# Guess values for system-dependent variables and create Makefiles. # Guess values for system-dependent variables and create Makefiles.
# Generated automatically using autoconf version 2.13 # Generated automatically using autoconf version 2.13
# Copyright (C) 1992, 93, 94, 95, 96 Free Software Foundation, Inc. # Copyright (C) 1992, 93, 94, 95, 96 Free Software Foundation, Inc.
@@ -674,6 +674,7 @@ trap 'rm -fr `echo "
scroll/Makefile scroll/Makefile
scrollsub/Makefile scrollsub/Makefile
splitter/Makefile splitter/Makefile
statbar/Makefile
text/Makefile text/Makefile
thread/Makefile thread/Makefile
toolbar/Makefile toolbar/Makefile
@@ -802,6 +803,7 @@ CONFIG_FILES=\${CONFIG_FILES-"Makefile
scroll/Makefile scroll/Makefile
scrollsub/Makefile scrollsub/Makefile
splitter/Makefile splitter/Makefile
statbar/Makefile
text/Makefile text/Makefile
thread/Makefile thread/Makefile
toolbar/Makefile toolbar/Makefile

View File

@@ -42,6 +42,7 @@ AC_OUTPUT([
scroll/Makefile scroll/Makefile
scrollsub/Makefile scrollsub/Makefile
splitter/Makefile splitter/Makefile
statbar/Makefile
text/Makefile text/Makefile
thread/Makefile thread/Makefile
toolbar/Makefile toolbar/Makefile

View File

@@ -0,0 +1,13 @@
# Purpose: makefile for statbar example (UNIX).
# Created: 2000-02-04
top_srcdir = @top_srcdir@/..
top_builddir = ../..
program_dir = samples/statbar
PROGRAM=statbar
OBJECTS=$(PROGRAM).o
include ../../src/makeprog.env

BIN
samples/statbar/green.bmp Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.9 KiB

28
samples/statbar/green.xpm Normal file
View File

@@ -0,0 +1,28 @@
/* XPM */
static char *green_xpm[] = {
/* columns rows colors chars-per-pixel */
"32 15 7 1",
" c Gray0",
". c #7b7b00000000",
"X c #7b7b7b7b7b7b",
"o c Green",
"O c Red",
"+ c None",
"@ c Gray100",
/* pixels */
"++++++++++++++++++++++++++++++++",
"++++++++++++++++++++++++++++++++",
"++++++++++++++++++++++++++++++++",
"++++++++X X++++++X X++++++",
"+++++++ oooo ++++ +++++",
"++++++X +@oooo X++X O@ .X++++",
"++++++ o@+ooooo ++ @O .. ++++",
"++++++ oooooooo ++ .. ++++",
"++++++ oooooo+o X+ .O. X+++",
"++++++ ooooo++o X+ .OO. X+++",
"++++++X ooo++o XX+X ..OO. XX+++",
"+++++++ oooo XXX+ ..... XXX++",
"++++++++X XXXX+++X XXXX+++",
"+++++++++++XXXXXX++++++XXXXXX+++",
"++++++++++++++X+++++++++++X+++++",
};

View File

@@ -0,0 +1,10 @@
# Purpose: makefile for statbar example (BC++ 32bit)
# Created: 2000-02-04
WXDIR = $(WXWIN)
TARGET=statbar
OBJECTS = $(TARGET).obj
!include $(WXDIR)\src\makeprog.b32

View File

@@ -0,0 +1,14 @@
# Purpose: makefile for statbar example (BC++ 16bit)
# Created: 2000-02-04
!if "$(WXWIN)" == ""
!error You must define the WXWIN variable in autoexec.bat, e.g. WXWIN=c:\wx
!endif
WXDIR = $(WXWIN)
TARGET=statbar
OBJECTS=$(TARGET).obj
!include $(WXDIR)\src\makeprog.bcc

View File

@@ -0,0 +1,10 @@
# Purpose: makefile for statbar example (VC++ 1.5x)
# Created: 2000-02-04
WXDIR = $(WXWIN)
TARGET=statbar
OBJECTS=$(TARGET).obj
!include $(WXDIR)\src\makeprog.msc

View File

@@ -0,0 +1,10 @@
# Purpose: makefile for statbar example (Cygwin/Mingw32)
# Created: #03.01.00
WXDIR = ../..
TARGET=statbar
OBJECTS = $(TARGET).o
include $(WXDIR)\src\makeprog.g95

View File

@@ -0,0 +1,37 @@
# Purpose: makefile for statbar example (Symantec C++)
# Created: 2000-02-04
WXDIR = $(WXWIN)
WXLIB = $(WXDIR)\lib\wx.lib
INCDIR = $(WXDIR)\include
INCLUDE=$(INCDIR)
TARGET=statbar
include $(WXDIR)\src\makesc.env
statbar.exe: statbar.obj $(DEFFILE) statbar.res
*$(CC) $(LDFLAGS) -o$@ $** $(LIBS)
*$(RC) -k statbar.res
sc32.def:
echo EXETYPE NT > sc32.def
echo SUBSYSTEM WINDOWS >> sc32.def
sc16.def:
echo NAME $(TARGET) > sc16.def
echo EXETYPE WINDOWS >> sc16.def
echo STUB 'WINSTUB.EXE' >> sc16.def
echo CODE PRELOAD MOVEABLE DISCARDABLE >> sc16.def
echo DATA PRELOAD MOVEABLE MULTIPLE >> sc16.def
echo HEAPSIZE 1024 >> sc16.def
echo STACKSIZE 8192 >> sc16.def
clean:
-del *.obj
-del *.exe
-del *.res
-del *.map
-del *.rws
-del sc32.def
-del sc16.def

View File

@@ -0,0 +1,14 @@
# Purpose: makefile for statbar example (Salford C++)
# Created: 2000-02-04
PROGRAM = statbar
OBJECTS = $(PROGRAM).obj
include ..\..\src\makeprog.sl
all: wx $(TARGET)
wx:
cd $(WXDIR)\src\msw ^ mk32 -f makefile.sl all
cd $(WXDIR)\samples\statbar

View File

@@ -0,0 +1,35 @@
# Purpose: makefile for statbar example (TWIN)
# Created: 2000-02-04
WXDIR = ../..
# All common UNIX compiler flags and options are now in
# this central makefile.
include $(WXDIR)/src/maketwin.env
OBJECTS = $(OBJDIR)/statbar.$(OBJSUFF) $(OBJDIR)/statbar.$(OBJSUFF)
all: $(OBJDIR) statbar$(GUISUFFIX)$(EXESUFF)
wx:
$(OBJDIR):
mkdir $(OBJDIR)
statbar$(GUISUFFIX)$(EXESUFF): $(OBJECTS) $(WXLIB)
$(CC) $(LDFLAGS) -o statbar$(GUISUFFIX)$(EXESUFF) $(OBJECTS) $(LDLIBS)
$(OBJDIR)/statbar.$(OBJSUFF): statbar.$(SRCSUFF)
$(CC) -c $(CPPFLAGS) -o $@ statbar.$(SRCSUFF)
statbar.c: statbar.rc
$(RESCOMP) $(RCINPUTSWITCH) statbar.rc $(RCOUTPUTSWITCH) statbar.c $(RESFLAGS)
$(OBJDIR)/statbar.$(OBJSUFF): statbar.c
$(CC) -c $(CPPFLAGS) -o $@ statbar.c
#$(OBJDIR)/statbar.o: statbar.rc
# $(RESCOMP) $(RCINPUTSWITCH) statbar.rc $(RCOUTPUTSWITCH) $(OBJDIR)/statbar.o $(RESFLAGS)
clean:
rm -f $(OBJECTS) statbar$(GUISUFFIX).exe core *.rsc *.res

View File

@@ -0,0 +1,23 @@
# Purpose: makefile for statbar example (Unix)
# Created: 2000-02-04
CC = gcc
PROGRAM = statbar
OBJECTS = $(PROGRAM).o
# implementation
.SUFFIXES: .o .cpp
.cpp.o :
$(CC) -c `wx-config --cflags` -o $@ $<
all: $(PROGRAM)
$(PROGRAM): $(OBJECTS)
$(CC) -o $(PROGRAM) $(OBJECTS) `wx-config --libs`
clean:
rm -f *.o $(PROGRAM)

View File

@@ -0,0 +1,11 @@
# Purpose: makefile for statbar example (VC++ 32bit)
# Created: 2000-02-04
# Set WXDIR for your system
WXDIR = $(WXWIN)
PROGRAM=statbar
OBJECTS = $(PROGRAM).obj
!include $(WXDIR)\src\makeprog.vc

View File

@@ -0,0 +1,11 @@
# Purpose: makefile for statbar example (Watcom)
# Created: 2000-02-04
WXDIR = $(%WXWIN)
PROGRAM = statbar
OBJECTS = $(PROGRAM).obj
!include $(WXDIR)\src\makeprog.wat

BIN
samples/statbar/red.bmp Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.9 KiB

29
samples/statbar/red.xpm Normal file
View File

@@ -0,0 +1,29 @@
/* XPM */
static char *red_xpm[] = {
/* columns rows colors chars-per-pixel */
"32 15 8 1",
" c Gray0",
". c #00007b7b7b7b",
"X c #7b7b7b7b7b7b",
"o c Green",
"O c Red",
"+ c Yellow",
"@ c None",
"# c Gray100",
/* pixels */
"@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@",
"@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@",
"@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@",
"@@@@@@@@X X@@@@@@X X@@@@@@",
"@@@@@@@ @@@@ OOOO @@@@@",
"@@@@@@X o# .X@@X +#OOOO X@@@@",
"@@@@@@ #o .. @@ O#+OOOOO @@@@",
"@@@@@@ .. @@ OOOOOOOO @@@@",
"@@@@@@ .o. X@ OOOOOO+O X@@@",
"@@@@@@ .oo. X@ OOOOO++O X@@@",
"@@@@@@X ..oo. XX@X OOO++O XX@@@",
"@@@@@@@ ..... XXX@ OOOO XXX@@",
"@@@@@@@@X XXXX@@@X XXXX@@@",
"@@@@@@@@@@@XXXXXX@@@@@@XXXXXX@@@",
"@@@@@@@@@@@@@@X@@@@@@@@@@@X@@@@@"
};

381
samples/statbar/statbar.cpp Normal file
View File

@@ -0,0 +1,381 @@
/////////////////////////////////////////////////////////////////////////////
// Name: statbar.cpp
// Purpose: wxStatusBar sample
// Author: Vadim Zeitlin
// Modified by:
// Created: 04.02.00
// RCS-ID: $Id$
// Copyright: (c) Vadim Zeitlin
// Licence: wxWindows licence
/////////////////////////////////////////////////////////////////////////////
// ============================================================================
// declarations
// ============================================================================
// ----------------------------------------------------------------------------
// headers
// ----------------------------------------------------------------------------
#ifdef __GNUG__
#pragma implementation "statbar.cpp"
#pragma interface "statbar.cpp"
#endif
// For compilers that support precompilation, includes "wx/wx.h".
#include "wx/wxprec.h"
#ifdef __BORLANDC__
#pragma hdrstop
#endif
#if !wxUSE_STATUSBAR
#error "You need to set wxUSE_STATUSBAR to 1 to compile this sample"
#endif // wxUSE_STATUSBAR
// for all others, include the necessary headers (this file is usually all you
// need because it includes almost all "standard" wxWindows headers
#ifndef WX_PRECOMP
#include "wx/app.h"
#include "wx/frame.h"
#include "wx/statusbr.h"
#include "wx/datetime.h"
#include "wx/timer.h"
#include "wx/checkbox.h"
#include "wx/statbmp.h"
#include "wx/menu.h"
#include "wx/msgdlg.h"
#endif
// ----------------------------------------------------------------------------
// resources
// ----------------------------------------------------------------------------
#include "green.xpm"
#include "red.xpm"
// ----------------------------------------------------------------------------
// private classes
// ----------------------------------------------------------------------------
// Define a new application type, each program should derive a class from wxApp
class MyApp : public wxApp
{
public:
// override base class virtuals
// ----------------------------
// this one is called on application startup and is a good place for the app
// initialization (doing it here and not in the ctor allows to have an error
// return: if OnInit() returns false, the application terminates)
virtual bool OnInit();
};
// A custom status bar which contains controls, icons &c
class MyStatusBar : public wxStatusBar
{
public:
MyStatusBar(wxWindow *parent);
virtual ~MyStatusBar();
void UpdateClock();
// event handlers
void OnSize(wxSizeEvent& event);
void OnToggleClock(wxCommandEvent& event);
private:
enum
{
Field_Text,
Field_Checkbox,
Field_Bitmap,
Field_Clock,
Field_Max
};
class MyTimer : public wxTimer
{
public:
MyTimer(MyStatusBar *statbar) {m_statbar = statbar; }
virtual void Notify() { m_statbar->UpdateClock(); }
private:
MyStatusBar *m_statbar;
} m_timer;
wxCheckBox *m_checkbox;
wxStaticBitmap *m_statbmp;
DECLARE_EVENT_TABLE()
};
// Define a new frame type: this is going to be our main frame
class MyFrame : public wxFrame
{
public:
// ctor(s)
MyFrame(const wxString& title, const wxPoint& pos, const wxSize& size);
virtual ~MyFrame();
// event handlers (these functions should _not_ be virtual)
void OnQuit(wxCommandEvent& event);
void OnAbout(wxCommandEvent& event);
void OnRecreateStatusBar(wxCommandEvent& event);
private:
enum StatBarKind
{
StatBar_Default,
StatBar_Custom,
StatBar_Max
} m_statbarKind;
void DoCreateStatusBar(StatBarKind kind);
wxStatusBar *m_statbarDefault;
MyStatusBar *m_statbarCustom;
// any class wishing to process wxWindows events must use this macro
DECLARE_EVENT_TABLE()
};
// ----------------------------------------------------------------------------
// constants
// ----------------------------------------------------------------------------
// IDs for the controls and the menu commands
enum
{
// menu items
StatusBar_Quit = 1,
StatusBar_Recreate,
StatusBar_About,
StatusBar_Checkbox = 1000
};
static const int BITMAP_SIZE_X = 32;
static const int BITMAP_SIZE_Y = 15;
// ----------------------------------------------------------------------------
// event tables and other macros for wxWindows
// ----------------------------------------------------------------------------
// the event tables connect the wxWindows events with the functions (event
// handlers) which process them. It can be also done at run-time, but for the
// simple menu events like this the static method is much simpler.
BEGIN_EVENT_TABLE(MyFrame, wxFrame)
EVT_MENU(StatusBar_Quit, MyFrame::OnQuit)
EVT_MENU(StatusBar_Recreate, MyFrame::OnRecreateStatusBar)
EVT_MENU(StatusBar_About, MyFrame::OnAbout)
END_EVENT_TABLE()
BEGIN_EVENT_TABLE(MyStatusBar, wxStatusBar)
EVT_SIZE(MyStatusBar::OnSize)
EVT_CHECKBOX(StatusBar_Checkbox, MyStatusBar::OnToggleClock)
END_EVENT_TABLE()
// Create a new application object: this macro will allow wxWindows to create
// the application object during program execution (it's better than using a
// static object for many reasons) and also declares the accessor function
// wxGetApp() which will return the reference of the right type (i.e. MyApp and
// not wxApp)
IMPLEMENT_APP(MyApp)
// ============================================================================
// implementation
// ============================================================================
// ----------------------------------------------------------------------------
// the application class
// ----------------------------------------------------------------------------
// `Main program' equivalent: the program execution "starts" here
bool MyApp::OnInit()
{
// create the main application window
MyFrame *frame = new MyFrame("wxStatusBar sample",
wxPoint(50, 50), wxSize(450, 340));
// and show it (the frames, unlike simple controls, are not shown when
// created initially)
frame->Show(TRUE);
// success: wxApp::OnRun() will be called which will enter the main message
// loop and the application will run. If we returned FALSE here, the
// application would exit immediately.
return TRUE;
}
// ----------------------------------------------------------------------------
// main frame
// ----------------------------------------------------------------------------
// frame constructor
MyFrame::MyFrame(const wxString& title, const wxPoint& pos, const wxSize& size)
: wxFrame((wxFrame *)NULL, -1, title, pos, size)
{
m_statbarDefault = NULL;
m_statbarCustom = NULL;
#ifdef __WXMAC__
// we need this in order to allow the about menu relocation, since ABOUT is
// not the default id of the about menu
wxApp::s_macAboutMenuItemId = StatusBar_About;
#endif
// create a menu bar
wxMenu *menuFile = new wxMenu;
menuFile->Append(StatusBar_Quit, "E&xit\tAlt-X", "Quit this program");
wxMenu *statbarMenu = new wxMenu;
statbarMenu->Append(StatusBar_Recreate, "&Recreate\tCtrl-R",
"Toggle status bar format");
wxMenu *helpMenu = new wxMenu;
helpMenu->Append(StatusBar_About, "&About...\tCtrl-A", "Show about dialog");
// now append the freshly created menu to the menu bar...
wxMenuBar *menuBar = new wxMenuBar();
menuBar->Append(menuFile, "&File");
menuBar->Append(statbarMenu, "&Status bar");
menuBar->Append(helpMenu, "&Help");
// ... and attach this menu bar to the frame
SetMenuBar(menuBar);
// create default status bar to start with
CreateStatusBar(2);
SetStatusText("Welcome to wxWindows!");
m_statbarDefault = GetStatusBar();
}
MyFrame::~MyFrame()
{
SetStatusBar(NULL);
delete m_statbarDefault;
delete m_statbarCustom;
}
void MyFrame::DoCreateStatusBar(MyFrame::StatBarKind kind)
{
wxStatusBar *statbarOld = GetStatusBar();
if ( statbarOld )
{
statbarOld->Hide();
}
switch ( kind )
{
case StatBar_Default:
SetStatusBar(m_statbarDefault);
break;
case StatBar_Custom:
if ( !m_statbarCustom )
{
m_statbarCustom = new MyStatusBar(this);
}
SetStatusBar(m_statbarCustom);
break;
default:
wxFAIL_MSG("unknown stat bar kind");
}
PositionStatusBar();
GetStatusBar()->Show();
m_statbarKind = kind;
}
// event handlers
void MyFrame::OnRecreateStatusBar(wxCommandEvent& WXUNUSED(event))
{
DoCreateStatusBar(m_statbarKind == StatBar_Custom ? StatBar_Default
: StatBar_Custom);
}
void MyFrame::OnQuit(wxCommandEvent& WXUNUSED(event))
{
// TRUE is to force the frame to close
Close(TRUE);
}
void MyFrame::OnAbout(wxCommandEvent& WXUNUSED(event))
{
wxMessageBox("wxStatusBar sample\n(c) 2000 Vadim Zeitlin",
"About statbar", wxOK | wxICON_INFORMATION, this);
}
// ----------------------------------------------------------------------------
// MyStatusBar
// ----------------------------------------------------------------------------
MyStatusBar::MyStatusBar(wxWindow *parent)
: wxStatusBar(parent, -1), m_timer(this)
{
static const int widths[Field_Max] = { -1, 150, BITMAP_SIZE_X, 100 };
SetFieldsCount(Field_Max);
SetStatusWidths(Field_Max, widths);
m_checkbox = new wxCheckBox(this, StatusBar_Checkbox, _T("&Toggle clock"));
m_checkbox->SetValue(TRUE);
m_statbmp = new wxStaticBitmap(this, -1, wxICON(green));
m_timer.Start(1000);
UpdateClock();
}
MyStatusBar::~MyStatusBar()
{
if ( m_timer.IsRunning() )
{
m_timer.Stop();
}
}
void MyStatusBar::OnSize(wxSizeEvent& event)
{
wxRect rect;
GetFieldRect(Field_Checkbox, rect);
m_checkbox->SetSize(rect.x + 2, rect.y + 2, rect.width - 4, rect.height - 4);
GetFieldRect(Field_Bitmap, rect);
m_statbmp->Move(rect.x + (rect.width - BITMAP_SIZE_X) / 2,
rect.y + (rect.height - BITMAP_SIZE_Y) / 2);
event.Skip();
}
void MyStatusBar::OnToggleClock(wxCommandEvent& event)
{
if ( m_checkbox->GetValue() )
{
m_timer.Start(1000);
m_statbmp->SetIcon(wxICON(green));
UpdateClock();
}
else // don't show clock
{
m_timer.Stop();
m_statbmp->SetIcon(wxICON(red));
SetStatusText("", Field_Clock);
}
}
void MyStatusBar::UpdateClock()
{
SetStatusText(wxDateTime::Now().FormatTime(), Field_Clock);
}

View File

@@ -189,6 +189,7 @@ void *MyThread::Entry()
text.Printf("Thread 0x%x started (priority = %d).\n", text.Printf("Thread 0x%x started (priority = %d).\n",
GetId(), GetPriority()); GetId(), GetPriority());
WriteText(text); WriteText(text);
// wxLogMessage(text); -- test wxLog thread safeness
for ( m_count = 0; m_count < 10; m_count++ ) for ( m_count = 0; m_count < 10; m_count++ )
{ {
@@ -205,6 +206,7 @@ void *MyThread::Entry()
text.Printf("Thread 0x%x finished.\n", GetId()); text.Printf("Thread 0x%x finished.\n", GetId());
WriteText(text); WriteText(text);
// wxLogMessage(text); -- test wxLog thread safeness
return NULL; return NULL;
} }

View File

@@ -234,7 +234,7 @@ wxLongLong wxGetLocalTimeMillis()
return (val + tp.millitm); return (val + tp.millitm);
} }
#else #else
#warning "wxStopWatch will be up to second resolution!" #warning "wxStopWatch will be up to second resolution!"
#endif #endif
return val; return val;

View File

@@ -118,9 +118,9 @@ void wxWakeUpIdle()
wxMutexGuiEnter(); wxMutexGuiEnter();
#endif #endif
if (g_isIdle) if (g_isIdle)
wxapp_install_idle_handler(); wxapp_install_idle_handler();
#if wxUSE_THREADS #if wxUSE_THREADS
if (!wxThread::IsMain()) if (!wxThread::IsMain())
wxMutexGuiLeave(); wxMutexGuiLeave();
@@ -204,7 +204,7 @@ gint wxapp_wakeup_timerout_callback( gpointer WXUNUSED(data) )
// unblock other threads wishing to do some GUI things // unblock other threads wishing to do some GUI things
wxMutexGuiLeave(); wxMutexGuiLeave();
g_mainThreadLocked = TRUE; g_mainThreadLocked = TRUE;
// wake up other threads // wake up other threads
@@ -219,7 +219,7 @@ gint wxapp_wakeup_timerout_callback( gpointer WXUNUSED(data) )
// release lock again // release lock again
gdk_threads_leave(); gdk_threads_leave();
return TRUE; return TRUE;
} }
@@ -250,7 +250,7 @@ wxApp::wxApp()
#endif #endif
m_colorCube = (unsigned char*) NULL; m_colorCube = (unsigned char*) NULL;
m_useBestVisual = FALSE; m_useBestVisual = FALSE;
} }
@@ -272,7 +272,7 @@ bool wxApp::OnInitGui()
/* on some machines, the default visual is just 256 colours, so /* on some machines, the default visual is just 256 colours, so
we make sure we get the best. this can sometimes be wasteful, we make sure we get the best. this can sometimes be wasteful,
of course, but what do these guys pay $30.000 for? */ of course, but what do these guys pay $30.000 for? */
if ((gdk_visual_get_best() != gdk_visual_get_system()) && if ((gdk_visual_get_best() != gdk_visual_get_system()) &&
(m_useBestVisual)) (m_useBestVisual))
{ {
@@ -356,11 +356,11 @@ bool wxApp::ProcessIdle()
void wxApp::OnIdle( wxIdleEvent &event ) void wxApp::OnIdle( wxIdleEvent &event )
{ {
static bool s_inOnIdle = FALSE; static bool s_inOnIdle = FALSE;
/* Avoid recursion (via ProcessEvent default case) */ /* Avoid recursion (via ProcessEvent default case) */
if (s_inOnIdle) if (s_inOnIdle)
return; return;
s_inOnIdle = TRUE; s_inOnIdle = TRUE;
/* Resend in the main thread events which have been prepared in other /* Resend in the main thread events which have been prepared in other
@@ -512,7 +512,7 @@ void wxApp::CleanUp()
if (wxTheColourDatabase) if (wxTheColourDatabase)
delete wxTheColourDatabase; delete wxTheColourDatabase;
wxTheColourDatabase = (wxColourDatabase*) NULL; wxTheColourDatabase = (wxColourDatabase*) NULL;
wxDeleteStockObjects(); wxDeleteStockObjects();
@@ -565,7 +565,7 @@ int wxEntry( int argc, char *argv[] )
/* GTK 1.2 up to version 1.2.3 has broken threads */ /* GTK 1.2 up to version 1.2.3 has broken threads */
if ((gtk_major_version == 1) && if ((gtk_major_version == 1) &&
(gtk_minor_version == 2) && (gtk_minor_version == 2) &&
(gtk_micro_version < 4)) (gtk_micro_version < 4))
{ {
printf( "wxWindows warning: Disabled GUI threading due to outdated GTK version\n" ); printf( "wxWindows warning: Disabled GUI threading due to outdated GTK version\n" );
} }
@@ -574,7 +574,7 @@ int wxEntry( int argc, char *argv[] )
g_thread_init(NULL); g_thread_init(NULL);
} }
#endif #endif
gtk_set_locale(); gtk_set_locale();
#if wxUSE_WCHAR_T #if wxUSE_WCHAR_T
@@ -613,7 +613,7 @@ int wxEntry( int argc, char *argv[] )
#if wxUSE_UNICODE #if wxUSE_UNICODE
wxTheApp->argv = new wxChar*[argc+1]; wxTheApp->argv = new wxChar*[argc+1];
int mb_argc = 0; int mb_argc = 0;
while (mb_argc < argc) while (mb_argc < argc)
{ {
wxTheApp->argv[mb_argc] = wxStrdup(wxConvLibc.cMB2WX(argv[mb_argc])); wxTheApp->argv[mb_argc] = wxStrdup(wxConvLibc.cMB2WX(argv[mb_argc]));
mb_argc++; mb_argc++;
@@ -654,7 +654,7 @@ int wxEntry( int argc, char *argv[] )
if (wxTheApp->Initialized()) if (wxTheApp->Initialized())
{ {
retValue = wxTheApp->OnRun(); wxTheApp->OnRun();
wxWindow *topWindow = wxTheApp->GetTopWindow(); wxWindow *topWindow = wxTheApp->GetTopWindow();
if (topWindow) if (topWindow)
@@ -672,7 +672,8 @@ int wxEntry( int argc, char *argv[] )
wxTheApp->SetTopWindow( (wxWindow*) NULL ); wxTheApp->SetTopWindow( (wxWindow*) NULL );
} }
} }
wxTheApp->OnExit();
retValue = wxTheApp->OnExit();
} }
} }

View File

@@ -118,9 +118,9 @@ void wxWakeUpIdle()
wxMutexGuiEnter(); wxMutexGuiEnter();
#endif #endif
if (g_isIdle) if (g_isIdle)
wxapp_install_idle_handler(); wxapp_install_idle_handler();
#if wxUSE_THREADS #if wxUSE_THREADS
if (!wxThread::IsMain()) if (!wxThread::IsMain())
wxMutexGuiLeave(); wxMutexGuiLeave();
@@ -204,7 +204,7 @@ gint wxapp_wakeup_timerout_callback( gpointer WXUNUSED(data) )
// unblock other threads wishing to do some GUI things // unblock other threads wishing to do some GUI things
wxMutexGuiLeave(); wxMutexGuiLeave();
g_mainThreadLocked = TRUE; g_mainThreadLocked = TRUE;
// wake up other threads // wake up other threads
@@ -219,7 +219,7 @@ gint wxapp_wakeup_timerout_callback( gpointer WXUNUSED(data) )
// release lock again // release lock again
gdk_threads_leave(); gdk_threads_leave();
return TRUE; return TRUE;
} }
@@ -250,7 +250,7 @@ wxApp::wxApp()
#endif #endif
m_colorCube = (unsigned char*) NULL; m_colorCube = (unsigned char*) NULL;
m_useBestVisual = FALSE; m_useBestVisual = FALSE;
} }
@@ -272,7 +272,7 @@ bool wxApp::OnInitGui()
/* on some machines, the default visual is just 256 colours, so /* on some machines, the default visual is just 256 colours, so
we make sure we get the best. this can sometimes be wasteful, we make sure we get the best. this can sometimes be wasteful,
of course, but what do these guys pay $30.000 for? */ of course, but what do these guys pay $30.000 for? */
if ((gdk_visual_get_best() != gdk_visual_get_system()) && if ((gdk_visual_get_best() != gdk_visual_get_system()) &&
(m_useBestVisual)) (m_useBestVisual))
{ {
@@ -356,11 +356,11 @@ bool wxApp::ProcessIdle()
void wxApp::OnIdle( wxIdleEvent &event ) void wxApp::OnIdle( wxIdleEvent &event )
{ {
static bool s_inOnIdle = FALSE; static bool s_inOnIdle = FALSE;
/* Avoid recursion (via ProcessEvent default case) */ /* Avoid recursion (via ProcessEvent default case) */
if (s_inOnIdle) if (s_inOnIdle)
return; return;
s_inOnIdle = TRUE; s_inOnIdle = TRUE;
/* Resend in the main thread events which have been prepared in other /* Resend in the main thread events which have been prepared in other
@@ -512,7 +512,7 @@ void wxApp::CleanUp()
if (wxTheColourDatabase) if (wxTheColourDatabase)
delete wxTheColourDatabase; delete wxTheColourDatabase;
wxTheColourDatabase = (wxColourDatabase*) NULL; wxTheColourDatabase = (wxColourDatabase*) NULL;
wxDeleteStockObjects(); wxDeleteStockObjects();
@@ -565,7 +565,7 @@ int wxEntry( int argc, char *argv[] )
/* GTK 1.2 up to version 1.2.3 has broken threads */ /* GTK 1.2 up to version 1.2.3 has broken threads */
if ((gtk_major_version == 1) && if ((gtk_major_version == 1) &&
(gtk_minor_version == 2) && (gtk_minor_version == 2) &&
(gtk_micro_version < 4)) (gtk_micro_version < 4))
{ {
printf( "wxWindows warning: Disabled GUI threading due to outdated GTK version\n" ); printf( "wxWindows warning: Disabled GUI threading due to outdated GTK version\n" );
} }
@@ -574,7 +574,7 @@ int wxEntry( int argc, char *argv[] )
g_thread_init(NULL); g_thread_init(NULL);
} }
#endif #endif
gtk_set_locale(); gtk_set_locale();
#if wxUSE_WCHAR_T #if wxUSE_WCHAR_T
@@ -613,7 +613,7 @@ int wxEntry( int argc, char *argv[] )
#if wxUSE_UNICODE #if wxUSE_UNICODE
wxTheApp->argv = new wxChar*[argc+1]; wxTheApp->argv = new wxChar*[argc+1];
int mb_argc = 0; int mb_argc = 0;
while (mb_argc < argc) while (mb_argc < argc)
{ {
wxTheApp->argv[mb_argc] = wxStrdup(wxConvLibc.cMB2WX(argv[mb_argc])); wxTheApp->argv[mb_argc] = wxStrdup(wxConvLibc.cMB2WX(argv[mb_argc]));
mb_argc++; mb_argc++;
@@ -654,7 +654,7 @@ int wxEntry( int argc, char *argv[] )
if (wxTheApp->Initialized()) if (wxTheApp->Initialized())
{ {
retValue = wxTheApp->OnRun(); wxTheApp->OnRun();
wxWindow *topWindow = wxTheApp->GetTopWindow(); wxWindow *topWindow = wxTheApp->GetTopWindow();
if (topWindow) if (topWindow)
@@ -672,7 +672,8 @@ int wxEntry( int argc, char *argv[] )
wxTheApp->SetTopWindow( (wxWindow*) NULL ); wxTheApp->SetTopWindow( (wxWindow*) NULL );
} }
} }
wxTheApp->OnExit();
retValue = wxTheApp->OnExit();
} }
} }

View File

@@ -81,7 +81,9 @@ bool MakeGenApp::GenerateMakefile(const wxString& filename)
return FALSE; return FALSE;
} }
wxFFile fileOut(m_outdir + filename, "w"); wxString fileOutName;
fileOutName << m_outdir << _T('/') << filename;
wxFFile fileOut(fileOutName, "w");
if ( !fileOut.IsOpened() ) if ( !fileOut.IsOpened() )
{ {
wxLogError(_T("Makefile '%s' couldn't be generated."), filename.c_str()); wxLogError(_T("Makefile '%s' couldn't be generated."), filename.c_str());
@@ -90,7 +92,7 @@ bool MakeGenApp::GenerateMakefile(const wxString& filename)
} }
wxLogVerbose(_T("Generating '%s' for '%s'..."), wxLogVerbose(_T("Generating '%s' for '%s'..."),
(m_outdir + filename).c_str(), m_progname.c_str()); fileOutName.c_str(), m_progname.c_str());
size_t count = fileIn.GetLineCount(); size_t count = fileIn.GetLineCount();
for ( size_t n = 0; n < count; n++ ) for ( size_t n = 0; n < count; n++ )