Statistics
| Revision:

gvsig-scripting / org.gvsig.scripting / trunk / org.gvsig.scripting / org.gvsig.scripting.app / org.gvsig.scripting.app.mainplugin / src / main / resources-plugin / scripting / lib / gvsig / libs / formpanel.py @ 650

History | View | Annotate | Download (10.5 KB)

1

    
2
import com.jeta.forms.components.panel.FormPanel
3
import java.io.FileInputStream
4
import java.io.File
5
import javax.imageio.ImageIO
6
import javax.swing.AbstractButton
7
import javax.swing.JButton
8
import javax.swing.JComboBox
9
import javax.swing.JRadioButton
10
import javax.swing.JSpinner
11
import java.awt.event.ActionListener
12
import java.awt.event.MouseListener
13
import javax.swing.event.ChangeListener
14
import javax.swing.event.DocumentListener
15
import java.awt.event.ItemListener
16
import javax.swing.SwingUtilities
17
import java.lang.Runnable
18
import javax.swing.ImageIcon
19
import javax.swing.text.JTextComponent
20
import javax.swing.Timer
21

    
22

    
23
import inspect
24

    
25
from org.gvsig.tools.swing.api import ToolsSwingLocator
26
from org.gvsig.tools.task import TaskStatus
27
from org.gvsig.tools.observer import Observer
28
from org.gvsig.tools import ToolsLocator
29
import org.gvsig.tools.swing.api.Component
30

    
31
def getResource(*args):
32
  base = args[0]
33
  if os.path.isfile(base):
34
    base = os.path.dirname(base)
35
  x = [ base,]
36
  x.extend(args[1:])
37
  return os.path.join(*x)
38

    
39
class ListenerAdapter:
40
  def __init__(self,function,componentName=None):
41
    self.function = function
42
    if componentName == None:
43
      self.componentName = self.function.__name__
44
    else:
45
      self.componentName = componentName
46

    
47
class ActionListenerAdapter(ListenerAdapter, java.awt.event.ActionListener):
48
  def __init__(self,function,componentName=None):
49
    ListenerAdapter.__init__(self,function,componentName)
50
  def actionPerformed(self,*args):
51
    #print "ActionListenerAdapter %s %s" % (self.componentName, args[0])
52
    self.function(*args)
53

    
54
class ChangeListenerAdapter(ListenerAdapter, javax.swing.event.ChangeListener):
55
  def __init__(self,function, componentName=None):
56
    ListenerAdapter.__init__(self,function,componentName)
57
  def stateChanged(self,*args):
58
    #print "ChangeListenerAdapter %s %s" % (self.componentName, args[0])
59
    self.function(*args)
60

    
61
class DocumentListenerAdapter(ListenerAdapter, javax.swing.event.DocumentListener):
62
  def __init__(self,function, componentName=None):
63
    ListenerAdapter.__init__(self,function,componentName)
64
  def insertUpdate(self,*args):
65
    #print "DocumentListenerAdapter %s" % self.componentName
66
    self.function(*args)
67
  def removeUpdate(self,*args):
68
    #print "DocumentListenerAdapter %s" % self.componentName
69
    self.function(*args)
70
  def changedUpdate(self,*args):
71
    #print "DocumentListenerAdapter %s" % self.componentName
72
    self.function(*args)
73

    
74
class ItemListenerAdapter(ListenerAdapter, java.awt.event.ItemListener):
75
  def __init__(self,function, componentName=None):
76
    ListenerAdapter.__init__(self,function,componentName)
77
  def itemStateChanged(self,*args):
78
    #print "ItemListenerAdapter %s %s" % (self.componentName, args[0])
79
    self.function(*args)
80

    
81
class FocusGainedListenerAdapter(ListenerAdapter, java.awt.event.FocusListener):
82
  def __init__(self,function, componentName=None):
83
    ListenerAdapter.__init__(self,function,componentName)
84
  def focusGained(self,*args):
85
    #print "focusGained %s %s" % (self.componentName, args[0])
86
    self.function(*args)
87
  def focusLost(self,*args):
88
    #print "focusLost %s %s" % (self.componentName, args[0])
89
    pass
90

    
91
class FocusLostListenerAdapter(ListenerAdapter, java.awt.event.FocusListener):
92
  def __init__(self,function, componentName=None):
93
    ListenerAdapter.__init__(self,function,componentName)
94
  def focusGained(self,*args):
95
    pass
96
  def focusLost(self,*args):
97
    self.function(*args)
98

    
99
class MouseListenerAdapter(ListenerAdapter, java.awt.event.MouseListener):
100
  def __init__(self,function, componentName=None):
101
    ListenerAdapter.__init__(self,function,componentName)
102
  def mouseClicked(self,*args):
103
    self.function(*args)
104
  def mouseEntered(self,*args):
105
    self.function(*args)
106
  def mouseExited(self,*args):
107
    self.function(*args)
108
  def mousePressed(self,*args):
109
    self.function(*args)
110
  def mouseReleased(self,*args):
111
    self.function(*args)
112

    
113

    
114
class FunctionRunnable(java.lang.Runnable):
115
  def __init__(self,fn, *args):
116
    self.__fn = fn
117
    self.__args = args
118

    
119
  def run(self):
120
    self.__fn(*self.__args)
121

    
122
  def __call__(self):
123
    self.__fn(*self.__args)
124

    
125

    
126
class ProgressBarWithTaskStatus(Observer):
127
  def __init__(self, name, progressBar, labelProgress=None):
128
    self.taskStatus = ToolsLocator.getTaskStatusManager().createDefaultSimpleTaskStatus(name)
129
    self.progressBar = progressBar
130
    self.labelProgress = labelProgress
131
    self.progressBar.setMinimum(0)
132
    self.progressBar.setMaximum(100)
133
    self.progressBar.setValue(0)
134
    self.taskStatus.addObserver(self)
135

    
136
  def getTaskStatus(self):
137
    return self.taskStatus
138

    
139
  def update(self, taskStatus, notification):
140
    if not javax.swing.SwingUtilities.isEventDispatchThread():
141
      javax.swing.SwingUtilities.invokeLater(
142
        FunctionRunnable(
143
          self.updateGUI,
144
          taskStatus.isRunning(),
145
          taskStatus.getCompleted(),
146
          taskStatus.getLabel()
147
        )
148
      )
149
    else:
150
      self.updateGUI(
151
        taskStatus.isRunning(),
152
        taskStatus.getCompleted(),
153
        taskStatus.getLabel()
154
      )
155

    
156
  def updateGUI(self, isRunning, current, label):
157
    if not isRunning:
158
        self.progressBar.setIndeterminate(False);
159
        self.progressBar.setValue(100);
160
        self.labelProgress.setText("")
161
        return
162
    self.progressBar.setIndeterminate(self.taskStatus.isIndeterminate())
163
    self.progressBar.setValue(current)
164
    if self.labelProgress != None:
165
      self.labelProgress.setText(label)
166

    
167
def load_image(afile):
168
  if not isinstance(afile,java.io.File):
169
    afile = java.io.File(str(afile))
170
  return javax.imageio.ImageIO.read(afile)
171

    
172
def load_icon(afile):
173
  if not isinstance(afile,java.io.File):
174
    afile = java.io.File(str(afile))
175
  return javax.swing.ImageIcon(javax.imageio.ImageIO.read(afile))
176

    
177

    
178
class FormComponent(object):
179

    
180
  def load_image(self, afile):
181
    return load_image(afile)
182

    
183
  def load_icon(self, afile):
184
    return load_icon(afile)
185

    
186
  def autobind(self):
187
    members = inspect.getmembers(self)
188
    for methodName, method in members:
189
      if methodName.endswith("_click"):
190
        name = methodName[0:-len("_click")]
191
        component = getattr(self,name, None)
192
        if isinstance(component, javax.swing.JComboBox):
193
          component.addActionListener(ActionListenerAdapter(method,methodName))
194
        elif isinstance(component, javax.swing.AbstractButton):
195
          component.addActionListener(ActionListenerAdapter(method,methodName))
196
  
197
      elif methodName.endswith("_change"):
198
        name = methodName[0:-len("_change")]
199
        component = getattr(self,name, None)
200
        if isinstance(component, javax.swing.JComboBox):
201
          component.addItemListener(ItemListenerAdapter(method,methodName))
202
        if isinstance(component, javax.swing.JRadioButton):
203
          component.addItemListener(ItemListenerAdapter(method,methodName))
204
        elif isinstance(component, javax.swing.JSpinner):
205
          component.addChangeListener(ChangeListenerAdapter(method,methodName))
206
        elif isinstance(component, javax.swing.text.JTextComponent):
207
          component.getDocument().addDocumentListener(DocumentListenerAdapter(method,methodName))
208
        elif isinstance(component, javax.swing.AbstractButton):
209
          component.addActionListener(ActionListenerAdapter(method,methodName))
210
  
211
      elif methodName.endswith("_perform"):
212
        name = methodName[0:-len("_perform")]
213
        component = getattr(self,name, None)
214
        if isinstance(component, javax.swing.Timer):
215
          component.addActionListener(ActionListenerAdapter(method,methodName)) 
216

    
217
      elif methodName.endswith("_focusGained"):
218
        name = methodName[0:-len("_focusGained")]
219
        component = getattr(self,name, None)
220
        if component!=None:
221
          addFocusListener = getattr(component,"addFocusListener",None)
222
          if addFocusListener !=None:
223
            addFocusListener(FocusGainedListenerAdapter(method,methodName)) 
224
          
225
      elif methodName.endswith("_focusLost"):
226
        name = methodName[0:-len("_focusLost")]
227
        component = getattr(self,name, None)
228
        if component!=None:
229
          addFocusListener = getattr(component,"addFocusListener",None)
230
          if addFocusListener !=None:
231
            addFocusListener(FocusLostListenerAdapter(method,methodName)) 
232

    
233
      elif methodName.endswith("_mouseClick"):
234
        name = methodName[0:-len("_mouseClick")]
235
        component = getattr(self,name, None)
236
        if component!=None:
237
          addMouseListener = getattr(component,"addMouseListener",None)
238
          if addMouseListener !=None:
239
            addMouseListener(MouseListenerAdapter(method,methodName)) 
240
      
241
class FormPanel(FormComponent):
242

    
243
  def __init__(self,formfile=None):
244
    FormComponent.__init__(self)
245
    self._panel = None
246
    if formfile!=None:
247
      self.load(formfile)
248

    
249
  def getRootPane(self):
250
    return self.asJComponent().getParent().getParent()
251
    
252
  def getPreferredSize(self):
253
    return self.asJComponent().getPreferredSize()
254
    
255
  def setPreferredSize(self, withOrDimension, height=None):
256
    if height == None:
257
      self.asJComponent().setPreferredSize(withOrDimension)
258
    else:
259
      self.asJComponent().setPreferredSize(java.awt.Dimension(withOrDimension,height))
260
      
261
  def getPanel(self):
262
    return self.asJComponent()
263

    
264
  def asJComponent(self):
265
    return self._panel
266
  
267
  def hide(self):
268
    self._panel.setVisible(False)
269

    
270
  def __getattr__(self, name):
271
    if name in ("__members__", "__methods__"):
272
      raise AttributeError("FormPanel",name)
273
    attr = self._panel.getComponentByName(name)
274
    if attr == None:
275
      raise AttributeError("FormPanel",name)
276
    return attr
277

    
278
  def load(self, formfile):
279
    if not isinstance(formfile,java.io.File):
280
      if getattr(formfile,"__getitem__", None)!=None:
281
        formfile = getResource(*formfile)
282
      formfile = java.io.File(str(formfile))
283
    #print "FormPanel.load(%s)" % formfile
284
    self._panel = com.jeta.forms.components.panel.FormPanel( java.io.FileInputStream(formfile) )
285
    #print "FormPanel.load: _panel=%s" % self._panel
286
    self.autobind()
287

    
288
  def btnClose_click(self,*args):
289
    self.hide()
290

    
291
  def showWindow(self, title):
292
    self._panel.setVisible(True)
293
    windowManager = ToolsSwingLocator.getWindowManager()
294
    windowManager.showWindow(self.asJComponent(),title, windowManager.MODE.WINDOW)
295

    
296
  def showTool(self, title):
297
    self._panel.setVisible(True)
298
    windowManager = ToolsSwingLocator.getWindowManager()
299
    windowManager.showWindow(self.asJComponent(),title, windowManager.MODE.TOOL)
300

    
301
  def showDialog(self, title):
302
    self._panel.setVisible(True)
303
    windowManager = ToolsSwingLocator.getWindowManager()
304
    windowManager.showWindow(self._panel,title, windowManager.MODE.DIALOG)
305