X-Git-Url: https://git.saurik.com/wxWidgets.git/blobdiff_plain/ec873c943d71f0d5f13e3398557071448cda6c23..a4027e74873007e3430af3bd77019bcab76f6c04:/wxPython/samples/wxProject/wxProject.py?ds=inline diff --git a/wxPython/samples/wxProject/wxProject.py b/wxPython/samples/wxProject/wxProject.py deleted file mode 100644 index c8604cd45b..0000000000 --- a/wxPython/samples/wxProject/wxProject.py +++ /dev/null @@ -1,318 +0,0 @@ -#!/usr/bin/env python - -""" -This sample comes from an IBM developerWorks article at -http://www-106.ibm.com/developerworks/library/l-wxpy/index.html - -This small program was adapted to demonstrate the current guide lines -on http://wiki.wxpython.org/index.cgi/wxPython_20Style_20Guide. -Changes are noted in readme.txt. -""" - -import sys, os -import wx - - -# Process the command line. Not much to do; -# just get the name of the project file if it's given. Simple. -projfile = 'Unnamed' -if len(sys.argv) > 1: - projfile = sys.argv[1] - - -def MsgDlg(window, string, caption='wxProject', style=wx.YES_NO|wx.CANCEL): - """Common MessageDialog.""" - dlg = wx.MessageDialog(window, string, caption, style) - result = dlg.ShowModal() - dlg.Destroy() - return result - - -class main_window(wx.Frame): - """wxProject MainFrame.""" - def __init__(self, parent, title): - """Create the wxProject MainFrame.""" - wx.Frame.__init__(self, parent, title=title, size=(500, 500), - style=wx.DEFAULT_FRAME_STYLE|wx.NO_FULL_REPAINT_ON_RESIZE) - - - # Set up menu bar for the program. - self.mainmenu = wx.MenuBar() # Create menu bar. - - # Make the 'Project' menu. - menu = wx.Menu() - - item = menu.Append(wx.ID_OPEN, '&Open', 'Open project') # Append a new menu - self.Bind(wx.EVT_MENU, self.OnProjectOpen, item) # Create and assign a menu event. - - item = menu.Append(wx.ID_NEW, '&New', 'New project') - self.Bind(wx.EVT_MENU, self.OnProjectNew, item) - - item = menu.Append(wx.ID_EXIT, 'E&xit', 'Exit program') - self.Bind(wx.EVT_MENU, self.OnProjectExit, item) - - self.mainmenu.Append(menu, '&Project') # Add the project menu to the menu bar. - - # Make the 'File' menu. - menu = wx.Menu() - - item = menu.Append(wx.ID_ANY, '&Add', 'Add file to project') - self.Bind(wx.EVT_MENU, self.OnFileAdd, item) - - item = menu.Append(wx.ID_ANY, '&Remove', 'Remove file from project') - self.Bind(wx.EVT_MENU, self.OnFileRemove, item) - - item = menu.Append(wx.ID_ANY, '&Open', 'Open file for editing') - self.Bind(wx.EVT_MENU, self.OnFileOpen, item) - - item = menu.Append(wx.ID_ANY, '&Save', 'Save file') - self.Bind(wx.EVT_MENU, self.OnFileSave, item) - - self.mainmenu.Append(menu, '&File') # Add the file menu to the menu bar. - - # Attach the menu bar to the window. - self.SetMenuBar(self.mainmenu) - - # Create the splitter window. - splitter = wx.SplitterWindow(self, style=wx.NO_3D|wx.SP_3D) - splitter.SetMinimumPaneSize(1) - - # Create the tree on the left. - self.tree = wx.TreeCtrl(splitter, style=wx.TR_DEFAULT_STYLE) - self.tree.Bind(wx.EVT_TREE_BEGIN_LABEL_EDIT, self.OnTreeLabelEdit) - self.tree.Bind(wx.EVT_TREE_END_LABEL_EDIT, self.OnTreeLabelEditEnd) - self.tree.Bind(wx.EVT_TREE_ITEM_ACTIVATED, self.OnTreeItemActivated) - - # Create the editor on the right. - self.editor = wx.TextCtrl(splitter, style=wx.TE_MULTILINE) - self.editor.Enable(0) - - # Install the tree and the editor. - splitter.SplitVertically(self.tree, self.editor) - splitter.SetSashPosition(180, True) - - # Some global state variables. - self.projectdirty = False - self.root = None - self.close = False - - self.Bind(wx.EVT_CLOSE, self.OnProjectExit) - - self.Show(True) - - # ---------------------------------------------------------------------------------------- - # Some nice little handlers. - # ---------------------------------------------------------------------------------------- - - def project_open(self, project_file): - """Open and process a wxProject file.""" - try: - input = open(project_file, 'r') - self.tree.DeleteAllItems() - - self.project_file = project_file - name = input.readline().replace ('\n', '') - self.SetTitle(name) - - # create the file elements in the tree control. - self.root = self.tree.AddRoot(name) - self.activeitem = self.root - for line in input.readlines(): - self.tree.AppendItem(self.root, line.replace ('\n', '')) - input.close() - self.tree.Expand(self.root) - - self.editor.Clear() - self.editor.Enable(False) - - self.projectdirty = False - except IOError: - pass - - def project_save(self): - """Save a wxProject file.""" - try: - output = open(self.project_file, 'w+') - output.write(self.tree.GetItemText(self.root) + '\n') - count = self.tree.GetChildrenCount(self.root) # collect all file (tree) items. - iter = 0 - child = '' - for i in range(count): - if i == 0: - child, cookie = self.tree.GetFirstChild(self.root) - else: - child, cookie = self.tree.GetNextChild(self.root, cookie) - output.write(self.tree.GetItemText(child) + '\n') - output.close() - self.projectdirty = False - except IOError: - MsgDlg(self, 'There was an error saving the new project file.', 'Error!', wx.OK) - - def CheckProjectDirty(self): - """Were the current project changed? If so, save it before.""" - open_it = True - if self.projectdirty: - # save the current project file first. - result = MsgDlg(self, 'The project has been changed. Save?') - if result == wx.ID_YES: - self.project_save() - if result == wx.ID_CANCEL: - open_it = False - return open_it - - def CheckTreeRootItem(self): - """Is there any root item?""" - if not self.root: - MsgDlg(self, 'Please create or open a project before.', 'Error!', wx.OK) - return False - return True - - # ---------------------------------------------------------------------------------------- - # Event handlers from here on out. - # ---------------------------------------------------------------------------------------- - - def OnProjectOpen(self, event): - """Open a wxProject file.""" - open_it = self.CheckProjectDirty() - if open_it: - dlg = wx.FileDialog(self, 'Choose a project to open', '.', '', '*.wxp', wx.OPEN) - if dlg.ShowModal() == wx.ID_OK: - self.project_open(dlg.GetPath()) - dlg.Destroy() - - def OnProjectNew(self, event): - """Create a new wxProject.""" - open_it = self.CheckProjectDirty() - if open_it: - dlg = wx.TextEntryDialog(self, 'Name for new project:', 'New Project', - 'New project', wx.OK|wx.CANCEL) - if dlg.ShowModal() == wx.ID_OK: - newproj = dlg.GetValue() - dlg.Destroy() - dlg = wx.FileDialog(self, 'Place to store new project.', '.', '', '*.wxp', wx.SAVE) - if dlg.ShowModal() == wx.ID_OK: - try: - # save the project file. - proj = open(dlg.GetPath(), 'w') - proj.write(newproj + '\n') - proj.close() - self.project_open(dlg.GetPath()) - except IOError: - MsgDlg(self, 'There was an error saving the new project file.', 'Error!', wx.OK) - dlg.Destroy() - - def SaveCurrentFile(self): - """Check and save current file.""" - go_ahead = True - if self.root: - if self.activeitem != self.root: - if self.editor.IsModified(): # Save modified file before - result = MsgDlg(self, 'The edited file has changed. Save it?') - if result == wx.ID_YES: - self.editor.SaveFile(self.tree.GetItemText(self.activeitem)) - if result == wx.ID_CANCEL: - go_ahead = False - if go_ahead: - self.tree.SetItemBold(self.activeitem, 0) - return go_ahead - - def OnProjectExit(self, event): - """Quit the program.""" - if not self.close: - self.close = True - if not self.SaveCurrentFile(): - self.close = False - if self.projectdirty and self.close: - result = MsgDlg(self, 'The project has been changed. Save?') - if result == wx.ID_YES: - self.project_save() - if result == wx.ID_CANCEL: - self.close = False - if self.close: - self.Close() - else: - event.Skip() - - def OnFileAdd(self, event): - """Adds a file to the current project.""" - if not self.CheckTreeRootItem(): - return - - dlg = wx.FileDialog(self, 'Choose a file to add.', '.', '', '*.*', wx.OPEN) - if dlg.ShowModal() == wx.ID_OK: - path = os.path.split(dlg.GetPath()) - self.tree.AppendItem(self.root, path[1]) - self.tree.Expand(self.root) - self.project_save() - - def OnFileRemove(self, event): - """Removes a file to the current project.""" - if not self.CheckTreeRootItem(): - return - item = self.tree.GetSelection() - if item != self.root: - self.tree.Delete(item) - self.project_save() - - def OnFileOpen(self, event): - """Opens current selected file.""" - if self.root: - item = self.tree.GetSelection() - if item != self.root: - self.OnTreeItemActivated(None, item) - return - MsgDlg(self, 'There is no file to load.', 'Error!', wx.OK) - - def OnFileSave(self, event): - """Saves current selected file.""" - if self.root: - if self.activeitem != self.root: - self.editor.SaveFile(self.tree.GetItemText(self.activeitem)) - return - MsgDlg(self, 'There is no file to save.', 'Error!', wx.OK) - - - def OnTreeLabelEdit(self, event): - """Edit tree label (only root label can be edited).""" - item = event.GetItem() - if item != self.root: - event.Veto() - - def OnTreeLabelEditEnd(self, event): - """End editing the tree label.""" - self.projectdirty = True - - - def OnTreeItemActivated(self, event, item=None): - """Tree item was activated: try to open this file.""" - go_ahead = self.SaveCurrentFile() - - if go_ahead: - if event: - item = event.GetItem() - self.activeitem = item - if item != self.root: - # load the current selected file - self.tree.SetItemBold(item, 1) - self.editor.Enable(1) - self.editor.LoadFile(self.tree.GetItemText(item)) - self.editor.SetInsertionPoint(0) - self.editor.SetFocus() - else: - self.editor.Clear() - self.editor.Enable(0) - - -class App(wx.App): - """wxProject Application.""" - def OnInit(self): - """Create the wxProject Application.""" - frame = main_window(None, 'wxProject - ' + projfile) - if projfile != 'Unnamed': - frame.project_open(projfile) - return True - - -if __name__ == '__main__': - app = App(0) - app.MainLoop()