This Bugzilla instance is a read-only archive of historic NetBeans bug reports. To report a bug in NetBeans please follow the project's instructions for reporting issues.

View | Details | Raw Unified | Return to bug 217509
Collapse All | Expand All

(-)core.windows/manifest.mf (-1 / +1 lines)
Lines 6-10 Link Here
6
OpenIDE-Module-Recommends: org.netbeans.core.windows.nativeaccess.NativeWindowSystem
6
OpenIDE-Module-Recommends: org.netbeans.core.windows.nativeaccess.NativeWindowSystem
7
AutoUpdate-Show-In-Client: false
7
AutoUpdate-Show-In-Client: false
8
AutoUpdate-Essential-Module: true
8
AutoUpdate-Essential-Module: true
9
OpenIDE-Module-Specification-Version: 2.53
9
OpenIDE-Module-Specification-Version: 2.54
10
10
(-)core.windows/nbproject/project.xml (-2 / +2 lines)
Lines 85-91 Link Here
85
                    <build-prerequisite/>
85
                    <build-prerequisite/>
86
                    <compile-dependency/>
86
                    <compile-dependency/>
87
                    <run-dependency>
87
                    <run-dependency>
88
                        <specification-version>1.34</specification-version>
88
                        <specification-version>1.38</specification-version>
89
                    </run-dependency>
89
                    </run-dependency>
90
                </dependency>
90
                </dependency>
91
                <dependency>
91
                <dependency>
Lines 173-179 Link Here
173
                    <build-prerequisite/>
173
                    <build-prerequisite/>
174
                    <compile-dependency/>
174
                    <compile-dependency/>
175
                    <run-dependency>
175
                    <run-dependency>
176
                        <specification-version>6.57</specification-version>
176
                        <specification-version>6.58</specification-version>
177
                    </run-dependency>
177
                    </run-dependency>
178
                </dependency>
178
                </dependency>
179
            </module-dependencies>
179
            </module-dependencies>
(-)core.windows/src/org/netbeans/core/windows/Central.java (+14 lines)
Lines 113-118 Link Here
113
            new ViewRequest(modeName, View.TOPCOMPONENT_CANCEL_REQUEST_ATTENTION, tc, tc));
113
            new ViewRequest(modeName, View.TOPCOMPONENT_CANCEL_REQUEST_ATTENTION, tc, tc));
114
    }    
114
    }    
115
    
115
    
116
    /**
117
     * Turns tab highlight on/off
118
     * @param mode
119
     * @param tc
120
     * @param highlight 
121
     * @since 2.54
122
     */
123
    public void topComponentAttentionHighlight (ModeImpl mode, TopComponent tc, boolean highlight) {
124
        String modeName = getModeName(mode);
125
        viewRequestor.scheduleRequest (
126
            new ViewRequest(modeName, highlight ? View.TOPCOMPONENT_ATTENTION_HIGHLIGHT_ON
127
                                                : View.TOPCOMPONENT_ATTENTION_HIGHLIGHT_OFF, tc, tc));
128
    }
129
    
116
    /////////////////////
130
    /////////////////////
117
    // Mutators >>
131
    // Mutators >>
118
    /** Sets visible or invisible window system and requests view accordingly. */
132
    /** Sets visible or invisible window system and requests view accordingly. */
(-)core.windows/src/org/netbeans/core/windows/view/DefaultView.java (+19 lines)
Lines 482-487 Link Here
482
                    Logger.getLogger(DefaultView.class.getName()).fine(
482
                    Logger.getLogger(DefaultView.class.getName()).fine(
483
                        "Could not find mode " + viewEvent.getSource());
483
                        "Could not find mode " + viewEvent.getSource());
484
                }
484
                }
485
            } else if (changeType == View.TOPCOMPONENT_ATTENTION_HIGHLIGHT_ON
486
                    || changeType == View.TOPCOMPONENT_ATTENTION_HIGHLIGHT_OFF) {
487
                if (DEBUG) {
488
                    debugLog("Top component attention highlight"); //NOI18N
489
                }
490
                ModeView modeView = hierarchy.getModeViewForAccessor(wsa.findModeAccessor((String)viewEvent.getSource())); // XXX
491
                if (modeView != null) {
492
                    TopComponent tc = (TopComponent) viewEvent.getNewValue();
493
                    if (tc == null) {
494
                        throw new NullPointerException ("Top component is null for attention cancellation request"); //NOI18N
495
                    }
496
                    //make sure the TC is still opened in the given mode container
497
                    if( modeView.getTopComponents().contains( tc ) ) {
498
                        modeView.setAttentionHighlight(tc, changeType == View.TOPCOMPONENT_ATTENTION_HIGHLIGHT_ON);
499
                    }
500
                } else {
501
                    Logger.getLogger(DefaultView.class.getName()).fine(
502
                        "Could not find mode " + viewEvent.getSource());
503
                }
485
            } else if (changeType == View.TOPCOMPONENT_SHOW_BUSY || changeType == View.TOPCOMPONENT_HIDE_BUSY ) {
504
            } else if (changeType == View.TOPCOMPONENT_SHOW_BUSY || changeType == View.TOPCOMPONENT_HIDE_BUSY ) {
486
                if (DEBUG) {
505
                if (DEBUG) {
487
                    debugLog("Top component show/hide busy"); //NOI18N
506
                    debugLog("Top component show/hide busy"); //NOI18N
(-)core.windows/src/org/netbeans/core/windows/view/ModeContainer.java (+8 lines)
Lines 90-95 Link Here
90
90
91
    public void cancelRequestAttention(TopComponent tc);
91
    public void cancelRequestAttention(TopComponent tc);
92
92
93
    /**
94
     * 
95
     * @param tc
96
     * @param highlight 
97
     * @since 2.54
98
     */
99
    public void setAttentionHighlight(TopComponent tc, boolean highlight);
100
93
    public void makeBusy(TopComponent tc, boolean busy);
101
    public void makeBusy(TopComponent tc, boolean busy);
94
}
102
}
95
103
(-)core.windows/src/org/netbeans/core/windows/view/ModeView.java (+4 lines)
Lines 188-193 Link Here
188
        container.cancelRequestAttention(tc);
188
        container.cancelRequestAttention(tc);
189
    }
189
    }
190
190
191
    public void setAttentionHighlight (TopComponent tc, boolean highlight) {
192
        container.setAttentionHighlight(tc, highlight);
193
    }
194
191
    public void makeBusy(TopComponent tc, boolean busy) {
195
    public void makeBusy(TopComponent tc, boolean busy) {
192
        container.makeBusy(tc, busy);
196
        container.makeBusy(tc, busy);
193
    }
197
    }
(-)core.windows/src/org/netbeans/core/windows/view/ui/DefaultSeparateContainer.java (+4 lines)
Lines 115-120 Link Here
115
        //not implemented
115
        //not implemented
116
    }
116
    }
117
117
118
    public void setAttentionHighlight(TopComponent tc, boolean highlight) {
119
        tabbedHandler.setAttentionHighlight( tc, highlight );
120
    }
121
118
    @Override
122
    @Override
119
    public void makeBusy(TopComponent tc, boolean busy) {
123
    public void makeBusy(TopComponent tc, boolean busy) {
120
        tabbedHandler.makeBusy( tc, busy );
124
        tabbedHandler.makeBusy( tc, busy );
(-)core.windows/src/org/netbeans/core/windows/view/ui/DefaultSplitContainer.java (+5 lines)
Lines 96-101 Link Here
96
    }
96
    }
97
97
98
    @Override
98
    @Override
99
    public void setAttentionHighlight (TopComponent tc, boolean highlight) {
100
        tabbedHandler.setAttentionHighlight(tc, highlight);
101
    }
102
103
    @Override
99
    public void makeBusy(TopComponent tc, boolean busy) {
104
    public void makeBusy(TopComponent tc, boolean busy) {
100
        tabbedHandler.makeBusy( tc, busy );
105
        tabbedHandler.makeBusy( tc, busy );
101
    }
106
    }
(-)core.windows/src/org/netbeans/core/windows/view/ui/slides/SlideBarContainer.java (+5 lines)
Lines 108-113 Link Here
108
    }
108
    }
109
109
110
    @Override
110
    @Override
111
    public void setAttentionHighlight( TopComponent tc, boolean highlight ) {
112
        tabbedHandler.setAttentionHighlight (tc, highlight);
113
    }
114
115
    @Override
111
    public void makeBusy(TopComponent tc, boolean busy) {
116
    public void makeBusy(TopComponent tc, boolean busy) {
112
        tabbedHandler.makeBusy( tc, busy );
117
        tabbedHandler.makeBusy( tc, busy );
113
    }
118
    }
(-)core.windows/src/org/netbeans/core/windows/view/ui/TabbedHandler.java (+4 lines)
Lines 144-149 Link Here
144
        tabbed.cancelRequestAttention(tc);
144
        tabbed.cancelRequestAttention(tc);
145
    }
145
    }
146
146
147
    public void setAttentionHighlight (TopComponent tc, boolean highlight) {
148
        tabbed.setAttentionHighlight(tc, highlight);
149
    }
150
147
    public void makeBusy( TopComponent tc, boolean busy ) {
151
    public void makeBusy( TopComponent tc, boolean busy ) {
148
        tabbed.makeBusy( tc, busy );
152
        tabbed.makeBusy( tc, busy );
149
    }
153
    }
(-)core.windows/src/org/netbeans/core/windows/view/ui/tabcontrol/AbstractTabbedImpl.java (+20 lines)
Lines 120-126 Link Here
120
120
121
    protected abstract void cancelRequestAttention( int tabIndex );
121
    protected abstract void cancelRequestAttention( int tabIndex );
122
122
123
123
    @Override
124
    @Override
125
    public final void setAttentionHighlight( TopComponent tc, boolean highlight ) {
126
        int idx = indexOf( tc );
127
        if( idx >= 0 ) {
128
            setAttentionHighlight( idx, highlight );
129
        } else {
130
            throw new IllegalArgumentException( "TopComponent " + tc
131
                    + " is not a child of this container" ); //NOI18N
132
        }
133
    }
134
135
    /**
136
     *
137
     * @param tabIndex
138
     * @param highlight
139
     * @since 2.54
140
     */
141
    protected abstract void setAttentionHighlight( int tabIndex, boolean highlight );
142
143
    @Override
124
    public final void insertComponent( String name, javax.swing.Icon icon, Component comp, String toolTip, int position ) {
144
    public final void insertComponent( String name, javax.swing.Icon icon, Component comp, String toolTip, int position ) {
125
        TabData td = new TabData( comp, icon, name, toolTip );
145
        TabData td = new TabData( comp, icon, name, toolTip );
126
146
(-)core.windows/src/org/netbeans/core/windows/view/ui/tabcontrol/JTabbedPaneAdapter.java (+5 lines)
Lines 189-194 Link Here
189
        }
189
        }
190
190
191
        @Override
191
        @Override
192
        protected void setAttentionHighlight( int tabIndex, boolean highlight ) {
193
            JTabbedPaneAdapter.this.setAttentionHighlight( tabIndex, highlight );
194
        }
195
196
        @Override
192
        protected int dropIndexOfPoint( Point location ) {
197
        protected int dropIndexOfPoint( Point location ) {
193
            return JTabbedPaneAdapter.this.dropIndexOfPoint( location );
198
            return JTabbedPaneAdapter.this.dropIndexOfPoint( location );
194
        }
199
        }
(-)core.windows/src/org/netbeans/core/windows/view/ui/tabcontrol/TabbedAdapter.java (+5 lines)
Lines 299-304 Link Here
299
        }
299
        }
300
300
301
        @Override
301
        @Override
302
        protected void setAttentionHighlight( int tabIndex, boolean highlight ) {
303
            TabbedAdapter.this.setAttentionHighlight( tabIndex, highlight );
304
        }
305
306
        @Override
302
        protected int dropIndexOfPoint( Point location ) {
307
        protected int dropIndexOfPoint( Point location ) {
303
            return TabbedAdapter.this.dropIndexOfPoint( location );
308
            return TabbedAdapter.this.dropIndexOfPoint( location );
304
        }
309
        }
(-)core.windows/src/org/netbeans/core/windows/view/ui/tabcontrol/tabbedpane/NBTabbedPane.java (+10 lines)
Lines 268-273 Link Here
268
        stopBlinking();
268
        stopBlinking();
269
    }
269
    }
270
270
271
    /**
272
     *
273
     * @param tabIndex
274
     * @param highlight
275
     * @since 2.54
276
     */
277
    public final void setAttentionHighlight( int tabIndex, boolean highlight ) {
278
        //TODO implement
279
    }
280
271
    public final void setActive( boolean active ) {
281
    public final void setActive( boolean active ) {
272
        if( active != this.active ) {
282
        if( active != this.active ) {
273
            this.active = active;
283
            this.active = active;
(-)core.windows/src/org/netbeans/core/windows/view/View.java (-1 / +9 lines)
Lines 107-113 Link Here
107
    
107
    
108
    public int TOPCOMPONENT_REQUEST_ATTENTION = 63;
108
    public int TOPCOMPONENT_REQUEST_ATTENTION = 63;
109
    public int TOPCOMPONENT_CANCEL_REQUEST_ATTENTION = 64;
109
    public int TOPCOMPONENT_CANCEL_REQUEST_ATTENTION = 64;
110
    public int CHANGE_MAXIMIZE_TOPCOMPONENT_SLIDE_IN = 65;
110
    /**
111
     * @since 2.54
112
     */
113
    public int TOPCOMPONENT_ATTENTION_HIGHLIGHT_ON = 65;
114
    /**
115
     * @since 2.54
116
     */
117
    public int TOPCOMPONENT_ATTENTION_HIGHLIGHT_OFF = 66;
118
    public int CHANGE_MAXIMIZE_TOPCOMPONENT_SLIDE_IN = 67;
111
119
112
    //toggle TopComponent busy
120
    //toggle TopComponent busy
113
    public int TOPCOMPONENT_SHOW_BUSY = 70;
121
    public int TOPCOMPONENT_SHOW_BUSY = 70;
(-)core.windows/src/org/netbeans/core/windows/view/ViewEvent.java (+2 lines)
Lines 129-134 Link Here
129
            case View.CHANGE_VISIBILITY_CHANGED : typeStr = "CHANGE_VISIBILITY_CHANGED"; break; //NOI18N
129
            case View.CHANGE_VISIBILITY_CHANGED : typeStr = "CHANGE_VISIBILITY_CHANGED"; break; //NOI18N
130
            case View.TOPCOMPONENT_REQUEST_ATTENTION : typeStr = "TOPCOMPONENT_REQUEST_ATTENTION"; break; //NOI18N
130
            case View.TOPCOMPONENT_REQUEST_ATTENTION : typeStr = "TOPCOMPONENT_REQUEST_ATTENTION"; break; //NOI18N
131
            case View.TOPCOMPONENT_CANCEL_REQUEST_ATTENTION : typeStr = "TOPCOMPONENT_CANCEL_REQUEST_ATTENTION"; break; //NOI18N
131
            case View.TOPCOMPONENT_CANCEL_REQUEST_ATTENTION : typeStr = "TOPCOMPONENT_CANCEL_REQUEST_ATTENTION"; break; //NOI18N
132
            case View.TOPCOMPONENT_ATTENTION_HIGHLIGHT_OFF : typeStr = "TOPCOMPONENT_ATTENTION_HIGHLIGHT_OFF"; break; //NOI18N
133
            case View.TOPCOMPONENT_ATTENTION_HIGHLIGHT_ON : typeStr = "TOPCOMPONENT_ATTENTION_HIGHLIGHT_ON"; break; //NOI18N
132
            case View.TOPCOMPONENT_SHOW_BUSY : typeStr = "TOPCOMPONENT_SHOW_BUSY"; break; //NOI18N
134
            case View.TOPCOMPONENT_SHOW_BUSY : typeStr = "TOPCOMPONENT_SHOW_BUSY"; break; //NOI18N
133
            case View.TOPCOMPONENT_HIDE_BUSY : typeStr = "TOPCOMPONENT_HIDE_BUSY"; break; //NOI18N
135
            case View.TOPCOMPONENT_HIDE_BUSY : typeStr = "TOPCOMPONENT_HIDE_BUSY"; break; //NOI18N
134
        }
136
        }
(-)core.windows/src/org/netbeans/core/windows/ViewRequest.java (+6 lines)
Lines 152-157 Link Here
152
            case  View.TOPCOMPONENT_CANCEL_REQUEST_ATTENTION :
152
            case  View.TOPCOMPONENT_CANCEL_REQUEST_ATTENTION :
153
                tp = "TOPCOMPONENT_CANCEL_REQUEST_ATTENTION"; //NOI18N
153
                tp = "TOPCOMPONENT_CANCEL_REQUEST_ATTENTION"; //NOI18N
154
                break;
154
                break;
155
            case  View.TOPCOMPONENT_ATTENTION_HIGHLIGHT_ON :
156
                tp = "TOPCOMPONENT_ATTENTION_HIGHLIGHT_ON"; //NOI18N
157
                break;
158
            case  View.TOPCOMPONENT_ATTENTION_HIGHLIGHT_OFF :
159
                tp = "TOPCOMPONENT_ATTENTION_HIGHLIGHT_OFF"; //NOI18N
160
                break;
155
            default :
161
            default :
156
                tp = "UNKNOWN";
162
                tp = "UNKNOWN";
157
                break;
163
                break;
(-)core.windows/src/org/netbeans/core/windows/ViewRequestor.java (-1 / +3 lines)
Lines 156-162 Link Here
156
            || type == View.CHANGE_DND_PERFORMED
156
            || type == View.CHANGE_DND_PERFORMED
157
            || type == View.CHANGE_UI_UPDATE
157
            || type == View.CHANGE_UI_UPDATE
158
            || type == View.TOPCOMPONENT_CANCEL_REQUEST_ATTENTION
158
            || type == View.TOPCOMPONENT_CANCEL_REQUEST_ATTENTION
159
            || type == View.TOPCOMPONENT_REQUEST_ATTENTION;
159
            || type == View.TOPCOMPONENT_REQUEST_ATTENTION
160
            || type == View.TOPCOMPONENT_ATTENTION_HIGHLIGHT_OFF
161
            || type == View.TOPCOMPONENT_ATTENTION_HIGHLIGHT_ON;
160
            
162
            
161
        synchronized(requests) {
163
        synchronized(requests) {
162
            Object oldValue = null;
164
            Object oldValue = null;
(-)core.windows/src/org/netbeans/core/windows/WindowManagerImpl.java (+7 lines)
Lines 159-164 Link Here
159
        central.topComponentCancelRequestAttention(mode, tc);
159
        central.topComponentCancelRequestAttention(mode, tc);
160
    }
160
    }
161
161
162
    @Override
163
    public void topComponentAttentionHighlight(TopComponent tc, boolean highlight) {
164
        ModeImpl mode = (ModeImpl) findMode(tc);
165
166
        central.topComponentAttentionHighlight(mode, tc, highlight);
167
    }
168
162
    /////////////////////////
169
    /////////////////////////
163
    // API impelementation >>
170
    // API impelementation >>
164
    /////////////////////////
171
    /////////////////////////
(-)o.n.swing.tabcontrol/apichanges.xml (+21 lines)
Lines 109-114 Link Here
109
109
110
<changes>
110
<changes>
111
111
112
    <change id="attentionhighlight">
113
      <api name="tabcontrol"/>
114
      <summary>Allow a tab to be permanently highlighted until user activates it.</summary>
115
      <version major="1" minor="38"/>
116
      <date day="28" month="8" year="2012"/>
117
      <author login="saubrecht"/>
118
      <compatibility addition="yes" binary="compatible" deprecation="no"/>
119
      <description>
120
        There's a new method <code>void setSwitcherItems(SwitcherTableItems[],int)</code> in
121
        <code>SwitcherTable</code> class which allows to change the content of document switcher
122
        popup.
123
      </description>
124
      <class package="org.netbeans.swing.tabcontrol" name="TabbedContainer"/>
125
      <class package="org.netbeans.swing.tabcontrol" name="TabbedContainerUI"/>
126
      <class package="org.netbeans.swing.tabcontrol" name="TabDisplayerUI"/>
127
      <class package="org.netbeans.swing.tabcontrol" name="TabDisplayer"/>
128
      <class package="org.netbeans.swing.tabcontrol.customtabs" name="Tabbed"/>
129
      <class package="org.netbeans.swing.tabcontrol.plaf" name="TabState"/>
130
      <issue number="217509"/>
131
    </change>
132
112
    <change id="documentswitcher">
133
    <change id="documentswitcher">
113
      <api name="popupswitcher"/>
134
      <api name="popupswitcher"/>
114
      <summary>Allow changes in SwitcherTable content.</summary>
135
      <summary>Allow changes in SwitcherTable content.</summary>
(-)o.n.swing.tabcontrol/manifest.mf (-1 / +1 lines)
Lines 1-6 Link Here
1
Manifest-Version: 1.0
1
Manifest-Version: 1.0
2
OpenIDE-Module-Localizing-Bundle: org/netbeans/swing/tabcontrol/Bundle.properties
2
OpenIDE-Module-Localizing-Bundle: org/netbeans/swing/tabcontrol/Bundle.properties
3
OpenIDE-Module: org.netbeans.swing.tabcontrol
3
OpenIDE-Module: org.netbeans.swing.tabcontrol
4
OpenIDE-Module-Specification-Version: 1.37
4
OpenIDE-Module-Specification-Version: 1.38
5
AutoUpdate-Essential-Module: true
5
AutoUpdate-Essential-Module: true
6
6
(-)o.n.swing.tabcontrol/src/org/netbeans/swing/tabcontrol/customtabs/Tabbed.java (+8 lines)
Lines 73-78 Link Here
73
73
74
    public abstract void cancelRequestAttention(TopComponent tc);
74
    public abstract void cancelRequestAttention(TopComponent tc);
75
    
75
    
76
    /**
77
     * Turn tab highlight on/off
78
     * @param tab
79
     * @since 1.38
80
     */
81
    public void setAttentionHighlight(TopComponent tc, boolean highlight) {
82
    }
83
    
76
    public abstract void addTopComponent(String name, Icon icon, TopComponent tc, String toolTip);
84
    public abstract void addTopComponent(String name, Icon icon, TopComponent tc, String toolTip);
77
85
78
    public abstract void insertComponent(String name, Icon icon, Component comp, String toolTip, int position);
86
    public abstract void insertComponent(String name, Icon icon, Component comp, String toolTip, int position);
(-)o.n.swing.tabcontrol/src/org/netbeans/swing/tabcontrol/plaf/AbstractTabCellRenderer.java (-1 / +11 lines)
Lines 241-250 Link Here
241
    }
241
    }
242
    
242
    
243
    protected final boolean isAttention() {
243
    protected final boolean isAttention() {
244
        return (state & TabState.ATTENTION) != 0;
244
        return (state & TabState.ATTENTION) != 0
245
                || (state & TabState.HIGHLIGHT) != 0;
245
    }
246
    }
246
247
247
    /**
248
    /**
249
     * 
250
     * @return True if the tab should be highlighted, false otherwise.
251
     * @since 1.38
252
     */
253
    protected final boolean isHighlight() {
254
        return (state & TabState.HIGHLIGHT) != 0;
255
    }
256
257
    /**
248
     * Convenience getter to determine if the current state indicates
258
     * Convenience getter to determine if the current state indicates
249
     * that the renderer is currently configured appears to the left of
259
     * that the renderer is currently configured appears to the left of
250
     * the selected tab.
260
     * the selected tab.
(-)o.n.swing.tabcontrol/src/org/netbeans/swing/tabcontrol/plaf/AbstractViewTabDisplayerUI.java (-1 / +23 lines)
Lines 664-673 Link Here
664
    protected boolean isAttention (int tab) {
664
    protected boolean isAttention (int tab) {
665
        if( tab < 0 )
665
        if( tab < 0 )
666
            return false;
666
            return false;
667
        return (tabState.getState(tab) & TabState.ATTENTION) != 0;
667
        return (tabState.getState(tab) & TabState.ATTENTION) != 0
668
                || (tabState.getState(tab) & TabState.HIGHLIGHT) != 0;
668
    }
669
    }
669
    
670
    
671
    /**
672
     * 
673
     * @param tab
674
     * @return True to highlight the given tab, false otherwise.
675
     * @since 1.38
676
     */
677
    protected boolean isHighlight (int tab) {
678
        if( tab < 0 )
679
            return false;
680
        return (tabState.getState(tab) & TabState.HIGHLIGHT) != 0;
681
    }
670
682
683
671
    @Override
684
    @Override
672
    protected void requestAttention (int tab) {
685
    protected void requestAttention (int tab) {
673
        tabState.addAlarmTab(tab);
686
        tabState.addAlarmTab(tab);
Lines 678-683 Link Here
678
        tabState.removeAlarmTab(tab);
691
        tabState.removeAlarmTab(tab);
679
    }
692
    }
680
    
693
    
694
    @Override
695
    protected void setAttentionHighlight (int tab, boolean highlight) {
696
        if( highlight ) {
697
            tabState.addHighlightTab(tab);
698
        } else {
699
            tabState.removeHighlightTab(tab);
700
        }
701
    }
702
    
681
    final boolean isUseStretchingTabs() {
703
    final boolean isUseStretchingTabs() {
682
        if( Boolean.getBoolean("winsys.stretching_view_tabs") ) //NOI18N
704
        if( Boolean.getBoolean("winsys.stretching_view_tabs") ) //NOI18N
683
            return true;
705
            return true;
(-)o.n.swing.tabcontrol/src/org/netbeans/swing/tabcontrol/plaf/BasicTabDisplayerUI.java (-1 / +9 lines)
Lines 528-533 Link Here
528
        tabState.removeAlarmTab(tab);
528
        tabState.removeAlarmTab(tab);
529
    }
529
    }
530
    
530
    
531
    @Override
532
    protected final void setAttentionHighlight (int tab, boolean highlight) {
533
        if( highlight ) {
534
            tabState.addHighlightTab(tab);
535
        } else {
536
            tabState.removeHighlightTab(tab);
537
        }
538
    }
531
539
532
    @Override
540
    @Override
533
    protected void modelChanged() {
541
    protected void modelChanged() {
Lines 537-543 Link Here
537
        //sync
545
        //sync
538
        int idx = selectionModel.getSelectedIndex();
546
        int idx = selectionModel.getSelectedIndex();
539
        tabState.setSelected(idx);
547
        tabState.setSelected(idx);
540
        tabState.pruneAlarmTabs(displayer.getModel().size());
548
        tabState.pruneTabs(displayer.getModel().size());
541
        super.modelChanged();
549
        super.modelChanged();
542
    }
550
    }
543
551
(-)o.n.swing.tabcontrol/src/org/netbeans/swing/tabcontrol/plaf/DefaultTabbedContainerUI.java (+5 lines)
Lines 701-706 Link Here
701
        tabDisplayer.cancelRequestAttention(tab);
701
        tabDisplayer.cancelRequestAttention(tab);
702
    }
702
    }
703
    
703
    
704
    @Override
705
    protected void setAttentionHighlight (int tab, boolean highlight) {
706
        tabDisplayer.setAttentionHighlight(tab, highlight);
707
    }
708
    
704
    public void setShowCloseButton (boolean val) {
709
    public void setShowCloseButton (boolean val) {
705
        tabDisplayer.setShowCloseButton(val);
710
        tabDisplayer.setShowCloseButton(val);
706
    }
711
    }
(-)o.n.swing.tabcontrol/src/org/netbeans/swing/tabcontrol/plaf/TabState.java (-14 / +207 lines)
Lines 210-220 Link Here
210
     * @since 1.34
210
     * @since 1.34
211
     */
211
     */
212
    public static final int BUSY = 2*32768;
212
    public static final int BUSY = 2*32768;
213
213
    /**
214
    /**
215
     * Indicates that the tab should be highlighted to draw user's attention.
216
     * @since 1.38
217
     */
218
    public static final int HIGHLIGHT = 2*BUSY;
219
    /**
214
     * Indicates the last constant defined - renderers that wish to add their
220
     * Indicates the last constant defined - renderers that wish to add their
215
     * own bitmasks should use multiples of this number
221
     * own bitmasks should use multiples of this number
216
     */
222
     */
217
    public static int STATE_LAST = BUSY;
223
    public static int STATE_LAST = HIGHLIGHT;
218
224
219
225
220
    private int pressedIndex = -1;
226
    private int pressedIndex = -1;
Lines 297-302 Link Here
297
        if (isAlarmTab(tab)) {
303
        if (isAlarmTab(tab)) {
298
            result |= ATTENTION;
304
            result |= ATTENTION;
299
        }
305
        }
306
        if (isHighlightTab( tab)) {
307
            result |= HIGHLIGHT;
308
        }
300
        return result;
309
        return result;
301
    }
310
    }
302
    
311
    
Lines 402-407 Link Here
402
        selectedIndex = i;
411
        selectedIndex = i;
403
        curr = i;
412
        curr = i;
404
        removeAlarmTab(i);
413
        removeAlarmTab(i);
414
        removeHighlightTab(i);
405
        possibleChange(prev, curr, SELECTED);
415
        possibleChange(prev, curr, SELECTED);
406
        return prev;
416
        return prev;
407
    }
417
    }
Lines 431-436 Link Here
431
        active = b;
441
        active = b;
432
        possibleChange(prev, b, ACTIVE);
442
        possibleChange(prev, b, ACTIVE);
433
        removeAlarmTab(selectedIndex);
443
        removeAlarmTab(selectedIndex);
444
        removeHighlightTab(selectedIndex);
434
        return prev;
445
        return prev;
435
    }
446
    }
436
    
447
    
Lines 457-462 Link Here
457
        }
468
        }
458
    }
469
    }
459
    
470
    
471
    private final HashSet<Integer> highlightTabs = new HashSet<Integer>(6);
472
473
    private boolean isHighlightTab(int tab) {
474
        return highlightTabs.contains( tab ) && !alarmTabs.contains( tab );
475
    }
476
477
    /**
478
     * Highlight the given tab.
479
     * @param highlightTab
480
     * @since 1.38
481
     */
482
    public final void addHighlightTab(int highlightTab) {
483
        boolean added = highlightTabs.add(highlightTab);
484
        if (added) {
485
            repaintTab (highlightTab);
486
        }
487
    }
488
460
    /** Remove a tab to the list of those which should "flash" or otherwise give
489
    /** Remove a tab to the list of those which should "flash" or otherwise give
461
     * some notification to the user to get their attention */
490
     * some notification to the user to get their attention */
462
    public final void removeAlarmTab (int alarmTab) {
491
    public final void removeAlarmTab (int alarmTab) {
Lines 475-480 Link Here
475
        }
504
        }
476
    }
505
    }
477
    
506
    
507
    /**
508
     * Turn tab highlight off.
509
     * @param highlightTab
510
     * @since 1.38
511
     */
512
    public final void removeHighlightTab(int highlightTab) {
513
        boolean removed = highlightTabs.remove( highlightTab );
514
        if( removed ) {
515
            repaintTab( highlightTab );
516
        }
517
    }
518
    
478
    private Timer alarmTimer = null;
519
    private Timer alarmTimer = null;
479
    private boolean attentionToggle = false;
520
    private boolean attentionToggle = false;
480
    private void startAlarmTimer() {
521
    private void startAlarmTimer() {
Lines 519-529 Link Here
519
    }
560
    }
520
    
561
    
521
    boolean hasAlarmTabs() {
562
    boolean hasAlarmTabs() {
522
        return alarmTabs != null && !alarmTabs.isEmpty();
563
        return !alarmTabs.isEmpty();
523
    }
564
    }
524
    
565
    
525
    void pruneAlarmTabs(int max) {
566
    boolean hasHighlightTabs() {
526
        if (!hasAlarmTabs()) {
567
        return !highlightTabs.isEmpty();
568
    }
569
    
570
    void pruneTabs(int max) {
571
        if (!(hasAlarmTabs() || hasHighlightTabs())) {
527
            return;
572
            return;
528
        }
573
        }
529
        for (Iterator i=alarmTabs.iterator(); i.hasNext();) {
574
        for (Iterator i=alarmTabs.iterator(); i.hasNext();) {
Lines 531-536 Link Here
531
                i.remove();
576
                i.remove();
532
            }
577
            }
533
        }
578
        }
579
        for (Iterator i=highlightTabs.iterator(); i.hasNext();) {
580
            if (((Integer) i.next()).intValue() >= max) {
581
                i.remove();
582
            }
583
        }
534
        if (alarmTabs.isEmpty()) {
584
        if (alarmTabs.isEmpty()) {
535
            stopAlarmTimer();
585
            stopAlarmTimer();
536
        }
586
        }
Lines 545-553 Link Here
545
    //Handling of insertions/deletions where we'll need to update the 
595
    //Handling of insertions/deletions where we'll need to update the 
546
    //list of blinking tabs here.
596
    //list of blinking tabs here.
547
    void intervalAdded (ListDataEvent evt) {
597
    void intervalAdded (ListDataEvent evt) {
548
        if (!hasAlarmTabs()) return;
549
        int start = evt.getIndex0();
598
        int start = evt.getIndex0();
550
        int end = evt.getIndex1();
599
        int end = evt.getIndex1();
600
        if (hasAlarmTabs()) {
551
        int[] alarms = (int[]) Utilities.toPrimitiveArray((Integer[]) alarmTabs.toArray(new Integer[0]));
601
        int[] alarms = (int[]) Utilities.toPrimitiveArray((Integer[]) alarmTabs.toArray(new Integer[0]));
552
        boolean changed = false;
602
        boolean changed = false;
553
        for (int i=0; i < alarms.length; i++) {
603
        for (int i=0; i < alarms.length; i++) {
Lines 563-571 Link Here
563
            }
613
            }
564
        }
614
        }
565
    }
615
    }
616
        if( hasHighlightTabs() ) {
617
            int[] highlights = (int[]) Utilities.toPrimitiveArray((Integer[]) highlightTabs.toArray(new Integer[0]));
618
            boolean changed = false;
619
            for (int i=0; i < highlights.length; i++) {
620
                if (highlights[i] >= start) {
621
                    highlights[i] += (end - start) + 1;
622
                    changed = true;
623
                }
624
            }
625
            if (changed) {
626
                highlightTabs.clear();
627
                for (int i=0; i < highlights.length; i++) {
628
                    addHighlightTab(highlights[i]);
629
                }
630
            }
631
        }
632
    }
566
    
633
    
567
    void intervalRemoved (ListDataEvent evt) {
634
    void intervalRemoved (ListDataEvent evt) {
568
        if (!hasAlarmTabs()) return;
635
        if (hasAlarmTabs()) {
569
        int start = evt.getIndex0();
636
        int start = evt.getIndex0();
570
        int end = evt.getIndex1();
637
        int end = evt.getIndex1();
571
        
638
        
Lines 625-633 Link Here
625
            }
692
            }
626
        }
693
        }
627
    }
694
    }
695
        if( hasAlarmTabs() ) {
696
            int start = evt.getIndex0();
697
            int end = evt.getIndex1();
628
    
698
    
699
            int[] highlights = (int[]) Utilities.toPrimitiveArray((Integer[]) highlightTabs.toArray(new Integer[0]));
700
            Arrays.sort(highlights);
701
702
            boolean changed = false;
703
            for (int i=0; i < highlights.length; i++) {
704
                if (highlights[i] >= start && highlights[i] <= end) {
705
                    highlights[i] = -1;
706
                    changed = true;
707
                }
708
            }
709
            for (int i=0; i < highlights.length; i++) {
710
                if (highlights[i] > end) {
711
                    highlights[i] -= (end - start) + 1;
712
                    changed = true;
713
                }
714
            }
715
            if (changed) {
716
                highlightTabs.clear();
717
                for (int i=0; i < highlights.length; i++) {
718
                    if (highlights[i] != -1) {
719
                        addHighlightTab(highlights[i]);
720
                    }
721
                }
722
            }
723
        }
724
    }
725
    
629
    void indicesAdded (ComplexListDataEvent e) {
726
    void indicesAdded (ComplexListDataEvent e) {
630
        if (!hasAlarmTabs()) return;
727
        if (hasAlarmTabs()) {
631
        int[] alarms = (int[]) Utilities.toPrimitiveArray((Integer[]) alarmTabs.toArray(new Integer[0]));
728
        int[] alarms = (int[]) Utilities.toPrimitiveArray((Integer[]) alarmTabs.toArray(new Integer[0]));
632
        java.util.Arrays.sort(alarms);
729
        java.util.Arrays.sort(alarms);
633
730
Lines 652-671 Link Here
652
            }
749
            }
653
        }
750
        }
654
    }
751
    }
752
        if( hasHighlightTabs() ) {
753
            int[] highlights = (int[]) Utilities.toPrimitiveArray((Integer[]) highlightTabs.toArray(new Integer[0]));
754
            java.util.Arrays.sort(highlights);
655
    
755
    
756
            int[] indices = e.getIndices();
757
            java.util.Arrays.sort(indices);
758
759
            boolean changed = false;
760
            for (int i=0; i < indices.length; i++) {
761
                for (int j=0; j < highlights.length; j++) {
762
                    if (highlights[j] >= indices[i]) {
763
                        highlights[j]++;
764
                        changed = true;
765
                    }
766
                }
767
            }
768
            if (changed) {
769
                highlightTabs.clear();
770
                for (int i=0; i < highlights.length; i++) {
771
                    if (highlights[i] != -1) {
772
                        addHighlightTab(highlights[i]);
773
                    }
774
                }
775
            }
776
        }
777
    }
778
    
656
    void indicesRemoved (ComplexListDataEvent e) {
779
    void indicesRemoved (ComplexListDataEvent e) {
657
        if (!hasAlarmTabs()) return;
780
        if (hasAlarmTabs()) {
658
        int[] indices = e.getIndices();
781
        int[] indices = e.getIndices();
659
        java.util.Arrays.sort(indices);
782
        java.util.Arrays.sort(indices);
660
        
783
        
661
        int[] alarms = (int[]) Utilities.toPrimitiveArray((Integer[]) alarmTabs.toArray(new Integer[0]));
784
        int[] alarms = (int[]) Utilities.toPrimitiveArray((Integer[]) alarmTabs.toArray(new Integer[0]));
662
        java.util.Arrays.sort(alarms);
785
        java.util.Arrays.sort(alarms);
663
        
786
        
664
        if (alarms[alarms.length -1] < indices[0]) {
787
            if (alarms[alarms.length -1] >= indices[0]) {
665
            //Some tab removed after the last blinking tab, don't care
666
            return;
667
        }
668
669
        boolean changed = false;
788
        boolean changed = false;
670
        for (int i=0; i < alarms.length; i++) {
789
        for (int i=0; i < alarms.length; i++) {
671
            //First weed out all deleted alarm tabs
790
            //First weed out all deleted alarm tabs
Lines 700-711 Link Here
700
                stopAlarmTimer();
819
                stopAlarmTimer();
701
            }
820
            }
702
        }        
821
        }        
822
            } else {
823
                //Some tab removed after the last blinking tab, don't care
824
            }
703
        
825
        
826
        }
827
        if( hasHighlightTabs() ) {
828
            int[] indices = e.getIndices();
829
            java.util.Arrays.sort(indices);
830
831
            int[] highlights = (int[]) Utilities.toPrimitiveArray((Integer[]) highlightTabs.toArray(new Integer[0]));
832
            java.util.Arrays.sort(highlights);
833
834
            if (highlights[highlights.length -1] >= indices[0]) {
835
836
                boolean changed = false;
837
                for (int i=0; i < highlights.length; i++) {
838
                    //First weed out all deleted alarm tabs
839
                    for (int j=0; j < indices.length; j++) {
840
                        if (highlights[i] == indices[j]) {
841
                            highlights[i] = -1;
842
                            changed = true;
843
                        }
844
                    }
845
                }
846
                for (int i=0; i < highlights.length; i++) {
847
                    //Now decrement those that remain that are affected
848
                    int alarm = highlights[i];
849
                    for (int j=0; j < indices.length; j++) {
850
                        if (alarm > indices[j]) {
851
                            highlights[i]--;
852
                            changed = true;
853
                        }
854
                    }
855
                }
856
857
                if (changed) {
858
                    highlightTabs.clear();
859
                    for (int i=0; i < highlights.length; i++) {
860
                        if (highlights[i] >= 0) {
861
                            addHighlightTab(highlights[i]);
862
                        }
863
                    }
864
                }
865
            }
866
        }
704
        repaintAllTabs();
867
        repaintAllTabs();
705
    }
868
    }
706
    
869
    
707
    void indicesChanged (ComplexListDataEvent e) {
870
    void indicesChanged (ComplexListDataEvent e) {
708
        if (!hasAlarmTabs()) return;
871
        if (hasAlarmTabs()) {
709
        if (e instanceof VeryComplexListDataEvent) { //it always will be
872
        if (e instanceof VeryComplexListDataEvent) { //it always will be
710
            VeryComplexListDataEvent ve = (VeryComplexListDataEvent) e;
873
            VeryComplexListDataEvent ve = (VeryComplexListDataEvent) e;
711
            
874
            
Lines 738-745 Link Here
738
            }             
901
            }             
739
        }
902
        }
740
    }
903
    }
904
        if( hasHighlightTabs() ) {
905
            if (e instanceof VeryComplexListDataEvent) { //it always will be
906
                VeryComplexListDataEvent ve = (VeryComplexListDataEvent) e;
741
907
908
                ArrayDiff dif = ((VeryComplexListDataEvent) e).getDiff();
742
    
909
    
910
                List old = Arrays.asList(dif.getOldData());
911
                List nue = Arrays.asList(dif.getNewData());
912
913
                int[] highlights = (int[]) Utilities.toPrimitiveArray((Integer[]) highlightTabs.toArray(new Integer[0]));
914
915
                boolean changed = false;
916
                for (int i=0; i < highlights.length; i++) {
917
                    Object o = old.get(highlights[i]);
918
                    int idx = nue.indexOf(o);
919
                    changed |= idx != highlights[i];
920
                    highlights[i] = nue.indexOf(o);
921
                }
922
                if (changed) {
923
                    highlightTabs.clear();
924
                    for (int i=0; i < highlights.length; i++) {
925
                        if (highlights[i] >= 0) {
926
                            addHighlightTab(highlights[i]);
927
                        }
928
                    }
929
                }
930
            }
931
        }
932
    }
933
934
    
743
    void contentsChanged(ListDataEvent evt) {
935
    void contentsChanged(ListDataEvent evt) {
744
        if (!hasAlarmTabs()) return;
936
        if (!hasAlarmTabs()) return;
745
        //Do nothing, just means some text or icons changed
937
        //Do nothing, just means some text or icons changed
Lines 896-901 Link Here
896
                }
1088
                }
897
                break;
1089
                break;
898
            case ATTENTION:
1090
            case ATTENTION:
1091
            case HIGHLIGHT:
899
                go = true;
1092
                go = true;
900
        }
1093
        }
901
        if (go) {
1094
        if (go) {
(-)o.n.swing.tabcontrol/src/org/netbeans/swing/tabcontrol/TabbedContainer.java (+21 lines)
Lines 621-626 Link Here
621
    }
621
    }
622
    
622
    
623
    /**
623
    /**
624
     * Turn tab highlight on/off
625
     * @param tab
626
     * @since 1.38
627
     */
628
    public final void setAttentionHighlight (int tab, boolean highlight) {
629
        getUI().setAttentionHighlight(tab, highlight);
630
    }
631
    
632
    /**
624
     * Cause the specified tab to blink or otherwisse suggest that the user should
633
     * Cause the specified tab to blink or otherwisse suggest that the user should
625
     * click it.
634
     * click it.
626
     */
635
     */
Lines 641-646 Link Here
641
    }
650
    }
642
651
643
    /**
652
    /**
653
     *
654
     * @param data
655
     * @since 1.38
656
     */
657
    public final void setAttentionHighlight (TabData data, boolean highlight) {
658
        int idx = getModel().indexOf(data);
659
        if (idx != -1) {
660
            setAttentionHighlight(idx, highlight);
661
        }
662
    }
663
664
    /**
644
     * Determine if this component thinks it is &quot;active&quot;, which
665
     * Determine if this component thinks it is &quot;active&quot;, which
645
     * affects how the tabs are painted - typically used to indicate that
666
     * affects how the tabs are painted - typically used to indicate that
646
     * keyboard focus is somewhere within the component
667
     * keyboard focus is somewhere within the component
(-)o.n.swing.tabcontrol/src/org/netbeans/swing/tabcontrol/TabbedContainerUI.java (+9 lines)
Lines 214-217 Link Here
214
    
214
    
215
    protected abstract void cancelRequestAttention (int tab);
215
    protected abstract void cancelRequestAttention (int tab);
216
    
216
    
217
    /**
218
     * Turn tab highlight on/off
219
     * @param tab
220
     * @since 1.38
221
     */
222
    protected void setAttentionHighlight (int tab, boolean highlight) {
223
217
}
224
}
225
    
226
}
(-)o.n.swing.tabcontrol/src/org/netbeans/swing/tabcontrol/TabDisplayer.java (+9 lines)
Lines 443-448 Link Here
443
        getUI().cancelRequestAttention (tab);
443
        getUI().cancelRequestAttention (tab);
444
    }
444
    }
445
    
445
    
446
    /**
447
     * Turn tab highlight on/off
448
     * @param tab
449
     * @since 1.38
450
     */
451
    public final void setAttentionHighlight (int tab, boolean highlight) {
452
        getUI().setAttentionHighlight (tab, highlight);
453
    }
454
    
446
    public final boolean requestAttention (TabData data) {
455
    public final boolean requestAttention (TabData data) {
447
        int idx = getModel().indexOf(data);
456
        int idx = getModel().indexOf(data);
448
        boolean result = idx >= 0;
457
        boolean result = idx >= 0;
(-)o.n.swing.tabcontrol/src/org/netbeans/swing/tabcontrol/TabDisplayerUI.java (+8 lines)
Lines 273-278 Link Here
273
    protected abstract void cancelRequestAttention (int tab);
273
    protected abstract void cancelRequestAttention (int tab);
274
274
275
    /**
275
    /**
276
     * Turn tab highlight on/off
277
     * @param tab
278
     * @since 1.38
279
     */
280
    protected void setAttentionHighlight (int tab, boolean highlight) {
281
    }
282
283
    /**
276
     * @since 1.9
284
     * @since 1.9
277
     * @return An icon for various buttons displayed in tab control (close/pin/scroll left/right etc), see TabControlButton class.
285
     * @return An icon for various buttons displayed in tab control (close/pin/scroll left/right etc), see TabControlButton class.
278
     */
286
     */
(-)openide.windows/apichanges.xml (+18 lines)
Lines 50-55 Link Here
50
<apidef name="winsys">Window System API</apidef>
50
<apidef name="winsys">Window System API</apidef>
51
</apidefs>
51
</apidefs>
52
<changes>
52
<changes>
53
<change id="stop_request_attention">
54
    <api name="winsys"/>
55
    <summary>Allow TopComponent's header to be permanently highlighted to draw user's attention.
56
    </summary>
57
    <version major="6" minor="58"/>
58
    <date day="28" month="8" year="2012"/>
59
    <author login="saubrecht"/>
60
    <compatibility addition="yes" source="compatible" semantic="compatible" deprecation="no" deletion="no" modification="no"/>
61
    <description>
62
        <p>New method setAttentionHighlight(boolean) in TopComponent class
63
            can be used to permanently highlight TopComponent's tab until user
64
            activates it.
65
        </p>
66
    </description>
67
    <class package="org.openide.windows" name="TopComponent"/>
68
    <class package="org.openide.windows" name="WindowManager"/>
69
    <issue number="217509"/>
70
</change>
53
<change id="minimize_and_float">
71
<change id="minimize_and_float">
54
    <api name="winsys"/>
72
    <api name="winsys"/>
55
    <summary>New API to check/modify the floating and minimize state of a TopComponent.</summary>
73
    <summary>New API to check/modify the floating and minimize state of a TopComponent.</summary>
(-)openide.windows/manifest.mf (-1 / +1 lines)
Lines 1-6 Link Here
1
Manifest-Version: 1.0
1
Manifest-Version: 1.0
2
OpenIDE-Module: org.openide.windows
2
OpenIDE-Module: org.openide.windows
3
OpenIDE-Module-Specification-Version: 6.57
3
OpenIDE-Module-Specification-Version: 6.58
4
OpenIDE-Module-Localizing-Bundle: org/openide/windows/Bundle.properties
4
OpenIDE-Module-Localizing-Bundle: org/openide/windows/Bundle.properties
5
AutoUpdate-Essential-Module: true
5
AutoUpdate-Essential-Module: true
6
6
(-)openide.windows/src/org/openide/windows/TopComponent.java (+15 lines)
Lines 945-950 Link Here
945
        );
945
        );
946
    }
946
    }
947
947
948
    /**
949
     * Permanently highlights this TopComponent's tab until user activates it.
950
     * @param highlight True to highlight the tab, false to switch the highlight off.
951
     * @since 6.58
952
     * @see #requestAttention(boolean)
953
     */
954
    public final void setAttentionHighlight( final boolean highlight ) {
955
        Mutex.EVENT.readAccess( new Runnable() {
956
            @Override
957
            public void run() {
958
                WindowManager.getDefault().topComponentAttentionHighlight( TopComponent.this, highlight );
959
            }
960
        });
961
    }
962
948
    /** Set the name of this top component.
963
    /** Set the name of this top component.
949
    * The default implementation just notifies the window manager.
964
    * The default implementation just notifies the window manager.
950
    * @param name the new display name
965
    * @param name the new display name
(-)openide.windows/src/org/openide/windows/WindowManager.java (+9 lines)
Lines 534-539 Link Here
534
    protected void topComponentCancelRequestAttention(TopComponent tc) {
534
    protected void topComponentCancelRequestAttention(TopComponent tc) {
535
    }
535
    }
536
536
537
    /**
538
     * Highlights the tab of the given TopComponent until user activates it.
539
     * @param tc
540
     * @param highlight True to highlight the tab, false to switch the highlight off.
541
     * @since 6.58
542
     */
543
    protected void topComponentAttentionHighlight(TopComponent tc, boolean highlight) {
544
    }
545
537
    /** Returns unique ID for specified <code>TopComponent</code>.
546
    /** Returns unique ID for specified <code>TopComponent</code>.
538
     * @param tc <code>TopComponent</code> the component for which is ID returned
547
     * @param tc <code>TopComponent</code> the component for which is ID returned
539
     * @return unique <code>TopComponent</code> ID
548
     * @return unique <code>TopComponent</code> ID

Return to bug 217509