blob: 85c4e443f94c68d745cc1c3de4256d4f00c22da3 [file] [log] [blame]
/*******************************************************************************
* 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) {
}
}