| /******************************************************************************* |
| * Copyright (c) 2004 IBM Corporation and others. |
| * All rights reserved. This program and the accompanying materials |
| * are made available under the terms of the Eclipse Public License v1.0 |
| * which accompanies this distribution, and is available at |
| * http://www.eclipse.org/legal/epl-v10.html |
| * |
| * Contributors: |
| * IBM Corporation - initial API and implementation |
| *******************************************************************************/ |
| package org.eclipse.wst.css.core.internal.eventimpl; |
| |
| |
| |
| import java.util.Iterator; |
| import java.util.Vector; |
| |
| import org.eclipse.wst.css.core.internal.event.ICSSStyleListener; |
| import org.eclipse.wst.css.core.internal.event.ICSSStyleNotifier; |
| import org.eclipse.wst.css.core.internal.provisional.document.ICSSModel; |
| import org.eclipse.wst.css.core.internal.provisional.document.ICSSSelector; |
| import org.eclipse.wst.css.core.internal.provisional.document.ICSSStyleSheet; |
| import org.eclipse.wst.css.core.internal.util.ImportedCollector; |
| import org.eclipse.wst.css.core.internal.util.SelectorsCollector; |
| |
| |
| /** |
| * |
| */ |
| public class CSSStyleNotifyAdapter implements ICSSStyleNotifier { |
| |
| protected java.util.Vector listeners; |
| protected final org.eclipse.wst.css.core.internal.provisional.document.ICSSModel model; |
| protected boolean recording = false; |
| |
| /** |
| * |
| */ |
| public CSSStyleNotifyAdapter(ICSSModel model) { |
| super(); |
| this.model = model; |
| } |
| |
| /** |
| * |
| */ |
| public void addStyleListener(ICSSStyleListener listener) { |
| if (listener == null) |
| return; |
| |
| if (listeners == null) |
| listeners = new Vector(); |
| if (!listeners.contains(listener)) { |
| |
| // send new selectors event to listener |
| ImportedCollector trav = new ImportedCollector(); |
| trav.apply(model.getDocument()); |
| Iterator it = trav.getExternals().iterator(); |
| while (it.hasNext()) { |
| ICSSStyleSheet sheet = (ICSSStyleSheet) it.next(); |
| // collect selectors |
| SelectorsCollector selTrav = new SelectorsCollector(); |
| selTrav.apply(sheet); |
| int nSel = selTrav.getSelectors().size(); |
| ICSSSelector[] added = new ICSSSelector[nSel]; |
| for (int i = 0; i < nSel; i++) |
| added[i] = (ICSSSelector) selTrav.getSelectors().get(i); |
| |
| // fire event |
| CSSStyleEventDeliverer deliverer = new CSSStyleEventDeliverer(); |
| deliverer.fireTo(listener, sheet.getModel(), null, added, null/* |
| * media |
| * will |
| * be |
| * implemented |
| * in |
| * the |
| * future |
| */); |
| } |
| |
| // add listener |
| listeners.add(listener); |
| } |
| } |
| |
| /** |
| * |
| */ |
| public void beginRecording() { |
| recording = true; |
| } |
| |
| /** |
| * |
| */ |
| public void endRecording() { |
| recording = false; |
| } |
| |
| /** |
| * |
| */ |
| public void fire(ICSSSelector[] removed, ICSSSelector[] added, String media) { |
| // send selector changed event |
| CSSStyleEventDeliverer deliv = new CSSStyleEventDeliverer(); |
| deliv.fire(model, removed, added, null); |
| |
| } |
| |
| /** |
| * |
| */ |
| public java.util.List getStyleListeners() { |
| return listeners; |
| } |
| |
| /** |
| */ |
| public boolean isRecording() { |
| return recording; |
| } |
| |
| /** |
| * |
| */ |
| public void removeStyleListener(ICSSStyleListener listener) { |
| if (listener == null) |
| return; |
| |
| if (listeners.contains(listener)) { |
| listeners.remove(listener); |
| |
| // send old selectors event to listener |
| ImportedCollector trav = new ImportedCollector(); |
| trav.apply(model.getDocument()); |
| Iterator it = trav.getExternals().iterator(); |
| while (it.hasNext()) { |
| ICSSStyleSheet sheet = (ICSSStyleSheet) it.next(); |
| // collect selectors |
| SelectorsCollector selTrav = new SelectorsCollector(); |
| selTrav.apply(sheet); |
| int nSel = selTrav.getSelectors().size(); |
| ICSSSelector[] removed = new ICSSSelector[nSel]; |
| for (int i = 0; i < nSel; i++) |
| removed[i] = (ICSSSelector) selTrav.getSelectors().get(i); |
| |
| // fire event |
| CSSStyleEventDeliverer deliverer = new CSSStyleEventDeliverer(); |
| deliverer.fireTo(listener, sheet.getModel(), removed, null, null/* |
| * media |
| * will |
| * be |
| * implemented |
| * in |
| * the |
| * future |
| */); |
| } |
| } |
| } |
| |
| /** |
| * |
| */ |
| public void styleChanged(org.eclipse.wst.css.core.internal.provisional.document.ICSSModel srcModel, org.eclipse.wst.css.core.internal.provisional.document.ICSSSelector[] removed, org.eclipse.wst.css.core.internal.provisional.document.ICSSSelector[] added, java.lang.String media) { |
| } |
| |
| /** |
| * |
| */ |
| public void styleUpdate(org.eclipse.wst.css.core.internal.provisional.document.ICSSModel srcModel) { |
| } |
| } |