Put dialog in more sensible place in Forty, got a bit further

with running it under wxX11 but still crashes (bad XPM?)
Updated wxX11 readme text
Added more wxYields to progress dialog
Added timer and idle processing to wxApp::Yield for X11
Made busy info dialog thick frame for wxX11, else
no decorations
Some corrections for Nano-X
Made text for busy dialog more sensible in dialogs sample


git-svn-id: https://svn.wxwidgets.org/svn/wx/wxWidgets/trunk@14704 c3d73ce0-8a6f-49c7-b76d-6d57e0e08775
This commit is contained in:
Julian Smart
2002-03-21 13:10:17 +00:00
parent 618f2efa41
commit 868741e9d3
14 changed files with 122 additions and 49 deletions

View File

@@ -92,7 +92,7 @@ void FortyCanvas::OnDraw(wxDC& dc)
{ {
dc.SetFont(* m_font); dc.SetFont(* m_font);
m_game->Redraw(dc); m_game->Redraw(dc);
#if 0
// if player name not set (and selection dialog is not displayed) // if player name not set (and selection dialog is not displayed)
// then ask the player for their name // then ask the player for their name
if (m_player.Length() == 0 && !m_playerDialog) if (m_player.Length() == 0 && !m_playerDialog)
@@ -117,6 +117,38 @@ void FortyCanvas::OnDraw(wxDC& dc)
((wxFrame*)GetParent())->Close(TRUE); ((wxFrame*)GetParent())->Close(TRUE);
} }
} }
#endif
}
void FortyCanvas::ShowPlayerDialog()
{
// if player name not set (and selection dialog is not displayed)
// then ask the player for their name
if (m_player.Length() == 0 && !m_playerDialog)
{
m_playerDialog = new PlayerSelectionDialog(this, m_scoreFile);
m_playerDialog->ShowModal();
m_player = m_playerDialog->GetPlayersName();
if (m_player.Length() > 0)
{
// user entered a name - lookup their score
int wins, games, score;
m_scoreFile->ReadPlayersScore(m_player, wins, games, score);
m_game->NewPlayer(wins, games, score);
wxClientDC dc(this);
dc.SetFont(* m_font);
m_game->DisplayScore(dc);
m_playerDialog->Destroy();
m_playerDialog = 0;
Refresh(false);
}
else
{
// user cancelled the dialog - exit the app
((wxFrame*)GetParent())->Close(TRUE);
}
}
} }
/* /*

View File

@@ -38,6 +38,7 @@ public:
void EnableHelpingHand(bool enable) { m_helpingHand = enable; } void EnableHelpingHand(bool enable) { m_helpingHand = enable; }
void EnableRightButtonUndo(bool enable) { m_rightBtnUndo = enable; } void EnableRightButtonUndo(bool enable) { m_rightBtnUndo = enable; }
void LayoutGame(); void LayoutGame();
void ShowPlayerDialog();
DECLARE_EVENT_TABLE() DECLARE_EVENT_TABLE()

View File

@@ -31,40 +31,6 @@
#include "forty.h" #include "forty.h"
#include "card.h" #include "card.h"
#include "scoredg.h" #include "scoredg.h"
#ifdef wx_x
#include "cards.xbm"
#endif
class FortyFrame: public wxFrame
{
public:
FortyFrame(wxFrame* frame, char* title, int x, int y, int w, int h,bool largecards);
virtual ~FortyFrame();
void OnCloseWindow(wxCloseEvent& event);
// Menu callbacks
void NewGame(wxCommandEvent& event);
void Exit(wxCommandEvent& event);
void About(wxCommandEvent& event);
void Undo(wxCommandEvent& event);
void Redo(wxCommandEvent& event);
void Scores(wxCommandEvent& event);
void ToggleRightButtonUndo(wxCommandEvent& event);
void ToggleHelpingHand(wxCommandEvent& event);
void ToggleCardSize(wxCommandEvent& event);
DECLARE_EVENT_TABLE()
private:
enum MenuCommands { NEW_GAME = 10, SCORES, EXIT,
UNDO, REDO,
RIGHT_BUTTON_UNDO, HELPING_HAND, LARGE_CARDS,
ABOUT };
wxMenuBar* m_menuBar;
FortyCanvas* m_canvas;
};
BEGIN_EVENT_TABLE(FortyFrame, wxFrame) BEGIN_EVENT_TABLE(FortyFrame, wxFrame)
EVT_MENU(NEW_GAME, FortyFrame::NewGame) EVT_MENU(NEW_GAME, FortyFrame::NewGame)
@@ -106,6 +72,8 @@ bool FortyApp::OnInit()
// Show the frame // Show the frame
frame->Show(TRUE); frame->Show(TRUE);
frame->GetCanvas()->ShowPlayerDialog();
return TRUE; return TRUE;
} }

View File

@@ -28,4 +28,38 @@ private:
static wxBrush* m_backgroundBrush; static wxBrush* m_backgroundBrush;
}; };
class FortyCanvas;
class FortyFrame: public wxFrame
{
public:
FortyFrame(wxFrame* frame, char* title, int x, int y, int w, int h,bool largecards);
virtual ~FortyFrame();
void OnCloseWindow(wxCloseEvent& event);
// Menu callbacks
void NewGame(wxCommandEvent& event);
void Exit(wxCommandEvent& event);
void About(wxCommandEvent& event);
void Undo(wxCommandEvent& event);
void Redo(wxCommandEvent& event);
void Scores(wxCommandEvent& event);
void ToggleRightButtonUndo(wxCommandEvent& event);
void ToggleHelpingHand(wxCommandEvent& event);
void ToggleCardSize(wxCommandEvent& event);
FortyCanvas* GetCanvas() { return m_canvas; }
DECLARE_EVENT_TABLE()
private:
enum MenuCommands { NEW_GAME = 10, SCORES, EXIT,
UNDO, REDO,
RIGHT_BUTTON_UNDO, HELPING_HAND, LARGE_CARDS,
ABOUT };
wxMenuBar* m_menuBar;
FortyCanvas* m_canvas;
};
#endif #endif

View File

@@ -40,6 +40,8 @@
#include <string.h> #include <string.h>
#include "card.h" #include "card.h"
#include "pile.h" #include "pile.h"
#include "forty.h"
#include "canvas.h"
#include "wx/app.h" #include "wx/app.h"
@@ -75,12 +77,11 @@ Pile::Pile(int x, int y, int dx, int dy)
//+-------------------------------------------------------------+ //+-------------------------------------------------------------+
void Pile::Redraw(wxDC& dc ) void Pile::Redraw(wxDC& dc )
{ {
wxWindow *frame = wxTheApp->GetTopWindow(); FortyFrame *frame = (FortyFrame*) wxTheApp->GetTopWindow();
wxWindow *canvas = (wxWindow *) NULL; wxWindow *canvas = (wxWindow *) NULL;
if (frame) if (frame)
{ {
wxNode *node = frame->GetChildren().First(); canvas = frame->GetCanvas();
if (node) canvas = (wxWindow*)node->Data();
} }
if (m_topCard >= 0) if (m_topCard >= 0)

View File

@@ -16,7 +16,7 @@ IMPORTANT NOTE:
First steps First steps
----------- -----------
- Download wxX11-x.y.z.tgz, where x.y.z is the version number. - Download wxWindows-X-x.y.z.tgz, where x.y.z is the version number.
Download documentation in a preferred format, such as Download documentation in a preferred format, such as
wxWindows-HTML.zip or wxWindows-PDF.zip. wxWindows-HTML.zip or wxWindows-PDF.zip.

View File

@@ -34,9 +34,10 @@ Alternatively, you may also use the bug reporting system
linked from the wxWindows web page. linked from the wxWindows web page.
The library produced by the install process will be called The library produced by the install process will be called
libwx_x11.a (static) and libwx_x11-2.3.so.0.0.0 (shared) so that libwx_x11univ[d].a (static) and libwx_x11univ[d]-2.3.so.0.0.0
once a binary incompatible version of wxWindows/X11 comes out (shared) so that once a binary incompatible version of
we'll augment the library version number to avoid linking problems. wxWindows/X11 comes out we'll augment the library version number
to avoid linking problems.
Please send problems concerning installation, feature requests, Please send problems concerning installation, feature requests,
bug reports or comments to the wxWindows users list. Information bug reports or comments to the wxWindows users list. Information
@@ -49,9 +50,20 @@ suitable for any special or general purpose.
Status Status
====== ======
This is new port and doesn't yet compile, but do please join in Many of the samples are running.
and help. It's actually quite a simple port since most of the hard work
is done by the wxUniversal widgets. Some remaining issues:
- some refresh efficiency issues
- progress dialog not working (see dialogs sample)
- clipboard implementation missing
- drag and drop implementation missing
- wxToggleButton implementation missing
- wxSpinCtrl implementation missing
- tooltips implementation missing
- code common to the Motif and X11 ports needs to be
merged
- need thread safety in event loop
Regards, Regards,

View File

@@ -662,7 +662,7 @@ void MyFrame::ShowBusyInfo(wxCommandEvent& WXUNUSED(event))
{ {
wxWindowDisabler disableAll; wxWindowDisabler disableAll;
wxBusyInfo info("Sleep^H^H^H^H^HWorkiing, please wait...", this); wxBusyInfo info("Working, please wait...", this);
for ( int i = 0; i < 30; i++ ) for ( int i = 0; i < 30; i++ )
{ {

View File

@@ -25,9 +25,13 @@
wxInfoFrame::wxInfoFrame(wxWindow *parent, const wxString& message) wxInfoFrame::wxInfoFrame(wxWindow *parent, const wxString& message)
: wxFrame(parent, -1, wxT(""), : wxFrame(parent, -1, wxT("Busy"),
wxDefaultPosition, wxDefaultSize, wxDefaultPosition, wxDefaultSize,
#if defined(__WXX11__)
wxTHICK_FRAME | wxFRAME_TOOL_WINDOW)
#else
wxSIMPLE_BORDER | wxFRAME_TOOL_WINDOW) wxSIMPLE_BORDER | wxFRAME_TOOL_WINDOW)
#endif
{ {
wxPanel *panel = new wxPanel( this ); wxPanel *panel = new wxPanel( this );
wxStaticText *text = new wxStaticText(panel, -1, message); wxStaticText *text = new wxStaticText(panel, -1, message);

View File

@@ -270,6 +270,7 @@ wxProgressDialog::wxProgressDialog(wxString const &title,
// Update the display (especially on X, GTK) // Update the display (especially on X, GTK)
wxYield(); wxYield();
wxYield();
#ifdef __WXMAC__ #ifdef __WXMAC__
MacUpdateImmediately(); MacUpdateImmediately();
@@ -330,6 +331,7 @@ wxProgressDialog::Update(int value, const wxString& newmsg)
m_msg->SetLabel(newmsg); m_msg->SetLabel(newmsg);
wxYield(); wxYield();
wxYield();
} }
if ( (m_elapsed || m_remaining || m_estimated) && (value != 0) ) if ( (m_elapsed || m_remaining || m_estimated) && (value != 0) )
@@ -368,6 +370,7 @@ wxProgressDialog::Update(int value, const wxString& newmsg)
m_msg->SetLabel(_("Done.")); m_msg->SetLabel(_("Done."));
} }
wxYield();
wxYield(); wxYield();
(void)ShowModal(); (void)ShowModal();
@@ -382,6 +385,7 @@ wxProgressDialog::Update(int value, const wxString& newmsg)
{ {
// update the display // update the display
wxYield(); wxYield();
wxYield();
} }
#ifdef __WXMAC__ #ifdef __WXMAC__

View File

@@ -25,6 +25,7 @@
#include "wx/log.h" #include "wx/log.h"
#include "wx/intl.h" #include "wx/intl.h"
#include "wx/evtloop.h" #include "wx/evtloop.h"
#include "wx/timer.h"
#include "wx/univ/theme.h" #include "wx/univ/theme.h"
#include "wx/univ/renderer.h" #include "wx/univ/renderer.h"
@@ -993,6 +994,11 @@ bool wxApp::Yield(bool onlyIfNeeded)
while (wxTheApp && wxTheApp->Pending()) while (wxTheApp && wxTheApp->Pending())
wxTheApp->Dispatch(); wxTheApp->Dispatch();
#if wxUSE_TIMER
wxTimer::NotifyTimers();
#endif
ProcessIdle();
s_inYield = FALSE; s_inYield = FALSE;
return TRUE; return TRUE;

View File

@@ -1375,7 +1375,7 @@ void wxWindowDC::DoDrawText( const wxString &text, wxCoord x, wxCoord y )
slen = strlen(text); slen = strlen(text);
XCharStruct overall_return; XCharStruct overall_return;
(void)XTextExtents(xfont, text.c_str(), slen, &direction, (void)XTextExtents(xfont, (char*) text.c_str(), slen, &direction,
&ascent, &descent, &overall_return); &ascent, &descent, &overall_return);
cx = overall_return.width; cx = overall_return.width;

View File

@@ -239,6 +239,16 @@ bool wxEventLoop::Dispatch()
if (XPending((Display*) wxGetDisplay()) == 0) if (XPending((Display*) wxGetDisplay()) == 0)
{ {
#if wxUSE_NANOX
GR_TIMEOUT timeout = 10; // Milliseconds
// Wait for next event, or timeout
GrGetNextEventTimeout(& event, timeout);
// Fall through to ProcessEvent.
// we'll assume that ProcessEvent will just ignore
// the event if there was a timeout and no event.
#else
struct timeval tv; struct timeval tv;
tv.tv_sec=0; tv.tv_sec=0;
tv.tv_usec=10000; // TODO make this configurable tv.tv_usec=10000; // TODO make this configurable
@@ -256,6 +266,7 @@ bool wxEventLoop::Dispatch()
// An event was pending, so get it // An event was pending, so get it
XNextEvent((Display*) wxGetDisplay(), & event); XNextEvent((Display*) wxGetDisplay(), & event);
} }
#endif
} else } else
{ {
XNextEvent((Display*) wxGetDisplay(), & event); XNextEvent((Display*) wxGetDisplay(), & event);

View File

@@ -856,7 +856,7 @@ void wxWindowX11::DoMoveWindow(int x, int y, int width, int height)
wxCHECK_RET( xwindow, wxT("invalid window") ); wxCHECK_RET( xwindow, wxT("invalid window") );
#if 1 #if !wxUSE_NANOX
XWindowAttributes attr; XWindowAttributes attr;
Status status = XGetWindowAttributes( wxGlobalDisplay(), xwindow, &attr ); Status status = XGetWindowAttributes( wxGlobalDisplay(), xwindow, &attr );