Index: openide/io/api/doc/changes/changes.xml =================================================================== RCS file: /cvs/openide/io/api/doc/changes/changes.xml,v --- openide/io/api/doc/changes/changes.xml 19 Jul 2006 06:53:58 -0000 1.7 +++ openide/io/api/doc/changes/changes.xml 22 Aug 2006 13:11:34 -0000 @@ -81,6 +81,24 @@ + + + Add ability to set icon into the output's tab + + + + + +

Adding a method to InputOutput that allows to set an icon to the output. +Most obvious usecase would be icon to denote the state of the output processing. + It's up to the implementation of output window to decide where to put the icon. The default implementation + puts it into the output tab title. +

+
+ + +
+ No need to require IOProvider token anymore Index: openide/io/src/org/openide/windows/IOProvider.java =================================================================== RCS file: /cvs/openide/io/src/org/openide/windows/IOProvider.java,v --- openide/io/src/org/openide/windows/IOProvider.java 19 Jul 2006 06:53:59 -0000 1.9 +++ openide/io/src/org/openide/windows/IOProvider.java 22 Aug 2006 13:11:34 -0000 @@ -26,6 +26,7 @@ import java.io.Reader; import java.io.StringWriter; import javax.swing.Action; +import javax.swing.Icon; import org.openide.util.Lookup; /** A factory for IO tabs shown in the output window. To create a new tab to @@ -163,6 +164,8 @@ public void setInputVisible(boolean value) {} public void setOutputVisible(boolean value) {} + + public void setIcon(Icon icn) {} } Index: openide/io/src/org/openide/windows/InputOutput.java =================================================================== RCS file: /cvs/openide/io/src/org/openide/windows/InputOutput.java,v --- openide/io/src/org/openide/windows/InputOutput.java 1 Jul 2006 09:08:15 -0000 1.12 +++ openide/io/src/org/openide/windows/InputOutput.java 22 Aug 2006 13:11:34 -0000 @@ -22,6 +22,7 @@ import java.io.InputStreamReader; import java.io.OutputStreamWriter; import java.io.Reader; +import javax.swing.Icon; import org.openide.util.io.NullOutputStream; import org.openide.util.io.NullInputStream; @@ -135,6 +136,12 @@ * @deprecated meaningless, does nothing */ public Reader flushReader(); + + /** + * Set the icon that represents the current state of the InputOutput. + * @since org.openide.io 1.12 + */ + public void setIcon(Icon icn); /** @deprecated Use {@link #NULL} instead. */ /*public static final*/ Reader nullReader = new InputStreamReader(new NullInputStream()); @@ -182,6 +189,9 @@ } public Reader flushReader() { return nullReader; + } + + public void setIcon(Icon icn) { } } Index: core/output2/src/org/netbeans/core/output2/Controller.java =================================================================== RCS file: /cvs/core/output2/src/org/netbeans/core/output2/Controller.java,v --- core/output2/src/org/netbeans/core/output2/Controller.java 1 Jul 2006 08:51:57 -0000 1.47 +++ core/output2/src/org/netbeans/core/output2/Controller.java 22 Aug 2006 13:11:34 -0000 @@ -1140,6 +1140,9 @@ // Undesirable in practice: win.requestVisibleForNewTab(); if (log) log ("Reset on " + tab + " tab displayable " + tab.isDisplayable() + " io " + io + " io.out " + io.out()); break; + case IOEvent.CMD_ICON : + win.setTabIcon(tab, io.getIcon()); + break; } } Index: core/output2/src/org/netbeans/core/output2/IOEvent.java =================================================================== RCS file: /cvs/core/output2/src/org/netbeans/core/output2/IOEvent.java,v --- core/output2/src/org/netbeans/core/output2/IOEvent.java 1 Jul 2006 08:51:58 -0000 1.6 +++ core/output2/src/org/netbeans/core/output2/IOEvent.java 22 Aug 2006 13:11:34 -0000 @@ -108,6 +108,12 @@ static final int CMD_DETACH = 11; /** + * change the icon on the tab.. + */ + static final int CMD_ICON = 12; + + + /** * Array of IDs for checking legal values and generating a string representing the event. */ private static final int[] IDS = new int[] { @@ -123,6 +129,7 @@ CMD_RESET, CMD_SET_TOOLBAR_ACTIONS, CMD_DETACH, + CMD_ICON }; /** Index: core/output2/src/org/netbeans/core/output2/NbIO.java =================================================================== RCS file: /cvs/core/output2/src/org/netbeans/core/output2/NbIO.java,v --- core/output2/src/org/netbeans/core/output2/NbIO.java 1 Jul 2006 08:51:58 -0000 1.13 +++ core/output2/src/org/netbeans/core/output2/NbIO.java 22 Aug 2006 13:11:34 -0000 @@ -48,6 +48,9 @@ private Action[] actions; private NbWriter out = null; + + private Icon icon; + /** Creates a new instance of NbIO * @param name The name of the IO * @param toolbarActions an optional set of toolbar actions @@ -245,6 +248,16 @@ public Reader flushReader() { return getIn(); } + + public void setIcon(Icon icn) { + icon = icn; + post (this, IOEvent.CMD_ICON, icn); + + } + + public Icon getIcon() { + return icon; + } class IOReader extends Reader { private boolean pristine = true; Index: core/output2/src/org/netbeans/core/output2/ui/AbstractOutputWindow.java =================================================================== RCS file: /cvs/core/output2/src/org/netbeans/core/output2/ui/AbstractOutputWindow.java,v --- core/output2/src/org/netbeans/core/output2/ui/AbstractOutputWindow.java 1 Jul 2006 08:52:00 -0000 1.13 +++ core/output2/src/org/netbeans/core/output2/ui/AbstractOutputWindow.java 22 Aug 2006 13:11:34 -0000 @@ -81,18 +81,23 @@ super.remove (aop); assert pane.getParent() != this; pane.add (aop); + setTabIcon(aop, (Icon)aop.getClientProperty("ICON")); pane.add (c); + setTabIcon((AbstractOutputTab)c, (Icon)((AbstractOutputTab)c).getClientProperty("ICON")); super.addImpl (pane, constraints, idx); updateSingletonName(null); revalidate(); } else if (pane.getParent() == this) { pane.add (c); + setTabIcon((AbstractOutputTab) c, (Icon)((AbstractOutputTab)c).getClientProperty("ICON")); revalidate(); } else { super.addImpl (c, constraints, idx); + setTabIcon((AbstractOutputTab) c, (Icon)((AbstractOutputTab)c).getClientProperty("ICON")); //#48819 - a bit obscure usecase, but revalidate() is call in the if branches above as well.. revalidate(); + } if (hadFocus) { //Do not call c.requestFocus() directly, it can be @@ -211,6 +216,16 @@ updateSingletonName(name); } tab.setName(name); + } + + public void setTabIcon(AbstractOutputTab tab, Icon icon) { + if (icon != null) { + tab.putClientProperty("ICON", icon); + if (pane.indexOfComponent(tab) != -1) { + pane.setIconAt(pane.indexOfComponent(tab), icon); + pane.setDisabledIconAt(pane.indexOfComponent(tab), icon); + } + } } public void requestFocus() {