##// END OF EJS Templates
Merge in all development done in bzr since February 16 2008....
Merge in all development done in bzr since February 16 2008. At that time, a clean bzr branch was started from the SVN tree, but without SVN history. That SVN history has now been used as the basis of this branch, and the development done on the history-less BZR branch has been added and is the content of this merge. This branch will be the new official main line of development in Launchpad (equivalent to the old SVN trunk).

File last commit:

r1217:34bf4321
r1218:6b454030 merge
Show More
wxIPython.py
240 lines | 9.1 KiB | text/x-python | PythonLexer
ville
initialization (no svn history)
r988 #!/usr/bin/python
# -*- coding: iso-8859-15 -*-
import wx.aui
ldufrechou
cleanup in imports in wxIpython.py
r1108
#used for about dialog
ville
initialization (no svn history)
r988 from wx.lib.wordwrap import wordwrap
ldufrechou
cleanup in imports in wxIpython.py
r1108 #used for ipython GUI objects
ldufrechou
[/gui/wx] Initial options support + conf file....
r1168 from IPython.gui.wx.ipython_view import IPShellWidget
ldufrechou
cleanup in imports in wxIpython.py
r1108 from IPython.gui.wx.ipython_history import IPythonHistoryPanel
ville
initialization (no svn history)
r988
__version__ = 0.8
__author__ = "Laurent Dufrechou"
__email__ = "laurent.dufrechou _at_ gmail.com"
__license__ = "BSD"
#-----------------------------------------
# Creating one main frame for our
# application with movables windows
#-----------------------------------------
class MyFrame(wx.Frame):
"""Creating one main frame for our
application with movables windows"""
Gael Varoquaux
Add a very simple test case to test only the widget for the wxIpython...
r1107 def __init__(self, parent=None, id=-1, title="WxIPython",
pos=wx.DefaultPosition,
ville
initialization (no svn history)
r988 size=(800, 600), style=wx.DEFAULT_FRAME_STYLE):
wx.Frame.__init__(self, parent, id, title, pos, size, style)
self._mgr = wx.aui.AuiManager()
# notify PyAUI which frame to use
self._mgr.SetManagedWindow(self)
#create differents panels and make them persistant
self.history_panel = IPythonHistoryPanel(self)
ldufrechou
[gui/wx] added options save/restore for history widget
r1176
self.history_panel.setOptionTrackerHook(self.optionSave)
ville
initialization (no svn history)
r988
ldufrechou
Corrected bug #241...
r1130 self.ipython_panel = IPShellWidget(self,background_color = "BLACK")
ldufrechou
BIG improvement on cout management....
r1133 #self.ipython_panel = IPShellWidget(self,background_color = "WHITE")
ldufrechou
Cleaned up version with initial WX callback (callafter) support
r1091
ville
initialization (no svn history)
r988 self.ipython_panel.setHistoryTrackerHook(self.history_panel.write)
self.ipython_panel.setStatusTrackerHook(self.updateStatus)
ldufrechou
Corrected bug #241...
r1130 self.ipython_panel.setAskExitHandler(self.OnExitDlg)
ldufrechou
[/gui/wx] Initial options support + conf file....
r1168 self.ipython_panel.setOptionTrackerHook(self.optionSave)
ldufrechou
Cleaned up version with initial WX callback (callafter) support
r1091
ldufrechou
[gui/wx] added options save/restore for history widget
r1176 self.optionLoad()
ldufrechou
[/gui/wx] Initial options support + conf file....
r1168
ville
initialization (no svn history)
r988 self.statusbar = self.createStatus()
self.createMenu()
########################################################################
### add the panes to the manager
# main panels
self._mgr.AddPane(self.ipython_panel , wx.CENTER, "IPython Shell")
self._mgr.AddPane(self.history_panel , wx.RIGHT, "IPython history")
Gael Varoquaux
Changed tabs to whitespace in the wx frontend...
r1103
ville
initialization (no svn history)
r988 # now we specify some panel characteristics
self._mgr.GetPane(self.ipython_panel).CaptionVisible(True);
self._mgr.GetPane(self.history_panel).CaptionVisible(True);
self._mgr.GetPane(self.history_panel).MinSize((200,400));
# tell the manager to "commit" all the changes just made
self._mgr.Update()
#global event handling
self.Bind(wx.EVT_CLOSE, self.OnClose)
self.Bind(wx.EVT_MENU, self.OnClose,id=wx.ID_EXIT)
self.Bind(wx.EVT_MENU, self.OnShowIPythonPanel,id=wx.ID_HIGHEST+1)
self.Bind(wx.EVT_MENU, self.OnShowHistoryPanel,id=wx.ID_HIGHEST+2)
self.Bind(wx.EVT_MENU, self.OnShowAbout, id=wx.ID_HIGHEST+3)
self.Bind(wx.EVT_MENU, self.OnShowAllPanel,id=wx.ID_HIGHEST+6)
ldufrechou
[/gui/wx] Initial options support + conf file....
r1168
ville
initialization (no svn history)
r988 warn_text = 'Hello from IPython and wxPython.\n'
warn_text +='Please Note that this work is still EXPERIMENTAL\n'
warn_text +='It does NOT emulate currently all the IPython functions.\n'
dlg = wx.MessageDialog(self,
warn_text,
'Warning Box',
wx.OK | wx.ICON_INFORMATION
)
dlg.ShowModal()
dlg.Destroy()
ldufrechou
[/gui/wx] Initial options support + conf file....
r1168
def optionSave(self, name, value):
opt = open('options.conf','w')
ldufrechou
[gui/wx] added options save/restore for history widget
r1176
try:
options_ipython_panel = self.ipython_panel.getOptions()
options_history_panel = self.history_panel.getOptions()
for key in options_ipython_panel.keys():
opt.write(key + '=' + options_ipython_panel[key]['value']+'\n')
for key in options_history_panel.keys():
opt.write(key + '=' + options_history_panel[key]['value']+'\n')
finally:
opt.close()
ldufrechou
[/gui/wx] Initial options support + conf file....
r1168
def optionLoad(self):
opt = open('options.conf','r')
lines = opt.readlines()
opt.close()
ldufrechou
[gui/wx] added options save/restore for history widget
r1176 options_ipython_panel = self.ipython_panel.getOptions()
options_history_panel = self.history_panel.getOptions()
ldufrechou
[/gui/wx] Initial options support + conf file....
r1168
for line in lines:
key = line.split('=')[0]
ldufrechou
[/gui/wx] corrected a small bug under linux with '\r' in option file
r1174 value = line.split('=')[1].replace('\n','').replace('\r','')
ldufrechou
[gui/wx] added options save/restore for history widget
r1176 if key in options_ipython_panel.keys():
options_ipython_panel[key]['value'] = value
elif key in options_history_panel.keys():
options_history_panel[key]['value'] = value
else:
print >>sys.__stdout__,"Warning: key ",key,"not found in widget options. Check Options.conf"
self.ipython_panel.reloadOptions(options_ipython_panel)
self.history_panel.reloadOptions(options_history_panel)
ldufrechou
[/gui/wx] Initial options support + conf file....
r1168
ville
initialization (no svn history)
r988 def createMenu(self):
"""local method used to create one menu bar"""
mb = wx.MenuBar()
file_menu = wx.Menu()
file_menu.Append(wx.ID_EXIT, "Exit")
view_menu = wx.Menu()
view_menu.Append(wx.ID_HIGHEST+1, "Show IPython Panel")
view_menu.Append(wx.ID_HIGHEST+2, "Show History Panel")
view_menu.AppendSeparator()
view_menu.Append(wx.ID_HIGHEST+6, "Show All")
about_menu = wx.Menu()
about_menu.Append(wx.ID_HIGHEST+3, "About")
#view_menu.AppendSeparator()
#options_menu = wx.Menu()
#options_menu.AppendCheckItem(wx.ID_HIGHEST+7, "Allow Floating")
#options_menu.AppendCheckItem(wx.ID_HIGHEST+8, "Transparent Hint")
#options_menu.AppendCheckItem(wx.ID_HIGHEST+9, "Transparent Hint Fade-in")
mb.Append(file_menu, "File")
mb.Append(view_menu, "View")
mb.Append(about_menu, "About")
#mb.Append(options_menu, "Options")
self.SetMenuBar(mb)
def createStatus(self):
statusbar = self.CreateStatusBar(2, wx.ST_SIZEGRIP)
statusbar.SetStatusWidths([-2, -3])
statusbar.SetStatusText("Ready", 0)
statusbar.SetStatusText("WxIPython "+str(__version__), 1)
return statusbar
def updateStatus(self,text):
states = {'IDLE':'Idle',
'DO_EXECUTE_LINE':'Send command',
'WAIT_END_OF_EXECUTION':'Running command',
ldufrechou
Support for true raw_input:...
r1134 'WAITING_USER_INPUT':'Waiting user input',
ville
initialization (no svn history)
r988 'SHOW_DOC':'Showing doc',
'SHOW_PROMPT':'Showing prompt'}
self.statusbar.SetStatusText(states[text], 0)
def OnClose(self, event):
"""#event used to close program """
# deinitialize the frame manager
self._mgr.UnInit()
self.Destroy()
event.Skip()
def OnExitDlg(self, event):
dlg = wx.MessageDialog(self, 'Are you sure you want to quit WxIPython',
'WxIPython exit',
wx.ICON_QUESTION |
wx.YES_NO | wx.NO_DEFAULT
)
if dlg.ShowModal() == wx.ID_YES:
dlg.Destroy()
self._mgr.UnInit()
self.Destroy()
dlg.Destroy()
#event to display IPython pannel
def OnShowIPythonPanel(self,event):
""" #event to display Boxpannel """
self._mgr.GetPane(self.ipython_panel).Show(True)
self._mgr.Update()
#event to display History pannel
def OnShowHistoryPanel(self,event):
self._mgr.GetPane(self.history_panel).Show(True)
self._mgr.Update()
def OnShowAllPanel(self,event):
"""#event to display all Pannels"""
self._mgr.GetPane(self.ipython_panel).Show(True)
self._mgr.GetPane(self.history_panel).Show(True)
self._mgr.Update()
def OnShowAbout(self, event):
# First we create and fill the info object
info = wx.AboutDialogInfo()
info.Name = "WxIPython"
info.Version = str(__version__)
info.Copyright = "(C) 2007 Laurent Dufrechou"
info.Description = wordwrap(
"A Gui that embbed a multithreaded IPython Shell",
350, wx.ClientDC(self))
info.WebSite = ("http://ipython.scipy.org/", "IPython home page")
info.Developers = [ "Laurent Dufrechou" ]
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"
info.License = wordwrap(licenseText, 500, wx.ClientDC(self))
# Then we call wx.AboutBox giving it that info object
wx.AboutBox(info)
#-----------------------------------------
#Creating our application
#-----------------------------------------
class MyApp(wx.PySimpleApp):
"""Creating our application"""
def __init__(self):
wx.PySimpleApp.__init__(self)
self.frame = MyFrame()
self.frame.Show()
#-----------------------------------------
#Main loop
#-----------------------------------------
def main():
app = MyApp()
app.SetTopWindow(app.frame)
app.MainLoop()
#if launched as main program run this
if __name__ == '__main__':
main()