[londonlaw] Fix londonlaw not running with wxPython 3.0 (rhbz#1191318)
Hans de Goede
jwrdegoede at fedoraproject.org
Fri Feb 20 14:46:16 UTC 2015
commit 7e10413d2b28b0fc8a79027d1bc65b18880dee72
Author: Hans de Goede <hdegoede at redhat.com>
Date: Fri Feb 20 15:46:13 2015 +0100
Fix londonlaw not running with wxPython 3.0 (rhbz#1191318)
londonlaw.spec | 21 +-
wxpy3.0-compat.patch | 2297 ++++++++++++++++++++++++++++++++++++++++++++++++++
2 files changed, 2305 insertions(+), 13 deletions(-)
---
diff --git a/londonlaw.spec b/londonlaw.spec
index a483301..f0b0245 100644
--- a/londonlaw.spec
+++ b/londonlaw.spec
@@ -2,7 +2,7 @@
Name: londonlaw
Version: 0.2.1
-Release: 17%{?dist}
+Release: 18%{?dist}
Summary: Online multiplayer version of a well known detective boardgame
License: GPLv2
Group: Amusements/Games
@@ -11,6 +11,7 @@ Source0: http://pessimization.com/software/%{name}/%{name}-%{version}.tar
Source1: %{name}.desktop
Source2: %{name}-server.desktop
Patch0: londonlaw-0.2.1-new-twisted.patch
+Patch1: wxpy3.0-compat.patch
BuildRequires: python-devel wxPython ghostscript ImageMagick
BuildRequires: tex(latex) tex(fullpage.sty) desktop-file-utils
BuildArch: noarch
@@ -30,6 +31,7 @@ Law features an attractive map overlaid on high-resolution satellite imagery.
%prep
%setup -q
%patch0 -p1
+%patch1 -p1
chmod +x setup.py
@@ -47,18 +49,8 @@ convert londonlaw/guiclient/images/playericon1.jpg -resize 48x48 \
$RPM_BUILD_ROOT%{_datadir}/icons/hicolor/48x48/apps/%{name}.png
mkdir -p $RPM_BUILD_ROOT%{_datadir}/applications
-desktop-file-install \
-%if 0%{?fedora} && 0%{?fedora} < 19
- --vendor fedora \
-%endif
- --dir=${RPM_BUILD_ROOT}%{_datadir}/applications \
- %{SOURCE1}
-desktop-file-install \
-%if 0%{?fedora} && 0%{?fedora} < 19
- --vendor fedora \
-%endif
- --dir=${RPM_BUILD_ROOT}%{_datadir}/applications \
- %{SOURCE2}
+desktop-file-install --dir=${RPM_BUILD_ROOT}%{_datadir}/applications %{SOURCE1}
+desktop-file-install --dir=${RPM_BUILD_ROOT}%{_datadir}/applications %{SOURCE2}
%post
@@ -85,6 +77,9 @@ gtk-update-icon-cache %{_datadir}/icons/hicolor &>/dev/null || :
%changelog
+* Fri Feb 20 2015 Hans de Goede <hdegoede at redhat.com> - 0.2.1-18
+- Fix londonlaw not running with wxPython 3.0 (rhbz#1191318)
+
* Sat Jun 07 2014 Fedora Release Engineering <rel-eng at lists.fedoraproject.org> - 0.2.1-17
- Rebuilt for https://fedoraproject.org/wiki/Fedora_21_Mass_Rebuild
diff --git a/wxpy3.0-compat.patch b/wxpy3.0-compat.patch
new file mode 100644
index 0000000..3b18fd4
--- /dev/null
+++ b/wxpy3.0-compat.patch
@@ -0,0 +1,2297 @@
+Description: Update for wxPython3.0 compatibility.
+Author: Olly Betts <olly at survex.com>
+Forwarded: no
+Bug-Debian: https://bugs.debian.org/759084
+Last-Update: 2014-08-15
+
+Index: londonlaw-0.2.1/londonlaw/guiclient/__init__.py
+===================================================================
+--- londonlaw-0.2.1.orig/londonlaw/guiclient/__init__.py
++++ londonlaw-0.2.1/londonlaw/guiclient/__init__.py
+@@ -17,13 +17,19 @@
+
+ # Note: unfortunately the twisted "wxreactor" is broken at present and is
+ # unlikely to be fixed anytime soon. Rather than trying to integrate the event
+-# loops, the solution used here is to run a single-threaded wxApp with a wxTimer
++# loops, the solution used here is to run a single-threaded wx.App with a wx.Timer
+ # that runs the twisted event loop periodically.
+
+
+ from twisted.internet import protocol, reactor
+ from twisted.python import log
+-from wxPython.wx import *
++import wxversion
++try:
++ wxversion.select("3.0")
++except wxversion.VersionError:
++ wxversion.select("2.8")
++
++import wx
+ from ConnectWindow import *
+ from GameListWindow import *
+ from RegistrationWindow import *
+@@ -46,7 +52,7 @@ class LLawClientFactory(protocol.ClientF
+
+
+ # Run the whole shebang.
+-class MyApp(wxApp):
++class MyApp(wx.App):
+
+ def OnInit(self):
+ TIMERID = 999999
+@@ -57,14 +63,13 @@ class MyApp(wxApp):
+ messenger.registerRegistrationWindowLauncher(self.register)
+ messenger.registerMainWindowLauncher(self.startGame)
+
+- wxInitAllImageHandlers() # Required to be able to load compressed images
+ messenger.guiLaunchConnectionWindow()
+
+- EVT_TIMER(self, TIMERID, self.OnTimer)
+- self.timer = wxTimer(self, TIMERID)
++ wx.EVT_TIMER(self, TIMERID, self.OnTimer)
++ self.timer = wx.Timer(self, TIMERID)
+ self.timer.Start(250, False)
+
+- return true
++ return True
+
+
+ def OnTimer(self, event):
+@@ -79,7 +84,7 @@ class MyApp(wxApp):
+ self.connectFrame.Fit()
+ self.connectFrame.Show(1)
+ self.currentWindow = self.connectFrame
+- EVT_BUTTON(self.connectFrame, self.connectFrame.connectButton.GetId(), self.connect)
++ wx.EVT_BUTTON(self.connectFrame, self.connectFrame.connectButton.GetId(), self.connect)
+ return self.connectFrame
+
+
+Index: londonlaw-0.2.1/londonlaw/guiclient/AutoListCtrl.py
+===================================================================
+--- londonlaw-0.2.1.orig/londonlaw/guiclient/AutoListCtrl.py
++++ londonlaw-0.2.1/londonlaw/guiclient/AutoListCtrl.py
+@@ -20,9 +20,9 @@
+ # AutoListCtrl.py
+ #
+ # This module contains a base class list control that does the following:
+-# * sort by column when clicking on headers (wxColumnSorterMixin)
++# * sort by column when clicking on headers (ColumnSorterMixin)
+ # * auto-expands the width of the last column to fill available space
+-# (wxListCtrlAutoWidthMixin)
++# (ListCtrlAutoWidthMixin)
+ # * supports realtime addition and removal of items
+ #
+ # This base class will be used in both the game room browser and the
+@@ -35,8 +35,8 @@
+
+
+ from twisted.python import log
+-from wxPython.wx import *
+-from wxPython.lib.mixins.listctrl import wxColumnSorterMixin, wxListCtrlAutoWidthMixin
++import wx
++from wx.lib.mixins.listctrl import ColumnSorterMixin, ListCtrlAutoWidthMixin
+ from londonlaw.common.config import *
+ import os.path
+
+@@ -44,37 +44,37 @@ import os.path
+
+ # the AutoWidthMixin simply resizes the last column of of the
+ # ListCtrl to take up all remaining space.
+-class AutoWidthListCtrl(wxListCtrl, wxListCtrlAutoWidthMixin):
+- def __init__(self, parent, ID, pos = wxDefaultPosition,
+- size = wxDefaultSize, style = 0):
+- wxListCtrl.__init__(self, parent, ID, pos, size, style)
+- wxListCtrlAutoWidthMixin.__init__(self)
++class AutoWidthListCtrl(wx.ListCtrl, ListCtrlAutoWidthMixin):
++ def __init__(self, parent, ID, pos = wx.DefaultPosition,
++ size = wx.DefaultSize, style = 0):
++ wx.ListCtrl.__init__(self, parent, ID, pos, size, style)
++ ListCtrlAutoWidthMixin.__init__(self)
+
+
+ # 'headers' is a list of column headers.
+ # 'placeholder' should be a list of display data that is shown when
+ # the list is empty (same length as 'headers').
+-class AutoListCtrl(AutoWidthListCtrl, wxColumnSorterMixin):
++class AutoListCtrl(AutoWidthListCtrl, ColumnSorterMixin):
+ def __init__(self, parent, ID, headers, placeholder = None):
+- AutoWidthListCtrl.__init__(self, parent, ID, wxDefaultPosition, wxDefaultSize,
+- wxLC_REPORT|wxLC_SINGLE_SEL)
++ AutoWidthListCtrl.__init__(self, parent, ID, wx.DefaultPosition, wx.DefaultSize,
++ wx.LC_REPORT|wx.LC_SINGLE_SEL)
+
+ self.headers = headers
+
+- # load in the tiny arrow images that wxColumnSorterMixin draws
++ # load in the tiny arrow images that ColumnSorterMixin draws
+ # in the headers of sorted columns
+ # WARNING: this segfaults if imageList is a local variable.
+ # Maybe a wxPython bug... imageList falls out of scope and gets deleted prematurely?
+- self.imageList = wxImageList(16, 16, TRUE)
++ self.imageList = wx.ImageList(16, 16, True)
+ file1 = os.path.normpath(os.path.join(MEDIAROOT, "images/smalluparrow.png"))
+ file2 = os.path.normpath(os.path.join(MEDIAROOT, "images/smalldownarrow.png"))
+- image = wxImage(file1, wxBITMAP_TYPE_ANY)
++ image = wx.Image(file1, wx.BITMAP_TYPE_ANY)
+ image.SetMaskColour(255, 255, 255)
+- self.smallUpArrow = self.imageList.Add(wxBitmapFromImage(image))
+- image = wxImage(file2, wxBITMAP_TYPE_ANY)
++ self.smallUpArrow = self.imageList.Add(wx.BitmapFromImage(image))
++ image = wx.Image(file2, wx.BITMAP_TYPE_ANY)
+ image.SetMaskColour(255, 255, 255)
+- self.smallDnArrow = self.imageList.Add(wxBitmapFromImage(image))
+- self.SetImageList(self.imageList, wxIMAGE_LIST_SMALL)
++ self.smallDnArrow = self.imageList.Add(wx.BitmapFromImage(image))
++ self.SetImageList(self.imageList, wx.IMAGE_LIST_SMALL)
+
+ self.placeholder = placeholder
+ # data from the server should be formatted as
+@@ -86,14 +86,14 @@ class AutoListCtrl(AutoWidthListCtrl, wx
+ self.populateList()
+
+ # this must be called *after* the list has been created
+- wxColumnSorterMixin.__init__(self, len(self.headers))
++ ColumnSorterMixin.__init__(self, len(self.headers))
+
+
+ def populateList(self):
+- info = wxListItem()
+- info.m_mask = wxLIST_MASK_TEXT | wxLIST_MASK_IMAGE | wxLIST_MASK_FORMAT
++ info = wx.ListItem()
++ info.m_mask = wx.LIST_MASK_TEXT | wx.LIST_MASK_IMAGE | wx.LIST_MASK_FORMAT
+ info.m_image = -1
+- info.m_format = wxLIST_FORMAT_CENTRE
++ info.m_format = wx.LIST_FORMAT_CENTRE
+
+ for i in range(len(self.headers)):
+ info.m_text = self.headers[i]
+@@ -107,16 +107,16 @@ class AutoListCtrl(AutoWidthListCtrl, wx
+ self.SetStringItem(i, j, data[j])
+ self.SetItemData(i, key)
+
+- # dirty hack... wxWidgets needs a wxLIST_AUTOSIZE_* that
++ # dirty hack... wxWidgets needs a wx.LIST_AUTOSIZE_* that
+ # chooses the maximum of BOTH header size and list item size
+ for i in range(len(self.headers) - 1):
+- self.SetColumnWidth(i, wxLIST_AUTOSIZE)
++ self.SetColumnWidth(i, wx.LIST_AUTOSIZE)
+ itemWidth = self.GetColumnWidth(i)
+- self.SetColumnWidth(i, wxLIST_AUTOSIZE_USEHEADER)
++ self.SetColumnWidth(i, wx.LIST_AUTOSIZE_USEHEADER)
+ headerWidth = self.GetColumnWidth(i)
+ if headerWidth < itemWidth:
+- self.SetColumnWidth(i, wxLIST_AUTOSIZE)
+- # size of last column is set automatically by wxListCtrlAutoWidthMixin
++ self.SetColumnWidth(i, wx.LIST_AUTOSIZE)
++ # size of last column is set automatically by ListCtrlAutoWidthMixin
+
+
+ # def logListData(self):
+@@ -183,12 +183,12 @@ class AutoListCtrl(AutoWidthListCtrl, wx
+ self.SetItemData(item, key)
+
+
+- # required by wxColumnSorterMixin
++ # required by ColumnSorterMixin
+ def GetListCtrl(self):
+ return self
+
+
+- # used by wxColumnSorterMixin to display up and down arrows
++ # used by ColumnSorterMixin to display up and down arrows
+ # on sorted column headers
+ def GetSortImages(self):
+ return (self.smallDnArrow, self.smallUpArrow)
+Index: londonlaw-0.2.1/londonlaw/guiclient/ChatPanel.py
+===================================================================
+--- londonlaw-0.2.1.orig/londonlaw/guiclient/ChatPanel.py
++++ londonlaw-0.2.1/londonlaw/guiclient/ChatPanel.py
+@@ -21,38 +21,38 @@
+ #
+ # This class creates a combined chat entry and chat message display area.
+
+-from wxPython.wx import *
++import wx
+ from ScrolledLabel import *
+
+ # Wrapped in a StaticBox.
+-class ChatPanel(wxPanel):
++class ChatPanel(wx.Panel):
+ def __init__(self, parent, text, enableSendTo):
+- wxPanel.__init__(self, parent, -1)
++ wx.Panel.__init__(self, parent, -1)
+
+
+ # create a scrollable display for the chat messages
+ self.chatDisplay = ScrolledLabel(self, text)
+
+ # create the "send to" radio button
+- self.chatRadio = wxRadioBox(self, -1, "send to:", wxDefaultPosition, wxDefaultSize,
+- ["all", "team"], 1, wxRA_SPECIFY_COLS)
++ self.chatRadio = wx.RadioBox(self, -1, "send to:", wx.DefaultPosition, wx.DefaultSize,
++ ["all", "team"], 1, wx.RA_SPECIFY_COLS)
+ self.chatRadio.Enable(enableSendTo)
+
+ # create a chat entry box
+- self.chatEntry = wxTextCtrl(self, -1, "", wxDefaultPosition, wxDefaultSize, wxTE_PROCESS_ENTER)
++ self.chatEntry = wx.TextCtrl(self, -1, "", wx.DefaultPosition, wx.DefaultSize, wx.TE_PROCESS_ENTER)
+ self.chatEntry.SetMaxLength(254) # messages longer than this would get truncated by ESocket.write_string()
+
+
+ # set up the geometry.
+ # line the chat display and the radio button horizontally...
+- sizer2 = wxBoxSizer(wxHORIZONTAL)
+- sizer2.Add(self.chatDisplay, 1, wxEXPAND|wxALL, 5)
+- sizer2.Add(self.chatRadio, 0, wxALIGN_BOTTOM|wxALL, 5)
++ sizer2 = wx.BoxSizer(wx.HORIZONTAL)
++ sizer2.Add(self.chatDisplay, 1, wx.EXPAND|wx.ALL, 5)
++ sizer2.Add(self.chatRadio, 0, wx.ALIGN_BOTTOM|wx.ALL, 5)
+
+ # ... and line up the rest vertically
+- self.topSizer = wxBoxSizer(wxVERTICAL)
+- self.topSizer.Add(sizer2, 1, wxEXPAND)
+- self.topSizer.Add(self.chatEntry, 0, wxEXPAND|wxALL, 5)
++ self.topSizer = wx.BoxSizer(wx.VERTICAL)
++ self.topSizer.Add(sizer2, 1, wx.EXPAND)
++ self.topSizer.Add(self.chatEntry, 0, wx.EXPAND|wx.ALL, 5)
+ self.SetSizer(self.topSizer)
+ self.topSizer.SetSizeHints(self)
+
+Index: londonlaw-0.2.1/londonlaw/guiclient/ConnectWindow.py
+===================================================================
+--- londonlaw-0.2.1.orig/londonlaw/guiclient/ConnectWindow.py
++++ londonlaw-0.2.1/londonlaw/guiclient/ConnectWindow.py
+@@ -22,23 +22,23 @@
+ # This class handles the initial connection window, where players
+ # enter server information and provide usernames.
+
+-from wxPython.wx import *
++import wx
+ from twisted.internet import reactor
+ from londonlaw.common.protocol import *
+ import sys
+
+
+ # Initial window. Creates a form for the user to enter a host, port, and user information.
+-class ConnectWindow(wxFrame):
++class ConnectWindow(wx.Frame):
+ def __init__(self, parent, ID, title):
+- wxFrame.__init__(self, parent, ID, title)
++ wx.Frame.__init__(self, parent, ID, title)
+
+ EXIT = 100
+
+ # Create a menu bar
+- fileMenu = wxMenu("File")
++ fileMenu = wx.Menu("File")
+ fileMenu.Append(EXIT, "Exit\tCTRL+Q", "Exit London Law")
+- menuBar = wxMenuBar()
++ menuBar = wx.MenuBar()
+ menuBar.Append(fileMenu, "File")
+ self.SetMenuBar(menuBar)
+
+@@ -46,77 +46,77 @@ class ConnectWindow(wxFrame):
+ self.status = self.CreateStatusBar()
+
+ # stick everything in a panel to enable tab traversal
+- mainPanel = wxPanel(self, -1)
++ mainPanel = wx.Panel(self, -1)
+
+- labelFont = wxFont(self.GetFont().GetPointSize(), wxDEFAULT, wxNORMAL, wxBOLD)
+- labelFont.SetWeight(wxBOLD)
+- connectLabel = wxStaticText(mainPanel, -1, "Connect to: ")
++ labelFont = wx.Font(self.GetFont().GetPointSize(), wx.DEFAULT, wx.NORMAL, wx.BOLD)
++ labelFont.SetWeight(wx.BOLD)
++ connectLabel = wx.StaticText(mainPanel, -1, "Connect to: ")
+ connectLabel.SetFont(labelFont)
+- self.hostEntryLabel = wxStaticText(mainPanel, -1, "host:", wxPoint(0,0))
+- self.hostEntry = wxTextCtrl(mainPanel, -1, "localhost", wxDefaultPosition, (170, wxDefaultSize[1]))
+- self.portEntryLabel = wxStaticText(mainPanel, -1, "port:", wxPoint(0,0))
+- self.portEntry = wxTextCtrl(mainPanel, -1, str(LLAW_PORT), wxDefaultPosition, (50, wxDefaultSize[1]))
++ self.hostEntryLabel = wx.StaticText(mainPanel, -1, "host:", wx.Point(0,0))
++ self.hostEntry = wx.TextCtrl(mainPanel, -1, "localhost", wx.DefaultPosition, (170, wx.DefaultSize[1]))
++ self.portEntryLabel = wx.StaticText(mainPanel, -1, "port:", wx.Point(0,0))
++ self.portEntry = wx.TextCtrl(mainPanel, -1, str(LLAW_PORT), wx.DefaultPosition, (50, wx.DefaultSize[1]))
+ self.portEntry.SetMaxLength(5)
+
+- connectSizer = wxBoxSizer(wxHORIZONTAL)
++ connectSizer = wx.BoxSizer(wx.HORIZONTAL)
+ connectSizer.Add((30,1),0,0)
+- connectSizer.Add(self.hostEntryLabel, 0, wxALIGN_CENTRE | wxLEFT, 5)
+- connectSizer.Add(self.hostEntry, 0, wxALIGN_CENTRE | wxALL, 5)
++ connectSizer.Add(self.hostEntryLabel, 0, wx.ALIGN_CENTRE | wx.LEFT, 5)
++ connectSizer.Add(self.hostEntry, 0, wx.ALIGN_CENTRE | wx.ALL, 5)
+ connectSizer.Add((10,1),0,0)
+- connectSizer.Add(self.portEntryLabel, 0, wxALIGN_CENTRE)
+- connectSizer.Add(self.portEntry, 0, wxALIGN_CENTRE | wxALL, 5)
++ connectSizer.Add(self.portEntryLabel, 0, wx.ALIGN_CENTRE)
++ connectSizer.Add(self.portEntry, 0, wx.ALIGN_CENTRE | wx.ALL, 5)
+
+- userLabel = wxStaticText(mainPanel, -1, "User information: ")
++ userLabel = wx.StaticText(mainPanel, -1, "User information: ")
+ userLabel.SetFont(labelFont)
+- self.usernameEntryLabel = wxStaticText(mainPanel, -1, "username:", wxPoint(0,0))
+- self.usernameEntry = wxTextCtrl(mainPanel, -1)
++ self.usernameEntryLabel = wx.StaticText(mainPanel, -1, "username:", wx.Point(0,0))
++ self.usernameEntry = wx.TextCtrl(mainPanel, -1)
+ self.usernameEntry.SetMaxLength(20)
+- self.passEntryLabel = wxStaticText(mainPanel, -1, "password:", wxPoint(0,0))
+- self.passEntry = wxTextCtrl(mainPanel, -1, style=wxTE_PASSWORD)
++ self.passEntryLabel = wx.StaticText(mainPanel, -1, "password:", wx.Point(0,0))
++ self.passEntry = wx.TextCtrl(mainPanel, -1, style=wx.TE_PASSWORD)
+ self.passEntry.SetMaxLength(20)
+
+- userSizer = wxBoxSizer(wxHORIZONTAL)
++ userSizer = wx.BoxSizer(wx.HORIZONTAL)
+ userSizer.Add((30,1),0,0)
+- userSizer.Add(self.usernameEntryLabel, 0, wxALIGN_CENTRE)
+- userSizer.Add(self.usernameEntry, 0, wxALIGN_CENTRE | wxALL, 5)
++ userSizer.Add(self.usernameEntryLabel, 0, wx.ALIGN_CENTRE)
++ userSizer.Add(self.usernameEntry, 0, wx.ALIGN_CENTRE | wx.ALL, 5)
+ userSizer.Add((10,1),1,1)
+- userSizer.Add(self.passEntryLabel, 0, wxALIGN_CENTRE)
+- userSizer.Add(self.passEntry, 0, wxALIGN_CENTRE | wxALL, 5)
++ userSizer.Add(self.passEntryLabel, 0, wx.ALIGN_CENTRE)
++ userSizer.Add(self.passEntry, 0, wx.ALIGN_CENTRE | wx.ALL, 5)
+
+ # Add some buttons
+- self.connectButton = wxButton(mainPanel, -1, "Connect")
+- self.quitButton = wxButton(mainPanel, -1, "Quit")
+- buttonSizer = wxBoxSizer(wxHORIZONTAL)
+- buttonSizer.Add(self.quitButton, 0, wxALIGN_CENTRE | wxALL, 5)
++ self.connectButton = wx.Button(mainPanel, -1, "Connect")
++ self.quitButton = wx.Button(mainPanel, -1, "Quit")
++ buttonSizer = wx.BoxSizer(wx.HORIZONTAL)
++ buttonSizer.Add(self.quitButton, 0, wx.ALIGN_CENTRE | wx.ALL, 5)
+ if sys.platform.lower()[:-3] == "win":
+ # Win32 users like their buttons in the wrong order
+- buttonSizer.Prepend(self.connectButton, 0, wxALIGN_CENTRE | wxALL, 5)
++ buttonSizer.Prepend(self.connectButton, 0, wx.ALIGN_CENTRE | wx.ALL, 5)
+ else:
+- buttonSizer.Add(self.connectButton, 0, wxALIGN_CENTRE | wxALL, 5)
+- buttonSizer.Prepend((10,1),1,wxEXPAND)
++ buttonSizer.Add(self.connectButton, 0, wx.ALIGN_CENTRE | wx.ALL, 5)
++ buttonSizer.Prepend((10,1),1,wx.EXPAND)
+
+- self.topSizer = wxBoxSizer(wxVERTICAL)
+- self.topSizer.Add(connectLabel, 0, wxALIGN_LEFT | wxLEFT | wxTOP, 10)
+- self.topSizer.Add(connectSizer, 0, wxALIGN_LEFT | wxALL, 5)
+- self.topSizer.Add(userLabel, 0, wxALIGN_LEFT | wxLEFT | wxTOP, 10)
+- self.topSizer.Add(userSizer, 0, wxALIGN_LEFT | wxALL, 5)
+- self.topSizer.Add((10,10),1,wxEXPAND)
+- self.topSizer.Add(buttonSizer, 0, wxEXPAND | wxALL, 5)
++ self.topSizer = wx.BoxSizer(wx.VERTICAL)
++ self.topSizer.Add(connectLabel, 0, wx.ALIGN_LEFT | wx.LEFT | wx.TOP, 10)
++ self.topSizer.Add(connectSizer, 0, wx.ALIGN_LEFT | wx.ALL, 5)
++ self.topSizer.Add(userLabel, 0, wx.ALIGN_LEFT | wx.LEFT | wx.TOP, 10)
++ self.topSizer.Add(userSizer, 0, wx.ALIGN_LEFT | wx.ALL, 5)
++ self.topSizer.Add((10,10),1,wx.EXPAND)
++ self.topSizer.Add(buttonSizer, 0, wx.EXPAND | wx.ALL, 5)
+ mainPanel.SetSizer(self.topSizer)
+- self.topSizer.Fit(mainPanel)
++ self.topSizer.Fit(self)
+ mainPanel.SetAutoLayout(1)
+
+ self.hostEntry.SetFocus()
+
+- EVT_SET_FOCUS(self.hostEntry, self.selectFocused)
+- EVT_SET_FOCUS(self.portEntry, self.selectFocused)
+- EVT_SET_FOCUS(self.usernameEntry, self.selectFocused)
+- EVT_SET_FOCUS(self.passEntry, self.selectFocused)
+- EVT_BUTTON(self, self.quitButton.GetId(), self.menuExit)
+- EVT_MENU(self, EXIT, self.menuExit)
++ wx.EVT_SET_FOCUS(self.hostEntry, self.selectFocused)
++ wx.EVT_SET_FOCUS(self.portEntry, self.selectFocused)
++ wx.EVT_SET_FOCUS(self.usernameEntry, self.selectFocused)
++ wx.EVT_SET_FOCUS(self.passEntry, self.selectFocused)
++ wx.EVT_BUTTON(self, self.quitButton.GetId(), self.menuExit)
++ wx.EVT_MENU(self, EXIT, self.menuExit)
+
+
+- # select contents of a focused wxTextCtrl
++ # select contents of a focused wx.TextCtrl
+ def selectFocused(self, ev):
+ self.hostEntry.SetSelection(0,0)
+ self.portEntry.SetSelection(0,0)
+@@ -140,8 +140,8 @@ class ConnectWindow(wxFrame):
+
+ def showInfoAlert(self, info):
+ self.PushStatusText("")
+- alert = wxMessageDialog(self, info,
+- "Server Message", wxOK|wxICON_INFORMATION)
++ alert = wx.MessageDialog(self, info,
++ "Server Message", wx.OK|wx.ICON_INFORMATION)
+ alert.ShowModal()
+
+
+Index: londonlaw-0.2.1/londonlaw/guiclient/GameListWindow.py
+===================================================================
+--- londonlaw-0.2.1.orig/londonlaw/guiclient/GameListWindow.py
++++ londonlaw-0.2.1/londonlaw/guiclient/GameListWindow.py
+@@ -25,7 +25,7 @@
+
+
+ from twisted.python import log
+-from wxPython.wx import *
++import wx
+ from londonlaw.common.protocol import *
+ from londonlaw.common.config import *
+ from AutoListCtrl import *
+@@ -35,54 +35,54 @@ import os.path
+
+
+ # Create a small dialog for creating a game
+-class NewGameDialog(wxDialog):
++class NewGameDialog(wx.Dialog):
+ def __init__(self, parent, returnValue):
+- wxDialog.__init__(self, parent, -1, "Create a New Game",
+- wxDefaultPosition, wxDefaultSize, wxDEFAULT_DIALOG_STYLE|wxSUNKEN_BORDER)
+- panel = wxPanel(self, -1, wxDefaultPosition, wxDefaultSize, wxTAB_TRAVERSAL)
++ wx.Dialog.__init__(self, parent, -1, "Create a New Game",
++ wx.DefaultPosition, wx.DefaultSize, wx.DEFAULT_DIALOG_STYLE|wx.SUNKEN_BORDER)
++ panel = wx.Panel(self, -1, wx.DefaultPosition, wx.DefaultSize, wx.TAB_TRAVERSAL)
+
+ self.returnValue = returnValue
+
+- labelFont = wxFont(self.GetFont().GetPointSize(), wxDEFAULT, wxNORMAL, wxBOLD)
+- labelFont.SetWeight(wxBOLD)
+- newGameLabel = wxStaticText(panel, -1, "New Game: ")
++ labelFont = wx.Font(self.GetFont().GetPointSize(), wx.DEFAULT, wx.NORMAL, wx.BOLD)
++ labelFont.SetWeight(wx.BOLD)
++ newGameLabel = wx.StaticText(panel, -1, "New Game: ")
+ newGameLabel.SetFont(labelFont)
+- nameLabel = wxStaticText(panel, -1, "game room name:", wxPoint(0,0))
+- self.nameEntry = wxTextCtrl(panel, -1, "", wxDefaultPosition, (170, wxDefaultSize[1]))
+- typeLabel = wxStaticText(panel, -1, "game type:", wxPoint(0,0))
+- self.typeList = wxChoice(panel, -1, wxDefaultPosition, wxDefaultSize, ["standard"])
+- self.submitButton = wxButton(panel, wxID_OK, "OK")
+- self.cancelButton = wxButton(panel, wxID_CANCEL, "Cancel")
++ nameLabel = wx.StaticText(panel, -1, "game room name:", wx.Point(0,0))
++ self.nameEntry = wx.TextCtrl(panel, -1, "", wx.DefaultPosition, (170, wx.DefaultSize[1]))
++ typeLabel = wx.StaticText(panel, -1, "game type:", wx.Point(0,0))
++ self.typeList = wx.Choice(panel, -1, wx.DefaultPosition, wx.DefaultSize, ["standard"])
++ self.submitButton = wx.Button(panel, wx.ID_OK, "OK")
++ self.cancelButton = wx.Button(panel, wx.ID_CANCEL, "Cancel")
+ self.typeList.SetSelection(0)
+
+- hSizer = wxBoxSizer(wxHORIZONTAL)
++ hSizer = wx.BoxSizer(wx.HORIZONTAL)
+ hSizer.Add((30, 1), 0, 0)
+- hSizer.Add(nameLabel, 0, wxALIGN_CENTRE|wxALL, 5)
+- hSizer.Add(self.nameEntry, 0, wxALIGN_CENTRE|wxALL, 5)
++ hSizer.Add(nameLabel, 0, wx.ALIGN_CENTRE|wx.ALL, 5)
++ hSizer.Add(self.nameEntry, 0, wx.ALIGN_CENTRE|wx.ALL, 5)
+ hSizer.Add((10, 1), 0, 0)
+- hSizer.Add(typeLabel, 0, wxALIGN_CENTRE|wxALL, 5)
+- hSizer.Add(self.typeList, 0, wxALIGN_CENTRE|wxALL, 5)
++ hSizer.Add(typeLabel, 0, wx.ALIGN_CENTRE|wx.ALL, 5)
++ hSizer.Add(self.typeList, 0, wx.ALIGN_CENTRE|wx.ALL, 5)
+
+- bSizer = wxBoxSizer(wxHORIZONTAL)
++ bSizer = wx.BoxSizer(wx.HORIZONTAL)
+ bSizer.Add((1, 1), 1, 0)
+- bSizer.Add(self.cancelButton, 0, wxALIGN_CENTRE|wxALL, 5)
+- bSizer.Add(self.submitButton, 0, wxALIGN_CENTRE|wxALL, 5)
++ bSizer.Add(self.cancelButton, 0, wx.ALIGN_CENTRE|wx.ALL, 5)
++ bSizer.Add(self.submitButton, 0, wx.ALIGN_CENTRE|wx.ALL, 5)
+
+- vSizer = wxBoxSizer(wxVERTICAL)
+- vSizer.Add(newGameLabel, 0, wxALIGN_LEFT|wxALL, 5)
+- vSizer.Add(hSizer, 0, wxALIGN_LEFT|wxALL, 5)
+- vSizer.Add(bSizer, 0, wxEXPAND|wxALL, 5)
++ vSizer = wx.BoxSizer(wx.VERTICAL)
++ vSizer.Add(newGameLabel, 0, wx.ALIGN_LEFT|wx.ALL, 5)
++ vSizer.Add(hSizer, 0, wx.ALIGN_LEFT|wx.ALL, 5)
++ vSizer.Add(bSizer, 0, wx.EXPAND|wx.ALL, 5)
+
+ panel.SetSizer(vSizer)
+ vSizer.Fit(panel)
+- sizer = wxBoxSizer(wxVERTICAL)
+- sizer.Add(panel, 1, wxEXPAND | wxALL, 5)
++ sizer = wx.BoxSizer(wx.VERTICAL)
++ sizer.Add(panel, 1, wx.EXPAND | wx.ALL, 5)
+ self.SetSizer(sizer)
+ sizer.Fit(self)
+ self.SetAutoLayout(1)
+
+- EVT_BUTTON(self, wxID_OK, self.submit)
+- EVT_BUTTON(self, wxID_CANCEL, self.cancel)
++ wx.EVT_BUTTON(self, wx.ID_OK, self.submit)
++ wx.EVT_BUTTON(self, wx.ID_CANCEL, self.cancel)
+
+
+ def submit(self, event):
+@@ -97,9 +97,9 @@ class NewGameDialog(wxDialog):
+
+
+ # Generate the main registration window.
+-class GameListWindow(wxFrame):
++class GameListWindow(wx.Frame):
+ def __init__(self, parent, ID, title, messenger):
+- wxFrame.__init__(self, parent, ID, title)
++ wx.Frame.__init__(self, parent, ID, title)
+
+ self._messenger = messenger
+
+@@ -107,17 +107,17 @@ class GameListWindow(wxFrame):
+ EXIT = 101
+
+ # Create a menu bar
+- fileMenu = wxMenu("File")
++ fileMenu = wx.Menu("File")
+ fileMenu.Append(DISCONNECT, "Disconnect", "Disconnect from server")
+ fileMenu.Append(EXIT, "Exit\tCTRL+Q", "Exit London Law")
+- menuBar = wxMenuBar()
++ menuBar = wx.MenuBar()
+ menuBar.Append(fileMenu, "File")
+ self.SetMenuBar(menuBar)
+
+ self.status = self.CreateStatusBar()
+
+ # stick everything in a panel
+- mainPanel = wxPanel(self, -1)
++ mainPanel = wx.Panel(self, -1)
+
+ self.list = AutoListCtrl(mainPanel, -1,
+ ("Game Room", "Status", "Game Type", "Players"),
+@@ -126,27 +126,27 @@ class GameListWindow(wxFrame):
+ self.list.SetColumnWidth(1, 140)
+ self.list.SetColumnWidth(2, 140)
+
+- mainSizer = wxBoxSizer(wxVERTICAL)
+- mainSizer.Add(self.list, 1, wxALIGN_CENTRE|wxEXPAND|wxALL, 5)
++ mainSizer = wx.BoxSizer(wx.VERTICAL)
++ mainSizer.Add(self.list, 1, wx.ALIGN_CENTRE|wx.EXPAND|wx.ALL, 5)
+
+- self.selectButton = wxButton(mainPanel, -1, "Join Game")
++ self.selectButton = wx.Button(mainPanel, -1, "Join Game")
+ self.selectButton.Disable()
+- self.createButton = wxButton(mainPanel, -1, "New Game")
+- buttonSizer = wxBoxSizer(wxHORIZONTAL)
+- buttonSizer.Add((1, 1), 1, wxEXPAND)
+- buttonSizer.Add(self.createButton, 0, wxALIGN_CENTRE | wxRIGHT | wxBOTTOM | wxALL, 5)
+- buttonSizer.Add(self.selectButton, 0, wxALIGN_CENTRE | wxRIGHT | wxBOTTOM | wxALL, 5)
+- mainSizer.Add(buttonSizer, 0, wxEXPAND, 0)
++ self.createButton = wx.Button(mainPanel, -1, "New Game")
++ buttonSizer = wx.BoxSizer(wx.HORIZONTAL)
++ buttonSizer.Add((1, 1), 1, wx.EXPAND)
++ buttonSizer.Add(self.createButton, 0, wx.ALIGN_CENTRE | wx.RIGHT | wx.BOTTOM | wx.ALL, 5)
++ buttonSizer.Add(self.selectButton, 0, wx.ALIGN_CENTRE | wx.RIGHT | wx.BOTTOM | wx.ALL, 5)
++ mainSizer.Add(buttonSizer, 0, wx.EXPAND, 0)
+
+ mainPanel.SetSizer(mainSizer)
+ mainSizer.Fit(mainPanel)
+
+- EVT_MENU(self, EXIT, self.menuExit)
+- EVT_MENU(self, DISCONNECT, self.menuDisconnect)
+- EVT_LIST_ITEM_SELECTED(self, self.list.GetId(), self.enableSelectButton)
+- EVT_LIST_ITEM_DESELECTED(self, self.list.GetId(), self.disableSelectButton)
+- EVT_BUTTON(self, self.selectButton.GetId(), self.joinGame)
+- EVT_BUTTON(self, self.createButton.GetId(), self.createGame)
++ wx.EVT_MENU(self, EXIT, self.menuExit)
++ wx.EVT_MENU(self, DISCONNECT, self.menuDisconnect)
++ wx.EVT_LIST_ITEM_SELECTED(self, self.list.GetId(), self.enableSelectButton)
++ wx.EVT_LIST_ITEM_DESELECTED(self, self.list.GetId(), self.disableSelectButton)
++ wx.EVT_BUTTON(self, self.selectButton.GetId(), self.joinGame)
++ wx.EVT_BUTTON(self, self.createButton.GetId(), self.createGame)
+
+
+ def addGame(self, data):
+@@ -160,7 +160,7 @@ class GameListWindow(wxFrame):
+
+
+ def enableSelectButton(self, event):
+- self.selectButton.Enable(TRUE)
++ self.selectButton.Enable(True)
+
+
+ def disableSelectButton(self, event):
+@@ -176,29 +176,29 @@ class GameListWindow(wxFrame):
+
+
+ def joinGame(self, event):
+- selected = self.list.GetNextItem(-1, wxLIST_NEXT_ALL, wxLIST_STATE_SELECTED)
++ selected = self.list.GetNextItem(-1, wx.LIST_NEXT_ALL, wx.LIST_STATE_SELECTED)
+ self._messenger.netJoinGame(self.list.GetItemText(selected))
+
+
+ def showInfoAlert(self, info):
+ self.PushStatusText("")
+- alert = wxMessageDialog(self, info,
+- "Server Message", wxOK|wxICON_INFORMATION)
++ alert = wx.MessageDialog(self, info,
++ "Server Message", wx.OK|wx.ICON_INFORMATION)
+ alert.ShowModal()
+
+
+ def menuExit(self, event):
+- alert = wxMessageDialog(self, "Disconnect from the server and exit London Law?",
+- "Disconnect and Quit", wxYES_NO|wxICON_EXCLAMATION)
+- if alert.ShowModal() == wxID_YES:
++ alert = wx.MessageDialog(self, "Disconnect from the server and exit London Law?",
++ "Disconnect and Quit", wx.YES_NO|wx.ICON_EXCLAMATION)
++ if alert.ShowModal() == wx.ID_YES:
+ self._messenger.netDisconnect()
+ self.Close()
+
+
+ def menuDisconnect(self, event):
+- alert = wxMessageDialog(self, "Disconnect from the server?",
+- "Disconnect", wxYES_NO|wxICON_EXCLAMATION)
+- if alert.ShowModal() == wxID_YES:
++ alert = wx.MessageDialog(self, "Disconnect from the server?",
++ "Disconnect", wx.YES_NO|wx.ICON_EXCLAMATION)
++ if alert.ShowModal() == wx.ID_YES:
+ self._messenger.netDisconnect()
+ self._messenger.guiLaunchConnectionWindow()
+
+Index: londonlaw-0.2.1/londonlaw/guiclient/HistoryWindow.py
+===================================================================
+--- londonlaw-0.2.1.orig/londonlaw/guiclient/HistoryWindow.py
++++ londonlaw-0.2.1/londonlaw/guiclient/HistoryWindow.py
+@@ -22,27 +22,27 @@
+ # has a scroll bar to control the view.
+
+
+-from wxPython.wx import *
++import wx
+ from TextPanel import *
+ from StaticBitmap import *
+ from londonlaw.common.config import *
+ import os, sys, string
+
+-class HistoryWindow(wxScrolledWindow):
++class HistoryWindow(wx.ScrolledWindow):
+ def __init__(self, parent):
+- wxScrolledWindow.__init__(self, parent)
++ wx.ScrolledWindow.__init__(self, parent)
+
+ # load in the ticket images
+ self.ticketImages = []
+ for i in range(5):
+ filename = os.path.normpath(os.path.join(MEDIAROOT, "images/ticket" + str(i) + ".png"))
+- self.ticketImages.append(wxImage(filename, wxBITMAP_TYPE_ANY))
++ self.ticketImages.append(wx.Image(filename, wx.BITMAP_TYPE_ANY))
+
+ # the toplevel sizer is this two-column FlexGridSizer;
+ # the left column is filled with vertical wxBoxSizers,
+ # each of which places the turn number above Mr. X's
+ # known locations.
+- self.ticketSizer = wxFlexGridSizer(24, 2, 0, 0)
++ self.ticketSizer = wx.FlexGridSizer(24, 2, 0, 0)
+
+ self.vbSizers = []
+ self.turns = []
+@@ -55,28 +55,28 @@ class HistoryWindow(wxScrolledWindow):
+ self.panels2 = []
+ self.panelSizers2 = []
+ for i in range(24):
+- self.panels.append(wxPanel(self, -1, wxDefaultPosition, wxDefaultSize, wxSIMPLE_BORDER))
++ self.panels.append(wx.Panel(self, -1, wx.DefaultPosition, wx.DefaultSize, wx.SIMPLE_BORDER))
+ self.turns.append(TextPanel(self.panels[i], " Turn " + str(i+1) + " ",
+ 12, 0))
+ self.locations.append(TextPanel(self.panels[i], " ", 16, 0))
+
+- self.vbSizers.append(wxBoxSizer(wxVERTICAL))
+- self.vbSizers[i].Add(self.turns[i], 1, wxEXPAND|wxCENTRE|wxADJUST_MINSIZE)
+- self.vbSizers[i].Add(self.locations[i], 1, wxEXPAND|wxCENTRE|wxADJUST_MINSIZE)
++ self.vbSizers.append(wx.BoxSizer(wx.VERTICAL))
++ self.vbSizers[i].Add(self.turns[i], 1, wx.EXPAND|wx.CENTRE|wx.ADJUST_MINSIZE)
++ self.vbSizers[i].Add(self.locations[i], 1, wx.EXPAND|wx.CENTRE|wx.ADJUST_MINSIZE)
+
+- self.panelSizers.append(wxBoxSizer(wxHORIZONTAL))
+- self.panelSizers[i].Add(self.vbSizers[i], 1, wxEXPAND)
++ self.panelSizers.append(wx.BoxSizer(wx.HORIZONTAL))
++ self.panelSizers[i].Add(self.vbSizers[i], 1, wx.EXPAND)
+ self.panels[i].SetSizerAndFit(self.panelSizers[i])
+
+- self.panels2.append(wxPanel(self, -1, wxDefaultPosition, wxDefaultSize, wxSIMPLE_BORDER))
+- self.tickets.append(StaticBitmap(self.panels2[i], -1, wxBitmapFromImage(self.ticketImages[4])))
++ self.panels2.append(wx.Panel(self, -1, wx.DefaultPosition, wx.DefaultSize, wx.SIMPLE_BORDER))
++ self.tickets.append(StaticBitmap(self.panels2[i], -1, wx.BitmapFromImage(self.ticketImages[4])))
+
+- self.panelSizers2.append(wxBoxSizer(wxHORIZONTAL))
+- self.panelSizers2[i].Add(self.tickets[i], 1, wxEXPAND)
++ self.panelSizers2.append(wx.BoxSizer(wx.HORIZONTAL))
++ self.panelSizers2[i].Add(self.tickets[i], 1, wx.EXPAND)
+ self.panels2[i].SetSizerAndFit(self.panelSizers2[i])
+
+- self.ticketSizer.Add(self.panels[i], 0, wxEXPAND|wxCENTRE|wxLEFT|wxTOP, 5)
+- self.ticketSizer.Add(self.panels2[i], 0, wxEXPAND|wxCENTRE|wxLEFT|wxTOP|wxRIGHT, 5)
++ self.ticketSizer.Add(self.panels[i], 0, wx.EXPAND|wx.CENTRE|wx.LEFT|wx.TOP, 5)
++ self.ticketSizer.Add(self.panels2[i], 0, wx.EXPAND|wx.CENTRE|wx.LEFT|wx.TOP|wx.RIGHT, 5)
+
+ self.showSurfacingTurns()
+
+@@ -86,12 +86,12 @@ class HistoryWindow(wxScrolledWindow):
+ # pform = string.lower(sys.platform)
+ # if pform.startswith("win") or pform.startswith("darwin"):
+ (w, h) = self.ticketSizer.GetMinSize()
+- self.ticketSizer.SetMinSize(wxSize(w+15, h))
++ self.ticketSizer.SetMinSize(wx.Size(w+15, h))
+
+ self.ticketSizer.Fit(self)
+ self.SetScrollRate(0, 10)
+
+- # The following doesn't seem to work in wxGTK...
++ # The following doesn't seem to work in wx.GTK...
+ # self.SetSizerAndFit(self.ticketSizer)
+
+
+@@ -101,15 +101,15 @@ class HistoryWindow(wxScrolledWindow):
+ self.locations[turnNum].Destroy()
+ self.locations[turnNum] = TextPanel(self.panels[turnNum], " " + locStr + " ",
+ 16, 0)
+- self.vbSizers[turnNum].Add(self.locations[turnNum], 1, wxEXPAND|wxCENTRE)
++ self.vbSizers[turnNum].Add(self.locations[turnNum], 1, wx.EXPAND|wx.CENTRE)
+
+ self.panelSizers[turnNum].Layout()
+
+
+ # update one of the ticket graphics
+ def setTicket(self, turnNum, tickNum):
+- self.tickets[turnNum].SetBitmap(wxBitmapFromImage(self.ticketImages[tickNum]))
+- self.tickets[turnNum].Refresh(FALSE)
++ self.tickets[turnNum].SetBitmap(wx.BitmapFromImage(self.ticketImages[tickNum]))
++ self.tickets[turnNum].Refresh(False)
+
+
+ # draw question marks for the location entries where Mr. X will
+Index: londonlaw-0.2.1/londonlaw/guiclient/MainWindow.py
+===================================================================
+--- londonlaw-0.2.1.orig/londonlaw/guiclient/MainWindow.py
++++ londonlaw-0.2.1/londonlaw/guiclient/MainWindow.py
+@@ -21,7 +21,7 @@
+ # This class handles the main in-game window. It has a map window,
+ # a set of player status icons, a chat area, and some useful buttons.
+
+-from wxPython.wx import *
++import wx
+ from MapWindow import *
+ from ChatPanel import *
+ from PlayerIcon import *
+@@ -33,11 +33,11 @@ import time
+
+
+
+-class MainWindow(wxFrame):
++class MainWindow(wx.Frame):
+ # players is a list of Mr. X and all detectives, their
+ # positions, and their tokens
+ def __init__(self, parent, ID, title, username, playerList, messenger):
+- wxFrame.__init__(self, parent, ID, title)
++ wx.Frame.__init__(self, parent, ID, title)
+
+ self.username = username
+ self.playerList = playerList
+@@ -62,18 +62,18 @@ class MainWindow(wxFrame):
+ self.ABOUT = 105
+
+ # Create a menu bar
+- menuBar = wxMenuBar()
+- self.fileMenu = wxMenu()
++ menuBar = wx.MenuBar()
++ self.fileMenu = wx.Menu()
+ self.fileMenu.Append(self.DISCONNECT, "Disconnect", "Disconnect from server")
+ self.fileMenu.Append(self.EXIT, "Exit\tCTRL+Q", "Exit London Law")
+ menuBar.Append(self.fileMenu, "File")
+- self.viewMenu = wxMenu()
++ self.viewMenu = wx.Menu()
+ self.viewMenu.AppendCheckItem(self.FULLSCREEN, "Fullscreen Map\tCTRL+F11", "Toggle fullscreen map view")
+ self.viewMenu.AppendCheckItem(self.ZOOM, "Map Zoom\tCTRL+Z", "Toggle map zoom level")
+ self.viewMenu.AppendCheckItem(self.HISTORY, "Mr. X History\tCTRL+Y", "Show/hide the Mr. X history window")
+- self.viewMenu.Check(self.HISTORY, true)
++ self.viewMenu.Check(self.HISTORY, True)
+ menuBar.Append(self.viewMenu, "View")
+- self.helpMenu = wxMenu()
++ self.helpMenu = wx.Menu()
+ self.helpMenu.Append(self.ABOUT, "About London Law", "About London Law")
+ menuBar.Append(self.helpMenu, "Help")
+ self.SetMenuBar(menuBar)
+@@ -91,7 +91,7 @@ class MainWindow(wxFrame):
+
+ # contain everything in a panel to get rid of the lame dark grey
+ # background in Win32
+- self.panel = wxPanel(self, -1)
++ self.panel = wx.Panel(self, -1)
+
+ # create the map window
+ self.mapWindow = MapWindow(self.panel, usernameList)
+@@ -113,39 +113,39 @@ class MainWindow(wxFrame):
+ self.icons = PlayerIconGroup(self.panel, usernameList, tokenList)
+
+ # create the pushbuttons
+- self.moveButton = wxButton(self.panel, -1, "Move")
+- self.moveButton.Enable(false)
+- self.historyButton = wxCheckBox(self.panel, -1, "View History")
+- self.historyButton.SetValue(true)
+- self.zoomButton = wxCheckBox(self.panel, -1, "Zoom")
+- self.buttonSizer = wxBoxSizer(wxVERTICAL)
+- self.buttonSizer.Add(self.zoomButton, 0, wxALL, 5)
+- self.buttonSizer.Add(self.historyButton, 0, wxALL, 5)
+- self.buttonSizer.Add(self.moveButton, 0, wxALL, 5)
++ self.moveButton = wx.Button(self.panel, -1, "Move")
++ self.moveButton.Enable(False)
++ self.historyButton = wx.CheckBox(self.panel, -1, "View History")
++ self.historyButton.SetValue(True)
++ self.zoomButton = wx.CheckBox(self.panel, -1, "Zoom")
++ self.buttonSizer = wx.BoxSizer(wx.VERTICAL)
++ self.buttonSizer.Add(self.zoomButton, 0, wx.ALL, 5)
++ self.buttonSizer.Add(self.historyButton, 0, wx.ALL, 5)
++ self.buttonSizer.Add(self.moveButton, 0, wx.ALL, 5)
+
+ # create a history window
+ self.historyWin = HistoryWindow(self.panel)
+
+- self.centerSizer = wxBoxSizer(wxHORIZONTAL)
+- self.centerSizer.Add(self.icons, 0, wxALIGN_CENTRE|wxALL)
+- self.centerSizer.Add(self.buttonSizer, 0, wxALIGN_CENTRE)
++ self.centerSizer = wx.BoxSizer(wx.HORIZONTAL)
++ self.centerSizer.Add(self.icons, 0, wx.ALIGN_CENTRE|wx.ALL)
++ self.centerSizer.Add(self.buttonSizer, 0, wx.ALIGN_CENTRE)
+
+ # the main window is composed of three areas stacked vertically:
+ # map window, player status icons, and chat windows.
+ # Use a Sizer to handle this geometry.
+- self.mainSizer = wxBoxSizer(wxVERTICAL)
+- self.mainSizer.Add(self.mapWindow, 1, wxEXPAND|wxBOTTOM, 5)
+- self.mainSizer.Add(self.centerSizer, 0, wxALIGN_CENTRE)
+- self.mainSizer.Add(self.chatWindow, 0, wxEXPAND | wxALL, 5)
+-
+- self.panelSizer = wxBoxSizer(wxHORIZONTAL)
+- self.panelSizer.Add(self.historyWin, 0, wxEXPAND)
+- self.panelSizer.Add(self.mainSizer, 1, wxEXPAND)
++ self.mainSizer = wx.BoxSizer(wx.VERTICAL)
++ self.mainSizer.Add(self.mapWindow, 1, wx.EXPAND|wx.BOTTOM, 5)
++ self.mainSizer.Add(self.centerSizer, 0, wx.ALIGN_CENTRE)
++ self.mainSizer.Add(self.chatWindow, 0, wx.EXPAND | wx.ALL, 5)
++
++ self.panelSizer = wx.BoxSizer(wx.HORIZONTAL)
++ self.panelSizer.Add(self.historyWin, 0, wx.EXPAND)
++ self.panelSizer.Add(self.mainSizer, 1, wx.EXPAND)
+
+ self.panel.SetSizer(self.panelSizer)
+
+- self.topSizer = wxBoxSizer(wxVERTICAL)
+- self.topSizer.Add(self.panel, 1, wxEXPAND)
++ self.topSizer = wx.BoxSizer(wx.VERTICAL)
++ self.topSizer.Add(self.panel, 1, wx.EXPAND)
+ self.SetSizer(self.topSizer)
+ self.topSizer.Fit(self)
+ self.SetAutoLayout(1)
+@@ -154,29 +154,29 @@ class MainWindow(wxFrame):
+
+ # need a data structure to hold a move from a MoveDialog
+ self.move = []
+- self.moveDialogId = wxNewId()
++ self.moveDialogId = wx.NewId()
+
+ # initialize pixelToLoc algorithm
+ generateGridHash()
+
+ # make the buttons do some stuff
+- EVT_CHECKBOX(self, self.zoomButton.GetId(), self.toggleZoom)
+- EVT_CHECKBOX(self, self.historyButton.GetId(), self.toggleHistory)
+- EVT_BUTTON(self, self.moveButton.GetId(), self.makeMove)
+- EVT_TEXT_ENTER(self, self.chatWindow.chatEntry.GetId(), self.chatSend)
+- EVT_MENU(self, self.EXIT, self.menuExit)
+- EVT_MENU(self, self.DISCONNECT, self.menuDisconnect)
+- EVT_MENU(self, self.FULLSCREEN, self.toggleFullscreen)
+- EVT_MENU(self, self.ZOOM, self.toggleMenuZoom)
+- EVT_MENU(self, self.HISTORY, self.toggleMenuHistory)
+- EVT_MENU(self, self.ABOUT, self.showAbout)
+- EVT_LEFT_DCLICK(self.icons.players[0].icon, self.scrollToPlayer0)
+- EVT_LEFT_DCLICK(self.icons.players[1].icon, self.scrollToPlayer1)
+- EVT_LEFT_DCLICK(self.icons.players[2].icon, self.scrollToPlayer2)
+- EVT_LEFT_DCLICK(self.icons.players[3].icon, self.scrollToPlayer3)
+- EVT_LEFT_DCLICK(self.icons.players[4].icon, self.scrollToPlayer4)
+- EVT_LEFT_DCLICK(self.icons.players[5].icon, self.scrollToPlayer5)
+- EVT_LEFT_DCLICK(self.mapWindow, self.moveToClicked)
++ wx.EVT_CHECKBOX(self, self.zoomButton.GetId(), self.toggleZoom)
++ wx.EVT_CHECKBOX(self, self.historyButton.GetId(), self.toggleHistory)
++ wx.EVT_BUTTON(self, self.moveButton.GetId(), self.makeMove)
++ wx.EVT_TEXT_ENTER(self, self.chatWindow.chatEntry.GetId(), self.chatSend)
++ wx.EVT_MENU(self, self.EXIT, self.menuExit)
++ wx.EVT_MENU(self, self.DISCONNECT, self.menuDisconnect)
++ wx.EVT_MENU(self, self.FULLSCREEN, self.toggleFullscreen)
++ wx.EVT_MENU(self, self.ZOOM, self.toggleMenuZoom)
++ wx.EVT_MENU(self, self.HISTORY, self.toggleMenuHistory)
++ wx.EVT_MENU(self, self.ABOUT, self.showAbout)
++ wx.EVT_LEFT_DCLICK(self.icons.players[0].icon, self.scrollToPlayer0)
++ wx.EVT_LEFT_DCLICK(self.icons.players[1].icon, self.scrollToPlayer1)
++ wx.EVT_LEFT_DCLICK(self.icons.players[2].icon, self.scrollToPlayer2)
++ wx.EVT_LEFT_DCLICK(self.icons.players[3].icon, self.scrollToPlayer3)
++ wx.EVT_LEFT_DCLICK(self.icons.players[4].icon, self.scrollToPlayer4)
++ wx.EVT_LEFT_DCLICK(self.icons.players[5].icon, self.scrollToPlayer5)
++ wx.EVT_LEFT_DCLICK(self.mapWindow, self.moveToClicked)
+
+
+ def addChatMessage(self, chatType, data):
+@@ -187,17 +187,17 @@ class MainWindow(wxFrame):
+
+
+ def menuExit(self, event):
+- alert = wxMessageDialog(self, "Disconnect from the server and exit London Law?",
+- "Disconnect and Quit", wxYES_NO|wxICON_EXCLAMATION)
+- if alert.ShowModal() == wxID_YES:
++ alert = wx.MessageDialog(self, "Disconnect from the server and exit London Law?",
++ "Disconnect and Quit", wx.YES_NO|wx.ICON_EXCLAMATION)
++ if alert.ShowModal() == wx.ID_YES:
+ self.messenger.netDisconnect()
+ self.Close()
+
+
+ def menuDisconnect(self, event):
+- alert = wxMessageDialog(self, "Disconnect from the server?",
+- "Disconnect", wxYES_NO|wxICON_EXCLAMATION)
+- if alert.ShowModal() == wxID_YES:
++ alert = wx.MessageDialog(self, "Disconnect from the server?",
++ "Disconnect", wx.YES_NO|wx.ICON_EXCLAMATION)
++ if alert.ShowModal() == wx.ID_YES:
+ self.messenger.netDisconnect()
+ self.messenger.guiLaunchConnectionWindow()
+
+@@ -268,8 +268,8 @@ class MainWindow(wxFrame):
+
+ # pop up an alert box when X uses a double move
+ if mover == self.lastMover and not self.isMrX:
+- alert = wxMessageDialog(self, "Mr. X just used a double move ticket!",
+- "Double Move", wxOK|wxICON_INFORMATION)
++ alert = wx.MessageDialog(self, "Mr. X just used a double move ticket!",
++ "Double Move", wx.OK|wx.ICON_INFORMATION)
+ alert.ShowModal()
+
+ self.lastMover = mover
+@@ -320,17 +320,17 @@ class MainWindow(wxFrame):
+
+
+ def showInfoAlert(self, info):
+- alert = wxMessageDialog(self, info,
+- "Server Message", wxOK|wxICON_INFORMATION)
++ alert = wx.MessageDialog(self, info,
++ "Server Message", wx.OK|wx.ICON_INFORMATION)
+ alert.ShowModal()
+
+
+ def toggleZoom(self, event):
+ if self.zoomButton.GetValue():
+- self.viewMenu.Check(self.ZOOM, true)
++ self.viewMenu.Check(self.ZOOM, True)
+ self.mapWindow.zoomIn()
+ else:
+- self.viewMenu.Check(self.ZOOM, false)
++ self.viewMenu.Check(self.ZOOM, False)
+ self.mapWindow.zoomOut()
+
+
+@@ -341,17 +341,17 @@ class MainWindow(wxFrame):
+
+ def toggleHistory(self, event):
+ if self.historyButton.GetValue():
+- self.viewMenu.Check(self.HISTORY, true)
+- self.panelSizer.Prepend(self.historyWin, 0, wxEXPAND)
+- self.historyWin.Show(true)
++ self.viewMenu.Check(self.HISTORY, True)
++ self.panelSizer.Prepend(self.historyWin, 0, wx.EXPAND)
++ self.historyWin.Show(True)
+ self.panelSizer.Layout()
+ else:
+- self.viewMenu.Check(self.HISTORY, false)
+- self.historyWin.Show(false)
+- self.panelSizer.Remove(self.historyWin)
++ self.viewMenu.Check(self.HISTORY, False)
++ self.historyWin.Show(False)
++ self.panelSizer.Detach(self.historyWin)
+ self.panelSizer.Layout()
+
+- # fix for graphical glitches in wxMSW
++ # fix for graphical glitches in wx.MSW
+ self.zoomButton.Refresh()
+ self.historyButton.Refresh()
+ self.moveButton.Refresh()
+@@ -365,8 +365,8 @@ class MainWindow(wxFrame):
+ def toggleFullscreen(self, event):
+ if not self.fullscreen:
+ self.fullscreen = 1
+- self.viewMenu.Enable(self.HISTORY, false)
+- self.viewMenu.Check(self.FULLSCREEN, true)
++ self.viewMenu.Enable(self.HISTORY, False)
++ self.viewMenu.Check(self.FULLSCREEN, True)
+ if self.historyButton.GetValue():
+ self.historyWin.Hide()
+ self.panelSizer.Remove(self.historyWin)
+@@ -386,34 +386,34 @@ class MainWindow(wxFrame):
+ self.panelSizer.Layout()
+ else:
+ self.fullscreen = 0
+- self.viewMenu.Enable(self.HISTORY, true)
+- self.viewMenu.Check(self.FULLSCREEN, false)
++ self.viewMenu.Enable(self.HISTORY, True)
++ self.viewMenu.Check(self.FULLSCREEN, False)
+ if self.historyButton.GetValue():
+ self.historyWin.Show()
+- self.panelSizer.Prepend(self.historyWin, 0, wxEXPAND)
+- self.buttonSizer = wxBoxSizer(wxVERTICAL)
+- self.buttonSizer.Add(self.zoomButton, 0, wxALL, 5)
+- self.buttonSizer.Add(self.historyButton, 0, wxALL, 5)
+- self.buttonSizer.Add(self.moveButton, 0, wxALL, 5)
+- self.centerSizer = wxBoxSizer(wxHORIZONTAL)
+- self.centerSizer.Add(self.icons, 0, wxALIGN_CENTRE|wxALL)
+- self.centerSizer.Add(self.buttonSizer, 0, wxALIGN_CENTRE)
+- self.mainSizer.Add(self.centerSizer, 0, wxALIGN_CENTRE)
++ self.panelSizer.Prepend(self.historyWin, 0, wx.EXPAND)
++ self.buttonSizer = wx.BoxSizer(wx.VERTICAL)
++ self.buttonSizer.Add(self.zoomButton, 0, wx.ALL, 5)
++ self.buttonSizer.Add(self.historyButton, 0, wx.ALL, 5)
++ self.buttonSizer.Add(self.moveButton, 0, wx.ALL, 5)
++ self.centerSizer = wx.BoxSizer(wx.HORIZONTAL)
++ self.centerSizer.Add(self.icons, 0, wx.ALIGN_CENTRE|wx.ALL)
++ self.centerSizer.Add(self.buttonSizer, 0, wx.ALIGN_CENTRE)
++ self.mainSizer.Add(self.centerSizer, 0, wx.ALIGN_CENTRE)
+ self.icons.Show()
+ self.zoomButton.Show()
+ self.historyButton.Show()
+ self.moveButton.Show()
+ self.chatWindow.Show()
+- self.mainSizer.Add(self.chatWindow, 0, wxEXPAND | wxALL, 5)
++ self.mainSizer.Add(self.chatWindow, 0, wx.EXPAND | wx.ALL, 5)
+ self.mainSizer.Layout()
+ self.panelSizer.Layout()
+
+
+ # display the About dialog
+ def showAbout(self, event):
+- about = wxMessageDialog(self, "London Law v" + LLAW_VERSION +
++ about = wx.MessageDialog(self, "London Law v" + LLAW_VERSION +
+ "\n\nA multiplayer manhunting adventure by Paul Pelzl",
+- "About London Law", wxOK|wxICON_INFORMATION)
++ "About London Law", wx.OK|wx.ICON_INFORMATION)
+ about.ShowModal()
+
+ def scrollToPlayer0(self, event):
+@@ -442,7 +442,7 @@ class MainWindow(wxFrame):
+ def setPawnTurn(self, pawnName):
+ if pawnName == "X":
+ if self.playerList[0][0] == self.username:
+- self.moveButton.Enable(true)
++ self.moveButton.Enable(True)
+ usernameStr = "you"
+ else:
+ usernameStr = self.playerList[0][0]
+@@ -451,7 +451,7 @@ class MainWindow(wxFrame):
+ self.icons.setTurn(0)
+ elif pawnName == "Red":
+ if self.playerList[1][0] == self.username:
+- self.moveButton.Enable(true)
++ self.moveButton.Enable(True)
+ usernameStr = "you"
+ else:
+ usernameStr = self.playerList[1][0]
+@@ -460,7 +460,7 @@ class MainWindow(wxFrame):
+ self.icons.setTurn(1)
+ elif pawnName == "Yellow":
+ if self.playerList[2][0] == self.username:
+- self.moveButton.Enable(true)
++ self.moveButton.Enable(True)
+ usernameStr = "you"
+ else:
+ usernameStr = self.playerList[2][0]
+@@ -469,7 +469,7 @@ class MainWindow(wxFrame):
+ self.icons.setTurn(2)
+ elif pawnName == "Green":
+ if self.playerList[3][0] == self.username:
+- self.moveButton.Enable(true)
++ self.moveButton.Enable(True)
+ usernameStr = "you"
+ else:
+ usernameStr = self.playerList[3][0]
+@@ -478,7 +478,7 @@ class MainWindow(wxFrame):
+ self.icons.setTurn(3)
+ elif pawnName == "Blue":
+ if self.playerList[4][0] == self.username:
+- self.moveButton.Enable(true)
++ self.moveButton.Enable(True)
+ usernameStr = "you"
+ else:
+ usernameStr = self.playerList[4][0]
+@@ -487,7 +487,7 @@ class MainWindow(wxFrame):
+ self.icons.setTurn(4)
+ elif pawnName == "Black":
+ if self.playerList[5][0] == self.username:
+- self.moveButton.Enable(true)
++ self.moveButton.Enable(True)
+ usernameStr = "you"
+ else:
+ usernameStr = self.playerList[5][0]
+@@ -511,7 +511,7 @@ class MainWindow(wxFrame):
+ # if event[0] == "game socket":
+ # self.socket = event[1]
+ # elif event[0] == "created move":
+-# self.moveButton.Enable(false)
++# self.moveButton.Enable(False)
+ # elif event[0] == "move dialog destroyed":
+ # self.moveDialogExists = 0
+ # elif event[0] == "incoming chat":
+@@ -547,14 +547,14 @@ class MainWindow(wxFrame):
+ # self.status.PushStatusText("It is the Blue Detective's turn (you).", 0)
+ # elif self.playerIdx == 5:
+ # self.status.PushStatusText("It is the Black Detective's turn (you).", 0)
+-# self.moveButton.Enable(true)
++# self.moveButton.Enable(True)
+ # elif event[0] == "move accepted":
+-# self.moveButton.Enable(false)
++# self.moveButton.Enable(False)
+ # elif event[0] == "move rejected":
+-# self.moveButton.Enable(true) # just in case
++# self.moveButton.Enable(True) # just in case
+ # self.status.PushStatusText("The server rejected your move. It is still your turn.", 0)
+ # elif event[0] == "double rejected":
+-# self.moveButton.Enable(true) # just in case
++# self.moveButton.Enable(True) # just in case
+ # self.status.PushStatusText("The server rejected your double move. It is still your turn.", 0)
+ # elif event[0] == "someone moved":
+ # mover = event[1]
+@@ -661,16 +661,16 @@ class MainWindow(wxFrame):
+ # elif event[0] == "x survived":
+ # self.gameover = 1
+ # self.status.PushStatusText("Mr. X survived! Game over.", 0)
+-# alert = wxMessageDialog(self, "Mr. X successfully evaded the detectives!\nGame over.",
+-# "Game Over", wxOK|wxICON_INFORMATION)
++# alert = wx.MessageDialog(self, "Mr. X successfully evaded the detectives!\nGame over.",
++# "Game Over", wx.OK|wx.ICON_INFORMATION)
+ # alert.ShowModal()
+ # elif event[0] == "detectives all stuck":
+ # for i in range(1, 6):
+ # self.icons.setStuck(i)
+ # self.gameover = 1
+ # self.status.PushStatusText("The detectives are all stuck! Game over.", 0)
+-# alert = wxMessageDialog(self, "The detectives are all stuck!\nMr. X makes a clean getaway. Game over.",
+-# "Game Over", wxOK|wxICON_INFORMATION)
++# alert = wx.MessageDialog(self, "The detectives are all stuck!\nMr. X makes a clean getaway. Game over.",
++# "Game Over", wx.OK|wx.ICON_INFORMATION)
+ # alert.ShowModal()
+ # elif event[0] == "x is caught":
+ # self.gameover = 1
+@@ -685,12 +685,12 @@ class MainWindow(wxFrame):
+ # elif event[1] == 5:
+ # detstr = "the Black Detective"
+ # self.status.PushStatusText("Mr. X was caught by "+detstr+" at "+`event[2]`+". The detectives win!", 0)
+-# alert = wxMessageDialog(self, "Mr. X was caught by "+detstr+" at "+`event[2]`+
+-# ". The detectives win!\nGame over.", "Game Over", wxOK|wxICON_INFORMATION)
++# alert = wx.MessageDialog(self, "Mr. X was caught by "+detstr+" at "+`event[2]`+
++# ". The detectives win!\nGame over.", "Game Over", wx.OK|wx.ICON_INFORMATION)
+ # alert.ShowModal()
+ # elif event[0] == "connection error":
+-# alert = wxMessageDialog(self, "The server reports that the connection to "+`event[1]`+" was lost.\n" +
+-# "The game will end.", "Connection Error", wxOK|wxICON_INFORMATION)
++# alert = wx.MessageDialog(self, "The server reports that the connection to "+`event[1]`+" was lost.\n" +
++# "The game will end.", "Connection Error", wx.OK|wx.ICON_INFORMATION)
+ # alert.ShowModal()
+ # self.disconnecting = 1
+ # # FIXME: need a little more here... disable some widgets and so forth
+@@ -703,8 +703,8 @@ class MainWindow(wxFrame):
+ # self.status.PushStatusText("Disconnected from server.", 0)
+ # # FIXME: need a little more here... disable some widgets and so forth
+ # elif not self.gameover:
+-# alert = wxMessageDialog(self, "The connection to the server was lost.\nThe game will end.",
+-# "Connection Error", wxOK|wxICON_ERROR)
++# alert = wx.MessageDialog(self, "The connection to the server was lost.\nThe game will end.",
++# "Connection Error", wx.OK|wx.ICON_ERROR)
+ # alert.ShowModal()
+ # # FIXME: need a little more here... disable some widgets and so forth
+ # elif event[0] == "replay turn":
+Index: londonlaw-0.2.1/londonlaw/guiclient/MapWindow.py
+===================================================================
+--- londonlaw-0.2.1.orig/londonlaw/guiclient/MapWindow.py
++++ londonlaw-0.2.1/londonlaw/guiclient/MapWindow.py
+@@ -24,7 +24,7 @@
+ # to launch a MoveDialog.
+
+
+-from wxPython.wx import *
++import wx
+ from TextPanel import *
+ from graphicalmap import *
+ from londonlaw.common.config import *
+@@ -34,18 +34,18 @@ import os
+ PlayerNumError = "Player Number Error"
+
+
+-class MapWindow(wxScrolledWindow):
++class MapWindow(wx.ScrolledWindow):
+ def __init__(self, parent, usernameList):
+- wxScrolledWindow.__init__(self, parent)
++ wx.ScrolledWindow.__init__(self, parent)
+
+ # load the map image and prepare a DC for it
+ mapImageFile = os.path.normpath(os.path.join(MEDIAROOT, "images/map.jpg"))
+- mapImage = wxImage(mapImageFile, wxBITMAP_TYPE_JPEG)
+- self.mapBitmap = wxBitmapFromImage(mapImage)
+- self.bmpDC = wxMemoryDC()
++ mapImage = wx.Image(mapImageFile, wx.BITMAP_TYPE_JPEG)
++ self.mapBitmap = wx.BitmapFromImage(mapImage)
++ self.bmpDC = wx.MemoryDC()
+ mapImageFile = os.path.normpath(os.path.join(MEDIAROOT, "images/map-quarter.jpg"))
+- mapImage = wxImage(mapImageFile, wxBITMAP_TYPE_JPEG)
+- self.mapBitmapSmall = wxBitmapFromImage(mapImage)
++ mapImage = wx.Image(mapImageFile, wx.BITMAP_TYPE_JPEG)
++ self.mapBitmapSmall = wx.BitmapFromImage(mapImage)
+ self.bmpDC.SelectObject(self.mapBitmapSmall)
+
+ self.zoomLevel = 2
+@@ -56,13 +56,13 @@ class MapWindow(wxScrolledWindow):
+ self.SetVirtualSize((self.mapBitmapSmall.GetWidth(), self.mapBitmapSmall.GetHeight()))
+ self.SetScrollRate(10, 10)
+
+- self.maskColour = wxColour(10,10,10)
+- self.pen = wxPen(wxBLACK, 3, wxSOLID)
+- self.brush = wxBrush(wxWHITE, wxSOLID)
+- self.bgBrush = wxBrush(self.maskColour, wxSOLID)
+- self.pushpinDC = wxMemoryDC()
++ self.maskColour = wx.Colour(10,10,10)
++ self.pen = wx.Pen(wx.BLACK, 3, wx.SOLID)
++ self.brush = wx.Brush(wx.WHITE, wx.SOLID)
++ self.bgBrush = wx.Brush(self.maskColour, wx.SOLID)
++ self.pushpinDC = wx.MemoryDC()
+
+- self.labelsShown = false
++ self.labelsShown = False
+
+ self.playerLoc = []
+ self.pushpins = []
+@@ -72,33 +72,33 @@ class MapWindow(wxScrolledWindow):
+ for i in range(6):
+ self.playerLoc.append(0)
+ filename = os.path.normpath(os.path.join(MEDIAROOT, "images/pin" + str(i) + ".png"))
+- pushpinImage = wxImage(filename, wxBITMAP_TYPE_ANY)
++ pushpinImage = wx.Image(filename, wx.BITMAP_TYPE_ANY)
+ pushpinImage.SetMaskColour(255, 0, 242) # the purplish colour is not to be drawn
+- pushpinBitmap = wxBitmapFromImage(pushpinImage)
++ pushpinBitmap = wx.BitmapFromImage(pushpinImage)
+ self.pushpins.append(pushpinBitmap)
+- pushpinBackBmp = wxEmptyBitmap(pushpinBitmap.GetWidth(), pushpinBitmap.GetHeight(), -1)
++ pushpinBackBmp = wx.EmptyBitmap(pushpinBitmap.GetWidth(), pushpinBitmap.GetHeight(), -1)
+ self.pushpinBackgrounds.append(pushpinBackBmp)
+- self.labels.append(TextPanel(self, " " + usernameList[i][:20] + " ", 10, wxSIMPLE_BORDER))
++ self.labels.append(TextPanel(self, " " + usernameList[i][:20] + " ", 10, wx.SIMPLE_BORDER))
+ self.labels[i].Hide()
+- self.labels[i].SetBackgroundColour(wxColour(220, 220, 220))
++ self.labels[i].SetBackgroundColour(wx.Colour(220, 220, 220))
+
+
+- EVT_PAINT(self, self.OnPaint)
+- EVT_ERASE_BACKGROUND(self, self.OnEraseBackground)
++ wx.EVT_PAINT(self, self.OnPaint)
++ wx.EVT_ERASE_BACKGROUND(self, self.OnEraseBackground)
+ # scroll the map on middle or right button drag
+- EVT_MIDDLE_DOWN(self, self.handleMiddleOrRightMouse)
+- EVT_RIGHT_DOWN(self, self.handleMiddleOrRightMouse)
+- EVT_MOTION(self, self.handleMoveMouse)
++ wx.EVT_MIDDLE_DOWN(self, self.handleMiddleOrRightMouse)
++ wx.EVT_RIGHT_DOWN(self, self.handleMiddleOrRightMouse)
++ wx.EVT_MOTION(self, self.handleMoveMouse)
+
+
+ def OnPaint(self, event):
+- dc = wxPaintDC(self)
++ dc = wx.PaintDC(self)
+ self.PrepareDC(dc)
+ self.OnDraw(dc)
+
+
+ # try to eliminate flicker from painting the window background.
+- # (why doesn't this work in wxGTK?)
++ # (why doesn't this work in wx.GTK?)
+ def OnEraseBackground(self, event):
+ pass
+
+@@ -114,7 +114,7 @@ class MapWindow(wxScrolledWindow):
+ newX, newY = event.GetPosition()
+ stepX, stepY = self.GetScrollPixelsPerUnit()
+ sX, sY = self.GetViewStart()
+- if (event.m_rightDown or event.m_middleDown) and event.Dragging():
++ if (event.rightIsDown or event.middleIsDown) and event.Dragging():
+ pixelDX = newX - self.oldX
+ pixelDY = newY - self.oldY
+ dx = pixelDX / stepX
+@@ -130,10 +130,10 @@ class MapWindow(wxScrolledWindow):
+ if loc == self.playerLoc[i]:
+ self.labels[i].Show()
+ self.labels[i].Raise()
+- self.labelsShown = true
++ self.labelsShown = True
+ break
+ elif self.labelsShown:
+- self.labelsShown = false
++ self.labelsShown = False
+ for i in range(6):
+ self.labels[i].Hide()
+
+@@ -203,7 +203,7 @@ class MapWindow(wxScrolledWindow):
+ self.pushpinDC.BeginDrawing()
+ self.bmpDC.Blit(mapPixel[0]-self.pushpinOffset[0], mapPixel[1]-self.pushpinOffset[1],
+ self.pushpinBackgrounds[playerNum].GetWidth(),
+- self.pushpinBackgrounds[playerNum].GetHeight(), self.pushpinDC, 0, 0, wxCOPY, TRUE)
++ self.pushpinBackgrounds[playerNum].GetHeight(), self.pushpinDC, 0, 0, wx.COPY, True)
+ self.pushpinDC.EndDrawing()
+
+
+@@ -256,7 +256,7 @@ class MapWindow(wxScrolledWindow):
+ sX, sY = self.GetViewStart()
+ self.labels[i].MoveXY(mapPixel[0] - 20 - sX*stepX, mapPixel[1] - 10 - sY*stepY)
+
+- self.Refresh(FALSE)
++ self.Refresh(False)
+
+
+ # switch to zoom level 2
+@@ -290,7 +290,7 @@ class MapWindow(wxScrolledWindow):
+ sX, sY = self.GetViewStart()
+ self.labels[i].MoveXY(mapPixel[0] - 20 - sX*stepX, mapPixel[1] - 10 - sY*stepY)
+
+- self.Refresh(FALSE)
++ self.Refresh(False)
+
+
+
+Index: londonlaw-0.2.1/londonlaw/guiclient/MoveDialog.py
+===================================================================
+--- londonlaw-0.2.1.orig/londonlaw/guiclient/MoveDialog.py
++++ londonlaw-0.2.1/londonlaw/guiclient/MoveDialog.py
+@@ -19,7 +19,7 @@
+
+ # MoveDialog.py
+ #
+-# This class generates a wxDialog that is used to choose a move (or double move).
++# This class generates a wx.Dialog that is used to choose a move (or double move).
+ # Drop-down boxes allow the player to choose from the possible moves. The code
+ # is rather lengthy because the MoveDialog validates itself on-the-fly: that is,
+ # the transportation drop-down box always shows only transports that are available
+@@ -28,21 +28,21 @@
+ # FIXME: this appears to be correct, but needs some major cleanup. Maybe some portions
+ # can be factored better into functions.
+
+-from wxPython.wx import *
++import wx
+ from londonlaw.common.map import *
+
+
+
+-DIALOGDESTROYED = wxNewEventType()
++DIALOGDESTROYED = wx.NewEventType()
+
+ def EVT_DIALOGDESTROYED(window, function):
+ """Your documentation here"""
+ window.Connect(-1, -1, DIALOGDESTROYED, function)
+
+-class DialogDestroyedEvent(wxPyCommandEvent):
++class DialogDestroyedEvent(wx.PyCommandEvent):
+ eventType = DIALOGDESTROYED
+ def __init__(self, windowID):
+- wxPyCommandEvent.__init__(self, self.eventType, windowID)
++ wx.PyCommandEvent.__init__(self, self.eventType, windowID)
+
+ def Clone(self):
+ self.__class__(self.GetId())
+@@ -50,19 +50,19 @@ class DialogDestroyedEvent(wxPyCommandEv
+
+
+
+-class MoveDialog(wxDialog):
++class MoveDialog(wx.Dialog):
+ # currPos is an integer indicating the current player position
+ # destPos is a first choice destination, which the player probably
+ # chose by clicking on a map location
+ # players is a list of locations and tokens for all players
+ # playerIdx is the index if this player in that list
+ # Use EVT_GOT_MOVE to catch the return values (insert derogatory comment about
+- # lack of flexibility in return values for wxDialog::EndModal())
++ # lack of flexibility in return values for wx.Dialog::EndModal())
+ def __init__(self, parent, ID, destPos, playerList, playerIdx, messenger):
+- wxDialog.__init__(self, parent, ID, "Choose a Move")
++ wx.Dialog.__init__(self, parent, ID, "Choose a Move")
+ self.parent = parent
+
+- self.panel = wxPanel(self, -1)
++ self.panel = wx.Panel(self, -1)
+
+ self.playerIdx = playerIdx
+ self.playerList = playerList
+@@ -71,41 +71,41 @@ class MoveDialog(wxDialog):
+
+ # Mr. X gets the option of a double move
+ if self.playerIdx == 0:
+- self.moveType = wxRadioBox(self.panel, -1, "move type: ", wxDefaultPosition, wxDefaultSize,
+- ["Single", "Double"], 1, wxRA_SPECIFY_ROWS)
++ self.moveType = wx.RadioBox(self.panel, -1, "move type: ", wx.DefaultPosition, wx.DefaultSize,
++ ["Single", "Double"], 1, wx.RA_SPECIFY_ROWS)
+ # If he has no double move tokens, then it's disabled
+ if self.playerList[self.playerIdx][2][4] < 1:
+- self.moveType.Enable(false)
++ self.moveType.Enable(False)
+
+- self.pos1Label = wxStaticText(self.panel, -1, "Move from "+`self.currPos`+" to ", wxPoint(0,0))
+- self.trans1Label = wxStaticText(self.panel, -1, " using ", wxPoint(0,0))
++ self.pos1Label = wx.StaticText(self.panel, -1, "Move from "+`self.currPos`+" to ", wx.Point(0,0))
++ self.trans1Label = wx.StaticText(self.panel, -1, " using ", wx.Point(0,0))
+
+ self.moves, self.movesStr = self.getAvailMoves(self.currPos, self.playerList, self.playerIdx)
+- self.dest1Box = wxChoice(self.panel, -1, wxDefaultPosition, wxDefaultSize, self.movesStr)
++ self.dest1Box = wx.Choice(self.panel, -1, wx.DefaultPosition, wx.DefaultSize, self.movesStr)
+ self.dest1Box.SetSelection(0)
+ if destPos in self.moves:
+- self.Show(TRUE)
++ self.Show(True)
+ for i in range(len(self.moves)):
+ if self.moves[i] == destPos:
+ self.dest1Box.SetSelection(i)
+ break
+ else:
+- self.Show(FALSE)
++ self.Show(False)
+ if destPos != 0:
+ self.drawMoveErrorDialog()
+
+
+- self.trans1ID = wxNewId()
++ self.trans1ID = wx.NewId()
+ self.trans, self.transStr = self.getAvailTransports(self.currPos, self.moves[self.dest1Box.GetSelection()],
+ self.playerList[self.playerIdx][2], self.playerIdx)
+- self.trans1Box = wxChoice(self.panel, self.trans1ID, wxDefaultPosition, wxDefaultSize, self.transStr)
++ self.trans1Box = wx.Choice(self.panel, self.trans1ID, wx.DefaultPosition, wx.DefaultSize, self.transStr)
+ self.trans1Box.SetSelection(0)
+
+
+ # double move options
+ if self.playerIdx == 0:
+- self.pos2Label = wxStaticText(self.panel, -1, "Move from "+self.dest1Box.GetStringSelection()+" to ", wxPoint(0,0))
+- self.trans2Label = wxStaticText(self.panel, -1, " using ", wxPoint(0,0))
++ self.pos2Label = wx.StaticText(self.panel, -1, "Move from "+self.dest1Box.GetStringSelection()+" to ", wx.Point(0,0))
++ self.trans2Label = wx.StaticText(self.panel, -1, " using ", wx.Point(0,0))
+
+ # create a new playerList that has an updated location and list of tokens for Mr. X, assuming
+ # that the first leg of the double move is complete. This new list is required to figure out
+@@ -123,79 +123,79 @@ class MoveDialog(wxDialog):
+ for i in range(1, len(self.playerList)):
+ pl2.append(self.playerList[i])
+
+- self.dest2ID = wxNewId()
++ self.dest2ID = wx.NewId()
+ self.moves2, self.moves2Str = self.getAvailMoves(self.moves[self.dest1Box.GetSelection()], pl2, 0)
+- self.dest2Box = wxChoice(self.panel, self.dest2ID, wxDefaultPosition, wxDefaultSize, self.moves2Str)
++ self.dest2Box = wx.Choice(self.panel, self.dest2ID, wx.DefaultPosition, wx.DefaultSize, self.moves2Str)
+ self.dest2Box.SetSelection(0)
+
+- self.trans2ID = wxNewId()
++ self.trans2ID = wx.NewId()
+ self.trans2, self.trans2Str = self.getAvailTransports(self.moves[self.dest1Box.GetSelection()],
+ self.moves2[self.dest2Box.GetSelection()], pl2[0][2], 0)
+- self.trans2Box = wxChoice(self.panel, self.trans2ID, wxDefaultPosition, wxDefaultSize, self.trans2Str)
++ self.trans2Box = wx.Choice(self.panel, self.trans2ID, wx.DefaultPosition, wx.DefaultSize, self.trans2Str)
+ self.trans2Box.SetSelection(0)
+
+- self.move2Sizer = wxBoxSizer(wxHORIZONTAL)
+- self.move2Sizer.Add(self.pos2Label, 0, wxALIGN_CENTRE | wxALL | wxADJUST_MINSIZE, 5)
+- self.move2Sizer.Add(self.dest2Box, 0, wxALIGN_CENTRE | wxALL, 5)
+- self.move2Sizer.Add(self.trans2Label, 0, wxALIGN_CENTRE | wxALL | wxADJUST_MINSIZE, 5)
+- self.move2Sizer.Add(self.trans2Box, 0, wxALIGN_CENTRE | wxALL, 5)
+-
+- labelFont = wxFont(self.GetFont().GetPointSize(), wxDEFAULT, wxNORMAL, wxBOLD)
+- labelFont.SetWeight(wxBOLD)
+- self.move1Label = wxStaticText(self.panel, -1, "Move One:")
+- self.move2Label = wxStaticText(self.panel, -1, "Move Two:")
++ self.move2Sizer = wx.BoxSizer(wx.HORIZONTAL)
++ self.move2Sizer.Add(self.pos2Label, 0, wx.ALIGN_CENTRE | wx.ALL | wx.ADJUST_MINSIZE, 5)
++ self.move2Sizer.Add(self.dest2Box, 0, wx.ALIGN_CENTRE | wx.ALL, 5)
++ self.move2Sizer.Add(self.trans2Label, 0, wx.ALIGN_CENTRE | wx.ALL | wx.ADJUST_MINSIZE, 5)
++ self.move2Sizer.Add(self.trans2Box, 0, wx.ALIGN_CENTRE | wx.ALL, 5)
++
++ labelFont = wx.Font(self.GetFont().GetPointSize(), wx.DEFAULT, wx.NORMAL, wx.BOLD)
++ labelFont.SetWeight(wx.BOLD)
++ self.move1Label = wx.StaticText(self.panel, -1, "Move One:")
++ self.move2Label = wx.StaticText(self.panel, -1, "Move Two:")
+ self.move1Label.SetFont(labelFont)
+ self.move2Label.SetFont(labelFont)
+
+ if self.playerIdx == 0:
+- self.move2Label.Enable(false)
+- self.pos2Label.Enable(false)
+- self.trans2Label.Enable(false)
+- self.dest2Box.Enable(false)
+- self.trans2Box.Enable(false)
+-
+-
+- okButton = wxButton(self.panel, wxID_OK, "OK")
+- cancelButton = wxButton(self.panel, wxID_CANCEL, "Cancel")
+-
+- self.move1Sizer = wxBoxSizer(wxHORIZONTAL)
+- self.move1Sizer.Add(self.pos1Label, 0, wxALIGN_CENTRE | wxALL | wxADJUST_MINSIZE, 5)
+- self.move1Sizer.Add(self.dest1Box, 0, wxALIGN_CENTRE | wxALL, 5)
+- self.move1Sizer.Add(self.trans1Label, 0, wxALIGN_CENTRE | wxALL | wxADJUST_MINSIZE, 5)
+- self.move1Sizer.Add(self.trans1Box, 0, wxALIGN_CENTRE | wxALL, 5)
+-
+- buttonSizer = wxBoxSizer(wxHORIZONTAL)
+- buttonSizer.Add(cancelButton, 0, wxALIGN_CENTRE | wxALL, 5)
+- buttonSizer.Add(okButton, 0, wxALIGN_CENTRE | wxALL, 5)
++ self.move2Label.Enable(False)
++ self.pos2Label.Enable(False)
++ self.trans2Label.Enable(False)
++ self.dest2Box.Enable(False)
++ self.trans2Box.Enable(False)
++
++
++ okButton = wx.Button(self.panel, wx.ID_OK, "OK")
++ cancelButton = wx.Button(self.panel, wx.ID_CANCEL, "Cancel")
++
++ self.move1Sizer = wx.BoxSizer(wx.HORIZONTAL)
++ self.move1Sizer.Add(self.pos1Label, 0, wx.ALIGN_CENTRE | wx.ALL | wx.ADJUST_MINSIZE, 5)
++ self.move1Sizer.Add(self.dest1Box, 0, wx.ALIGN_CENTRE | wx.ALL, 5)
++ self.move1Sizer.Add(self.trans1Label, 0, wx.ALIGN_CENTRE | wx.ALL | wx.ADJUST_MINSIZE, 5)
++ self.move1Sizer.Add(self.trans1Box, 0, wx.ALIGN_CENTRE | wx.ALL, 5)
++
++ buttonSizer = wx.BoxSizer(wx.HORIZONTAL)
++ buttonSizer.Add(cancelButton, 0, wx.ALIGN_CENTRE | wx.ALL, 5)
++ buttonSizer.Add(okButton, 0, wx.ALIGN_CENTRE | wx.ALL, 5)
+
+- self.pSizer = wxBoxSizer(wxVERTICAL)
++ self.pSizer = wx.BoxSizer(wx.VERTICAL)
+ if self.playerIdx == 0:
+- self.pSizer.Add(self.moveType, 0, wxALIGN_CENTRE | wxALL, 5)
+- self.pSizer.Add(self.move1Label, 0, wxALIGN_LEFT | wxLEFT | wxTOP, 5)
++ self.pSizer.Add(self.moveType, 0, wx.ALIGN_CENTRE | wx.ALL, 5)
++ self.pSizer.Add(self.move1Label, 0, wx.ALIGN_LEFT | wx.LEFT | wx.TOP, 5)
+ self.move1Sizer.Prepend((10,1),0,0)
+- self.pSizer.Add(self.move1Sizer, 0, wxALIGN_CENTRE | wxALL | wxADJUST_MINSIZE, 5)
++ self.pSizer.Add(self.move1Sizer, 0, wx.ALIGN_CENTRE | wx.ALL | wx.ADJUST_MINSIZE, 5)
+ if self.playerIdx == 0:
+- self.pSizer.Add(self.move2Label, 0, wxALIGN_LEFT | wxLEFT | wxTOP, 5)
++ self.pSizer.Add(self.move2Label, 0, wx.ALIGN_LEFT | wx.LEFT | wx.TOP, 5)
+ self.move2Sizer.Prepend((10,1),0,0)
+- self.pSizer.Add(self.move2Sizer, 0, wxALIGN_CENTRE | wxALL | wxADJUST_MINSIZE, 5)
+- self.pSizer.Add(buttonSizer, 0, wxALIGN_RIGHT | wxALL, 5)
++ self.pSizer.Add(self.move2Sizer, 0, wx.ALIGN_CENTRE | wx.ALL | wx.ADJUST_MINSIZE, 5)
++ self.pSizer.Add(buttonSizer, 0, wx.ALIGN_RIGHT | wx.ALL, 5)
+
+ self.panel.SetSizer(self.pSizer)
+ self.pSizer.Fit(self.panel)
+- self.sizer = wxBoxSizer(wxVERTICAL)
+- self.sizer.Add(self.panel, 1, wxEXPAND | wxALL | wxADJUST_MINSIZE, 5)
++ self.sizer = wx.BoxSizer(wx.VERTICAL)
++ self.sizer.Add(self.panel, 1, wx.EXPAND | wx.ALL | wx.ADJUST_MINSIZE, 5)
+ self.SetSizer(self.sizer)
+ self.sizer.Fit(self)
+ self.SetAutoLayout(1)
+
+ self.dest1Box.SetFocus()
+
+- EVT_BUTTON(self, wxID_CANCEL, self.OnCancel)
+- EVT_BUTTON(self, wxID_OK, self.OnOK)
+- EVT_CHOICE(self, self.dest1Box.GetId(), self.updateTrans1)
++ wx.EVT_BUTTON(self, wx.ID_CANCEL, self.OnCancel)
++ wx.EVT_BUTTON(self, wx.ID_OK, self.OnOK)
++ wx.EVT_CHOICE(self, self.dest1Box.GetId(), self.updateTrans1)
+ if self.playerIdx == 0:
+- EVT_CHOICE(self, self.dest2Box.GetId(), self.updateTrans2Evt)
+- EVT_RADIOBOX(self, self.moveType.GetId(), self.updateDouble)
++ wx.EVT_CHOICE(self, self.dest2Box.GetId(), self.updateTrans2Evt)
++ wx.EVT_RADIOBOX(self, self.moveType.GetId(), self.updateDouble)
+
+
+ def drawMoveErrorDialog(self):
+@@ -211,13 +211,13 @@ class MoveDialog(wxDialog):
+ prefix = "The Blue Detective"
+ elif self.playerIdx == 5:
+ prefix = "The Black Detective"
+- alert = wxMessageDialog(self.parent, prefix + " can't move to that location.", "Illegal Move", wxOK|wxICON_ERROR)
++ alert = wx.MessageDialog(self.parent, prefix + " can't move to that location.", "Illegal Move", wx.OK|wx.ICON_ERROR)
+ alert.ShowModal()
+
+
+ def setDest1(self, destPos):
+ if destPos in self.moves:
+- self.Show(TRUE)
++ self.Show(True)
+ for i in range(len(self.moves)):
+ if self.moves[i] == destPos:
+ self.dest1Box.SetSelection(i)
+@@ -229,17 +229,17 @@ class MoveDialog(wxDialog):
+
+ def updateDouble(self, event):
+ if self.moveType.GetSelection() == 0:
+- self.move2Label.Enable(false)
+- self.pos2Label.Enable(false)
+- self.trans2Label.Enable(false)
+- self.dest2Box.Enable(false)
+- self.trans2Box.Enable(false)
++ self.move2Label.Enable(False)
++ self.pos2Label.Enable(False)
++ self.trans2Label.Enable(False)
++ self.dest2Box.Enable(False)
++ self.trans2Box.Enable(False)
+ else:
+- self.move2Label.Enable(true)
+- self.pos2Label.Enable(true)
+- self.trans2Label.Enable(true)
+- self.dest2Box.Enable(true)
+- self.trans2Box.Enable(true)
++ self.move2Label.Enable(True)
++ self.pos2Label.Enable(True)
++ self.trans2Label.Enable(True)
++ self.dest2Box.Enable(True)
++ self.trans2Box.Enable(True)
+
+
+
+@@ -250,9 +250,9 @@ class MoveDialog(wxDialog):
+ self.playerList[self.playerIdx][2], self.playerIdx)
+ self.move1Sizer.Remove(self.trans1Box)
+ self.trans1Box.Destroy()
+- self.trans1Box = wxChoice(self.panel, self.trans1ID, wxDefaultPosition, wxDefaultSize, self.transStr)
++ self.trans1Box = wx.Choice(self.panel, self.trans1ID, wx.DefaultPosition, wx.DefaultSize, self.transStr)
+ self.trans1Box.SetSelection(0)
+- self.move1Sizer.Add(self.trans1Box, 0, wxALIGN_CENTRE | wxALL, 5)
++ self.move1Sizer.Add(self.trans1Box, 0, wx.ALIGN_CENTRE | wx.ALL, 5)
+ self.move1Sizer.Layout()
+ self.updateDest2()
+
+@@ -280,15 +280,13 @@ class MoveDialog(wxDialog):
+ pl2.append(self.playerList[i])
+
+ self.moves2, self.moves2Str = self.getAvailMoves(self.moves[self.dest1Box.GetSelection()], pl2, 0)
+- self.move2Sizer.Remove(self.pos2Label)
+- self.move2Sizer.Remove(self.dest2Box)
++ self.move2Sizer.Detach(self.dest2Box)
+ self.dest2Box.Destroy()
+- self.dest2Box = wxChoice(self.panel, self.dest2ID, wxDefaultPosition, wxDefaultSize, self.moves2Str)
++ self.dest2Box = wx.Choice(self.panel, self.dest2ID, wx.DefaultPosition, wx.DefaultSize, self.moves2Str)
+ self.dest2Box.SetSelection(0)
+ if self.moveType.GetSelection() == 0:
+- self.dest2Box.Enable(false)
+- self.move2Sizer.Prepend(self.dest2Box, 0, wxALIGN_CENTRE | wxALL, 5)
+- self.move2Sizer.Prepend(self.pos2Label, 0, wxALIGN_CENTRE | wxALL | wxADJUST_MINSIZE, 5)
++ self.dest2Box.Enable(False)
++ self.move2Sizer.Insert(2, self.dest2Box, 0, wx.ALIGN_CENTRE | wx.ALL, 5)
+ self.updateTrans2()
+ else:
+ self.sizer.Layout()
+@@ -307,11 +305,11 @@ class MoveDialog(wxDialog):
+ self.moves2[self.dest2Box.GetSelection()], xtokens, 0)
+ self.move2Sizer.Remove(self.trans2Box)
+ self.trans2Box.Destroy()
+- self.trans2Box = wxChoice(self.panel, self.trans2ID, wxDefaultPosition, wxDefaultSize, self.trans2Str)
++ self.trans2Box = wx.Choice(self.panel, self.trans2ID, wx.DefaultPosition, wx.DefaultSize, self.trans2Str)
+ self.trans2Box.SetSelection(0)
+ if self.moveType.GetSelection() == 0:
+- self.trans2Box.Enable(false)
+- self.move2Sizer.Add(self.trans2Box, 0, wxALIGN_CENTRE | wxALL, 5)
++ self.trans2Box.Enable(False)
++ self.move2Sizer.Add(self.trans2Box, 0, wx.ALIGN_CENTRE | wx.ALL, 5)
+ self.move2Sizer.Layout()
+ self.sizer.Layout()
+
+Index: londonlaw-0.2.1/londonlaw/guiclient/PlayerIcon.py
+===================================================================
+--- londonlaw-0.2.1.orig/londonlaw/guiclient/PlayerIcon.py
++++ londonlaw-0.2.1/londonlaw/guiclient/PlayerIcon.py
+@@ -23,7 +23,7 @@
+ # There are captions for names and readouts of the available tokens.
+ # Status icons can be overlaid on the player icons to show whose turn it is, etc.
+
+-from wxPython.wx import *
++import wx
+ from TextPanel import *
+ from StaticBitmap import *
+ from londonlaw.common.config import *
+@@ -34,82 +34,82 @@ import os
+ # readout of the available tokens.
+ # expects a list of three tokens (taxi, bus, undergnd) or a list of five
+ # tokens (taxi, bus, undergnd, black, double)
+-class PlayerIcon(wxPanel):
++class PlayerIcon(wx.Panel):
+ def __init__(self, parent, imagefile, thinkingimagefile, stuckimagefile,
+ name, tokenList, isMrX = False):
+- wxPanel.__init__(self, parent, -1) #wxDefaultPosition, wxDefaultSize, wxSIMPLE_BORDER)
++ wx.Panel.__init__(self, parent, -1) #wx.DefaultPosition, wx.DefaultSize, wx.SIMPLE_BORDER)
+
+- self.iconPanel = wxPanel(self, -1)
++ self.iconPanel = wx.Panel(self, -1)
+ self.isStuck = False
+ self.isMrX = isMrX
+
+ # load the image
+- iconImage = wxImage(imagefile, wxBITMAP_TYPE_ANY)
++ iconImage = wx.Image(imagefile, wx.BITMAP_TYPE_ANY)
+ # we need an extra copy of the player icon, so we can blit to one of them in memory
+- self.playerBitmap = wxBitmapFromImage(iconImage)
+- self.iconBitmap = wxBitmapFromImage(iconImage)
+- self.iconBitmap2 = wxBitmapFromImage(iconImage)
++ self.playerBitmap = wx.BitmapFromImage(iconImage)
++ self.iconBitmap = wx.BitmapFromImage(iconImage)
++ self.iconBitmap2 = wx.BitmapFromImage(iconImage)
+ self.icon = StaticBitmap(self.iconPanel, -1, self.iconBitmap)
+
+ # load the overlay image for the "I'm thinking" question mark
+- thinkingImage = wxImage(thinkingimagefile, wxBITMAP_TYPE_ANY)
++ thinkingImage = wx.Image(thinkingimagefile, wx.BITMAP_TYPE_ANY)
+ thinkingImage.SetMaskColour(255, 0, 242) # the purplish colour is not to be drawn
+- self.thinkingBitmap = wxBitmapFromImage(thinkingImage)
++ self.thinkingBitmap = wx.BitmapFromImage(thinkingImage)
+
+ # load the overlay image for the "I'm stuck" stop sign
+- stuckImage = wxImage(stuckimagefile, wxBITMAP_TYPE_ANY)
++ stuckImage = wx.Image(stuckimagefile, wx.BITMAP_TYPE_ANY)
+ stuckImage.SetMaskColour(255, 0, 242) # the purplish colour is not to be drawn
+- self.stuckBitmap = wxBitmapFromImage(stuckImage)
++ self.stuckBitmap = wx.BitmapFromImage(stuckImage)
+
+- iconSizer = wxBoxSizer(wxVERTICAL)
+- iconSizer.Add(self.icon, 0, wxADJUST_MINSIZE)
++ iconSizer = wx.BoxSizer(wx.VERTICAL)
++ iconSizer.Add(self.icon, 0, wx.ADJUST_MINSIZE)
+ self.iconPanel.SetSizer(iconSizer)
+ iconSizer.Fit(self.iconPanel)
+
+
+ # create the caption
+- self.caption = TextPanel(self, " "+name[:20]+" ", 10, wxSIMPLE_BORDER)#|wxALIGN_CENTRE
++ self.caption = TextPanel(self, " "+name[:20]+" ", 10, wx.SIMPLE_BORDER)#|wx.ALIGN_CENTRE
+
+ # create the inventory labels
+ if self.isMrX:
+- self.blackLabel = TextPanel(self, " "+`tokenList[3]`+" ", 10, wxEXPAND)
+- self.blackLabel.SetBackgroundColour(wxColour(0,0,0))
+- self.blackLabel.SetForegroundColour(wxColour(255,255,255))
+- self.doubleLabel = TextPanel(self, " "+`tokenList[4]`+" ", 10, wxEXPAND)
+- self.doubleLabel.SetBackgroundColour(wxColour(255,84,166))
++ self.blackLabel = TextPanel(self, " "+`tokenList[3]`+" ", 10, wx.EXPAND)
++ self.blackLabel.SetBackgroundColour(wx.Colour(0,0,0))
++ self.blackLabel.SetForegroundColour(wx.Colour(255,255,255))
++ self.doubleLabel = TextPanel(self, " "+`tokenList[4]`+" ", 10, wx.EXPAND)
++ self.doubleLabel.SetBackgroundColour(wx.Colour(255,84,166))
+ else:
+- self.taxiLabel = TextPanel(self, " "+`tokenList[0]`+" ", 10, wxEXPAND)
+- self.taxiLabel.SetBackgroundColour(wxColour(255, 191, 0))
+- self.busLabel = TextPanel(self, " "+`tokenList[1]`+" ", 10, wxEXPAND)
+- self.busLabel.SetBackgroundColour(wxColour(7, 155, 0))
+- self.ugndLabel = TextPanel(self, " "+`tokenList[2]`+" ", 10, wxEXPAND)
+- self.ugndLabel.SetBackgroundColour(wxColour(160, 36, 96))
+- self.ugndLabel.SetForegroundColour(wxColour(255, 255, 255))
++ self.taxiLabel = TextPanel(self, " "+`tokenList[0]`+" ", 10, wx.EXPAND)
++ self.taxiLabel.SetBackgroundColour(wx.Colour(255, 191, 0))
++ self.busLabel = TextPanel(self, " "+`tokenList[1]`+" ", 10, wx.EXPAND)
++ self.busLabel.SetBackgroundColour(wx.Colour(7, 155, 0))
++ self.ugndLabel = TextPanel(self, " "+`tokenList[2]`+" ", 10, wx.EXPAND)
++ self.ugndLabel.SetBackgroundColour(wx.Colour(160, 36, 96))
++ self.ugndLabel.SetForegroundColour(wx.Colour(255, 255, 255))
+
+ # stack the inventory labels vertically
+- self.invSizer = wxBoxSizer(wxVERTICAL)
++ self.invSizer = wx.BoxSizer(wx.VERTICAL)
+ if self.isMrX:
+- self.invSizer.Add(self.blackLabel, 1, wxEXPAND|wxADJUST_MINSIZE)
+- self.invSizer.Add(self.doubleLabel, 1, wxEXPAND|wxADJUST_MINSIZE)
++ self.invSizer.Add(self.blackLabel, 1, wx.EXPAND|wx.ADJUST_MINSIZE)
++ self.invSizer.Add(self.doubleLabel, 1, wx.EXPAND|wx.ADJUST_MINSIZE)
+ else:
+- self.invSizer.Add(self.taxiLabel, 1, wxEXPAND|wxADJUST_MINSIZE)
+- self.invSizer.Add(self.busLabel, 1, wxEXPAND|wxADJUST_MINSIZE)
+- self.invSizer.Add(self.ugndLabel, 1, wxEXPAND|wxADJUST_MINSIZE)
++ self.invSizer.Add(self.taxiLabel, 1, wx.EXPAND|wx.ADJUST_MINSIZE)
++ self.invSizer.Add(self.busLabel, 1, wx.EXPAND|wx.ADJUST_MINSIZE)
++ self.invSizer.Add(self.ugndLabel, 1, wx.EXPAND|wx.ADJUST_MINSIZE)
+
+ # group the icon with the inventory
+- iconInvSizer = wxBoxSizer(wxHORIZONTAL)
+- iconInvSizer.Add(self.iconPanel, 0, wxALIGN_TOP|wxADJUST_MINSIZE)
+- iconInvSizer.Add(self.invSizer, 0, wxALIGN_TOP|wxADJUST_MINSIZE)
++ iconInvSizer = wx.BoxSizer(wx.HORIZONTAL)
++ iconInvSizer.Add(self.iconPanel, 0, wx.ALIGN_TOP|wx.ADJUST_MINSIZE)
++ iconInvSizer.Add(self.invSizer, 0, wx.ALIGN_TOP|wx.ADJUST_MINSIZE)
+
+ # put the caption under the bitmap and inventory lists
+- self.topSizer = wxBoxSizer(wxVERTICAL)
+- self.topSizer.Add(iconInvSizer, 0, wxEXPAND|wxLEFT|wxRIGHT|wxADJUST_MINSIZE, 20)
+- self.topSizer.Add(self.caption, 0, wxEXPAND|wxALIGN_CENTRE|wxALL, 2)
++ self.topSizer = wx.BoxSizer(wx.VERTICAL)
++ self.topSizer.Add(iconInvSizer, 0, wx.EXPAND|wx.LEFT|wx.RIGHT|wx.ADJUST_MINSIZE, 20)
++ self.topSizer.Add(self.caption, 0, wx.EXPAND|wx.ALIGN_CENTRE|wx.ALL, 2)
+ self.SetSizer(self.topSizer)
+ self.topSizer.SetSizeHints(self)
+
+- self.iconDC = wxMemoryDC()
+- self.srcDC = wxMemoryDC()
++ self.iconDC = wx.MemoryDC()
++ self.srcDC = wx.MemoryDC()
+
+
+ def updateTokens(self, tokenList):
+@@ -131,14 +131,14 @@ class PlayerIcon(wxPanel):
+ self.srcDC, 0, 0)
+ self.srcDC.SelectObject(self.thinkingBitmap)
+ self.iconDC.Blit(0, 0, self.iconBitmap.GetWidth(), self.iconBitmap.GetHeight(),
+- self.srcDC, 0, 0, wxCOPY, TRUE)
++ self.srcDC, 0, 0, wx.COPY, True)
+ self.iconDC.EndDrawing()
+- self.iconDC.SelectObject(wxNullBitmap)
++ self.iconDC.SelectObject(wx.NullBitmap)
+ temp = self.iconBitmap
+ self.iconBitmap = self.iconBitmap2
+ self.iconBitmap2 = temp
+ self.icon.SetBitmap(self.iconBitmap)
+- self.icon.Refresh(FALSE)
++ self.icon.Refresh(False)
+ self.isStuck = False
+
+
+@@ -150,14 +150,14 @@ class PlayerIcon(wxPanel):
+ self.srcDC, 0, 0)
+ self.srcDC.SelectObject(self.stuckBitmap)
+ self.iconDC.Blit(0, 0, self.iconBitmap.GetWidth(), self.iconBitmap.GetHeight(),
+- self.srcDC, 0, 0, wxCOPY, TRUE)
++ self.srcDC, 0, 0, wx.COPY, True)
+ self.iconDC.EndDrawing()
+- self.iconDC.SelectObject(wxNullBitmap)
++ self.iconDC.SelectObject(wx.NullBitmap)
+ temp = self.iconBitmap
+ self.iconBitmap = self.iconBitmap2
+ self.iconBitmap2 = temp
+ self.icon.SetBitmap(self.iconBitmap)
+- self.icon.Refresh(FALSE)
++ self.icon.Refresh(False)
+ self.isStuck = True
+
+
+@@ -168,19 +168,19 @@ class PlayerIcon(wxPanel):
+ self.iconDC.Blit(0, 0, self.iconBitmap.GetWidth(), self.iconBitmap.GetHeight(),
+ self.srcDC, 0, 0)
+ self.iconDC.EndDrawing()
+- self.iconDC.SelectObject(wxNullBitmap)
++ self.iconDC.SelectObject(wx.NullBitmap)
+ temp = self.iconBitmap
+ self.iconBitmap = self.iconBitmap2
+ self.iconBitmap2 = temp
+ self.icon.SetBitmap(self.iconBitmap)
+- self.icon.Refresh(FALSE)
++ self.icon.Refresh(False)
+
+
+
+ # Manage a group of icons to represent all six players.
+-class PlayerIconGroup(wxPanel):
++class PlayerIconGroup(wx.Panel):
+ def __init__(self, parent, nameList, tokenList):
+- wxPanel.__init__(self, parent, -1)
++ wx.Panel.__init__(self, parent, -1)
+
+ # Get icons for all the players
+ if len(nameList) != 6:
+@@ -200,9 +200,9 @@ class PlayerIconGroup(wxPanel):
+ nameList[i], tokenList[i]))
+
+
+- self.topSizer = wxBoxSizer(wxHORIZONTAL)
++ self.topSizer = wx.BoxSizer(wx.HORIZONTAL)
+ for p in self.players:
+- self.topSizer.Add(p, 0, wxALIGN_CENTRE)
++ self.topSizer.Add(p, 0, wx.ALIGN_CENTRE)
+ self.SetSizer(self.topSizer)
+ self.topSizer.SetSizeHints(self)
+
+Index: londonlaw-0.2.1/londonlaw/guiclient/RegistrationWindow.py
+===================================================================
+--- londonlaw-0.2.1.orig/londonlaw/guiclient/RegistrationWindow.py
++++ londonlaw-0.2.1/londonlaw/guiclient/RegistrationWindow.py
+@@ -24,7 +24,7 @@
+
+
+ from twisted.python import log
+-from wxPython.wx import *
++import wx
+ from londonlaw.common.protocol import *
+ from londonlaw.common.config import *
+ from AutoListCtrl import *
+@@ -34,35 +34,35 @@ import os.path
+
+
+ # Create a small dialog for choosing a team.
+-class TeamDialog(wxDialog):
++class TeamDialog(wx.Dialog):
+ def __init__(self, parent):
+- wxDialog.__init__(self, parent, -1, "Choose a Team", wxDefaultPosition, wxDefaultSize, wxDEFAULT_DIALOG_STYLE|wxSUNKEN_BORDER)
+- panel = wxPanel(self, -1, wxDefaultPosition, wxDefaultSize, wxTAB_TRAVERSAL)
++ wx.Dialog.__init__(self, parent, -1, "Choose a Team", wx.DefaultPosition, wx.DefaultSize, wx.DEFAULT_DIALOG_STYLE|wx.SUNKEN_BORDER)
++ panel = wx.Panel(self, -1, wx.DefaultPosition, wx.DefaultSize, wx.TAB_TRAVERSAL)
+
+- self.choice = wxRadioBox(panel, -1, "team: ", wxDefaultPosition, wxDefaultSize,
+- ["Detectives", "Mr. X"], 1, wxRA_SPECIFY_COLS)
+- self.submitButton = wxButton(panel, wxID_OK, "OK")
+- self.cancelButton = wxButton(panel, wxID_CANCEL, "Cancel")
+-
+- buttonSizer = wxBoxSizer(wxHORIZONTAL)
+- buttonSizer.Add(self.cancelButton, 0, wxALIGN_CENTRE|wxALL, 5)
+- buttonSizer.Add(self.submitButton, 0, wxALIGN_CENTRE|wxALL, 5)
+-
+- vSizer = wxBoxSizer(wxVERTICAL)
+- vSizer.Add(self.choice, 0, wxALIGN_CENTRE|wxALL, 5)
+- vSizer.Add((1, 1), 1, wxEXPAND)
+- vSizer.Add(buttonSizer, 0, wxALIGN_RIGHT|wxALL, 5)
++ self.choice = wx.RadioBox(panel, -1, "team: ", wx.DefaultPosition, wx.DefaultSize,
++ ["Detectives", "Mr. X"], 1, wx.RA_SPECIFY_COLS)
++ self.submitButton = wx.Button(panel, wx.ID_OK, "OK")
++ self.cancelButton = wx.Button(panel, wx.ID_CANCEL, "Cancel")
++
++ buttonSizer = wx.BoxSizer(wx.HORIZONTAL)
++ buttonSizer.Add(self.cancelButton, 0, wx.ALIGN_CENTRE|wx.ALL, 5)
++ buttonSizer.Add(self.submitButton, 0, wx.ALIGN_CENTRE|wx.ALL, 5)
++
++ vSizer = wx.BoxSizer(wx.VERTICAL)
++ vSizer.Add(self.choice, 0, wx.ALIGN_CENTRE|wx.ALL, 5)
++ vSizer.Add((1, 1), 1, wx.EXPAND)
++ vSizer.Add(buttonSizer, 0, wx.ALIGN_RIGHT|wx.ALL, 5)
+
+ panel.SetSizer(vSizer)
+ vSizer.Fit(panel)
+- sizer = wxBoxSizer(wxVERTICAL)
+- sizer.Add(panel, 1, wxEXPAND | wxALL, 5)
++ sizer = wx.BoxSizer(wx.VERTICAL)
++ sizer.Add(panel, 1, wx.EXPAND | wx.ALL, 5)
+ self.SetSizer(sizer)
+ sizer.Fit(self)
+ self.SetAutoLayout(1)
+
+- EVT_BUTTON(self, wxID_OK, self.submit)
+- EVT_BUTTON(self, wxID_CANCEL, self.cancel)
++ wx.EVT_BUTTON(self, wx.ID_OK, self.submit)
++ wx.EVT_BUTTON(self, wx.ID_CANCEL, self.cancel)
+
+
+ def submit(self, event):
+@@ -76,9 +76,9 @@ class TeamDialog(wxDialog):
+
+
+ # Generate the main registration window.
+-class RegistrationWindow(wxFrame):
++class RegistrationWindow(wx.Frame):
+ def __init__(self, parent, ID, title, messenger):
+- wxFrame.__init__(self, parent, ID, title)
++ wx.Frame.__init__(self, parent, ID, title)
+
+ self._messenger = messenger
+
+@@ -86,17 +86,17 @@ class RegistrationWindow(wxFrame):
+ EXIT = 101
+
+ # Create a menu bar
+- fileMenu = wxMenu("File")
++ fileMenu = wx.Menu("File")
+ fileMenu.Append(DISCONNECT, "Disconnect", "Disconnect from server")
+ fileMenu.Append(EXIT, "Exit\tCTRL+Q", "Exit London Law")
+- menuBar = wxMenuBar()
++ menuBar = wx.MenuBar()
+ menuBar.Append(fileMenu, "File")
+ self.SetMenuBar(menuBar)
+
+ self.status = self.CreateStatusBar()
+
+ # stick everything in a panel
+- mainPanel = wxPanel(self, -1)
++ mainPanel = wx.Panel(self, -1)
+
+ self.list = AutoListCtrl(mainPanel, -1,
+ ("Player", "Team", "Votes to Start?", "Pawns"),
+@@ -104,31 +104,31 @@ class RegistrationWindow(wxFrame):
+
+ self.list.SetColumnWidth(1, 140)
+
+- mainSizer = wxBoxSizer(wxVERTICAL)
+- mainSizer.Add(self.list, 3, wxALIGN_CENTRE|wxEXPAND|wxALL, 5)
++ mainSizer = wx.BoxSizer(wx.VERTICAL)
++ mainSizer.Add(self.list, 3, wx.ALIGN_CENTRE|wx.EXPAND|wx.ALL, 5)
+
+ self.chatWindow = ChatPanel(mainPanel, "", False)
+- mainSizer.Add(self.chatWindow, 2, wxEXPAND|wxALL, 5)
++ mainSizer.Add(self.chatWindow, 2, wx.EXPAND|wx.ALL, 5)
+
+- self.leaveButton = wxButton(mainPanel, -1, "Leave Game")
+- self.teamButton = wxButton(mainPanel, -1, "Choose Team")
+- self.voteButton = wxButton(mainPanel, -1, "Vote to Start")
+- buttonSizer = wxBoxSizer(wxHORIZONTAL)
+- buttonSizer.Add(self.leaveButton, 0, wxALIGN_CENTRE | wxLEFT | wxRIGHT | wxBOTTOM | wxALL, 5)
+- buttonSizer.Add((1, 1), 1, wxEXPAND)
+- buttonSizer.Add(self.teamButton, 0, wxALIGN_CENTRE | wxRIGHT | wxBOTTOM | wxALL, 5)
+- buttonSizer.Add(self.voteButton, 0, wxALIGN_CENTRE | wxRIGHT | wxBOTTOM | wxALL, 5)
+- mainSizer.Add(buttonSizer, 0, wxEXPAND, 0)
++ self.leaveButton = wx.Button(mainPanel, -1, "Leave Game")
++ self.teamButton = wx.Button(mainPanel, -1, "Choose Team")
++ self.voteButton = wx.Button(mainPanel, -1, "Vote to Start")
++ buttonSizer = wx.BoxSizer(wx.HORIZONTAL)
++ buttonSizer.Add(self.leaveButton, 0, wx.ALIGN_CENTRE | wx.LEFT | wx.RIGHT | wx.BOTTOM | wx.ALL, 5)
++ buttonSizer.Add((1, 1), 1, wx.EXPAND)
++ buttonSizer.Add(self.teamButton, 0, wx.ALIGN_CENTRE | wx.RIGHT | wx.BOTTOM | wx.ALL, 5)
++ buttonSizer.Add(self.voteButton, 0, wx.ALIGN_CENTRE | wx.RIGHT | wx.BOTTOM | wx.ALL, 5)
++ mainSizer.Add(buttonSizer, 0, wx.EXPAND, 0)
+
+ mainPanel.SetSizer(mainSizer)
+ mainSizer.Fit(mainPanel)
+
+- EVT_MENU(self, EXIT, self.menuExit)
+- EVT_MENU(self, DISCONNECT, self.menuDisconnect)
+- EVT_BUTTON(self, self.leaveButton.GetId(), self.leaveGame)
+- EVT_BUTTON(self, self.teamButton.GetId(), self.chooseTeam)
+- EVT_BUTTON(self, self.voteButton.GetId(), self.voteStart)
+- EVT_TEXT_ENTER(self, self.chatWindow.chatEntry.GetId(), self.chatSend)
++ wx.EVT_MENU(self, EXIT, self.menuExit)
++ wx.EVT_MENU(self, DISCONNECT, self.menuDisconnect)
++ wx.EVT_BUTTON(self, self.leaveButton.GetId(), self.leaveGame)
++ wx.EVT_BUTTON(self, self.teamButton.GetId(), self.chooseTeam)
++ wx.EVT_BUTTON(self, self.voteButton.GetId(), self.voteStart)
++ wx.EVT_TEXT_ENTER(self, self.chatWindow.chatEntry.GetId(), self.chatSend)
+
+
+ def addPlayer(self, data):
+@@ -154,7 +154,7 @@ class RegistrationWindow(wxFrame):
+
+
+ def enableSelectButton(self, event):
+- self.selectButton.Enable(TRUE)
++ self.selectButton.Enable(True)
+
+
+ def disableSelectButton(self, event):
+@@ -180,8 +180,8 @@ class RegistrationWindow(wxFrame):
+
+ def showInfoAlert(self, info):
+ self.PushStatusText("")
+- alert = wxMessageDialog(self, info,
+- "Server Message", wxOK|wxICON_INFORMATION)
++ alert = wx.MessageDialog(self, info,
++ "Server Message", wx.OK|wx.ICON_INFORMATION)
+ alert.ShowModal()
+
+
+@@ -190,17 +190,17 @@ class RegistrationWindow(wxFrame):
+
+
+ def menuExit(self, event):
+- alert = wxMessageDialog(self, "Disconnect from the server and exit London Law?",
+- "Disconnect and Quit", wxYES_NO|wxICON_EXCLAMATION)
+- if alert.ShowModal() == wxID_YES:
++ alert = wx.MessageDialog(self, "Disconnect from the server and exit London Law?",
++ "Disconnect and Quit", wx.YES_NO|wx.ICON_EXCLAMATION)
++ if alert.ShowModal() == wx.ID_YES:
+ self._messenger.netDisconnect()
+ self.Close()
+
+
+ def menuDisconnect(self, event):
+- alert = wxMessageDialog(self, "Disconnect from the server?",
+- "Disconnect", wxYES_NO|wxICON_EXCLAMATION)
+- if alert.ShowModal() == wxID_YES:
++ alert = wx.MessageDialog(self, "Disconnect from the server?",
++ "Disconnect", wx.YES_NO|wx.ICON_EXCLAMATION)
++ if alert.ShowModal() == wx.ID_YES:
+ self._messenger.netDisconnect()
+ self._messenger.guiLaunchConnectionWindow()
+
+Index: londonlaw-0.2.1/londonlaw/guiclient/ScrolledLabel.py
+===================================================================
+--- londonlaw-0.2.1.orig/londonlaw/guiclient/ScrolledLabel.py
++++ londonlaw-0.2.1/londonlaw/guiclient/ScrolledLabel.py
+@@ -19,26 +19,26 @@
+
+ # ScrolledLabel.py
+ #
+-# This class handles a wxStaticText that is managed by a scrolled window.
++# This class handles a wx.StaticText that is managed by a scrolled window.
+
+
+-from wxPython.wx import *
++import wx
+
+-class ScrolledLabel(wxScrolledWindow):
++class ScrolledLabel(wx.ScrolledWindow):
+ def __init__(self, parent, label):
+- wxScrolledWindow.__init__(self, parent, -1, wxDefaultPosition, wxDefaultSize,
+- wxVSCROLL | wxSIMPLE_BORDER)
+- self.SetBackgroundColour(wxColour(200, 200, 200))
++ wx.ScrolledWindow.__init__(self, parent, -1, wx.DefaultPosition, wx.DefaultSize,
++ wx.VSCROLL | wx.SIMPLE_BORDER)
++ self.SetBackgroundColour(wx.Colour(200, 200, 200))
+ self.SetScrollRate(0, 5)
+
+ # create the text that will be scrolled
+- self.text = wxStaticText(self, -1, label, wxPoint(0,0))
++ self.text = wx.StaticText(self, -1, label, wx.Point(0,0))
+
+ # use a Sizer to handle geometry
+- self.topSizer = wxBoxSizer(wxVERTICAL)
+- self.topSizer.Add(self.text, 1, wxEXPAND)
++ self.topSizer = wx.BoxSizer(wx.VERTICAL)
++ self.topSizer.Add(self.text, 1, wx.EXPAND)
+ self.SetSizer(self.topSizer)
+- self.topSizer.SetVirtualSizeHints(self)
++ self.topSizer.FitInside(self)
+
+ self.ScrollToEnd()
+
+@@ -62,7 +62,7 @@ class ScrolledLabel(wxScrolledWindow):
+
+ # scroll to the bottom of the text
+ def ScrollToEnd(self):
+- self.topSizer.SetVirtualSizeHints(self)
++ self.topSizer.FitInside(self)
+ self.Scroll(0, self.GetVirtualSize()[1]/5)
+
+
+Index: londonlaw-0.2.1/londonlaw/guiclient/TextPanel.py
+===================================================================
+--- londonlaw-0.2.1.orig/londonlaw/guiclient/TextPanel.py
++++ londonlaw-0.2.1/londonlaw/guiclient/TextPanel.py
+@@ -19,25 +19,25 @@
+
+ # TextPanel.py
+ #
+-# This class handles a wxStaticText drawn on a wxPanel. The combination
++# This class handles a wx.StaticText drawn on a wx.Panel. The combination
+ # allows one to set both foreground and background colors, as well as
+ # borders around the window.
+
+-from wxPython.wx import *
++import wx
+
+-# Generate a text label drawn on a wxPanel.
+-class TextPanel(wxPanel):
++# Generate a text label drawn on a wx.Panel.
++class TextPanel(wx.Panel):
+ def __init__(self, parent, text, points = 10, style = 0):
+- wxPanel.__init__(self, parent, -1, wxDefaultPosition, wxDefaultSize, style)
++ wx.Panel.__init__(self, parent, -1, wx.DefaultPosition, wx.DefaultSize, style)
+
+- font = wxFont(points, wxDEFAULT, wxNORMAL, wxNORMAL)
+- self.text = wxStaticText(self, -1, text, wxPoint(0,0))
++ font = wx.Font(points, wx.DEFAULT, wx.NORMAL, wx.NORMAL)
++ self.text = wx.StaticText(self, -1, text, wx.Point(0,0))
+ self.text.SetFont(font)
+
+- self.sizer = wxBoxSizer(wxVERTICAL)
+- self.sizer.Add((0, 0), 1, wxEXPAND)
+- self.sizer.Add(self.text, 0, wxALIGN_CENTRE|wxADJUST_MINSIZE)
+- self.sizer.Add((0, 0), 1, wxEXPAND)
++ self.sizer = wx.BoxSizer(wx.VERTICAL)
++ self.sizer.Add((0, 0), 1, wx.EXPAND)
++ self.sizer.Add(self.text, 0, wx.ALIGN_CENTRE|wx.ADJUST_MINSIZE)
++ self.sizer.Add((0, 0), 1, wx.EXPAND)
+ self.SetSizer(self.sizer)
+ self.sizer.SetSizeHints(self)
+
+@@ -48,13 +48,13 @@ class TextPanel(wxPanel):
+
+ def SetForegroundColour(self, color):
+ self.text.SetForegroundColour(color)
+- wxPanel.SetForegroundColour(self, color)
++ wx.Panel.SetForegroundColour(self, color)
+
+ # def SetBackgroundColour(self, color)
+- # (this function falls through to call SetBackgroundColour on the wxPanel)
++ # (this function falls through to call SetBackgroundColour on the wx.Panel)
+ def SetBackgroundColour(self, color):
+ self.text.SetBackgroundColour(color)
+- wxPanel.SetBackgroundColour(self, color)
++ wx.Panel.SetBackgroundColour(self, color)
+
+
+
+Index: londonlaw-0.2.1/londonlaw/guiclient/graphicalmap.py
+===================================================================
+--- londonlaw-0.2.1.orig/londonlaw/guiclient/graphicalmap.py
++++ londonlaw-0.2.1/londonlaw/guiclient/graphicalmap.py
+@@ -16,7 +16,7 @@
+
+
+
+-from wxPython.wx import *
++import wx
+ from utility import *
+ from SetHash import *
+ from londonlaw.common.config import *
+@@ -241,9 +241,9 @@ def locToPixel(loc, zoom):
+ GRIDSIZE = (100, 100)
+ MASKSIZE = (39, 42) # size of a rect that contains a map number graphic
+ gridHash = SetHash()
+-wxInitAllImageHandlers()
++# no-op in wxPython2.8 and later: wx.InitAllImageHandlers()
+ maskImageFile = os.path.join(MEDIAROOT, "images/map-number-mask.png")
+-maskImage = wxImage(maskImageFile, wxBITMAP_TYPE_ANY)
++maskImage = wx.Image(maskImageFile, wx.BITMAP_TYPE_ANY)
+
+
+ # Create a hash table that assists in mapping pixel locations to map numbers.
+Index: londonlaw-0.2.1/londonlaw/guiclient/Protocol.py
+===================================================================
+--- londonlaw-0.2.1.orig/londonlaw/guiclient/Protocol.py
++++ londonlaw-0.2.1/londonlaw/guiclient/Protocol.py
+@@ -21,7 +21,7 @@ from twisted.python import log
+ import shlex, sys
+ from londonlaw.common import util
+ from londonlaw.common.protocol import *
+-from wxPython.wx import *
++import wx
+
+
+ class ProtocolError(Exception):
+Index: londonlaw-0.2.1/londonlaw/guiclient/StaticBitmap.py
+===================================================================
+--- londonlaw-0.2.1.orig/londonlaw/guiclient/StaticBitmap.py
++++ londonlaw-0.2.1/londonlaw/guiclient/StaticBitmap.py
+@@ -20,27 +20,27 @@
+ # StaticBitmap.py
+ #
+ # This class is an attempt at a more robust cross-platform version of a
+-# wxStaticBitmap.
++# wx.StaticBitmap.
+
+-from wxPython.wx import *
++import wx
+
+-class StaticBitmap(wxWindow):
+- def __init__(self, parent, id, bitmap, position = wxDefaultPosition, size = wxDefaultSize):
+- wxWindow.__init__(self, parent, id, position, size)
++class StaticBitmap(wx.Window):
++ def __init__(self, parent, id, bitmap, position = wx.DefaultPosition, size = wx.DefaultSize):
++ wx.Window.__init__(self, parent, id, position, size)
+ self.bitmap = bitmap
+- self.SetSize(wxSize(self.bitmap.GetWidth(), self.bitmap.GetHeight()))
++ self.SetSize(wx.Size(self.bitmap.GetWidth(), self.bitmap.GetHeight()))
+
+- EVT_PAINT(self, self.OnPaint)
++ wx.EVT_PAINT(self, self.OnPaint)
+
+
+ def OnPaint(self, event):
+- self.srcDC = wxMemoryDC()
++ self.srcDC = wx.MemoryDC()
+ self.srcDC.SelectObject(self.bitmap)
+- destDC = wxPaintDC(self)
++ destDC = wx.PaintDC(self)
+ destDC.BeginDrawing()
+ destDC.Blit(0, 0, self.bitmap.GetWidth(), self.bitmap.GetHeight(), self.srcDC, 0, 0)
+ destDC.EndDrawing()
+- self.srcDC.SelectObject(wxNullBitmap)
++ self.srcDC.SelectObject(wx.NullBitmap)
+
+
+ def GetBitmap(self):
+@@ -53,11 +53,11 @@ class StaticBitmap(wxWindow):
+
+ def DoGetBestSize(self):
+ print "called DoGetBestSize()"
+- return wxSize(self.bitmap.GetWidth(), self.bitmap.GetHeight())
++ return wx.Size(self.bitmap.GetWidth(), self.bitmap.GetHeight())
+
+ # def GetBestSize(self):
+ # print "called GetBestSize()"
+-# return wxSize(self.bitmap.GetWidth(), self.bitmap.GetHeight())
++# return wx.Size(self.bitmap.GetWidth(), self.bitmap.GetHeight())
+
+
+ # arch-tag: DO_NOT_CHANGE_a21ebe5e-e749-45fb-81fb-fa430d46cf0e
More information about the scm-commits
mailing list