summaryrefslogtreecommitdiffstats
path: root/Demo/stdwin/microedit.py
diff options
context:
space:
mode:
Diffstat (limited to 'Demo/stdwin/microedit.py')
-rwxr-xr-xDemo/stdwin/microedit.py183
1 files changed, 0 insertions, 183 deletions
diff --git a/Demo/stdwin/microedit.py b/Demo/stdwin/microedit.py
deleted file mode 100755
index 1091676..0000000
--- a/Demo/stdwin/microedit.py
+++ /dev/null
@@ -1,183 +0,0 @@
-#! /usr/bin/env python
-
-# A minimal single-window text editor using STDWIN's text objects.
-#
-# Usage: microedit file
-#
-# This is not intended as a real application but as an introduction
-# to STDWIN programming in Python, especially text objects.
-# Once you understand microedit.py, study miniedit.py to learn
-# about multiple windows and menus, cut and paste, etc.
-
-
-import sys
-import stdwin
-from stdwinevents import *
-
-
-# Main program
-#
-def main():
- #
- # Get the filename argument and read its contents as one very
- # large string.
- # An exception will terminate the program if there is no argument
- # or if the file could not be read...
- #
- filename = sys.argv[1]
- fp = open(filename, 'r')
- contents = fp.read()
- del fp # Close the file
- #
- # Create the window, using the filename as window title
- #
- window = stdwin.open(filename)
- #
- # Add a simple File menu to the window with two items
- #
- filemenu = window.menucreate('File')
- filemenu.additem('Save', 'S') # Item 0 (shortcut Meta-S)
- filemenu.additem('Save As...') # Item 1
- #
- # Create a text object occupying the entire window
- # and fill it with the file's contents
- #
- corner = window.getwinsize() # (width, height)
- area = (0, 0), corner # Rectangle as large as the window
- text = window.textcreate(area)
- text.settext(contents)
- del contents # Get rid of contents object
- fix_textsize(window, text) # Set document size accordingly
- #
- # Main event loop -- stop if a close request comes in.
- #
- # STDWIN applications should regularly call stdwin.getevent()
- # otherwise the windows won't function as expected.
- #
- while 1:
- #
- # Get the next event
- #
- type, w, detail = e = stdwin.getevent()
- #
- # Event decoding switch
- #
- if type == WE_CLOSE:
- break # Stop (no check for saved file!)
- elif type == WE_SIZE:
- #
- # The window was resized --
- # let the text object recompute the line breaks
- # and change the document size accordingly,
- # so scroll bars will work
- #
- fix_textsize(window, text)
- elif type == WE_MENU:
- #
- # Execute a file menu request (our only menu)
- #
- menu, item = detail
- if item == 0:
- #
- # "Save": save to the current filename
- #
- dummy = save_file(window, text, filename)
- elif item == 1:
- #
- # "Save As": ask a new filename, save to it,
- # and make it the current filename
- #
- # NB: askfile raises KeyboardInterrupt
- # if the user cancels the dialog, hence
- # the try statement
- #
- try:
- newfile = stdwin.askfile( \
- 'Save as:', filename, 1)
- except KeyboardInterrupt:
- newfile = ''
- if newfile:
- if save_file(window, text, newfile):
- filename = newfile
- window.settitle(filename)
- elif text.event(e):
- #
- # The text object has handled the event.
- # Fix the document size if necessary.
- # Note: this sometimes fixes the size
- # unnecessarily, e.g., for arrow keys.
- #
- if type in (WE_CHAR, WE_COMMAND):
- fix_docsize(window, text)
-
-
-# Save the window's contents to the filename.
-# If the open() fails, put up a warning message and return 0;
-# if the save succeeds, return 1.
-#
-def save_file(window, text, filename):
- #
- # Open the file for writing, handling exceptions
- #
- try:
- fp = open(filename, 'w')
- except RuntimeError:
- stdwin.message('Cannot create ' + filename)
- return 0
- #
- # Get the contents of the text object as one very long string
- #
- contents = text.gettext()
- #
- # Write the contents to the file
- #
- fp.write(contents)
- #
- # The file is automatically closed when this routine returns
- #
- return 1
-
-
-# Change the size of the text object to fit in the window,
-# and then fix the window's document size to fit around the text object.
-#
-def fix_textsize(window, text):
- #
- # Compute a rectangle as large as the window
- #
- corner = window.getwinsize() # (width, height)
- area = (0, 0), (corner)
- #
- # Move the text object to this rectangle.
- # Note: text.move() ignores the bottom coordinate!
- #
- text.move(area)
- #
- # Now fix the document size accordingly
- #
- fix_docsize(window, text)
-
-
-# Fix the document size, after the text has changed
-#
-def fix_docsize(window, text):
- #
- # Get the actual rectangle occupied by the text object.
- # This has the same left, top and right, but a different bottom.
- #
- area = text.getrect()
- #
- # Compute the true height of the text object
- #
- origin, corner = area
- width, height = corner
- #
- # Set the document height to the text object's height.
- # The width is zero since we don't want a horizontal scroll bar.
- #
- window.setdocsize(0, height)
-
-
-# Once all functions are defined, call main()
-#
-main()