[Schmitzm-commits] r427 - in branches/1.0-gt2-2.6/src: schmitzm/geotools/feature schmitzm/geotools/gui skrueger/geotools/selection
scm-commit@wald.intevation.org
scm-commit at wald.intevation.org
Fri Oct 2 21:38:45 CEST 2009
Author: alfonx
Date: 2009-10-02 21:38:44 +0200 (Fri, 02 Oct 2009)
New Revision: 427
Modified:
branches/1.0-gt2-2.6/src/schmitzm/geotools/feature/CQLFilterParser.java
branches/1.0-gt2-2.6/src/schmitzm/geotools/gui/FeatureLayerFilterDialog.java
branches/1.0-gt2-2.6/src/skrueger/geotools/selection/FeatureMapLayerSelectionSynchronizer.java
Log:
* GP-Feature: Some more stuff with FilterDialogs and AtlasStyler
Modified: branches/1.0-gt2-2.6/src/schmitzm/geotools/feature/CQLFilterParser.java
===================================================================
--- branches/1.0-gt2-2.6/src/schmitzm/geotools/feature/CQLFilterParser.java 2009-10-02 17:20:00 UTC (rev 426)
+++ branches/1.0-gt2-2.6/src/schmitzm/geotools/feature/CQLFilterParser.java 2009-10-02 19:38:44 UTC (rev 427)
@@ -61,12 +61,12 @@
/**
* Creates a CQL-{@link Filter} for the rule string.
* @param rule a rule string
- * @return TRUE filter, if rule is {@code null} or empty
+ * @return Filter.INCLUDE if the rule is empty
*/
@Override
public Filter parseFilter(String rule) {
if (rule == null || rule.trim().equals(""))
- return Filter.EXCLUDE;
+ return Filter.INCLUDE;
try {
return CQL.toFilter(rule);
} catch (CQLException err) {
Modified: branches/1.0-gt2-2.6/src/schmitzm/geotools/gui/FeatureLayerFilterDialog.java
===================================================================
--- branches/1.0-gt2-2.6/src/schmitzm/geotools/gui/FeatureLayerFilterDialog.java 2009-10-02 17:20:00 UTC (rev 426)
+++ branches/1.0-gt2-2.6/src/schmitzm/geotools/gui/FeatureLayerFilterDialog.java 2009-10-02 19:38:44 UTC (rev 427)
@@ -30,6 +30,7 @@
package schmitzm.geotools.gui;
import java.awt.BorderLayout;
+import java.awt.Component;
import java.awt.FlowLayout;
import java.awt.Frame;
import java.awt.Window;
@@ -58,233 +59,310 @@
import schmitzm.swing.ExceptionDialog;
import schmitzm.swing.SwingUtil;
-
/**
* Diese Klasse stellt einen Dialog dar, in dem eine {@link FeatureCollection}
- * ueber eine Formel gefiltert werden kann. Beim Anwenden des Filters wird
- * ein {@link FeatureSelectedEvent} ausgeloest, auf das z.B. mit dem
- * Einfuegen eines neuen Layers reagiert werden kann.
- * Standardmaessig wird ein {@link FeatureOperationTreeParser} verwendet,
- * um die eingegebene Formel zu parsen (und einen {@link FeatureOperationTreeFilter}
- * zu erstellen). Ueber {@code getFeatureCollectionFilterPanel().setFilterParser(FilterParser)}
- * kann dieser jedoch einfach geaendert werden.
+ * ueber eine Formel gefiltert werden kann. Beim Anwenden des Filters wird ein
+ * {@link FeatureSelectedEvent} ausgeloest, auf das z.B. mit dem Einfuegen eines
+ * neuen Layers reagiert werden kann. Standardmaessig wird ein
+ * {@link FeatureOperationTreeParser} verwendet, um die eingegebene Formel zu
+ * parsen (und einen {@link FeatureOperationTreeFilter} zu erstellen). Ueber
+ * {@code getFeatureCollectionFilterPanel().setFilterParser(FilterParser)} kann
+ * dieser jedoch einfach geaendert werden.
+ *
* @see FeatureCollectionFilterPanel
- * @author <a href="mailto:martin.schmitz at koeln.de">Martin Schmitz</a> (University of Bonn/Germany)
+ * @author <a href="mailto:martin.schmitz at koeln.de">Martin Schmitz</a>
+ * (University of Bonn/Germany)
* @version 1.0
*/
-public class FeatureLayerFilterDialog extends JDialog implements CaptionsChangeable {
- /** Key, um den Titel des FeatureCollection-Filter-Dialogs in der {@link CaptionsChangeable}-Map anzusprechen. */
- public static final String DIALOG_TITLE = FeatureLayerFilterDialog.class.getName()+".TITLE";
- /** Key, um den OK-Button des FeatureCollection-Filter-Dialogs in der {@link CaptionsChangeable}-Map anzusprechen. */
- public static final String OK_BUTTON = FeatureLayerFilterDialog.class.getName()+".OK";
- /** Key, um den ABBRECHEN-Button des FeatureCollection-Filter-Dialogs in der {@link CaptionsChangeable}-Map anzusprechen. */
- public static final String CANCEL_BUTTON = FeatureLayerFilterDialog.class.getName()+".CANCEL";
- /** Key, um den ÜBERNEHMEN-Button des FeatureCollection-Filter-Dialogs in der {@link CaptionsChangeable}-Map anzusprechen. */
- public static final String APPLY_BUTTON = FeatureLayerFilterDialog.class.getName()+".APPLY";
+public class FeatureLayerFilterDialog extends JDialog implements
+ CaptionsChangeable {
+ /**
+ * Key, um den Titel des FeatureCollection-Filter-Dialogs in der
+ * {@link CaptionsChangeable}-Map anzusprechen.
+ */
+ public static final String DIALOG_TITLE = FeatureLayerFilterDialog.class
+ .getName()
+ + ".TITLE";
+ /**
+ * Key, um den OK-Button des FeatureCollection-Filter-Dialogs in der
+ * {@link CaptionsChangeable}-Map anzusprechen.
+ */
+ public static final String OK_BUTTON = FeatureLayerFilterDialog.class
+ .getName()
+ + ".OK";
+ /**
+ * Key, um den ABBRECHEN-Button des FeatureCollection-Filter-Dialogs in der
+ * {@link CaptionsChangeable}-Map anzusprechen.
+ */
+ public static final String CANCEL_BUTTON = FeatureLayerFilterDialog.class
+ .getName()
+ + ".CANCEL";
+ /**
+ * Key, um den ÜBERNEHMEN-Button des FeatureCollection-Filter-Dialogs in der
+ * {@link CaptionsChangeable}-Map anzusprechen.
+ */
+ public static final String APPLY_BUTTON = FeatureLayerFilterDialog.class
+ .getName()
+ + ".APPLY";
- /** Panel in dem der Filter definiert und getestet werden kann. */
- protected FeatureCollectionFilterPanel filterPanel = null;
- /** Der OK-Button. */
- protected JButton okButton = null;
- /** Der ABBRECHEN-Button. */
- protected JButton cancelButton = null;
- /** Der ANWENDEN-Button. */
- protected JButton applyButton = null;
+ /** Panel in dem der Filter definiert und getestet werden kann. */
+ protected FeatureCollectionFilterPanel filterPanel = null;
+ /** Der OK-Button. */
+ protected final JButton okButton = new JButton(SwingUtil.RESOURCE.getString("Ok"));
- /** Parser, der standardmaessig verwendet wird, um den {@link Filter} zu
- * erstellen. */
- public static final FilterParser FILTER_PARSER = new FeatureOperationTreeParser();
-
- private String frameTitle = GeotoolsGUIUtil.RESOURCE.getString(DIALOG_TITLE);
- private JMapPane mapPane = null;
- private MapLayer layer = null;
+ /** Der ABBRECHEN-Button. */
+ protected final JButton cancelButton = new JButton(SwingUtil.RESOURCE.getString("Cancel"));
- /**
- * Erzeugt einen neuen Dialog.
- * @param parent Uebergeordnetes Fenster (kann {@code null} sein)
- * @param mapPane MapPane fuer welches {@link FeatureSelectedEvent} ausgeloest
- * werden
- * @param mapLayer MapLayer, aus dem die FeatureCollection stammt, auf der der
- * Filter definiert wird
- * @exception IOException falls beim Ermitteln der {@link FeatureCollection} aus
- * dem Layer ein Fehler auftritt
- *
- * CHANGE BY SK: Takes {@link Window} instead of {@link Frame}
- * @author <a href="mailto:skpublic at wikisquare.de">Stefan Alfons Krüger</a>
- */
- public FeatureLayerFilterDialog(Window parent, JMapPane mapPane, MapLayer mapLayer) throws IOException {
- this(parent, mapPane, mapLayer, true);
- }
+ /** Der ANWENDEN-Button. */
+ protected final JButton applyButton = new JButton(SwingUtil.RESOURCE.getString("Apply"));
+ /**
+ * Parser, der standardmaessig verwendet wird, um den {@link Filter} zu
+ * erstellen.
+ */
+ public static final FilterParser FILTER_PARSER = new FeatureOperationTreeParser();
- /**
- * Erzeugt einen neuen Dialog.
- * @param parent Uebergeordnetes Fenster (kann {@code null} sein)
- * @param mapPane MapPane fuer welches {@link FeatureSelectedEvent} ausgeloest
- * werden
- * @param mapLayer MapLayer, aus dem die FeatureCollection stammt, auf der der
- * Filter definiert wird
- * @param initGUI bestimmt, ob {@link #initGUI()} aufgerufen werden soll. Wenn
- * {@code false}, muss der Konstruktor der Unterklasse dafuer
- * sorgen, dass {@link #initGUI()} aufgerufen wird
- * @exception IOException falls beim Ermitteln der {@link FeatureCollection} aus
- * dem Layer ein Fehler auftritt
- *
- * CHANGE BY SK: Takes {@link Window} instead of {@link Frame}
- * @author <a href="mailto:skpublic at wikisquare.de">Stefan Alfons Krüger</a>
- */
- protected FeatureLayerFilterDialog(Window parent, JMapPane mapPane, MapLayer mapLayer, boolean initGUI) throws IOException {
- super(parent);
- setModal(true);
- this.setTitle( frameTitle + " ["+mapLayer.getTitle()+"]" );
- this.setLayout( new BorderLayout() );
- this.setSize(380,200);
- this.mapPane = mapPane;
- this.layer = mapLayer;
- if ( initGUI ) {
- initGUI();
- pack();
- }
- }
+ private String frameTitle = GeotoolsGUIUtil.RESOURCE
+ .getString(DIALOG_TITLE);
+ private JMapPane mapPane = null;
+ private MapLayer layer = null;
- /**
- * Initalisiert die GUI.
- */
- protected void initGUI() throws IOException {
- filterPanel = new FeatureCollectionFilterPanel(FILTER_PARSER, (FeatureCollection<SimpleFeatureType, SimpleFeature>) layer.getFeatureSource().getFeatures(), true ) {
- @Override
- protected void resetComponentsAfterTest(Throwable err) {
- super.resetComponentsAfterTest(err);
- // OK- und Uebernehmen-Button (de)aktivieren
- okButton.setEnabled( err == null );
- applyButton.setEnabled( err == null );
- }
- @Override
- protected boolean acceptOperator(String operator) {
- // Operatoren durch Methode des Dialogs filtern
- return super.acceptOperator(operator) &&
- FeatureLayerFilterDialog.this.acceptOperator(operator);
- }
- };
- okButton = new JButton( SwingUtil.RESOURCE.getString("Ok") );
- cancelButton = new JButton( SwingUtil.RESOURCE.getString("Cancel") );
- applyButton = new JButton( SwingUtil.RESOURCE.getString("Apply") );
- add( filterPanel, BorderLayout.CENTER);
- JPanel buttonPanel = new JPanel( new FlowLayout(FlowLayout.CENTER, 10, 5) );
- buttonPanel.add( okButton);
- buttonPanel.add( cancelButton);
- buttonPanel.add( applyButton);
- add( buttonPanel, BorderLayout.SOUTH );
+ /**
+ * Erzeugt einen neuen Dialog.
+ *
+ * @param parent
+ * Uebergeordnetes Fenster (kann {@code null} sein)
+ * @param mapPane
+ * MapPane fuer welches {@link FeatureSelectedEvent} ausgeloest
+ * werden
+ * @param mapLayer
+ * MapLayer, aus dem die FeatureCollection stammt, auf der der
+ * Filter definiert wird
+ * @exception IOException
+ * falls beim Ermitteln der {@link FeatureCollection} aus dem
+ * Layer ein Fehler auftritt
+ *
+ * CHANGE BY SK: Takes {@link Window} instead of
+ * {@link Frame}
+ * @author <a href="mailto:skpublic at wikisquare.de">Stefan Alfons
+ * Krüger</a>
+ */
+ public FeatureLayerFilterDialog(Window parent, JMapPane mapPane,
+ MapLayer mapLayer) {
+ this(parent, mapPane, mapLayer, true);
+ }
- // Aktionen der Filter-Fenster-Button
- ActionListener action = new ActionListener() {
- public void actionPerformed(ActionEvent e) {
- // Ok- und Apply-Button > Filter anwenden und Event erzeugen
- if ( e.getSource() == okButton || e.getSource() == applyButton ) {
- // FeatureCollection filtern
- try {
- FeatureCollection<SimpleFeatureType, SimpleFeature> fc = filterPanel.filterFeatureCollection();
- FeatureSelectedEvent fse = new FeatureSelectedEvent(getMapPane() , layer, fc.getBounds(), fc, FeatureLayerFilterDialog.this);
- getMapPane().fireMapPaneEvent( fse );
- } catch ( Exception err ) {
- ExceptionDialog.show(filterPanel,err);
- // Fenster nicht schliessen, bei OK!!
- return;
- }
- }
- // Ok- und Cancel-Button > Dialog schliessen
- if ( e.getSource() == okButton || e.getSource() == cancelButton ) {
- setVisible( false );
- }
- }
- };
- okButton.addActionListener( action );
- cancelButton.addActionListener( action );
- applyButton.addActionListener( action );
+ /**
+ * Erzeugt einen neuen Dialog.
+ *
+ * @param parent
+ * Uebergeordnetes Fenster (kann {@code null} sein)
+ * @param mapPane
+ * MapPane fuer welches {@link FeatureSelectedEvent} ausgeloest
+ * werden
+ * @param mapLayer
+ * MapLayer, aus dem die FeatureCollection stammt, auf der der
+ * Filter definiert wird
+ * @param initGUI
+ * bestimmt, ob {@link #initGUI()} aufgerufen werden soll. Wenn
+ * {@code false}, muss der Konstruktor der Unterklasse dafuer
+ * sorgen, dass {@link #initGUI()} aufgerufen wird
+ * @exception IOException
+ * falls beim Ermitteln der {@link FeatureCollection} aus dem
+ * Layer ein Fehler auftritt
+ *
+ * CHANGE BY SK: Takes {@link Window} instead of
+ * {@link Frame}
+ * @author <a href="mailto:skpublic at wikisquare.de">Stefan Alfons
+ * Krüger</a>
+ */
+ protected FeatureLayerFilterDialog(Window parent, JMapPane mapPane,
+ MapLayer mapLayer, boolean initGUI) {
+ super(parent);
+ setModal(true);
+ if (mapLayer != null)
+ this.setTitle(frameTitle + " [" + mapLayer.getTitle() + "]");
+ else
+ this.setTitle(frameTitle);
+ this.setLayout(new BorderLayout());
+ this.setSize(380, 200);
+ this.mapPane = mapPane;
+ this.layer = mapLayer;
+ if (initGUI) {
+ initGUI();
+ pack();
+ }
+ }
- // Wenn sich die die Bezeichnung des Layers aendert, soll auch der
- // Titel des Filter-Fensters geaendert werden
- layer.addMapLayerListener( new MapLayerAdapter() {
- public void layerChanged(MapLayerEvent e) {
- // Bezeichnung der Checkbox aendern
- setTitle(frameTitle + " ["+layer.getTitle()+"]");
- }
- });
- }
+ /**
+ * Initalisiert die GUI.
+ */
+ protected void initGUI() {
- /**
- * Kann von Sub-Klassen ueberschrieben werden, um bestimmte Operatoren
- * in der Auswahl-Liste auszublenden.
- * @param operator ein Operator
- * @return immer {@code true}
- */
- protected boolean acceptOperator(String operator) {
- return true;
- }
+ add(getFilterPanel(), BorderLayout.CENTER);
+ JPanel buttonPanel = new JPanel(
+ new FlowLayout(FlowLayout.CENTER, 10, 5));
+ buttonPanel.add(okButton);
+ buttonPanel.add(cancelButton);
+ buttonPanel.add(applyButton);
+ add(buttonPanel, BorderLayout.SOUTH);
- /**
- * Liefert das MapPane, fuer das {@link FeatureSelectedEvent FeatureSelectedEvents}
- * ausgeloest werden.
- */
- public JMapPane getMapPane() {
- return mapPane;
- }
+ // Aktionen der Filter-Fenster-Button
+ ActionListener action = new ActionListener() {
+ public void actionPerformed(ActionEvent e) {
+ // Ok- und Apply-Button > Filter anwenden und Event erzeugen
+ if (e.getSource() == okButton || e.getSource() == applyButton) {
+ // FeatureCollection filtern
+ final Filter newFilter;
+ if (getFilterPanel().getRule() == null
+ || getFilterPanel().getRule().equals("")) {
+ newFilter = Filter.INCLUDE;
+ } else {
+ newFilter = getFilter();
+ }
- /**
- * Liefert das Layer, aus dem die {@link FeatureCollection} stammt auf der
- * der Filter definiert wird.
- */
- public MapLayer getMapLayer() {
- return layer;
- }
+ final Filter fiterInAction = getMapLayer().getQuery()
+ .getFilter();
- /**
- * Liefert das Panel, in dem der Filter definiert und die Vorschau angezeigt
- * wird.
- */
- public FeatureCollectionFilterPanel getFeatureCollectionFilterPanel() {
- return filterPanel;
- }
+ if (getMapPane() != null
+ && !fiterInAction.equals(newFilter)) {
- /**
- * Liefert die aktuell im Dialog eingegebene Formel.
- */
- public String getFilterRule() {
- return filterPanel.getRule();
- }
+ try {
+ FeatureCollection<SimpleFeatureType, SimpleFeature> fc = getFilterPanel()
+ .filterFeatureCollection();
+ FeatureSelectedEvent fse = new FeatureSelectedEvent(
+ getMapPane(), layer, fc.getBounds(), fc,
+ FeatureLayerFilterDialog.this);
+ getMapPane().fireMapPaneEvent(fse);
+ } catch (Exception err) {
+ ExceptionDialog.show(getFilterPanel(), err);
+ // Fenster nicht schliessen, bei OK!!
+ return;
+ }
+ }
+ }
+ // Ok- und Cancel-Button > Dialog schliessen
+ if (e.getSource() == okButton || e.getSource() == cancelButton) {
+ dispose();
+ }
+ }
+ };
+ okButton.addActionListener(action);
+ cancelButton.addActionListener(action);
+ applyButton.addActionListener(action);
- /**
- * Setzt die im Dialog eingegebene Formel und aktualisiert entsprechend die
- * Vorschau
- * @param rule Formel als String
- */
- public void setFilterRule(String rule) {
- filterPanel.setRule(rule);
- }
+ // Wenn sich die die Bezeichnung des Layers aendert, soll auch der
+ // Titel des Filter-Fensters geaendert werden
+ layer.addMapLayerListener(new MapLayerAdapter() {
+ public void layerChanged(MapLayerEvent e) {
+ // Bezeichnung der Checkbox aendern
+ setTitle(frameTitle + " [" + layer.getTitle() + "]");
+ }
+ });
+ }
- /**
- * Liefert den Filter der aktuell im Dialog eingegebenen Formel.
- */
- public Filter getFilter() {
- return filterPanel.createFilter();
- }
+ public FeatureCollectionFilterPanel getFilterPanel() {
+ if (filterPanel == null) {
+ try {
- /**
- * Belegt die Labels und Buttons im Dialog neu
- * @param captionMap Map in der die neuen Labels hinterlegt sind.
- * @see FeatureLayerFilterDialog
- */
- public void resetCaptions(Map<String,Object> captionMap) {
- SwingUtil.resetCaption ( okButton, captionMap.get(OK_BUTTON) );
- SwingUtil.resetCaption ( applyButton, captionMap.get(APPLY_BUTTON) );
- SwingUtil.resetCaption ( cancelButton, captionMap.get(CANCEL_BUTTON) );
- Object caption = captionMap.get( DIALOG_TITLE );
- if ( caption != null ) {
- frameTitle = caption.toString();
- // Damit Layer-Bezeichnung in Titel uebernommen wird, ein MapLayerEvent
- // ausloesen
- layer.setTitle( layer.getTitle() );
- }
- filterPanel.resetCaptions( captionMap );
- }
+ filterPanel = new FeatureCollectionFilterPanel(FILTER_PARSER,
+ (FeatureCollection<SimpleFeatureType, SimpleFeature>) layer
+ .getFeatureSource().getFeatures(), true) {
+ @Override
+ protected void resetComponentsAfterTest(Throwable err) {
+ super.resetComponentsAfterTest(err);
+ // OK- und Uebernehmen-Button (de)aktivieren
+ okButton.setEnabled(err == null);
+ applyButton.setEnabled(err == null);
+ }
+
+ @Override
+ protected boolean acceptOperator(String operator) {
+ // Operatoren durch Methode des Dialogs filtern
+ return super.acceptOperator(operator)
+ && FeatureLayerFilterDialog.this
+ .acceptOperator(operator);
+ }
+ };
+ } catch (Exception e) {
+ throw new RuntimeException("Unable to create filterPanel:", e);
+ }
+ }
+ return filterPanel;
+ }
+
+ /**
+ * Kann von Sub-Klassen ueberschrieben werden, um bestimmte Operatoren in
+ * der Auswahl-Liste auszublenden.
+ *
+ * @param operator
+ * ein Operator
+ * @return immer {@code true}
+ */
+ protected boolean acceptOperator(String operator) {
+ return true;
+ }
+
+ /**
+ * Liefert das MapPane, fuer das {@link FeatureSelectedEvent
+ * FeatureSelectedEvents} ausgeloest werden.
+ */
+ public JMapPane getMapPane() {
+ return mapPane;
+ }
+
+ /**
+ * Liefert das Layer, aus dem die {@link FeatureCollection} stammt auf der
+ * der Filter definiert wird.
+ */
+ public MapLayer getMapLayer() {
+ return layer;
+ }
+
+ /**
+ * Liefert die aktuell im Dialog eingegebene Formel.
+ */
+ public String getFilterRule() {
+ return getFilterPanel().getRule();
+ }
+
+ /**
+ * Setzt die im Dialog eingegebene Formel und aktualisiert entsprechend die
+ * Vorschau
+ *
+ * @param rule
+ * Formel als String
+ */
+ public void setFilterRule(String rule) {
+ getFilterPanel().setRule(rule);
+ }
+
+ /**
+ * Liefert den Filter der aktuell im Dialog eingegebenen Formel.
+ */
+ public Filter getFilter() {
+ return getFilterPanel().createFilter();
+ }
+
+ /**
+ * Belegt die Labels und Buttons im Dialog neu
+ *
+ * @param captionMap
+ * Map in der die neuen Labels hinterlegt sind.
+ * @see FeatureLayerFilterDialog
+ */
+ public void resetCaptions(Map<String, Object> captionMap) {
+ SwingUtil.resetCaption(okButton, captionMap.get(OK_BUTTON));
+ SwingUtil.resetCaption(applyButton, captionMap.get(APPLY_BUTTON));
+ SwingUtil.resetCaption(cancelButton, captionMap.get(CANCEL_BUTTON));
+ Object caption = captionMap.get(DIALOG_TITLE);
+ if (caption != null) {
+ frameTitle = caption.toString();
+ // Damit Layer-Bezeichnung in Titel uebernommen wird, ein
+ // MapLayerEvent
+ // ausloesen
+ layer.setTitle(layer.getTitle());
+ }
+ filterPanel.resetCaptions(captionMap);
+ }
}
Modified: branches/1.0-gt2-2.6/src/skrueger/geotools/selection/FeatureMapLayerSelectionSynchronizer.java
===================================================================
--- branches/1.0-gt2-2.6/src/skrueger/geotools/selection/FeatureMapLayerSelectionSynchronizer.java 2009-10-02 17:20:00 UTC (rev 426)
+++ branches/1.0-gt2-2.6/src/skrueger/geotools/selection/FeatureMapLayerSelectionSynchronizer.java 2009-10-02 19:38:44 UTC (rev 427)
@@ -318,7 +318,7 @@
RenderingHints java2DHints = oldRenderer.getJava2DHints();
if (java2DHints != null) {
- newRenderer.setRendererHints(java2DHints);
+ newRenderer.setJava2DHints(java2DHints);
}
oldRenderer.setContext(null);
More information about the Schmitzm-commits
mailing list