2
# -*- coding: iso-8859-15 -*-
6
from wx.lib.wordwrap import wordwrap
8
from ipython_view import *
9
from ipython_history import *
12
__author__ = "Laurent Dufrechou"
13
__email__ = "laurent.dufrechou _at_ gmail.com"
16
#-----------------------------------------
17
# Creating one main frame for our
18
# application with movables windows
19
#-----------------------------------------
20
class MyFrame(wx.Frame):
21
"""Creating one main frame for our
22
application with movables windows"""
23
def __init__(self, parent=None, id=-1, title="WxIPython", pos=wx.DefaultPosition,
24
size=(800, 600), style=wx.DEFAULT_FRAME_STYLE):
25
wx.Frame.__init__(self, parent, id, title, pos, size, style)
26
self._mgr = wx.aui.AuiManager()
28
# notify PyAUI which frame to use
29
self._mgr.SetManagedWindow(self)
31
#create differents panels and make them persistant
32
self.history_panel = IPythonHistoryPanel(self)
34
self.ipython_panel = WxIPythonViewPanel(self,self.OnExitDlg,
35
background_color = "BLACK")
37
#self.ipython_panel = WxIPythonViewPanel(self,self.OnExitDlg,
38
# background_color = "WHITE")
40
self.ipython_panel.setHistoryTrackerHook(self.history_panel.write)
41
self.ipython_panel.setStatusTrackerHook(self.updateStatus)
43
self.statusbar = self.createStatus()
46
########################################################################
47
### add the panes to the manager
49
self._mgr.AddPane(self.ipython_panel , wx.CENTER, "IPython Shell")
50
self._mgr.AddPane(self.history_panel , wx.RIGHT, "IPython history")
52
# now we specify some panel characteristics
53
self._mgr.GetPane(self.ipython_panel).CaptionVisible(True);
54
self._mgr.GetPane(self.history_panel).CaptionVisible(True);
55
self._mgr.GetPane(self.history_panel).MinSize((200,400));
59
# tell the manager to "commit" all the changes just made
62
#global event handling
63
self.Bind(wx.EVT_CLOSE, self.OnClose)
64
self.Bind(wx.EVT_MENU, self.OnClose,id=wx.ID_EXIT)
65
self.Bind(wx.EVT_MENU, self.OnShowIPythonPanel,id=wx.ID_HIGHEST+1)
66
self.Bind(wx.EVT_MENU, self.OnShowHistoryPanel,id=wx.ID_HIGHEST+2)
67
self.Bind(wx.EVT_MENU, self.OnShowAbout, id=wx.ID_HIGHEST+3)
68
self.Bind(wx.EVT_MENU, self.OnShowAllPanel,id=wx.ID_HIGHEST+6)
70
warn_text = 'Hello from IPython and wxPython.\n'
71
warn_text +='Please Note that this work is still EXPERIMENTAL\n'
72
warn_text +='It does NOT emulate currently all the IPython functions.\n'
74
dlg = wx.MessageDialog(self,
77
wx.OK | wx.ICON_INFORMATION
83
"""local method used to create one menu bar"""
88
file_menu.Append(wx.ID_EXIT, "Exit")
91
view_menu.Append(wx.ID_HIGHEST+1, "Show IPython Panel")
92
view_menu.Append(wx.ID_HIGHEST+2, "Show History Panel")
93
view_menu.AppendSeparator()
94
view_menu.Append(wx.ID_HIGHEST+6, "Show All")
96
about_menu = wx.Menu()
97
about_menu.Append(wx.ID_HIGHEST+3, "About")
99
#view_menu.AppendSeparator()
100
#options_menu = wx.Menu()
101
#options_menu.AppendCheckItem(wx.ID_HIGHEST+7, "Allow Floating")
102
#options_menu.AppendCheckItem(wx.ID_HIGHEST+8, "Transparent Hint")
103
#options_menu.AppendCheckItem(wx.ID_HIGHEST+9, "Transparent Hint Fade-in")
106
mb.Append(file_menu, "File")
107
mb.Append(view_menu, "View")
108
mb.Append(about_menu, "About")
109
#mb.Append(options_menu, "Options")
113
def createStatus(self):
114
statusbar = self.CreateStatusBar(2, wx.ST_SIZEGRIP)
115
statusbar.SetStatusWidths([-2, -3])
116
statusbar.SetStatusText("Ready", 0)
117
statusbar.SetStatusText("WxIPython "+str(__version__), 1)
120
def updateStatus(self,text):
121
states = {'IDLE':'Idle',
122
'DO_EXECUTE_LINE':'Send command',
123
'WAIT_END_OF_EXECUTION':'Running command',
124
'SHOW_DOC':'Showing doc',
125
'SHOW_PROMPT':'Showing prompt'}
126
self.statusbar.SetStatusText(states[text], 0)
128
def OnClose(self, event):
129
"""#event used to close program """
130
# deinitialize the frame manager
135
def OnExitDlg(self, event):
136
dlg = wx.MessageDialog(self, 'Are you sure you want to quit WxIPython',
139
wx.YES_NO | wx.NO_DEFAULT
141
if dlg.ShowModal() == wx.ID_YES:
147
#event to display IPython pannel
148
def OnShowIPythonPanel(self,event):
149
""" #event to display Boxpannel """
150
self._mgr.GetPane(self.ipython_panel).Show(True)
152
#event to display History pannel
153
def OnShowHistoryPanel(self,event):
154
self._mgr.GetPane(self.history_panel).Show(True)
157
def OnShowAllPanel(self,event):
158
"""#event to display all Pannels"""
159
self._mgr.GetPane(self.ipython_panel).Show(True)
160
self._mgr.GetPane(self.history_panel).Show(True)
163
def OnShowAbout(self, event):
164
# First we create and fill the info object
165
info = wx.AboutDialogInfo()
166
info.Name = "WxIPython"
167
info.Version = str(__version__)
168
info.Copyright = "(C) 2007 Laurent Dufrechou"
169
info.Description = wordwrap(
170
"A Gui that embbed a multithreaded IPython Shell",
171
350, wx.ClientDC(self))
172
info.WebSite = ("http://ipython.scipy.org/", "IPython home page")
173
info.Developers = [ "Laurent Dufrechou" ]
174
licenseText="BSD License.\nAll rights reserved. This program and the accompanying materials are made available under the terms of the BSD which accompanies this distribution, and is available at http://www.opensource.org/licenses/bsd-license.php"
175
info.License = wordwrap(licenseText, 500, wx.ClientDC(self))
177
# Then we call wx.AboutBox giving it that info object
180
#-----------------------------------------
181
#Creating our application
182
#-----------------------------------------
183
class MyApp(wx.PySimpleApp):
184
"""Creating our application"""
186
wx.PySimpleApp.__init__(self)
188
self.frame = MyFrame()
191
#-----------------------------------------
193
#-----------------------------------------
196
app.SetTopWindow(app.frame)
199
#if launched as main program run this
200
if __name__ == '__main__':