FGGroupLayer::draw ()
{
if (test()) {
+ transform();
int nLayers = _layers.size();
for (int i = 0; i < nLayers; i++)
_layers[i]->draw();
// Implementation of FGSwitchLayer.
////////////////////////////////////////////////////////////////////////
-FGSwitchLayer::FGSwitchLayer (int w, int h, const SGPropertyNode * node,
- FGInstrumentLayer * layer1,
- FGInstrumentLayer * layer2)
- : FGInstrumentLayer(w, h), _node(node), _layer1(layer1), _layer2(layer2)
-{
-}
-
-FGSwitchLayer::~FGSwitchLayer ()
+FGSwitchLayer::FGSwitchLayer ()
+ : FGGroupLayer()
{
- delete _layer1;
- delete _layer2;
}
void
{
if (test()) {
transform();
- if (_node->getBoolValue()) {
- _layer1->draw();
- } else {
- _layer2->draw();
+ int nLayers = _layers.size();
+ for (int i = 0; i < nLayers; i++) {
+ if (_layers[i]->test()) {
+ _layers[i]->draw();
+ return;
+ }
}
}
}
virtual void draw ();
// transfer pointer ownership
virtual void addLayer (FGInstrumentLayer * layer);
-private:
+protected:
vector<FGInstrumentLayer *> _layers;
};
/**
- * A layer that switches between two other layers.
+ * A group layer that switches among its children.
*
- * The usefulness of this layer is questionable now that all layers
- * can have conditions, and it may be deprecated soon.
+ * The first layer that passes its condition will be drawn, and
+ * any following layers will be ignored.
*/
-class FGSwitchLayer : public FGInstrumentLayer
+class FGSwitchLayer : public FGGroupLayer
{
public:
// Transfer pointers!!
- FGSwitchLayer (int w, int h, const SGPropertyNode * node,
- FGInstrumentLayer * layer1,
- FGInstrumentLayer * layer2);
- virtual ~FGSwitchLayer ();
-
+ FGSwitchLayer ();
virtual void draw ();
-private:
- const SGPropertyNode * _node;
- FGInstrumentLayer * _layer1, * _layer2;
};
layer = new FGGroupLayer();
for (int i = 0; i < node->nChildren(); i++) {
const SGPropertyNode * child = node->getChild(i);
- cerr << "Trying child " << child->getName() << endl;
- if (!strcmp(child->getName(), "layer")) {
- cerr << "succeeded!" << endl;
+ if (!strcmp(child->getName(), "layer"))
((FGGroupLayer *)layer)->addLayer(readLayer(child, w_scale, h_scale));
- }
}
}
// A switch instrument layer.
else if (type == "switch") {
- SGPropertyNode * target =
- fgGetNode(node->getStringValue("property"), true);
- FGInstrumentLayer * layer1 =
- readLayer(node->getNode("layer[0]"), w_scale, h_scale);
- FGInstrumentLayer * layer2 =
- readLayer(node->getNode("layer[1]"), w_scale, h_scale);
- layer = new FGSwitchLayer(w, h, target, layer1, layer2);
+ layer = new FGSwitchLayer();
+ for (int i = 0; i < node->nChildren(); i++) {
+ const SGPropertyNode * child = node->getChild(i);
+ if (!strcmp(child->getName(), "layer"))
+ ((FGGroupLayer *)layer)->addLayer(readLayer(child, w_scale, h_scale));
+ }
}
// A built-in instrument layer.