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 / scripts / libs / formpanel.py @ 468

History | View | Annotate | Download (3.54 KB)

1

    
2
import com.jeta.forms.components.panel.FormPanel
3
import java.io.FileInputStream
4
import javax.imageio.ImageIO
5
import javax.swing.JButton
6
import javax.swing.JComboBox
7
import java.awt.event.ActionListener
8
import javax.swing.SwingUtilities
9
import java.lang.Runnable
10

    
11

    
12
import inspect
13

    
14
from org.gvsig.tools.swing.api import ToolsSwingLocator
15
from org.gvsig.tools.task import TaskStatus
16
from org.gvsig.tools.observer import Observer
17
from org.gvsig.tools import ToolsLocator
18

    
19
class ComboBoxActionListener(java.awt.event.ActionListener):
20
  def __init__(self,function):
21
    self.function = function
22
  def actionPerformed(self,*args):
23
    self.function(*args)
24

    
25
class FunctionRunnable(java.lang.Runnable):
26
  def __init__(self,fn, *args):
27
    self.__fn = fn
28
    self.__args = args
29

    
30
  def run(self):
31
    self.__fn(*self.__args)
32

    
33
  def __call__(self):
34
    self.__fn(*self.__args)
35
  
36

    
37
class ProgressBarWithTaskStatus(Observer):
38
  def __init__(self, name, progressBar, labelProgress=None):
39
    self.taskStatus = ToolsLocator.getTaskStatusManager().createDefaultSimpleTaskStatus(name)
40
    self.progressBar = progressBar
41
    self.labelProgress = labelProgress
42
    self.progressBar.setMinimum(0)
43
    self.progressBar.setMaximum(100)
44
    self.progressBar.setValue(0)
45
    self.taskStatus.addObserver(self)
46

    
47
  def getTaskStatus(self):
48
    return self.taskStatus
49
    
50
  def update(self, taskStatus, notification):
51
    if not javax.swing.SwingUtilities.isEventDispatchThread():
52
      javax.swing.SwingUtilities.invokeLater(
53
        FunctionRunnable(
54
          self.updateGUI,
55
          taskStatus.isRunning(),
56
          taskStatus.getCompleted(),
57
          taskStatus.getLabel()
58
        )
59
      )
60
    else:
61
      self.updateGUI(
62
        taskStatus.isRunning(),
63
        taskStatus.getCompleted(),
64
        taskStatus.getLabel()
65
      )
66
      
67
  def updateGUI(self, isRunning, current, label):
68
    if not isRunning:
69
        self.progressBar.setIndeterminate(False);
70
        self.progressBar.setValue(100);
71
        self.labelProgress.setText("")
72
        return
73
    self.progressBar.setIndeterminate(self.taskStatus.isIndeterminate())
74
    self.progressBar.setValue(current)
75
    if self.labelProgress != None:
76
      self.labelProgress.setText(label)
77
  
78
class FormPanel(object):
79

    
80
  def __init__(self,formfile=None):
81
    self._panel = None
82
    if formfile!=None:
83
      self.load(formfile)
84

    
85
  def getPanel(self):
86
    return self._panel
87

    
88
  def hide(self):
89
    self._panel.setVisible(False)
90
      
91
  def __getattr__(self, name):
92
    attr = self._panel.getComponentByName(name)
93
    if attr == None:
94
      raise AttributeError("FormPanel",name)
95
    return attr
96
    
97
  def load(self, formfile):
98
    self._panel = com.jeta.forms.components.panel.FormPanel( java.io.FileInputStream(formfile) )
99
    members = inspect.getmembers(self)
100
    for name, value in members:
101
      if name.endswith("_click"):
102
        name = name[0:-len("_click")]
103
        component = getattr(self,name)
104
        if isinstance(component, javax.swing.JButton):
105
          component.actionPerformed.append(value)
106
        elif isinstance(component, javax.swing.JComboBox):
107
          component.addActionListener(ComboBoxActionListener(value))
108
        else:
109
          print component
110
          
111
  def load_image(self, afile):
112
    return javax.imageio.ImageIO.read(afile)
113

    
114
  def showWindow(self, title):  
115
    windowManager = ToolsSwingLocator.getWindowManager()
116
    windowManager.showWindow(self._panel,title, windowManager.MODE.WINDOW)
117

    
118
  def showTool(self, title):  
119
    windowManager = ToolsSwingLocator.getWindowManager()
120
    windowManager.showWindow(self._panel,title, windowManager.MODE.TOOL)
121