The trick is, when do I call open() and close() on the TopComponentGroup? The conventional wisdom is to have:
protected void componentActivated() { super.componentActivated(); TopComponentGroup group = WindowManager.getDefault().findTopComponentGroup(TC_GROUP); if (group != null) { group.open(); } } protected void componentDeactivated() { TopComponentGroup group = WindowManager.getDefault().findTopComponentGroup(TC_GROUP); if (group != null) { group.close(); } }This, however, doesn't work. For one thing, when I click on B, I am deactivating A. Therefore, clicking on B makes it disappear! My next thought was to use componentShowing() and componentHidden() instead of activated/deactivated. But, if I have 2 A's showing in different modes, that paradigm breaks down. Long story short(er), this is what I ended up with, and it seems to work:
protected void componentActivated() { super.componentActivated(); TopComponentGroup group = WindowManager.getDefault().findTopComponentGroup(TC_GROUP); if (group != null) { group.open(); } } protected void componentHidden() { Mode m = WindowManager.getDefault().findMode(this); if (m == null) { // if the component is hiding because it is being closed, // we must back off to assuming the editor mode m = WindowManager.getDefault().findMode(EDITOR_MODE); } TopComponent selected = m.getSelectedTopComponent(); if (selected == null || !(selected instanceof PageEditor)) { // close the TC_GROUP TopComponentGroup group = WindowManager.getDefault().findTopComponentGroup(TC_GROUP); if (group != null) group.close(); } }
No comments:
Post a Comment