PageRenderTime 26ms CodeModel.GetById 23ms RepoModel.GetById 0ms app.codeStats 1ms

/projects/squirrel_sql-3.1.2/src/net/sourceforge/squirrel_sql/plugins/graph/ZoomPrintController.java

https://gitlab.com/essere.lab.public/qualitas.class-corpus
Java | 392 lines | 319 code | 72 blank | 1 comment | 22 complexity | 668d7464df39e4d214a6566f36f51af3 MD5 | raw file
  1. package net.sourceforge.squirrel_sql.plugins.graph;
  2. import net.sourceforge.squirrel_sql.client.session.ISession;
  3. import net.sourceforge.squirrel_sql.plugins.graph.xmlbeans.FormatXmlBean;
  4. import net.sourceforge.squirrel_sql.plugins.graph.xmlbeans.PrintXmlBean;
  5. import net.sourceforge.squirrel_sql.plugins.graph.xmlbeans.ZoomerXmlBean;
  6. import net.sourceforge.squirrel_sql.plugins.graph.graphtofiles.GraphToFilesCtrlr;
  7. import net.sourceforge.squirrel_sql.plugins.graph.graphtofiles.SaveToFilePageFormat;
  8. import javax.swing.event.ChangeEvent;
  9. import javax.swing.event.ChangeListener;
  10. import java.awt.event.ActionEvent;
  11. import java.awt.event.ActionListener;
  12. import java.awt.event.ItemListener;
  13. import java.awt.event.ItemEvent;
  14. import java.awt.print.*;
  15. import java.awt.image.BufferedImage;
  16. import java.awt.*;
  17. import java.util.ArrayList;
  18. public class ZoomPrintController
  19. {
  20. Zoomer _zoomer;
  21. private boolean _dontReactToSliderChanges = false;
  22. private ISession _session;
  23. private FormatController _formatController;
  24. private EdgesListener _edgesListener;
  25. private EdgesGraphComponent _edgesGraphComponent;
  26. private GraphPlugin _plugin;
  27. private GraphPrintable _printable;
  28. ZoomPrintPanel _panel = null;
  29. public ZoomPrintController(ZoomerXmlBean zoomerXmlBean, PrintXmlBean printXmlBean, EdgesListener edgesListener, GraphPrintable printable, ISession session, GraphPlugin plugin)
  30. {
  31. _printable = printable;
  32. _plugin = plugin;
  33. _panel = new ZoomPrintPanel(new GraphPluginResources(_plugin));
  34. initZoom(session, zoomerXmlBean);
  35. initPrint(printXmlBean, edgesListener);
  36. }
  37. private void initPrint(PrintXmlBean printXmlBean, EdgesListener edgesListener)
  38. {
  39. _edgesListener = edgesListener;
  40. FormatControllerListener fcl = new FormatControllerListener()
  41. {
  42. public void formatsChanged(FormatXmlBean selectedFormat)
  43. {
  44. onFormatsChanged(selectedFormat);
  45. }
  46. };
  47. if(null != printXmlBean)
  48. {
  49. _formatController = new FormatController(_session, _plugin, fcl);
  50. _panel.sldEdges.setValue(printXmlBean.getEdgesScale());
  51. _panel.chkShowEdges.setSelected(printXmlBean.isShowEdges());
  52. }
  53. else
  54. {
  55. _formatController = new FormatController(_session, _plugin, fcl);
  56. }
  57. FormatXmlBean[] formats =_formatController.getFormats();
  58. FormatXmlBean toSelect = null;
  59. for (int i = 0; i < formats.length; i++)
  60. {
  61. _panel.cboFormat.addItem(formats[i]);
  62. if(formats[i].isSelected())
  63. {
  64. toSelect = formats[i];
  65. }
  66. }
  67. if(null != toSelect)
  68. {
  69. _panel.cboFormat.setSelectedItem(toSelect);
  70. }
  71. _panel.sldEdges.addChangeListener(new ChangeListener()
  72. {
  73. public void stateChanged(ChangeEvent e)
  74. {
  75. onSldEdgesChanged();
  76. }
  77. });
  78. _panel.chkShowEdges.addActionListener(new ActionListener()
  79. {
  80. public void actionPerformed(ActionEvent e)
  81. {
  82. onShowEdges();
  83. }
  84. });
  85. onShowEdges();
  86. _panel.btnPrint.addActionListener(new ActionListener()
  87. {
  88. public void actionPerformed(ActionEvent e)
  89. {
  90. onPrint();
  91. }
  92. });
  93. _panel.btnSaveImages.addActionListener(new ActionListener()
  94. {
  95. public void actionPerformed(ActionEvent e)
  96. {
  97. onSaveImages();
  98. }
  99. });
  100. _panel.cboFormat.addItemListener(new ItemListener()
  101. {
  102. public void itemStateChanged(ItemEvent e)
  103. {
  104. onSelectedFormatChanged(e);
  105. }
  106. });
  107. }
  108. private void onShowEdges()
  109. {
  110. _panel.btnFormat.setEnabled(_panel.chkShowEdges.isSelected());
  111. _panel.cboFormat.setEnabled(_panel.chkShowEdges.isSelected());
  112. _panel.sldEdges.setEnabled(_panel.chkShowEdges.isSelected());
  113. _panel.btnPrint.setEnabled(_panel.chkShowEdges.isSelected());
  114. fireEdgesGraphComponentChanged(_panel.chkShowEdges.isSelected() && _panel.isVisible());
  115. }
  116. private void onSelectedFormatChanged(ItemEvent e)
  117. {
  118. if(ItemEvent.SELECTED == e.getStateChange())
  119. {
  120. fireEdgesGraphComponentChanged(_panel.chkShowEdges.isSelected());
  121. }
  122. }
  123. private void onFormatsChanged(FormatXmlBean selectedFormat)
  124. {
  125. FormatXmlBean[] formats = _formatController.getFormats();
  126. _panel.cboFormat.removeAllItems();
  127. for (int i = 0; i < formats.length; i++)
  128. {
  129. _panel.cboFormat.addItem(formats[i]);
  130. if(formats[i] == selectedFormat)
  131. {
  132. formats[i].setSelected(true);
  133. _panel.cboFormat.setSelectedItem(formats[i]);
  134. }
  135. else
  136. {
  137. formats[i].setSelected(false);
  138. }
  139. }
  140. }
  141. private void onPrint()
  142. {
  143. PrinterJob printJob = PrinterJob.getPrinterJob();
  144. PageFormat pf = initPrint(false);
  145. printJob.setPrintable(_printable, pf);
  146. if (printJob.printDialog())
  147. {
  148. try
  149. {
  150. printJob.print();
  151. }
  152. catch (Exception ex)
  153. {
  154. throw new RuntimeException(ex);
  155. }
  156. }
  157. }
  158. private void onSaveImages()
  159. {
  160. try
  161. {
  162. ArrayList<BufferedImage> images = new ArrayList<BufferedImage>();
  163. if (_panel.chkShowEdges.isSelected())
  164. {
  165. PageFormat pf = initPrint(true);
  166. FormatXmlBean format = (FormatXmlBean) _panel.cboFormat.getSelectedItem();
  167. PixelCalculater pc = new PixelCalculater(format);
  168. for (int pageIndex = 0; ; ++pageIndex)
  169. {
  170. int pxWidth = pc.getPixelWidth();
  171. int pxHeight = pc.getPixelHeight();
  172. BufferedImage img = prepareImage(pxWidth, pxHeight);
  173. int pageState = _printable.print(img.getGraphics(), pf, pageIndex);
  174. if (Printable.NO_SUCH_PAGE == pageState)
  175. {
  176. break;
  177. }
  178. images.add(img);
  179. }
  180. }
  181. else
  182. {
  183. // No paper edges. We print the Graph as it is to a single image.
  184. Dimension graphPixelSize = _printable.initPrintNoScaleSinglePage();
  185. SaveToFilePageFormat pf = new SaveToFilePageFormat(graphPixelSize);
  186. BufferedImage img = prepareImage(graphPixelSize.width, graphPixelSize.height);
  187. _printable.print(img.getGraphics(), pf, 0);
  188. images.add(img);
  189. }
  190. new GraphToFilesCtrlr(images.toArray(new BufferedImage[images.size()]),
  191. _session.getApplication().getMainFrame());
  192. }
  193. catch (PrinterException e)
  194. {
  195. throw new RuntimeException(e);
  196. }
  197. }
  198. private BufferedImage prepareImage(int pxWidth, int pxHeight)
  199. {
  200. BufferedImage img = new BufferedImage(pxWidth, pxHeight, BufferedImage.TYPE_INT_RGB);
  201. img.getGraphics().setColor(Color.white);
  202. img.getGraphics().fillRect(0, 0, pxWidth, pxHeight);
  203. img.getGraphics().setColor(Color.black);
  204. return img;
  205. }
  206. private PageFormat initPrint(boolean isSaveToFile)
  207. {
  208. FormatXmlBean format = (FormatXmlBean)_panel.cboFormat.getSelectedItem();
  209. _printable.initPrint(format.getWidth(), format.getHeight(), _panel.sldEdges.getValue() / 100.0);
  210. PageFormat pf = isSaveToFile ? new SaveToFilePageFormat(format) : new PageFormat();
  211. if(format.isLandscape())
  212. {
  213. pf.setOrientation(PageFormat.LANDSCAPE);
  214. }
  215. else
  216. {
  217. pf.setOrientation(PageFormat.PORTRAIT);
  218. }
  219. return pf;
  220. }
  221. private void fireEdgesGraphComponentChanged(boolean showEdges)
  222. {
  223. if(null == _edgesGraphComponent)
  224. {
  225. _edgesGraphComponent = new EdgesGraphComponent();
  226. }
  227. if(showEdges)
  228. {
  229. FormatXmlBean format = (FormatXmlBean) _panel.cboFormat.getSelectedItem();
  230. _edgesGraphComponent.init(format, _panel.sldEdges.getValue() / 100.0, _panel.sldEdges.getValueIsAdjusting());
  231. _edgesListener.edgesGraphComponentChanged(_edgesGraphComponent, true);
  232. }
  233. else
  234. {
  235. _edgesListener.edgesGraphComponentChanged(_edgesGraphComponent, false);
  236. }
  237. }
  238. private void onSldEdgesChanged()
  239. {
  240. fireEdgesGraphComponentChanged(_panel.chkShowEdges.isSelected());
  241. }
  242. private void initZoom(ISession session, ZoomerXmlBean zoomerXmlBean)
  243. {
  244. _session = session;
  245. _zoomer = new Zoomer(zoomerXmlBean);
  246. _panel.setVisible(false);
  247. _panel.sldZoom.addChangeListener(new ChangeListener()
  248. {
  249. public void stateChanged(ChangeEvent e)
  250. {
  251. onSldZoomChanged();
  252. }
  253. });
  254. _panel.chkHideScrollBars.addActionListener(new ActionListener()
  255. {
  256. public void actionPerformed(ActionEvent e)
  257. {
  258. onHideScrollbars();
  259. }
  260. });
  261. _panel.btnFormat.addActionListener(new ActionListener()
  262. {
  263. public void actionPerformed(ActionEvent e)
  264. {
  265. onBtnFormat();
  266. }
  267. });
  268. }
  269. private void onBtnFormat()
  270. {
  271. _formatController.setVisible(true);
  272. }
  273. private void onHideScrollbars()
  274. {
  275. _zoomer.setHideScrollBars(_panel.chkHideScrollBars.isSelected());
  276. }
  277. private void onSldZoomChanged()
  278. {
  279. if(_dontReactToSliderChanges)
  280. {
  281. return;
  282. }
  283. _zoomer.setZoom(_panel.sldZoom.getValue() / 100.0, _panel.sldZoom.getValueIsAdjusting());
  284. }
  285. public ZoomPrintPanel getPanel()
  286. {
  287. return _panel;
  288. }
  289. public void setVisible(boolean b)
  290. {
  291. _panel.setVisible(b);
  292. _zoomer.setEnabled(b);
  293. fireEdgesGraphComponentChanged(b);
  294. onShowEdges();
  295. try
  296. {
  297. _dontReactToSliderChanges = true;
  298. _panel.sldZoom.setValue((int)(_zoomer.getZoom() * 100 + 0.5));
  299. }
  300. finally
  301. {
  302. _dontReactToSliderChanges = false;
  303. }
  304. }
  305. public Zoomer getZoomer()
  306. {
  307. return _zoomer;
  308. }
  309. public PrintXmlBean getPrintXmlBean()
  310. {
  311. PrintXmlBean ret = new PrintXmlBean();
  312. ret.setShowEdges(_panel.chkShowEdges.isSelected());
  313. ret.setEdgesScale(_panel.sldEdges.getValue());
  314. return ret;
  315. }
  316. public void sessionEnding()
  317. {
  318. _formatController.close();
  319. }
  320. }