source: java/main/src/main/java/com/framsticks/gui/controls/ProcedureControl.java @ 193

Last change on this file since 193 was 193, checked in by Maciej Komosinski, 10 years ago

Set svn:eol-style native for all textual files

  • Property svn:eol-style set to native
File size: 2.8 KB
RevLine 
[84]1package com.framsticks.gui.controls;
2
[98]3import com.framsticks.gui.Frame;
[84]4import com.framsticks.gui.Gui;
5import com.framsticks.params.Param;
6import com.framsticks.params.types.ProcedureParam;
[105]7import com.framsticks.structure.Path;
8import com.framsticks.util.dispatching.Future;
[84]9
10import javax.swing.*;
[90]11
[100]12import org.apache.logging.log4j.Logger;
13import org.apache.logging.log4j.LogManager;
[90]14
[84]15import java.awt.event.ActionEvent;
16import java.awt.event.ActionListener;
[101]17import java.util.HashMap;
[90]18import java.util.LinkedList;
19import java.util.List;
[84]20import java.util.Map;
21
22@SuppressWarnings("serial")
[101]23public class ProcedureControl extends HistoryControl implements ControlOwner {
[84]24
[100]25        private static final Logger log = LogManager.getLogger(ProcedureControl.class);
[90]26
[101]27        protected final JPanel argumentsPanel;
[84]28
[101]29        final protected Map<String, ValueControl> components = new HashMap<>();
[84]30
31        public ProcedureControl(ProcedureParam procedureParam) {
32                super(procedureParam);
33
[100]34
[101]35                mainButton.setText("Call");
36                mainButton.setName("call");
[84]37
38
[101]39                argumentsPanel = new JPanel();
40                argumentsPanel.setName("arguments");
[84]41
[101]42                Gui.fillWithControls(this, argumentsPanel, procedureParam.getArgumentsType(), components, ValueControl.class);
43
[84]44                if (components.size() != procedureParam.getArgumentsType().size()) {
[101]45                        mainButton.setEnabled(false);
[84]46                }
47
[101]48                mainButton.addActionListener(new ActionListener() {
[84]49                        @Override
50                        public void actionPerformed(ActionEvent e) {
51
[100]52                                final Path path = getCurrentPath();
[90]53
54                                final List<Object> arguments = new LinkedList<Object>();
55                                for (Param arg : getParam().getArgumentsType()) {
[101]56                                        Object value = components.get(arg.getId()).getCurrentValue();
[97]57                                        arguments.add(value);
[100]58                                        log.debug("argument {}: {}", arg, value);
[84]59                                }
[102]60                                callProcedure(path, getParam(), arguments.toArray(), getFrame());
[90]61
[84]62                        }
63                });
64
[101]65                updateFoldState();
66                Gui.setupTitledControl(this, argumentsPanel, controlRow, resultsScrollPane);
67
[84]68        }
69
[101]70
[102]71        public static void callProcedure(final Path path, final ProcedureParam param, Object[] arguments, Frame frame) {
[100]72
73                assert path.getTree().isActive();
74
[105]75                path.getTree().call(path, param, arguments, Object.class, new Future<Object>(frame) {
[100]76
77                        @Override
78                        public void result(Object result) {
79
80                        }
81                });
82        }
83
[90]84        @Override
[98]85        public ProcedureParam getParam() {
86                return (ProcedureParam) param;
[90]87        }
88
89        @Override
[98]90        protected void updateEnabled(boolean enabled) {
[101]91                mainButton.setEnabled(enabled);
[98]92                for (ValueControl vc : components.values()) {
93                        vc.setUserEnabled(enabled);
94                }
[90]95        }
96
[98]97        @Override
98        public Frame getFrame() {
99                return owner.getFrame();
100        }
101
102        @Override
[100]103        public Path getCurrentPath() {
104                return owner.getCurrentPath();
[98]105        }
106
[101]107        @Override
108        public boolean onValueChange(ValueControl control, Object newValue) {
109                return true;
110        }
111
112        @Override
113        protected void refreshTable() {
114
115        }
116
117        @Override
118        protected void clearTable() {
119
120        }
121
[84]122}
Note: See TracBrowser for help on using the repository browser.