~ipython-dev/ipython/0.10.1

« back to all changes in this revision

Viewing changes to IPython/gui/wx/wxIPython.py

  • Committer: Fernando Perez
  • Date: 2008-06-02 01:26:30 UTC
  • mfrom: (0.1.130 ipython-local)
  • Revision ID: fernando.perez@berkeley.edu-20080602012630-m14vezrhydzvahf8
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).

Show diffs side-by-side

added added

removed removed

Lines of Context:
1
 
#!/usr/bin/python
2
 
# -*- coding: iso-8859-15 -*-
3
 
 
4
 
import wx.aui
5
 
import wx.py
6
 
from wx.lib.wordwrap import wordwrap
7
 
 
8
 
from ipython_view import *
9
 
from ipython_history import *
10
 
 
11
 
__version__ = 0.8
12
 
__author__  = "Laurent Dufrechou"
13
 
__email__   = "laurent.dufrechou _at_ gmail.com"
14
 
__license__ = "BSD"
15
 
 
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()
27
 
        
28
 
        # notify PyAUI which frame to use
29
 
        self._mgr.SetManagedWindow(self)
30
 
        
31
 
        #create differents panels and make them persistant 
32
 
        self.history_panel    = IPythonHistoryPanel(self)
33
 
        
34
 
        self.ipython_panel    = WxIPythonViewPanel(self,self.OnExitDlg,
35
 
                                                   background_color = "BLACK")
36
 
        
37
 
        #self.ipython_panel    = WxIPythonViewPanel(self,self.OnExitDlg,
38
 
        #                                           background_color = "WHITE")
39
 
        
40
 
        self.ipython_panel.setHistoryTrackerHook(self.history_panel.write)
41
 
        self.ipython_panel.setStatusTrackerHook(self.updateStatus)
42
 
        
43
 
        self.statusbar = self.createStatus()
44
 
        self.createMenu()
45
 
        
46
 
        ########################################################################
47
 
        ### add the panes to the manager
48
 
        # main panels
49
 
        self._mgr.AddPane(self.ipython_panel , wx.CENTER, "IPython Shell")
50
 
        self._mgr.AddPane(self.history_panel , wx.RIGHT,  "IPython history")
51
 
        
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));
56
 
                
57
 
        
58
 
        
59
 
        # tell the manager to "commit" all the changes just made
60
 
        self._mgr.Update()
61
 
 
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)
69
 
 
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'
73
 
        
74
 
        dlg = wx.MessageDialog(self,
75
 
                               warn_text,
76
 
                               'Warning Box',
77
 
                               wx.OK | wx.ICON_INFORMATION
78
 
                               )
79
 
        dlg.ShowModal()
80
 
        dlg.Destroy()
81
 
     
82
 
    def createMenu(self):
83
 
        """local method used to create one menu bar"""
84
 
        
85
 
        mb = wx.MenuBar()
86
 
 
87
 
        file_menu = wx.Menu()
88
 
        file_menu.Append(wx.ID_EXIT, "Exit")
89
 
        
90
 
        view_menu = wx.Menu()
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")
95
 
        
96
 
        about_menu = wx.Menu()
97
 
        about_menu.Append(wx.ID_HIGHEST+3, "About")
98
 
 
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")
104
 
        
105
 
        
106
 
        mb.Append(file_menu, "File")
107
 
        mb.Append(view_menu, "View")
108
 
        mb.Append(about_menu, "About")
109
 
        #mb.Append(options_menu, "Options")
110
 
        
111
 
        self.SetMenuBar(mb)
112
 
 
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)
118
 
        return statusbar
119
 
 
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)
127
 
        
128
 
    def OnClose(self, event):
129
 
        """#event used to close program  """
130
 
        # deinitialize the frame manager
131
 
        self._mgr.UnInit()
132
 
        self.Destroy()        
133
 
        event.Skip()
134
 
    
135
 
    def OnExitDlg(self, event):
136
 
        dlg = wx.MessageDialog(self, 'Are you sure you want to quit WxIPython',
137
 
                                'WxIPython exit',
138
 
                                wx.ICON_QUESTION |
139
 
                                wx.YES_NO | wx.NO_DEFAULT
140
 
                                )
141
 
        if dlg.ShowModal() == wx.ID_YES:
142
 
            dlg.Destroy()
143
 
            self._mgr.UnInit()
144
 
            self.Destroy()
145
 
        dlg.Destroy()
146
 
      
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)
151
 
        self._mgr.Update()  
152
 
    #event to display History pannel      
153
 
    def OnShowHistoryPanel(self,event):
154
 
        self._mgr.GetPane(self.history_panel).Show(True)
155
 
        self._mgr.Update()  
156
 
         
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)
161
 
        self._mgr.Update()
162
 
 
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))
176
 
 
177
 
        # Then we call wx.AboutBox giving it that info object
178
 
        wx.AboutBox(info) 
179
 
        
180
 
#-----------------------------------------
181
 
#Creating our application
182
 
#----------------------------------------- 
183
 
class MyApp(wx.PySimpleApp):
184
 
    """Creating our application"""
185
 
    def __init__(self):
186
 
        wx.PySimpleApp.__init__(self)
187
 
        
188
 
        self.frame = MyFrame()
189
 
        self.frame.Show()
190
 
        
191
 
#-----------------------------------------
192
 
#Main loop
193
 
#----------------------------------------- 
194
 
def main():
195
 
    app = MyApp()
196
 
    app.SetTopWindow(app.frame)
197
 
    app.MainLoop()
198
 
 
199
 
#if launched as main program run this
200
 
if __name__ == '__main__':
201
 
    main()