001: /*
002: * Copyright 2006-2007 Pentaho Corporation. All rights reserved.
003: * This software was developed by Pentaho Corporation and is provided under the terms
004: * of the Mozilla Public License, Version 1.1, or any later version. You may not use
005: * this file except in compliance with the license. If you need a copy of the license,
006: * please go to http://www.mozilla.org/MPL/MPL-1.1.txt.
007: *
008: * Software distributed under the Mozilla Public License is distributed on an "AS IS"
009: * basis, WITHOUT WARRANTY OF ANY KIND, either express or implied. Please refer to
010: * the license for the specific language governing your rights and limitations.
011: *
012: * Additional Contributor(s): Martin Schmid gridvision engineering GmbH
013: */
014: package org.pentaho.reportdesigner.crm.report.properties.editors;
015:
016: import com.jgoodies.forms.layout.CellConstraints;
017: import com.jgoodies.forms.layout.FormLayout;
018: import org.jetbrains.annotations.NonNls;
019: import org.jetbrains.annotations.NotNull;
020: import org.pentaho.reportdesigner.crm.report.model.ElementBorderDefinition;
021: import org.pentaho.reportdesigner.lib.client.components.CenterPanelDialog;
022: import org.pentaho.reportdesigner.lib.client.i18n.TranslationManager;
023: import org.pentaho.reportdesigner.lib.client.util.DoubleDimension;
024: import org.pentaho.reportdesigner.lib.client.util.GUIUtils;
025: import org.pentaho.reportdesigner.lib.client.util.WindowUtils;
026:
027: import javax.swing.*;
028: import java.awt.*;
029: import java.awt.event.ActionEvent;
030: import java.awt.event.ActionListener;
031: import java.awt.geom.Arc2D;
032:
033: /**
034: * User: Martin
035: * Date: 01.11.2005
036: * Time: 10:23:10
037: */
038: public class ElementBorderDefinitionChooser {
039:
040: private ElementBorderDefinitionChooser() {
041: }
042:
043: @NotNull
044: public static ElementBorderDefinition showElementBorderDefinitionChooser(
045: @NotNull
046: JComponent parent, @NotNull
047: String title, @NotNull
048: ElementBorderDefinition origBorderDefinition) {
049: final CenterPanelDialog centerPanelDialog = CenterPanelDialog
050: .createDialog(parent, title,
051: CenterPanelDialog.ModalityType.DOCUMENT_MODAL);
052:
053: final boolean[] action = new boolean[] { false };
054:
055: JButton okButton = new JButton(TranslationManager.getInstance()
056: .getTranslation("R", "Button.ok"));
057: okButton.addActionListener(new ActionListener() {
058: public void actionPerformed(@NotNull
059: ActionEvent e) {
060: action[0] = true;
061: centerPanelDialog.dispose();
062: }
063: });
064:
065: JButton cancelButton = new JButton(TranslationManager
066: .getInstance().getTranslation("R", "Button.cancel"));
067: cancelButton.addActionListener(new ActionListener() {
068: public void actionPerformed(@NotNull
069: ActionEvent e) {
070: action[0] = false;
071: centerPanelDialog.dispose();
072: }
073: });
074:
075: centerPanelDialog.setButtons(okButton, cancelButton, okButton,
076: cancelButton);
077:
078: ElementBorderDefinitionPanel centerPanel = new ElementBorderDefinitionPanel(
079: origBorderDefinition);
080:
081: centerPanelDialog.setCenterPanel(centerPanel);
082: centerPanelDialog.pack();
083: GUIUtils.ensureMinimumDialogSize(centerPanelDialog, 250, 250);
084: WindowUtils.setLocationRelativeTo(centerPanelDialog, parent);
085: centerPanelDialog.setVisible(true);
086:
087: if (action[0]) {
088: return centerPanel.getCurrentBorderDefinition();
089: }
090: return origBorderDefinition;
091: }
092:
093: private static class ElementBorderDefinitionPanel extends JPanel {
094: @NotNull
095: private ElementBorderDefinition currentBorderDefinition;
096:
097: @NotNull
098: private BorderSideIcon top;
099: @NotNull
100: private BorderSideIcon bottom;
101: @NotNull
102: private BorderSideIcon left;
103: @NotNull
104: private BorderSideIcon right;
105:
106: @NotNull
107: private BorderSideIcon breakSide;
108:
109: @NotNull
110: private JButton topButton;
111: @NotNull
112: private JButton leftButton;
113: @NotNull
114: private JButton rightButton;
115: @NotNull
116: private JButton bottomButton;
117: @NotNull
118: private JButton breakButton;
119: @NotNull
120: private JButton topLeftButton;
121: @NotNull
122: private JButton topRightButton;
123: @NotNull
124: private JButton bottomLeftButton;
125: @NotNull
126: private JButton bottomRightButton;
127:
128: private ElementBorderDefinitionPanel(@NotNull
129: ElementBorderDefinition origBorderDefinition) {
130: currentBorderDefinition = origBorderDefinition;
131:
132: final JCheckBox sameBorderCheckBox = new JCheckBox(
133: TranslationManager
134: .getInstance()
135: .getTranslation("R",
136: "ElementBorderDefinitionChooser.SameBorderForAllSides"));
137:
138: top = new BorderSideIcon(currentBorderDefinition
139: .getTopSide(), true);
140: left = new BorderSideIcon(currentBorderDefinition
141: .getLeftSide(), false);
142: right = new BorderSideIcon(currentBorderDefinition
143: .getRightSide(), false);
144: bottom = new BorderSideIcon(currentBorderDefinition
145: .getBottomSide(), true);
146:
147: breakSide = new BorderSideIcon(currentBorderDefinition
148: .getBreakSide(), true);
149:
150: @NonNls
151: FormLayout formLayout = new FormLayout(
152: "default, 4dlu, default, 4dlu, default",
153: "default, 4dlu, " + "default, 4dlu, "
154: + "default, 4dlu, " + "default, 20dlu,"
155: + "default, 50dlu");
156:
157: setLayout(formLayout);
158: @NonNls
159: CellConstraints cc = new CellConstraints();
160:
161: add(sameBorderCheckBox, cc.xyw(1, 1, 5));
162:
163: topButton = new JButton(top);
164: leftButton = new JButton(left);
165: rightButton = new JButton(right);
166: bottomButton = new JButton(bottom);
167: breakButton = new JButton(breakSide);
168:
169: add(topButton, cc.xy(3, 3));
170: add(leftButton, cc.xy(1, 5, "center, center"));
171: add(rightButton, cc.xy(5, 5, "center, center"));
172: add(bottomButton, cc.xy(3, 7));
173:
174: add(new JLabel(TranslationManager.getInstance()
175: .getTranslation("R",
176: "ElementBorderDefinitionChooser.Break")),
177: cc.xy(1, 9));
178: add(breakButton, cc.xy(3, 9));
179:
180: topLeftButton = new JButton(new BorderEdgeIcon(
181: currentBorderDefinition.getTopLeftEdge(),
182: currentBorderDefinition.getTopSide(), 1));
183: topRightButton = new JButton(new BorderEdgeIcon(
184: currentBorderDefinition.getTopRightEdge(),
185: currentBorderDefinition.getTopSide(), 2));
186: bottomLeftButton = new JButton(new BorderEdgeIcon(
187: currentBorderDefinition.getBottomLeftEdge(),
188: currentBorderDefinition.getBottomSide(), 3));
189: bottomRightButton = new JButton(new BorderEdgeIcon(
190: currentBorderDefinition.getBottomRightEdge(),
191: currentBorderDefinition.getBottomSide(), 4));
192:
193: add(topLeftButton, cc.xy(1, 3));
194: add(topRightButton, cc.xy(5, 3));
195: add(bottomLeftButton, cc.xy(1, 7));
196: add(bottomRightButton, cc.xy(5, 7));
197:
198: topLeftButton.addActionListener(new ActionListener() {
199: public void actionPerformed(@NotNull
200: ActionEvent e) {
201: DoubleValueChooser.Pair<Double> pair = DoubleValueChooser
202: .showValueChooser(
203: ElementBorderDefinitionPanel.this ,
204: TranslationManager
205: .getInstance()
206: .getTranslation("R",
207: "ElementBorderDefinitionChooser.Edge"),
208: TranslationManager
209: .getInstance()
210: .getTranslation("R",
211: "ElementBorderDefinitionChooser.Width"),
212: TranslationManager
213: .getInstance()
214: .getTranslation("R",
215: "ElementBorderDefinitionChooser.Height"),
216: new DoubleValueChooser.Pair<Double>(
217: Double
218: .valueOf(currentBorderDefinition
219: .getTopLeftEdge()
220: .getRadii()
221: .getWidth()),
222: Double
223: .valueOf(currentBorderDefinition
224: .getTopLeftEdge()
225: .getRadii()
226: .getHeight())));
227:
228: if (pair != null) {
229: currentBorderDefinition = new ElementBorderDefinition(
230: sameBorderCheckBox.isSelected(),
231: currentBorderDefinition.getTopSide(),
232: currentBorderDefinition.getBottomSide(),
233: currentBorderDefinition.getLeftSide(),
234: currentBorderDefinition.getRightSide(),
235: currentBorderDefinition.getBreakSide(),
236: new ElementBorderDefinition.Edge(
237: new DoubleDimension(pair
238: .getValue1()
239: .doubleValue(), pair
240: .getValue2()
241: .doubleValue())),
242: currentBorderDefinition
243: .getTopRightEdge(),
244: currentBorderDefinition
245: .getBottomLeftEdge(),
246: currentBorderDefinition
247: .getBottomRightEdge());
248: updateComponents();
249: }
250: }
251: });
252:
253: topRightButton.addActionListener(new ActionListener() {
254: public void actionPerformed(@NotNull
255: ActionEvent e) {
256: DoubleValueChooser.Pair<Double> pair = DoubleValueChooser
257: .showValueChooser(
258: ElementBorderDefinitionPanel.this ,
259: TranslationManager
260: .getInstance()
261: .getTranslation("R",
262: "ElementBorderDefinitionChooser.Edge"),
263: TranslationManager
264: .getInstance()
265: .getTranslation("R",
266: "ElementBorderDefinitionChooser.Width"),
267: TranslationManager
268: .getInstance()
269: .getTranslation("R",
270: "ElementBorderDefinitionChooser.Height"),
271: new DoubleValueChooser.Pair<Double>(
272: Double
273: .valueOf(currentBorderDefinition
274: .getTopRightEdge()
275: .getRadii()
276: .getWidth()),
277: Double
278: .valueOf(currentBorderDefinition
279: .getTopRightEdge()
280: .getRadii()
281: .getHeight())));
282: if (pair != null) {
283: currentBorderDefinition = new ElementBorderDefinition(
284: sameBorderCheckBox.isSelected(),
285: currentBorderDefinition.getTopSide(),
286: currentBorderDefinition.getBottomSide(),
287: currentBorderDefinition.getLeftSide(),
288: currentBorderDefinition.getRightSide(),
289: currentBorderDefinition.getBreakSide(),
290: currentBorderDefinition
291: .getTopLeftEdge(),
292: new ElementBorderDefinition.Edge(
293: new DoubleDimension(pair
294: .getValue1()
295: .doubleValue(), pair
296: .getValue2()
297: .doubleValue())),
298: currentBorderDefinition
299: .getBottomLeftEdge(),
300: currentBorderDefinition
301: .getBottomRightEdge());
302: updateComponents();
303: }
304: }
305: });
306:
307: bottomLeftButton.addActionListener(new ActionListener() {
308: public void actionPerformed(@NotNull
309: ActionEvent e) {
310: DoubleValueChooser.Pair<Double> pair = DoubleValueChooser
311: .showValueChooser(
312: ElementBorderDefinitionPanel.this ,
313: TranslationManager
314: .getInstance()
315: .getTranslation("R",
316: "ElementBorderDefinitionChooser.Edge"),
317: TranslationManager
318: .getInstance()
319: .getTranslation("R",
320: "ElementBorderDefinitionChooser.Width"),
321: TranslationManager
322: .getInstance()
323: .getTranslation("R",
324: "ElementBorderDefinitionChooser.Height"),
325: new DoubleValueChooser.Pair<Double>(
326: Double
327: .valueOf(currentBorderDefinition
328: .getBottomLeftEdge()
329: .getRadii()
330: .getWidth()),
331: Double
332: .valueOf(currentBorderDefinition
333: .getBottomLeftEdge()
334: .getRadii()
335: .getHeight())));
336:
337: if (pair != null) {
338: currentBorderDefinition = new ElementBorderDefinition(
339: sameBorderCheckBox.isSelected(),
340: currentBorderDefinition.getTopSide(),
341: currentBorderDefinition.getBottomSide(),
342: currentBorderDefinition.getLeftSide(),
343: currentBorderDefinition.getRightSide(),
344: currentBorderDefinition.getBreakSide(),
345: currentBorderDefinition
346: .getTopLeftEdge(),
347: currentBorderDefinition
348: .getTopRightEdge(),
349: new ElementBorderDefinition.Edge(
350: new DoubleDimension(pair
351: .getValue1()
352: .doubleValue(), pair
353: .getValue2()
354: .doubleValue())),
355: currentBorderDefinition
356: .getBottomRightEdge());
357: updateComponents();
358: }
359: }
360: });
361:
362: bottomRightButton.addActionListener(new ActionListener() {
363: public void actionPerformed(@NotNull
364: ActionEvent e) {
365: DoubleValueChooser.Pair<Double> pair = DoubleValueChooser
366: .showValueChooser(
367: ElementBorderDefinitionPanel.this ,
368: TranslationManager
369: .getInstance()
370: .getTranslation("R",
371: "ElementBorderDefinitionChooser.Edge"),
372: TranslationManager
373: .getInstance()
374: .getTranslation("R",
375: "ElementBorderDefinitionChooser.Width"),
376: TranslationManager
377: .getInstance()
378: .getTranslation("R",
379: "ElementBorderDefinitionChooser.Height"),
380: new DoubleValueChooser.Pair<Double>(
381: Double
382: .valueOf(currentBorderDefinition
383: .getBottomRightEdge()
384: .getRadii()
385: .getWidth()),
386: Double
387: .valueOf(currentBorderDefinition
388: .getBottomRightEdge()
389: .getRadii()
390: .getHeight())));
391: if (pair != null) {
392: currentBorderDefinition = new ElementBorderDefinition(
393: sameBorderCheckBox.isSelected(),
394: currentBorderDefinition.getTopSide(),
395: currentBorderDefinition.getBottomSide(),
396: currentBorderDefinition.getLeftSide(),
397: currentBorderDefinition.getRightSide(),
398: currentBorderDefinition.getBreakSide(),
399: currentBorderDefinition
400: .getTopLeftEdge(),
401: currentBorderDefinition
402: .getTopRightEdge(),
403: currentBorderDefinition
404: .getBottomLeftEdge(),
405: new ElementBorderDefinition.Edge(
406: new DoubleDimension(pair
407: .getValue1()
408: .doubleValue(), pair
409: .getValue2()
410: .doubleValue())));
411: updateComponents();
412: }
413: }
414: });
415:
416: sameBorderCheckBox.setSelected(currentBorderDefinition
417: .isSameBorderForAllSides());
418: sameBorderCheckBox.addActionListener(new ActionListener() {
419: public void actionPerformed(@NotNull
420: ActionEvent e) {
421: currentBorderDefinition = new ElementBorderDefinition(
422: sameBorderCheckBox.isSelected(),
423: currentBorderDefinition.getTopSide(),
424: currentBorderDefinition.getBottomSide(),
425: currentBorderDefinition.getLeftSide(),
426: currentBorderDefinition.getRightSide(),
427: currentBorderDefinition.getBreakSide(),
428: currentBorderDefinition.getTopLeftEdge(),
429: currentBorderDefinition.getTopRightEdge(),
430: currentBorderDefinition.getBottomLeftEdge(),
431: currentBorderDefinition
432: .getBottomRightEdge());
433: updateComponents();
434: }
435: });
436:
437: topButton.addActionListener(new ActionListener() {
438: public void actionPerformed(@NotNull
439: ActionEvent e) {
440: ElementBorderDefinition.Side side = ElementBorderDefinitionSideChooser
441: .showBorderDefinitionChooser(
442: ElementBorderDefinitionPanel.this ,
443: TranslationManager
444: .getInstance()
445: .getTranslation("R",
446: "ElementBorderDefinitionChooser.Side"),
447: currentBorderDefinition
448: .getTopSide());
449:
450: currentBorderDefinition = new ElementBorderDefinition(
451: sameBorderCheckBox.isSelected(),
452: side,
453: currentBorderDefinition.getBottomSide(),
454: currentBorderDefinition.getLeftSide(),
455: currentBorderDefinition.getRightSide(),
456: currentBorderDefinition.getBreakSide(),
457: currentBorderDefinition.getTopLeftEdge(),
458: currentBorderDefinition.getTopRightEdge(),
459: currentBorderDefinition.getBottomLeftEdge(),
460: currentBorderDefinition
461: .getBottomRightEdge());
462: updateComponents();
463: }
464: });
465:
466: bottomButton.addActionListener(new ActionListener() {
467: public void actionPerformed(@NotNull
468: ActionEvent e) {
469: ElementBorderDefinition.Side side = ElementBorderDefinitionSideChooser
470: .showBorderDefinitionChooser(
471: ElementBorderDefinitionPanel.this ,
472: TranslationManager
473: .getInstance()
474: .getTranslation("R",
475: "ElementBorderDefinitionChooser.Side"),
476: currentBorderDefinition
477: .getBottomSide());
478:
479: currentBorderDefinition = new ElementBorderDefinition(
480: sameBorderCheckBox.isSelected(),
481: currentBorderDefinition.getTopSide(),
482: side,
483: currentBorderDefinition.getLeftSide(),
484: currentBorderDefinition.getRightSide(),
485: currentBorderDefinition.getBreakSide(),
486: currentBorderDefinition.getTopLeftEdge(),
487: currentBorderDefinition.getTopRightEdge(),
488: currentBorderDefinition.getBottomLeftEdge(),
489: currentBorderDefinition
490: .getBottomRightEdge());
491: updateComponents();
492: }
493: });
494:
495: leftButton.addActionListener(new ActionListener() {
496: public void actionPerformed(@NotNull
497: ActionEvent e) {
498: ElementBorderDefinition.Side side = ElementBorderDefinitionSideChooser
499: .showBorderDefinitionChooser(
500: ElementBorderDefinitionPanel.this ,
501: TranslationManager
502: .getInstance()
503: .getTranslation("R",
504: "ElementBorderDefinitionChooser.Side"),
505: currentBorderDefinition
506: .getLeftSide());
507:
508: currentBorderDefinition = new ElementBorderDefinition(
509: sameBorderCheckBox.isSelected(),
510: currentBorderDefinition.getTopSide(),
511: currentBorderDefinition.getBottomSide(),
512: side,
513: currentBorderDefinition.getRightSide(),
514: currentBorderDefinition.getBreakSide(),
515: currentBorderDefinition.getTopLeftEdge(),
516: currentBorderDefinition.getTopRightEdge(),
517: currentBorderDefinition.getBottomLeftEdge(),
518: currentBorderDefinition
519: .getBottomRightEdge());
520: updateComponents();
521: }
522: });
523:
524: rightButton.addActionListener(new ActionListener() {
525: public void actionPerformed(@NotNull
526: ActionEvent e) {
527: ElementBorderDefinition.Side side = ElementBorderDefinitionSideChooser
528: .showBorderDefinitionChooser(
529: ElementBorderDefinitionPanel.this ,
530: TranslationManager
531: .getInstance()
532: .getTranslation("R",
533: "ElementBorderDefinitionChooser.Side"),
534: currentBorderDefinition
535: .getRightSide());
536:
537: currentBorderDefinition = new ElementBorderDefinition(
538: sameBorderCheckBox.isSelected(),
539: currentBorderDefinition.getTopSide(),
540: currentBorderDefinition.getBottomSide(),
541: currentBorderDefinition.getLeftSide(),
542: side,
543: currentBorderDefinition.getBreakSide(),
544: currentBorderDefinition.getTopLeftEdge(),
545: currentBorderDefinition.getTopRightEdge(),
546: currentBorderDefinition.getBottomLeftEdge(),
547: currentBorderDefinition
548: .getBottomRightEdge());
549: updateComponents();
550: }
551: });
552:
553: breakButton.addActionListener(new ActionListener() {
554: public void actionPerformed(@NotNull
555: ActionEvent e) {
556: ElementBorderDefinition.Side side = ElementBorderDefinitionSideChooser
557: .showBorderDefinitionChooser(
558: ElementBorderDefinitionPanel.this ,
559: TranslationManager
560: .getInstance()
561: .getTranslation("R",
562: "ElementBorderDefinitionChooser.Side"),
563: currentBorderDefinition
564: .getBreakSide());
565:
566: currentBorderDefinition = new ElementBorderDefinition(
567: sameBorderCheckBox.isSelected(),
568: currentBorderDefinition.getTopSide(),
569: currentBorderDefinition.getBottomSide(),
570: currentBorderDefinition.getLeftSide(),
571: currentBorderDefinition.getRightSide(),
572: side,
573: currentBorderDefinition.getTopLeftEdge(),
574: currentBorderDefinition.getTopRightEdge(),
575: currentBorderDefinition.getBottomLeftEdge(),
576: currentBorderDefinition
577: .getBottomRightEdge());
578: updateComponents();
579: }
580: });
581:
582: updateComponents();
583: }
584:
585: private void updateComponents() {
586: if (currentBorderDefinition.isSameBorderForAllSides()) {
587: topButton.setEnabled(true);
588: leftButton.setEnabled(false);
589: rightButton.setEnabled(false);
590: bottomButton.setEnabled(false);
591: breakButton.setEnabled(true);
592:
593: topLeftButton.setEnabled(true);
594: topRightButton.setEnabled(false);
595: bottomLeftButton.setEnabled(false);
596: bottomRightButton.setEnabled(false);
597:
598: topButton.setIcon(new BorderSideIcon(
599: currentBorderDefinition.getTopSide(), true));
600: leftButton.setIcon(new BorderSideIcon(
601: currentBorderDefinition.getTopSide(), false));
602: rightButton.setIcon(new BorderSideIcon(
603: currentBorderDefinition.getTopSide(), false));
604: bottomButton.setIcon(new BorderSideIcon(
605: currentBorderDefinition.getTopSide(), true));
606: breakButton.setIcon(new BorderSideIcon(
607: currentBorderDefinition.getBreakSide(), true));
608:
609: topLeftButton.setIcon(new BorderEdgeIcon(
610: currentBorderDefinition.getTopLeftEdge(),
611: currentBorderDefinition.getTopSide(), 1));
612: topRightButton.setIcon(new BorderEdgeIcon(
613: currentBorderDefinition.getTopLeftEdge(),
614: currentBorderDefinition.getTopSide(), 2));
615: bottomLeftButton.setIcon(new BorderEdgeIcon(
616: currentBorderDefinition.getTopLeftEdge(),
617: currentBorderDefinition.getTopSide(), 3));
618: bottomRightButton.setIcon(new BorderEdgeIcon(
619: currentBorderDefinition.getTopLeftEdge(),
620: currentBorderDefinition.getTopSide(), 4));
621: } else {
622: topButton.setEnabled(true);
623: leftButton.setEnabled(true);
624: rightButton.setEnabled(true);
625: bottomButton.setEnabled(true);
626: breakButton.setEnabled(true);
627:
628: topLeftButton.setEnabled(true);
629: topRightButton.setEnabled(true);
630: bottomLeftButton.setEnabled(true);
631: bottomRightButton.setEnabled(true);
632:
633: topButton.setIcon(new BorderSideIcon(
634: currentBorderDefinition.getTopSide(), true));
635: leftButton.setIcon(new BorderSideIcon(
636: currentBorderDefinition.getLeftSide(), false));
637: rightButton.setIcon(new BorderSideIcon(
638: currentBorderDefinition.getRightSide(), false));
639: bottomButton.setIcon(new BorderSideIcon(
640: currentBorderDefinition.getBottomSide(), true));
641: breakButton.setIcon(new BorderSideIcon(
642: currentBorderDefinition.getBreakSide(), true));
643:
644: topLeftButton.setIcon(new BorderEdgeIcon(
645: currentBorderDefinition.getTopLeftEdge(),
646: currentBorderDefinition.getTopSide(), 1));
647: topRightButton.setIcon(new BorderEdgeIcon(
648: currentBorderDefinition.getTopRightEdge(),
649: currentBorderDefinition.getTopSide(), 2));
650: bottomLeftButton.setIcon(new BorderEdgeIcon(
651: currentBorderDefinition.getBottomLeftEdge(),
652: currentBorderDefinition.getBottomSide(), 3));
653: bottomRightButton.setIcon(new BorderEdgeIcon(
654: currentBorderDefinition.getBottomRightEdge(),
655: currentBorderDefinition.getBottomSide(), 4));
656: }
657: }
658:
659: @NotNull
660: public ElementBorderDefinition getCurrentBorderDefinition() {
661: return currentBorderDefinition;
662: }
663: }
664:
665: private static class BorderEdgeIcon implements Icon {
666: @NotNull
667: private ElementBorderDefinition.Edge side;
668: @NotNull
669: private ElementBorderDefinition.Side adjacentSide;
670: private int edge;
671:
672: private BorderEdgeIcon(@NotNull
673: ElementBorderDefinition.Edge side, @NotNull
674: ElementBorderDefinition.Side adjacentSide, int edge) {
675: this .side = side;
676: this .adjacentSide = adjacentSide;
677: this .edge = edge;
678: }
679:
680: public void setEdge(@NotNull
681: ElementBorderDefinition.Edge side) {
682: this .side = side;
683: }
684:
685: public void setAdjacentSide(@NotNull
686: ElementBorderDefinition.Side adjacentSide) {
687: this .adjacentSide = adjacentSide;
688: }
689:
690: public void paintIcon(@NotNull
691: Component c, @NotNull
692: Graphics g, int x, int y) {
693: Graphics2D g2d = (Graphics2D) g;
694: Arc2D.Double a;
695: g2d.setRenderingHint(RenderingHints.KEY_ANTIALIASING,
696: RenderingHints.VALUE_ANTIALIAS_ON);
697: g2d.setColor(adjacentSide.getColor());
698: g2d.setStroke(adjacentSide.getStroke());
699:
700: if (edge == 1) {
701: a = new Arc2D.Double(x + 10, y + 10, 20, 20, 90, 90,
702: Arc2D.OPEN);
703: } else if (edge == 2) {
704: a = new Arc2D.Double(x - 10, y + 10, 20, 20, 0, 90,
705: Arc2D.OPEN);
706: } else if (edge == 3) {
707: a = new Arc2D.Double(x + 10, y - 10, 20, 20, 180, 90,
708: Arc2D.OPEN);
709: } else {
710: a = new Arc2D.Double(x - 10, y - 10, 20, 20, -90, 90,
711: Arc2D.OPEN);
712: }
713: g2d.draw(a);
714: }
715:
716: public int getIconWidth() {
717: return 20;
718: }
719:
720: public int getIconHeight() {
721: return 20;
722: }
723: }
724:
725: private static class BorderSideIcon implements Icon {
726: @NotNull
727: private ElementBorderDefinition.Side side;
728: private boolean horizontal;
729:
730: private BorderSideIcon(@NotNull
731: ElementBorderDefinition.Side side, boolean horizontal) {
732: this .side = side;
733: this .horizontal = horizontal;
734: }
735:
736: public void setSide(@NotNull
737: ElementBorderDefinition.Side side) {
738: this .side = side;
739: }
740:
741: public void paintIcon(@NotNull
742: Component c, @NotNull
743: Graphics g, int x, int y) {
744: Graphics2D g2d = (Graphics2D) g;
745: if (side.getType() != ElementBorderDefinition.BorderType.NONE) {
746: g2d.setStroke(side.getStroke());
747: g2d.setColor(side.getColor());
748: if (horizontal) {
749: g2d.drawLine(x, 10 + y, 100 + x, 10 + y);
750: } else {
751: g2d.drawLine(10 + x, y, 10 + x, 100 + y);
752: }
753: }
754: }
755:
756: public int getIconWidth() {
757: return horizontal ? 100 : 20;
758: }
759:
760: public int getIconHeight() {
761: return horizontal ? 20 : 100;
762: }
763: }
764: }
|