New directory tree, with preprocessor/ inside interpretor/.
[Faustine.git] / interpretor / faust-0.9.47mr3 / compiler / draw / schema / blockSchema.cpp
diff --git a/interpretor/faust-0.9.47mr3/compiler/draw/schema/blockSchema.cpp b/interpretor/faust-0.9.47mr3/compiler/draw/schema/blockSchema.cpp
deleted file mode 100644 (file)
index ca5ff55..0000000
+++ /dev/null
@@ -1,302 +0,0 @@
-/************************************************************************
- ************************************************************************
-    FAUST compiler
-       Copyright (C) 2003-2004 GRAME, Centre National de Creation Musicale
-    ---------------------------------------------------------------------
-    This program is free software; you can redistribute it and/or modify
-    it under the terms of the GNU General Public License as published by
-    the Free Software Foundation; either version 2 of the License, or
-    (at your option) any later version.
-
-    This program is distributed in the hope that it will be useful,
-    but WITHOUT ANY WARRANTY; without even the implied warranty of
-    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
-    GNU General Public License for more details.
-
-    You should have received a copy of the GNU General Public License
-    along with this program; if not, write to the Free Software
-    Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
- ************************************************************************
- ************************************************************************/
-
-
-#include "blockSchema.h"
-#include <assert.h>
-
-using namespace std;
-
-static double quantize(int n)
-{
-       int q = 3;
-       return dLetter * (q *((n+q-1)/q));
-}
-
-/**
- * Build a simple colored blockSchema with a certain number of
- * inputs and outputs, a text to be displayed, and an optional link.
- * Computes the size of the box according to the length of the text
- * and the maximum number of ports.
- */
-schema* makeBlockSchema (      unsigned int inputs,
-                                                       unsigned int outputs,
-                                                       const string& text,
-                                                       const string& color,
-                                                       const string& link )
-{
-       // determine the optimal size of the box
-       double minimal = 3*dWire;
-       double w = 2*dHorz + max( minimal, quantize(text.size()) );
-       double h = 2*dVert + max( minimal, max(inputs, outputs) * dWire );
-
-       return new blockSchema(inputs, outputs, w, h, text, color, link);
-}
-
-/**
- * Build a simple colored blockSchema with a certain number of
- * inputs and outputs, a text to be displayed, and an optional link.
- * The length of the text as well as th number of inputs and outputs
- * are used to compute the size of the blockSchema
- */
-blockSchema::blockSchema (     unsigned int inputs,
-                                                       unsigned int outputs,
-                                                       double width,
-                                                       double height,
-                                                       const string& text,
-                                                       const string& color,
-                                                       const string& link )
-
-       :       schema( inputs, outputs, width, height ),
-               fText(text),
-               fColor(color),
-               fLink(link)
-{
-    for (unsigned int i=0; i<inputs; i++)      fInputPoint.push_back(point(0,0));
-    for (unsigned int i=0; i<outputs; i++)     fOutputPoint.push_back(point(0,0));
-}
-
-/**
- * Define the graphic position of the blockSchema. Computes the graphic
- * position of all the elements, in particular the inputs and outputs.
- * This method must be called before draw(), otherwise draw is not allowed
- */
-void blockSchema::place(double x, double y, int orientation)
-{
-       beginPlace(x, y, orientation);
-
-       placeInputPoints();
-       placeOutputPoints();
-
-       endPlace();
-}
-
-/**
- * Returns an input point
- */
-point blockSchema::inputPoint(unsigned int i) const
-{
-       assert (placed());
-       assert (i < inputs());
-       return fInputPoint[i];
-}
-
-/**
- * Returns an output point
- */
-point blockSchema::outputPoint(unsigned int i) const
-{
-       assert (placed());
-       assert (i < outputs());
-       return fOutputPoint[i];
-}
-
-/**
- * Computes the input points according to the position and the
- * orientation of the blockSchema
- */
-void blockSchema::placeInputPoints()
-{
-       int             N = inputs();
-
-       if (orientation() == kLeftRight) {
-
-               double  px = x();
-               double  py = y() + (height() - dWire*(N-1))/2;
-
-               for (int i=0; i<N; i++) {
-                       fInputPoint[i] = point(px, py+i*dWire);
-               }
-
-       } else {
-
-               double px = x() + width();
-               double py = y() + height() - (height() - dWire*(N-1))/2;
-
-               for (int i=0; i<N; i++) {
-                       fInputPoint[i] = point(px, py-i*dWire);
-               }
-       }
-}
-
-
-/**
- * Computes the output points according to the position and the
- * orientation of the blockSchema
- */
-void blockSchema::placeOutputPoints()
-{
-       int N = outputs();
-
-       if (orientation() == kLeftRight) {
-
-               double px = x() + width();
-               double py = y() + (height() - dWire*(N-1))/2;
-
-               for (int i=0; i<N; i++) {
-                       fOutputPoint[i] = point(px, py + i*dWire);
-               }
-
-       } else {
-
-               double px = x();
-               double py = y() + height() - (height() - dWire*(N-1))/2;
-
-               for (int i=0; i<N; i++) {
-                       fOutputPoint[i] = point(px, py - i*dWire);
-               }
-       }
-}
-
-
-/**
- * Draw the blockSchema on the device. This methos can only
- * be called after the blockSchema have been placed
- */
-void blockSchema::draw(device& dev)
-{
-       assert(placed());
-
-       drawRectangle(dev);
-       drawText(dev);
-       drawOrientationMark(dev);
-    drawInputWires(dev);
-    drawOutputWires(dev);
-}
-
-/**
- * Draw the colored rectangle with the optional link
- */
-void blockSchema::drawRectangle(device& dev)
-{
-       dev.rect(       x() + dHorz,
-                               y() + dVert,
-                               width() - 2*dHorz,
-                               height() - 2*dVert,
-                               fColor.c_str(),
-                               fLink.c_str()
-                       );
-}
-
-
-/**
- * Draw the text centered on the box
- */
-void blockSchema::drawText(device& dev)
-{
-       dev.text(       x() + width()/2,
-                               y() + height()/2,
-                fText.c_str(),
-                fLink.c_str()
-                       );
-}
-
-
-/**
- * Draw the orientation mark, a small point that indicates
- * the first input (like integrated circuits)
- */
-void blockSchema::drawOrientationMark(device& dev)
-{
-       double px, py;
-
-       if (orientation() == kLeftRight) {
-               px = x() + dHorz;
-               py = y() + dVert;
-       } else {
-               px = x() + width() - dHorz;
-               py = y() + height() - dVert;
-       }
-
-       dev.markSens( px, py, orientation() );
-}
-#if 1
-/**
- * Draw horizontal arrows from the input points to the
- * blockSchema rectangle
- */
-void blockSchema::drawInputWires(device& dev)
-{
-    double dx = (orientation() == kLeftRight) ? dHorz : -dHorz;
-
-    for (unsigned int i=0; i<inputs(); i++) {
-        point p = fInputPoint[i];
-        //dev.trait(p.x, p.y, p.x+dx, p.y);
-        dev.fleche(p.x+dx, p.y, 0, orientation());
-    }
-}
-
-/**
- * Draw horizontal line from the blockSchema rectangle to the
- * output points
- */
-void blockSchema::drawOutputWires(device& dev)
-{
-    //double dx = (orientation() == kLeftRight) ? dHorz : -dHorz;
-
-    for (unsigned int i=0; i<outputs(); i++) {
-        point p = fOutputPoint[i];
-        //dev.trait(p.x, p.y, p.x-dx, p.y);
-    }
-}
-#endif
-
-/**
- * Draw horizontal arrows from the input points to the
- * blockSchema rectangle
- */
-void blockSchema::collectTraits(collector& c)
-{
-    collectInputWires(c);
-    collectOutputWires(c);
-}
-
-/**
- * Draw horizontal arrows from the input points to the
- * blockSchema rectangle
- */
-void blockSchema::collectInputWires(collector& c)
-{
-    double dx = (orientation() == kLeftRight) ? dHorz : -dHorz;
-
-    for (unsigned int i=0; i<inputs(); i++) {
-        point p = fInputPoint[i];
-        c.addTrait(trait(point(p.x, p.y), point(p.x+dx, p.y)));     // in->out direction
-        c.addInput(point(p.x+dx, p.y));
-    }
-}
-
-/**
- * Draw horizontal line from the blockSchema rectangle to the
- * output points
- */
-void blockSchema::collectOutputWires(collector& c)
-{
-    double dx = (orientation() == kLeftRight) ? dHorz : -dHorz;
-
-    for (unsigned int i=0; i<outputs(); i++) {
-        point p = fOutputPoint[i];
-        c.addTrait(trait(point(p.x-dx, p.y), point(p.x, p.y)));     // in->out direction
-        c.addOutput(point(p.x-dx, p.y));
-    }
-}
-
-