File: file_editor.py

package info (click to toggle)
matplotlib 0.98.1-1%2Blenny4
  • links: PTS
  • area: main
  • in suites: lenny
  • size: 18,624 kB
  • ctags: 22,599
  • sloc: python: 76,915; cpp: 63,459; ansic: 5,353; makefile: 111; sh: 12
file content (152 lines) | stat: -rw-r--r-- 6,539 bytes parent folder | download | duplicates (2)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
#------------------------------------------------------------------------------
# Copyright (c) 2005, Enthought, Inc.
# All rights reserved.
# 
# This software is provided without warranty under the terms of the BSD
# license included in enthought/LICENSE.txt and may be redistributed only
# under the conditions described in the aforementioned license.  The license
# is also available online at http://www.enthought.com/licenses/BSD.txt
# Thanks for using Enthought open source!
# 
# Author: David C. Morrill
# Date: 12/02/2004
# Description: Define the Tkinter implementation of the various file editors and
#              the file editor factory.
#
#  Symbols defined: ToolkitEditorFactory
#
#------------------------------------------------------------------------------

#-------------------------------------------------------------------------------
#  Imports:
#-------------------------------------------------------------------------------

import tk

from os.path          import abspath
from enthought.traits.api import List, Str, false
from text_editor      import ToolkitEditorFactory as EditorFactory
from text_editor      import SimpleEditor         as SimpleTextEditor

#-------------------------------------------------------------------------------
#  Trait definitions:
#-------------------------------------------------------------------------------

# Wildcard filter:
filter_trait = List( Str )

#-------------------------------------------------------------------------------
#  'ToolkitEditorFactory' class:
#-------------------------------------------------------------------------------

class ToolkitEditorFactory ( EditorFactory ):
    
    #---------------------------------------------------------------------------
    #  Trait definitions:
    #---------------------------------------------------------------------------
    
    filter       = filter_trait  # Wildcard filter to apply to the file dialog
    truncate_ext = false      # Should file extension be truncated?
    auto_set     = false      # Is user input set on every keystroke? (override)
    
    #---------------------------------------------------------------------------
    #  'Editor' factory methods:
    #---------------------------------------------------------------------------
    
    def simple_editor ( self, ui, object, name, description, parent ):
        return SimpleEditor( parent,
                             factory     = self, 
                             ui          = ui, 
                             object      = object, 
                             name        = name, 
                             description = description ) 
                                      
#-------------------------------------------------------------------------------
#  'SimpleEditor' class:
#-------------------------------------------------------------------------------
                               
class SimpleEditor ( SimpleTextEditor ):
        
    #---------------------------------------------------------------------------
    #  Finishes initializing the editor by creating the underlying toolkit
    #  widget:
    #---------------------------------------------------------------------------
        
    def init ( self, parent ):
        """ Finishes initializing the editor by creating the underlying toolkit
            widget.
        """
        self.control = panel = wx.Panel( parent, -1 )
        sizer        = wx.BoxSizer( wx.HORIZONTAL )
        if self.factory.enter_set:
            control = wx.TextCtrl( panel, -1, '', style = wx.TE_PROCESS_ENTER )
            wx.EVT_TEXT_ENTER( panel, control.GetId(), self.update_object )
        else:
            control = wx.TextCtrl( panel, -1, '' )
        self._filename = control
        wx.EVT_KILL_FOCUS( control, self.update_object )
        if self.factory.auto_set:
            wx.EVT_TEXT( panel, control.GetId(), self.update_object )
        sizer.Add( control, 1, wx.EXPAND | wx.ALIGN_CENTER )
        button = wx.Button( panel, -1, 'Browse...' )
        sizer.Add( button, 0, wx.LEFT | wx.ALIGN_CENTER, 8 )
        wx.EVT_BUTTON( panel, button.GetId(), self.show_file_dialog )
        panel.SetAutoLayout( True )
        panel.SetSizer( sizer )
        sizer.Fit( panel )

    #---------------------------------------------------------------------------
    #  Handles the user changing the contents of the edit control:
    #---------------------------------------------------------------------------
  
    def update_object ( self, event ):
        """ Handles the user changing the contents of the edit control.
        """
        try:
            filename = self._filename.GetValue()
            if self.factory.truncate_ext:
                filename = splitext( filename )[0] 
            self.value = filename
        except TraitError, excp:
            pass
        
    #---------------------------------------------------------------------------
    #  Updates the editor when the object trait changes external to the editor:
    #---------------------------------------------------------------------------
        
    def update_editor ( self ):
        """ Updates the editor when the object trait changes external to the 
            editor.
        """
        self._filename.SetValue( self.str_value )
       
    #---------------------------------------------------------------------------
    #  Displays the pop-up file dialog:
    #---------------------------------------------------------------------------
 
    def show_file_dialog ( self, event ):
        """ Displays the pop-up file dialog.
        """
        dlg      = self.create_file_dialog()
        rc       = (dlg.ShowModal() == wx.ID_OK)
        filename = abspath( dlg.GetPath() )
        dlg.Destroy()
        if rc:
            if self.factory.truncate_ext:
               filename = splitext( filename )[0] 
            self.value = filename
            self.update_editor()

    #---------------------------------------------------------------------------
    #  Creates the correct type of file dialog:
    #---------------------------------------------------------------------------
           
    def create_file_dialog ( self ):
        """ Creates the correct type of file dialog.
        """
        dlg = wx.FileDialog( self.control, message = 'Select a File' )
        dlg.SetFilename( self._filename.GetValue() )
        if len( self.factory.filter ) > 0:
            dlg.SetWildcard( '|'.join( self.factory.filter[:] ) )
        return dlg