82a6d74d创建于 2025年4月30日历史提交
/***************************************************************************
                              xyce_script.cpp
                               ------------
    begin                : Wed Jun 22 2016
    copyright            : (C) 2016 by Vadim Kuznetsov
    email                : ra3xdh@gmail.com
 ***************************************************************************/

/***************************************************************************
 *                                                                         *
 *   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.                                   *
 *                                                                         *
 ***************************************************************************/
#include "incl_script.h"
#include "main.h"
#include <QFontInfo>
#include <QFontMetrics>


InclScript::InclScript()
{
    isEquation = false;
    Type = isComponent; // Analogue and digital component.
    Description = QObject::tr("Include script before simulation");
    Simulator = spicecompat::simSpice;

    QFont f = QucsSettings.font;
    f.setWeight(QFont::Light);
    f.setPointSizeF(12.0);
    QFontMetrics  metrics(f, 0);  // use the the screen-compatible metric
    QSize r = metrics.size(0, QObject::tr(".INCLUDE SCRIPT"));
    int xb = r.width()  >> 1;
    int yb = r.height() >> 1;

    Lines.append(new qucs::Line(-xb, -yb, -xb,  yb,QPen(Qt::darkRed,2)));
    Lines.append(new qucs::Line(-xb,  yb,  xb+3,yb,QPen(Qt::darkRed,2)));
    Texts.append(new Text(-xb+4,  -yb-3, QObject::tr(".INCLUDE SCRIPT"),
                          QColor(0,0,0), QFontInfo(f).pixelSize()));

    x1 = -xb-3;  y1 = -yb-5;
    x2 =  xb+9; y2 =  yb+3;

    tx = x1+4;
    ty = y2+4;
    Model = "INCLSCR";
    Name  = "INCLSCR";
    SpiceModel = "INCLSCR";

    // The index of the first 4 properties must not changed. Used in recreate().
    Props.append(new Property("SpiceCode", "\n"
                              ".PARAM rp = 1k\n"
                              ".FUNC prod(x,y) = {x*y}", true,
                              "Insert spice code here"));
    Props.append(new Property("","",false,"Extra property"));
    Props.append(new Property("","",false,"Extra property"));

}

InclScript::~InclScript()
{
}

Component* InclScript::newOne()
{
  return new InclScript();
}

Element* InclScript::info(QString& Name, char* &BitmapFile, bool getNewOne)
{
  Name = QObject::tr("Include script");
  BitmapFile = (char *) "incl_script";

  if(getNewOne)  return new InclScript();
  return 0;
}

QString InclScript::getExpression(spicecompat::SpiceDialect dialect /* = spicecompat::SPICEDefault */)
{
    if (isActive != COMP_IS_ACTIVE || dialect == spicecompat::CDL)
        return QString();
    return Props.at(0)->Value+"\n";
}