Advertisement
Guest User

Untitled

a guest
Jan 19th, 2020
116
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 23.25 KB | None | 0 0
  1. package hr.fer.tel.ftm.gui;
  2.  
  3. import java.awt.BorderLayout;
  4. import java.awt.Color;
  5. import java.awt.Dimension;
  6. import java.awt.EventQueue;
  7. import java.awt.FlowLayout;
  8.  
  9. import javax.swing.JFrame;
  10. import javax.swing.JPanel;
  11. import javax.swing.JScrollPane;
  12. import javax.swing.border.EmptyBorder;
  13. import javax.swing.GroupLayout;
  14. import javax.swing.GroupLayout.Alignment;
  15. import javax.swing.border.EtchedBorder;
  16. import javax.swing.LayoutStyle.ComponentPlacement;
  17. import javax.swing.ScrollPaneConstants;
  18. import javax.swing.JLabel;
  19. import javax.swing.JComboBox;
  20. import javax.swing.JFileChooser;
  21. import javax.imageio.ImageIO;
  22. import javax.swing.BorderFactory;
  23. import javax.swing.BoxLayout;
  24. import javax.swing.DefaultComboBoxModel;
  25. import javax.swing.JButton;
  26. import java.awt.event.ActionListener;
  27. import java.util.ArrayList;
  28. import java.util.List;
  29. import java.util.Timer;
  30. import java.util.TimerTask;
  31. import java.awt.event.ActionEvent;
  32. import java.awt.Font;
  33. import java.awt.Image;
  34. import java.awt.SystemColor;
  35.  
  36. import javax.swing.border.MatteBorder;
  37.  
  38. import com.sun.glass.ui.Screen;
  39.  
  40. import hr.fer.tel.ftm.komponente.AddDropMux;
  41. import hr.fer.tel.ftm.komponente.Pojacalo;
  42. import hr.fer.tel.ftm.komponente.Spreznik;
  43. import hr.fer.tel.ftm.komponente.Raspreznik;
  44. import hr.fer.tel.ftm.komponente.DeMux;
  45. import hr.fer.tel.ftm.komponente.ElectricalComponent;
  46. import hr.fer.tel.ftm.komponente.Vlakno;
  47. import hr.fer.tel.ftm.komponente.Filter;
  48. import hr.fer.tel.ftm.komponente.Mux;
  49. import hr.fer.tel.ftm.komponente.Prijemnik;
  50. import hr.fer.tel.ftm.komponente.Signal;
  51. import hr.fer.tel.ftm.komponente.Prospojnik;
  52. import hr.fer.tel.ftm.komponente.Predajnik;
  53.  
  54. import javax.swing.SwingConstants;
  55. import javax.swing.SwingUtilities;
  56. import javax.swing.ImageIcon;
  57. import java.awt.event.MouseAdapter;
  58. import java.awt.event.MouseEvent;
  59. import java.io.File;
  60. import java.io.IOException;
  61.  
  62. public class FtmGui extends JFrame {
  63. private static final long serialVersionUID = 36949826489632L;
  64.  
  65. public JFileChooser fc = new JFileChooser();
  66. public static FtmGui frame;
  67. public boolean isFullScreen = false;
  68. public boolean isHeightChanged = false;
  69.  
  70. private JPanel contentPane;
  71. public static JPanel panelCommands;
  72. public static JPanel panelPlay;
  73. static ImprovedPanel panelSchema;
  74. private JPanel panel;
  75. public static JPanel simulationPanel;
  76. private JLabel lblComponent;
  77. private JButton btnAddComponent;
  78. private JButton btnSimulate;
  79. // private JButton btnCalculateLink;
  80. public static JLabel simulationFeedbackLabel;
  81. public static JLabel simulationFeedbackText;
  82.  
  83. private DefaultComboBoxModel<ElectricalComponent> comboBoxComponentModel;
  84. private JComboBox<ElectricalComponent> comboBoxComponent;
  85.  
  86. static State state;
  87. public static List<ConnectedGuiElements> connectedElementsList = new ArrayList<ConnectedGuiElements>();
  88.  
  89. private Timer timer = new Timer();
  90. private JButton btnFullScreen;
  91.  
  92. class PaintCurrentState extends TimerTask {
  93. public void run() {
  94. panelSchema.paintFiber(panelSchema.getGraphics());
  95. }
  96. }
  97.  
  98. /**
  99. * Create the frame.
  100. * @throws IOException
  101. */
  102. public FtmGui() throws IOException {
  103. initComponents();
  104. initEvents();
  105. state = new State();
  106. timer.schedule(new PaintCurrentState(), 0, 100);
  107. }
  108.  
  109. private void initComponents() throws IOException {
  110. // Main initialization
  111. setTitle("FTM - Simulator optičkih komponenti");
  112. setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
  113. setExtendedState(MAXIMIZED_BOTH);
  114. setBounds(0, 0, 1366, 800);
  115. contentPane = new JPanel();
  116. contentPane.setBackground(new Color(255, 255, 255));
  117. contentPane.setBorder(new EmptyBorder(5, 5, 5, 5));
  118. setContentPane(contentPane);
  119.  
  120. // Initialize panelCommands
  121. panelCommands = new JPanel();
  122. panelCommands.setBackground(Color.GRAY);
  123. panelCommands.setBorder(new EtchedBorder(EtchedBorder.LOWERED, null, null));
  124.  
  125. panelPlay = new JPanel();
  126. panelPlay.setBorder(new EtchedBorder(EtchedBorder.LOWERED, null, null));
  127.  
  128.  
  129.  
  130. // Initialize panelCommands components
  131. btnAddComponent = new JButton("+");
  132. btnAddComponent.setFont(new Font("Tahoma", Font.BOLD, 30));
  133. btnSimulate = new JButton();
  134. btnSimulate.setFont(new Font("Tahoma", Font.BOLD, 12));
  135.  
  136. comboBoxComponent = new JComboBox<ElectricalComponent>();
  137. comboBoxComponent.setFont(new Font("Tahoma", Font.BOLD, 20));
  138. comboBoxComponent.setBackground(new Color(255, 255, 255));
  139. comboBoxComponentModel = new DefaultComboBoxModel<>();
  140. comboBoxComponentModel.addElement(new AddDropMux());
  141. comboBoxComponentModel.addElement(new DeMux());
  142. comboBoxComponentModel.addElement(new Filter());
  143. comboBoxComponentModel.addElement(new Mux());
  144. comboBoxComponentModel.addElement(new Pojacalo());
  145. comboBoxComponentModel.addElement(new Predajnik());
  146. comboBoxComponentModel.addElement(new Prijemnik());
  147. comboBoxComponentModel.addElement(new Prospojnik());
  148. comboBoxComponentModel.addElement(new Raspreznik());
  149. comboBoxComponentModel.addElement(new Spreznik());
  150. comboBoxComponent.setModel(comboBoxComponentModel);
  151.  
  152. // Initialize panelSchema
  153. panelSchema = new ImprovedPanel();
  154. panelSchema.setBackground(new Color(235, 235, 235));
  155. panelSchema.setBorder(new EtchedBorder(EtchedBorder.LOWERED, null, null));
  156. panelSchema.setLayout(null);
  157.  
  158.  
  159. // Feedback panel
  160. panel = new JPanel();
  161. panel.setToolTipText("Ako je validacija uspje\u0161na, nema unutarnjih programskih gre\u0161aka.");
  162. panel.setBorder(new MatteBorder(2, 2, 2, 2, (Color) new Color(0, 51, 153)));
  163. panel.setBackground(SystemColor.info);
  164. panel.setLayout(null);
  165. simulationFeedbackLabel = new JLabel("Rezultat validacije");
  166. simulationFeedbackLabel.setForeground(Color.BLACK);
  167. simulationFeedbackLabel.setHorizontalAlignment(SwingConstants.CENTER);
  168. simulationFeedbackLabel.setBounds(10, 9, 184, 19);
  169. panel.add(simulationFeedbackLabel);
  170. simulationFeedbackLabel.setBackground(Color.WHITE);
  171. simulationFeedbackLabel.setFont(new Font("Cambria Math", Font.BOLD | Font.ITALIC, 16));
  172.  
  173. panelSchema.setPreferredSize(new Dimension(1920,1080-300));
  174. panelPlay.setPreferredSize(new Dimension(1920, 100));
  175. panelPlay.setLayout(new BorderLayout());
  176. panelCommands.setLayout(new BorderLayout());
  177.  
  178.  
  179. contentPane.add(panelCommands);
  180. contentPane.add(panelSchema);
  181. contentPane.add(panelPlay);
  182. JLabel lblOptions = new JLabel("Opcije:");
  183. lblOptions.setForeground(Color.WHITE);
  184. lblOptions.setFont(new Font("Tahoma", Font.BOLD, 12));
  185.  
  186. JButton btnZoomIn = new JButton("Zoom In");
  187. btnZoomIn.addActionListener(new ActionListener() {
  188. public void actionPerformed(ActionEvent e) {
  189. panelSchema.setSize(panelSchema.getSize().width - 50, panelSchema.getSize().height - 50);
  190. }
  191. });
  192. btnZoomIn.setFont(new Font("Tahoma", Font.PLAIN, 12));
  193.  
  194. JButton btnZoomOut = new JButton("Zoom Out");
  195. btnZoomOut.addActionListener(new ActionListener() {
  196. public void actionPerformed(ActionEvent e) {
  197. panelSchema.setSize(panelSchema.getSize().width + 50, panelSchema.getSize().height + 50);
  198. }
  199. });
  200. btnZoomOut.setFont(new Font("Tahoma", Font.PLAIN, 12));
  201.  
  202. JButton btnImport = new JButton("Import");
  203. btnImport.addActionListener(new ActionListener() {
  204. public void actionPerformed(ActionEvent e) {
  205. FileChooserDemo fcd = new FileChooserDemo();
  206. fc.setCurrentDirectory(new File(System.getProperty("user.home")));
  207. int result = fc.showOpenDialog(fcd);
  208. if (result == JFileChooser.APPROVE_OPTION) {
  209. File selectedFile = fc.getSelectedFile();
  210. System.out.println("Selected file: " + selectedFile.getAbsolutePath());
  211. }
  212. }
  213. });
  214. btnImport.setFont(new Font("Tahoma", Font.PLAIN, 12));
  215.  
  216. JButton btnExport = new JButton("Export");
  217. btnExport.addActionListener(new ActionListener() {
  218. public void actionPerformed(ActionEvent arg0) {
  219. FileChooserDemo fcd = new FileChooserDemo();
  220. fc.setCurrentDirectory(new File(System.getProperty("user.home")));
  221. int result = fc.showOpenDialog(fcd);
  222. if (result == JFileChooser.APPROVE_OPTION) {
  223. File selectedFile = fc.getSelectedFile();
  224. System.out.println("Selected file: " + selectedFile.getAbsolutePath());
  225. }
  226. }
  227. });
  228. btnExport.setFont(new Font("Tahoma", Font.PLAIN, 12));
  229.  
  230. JButton btnHelp = new JButton();
  231. btnHelp.addActionListener(new ActionListener() {
  232. public void actionPerformed(ActionEvent e) {
  233. createHelpFrame();
  234. }
  235. });
  236. btnHelp.setIcon(null);
  237. btnHelp.setSelectedIcon(null);
  238. btnHelp.setFont(new Font("Tahoma", Font.PLAIN, 12));
  239.  
  240.  
  241.  
  242.  
  243. btnFullScreen = new JButton();
  244. btnFullScreen.setIcon(new ImageIcon(FtmGui.class.getResource("/slike/fullscreen.png")));
  245. btnFullScreen.setFont(new Font("Tahoma", Font.PLAIN, 12));
  246. btnFullScreen.addActionListener(new ActionListener() {
  247. public void actionPerformed(ActionEvent arg0) {
  248. if (!isFullScreen) {
  249. isFullScreen = true;
  250. frame.dispose();
  251. frame.setUndecorated(true);
  252. frame.setExtendedState(MAXIMIZED_BOTH);
  253. frame.setVisible(true);
  254. panelSchema.setPreferredSize(new Dimension(1920, 1080-220));
  255. btnFullScreen.setIcon(new ImageIcon(FtmGui.class.getResource("/slike/windowed.png")));
  256.  
  257. } else if (isFullScreen) {
  258. isFullScreen = false;
  259. frame.dispose();
  260. frame.setUndecorated(false);
  261. frame.setExtendedState(MAXIMIZED_BOTH);
  262. frame.setVisible(true);
  263. panelSchema.setPreferredSize(new Dimension(1920, 1080-300));
  264. btnFullScreen.setIcon(new ImageIcon(FtmGui.class.getResource("/slike/fullscreen.png")));
  265. }
  266. }
  267. });
  268.  
  269. simulationPanel = new JPanel();
  270. simulationPanel.setLayout(null);
  271. simulationPanel.setToolTipText("Ako je simulacija uspješna, nema grešaka u optièkoj mreži.");
  272.  
  273. simulationPanel.setPreferredSize(new Dimension(76,76));
  274. panel.setPreferredSize(new Dimension(30,30));
  275.  
  276. simulationFeedbackText = new JLabel();
  277. simulationFeedbackText.setHorizontalAlignment(SwingConstants.CENTER);
  278. simulationFeedbackText.setFont(new Font("Cambria Math", Font.BOLD | Font.ITALIC, 16));
  279. simulationFeedbackText.setBackground(Color.WHITE);
  280. simulationFeedbackText.setBounds(10, 9, 184, 19);
  281. simulationPanel.add(simulationFeedbackText);
  282.  
  283.  
  284.  
  285. panelCommands.setPreferredSize(new Dimension(1920, 100));
  286.  
  287. comboBoxComponent.setPreferredSize(new Dimension(60, 60));
  288. btnAddComponent.setPreferredSize(new Dimension(60, 60));
  289.  
  290. btnAddComponent.setPreferredSize(new Dimension(74, 74));
  291. btnHelp.setIcon(new ImageIcon(FtmGui.class.getResource("/slike/information.png")));
  292. btnSimulate.setIcon(new ImageIcon(FtmGui.class.getResource("/slike/music-and-multimedia.png")));
  293.  
  294.  
  295.  
  296. JPanel panelaRight = new JPanel();
  297. panelaRight.setLayout(new BorderLayout());
  298. btnHelp.setOpaque(false);
  299. btnHelp.setContentAreaFilled(false);
  300. btnHelp.setBorderPainted(false);
  301. btnAddComponent.setOpaque(false);
  302. btnAddComponent.setContentAreaFilled(false);
  303. btnAddComponent.setBorderPainted(false);
  304. btnSimulate.setOpaque(false);
  305. btnSimulate.setContentAreaFilled(false);
  306. btnSimulate.setBorderPainted(false);
  307. btnFullScreen.setOpaque(false);
  308. btnFullScreen.setContentAreaFilled(false);
  309. btnFullScreen.setBorderPainted(false);
  310. panelaRight.add(btnHelp, BorderLayout.LINE_END);
  311.  
  312. panelCommands.add(panelaRight,BorderLayout.LINE_END);
  313.  
  314.  
  315. JPanel panelaLeft = new JPanel();
  316. panelaLeft.setLayout(new BorderLayout());
  317. panelaLeft.add(comboBoxComponent);
  318. panelaLeft.add(btnAddComponent, BorderLayout.LINE_END);
  319. panelCommands.add(panelaLeft,BorderLayout.LINE_START);
  320. panelaLeft.setPreferredSize(new Dimension(500,100));
  321.  
  322. JPanel panelaLeftRight = new JPanel();
  323. panelaLeftRight.setLayout(new BorderLayout());
  324. panelaLeftRight.add(simulationPanel, BorderLayout.CENTER);
  325. panelCommands.add(panelaLeftRight);
  326.  
  327. panelPlay.add(btnSimulate,BorderLayout.LINE_START);
  328. panelPlay.add(btnFullScreen,BorderLayout.EAST);
  329.  
  330.  
  331.  
  332. }
  333.  
  334. protected void createHelpFrame() {
  335. EventQueue.invokeLater(new Runnable() {
  336. @Override
  337. public void run() {
  338.  
  339. JFrame frame = new JFrame("Upute za korištenje");
  340. JPanel panel = new JPanel();
  341. panel.setBackground(Color.WHITE);
  342. panel.setBorder(BorderFactory.createEmptyBorder(10, 0, 10, 0));
  343. panel.setLayout(new BoxLayout(panel, BoxLayout.PAGE_AXIS));
  344.  
  345. JLabel label = new JLabel();
  346. label.setAlignmentX(0.55f);
  347. label.setIcon(new ImageIcon(FtmGui.class.getResource("/slike/1.jpg")));
  348. panel.add(label);
  349.  
  350. label = new JLabel();
  351. label.setAlignmentX(0.85f);
  352. label.setIcon(new ImageIcon(FtmGui.class.getResource("/slike/2.jpg")));
  353. panel.add(label);
  354.  
  355. label = new JLabel();
  356. label.setAlignmentX(0.80f);
  357. label.setIcon(new ImageIcon(FtmGui.class.getResource("/slike/3.jpg")));
  358. panel.add(label);
  359.  
  360. label = new JLabel();
  361. label.setAlignmentX(0.95f);
  362. label.setIcon(new ImageIcon(FtmGui.class.getResource("/slike/4.jpg")));
  363. panel.add(label);
  364.  
  365. label = new JLabel();
  366. label.setAlignmentX(0.625f);
  367. label.setIcon(new ImageIcon(FtmGui.class.getResource("/slike/5.jpg")));
  368. panel.add(label);
  369.  
  370. label = new JLabel();
  371. label.setAlignmentX(0.725f);
  372. label.setIcon(new ImageIcon(FtmGui.class.getResource("/slike/6.jpg")));
  373. panel.add(label);
  374.  
  375. label = new JLabel();
  376. label.setAlignmentX(0.83f);
  377. label.setIcon(new ImageIcon(FtmGui.class.getResource("/slike/7.jpg")));
  378. panel.add(label);
  379.  
  380. label = new JLabel();
  381. label.setAlignmentX(0.725f);
  382. label.setIcon(new ImageIcon(FtmGui.class.getResource("/slike/8.jpg")));
  383. panel.add(label);
  384.  
  385. label = new JLabel();
  386. label.setAlignmentX(0.70f);
  387. label.setIcon(new ImageIcon(FtmGui.class.getResource("/slike/9.jpg")));
  388. panel.add(label);
  389.  
  390. JScrollPane scroller = new JScrollPane(panel);
  391. scroller.setVerticalScrollBarPolicy(ScrollPaneConstants.VERTICAL_SCROLLBAR_ALWAYS);
  392. scroller.setHorizontalScrollBarPolicy(ScrollPaneConstants.HORIZONTAL_SCROLLBAR_NEVER);
  393. scroller.setBounds(0, 0, 1366 - 115, 768 - 135);
  394.  
  395. JPanel contentPane = new JPanel(null);
  396. contentPane.setPreferredSize(new Dimension(1920, 1080));
  397. contentPane.add(scroller);
  398.  
  399. frame.setContentPane(contentPane);
  400. frame.pack();
  401. frame.setBounds(50, 50, 1366 - 100, 768 - 100);
  402. frame.setVisible(true);
  403. frame.setDefaultCloseOperation(JFrame.DISPOSE_ON_CLOSE);
  404. frame.setResizable(false);
  405. }
  406. });
  407. }
  408.  
  409. private void initEvents() {
  410.  
  411. // Add component to panelSchema
  412. btnAddComponent.addActionListener(new ActionListener() {
  413.  
  414. // When user press "Add Component"
  415. public void actionPerformed(ActionEvent arg0) {
  416.  
  417. ElectricalComponent selectedInstrumentType = (ElectricalComponent) comboBoxComponent.getSelectedItem();
  418.  
  419. // Make new gui component
  420. GuiElectricalComponent newComp = selectedInstrumentType.getGuiComponentInstance();
  421. newComp.setToolTipText("Pritisnite desni klik miša za unos parametara komponente.");
  422. // Add component to schema
  423. panelSchema.add(newComp);
  424.  
  425. newComp.addMouseListener(new MouseAdapter() {
  426. @Override
  427. public void mouseReleased(MouseEvent arg0) {
  428. if (SwingUtilities.isRightMouseButton(arg0)) {
  429.  
  430. String className = selectedInstrumentType.getClass().toString();
  431. int lastIndxDot = className.lastIndexOf('.');
  432. className = className.substring(lastIndxDot + 1, className.length());
  433.  
  434. if (!isHeightChanged) {
  435. isHeightChanged = true;
  436. switch (className) {
  437. case "AddDropMux":
  438. newComp.setSize(newComp.getWidth(), 181);
  439. break;
  440. case "DeMux":
  441. newComp.setSize(newComp.getWidth(), 141);
  442. break;
  443. case "Filter":
  444. newComp.setSize(newComp.getWidth(), 181);
  445. break;
  446. case "Mux":
  447. newComp.setSize(newComp.getWidth(), 141);
  448. break;
  449. case "Pojacalo":
  450. newComp.setSize(newComp.getWidth(), 221);
  451. break;
  452. case "Predajnik":
  453. newComp.setSize(newComp.getWidth(), 221);
  454. break;
  455. case "Prijemnik":
  456. newComp.setSize(newComp.getWidth(), 201);
  457. break;
  458. case "Prospojnik":
  459. newComp.setSize(newComp.getWidth(), 141);
  460. break;
  461. case "Raspreznik":
  462. newComp.setSize(newComp.getWidth(), 141);
  463. break;
  464. case "Spreznik":
  465. newComp.setSize(newComp.getWidth(), 141);
  466. break;
  467.  
  468. }
  469. } else if (isHeightChanged) {
  470. isHeightChanged = false;
  471. newComp.setSize(newComp.getWidth(), 100);
  472. }
  473. }
  474. }
  475. });
  476.  
  477. // Repaint GUI to display new component
  478. panelSchema.repaint();
  479. panelSchema.paintFiber(panelSchema.getGraphics());
  480. }
  481. });
  482.  
  483. // Simulate
  484. btnSimulate.addActionListener(new ActionListener() {
  485. public void actionPerformed(ActionEvent arg0) {
  486.  
  487. Timer simulationTimer = new Timer();
  488. Timer simulationTimer2 = new Timer();
  489.  
  490. defaultSimulationFeedback(simulationTimer);
  491. defaultSimulationFeedbackText(simulationTimer2);
  492.  
  493. setDefaltTextToComponents("Nije detektiran signal.");
  494.  
  495. if (!validateSchema()) {
  496. failedSimulationFeedback(simulationTimer);
  497. return;
  498. }
  499.  
  500. /*
  501. * Display received signal
  502. */
  503. for (ConnectedGuiElements connectedElements : connectedElementsList) {
  504.  
  505. boolean isLastComponentInChain = true;
  506.  
  507. // check if component is last in schema chain of connected
  508. // components
  509. for (ConnectedGuiElements subConnectedGuiElements : connectedElementsList) {
  510. if (connectedElements.getInComp().equals(subConnectedGuiElements.getOutComp())) {
  511. isLastComponentInChain = false;
  512. }
  513. }
  514.  
  515. // if component is last in chain call the receive signal
  516. // function
  517. if (isLastComponentInChain) {
  518. ArrayList<Signal> receivedSignalList = receiveSignal(connectedElements);
  519. connectedElements.getInComp().setTextInfoAboutSignal(receivedSignalList);
  520. }
  521. }
  522.  
  523. successfulSimulatioFeedback(simulationTimer);
  524.  
  525. }
  526. });
  527.  
  528. }
  529.  
  530. /*
  531. * Recursive function for link calculation
  532. */
  533. public static void calculateLink(ConnectedGuiElements connectedElements, double sensitivity) {
  534.  
  535. GuiElectricalComponent inComponent = connectedElements.getInComp();
  536.  
  537. GuiElectricalComponent outComponent = connectedElements.getOutComp();
  538.  
  539. GuiElectricalComponent connectingFiber = connectedElements.getConnectingFiber();
  540.  
  541. // inComponent
  542. double inComponentPowerBeforeLoss = inComponent.getInstrument().componentCalculateLink(sensitivity);
  543.  
  544. // Fiber
  545. double fiberPowerBeforeLoss = connectingFiber.getInstrument()
  546. .componentCalculateLink(inComponentPowerBeforeLoss);
  547.  
  548. // outComponentHandler
  549. outComponent.getInstrument().callNextComponentToCalculateLink(fiberPowerBeforeLoss, outComponent);
  550. }
  551.  
  552. /*
  553. * Recursive function for simulation
  554. */
  555. public static ArrayList<Signal> receiveSignal(ConnectedGuiElements connectedElements) {
  556.  
  557. GuiElectricalComponent inComponent = connectedElements.getInComp();
  558. int inComponentConnection = connectedElements.getInCompConnection();
  559.  
  560. GuiElectricalComponent outComponent = connectedElements.getOutComp();
  561. int outComponentConnection = connectedElements.getOutCompConnection();
  562.  
  563. GuiElectricalComponent connectingFiber = connectedElements.getConnectingFiber();
  564.  
  565. ArrayList<Signal> inputSignalList = new ArrayList<>();
  566. inputSignalList.add(new Signal(-1, new ArrayList<>()));
  567.  
  568. ArrayList<Signal> afterFiberSignalList = null;
  569. ArrayList<Signal> outputSignalList = null;
  570.  
  571. inputSignalList = outComponent.getInstrument().outComponentReceiveSignal(outComponent);
  572. outComponent.setTextInfoAboutSignal(inputSignalList);
  573.  
  574. afterFiberSignalList = connectingFiber.getInstrument().work(inputSignalList, -1, -1);
  575.  
  576. outputSignalList = inComponent.getInstrument().work(afterFiberSignalList, outComponentConnection,
  577. inComponentConnection);
  578.  
  579. return outputSignalList;
  580. }
  581.  
  582. /*
  583. * Run default simulate loading animation
  584. */
  585. public void defaultSimulationFeedback(Timer timer) {
  586.  
  587. String text = "...";
  588. simulationFeedbackLabel.setText("");
  589. simulationFeedbackLabel.setForeground(new Color(0, 0, 0));
  590. timer.schedule(new TimerTask() {
  591. @Override
  592. public void run() {
  593. if (simulationFeedbackLabel.getText().length() == text.length()) {
  594. return;
  595. }
  596. simulationFeedbackLabel.setText(text.substring(0, simulationFeedbackLabel.getText().length() + 1));
  597. }
  598. }, 0, 40);
  599. }
  600.  
  601. /*
  602. * Run default simulate loading animation
  603. */
  604. public void defaultSimulationFeedbackText(Timer timer) {
  605.  
  606. String text = "...";
  607. simulationFeedbackText.setText("");
  608. simulationFeedbackText.setForeground(new Color(0, 0, 0));
  609. timer.schedule(new TimerTask() {
  610. @Override
  611. public void run() {
  612. if (simulationFeedbackText.getText().length() == text.length()) {
  613. return;
  614. }
  615.  
  616. }
  617. }, 0, 40);
  618. }
  619.  
  620. /*
  621. * Failed simulation feedback
  622. */
  623. public void failedSimulationFeedback(Timer timer) {
  624.  
  625. timer.schedule(new TimerTask() {
  626. @Override
  627. public void run() {
  628. timer.cancel();
  629. simulationFeedbackLabel.setForeground(Color.RED);
  630. panel.setToolTipText("Došlo je do pogreške prilikom upisivanja parametara");
  631. simulationPanel.setForeground(Color.RED);
  632. simulationPanel.setToolTipText("Došlo je do pogreške prilikom upisivanja parametara");
  633. }
  634. }, 460);
  635. }
  636.  
  637. /*
  638. * Successful simulation feedback
  639. */
  640. public void successfulSimulatioFeedback(Timer timer) {
  641.  
  642. timer.schedule(new TimerTask() {
  643. @Override
  644. public void run() {
  645. timer.cancel();
  646. simulationFeedbackLabel.setForeground(new Color(10, 128, 20));
  647. panel.setToolTipText("Validacija je uspješna");
  648. if(panelSchema.getComponentCount() == 0) {
  649.  
  650. simulationPanel.setBackground(Color.RED);
  651. simulationPanel.setToolTipText("Na panel nije postavljena niti jedna komponenta");
  652. }
  653. }
  654. }, 460);
  655. }
  656.  
  657. /*
  658. * Set default tooltiptext to all components except fiber
  659. */
  660. public static void setDefaltTextToComponents(String text) {
  661. boolean first = false;
  662. for (int i = 0; i < panelSchema.getComponentCount(); i++) {
  663. GuiElectricalComponent component = (GuiElectricalComponent) panelSchema.getComponent(i);
  664. if (component.getInstrument() instanceof Vlakno) {
  665. component.setToolTipText("Ovo je vlakno");
  666. continue;
  667. }
  668.  
  669. component.setToolTipText(text);
  670.  
  671. if(!first) {
  672. first = true;
  673. String className = component.getName();
  674. int lastIndxDot = className.lastIndexOf('.');
  675. className = className.substring(lastIndxDot + 1, className.length());
  676. simulationPanel.setToolTipText("Na komponenti " + className +" nije detektiran signal");
  677. }
  678. component.setBorder(new MatteBorder(2, 2, 2, 2, (Color) new Color(255,0,0)));
  679. simulationPanel.setBackground(Color.RED);
  680. }
  681. first = false;
  682. }
  683.  
  684. /*
  685. * Validate panel schema setup
  686. */
  687. public boolean validateSchema() {
  688. for (int i = 0; i < panelSchema.getComponentCount(); i++) {
  689. GuiElectricalComponent component = (GuiElectricalComponent) panelSchema.getComponent(i);
  690. if (!component.getInstrument().validate()) {
  691. return false;
  692. }
  693. }
  694. return true;
  695. }
  696.  
  697.  
  698. /**
  699. * Launch the application.
  700. */
  701. public static void main(String[] args) {
  702. EventQueue.invokeLater(new Runnable() {
  703. public void run() {
  704. try {
  705. frame = new FtmGui();
  706. frame.setVisible(true);
  707. } catch (Exception e) {
  708. e.printStackTrace();
  709. }
  710. }
  711. });
  712. }
  713. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement