001: package fr.aliacom.form.swt.ui;
002:
003: import java.util.ArrayList;
004:
005: import org.eclipse.swt.SWT;
006: import org.eclipse.swt.custom.CTabFolder;
007: import org.eclipse.swt.custom.CTabFolderEvent;
008: import org.eclipse.swt.custom.CTabFolderListener;
009: import org.eclipse.swt.widgets.Composite;
010:
011: import fr.aliacom.common.ui.ITabbedPane;
012: import fr.aliacom.form.common.FormContext;
013: import fr.aliacom.form.common.FormManager;
014: import fr.aliacom.form.common.IForm;
015: import fr.aliacom.form.common.events.ITabbedPaneListener;
016:
017: /**
018: * @author tom
019: *
020: * (C) 2001, 2002 Thomas Cataldo
021: */
022: public class SWTTabbedPane implements ITabbedPane, CTabFolderListener {
023:
024: private CTabFolder tabFolder;
025: private ArrayList listeners;
026:
027: public SWTTabbedPane(Composite parent, boolean closeable) {
028: tabFolder = new CTabFolder(parent, SWT.BORDER);
029: if (closeable) {
030: tabFolder.addCTabFolderListener(this );
031: }
032: listeners = new ArrayList();
033: }
034:
035: /**
036: * @see fr.aliacom.common.ui.ITabbedPane#addTab(IForm, java.lang.String)
037: */
038: public int addTab(IForm form, String formName) {
039: return addTab(form, formName, new FormContext());
040: }
041:
042: /**
043: * @see fr.aliacom.common.ui.ITabbedPane#addTab(fr.aliacom.form.common.IForm, java.lang.String, fr.aliacom.form.common.FormContext)
044: */
045: public int addTab(IForm form, String formName, FormContext newVars) {
046: System.out.println("Adding a tab from " + formName);
047: FormManager.getInstance().createComponent(form, this , formName,
048: newVars);
049: int ret = tabFolder.getItemCount() - 1;
050: tabFolder.setSelection(ret);
051: fireTabAddedEvent(ret);
052: return ret;
053: }
054:
055: private void fireTabAddedEvent(int tabIndex) {
056: System.out.println("fireTabAddedEvent(" + tabIndex + ")");
057: for (int i = 0, n = listeners.size(); i < n; i++) {
058: ((ITabbedPaneListener) listeners.get(i)).tabAdded(tabIndex);
059: }
060: }
061:
062: private void fireTabRemovedEvent(int tabIndex) {
063: for (int i = 0, n = listeners.size(); i < n; i++) {
064: ((ITabbedPaneListener) listeners.get(i))
065: .tabRemoved(tabIndex);
066: }
067: }
068:
069: /**
070: * @see fr.aliacom.common.ui.ITabbedPane#removeTab(int)
071: */
072: public void removeTab(int tabIndex) {
073: tabFolder.getItem(tabIndex).dispose();
074: fireTabRemovedEvent(tabIndex);
075: }
076:
077: /**
078: * @see fr.aliacom.form.common.IFormComponent#reset()
079: */
080: public void reset() {
081: }
082:
083: /**
084: * @see fr.aliacom.form.common.IFormComponent#setValueBean(java.lang.Object)
085: */
086: public void setValueBean(Object bean) {
087: }
088:
089: /**
090: * @see fr.aliacom.form.common.IFormComponent#getNativeWidget()
091: */
092: public Object getNativeWidget() {
093: return tabFolder;
094: }
095:
096: /**
097: * @see fr.aliacom.common.ui.ITabbedPane#getTabTitle(int)
098: */
099: public String getTabTitle(int tabIndex) {
100: return tabFolder.getItem(tabIndex).getText();
101: }
102:
103: /**
104: * @see fr.aliacom.common.ui.ITabbedPane#addTabbedPaneListener(fr.aliacom.form.common.events.ITabbedPaneListener)
105: */
106: public void addTabbedPaneListener(ITabbedPaneListener listener) {
107: listeners.add(listener);
108: }
109:
110: /**
111: * @see fr.aliacom.common.ui.ITabbedPane#removeTabbedPaneListener(fr.aliacom.form.common.events.ITabbedPaneListener)
112: */
113: public void removeTabbedPaneListener(ITabbedPaneListener listener) {
114: listeners.remove(listener);
115: }
116:
117: /**
118: * @see fr.aliacom.common.ui.ITabbedPane#setTabTitle(java.lang.String, int)
119: */
120: public void setTabTitle(String title, int tabIndex) {
121: tabFolder.getItem(tabIndex).setText(title);
122: }
123:
124: /* (non-Javadoc)
125: * @see org.eclipse.swt.custom.CTabFolderListener#itemClosed(org.eclipse.swt.custom.CTabFolderEvent)
126: */
127: public void itemClosed(CTabFolderEvent arg0) {
128: fireTabRemovedEvent(tabFolder.getSelectionIndex());
129: }
130:
131: }
|