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 @ 561

History | View | Annotate | Download (3.9 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.JButton
7
import javax.swing.JComboBox
8
import java.awt.event.ActionListener
9
import javax.swing.SwingUtilities
10
import java.lang.Runnable
11
import javax.swing.ImageIcon
12

    
13

    
14
import inspect
15

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

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

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

    
32
  def run(self):
33
    self.__fn(*self.__args)
34

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

    
38

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

    
49
  def getTaskStatus(self):
50
    return self.taskStatus
51

    
52
  def update(self, taskStatus, notification):
53
    if not javax.swing.SwingUtilities.isEventDispatchThread():
54
      javax.swing.SwingUtilities.invokeLater(
55
        FunctionRunnable(
56
          self.updateGUI,
57
          taskStatus.isRunning(),
58
          taskStatus.getCompleted(),
59
          taskStatus.getLabel()
60
        )
61
      )
62
    else:
63
      self.updateGUI(
64
        taskStatus.isRunning(),
65
        taskStatus.getCompleted(),
66
        taskStatus.getLabel()
67
      )
68

    
69
  def updateGUI(self, isRunning, current, label):
70
    if not isRunning:
71
        self.progressBar.setIndeterminate(False);
72
        self.progressBar.setValue(100);
73
        self.labelProgress.setText("")
74
        return
75
    self.progressBar.setIndeterminate(self.taskStatus.isIndeterminate())
76
    self.progressBar.setValue(current)
77
    if self.labelProgress != None:
78
      self.labelProgress.setText(label)
79

    
80
class FormPanel(object):
81

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

    
87
  def getPanel(self):
88
    return self._panel
89

    
90
  def hide(self):
91
    self._panel.setVisible(False)
92

    
93
  def __getattr__(self, name):
94
    if name in ("__members__", "__methods__"):
95
      raise AttributeError("FormPanel",name)
96
    attr = self._panel.getComponentByName(name)
97
    if attr == None:
98
      raise AttributeError("FormPanel",name)
99
    return attr
100

    
101

    
102
  def load(self, formfile):
103
    self._panel = com.jeta.forms.components.panel.FormPanel( java.io.FileInputStream(formfile) )
104
    members = inspect.getmembers(self)
105
    for name, value in members:
106
      if name.endswith("_click"):
107
        name = name[0:-len("_click")]
108
        component = getattr(self,name)
109
        if isinstance(component, javax.swing.JButton):
110
          component.actionPerformed.append(value)
111
        elif isinstance(component, javax.swing.JComboBox):
112
          component.addActionListener(ComboBoxActionListener(value))
113
        else:
114
          print component
115

    
116
  def load_image(self, afile):
117
    if not isinstance(afile,java.io.File):
118
      afile = java.io.File(str(afile))
119
    return javax.imageio.ImageIO.read(afile)
120

    
121
  def load_icon(self, afile):
122
    if not isinstance(afile,java.io.File):
123
      afile = java.io.File(str(afile))
124
    return javax.swing.ImageIcon(javax.imageio.ImageIO.read(afile))
125

    
126
  def showWindow(self, title):
127
    windowManager = ToolsSwingLocator.getWindowManager()
128
    windowManager.showWindow(self._panel,title, windowManager.MODE.WINDOW)
129

    
130
  def showTool(self, title):
131
    windowManager = ToolsSwingLocator.getWindowManager()
132
    windowManager.showWindow(self._panel,title, windowManager.MODE.TOOL)
133