001 package nl.cwi.sen1.gui.component; 002 003 import javax.swing.Icon; 004 import javax.swing.JComponent; 005 006 import nl.cwi.sen1.gui.CloseAbortedException; 007 008 /** 009 * The (visual) interface to a tab (window) that is hosted in a MetaStudio. 010 */ 011 public interface StudioComponent { 012 /** 013 * The name is used to construct labels of tabs. 014 * @return the label of a tab. 015 */ 016 public String getName(); 017 018 /** 019 * The name can be changed. 020 * @param name new name for this component. 021 */ 022 public void setName(String name); 023 024 /** 025 * The tooltip is used to show when hovering the mouse over tabs. 026 * @return the tooltip of a tab. 027 */ 028 public String getTooltip(); 029 030 /** 031 * The tooltip can be changed. 032 * @param tooltip new tooltip for this component. 033 */ 034 public void setTooltip(String tooltip); 035 036 /** 037 * Tabs can be labelled with small icons too. 038 * @return an icon to be used by the Studio 039 */ 040 public Icon getIcon(); 041 042 /** 043 * The bridge to Swing is made here. The returned JComponent 044 * will fill exactly one tab. Any JComponent will do. 045 */ 046 public JComponent getViewComponent(); 047 048 /** 049 * Register a listener (usually the plugin that this Component belongs 050 * to, and the MetaStudio). 051 * The studio and the plugin listen to important changes in the state 052 * of a component. This may be used to implement window management, by 053 * the plugin, or by the Studio. 054 * @param l the listener to register. 055 */ 056 public void addStudioComponentListener(StudioComponentListener l); 057 058 /** 059 * Unregister a listener. 060 */ 061 public void removeStudioComponentListener(StudioComponentListener l); 062 063 /** 064 * Request to close the window. The controls on a tab window are implemented 065 * by the @see MetaStudio. If a user clicks the close icon on a tab, the 066 * component will be notified using this method. This gives the component 067 * the chance to save resources, or start save/cancel dialogs if necessary. 068 * @throws CloseAbortedException if the component can not be closed (for example when the user chooses to cancel. 069 */ 070 public void requestClose() throws CloseAbortedException; 071 072 /** 073 * Closes a component. This makes the component invisible immediately. 074 */ 075 public void close(); 076 077 /** 078 * Receive the focus. When a component receives the focus, there is 079 * sometimes something to do, like reset or set the focus to a particular 080 * part of the component. 081 */ 082 public void receiveFocus(); 083 084 /** 085 * The MetaStudio has a status bar at the bottom. When a component receives 086 * the focus, the status bar will show the returned JComponents from 087 * left to right in a certain part of the status bar. 088 * @return an array of JComponents to show in the status bar. 089 */ 090 public JComponent[] getStatusBarComponents(); 091 092 /** 093 * Register a NameChangedListener. If a tab wants to change its name, it 094 * should notify all NameChangedListeners. The MetaStudio itself uses it 095 * to update the label on the tab. 096 */ 097 public void addNameChangedListener(NameChangedListener l); 098 099 /** 100 * Unregister a NameChangedListener. 101 */ 102 public void removeNameChangedListener(NameChangedListener l); 103 104 /** 105 * Register a TooltipChangedListener. If a tab wants to change its tooltip, it 106 * should notify all TooltipChangedListeners. The MetaStudio itself uses it 107 * to update the tooltip off the tab. 108 */ 109 public void addTooltipChangedListener(TooltipChangedListener l); 110 111 /** 112 * Unregister a TooltipChangedListener. 113 */ 114 public void removeTooltipChangedListener(TooltipChangedListener l); 115 116 }