From 2286341c8d8c72b3eb65ffe23cfc8756f841b1c3 Mon Sep 17 00:00:00 2001 From: Vadim Zeitlin Date: Fri, 4 Feb 2000 20:27:10 +0000 Subject: [PATCH] new sample: statbar git-svn-id: https://svn.wxwidgets.org/svn/wx/wxWidgets/trunk@5841 c3d73ce0-8a6f-49c7-b76d-6d57e0e08775 --- Makefile.in | 5 + configure | 6 +- configure.in | 2 + docs/latex/wx/statusbr.tex | 2 +- docs/latex/wx/tsamples.tex | 10 + samples/configure | 4 +- samples/configure.in | 1 + samples/statbar/Makefile.in | 13 ++ samples/statbar/green.bmp | Bin 0 -> 1974 bytes samples/statbar/green.xpm | 28 +++ samples/statbar/makefile.b32 | 10 + samples/statbar/makefile.bcc | 14 ++ samples/statbar/makefile.dos | 10 + samples/statbar/makefile.g95 | 10 + samples/statbar/makefile.sc | 37 ++++ samples/statbar/makefile.sl | 14 ++ samples/statbar/makefile.twn | 35 ++++ samples/statbar/makefile.unx | 23 +++ samples/statbar/makefile.vc | 11 + samples/statbar/makefile.wat | 11 + samples/statbar/red.bmp | Bin 0 -> 1974 bytes samples/statbar/red.xpm | 29 +++ samples/statbar/statbar.cpp | 381 +++++++++++++++++++++++++++++++++++ samples/thread/test.cpp | 2 + src/common/timercmn.cpp | 2 +- src/gtk/app.cpp | 29 +-- src/gtk1/app.cpp | 29 +-- utils/makegen/makegen.cpp | 6 +- 28 files changed, 689 insertions(+), 35 deletions(-) create mode 100644 samples/statbar/Makefile.in create mode 100644 samples/statbar/green.bmp create mode 100644 samples/statbar/green.xpm create mode 100644 samples/statbar/makefile.b32 create mode 100644 samples/statbar/makefile.bcc create mode 100644 samples/statbar/makefile.dos create mode 100644 samples/statbar/makefile.g95 create mode 100644 samples/statbar/makefile.sc create mode 100644 samples/statbar/makefile.sl create mode 100644 samples/statbar/makefile.twn create mode 100644 samples/statbar/makefile.unx create mode 100644 samples/statbar/makefile.vc create mode 100644 samples/statbar/makefile.wat create mode 100644 samples/statbar/red.bmp create mode 100644 samples/statbar/red.xpm create mode 100644 samples/statbar/statbar.cpp diff --git a/Makefile.in b/Makefile.in index fae053300f..8d1f613b01 100644 --- a/Makefile.in +++ b/Makefile.in @@ -919,6 +919,11 @@ SAMPLES_DIST: ALL_GUI_DIST cp $(SAMPDIR)/splitter/Makefile.in $(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 cp $(SAMPDIR)/text/Makefile.in $(DISTDIR)/samples/text cp $(SAMPDIR)/text/makefile.unx $(DISTDIR)/samples/text diff --git a/configure b/configure index 51e4629f2b..df0cabc64f 100755 --- a/configure +++ b/configure @@ -12853,6 +12853,8 @@ if test "$wxUSE_STATUSBAR" = "yes"; then #define wxUSE_STATUSBAR 1 EOF + + SAMPLES_SUBDIRS="$SAMPLES_SUBDIRS statbar" fi 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 "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_%'` if eval "test \"`echo '$''{'ac_cv_prog_make_${ac_make}_set'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 @@ -13157,7 +13159,7 @@ fi if test "$wxUSE_GUI" = "yes"; then 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 echo $ac_n "(cached) $ac_c" 1>&6 else diff --git a/configure.in b/configure.in index b783278f64..af9e9a81d5 100644 --- a/configure.in +++ b/configure.in @@ -3068,6 +3068,8 @@ fi if test "$wxUSE_STATUSBAR" = "yes"; then AC_DEFINE(wxUSE_STATUSBAR) + + SAMPLES_SUBDIRS="$SAMPLES_SUBDIRS statbar" fi if test "$wxUSE_TABDIALOG" = "yes"; then diff --git a/docs/latex/wx/statusbr.tex b/docs/latex/wx/statusbr.tex index 924eb542d2..d261bb5fae 100644 --- a/docs/latex/wx/statusbr.tex +++ b/docs/latex/wx/statusbr.tex @@ -35,7 +35,7 @@ from an {\bf OnSize} event handler. \wxheading{See also} -\helpref{wxFrame}{wxframe} +\helpref{wxFrame}{wxframe}, \helpref{Status bar sample}{samplestatbar} \latexignore{\rtfignore{\wxheading{Members}}} diff --git a/docs/latex/wx/tsamples.tex b/docs/latex/wx/tsamples.tex index 88a27c6498..f57c502f9f 100644 --- a/docs/latex/wx/tsamples.tex +++ b/docs/latex/wx/tsamples.tex @@ -294,6 +294,16 @@ The sockets sample is work in progress. Coming soon: \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} This sample demonstrates four features: firstly the use and many variants of diff --git a/samples/configure b/samples/configure index 8e19c0b120..cb782ff5ab 100755 --- a/samples/configure +++ b/samples/configure @@ -1,6 +1,6 @@ #! /bin/sh -# From configure.in Id +# From configure.in Id: configure.in # Guess values for system-dependent variables and create Makefiles. # Generated automatically using autoconf version 2.13 # Copyright (C) 1992, 93, 94, 95, 96 Free Software Foundation, Inc. @@ -674,6 +674,7 @@ trap 'rm -fr `echo " scroll/Makefile scrollsub/Makefile splitter/Makefile + statbar/Makefile text/Makefile thread/Makefile toolbar/Makefile @@ -802,6 +803,7 @@ CONFIG_FILES=\${CONFIG_FILES-"Makefile scroll/Makefile scrollsub/Makefile splitter/Makefile + statbar/Makefile text/Makefile thread/Makefile toolbar/Makefile diff --git a/samples/configure.in b/samples/configure.in index ec6415121c..3803a44d3e 100644 --- a/samples/configure.in +++ b/samples/configure.in @@ -42,6 +42,7 @@ AC_OUTPUT([ scroll/Makefile scrollsub/Makefile splitter/Makefile + statbar/Makefile text/Makefile thread/Makefile toolbar/Makefile diff --git a/samples/statbar/Makefile.in b/samples/statbar/Makefile.in new file mode 100644 index 0000000000..5ccd8fc66b --- /dev/null +++ b/samples/statbar/Makefile.in @@ -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 + diff --git a/samples/statbar/green.bmp b/samples/statbar/green.bmp new file mode 100644 index 0000000000000000000000000000000000000000..192541e7ec3336eb1719b3d342b026328f599ba1 GIT binary patch literal 1974 zcmeHHyAi@L3^f%61uIZ80Rzx83KOJZD%J~6KU)?8GICuBrtcdo zDAV}FVLaEcFKWJj{r 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 + diff --git a/samples/statbar/makefile.sl b/samples/statbar/makefile.sl new file mode 100644 index 0000000000..4b26e72375 --- /dev/null +++ b/samples/statbar/makefile.sl @@ -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 + diff --git a/samples/statbar/makefile.twn b/samples/statbar/makefile.twn new file mode 100644 index 0000000000..14e5ec6214 --- /dev/null +++ b/samples/statbar/makefile.twn @@ -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 diff --git a/samples/statbar/makefile.unx b/samples/statbar/makefile.unx new file mode 100644 index 0000000000..468a658a0a --- /dev/null +++ b/samples/statbar/makefile.unx @@ -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) diff --git a/samples/statbar/makefile.vc b/samples/statbar/makefile.vc new file mode 100644 index 0000000000..b1163614ef --- /dev/null +++ b/samples/statbar/makefile.vc @@ -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 + diff --git a/samples/statbar/makefile.wat b/samples/statbar/makefile.wat new file mode 100644 index 0000000000..aa552730f8 --- /dev/null +++ b/samples/statbar/makefile.wat @@ -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 + + diff --git a/samples/statbar/red.bmp b/samples/statbar/red.bmp new file mode 100644 index 0000000000000000000000000000000000000000..b55f46dd219d2cac4f90c467199eecd8a70614ce GIT binary patch literal 1974 zcmeHHu@S;B3^Wx51uIZ80Rzx83KOJZD%OLSEXlH>g`St&Ha=G4~`@-Xb z=NWNA91%OtN_k-aeyD-6ju(>Qn5K#PH}{R=Gj8I@BEwQG!;bn8Jm}hpyx6gO7{&YE zB*%HnEYykjA-%F?cDizck3d`dbEpSBWqtMJtG*8sX?UYR6*&br_IN4kW;O%T57rf= z_W%@CWeQY@ha9M@ zk5sy53SF$u_B{c`oTgrr>Y@FE8vZ5tNMFA{bjOXgbx@rxW3K=f%46D0V&`(wQi~!V N;X#}7{OiBDmp4mCv#S6A literal 0 HcmV?d00001 diff --git a/samples/statbar/red.xpm b/samples/statbar/red.xpm new file mode 100644 index 0000000000..74846ae9c3 --- /dev/null +++ b/samples/statbar/red.xpm @@ -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@@@@@" +}; diff --git a/samples/statbar/statbar.cpp b/samples/statbar/statbar.cpp new file mode 100644 index 0000000000..dc3e41156d --- /dev/null +++ b/samples/statbar/statbar.cpp @@ -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); +} diff --git a/samples/thread/test.cpp b/samples/thread/test.cpp index e7b4069ac0..e2b4bff257 100644 --- a/samples/thread/test.cpp +++ b/samples/thread/test.cpp @@ -189,6 +189,7 @@ void *MyThread::Entry() text.Printf("Thread 0x%x started (priority = %d).\n", GetId(), GetPriority()); WriteText(text); + // wxLogMessage(text); -- test wxLog thread safeness for ( m_count = 0; m_count < 10; m_count++ ) { @@ -205,6 +206,7 @@ void *MyThread::Entry() text.Printf("Thread 0x%x finished.\n", GetId()); WriteText(text); + // wxLogMessage(text); -- test wxLog thread safeness return NULL; } diff --git a/src/common/timercmn.cpp b/src/common/timercmn.cpp index 15d1abc07e..2a17f8cf23 100644 --- a/src/common/timercmn.cpp +++ b/src/common/timercmn.cpp @@ -234,7 +234,7 @@ wxLongLong wxGetLocalTimeMillis() return (val + tp.millitm); } #else -#warning "wxStopWatch will be up to second resolution!" + #warning "wxStopWatch will be up to second resolution!" #endif return val; diff --git a/src/gtk/app.cpp b/src/gtk/app.cpp index fce981832b..fcc9087378 100644 --- a/src/gtk/app.cpp +++ b/src/gtk/app.cpp @@ -118,9 +118,9 @@ void wxWakeUpIdle() wxMutexGuiEnter(); #endif - if (g_isIdle) + if (g_isIdle) wxapp_install_idle_handler(); - + #if wxUSE_THREADS if (!wxThread::IsMain()) wxMutexGuiLeave(); @@ -204,7 +204,7 @@ gint wxapp_wakeup_timerout_callback( gpointer WXUNUSED(data) ) // unblock other threads wishing to do some GUI things wxMutexGuiLeave(); - + g_mainThreadLocked = TRUE; // wake up other threads @@ -219,7 +219,7 @@ gint wxapp_wakeup_timerout_callback( gpointer WXUNUSED(data) ) // release lock again gdk_threads_leave(); - + return TRUE; } @@ -250,7 +250,7 @@ wxApp::wxApp() #endif m_colorCube = (unsigned char*) NULL; - + m_useBestVisual = FALSE; } @@ -272,7 +272,7 @@ bool wxApp::OnInitGui() /* on some machines, the default visual is just 256 colours, so we make sure we get the best. this can sometimes be wasteful, of course, but what do these guys pay $30.000 for? */ - + if ((gdk_visual_get_best() != gdk_visual_get_system()) && (m_useBestVisual)) { @@ -356,11 +356,11 @@ bool wxApp::ProcessIdle() void wxApp::OnIdle( wxIdleEvent &event ) { static bool s_inOnIdle = FALSE; - + /* Avoid recursion (via ProcessEvent default case) */ if (s_inOnIdle) return; - + s_inOnIdle = TRUE; /* Resend in the main thread events which have been prepared in other @@ -512,7 +512,7 @@ void wxApp::CleanUp() if (wxTheColourDatabase) delete wxTheColourDatabase; - + wxTheColourDatabase = (wxColourDatabase*) NULL; wxDeleteStockObjects(); @@ -565,7 +565,7 @@ int wxEntry( int argc, char *argv[] ) /* GTK 1.2 up to version 1.2.3 has broken threads */ if ((gtk_major_version == 1) && (gtk_minor_version == 2) && - (gtk_micro_version < 4)) + (gtk_micro_version < 4)) { 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); } #endif - + gtk_set_locale(); #if wxUSE_WCHAR_T @@ -613,7 +613,7 @@ int wxEntry( int argc, char *argv[] ) #if wxUSE_UNICODE wxTheApp->argv = new wxChar*[argc+1]; int mb_argc = 0; - while (mb_argc < argc) + while (mb_argc < argc) { wxTheApp->argv[mb_argc] = wxStrdup(wxConvLibc.cMB2WX(argv[mb_argc])); mb_argc++; @@ -654,7 +654,7 @@ int wxEntry( int argc, char *argv[] ) if (wxTheApp->Initialized()) { - retValue = wxTheApp->OnRun(); + wxTheApp->OnRun(); wxWindow *topWindow = wxTheApp->GetTopWindow(); if (topWindow) @@ -672,7 +672,8 @@ int wxEntry( int argc, char *argv[] ) wxTheApp->SetTopWindow( (wxWindow*) NULL ); } } - wxTheApp->OnExit(); + + retValue = wxTheApp->OnExit(); } } diff --git a/src/gtk1/app.cpp b/src/gtk1/app.cpp index fce981832b..fcc9087378 100644 --- a/src/gtk1/app.cpp +++ b/src/gtk1/app.cpp @@ -118,9 +118,9 @@ void wxWakeUpIdle() wxMutexGuiEnter(); #endif - if (g_isIdle) + if (g_isIdle) wxapp_install_idle_handler(); - + #if wxUSE_THREADS if (!wxThread::IsMain()) wxMutexGuiLeave(); @@ -204,7 +204,7 @@ gint wxapp_wakeup_timerout_callback( gpointer WXUNUSED(data) ) // unblock other threads wishing to do some GUI things wxMutexGuiLeave(); - + g_mainThreadLocked = TRUE; // wake up other threads @@ -219,7 +219,7 @@ gint wxapp_wakeup_timerout_callback( gpointer WXUNUSED(data) ) // release lock again gdk_threads_leave(); - + return TRUE; } @@ -250,7 +250,7 @@ wxApp::wxApp() #endif m_colorCube = (unsigned char*) NULL; - + m_useBestVisual = FALSE; } @@ -272,7 +272,7 @@ bool wxApp::OnInitGui() /* on some machines, the default visual is just 256 colours, so we make sure we get the best. this can sometimes be wasteful, of course, but what do these guys pay $30.000 for? */ - + if ((gdk_visual_get_best() != gdk_visual_get_system()) && (m_useBestVisual)) { @@ -356,11 +356,11 @@ bool wxApp::ProcessIdle() void wxApp::OnIdle( wxIdleEvent &event ) { static bool s_inOnIdle = FALSE; - + /* Avoid recursion (via ProcessEvent default case) */ if (s_inOnIdle) return; - + s_inOnIdle = TRUE; /* Resend in the main thread events which have been prepared in other @@ -512,7 +512,7 @@ void wxApp::CleanUp() if (wxTheColourDatabase) delete wxTheColourDatabase; - + wxTheColourDatabase = (wxColourDatabase*) NULL; wxDeleteStockObjects(); @@ -565,7 +565,7 @@ int wxEntry( int argc, char *argv[] ) /* GTK 1.2 up to version 1.2.3 has broken threads */ if ((gtk_major_version == 1) && (gtk_minor_version == 2) && - (gtk_micro_version < 4)) + (gtk_micro_version < 4)) { 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); } #endif - + gtk_set_locale(); #if wxUSE_WCHAR_T @@ -613,7 +613,7 @@ int wxEntry( int argc, char *argv[] ) #if wxUSE_UNICODE wxTheApp->argv = new wxChar*[argc+1]; int mb_argc = 0; - while (mb_argc < argc) + while (mb_argc < argc) { wxTheApp->argv[mb_argc] = wxStrdup(wxConvLibc.cMB2WX(argv[mb_argc])); mb_argc++; @@ -654,7 +654,7 @@ int wxEntry( int argc, char *argv[] ) if (wxTheApp->Initialized()) { - retValue = wxTheApp->OnRun(); + wxTheApp->OnRun(); wxWindow *topWindow = wxTheApp->GetTopWindow(); if (topWindow) @@ -672,7 +672,8 @@ int wxEntry( int argc, char *argv[] ) wxTheApp->SetTopWindow( (wxWindow*) NULL ); } } - wxTheApp->OnExit(); + + retValue = wxTheApp->OnExit(); } } diff --git a/utils/makegen/makegen.cpp b/utils/makegen/makegen.cpp index 5013ffdfde..d43572aadc 100644 --- a/utils/makegen/makegen.cpp +++ b/utils/makegen/makegen.cpp @@ -81,7 +81,9 @@ bool MakeGenApp::GenerateMakefile(const wxString& filename) return FALSE; } - wxFFile fileOut(m_outdir + filename, "w"); + wxString fileOutName; + fileOutName << m_outdir << _T('/') << filename; + wxFFile fileOut(fileOutName, "w"); if ( !fileOut.IsOpened() ) { 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'..."), - (m_outdir + filename).c_str(), m_progname.c_str()); + fileOutName.c_str(), m_progname.c_str()); size_t count = fileIn.GetLineCount(); for ( size_t n = 0; n < count; n++ ) -- 2.45.2