SearchPopUp.java 8.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293
  1. package ui.view;
  2. import java.awt.BorderLayout;
  3. import javax.swing.JDialog;
  4. import javax.swing.JPanel;
  5. import javax.swing.border.EmptyBorder;
  6. import classes.AbstractCpsObject;
  7. import javax.swing.JLabel;
  8. import java.awt.Font;
  9. import javax.swing.ButtonGroup;
  10. import javax.swing.JTextField;
  11. import javax.swing.JRadioButton;
  12. import javax.swing.JButton;
  13. import ui.controller.Control;
  14. import java.awt.event.ActionListener;
  15. import java.util.ArrayList;
  16. import java.awt.event.ActionEvent;
  17. /**
  18. * This Class represents a popup to seatch for Objects on the Canvas.
  19. *
  20. * @author Gruppe14
  21. */
  22. public class SearchPopUp extends JDialog {
  23. private static final long serialVersionUID = 1L;
  24. private final JPanel contentPanel = new JPanel();
  25. private JTextField replaceTextField;
  26. private JTextField findTextField;
  27. private Control controller;
  28. private MyCanvas canvas;
  29. private JRadioButton rdbtnForward;
  30. private JRadioButton rdbtnBackward;
  31. private JRadioButton rdbtnAll;
  32. private JRadioButton rdbtnSingle;
  33. private int idx;
  34. /**
  35. * Constructor.
  36. *
  37. * @param contr
  38. * Controller
  39. * @param can
  40. * Canvas
  41. */
  42. SearchPopUp(Control contr, MyCanvas can) {
  43. super((java.awt.Frame) null, true);
  44. idx = -1;
  45. setModalityType(java.awt.Dialog.ModalityType.APPLICATION_MODAL);
  46. this.setTitle(Languages.getLanguage()[35]);
  47. setBounds(100, 100, 250, 360);
  48. getContentPane().setLayout(new BorderLayout());
  49. contentPanel.setBorder(new EmptyBorder(5, 5, 5, 5));
  50. getContentPane().add(contentPanel, BorderLayout.CENTER);
  51. contentPanel.setLayout(null);
  52. this.controller = contr;
  53. this.canvas = can;
  54. JLabel lblFind = new JLabel(Languages.getLanguage()[36] + ":");
  55. lblFind.setFont(new Font("Tahoma", Font.PLAIN, 13));
  56. lblFind.setBounds(10, 11, 46, 19);
  57. contentPanel.add(lblFind);
  58. JLabel lblReplace = new JLabel(Languages.getLanguage()[37] + ":");
  59. lblReplace.setFont(new Font("Tahoma", Font.PLAIN, 13));
  60. lblReplace.setBounds(10, 41, 80, 14);
  61. contentPanel.add(lblReplace);
  62. // ReplaceTest
  63. replaceTextField = new JTextField();
  64. replaceTextField.setBounds(90, 39, 101, 20);
  65. contentPanel.add(replaceTextField);
  66. replaceTextField.setColumns(10);
  67. // FindText
  68. findTextField = new JTextField();
  69. findTextField.setBounds(90, 11, 101, 20);
  70. contentPanel.add(findTextField);
  71. findTextField.setColumns(10);
  72. JLabel lblNewLabel = new JLabel(Languages.getLanguage()[38]);
  73. lblNewLabel.setFont(new Font("Tahoma", Font.BOLD, 13));
  74. lblNewLabel.setBounds(10, 90, 82, 14);
  75. contentPanel.add(lblNewLabel);
  76. rdbtnForward = new JRadioButton(Languages.getLanguage()[39]);
  77. rdbtnForward.setFont(new Font("Tahoma", Font.PLAIN, 13));
  78. rdbtnForward.setBounds(10, 111, 109, 23);
  79. contentPanel.add(rdbtnForward);
  80. rdbtnForward.setSelected(true);
  81. rdbtnBackward = new JRadioButton(Languages.getLanguage()[40]);
  82. rdbtnBackward.setFont(new Font("Tahoma", Font.PLAIN, 13));
  83. rdbtnBackward.setBounds(10, 137, 109, 23);
  84. contentPanel.add(rdbtnBackward);
  85. JLabel lblScope = new JLabel(Languages.getLanguage()[41]);
  86. lblScope.setFont(new Font("Tahoma", Font.BOLD, 13));
  87. lblScope.setBounds(122, 90, 60, 14);
  88. contentPanel.add(lblScope);
  89. rdbtnAll = new JRadioButton(Languages.getLanguage()[42]);
  90. rdbtnAll.setFont(new Font("Tahoma", Font.PLAIN, 13));
  91. rdbtnAll.setBounds(121, 112, 109, 23);
  92. contentPanel.add(rdbtnAll);
  93. rdbtnAll.setSelected(true);
  94. rdbtnSingle = new JRadioButton(Languages.getLanguage()[43]);
  95. rdbtnSingle.setFont(new Font("Tahoma", Font.PLAIN, 13));
  96. rdbtnSingle.setBounds(121, 138, 109, 23);
  97. contentPanel.add(rdbtnSingle);
  98. // FindButton
  99. JButton btnFind = new JButton(Languages.getLanguage()[36]);
  100. btnFind.addActionListener(new ActionListener() {
  101. public void actionPerformed(ActionEvent e) {
  102. if (rdbtnAll.isSelected()) {
  103. for (AbstractCpsObject cps : controller.getModel().getObjectsOnCanvas()) {
  104. if (cps.getName().equals(findTextField.getText())
  105. && !controller.getModel().getSelectedCpsObjects().contains(cps)) {
  106. controller.getModel().getSelectedCpsObjects().add(cps);
  107. }
  108. }
  109. }
  110. if (rdbtnSingle.isSelected()) {
  111. controller.getModel().getSelectedCpsObjects().clear();
  112. if (!controller.getModel().getObjectsOnCanvas().isEmpty() && !findTextField.getText().isEmpty()) {
  113. if (rdbtnForward.isSelected()) {
  114. if ((idx = getNext(++idx)) != -1)
  115. controller.getModel().getSelectedCpsObjects().add(getObj(idx));
  116. } else if (rdbtnBackward.isSelected()) {
  117. if ((idx = getPrev(--idx)) != -1)
  118. controller.getModel().getSelectedCpsObjects().add(getObj(idx));
  119. }
  120. }
  121. }
  122. canvas.repaint();
  123. }
  124. });
  125. btnFind.setFont(new Font("Tahoma", Font.PLAIN, 13));
  126. btnFind.setBounds(10, 186, 110, 23);
  127. contentPanel.add(btnFind);
  128. // ReplaceButton
  129. JButton btnReplace = new JButton(Languages.getLanguage()[37]);
  130. btnReplace.addActionListener(new ActionListener() {
  131. public void actionPerformed(ActionEvent e) {
  132. if (controller.getModel().getSelectedCpsObjects().size() == 1 && controller.getModel()
  133. .getSelectedCpsObjects().get(0).getName().equals(findTextField.getText()))
  134. controller.getModel().getSelectedCpsObjects().get(0).setName(replaceTextField.getText());
  135. canvas.repaint();
  136. }
  137. });
  138. btnReplace.setFont(new Font("Tahoma", Font.PLAIN, 13));
  139. btnReplace.setBounds(110, 187, 110, 23);
  140. contentPanel.add(btnReplace);
  141. // ReplaceAllButton
  142. JButton btnReplaceAll = new JButton(Languages.getLanguage()[44]);
  143. btnReplaceAll.addActionListener(new ActionListener() {
  144. public void actionPerformed(ActionEvent e) {
  145. canvas.tempCps = null;
  146. canvas.tempSelected = new ArrayList<>();
  147. controller.getModel().getSelectedCpsObjects().clear();
  148. for (AbstractCpsObject cps : controller.getModel().getObjectsOnCanvas()) {
  149. if (cps.getName().equals(findTextField.getText())
  150. && !controller.getModel().getSelectedCpsObjects().contains(cps))
  151. selectObj(cps);
  152. }
  153. for (AbstractCpsObject cps : controller.getModel().getSelectedCpsObjects()) {
  154. renameObj(cps, replaceTextField.getText());
  155. }
  156. canvas.repaint();
  157. }
  158. });
  159. btnReplaceAll.setFont(new Font("Tahoma", Font.PLAIN, 11));
  160. btnReplaceAll.setBounds(110, 218, 110, 23);
  161. contentPanel.add(btnReplaceAll);
  162. // CloseButton
  163. JButton btnClose = new JButton(Languages.getLanguage()[45]);
  164. btnClose.addActionListener(new ActionListener() {
  165. public void actionPerformed(ActionEvent arg0) {
  166. dispose();
  167. }
  168. });
  169. btnClose.setFont(new Font("Tahoma", Font.PLAIN, 13));
  170. btnClose.setBounds(110, 287, 110, 23);
  171. contentPanel.add(btnClose);
  172. ButtonGroup directionbtns = new ButtonGroup();
  173. ButtonGroup scopebtns = new ButtonGroup();
  174. directionbtns.add(rdbtnBackward);
  175. directionbtns.add(rdbtnForward);
  176. scopebtns.add(rdbtnSingle);
  177. scopebtns.add(rdbtnAll);
  178. }
  179. /**
  180. * add the searched Objects to the Selected Objects.
  181. *
  182. * @param obj
  183. * The Object
  184. */
  185. public void selectObj(AbstractCpsObject obj) {
  186. controller.getModel().getSelectedCpsObjects().add(obj);
  187. }
  188. /**
  189. * Rename an Object.
  190. *
  191. * @param obj
  192. * the Object
  193. * @param name
  194. * the new name
  195. */
  196. public void renameObj(AbstractCpsObject obj, String name) {
  197. obj.setName(name);
  198. }
  199. /**
  200. * get the Object with the specific ID.
  201. *
  202. * @param idx
  203. * the ID
  204. * @return the Object with that ID
  205. */
  206. public AbstractCpsObject getObj(int idx) {
  207. return controller.getModel().getObjectsOnCanvas().get(idx);
  208. }
  209. /**
  210. * Get the next Object ID.
  211. *
  212. * @param idx
  213. * the Index
  214. * @return the next Index
  215. */
  216. public int getNext(int idx) {
  217. for (int i = idx; i < controller.getModel().getObjectsOnCanvas().size(); i++) {
  218. if (getObj(i).getName().equals(findTextField.getText())
  219. && !controller.getModel().getSelectedCpsObjects().contains(getObj(i)))
  220. return i;
  221. }
  222. for (int i = 0; i < idx; i++) {
  223. if (getObj(i).getName().equals(findTextField.getText())
  224. && !controller.getModel().getSelectedCpsObjects().contains(getObj(i)))
  225. return i;
  226. }
  227. return -1;
  228. }
  229. /**
  230. * Get the previous Index.
  231. *
  232. * @param idx
  233. * the Index
  234. * @return the previousIndex
  235. */
  236. public int getPrev(int idx) {
  237. for (int i = idx; i >= 0; i--) {
  238. if (getObj(i).getName().equals(findTextField.getText())
  239. && !controller.getModel().getSelectedCpsObjects().contains(getObj(i)))
  240. return i;
  241. }
  242. for (int i = controller.getModel().getObjectsOnCanvas().size() - 1; i > idx; i--) {
  243. if (getObj(i).getName().equals(findTextField.getText())
  244. && !controller.getModel().getSelectedCpsObjects().contains(getObj(i)))
  245. return i;
  246. }
  247. return -1;
  248. }
  249. }