Toshihiro Shimizu 890ddd
Toshihiro Shimizu 890ddd
Toshihiro Shimizu 890ddd
// TnzCore includes
Toshihiro Shimizu 890ddd
#include "tofflinegl.h"
Toshihiro Shimizu 890ddd
#include "tstroke.h"
Toshihiro Shimizu 890ddd
#include "tconvert.h"
Toshihiro Shimizu 890ddd
#include "tvectorimage.h"
Toshihiro Shimizu 890ddd
#include "tundo.h"
shun-iwasawa 0a9e80
#include "tconst.h"
Toshihiro Shimizu 890ddd
Toshihiro Shimizu 890ddd
// TnzLib includes
Toshihiro Shimizu 890ddd
#include "toonz/tstageobjectid.h"
Toshihiro Shimizu 890ddd
#include "toonz/tstageobject.h"
Toshihiro Shimizu 890ddd
#include "toonz/tstageobjectspline.h"
Toshihiro Shimizu 890ddd
#include "toonz/txsheet.h"
Toshihiro Shimizu 890ddd
#include "toonz/txshcell.h"
Toshihiro Shimizu 890ddd
#include "toonz/txshcolumn.h"
Toshihiro Shimizu 890ddd
#include "toonz/toonzscene.h"
Toshihiro Shimizu 890ddd
#include "toonz/sceneproperties.h"
Toshihiro Shimizu 890ddd
#include "toonz/tstageobjectcmd.h"
Toshihiro Shimizu 890ddd
#include "toonz/fxcommand.h"
Toshihiro Shimizu 890ddd
#include "toonz/txshzeraryfxcolumn.h"
Toshihiro Shimizu 890ddd
#include "toonz/tcolumnfx.h"
Toshihiro Shimizu 890ddd
#include "toonz/tstageobjecttree.h"
Toshihiro Shimizu 890ddd
#include "toonz/tframehandle.h"
Toshihiro Shimizu 890ddd
#include "toonz/txshchildlevel.h"
Toshihiro Shimizu 890ddd
#include "toonz/txshlevelcolumn.h"
Toshihiro Shimizu 890ddd
#include "toonz/txshleveltypes.h"
Toshihiro Shimizu 890ddd
#include "toonz/tcolumnhandle.h"
Toshihiro Shimizu 890ddd
#include "toonz/hook.h"
Toshihiro Shimizu 890ddd
#include "toonz/preferences.h"
Toshihiro Shimizu 890ddd
#include "toonz/txshsimplelevel.h"
Toshihiro Shimizu 890ddd
Toshihiro Shimizu 890ddd
// TnzQt includes
Toshihiro Shimizu 890ddd
#include "toonzqt/gutil.h"
Toshihiro Shimizu 890ddd
#include "toonzqt/icongenerator.h"
Toshihiro Shimizu 890ddd
#include "toonzqt/stageschematicscene.h"
Toshihiro Shimizu 890ddd
#include "toonzqt/menubarcommand.h"
Toshihiro Shimizu 890ddd
Toshihiro Shimizu 890ddd
// Qt includes
Toshihiro Shimizu 890ddd
#include <qpixmap></qpixmap>
Toshihiro Shimizu 890ddd
#include <qregexpvalidator></qregexpvalidator>
Toshihiro Shimizu 890ddd
#include <qgraphicsscenemouseevent></qgraphicsscenemouseevent>
Toshihiro Shimizu 890ddd
#include <qfocusevent></qfocusevent>
Toshihiro Shimizu 890ddd
#include <qtimer></qtimer>
Toshihiro Shimizu 890ddd
#include <qmenu></qmenu>
Toshihiro Shimizu 890ddd
#include <qtextcursor></qtextcursor>
Toshihiro Shimizu 890ddd
#include <qset></qset>
Toshihiro Shimizu 890ddd
Toshihiro Shimizu 890ddd
#include "toonzqt/stageschematicnode.h"
Toshihiro Shimizu 890ddd
Shinya Kitaoka 120a6e
namespace {
Shinya Kitaoka 120a6e
void drawCamera(QPainter *painter, const QColor &color, const QPen &pen,
Shinya Kitaoka 120a6e
                double width, double height) {
Shinya Kitaoka 120a6e
  QPointF points[3];
Shinya Kitaoka 120a6e
  points[0] = QPointF(width, height);
Shinya Kitaoka 120a6e
  points[1] = QPointF(width, height * 0.5);
Shinya Kitaoka 120a6e
  points[2] = QPointF(width - (height * 2 / 3), height * 0.75);
Shinya Kitaoka 120a6e
  painter->setBrush(color);
Shinya Kitaoka 120a6e
  painter->drawPolygon(points, 3);
Shinya Kitaoka 120a6e
  painter->drawRect(
Shinya Kitaoka 120a6e
      QRectF(width * 0.25, height * 0.5, width * 0.5, height * 0.5));
Shinya Kitaoka 120a6e
  QRectF rect(0, 0, height * 0.49, height * 0.49);
Shinya Kitaoka 120a6e
  rect.moveCenter(QPointF(width * 0.20, height * 0.4));
Shinya Kitaoka 120a6e
  painter->drawEllipse(rect);
Shinya Kitaoka 120a6e
  rect.moveCenter(QPointF((width * 3 / 5) + 1, height * 0.25));
Shinya Kitaoka 120a6e
  painter->drawEllipse(rect);
Shinya Kitaoka 120a6e
  painter->drawLine(0, height * 0.75, width * 0.25, height * 0.75);
Shinya Kitaoka 120a6e
  painter->drawLine(width, height * 0.75, width + 5, height * 0.75);
Shinya Kitaoka 120a6e
  painter->setBrush(QColor(235, 235, 235, 255));
Shinya Kitaoka 120a6e
  painter->drawRect(0, -14, width, 14);
Shinya Kitaoka 120a6e
}
Shinya Kitaoka 120a6e
}  // namespace
Toshihiro Shimizu 890ddd
Toshihiro Shimizu 890ddd
//========================================================
Toshihiro Shimizu 890ddd
//
Shinya Kitaoka 120a6e
// ColumnPainter
Toshihiro Shimizu 890ddd
//
Toshihiro Shimizu 890ddd
//========================================================
Toshihiro Shimizu 890ddd
Shinya Kitaoka 120a6e
ColumnPainter::ColumnPainter(StageSchematicColumnNode *parent, double width,
Shinya Kitaoka 120a6e
                             double height, const QString &name)
Shinya Kitaoka 120a6e
    : QGraphicsItem(parent)
Shinya Kitaoka 120a6e
    , m_parent(parent)
Shinya Kitaoka 120a6e
    , m_width(width)
Shinya Kitaoka 120a6e
    , m_height(height)
Shinya Kitaoka 120a6e
    , m_name(name) {
Shinya Kitaoka 120a6e
  setFlag(QGraphicsItem::ItemIsMovable, false);
Shinya Kitaoka 120a6e
  setFlag(QGraphicsItem::ItemIsSelectable, false);
Shinya Kitaoka 120a6e
  setFlag(QGraphicsItem::ItemIsFocusable, false);
Shinya Kitaoka 120a6e
  assert(parent->getStageObject()->getId().isColumn());
Shinya Kitaoka 120a6e
  connect(IconGenerator::instance(), SIGNAL(iconGenerated()), this,
Shinya Kitaoka 120a6e
          SLOT(onIconGenerated()));
Shinya Kitaoka 120a6e
Shinya Kitaoka 120a6e
  StageSchematicScene *stageScene =
Shinya Kitaoka 120a6e
      dynamic_cast<stageschematicscene *="">(scene());</stageschematicscene>
Shinya Kitaoka 120a6e
  if (!stageScene) return;
Shinya Kitaoka 120a6e
Shinya Kitaoka 120a6e
  TXsheet *xsh = stageScene->getXsheet();
Shinya Kitaoka 120a6e
  int r0, r1, index = parent->getStageObject()->getId().getIndex();
Shinya Kitaoka 120a6e
  xsh->getCellRange(index, r0, r1);
Shinya Kitaoka 120a6e
  if (r0 > r1) return;
Shinya Kitaoka 120a6e
  TXshCell firstCell = xsh->getCell(r0, index);
Shinya Kitaoka 120a6e
  if (!firstCell.isEmpty())
Shinya Kitaoka 120a6e
    m_type = firstCell.m_level->getType();
Shinya Kitaoka 120a6e
  else
Shinya Kitaoka 120a6e
    m_type = NO_XSHLEVEL;
Shinya Kitaoka 120a6e
}
Shinya Kitaoka 120a6e
Shinya Kitaoka 120a6e
//--------------------------------------------------------
Shinya Kitaoka 120a6e
Shinya Kitaoka 120a6e
ColumnPainter::~ColumnPainter() {}
Shinya Kitaoka 120a6e
Shinya Kitaoka 120a6e
//--------------------------------------------------------
Shinya Kitaoka 120a6e
Shinya Kitaoka 120a6e
QRectF ColumnPainter::boundingRect() const {
Shinya Kitaoka 120a6e
  // iwasawa
Shinya Kitaoka 120a6e
  if (m_parent->isOpened())
Shinya Kitaoka 120a6e
    return QRectF(-5, -54, m_width + 10, m_height + 59);
Shinya Kitaoka 120a6e
  else
Shinya Kitaoka 120a6e
    return QRectF(-5, -5, m_width + 10, m_height + 10);
Shinya Kitaoka 120a6e
}
Shinya Kitaoka 120a6e
Shinya Kitaoka 120a6e
//--------------------------------------------------------
Shinya Kitaoka 120a6e
Shinya Kitaoka 120a6e
void ColumnPainter::paint(QPainter *painter,
Shinya Kitaoka 120a6e
                          const QStyleOptionGraphicsItem *option,
Shinya Kitaoka 120a6e
                          QWidget *widget) {
Shinya Kitaoka 120a6e
  StageSchematicScene *stageScene =
Shinya Kitaoka 120a6e
      dynamic_cast<stageschematicscene *="">(scene());</stageschematicscene>
Shinya Kitaoka 120a6e
  if (!stageScene) return;
Shinya Kitaoka 120a6e
  // obtain level name and type
Shinya Kitaoka 120a6e
  int levelType;
Shinya Kitaoka 120a6e
  QString levelName;
Shinya Kitaoka 120a6e
  m_parent->getLevelTypeAndName(levelType, levelName);
Shinya Kitaoka 120a6e
manongjohn d6e3cc
  QColor nodeColor;
manongjohn d6e3cc
  SchematicViewer *viewer = stageScene->getSchematicViewer();
manongjohn d6e3cc
  viewer->getNodeColor(levelType, nodeColor);
Shinya Kitaoka 120a6e
shun-iwasawa 045b61
  if (m_isReference && levelType != PLT_XSHLEVEL) {
shun-iwasawa 045b61
    painter->setBrush(viewer->getReferenceColumnColor());
shun-iwasawa 045b61
    painter->setPen(nodeColor);
shun-iwasawa 045b61
  } else {
shun-iwasawa 045b61
    painter->setBrush(nodeColor);
shun-iwasawa 045b61
    painter->setPen(Qt::NoPen);
shun-iwasawa 045b61
  }
shun-iwasawa 045b61
Shinya Kitaoka 120a6e
  if (levelType == PLT_XSHLEVEL)
Shinya Kitaoka 120a6e
    painter->drawRoundRect(0, 0, m_width, m_height, 32, 99);
Shinya Kitaoka 120a6e
  else
Shinya Kitaoka 120a6e
    painter->drawRect(0, 0, m_width, m_height);
Shinya Kitaoka 120a6e
Shinya Kitaoka 120a6e
  // draw palette icon for palette node
Shinya Kitaoka 120a6e
  if (levelType == PLT_XSHLEVEL) {
Shinya Kitaoka 120a6e
    QPixmap palettePm = QPixmap(":Resources/schematic_palette.png");
Shinya Kitaoka 120a6e
    QRect paletteRect(-3, -1, 20, 16);
Shinya Kitaoka 120a6e
    painter->drawPixmap(paletteRect, palettePm);
Shinya Kitaoka 120a6e
  }
Shinya Kitaoka 120a6e
Shinya Kitaoka 120a6e
  if (m_parent->isOpened()) {
Shinya Kitaoka 120a6e
    // Draw the pixmap
Shinya Kitaoka 120a6e
    painter->setBrush(Qt::NoBrush);
Shinya Kitaoka 120a6e
    painter->setPen(QColor(0, 0, 0, 255));
Shinya Kitaoka 120a6e
    QPixmap pixmap = scalePixmapKeepingAspectRatio(
Shinya Kitaoka 120a6e
        m_parent->getPixmap(), QSize(m_width, 49), Qt::transparent);
Shinya Kitaoka 120a6e
    if (!pixmap.isNull()) {
Shinya Kitaoka 120a6e
      painter->drawPixmap(QPointF(0, -pixmap.height()), pixmap);
Shinya Kitaoka 120a6e
    } else {
Shinya Kitaoka 120a6e
      painter->setBrush(QColor(255, 255, 255, 255));
Shinya Kitaoka 120a6e
      painter->drawRect(0, -pixmap.height(), m_width, pixmap.height());
Shinya Kitaoka 120a6e
    }
Shinya Kitaoka 120a6e
  }
manongjohn d6e3cc
  painter->setPen(viewer->getTextColor());
Shinya Kitaoka 120a6e
  painter->setBrush(Qt::NoBrush);
Shinya Kitaoka 120a6e
Shinya Kitaoka 120a6e
  //! draw the name only if it is not editing
Shinya Kitaoka 120a6e
  if (!m_parent->isNameEditing()) {
Shinya Kitaoka 120a6e
    StageSchematicScene *stageScene =
Shinya Kitaoka 120a6e
        dynamic_cast<stageschematicscene *="">(scene());</stageschematicscene>
Shinya Kitaoka 120a6e
    if (!stageScene) return;
Shinya Kitaoka 120a6e
Shinya Kitaoka 120a6e
    // if this is current object
Shinya Kitaoka 120a6e
    if (stageScene->getCurrentObject() == m_parent->getStageObject()->getId())
manongjohn d6e3cc
      painter->setPen(viewer->getSelectedNodeTextColor());
Shinya Kitaoka 120a6e
    QRectF columnNameRect(18, 2, 54, 14);
Shinya Kitaoka 120a6e
    QString elidedName =
Shinya Kitaoka 120a6e
        elideText(m_name, painter->font(), columnNameRect.width());
Shinya Kitaoka 120a6e
    painter->drawText(columnNameRect, Qt::AlignLeft | Qt::AlignVCenter,
Shinya Kitaoka 120a6e
                      elidedName);
Shinya Kitaoka 120a6e
  }
Shinya Kitaoka 120a6e
Shinya Kitaoka 120a6e
  // level names
Shinya Kitaoka 120a6e
  QRectF levelNameRect(18, 16, 54, 14);
Shinya Kitaoka 120a6e
  QString elidedName =
Shinya Kitaoka 120a6e
      elideText(levelName, painter->font(), levelNameRect.width());
Shinya Kitaoka 120a6e
  painter->drawText(levelNameRect, Qt::AlignLeft | Qt::AlignVCenter,
Shinya Kitaoka 120a6e
                    elidedName);
Shinya Kitaoka 120a6e
}
Shinya Kitaoka 120a6e
Shinya Kitaoka 120a6e
//--------------------------------------------------------
Shinya Kitaoka 120a6e
Shinya Kitaoka 120a6e
void ColumnPainter::contextMenuEvent(QGraphicsSceneContextMenuEvent *cme) {
Shinya Kitaoka 120a6e
  StageSchematicScene *stageScene =
Shinya Kitaoka 120a6e
      dynamic_cast<stageschematicscene *="">(scene());</stageschematicscene>
Shinya Kitaoka 120a6e
  QMenu menu(stageScene->views()[0]);
Shinya Kitaoka 120a6e
Shinya Kitaoka 120a6e
  QAction *resetCenter = new QAction(tr("&Reset Center"), &menu);
Shinya Kitaoka 120a6e
  connect(resetCenter, SIGNAL(triggered()), stageScene, SLOT(onResetCenter()));
Shinya Kitaoka 120a6e
  QAction *collapse   = CommandManager::instance()->getAction("MI_Collapse");
manongjohn d6e3cc
  QAction *openSubxsh = CommandManager::instance()->getAction("MI_OpenChild");
Shinya Kitaoka 120a6e
  QAction *explodeChild =
Shinya Kitaoka 120a6e
      CommandManager::instance()->getAction("MI_ExplodeChild");
Shinya Kitaoka 120a6e
  QAction *group = CommandManager::instance()->getAction("MI_Group");
Shinya Kitaoka 120a6e
Shinya Kitaoka 120a6e
  QAction *clear = CommandManager::instance()->getAction("MI_Clear");
Shinya Kitaoka 120a6e
  QAction *copy  = CommandManager::instance()->getAction("MI_Copy");
Shinya Kitaoka 120a6e
  QAction *cut   = CommandManager::instance()->getAction("MI_Cut");
Shinya Kitaoka 120a6e
  QAction *paste = CommandManager::instance()->getAction("MI_Paste");
Shinya Kitaoka 120a6e
Shinya Kitaoka 120a6e
  menu.addAction(resetCenter);
Shinya Kitaoka 120a6e
  menu.addSeparator();
Shinya Kitaoka 120a6e
  menu.addAction(collapse);
Shinya Kitaoka 120a6e
  TFrameHandle *frameHandle = stageScene->getFrameHandle();
Shinya Kitaoka 120a6e
  if (frameHandle->getFrameType() == TFrameHandle::SceneFrame) {
Shinya Kitaoka 120a6e
    int col       = m_parent->getStageObject()->getId().getIndex();
Shinya Kitaoka 120a6e
    int fr        = frameHandle->getFrame();
Shinya Kitaoka 120a6e
    TXsheet *xsh  = stageScene->getXsheet();
Shinya Kitaoka 120a6e
    TXshCell cell = xsh->getCell(fr, col);
Shinya Kitaoka 120a6e
    if (dynamic_cast<txshchildlevel *="">(cell.m_level.getPointer())) {</txshchildlevel>
Shinya Kitaoka 120a6e
      menu.addAction(openSubxsh);
Shinya Kitaoka 120a6e
      menu.addAction(explodeChild);
Shinya Kitaoka 120a6e
    }
Shinya Kitaoka 120a6e
  }
Shinya Kitaoka 120a6e
  menu.addSeparator();
Shinya Kitaoka 120a6e
Shinya Kitaoka 120a6e
  menu.addAction(clear);
Shinya Kitaoka 120a6e
  menu.addAction(copy);
Shinya Kitaoka 120a6e
  menu.addAction(cut);
Shinya Kitaoka 120a6e
  menu.addAction(paste);
Shinya Kitaoka 120a6e
  menu.addSeparator();
Shinya Kitaoka 120a6e
Shinya Kitaoka 120a6e
  menu.addAction(group);
Shinya Kitaoka 120a6e
  menu.exec(cme->screenPos());
Shinya Kitaoka 120a6e
}
Shinya Kitaoka 120a6e
Shinya Kitaoka 120a6e
//--------------------------------------------------------
Shinya Kitaoka 120a6e
Shinya Kitaoka 120a6e
void ColumnPainter::onIconGenerated() {
Shinya Kitaoka 120a6e
  if (m_type != OVL_XSHLEVEL) return;
Shinya Kitaoka 120a6e
  StageSchematicScene *stageScene =
Shinya Kitaoka 120a6e
      dynamic_cast<stageschematicscene *="">(scene());</stageschematicscene>
Shinya Kitaoka 120a6e
  if (!stageScene) return;
Shinya Kitaoka 120a6e
Shinya Kitaoka 120a6e
  TXsheet *xsh = stageScene->getXsheet();
Shinya Kitaoka 120a6e
  int r0, r1, index = m_parent->getStageObject()->getId().getIndex();
Shinya Kitaoka 120a6e
  xsh->getCellRange(index, r0, r1);
Shinya Kitaoka 120a6e
  if (r0 > r1) return;
Shinya Kitaoka 120a6e
  TXshCell firstCell = xsh->getCell(r0, index);
Shinya Kitaoka 120a6e
  int type           = firstCell.m_level->getType();
Shinya Kitaoka 120a6e
  if (m_type != type) {
Shinya Kitaoka 120a6e
    m_type = type;
Shinya Kitaoka 120a6e
    update();
Shinya Kitaoka 120a6e
  }
Toshihiro Shimizu 890ddd
}
Toshihiro Shimizu 890ddd
Toshihiro Shimizu 890ddd
//========================================================
Toshihiro Shimizu 890ddd
//
Shinya Kitaoka 120a6e
// GroupPainter
Toshihiro Shimizu 890ddd
//
Toshihiro Shimizu 890ddd
//========================================================
Toshihiro Shimizu 890ddd
Shinya Kitaoka 120a6e
GroupPainter::GroupPainter(StageSchematicGroupNode *parent, double width,
Shinya Kitaoka 120a6e
                           double height, const QString &name)
Shinya Kitaoka 120a6e
    : QGraphicsItem(parent)
Shinya Kitaoka 120a6e
    , m_parent(parent)
Shinya Kitaoka 120a6e
    , m_width(width)
Shinya Kitaoka 120a6e
    , m_height(height)
Shinya Kitaoka 120a6e
    , m_name(name) {
Shinya Kitaoka 120a6e
  setFlag(QGraphicsItem::ItemIsMovable, false);
Shinya Kitaoka 120a6e
  setFlag(QGraphicsItem::ItemIsSelectable, false);
Shinya Kitaoka 120a6e
  setFlag(QGraphicsItem::ItemIsFocusable, false);
Toshihiro Shimizu 890ddd
}
Toshihiro Shimizu 890ddd
Toshihiro Shimizu 890ddd
//--------------------------------------------------------
Toshihiro Shimizu 890ddd
Shinya Kitaoka 120a6e
GroupPainter::~GroupPainter() {}
Toshihiro Shimizu 890ddd
Toshihiro Shimizu 890ddd
//--------------------------------------------------------
Toshihiro Shimizu 890ddd
Shinya Kitaoka 120a6e
QRectF GroupPainter::boundingRect() const {
Shinya Kitaoka 120a6e
  return QRectF(-5, -5, m_width + 10, m_height + 10);
Toshihiro Shimizu 890ddd
}
Toshihiro Shimizu 890ddd
Toshihiro Shimizu 890ddd
//--------------------------------------------------------
Toshihiro Shimizu 890ddd
Shinya Kitaoka 120a6e
void GroupPainter::paint(QPainter *painter,
Shinya Kitaoka 120a6e
                         const QStyleOptionGraphicsItem *option,
Shinya Kitaoka 120a6e
                         QWidget *widget) {
Shinya Kitaoka 120a6e
  StageSchematicScene *stageScene =
Shinya Kitaoka 120a6e
      dynamic_cast<stageschematicscene *="">(scene());</stageschematicscene>
Shinya Kitaoka 120a6e
  if (!stageScene) return;
Toshihiro Shimizu 890ddd
manongjohn d6e3cc
  SchematicViewer *viewer = stageScene->getSchematicViewer();
manongjohn d6e3cc
Shinya Kitaoka 120a6e
  painter->save();
Shinya Kitaoka 120a6e
  QPen pen;
Shinya Kitaoka 120a6e
  if (m_parent->isSelected()) {
Shinya Kitaoka 120a6e
    painter->setBrush(QColor(0, 0, 0, 0));
Shinya Kitaoka 120a6e
    pen.setColor(QColor(255, 255, 255, 255));
Shinya Kitaoka 120a6e
    pen.setWidth(4.0);
Shinya Kitaoka 120a6e
    pen.setJoinStyle(Qt::RoundJoin);
Shinya Kitaoka 120a6e
    painter->setPen(pen);
Shinya Kitaoka 120a6e
    painter->drawRect(-2, -2, m_width + 4, m_height + 4);
Shinya Kitaoka 120a6e
  }
Shinya Kitaoka 120a6e
  painter->restore();
Toshihiro Shimizu 890ddd
Shinya Kitaoka 120a6e
  {
manongjohn d6e3cc
    painter->setBrush(viewer->getGroupColor());
Shinya Kitaoka 120a6e
    painter->setPen(Qt::NoPen);
Shinya Kitaoka 120a6e
    painter->drawRect(QRectF(0, 0, m_width, m_height));
Shinya Kitaoka 120a6e
  }
Toshihiro Shimizu 890ddd
Shinya Kitaoka 120a6e
  //! draw the name only if it is not editing
Shinya Kitaoka 120a6e
  if (!m_parent->isNameEditing()) {
Shinya Kitaoka 120a6e
    QFont font("Verdana", 8);
Shinya Kitaoka 120a6e
    painter->setFont(font);
Shinya Kitaoka 120a6e
    if (stageScene->getCurrentObject() == m_parent->getStageObject()->getId())
manongjohn d6e3cc
      painter->setPen(viewer->getSelectedNodeTextColor());
Shinya Kitaoka 120a6e
    else
manongjohn d6e3cc
      painter->setPen(viewer->getTextColor());
Toshihiro Shimizu 890ddd
Shinya Kitaoka 120a6e
    QRectF rect(18, 0, 54, 18);
Shinya Kitaoka 120a6e
    QString elidedName = elideText(m_name, painter->font(), rect.width());
Shinya Kitaoka 120a6e
    painter->drawText(rect, Qt::AlignLeft | Qt::AlignVCenter, elidedName);
Shinya Kitaoka 120a6e
  }
Toshihiro Shimizu 890ddd
}
Toshihiro Shimizu 890ddd
Toshihiro Shimizu 890ddd
//--------------------------------------------------------
Toshihiro Shimizu 890ddd
Shinya Kitaoka 120a6e
void GroupPainter::contextMenuEvent(QGraphicsSceneContextMenuEvent *cme) {
Shinya Kitaoka 120a6e
  StageSchematicScene *stageScene =
Shinya Kitaoka 120a6e
      dynamic_cast<stageschematicscene *="">(scene());</stageschematicscene>
Shinya Kitaoka 120a6e
  QMenu menu(stageScene->views()[0]);
Toshihiro Shimizu 890ddd
Shinya Kitaoka 120a6e
  QAction *group   = CommandManager::instance()->getAction("MI_Group");
Shinya Kitaoka 120a6e
  QAction *ungroup = CommandManager::instance()->getAction("MI_Ungroup");
Toshihiro Shimizu 890ddd
Shinya Kitaoka 120a6e
  QAction *editGroup = new QAction(tr("&Open Group"), &menu);
Shinya Kitaoka 120a6e
  connect(editGroup, SIGNAL(triggered()), stageScene, SLOT(onEditGroup()));
Toshihiro Shimizu 890ddd
Shinya Kitaoka 120a6e
  menu.addAction(group);
Shinya Kitaoka 120a6e
  menu.addAction(ungroup);
Shinya Kitaoka 120a6e
  menu.addAction(editGroup);
Shinya Kitaoka 120a6e
  menu.exec(cme->screenPos());
Toshihiro Shimizu 890ddd
}
Toshihiro Shimizu 890ddd
Toshihiro Shimizu 890ddd
//========================================================
Toshihiro Shimizu 890ddd
//
Shinya Kitaoka 120a6e
// PegbarPainter
Toshihiro Shimizu 890ddd
//
Toshihiro Shimizu 890ddd
//========================================================
Toshihiro Shimizu 890ddd
Toshihiro Shimizu 890ddd
PegbarPainter::PegbarPainter(StageSchematicPegbarNode *parent, double width,
Shinya Kitaoka 120a6e
                             double height, const QString &name)
Shinya Kitaoka 120a6e
    : QGraphicsItem(parent)
Shinya Kitaoka 120a6e
    , m_width(width)
Shinya Kitaoka 120a6e
    , m_height(height)
Shinya Kitaoka 120a6e
    , m_parent(parent)
Shinya Kitaoka 120a6e
    , m_name(name) {}
Toshihiro Shimizu 890ddd
Toshihiro Shimizu 890ddd
//--------------------------------------------------------
Toshihiro Shimizu 890ddd
Shinya Kitaoka 120a6e
PegbarPainter::~PegbarPainter() {}
Toshihiro Shimizu 890ddd
Toshihiro Shimizu 890ddd
//--------------------------------------------------------
Toshihiro Shimizu 890ddd
Shinya Kitaoka 120a6e
QRectF PegbarPainter::boundingRect() const {
Shinya Kitaoka 120a6e
  return QRectF(-5, -5, m_width + 10, m_height + 10);
Toshihiro Shimizu 890ddd
}
Toshihiro Shimizu 890ddd
Toshihiro Shimizu 890ddd
//--------------------------------------------------------
Toshihiro Shimizu 890ddd
Shinya Kitaoka 120a6e
void PegbarPainter::paint(QPainter *painter,
Shinya Kitaoka 120a6e
                          const QStyleOptionGraphicsItem *option,
Shinya Kitaoka 120a6e
                          QWidget *widget) {
manongjohn d6e3cc
  StageSchematicScene *stageScene =
manongjohn d6e3cc
      dynamic_cast<stageschematicscene *="">(scene());</stageschematicscene>
manongjohn d6e3cc
manongjohn d6e3cc
  if (!stageScene) return;
manongjohn d6e3cc
  SchematicViewer *viewer = stageScene->getSchematicViewer();
manongjohn d6e3cc
manongjohn d6e3cc
  painter->setBrush(viewer->getPegColor());
Shinya Kitaoka 120a6e
  painter->setPen(Qt::NoPen);
Shinya Kitaoka 120a6e
  painter->drawRect(QRectF(0, 0, m_width, m_height));
Toshihiro Shimizu 890ddd
Shinya Kitaoka 120a6e
  if (!m_parent->isNameEditing()) {
Shinya Kitaoka 120a6e
    if (stageScene->getCurrentObject() == m_parent->getStageObject()->getId())
manongjohn d6e3cc
      painter->setPen(viewer->getSelectedNodeTextColor());
Shinya Kitaoka 120a6e
    else
manongjohn d6e3cc
      painter->setPen(viewer->getTextColor());
Shinya Kitaoka 120a6e
    // Draw the name
Shinya Kitaoka 120a6e
    QRectF rect(18, 0, 54, 18);
Shinya Kitaoka 120a6e
    QString elidedName = elideText(m_name, painter->font(), rect.width());
Shinya Kitaoka 120a6e
    painter->drawText(rect, Qt::AlignLeft | Qt::AlignVCenter, elidedName);
Shinya Kitaoka 120a6e
  }
Toshihiro Shimizu 890ddd
}
Toshihiro Shimizu 890ddd
Toshihiro Shimizu 890ddd
//--------------------------------------------------------
Toshihiro Shimizu 890ddd
Shinya Kitaoka 120a6e
void PegbarPainter::contextMenuEvent(QGraphicsSceneContextMenuEvent *cme) {
Shinya Kitaoka 120a6e
  StageSchematicScene *stageScene =
Shinya Kitaoka 120a6e
      dynamic_cast<stageschematicscene *="">(scene());</stageschematicscene>
Shinya Kitaoka 120a6e
  QMenu menu(stageScene->views()[0]);
Toshihiro Shimizu 890ddd
Shinya Kitaoka 120a6e
  QAction *resetCenter = new QAction(tr("&Reset Center"), &menu);
Shinya Kitaoka 120a6e
  connect(resetCenter, SIGNAL(triggered()), stageScene, SLOT(onResetCenter()));
Toshihiro Shimizu 890ddd
Shinya Kitaoka 120a6e
  QAction *group = CommandManager::instance()->getAction("MI_Group");
Toshihiro Shimizu 890ddd
Shinya Kitaoka 120a6e
  QAction *clear = CommandManager::instance()->getAction("MI_Clear");
Shinya Kitaoka 120a6e
  QAction *copy  = CommandManager::instance()->getAction("MI_Copy");
Shinya Kitaoka 120a6e
  QAction *cut   = CommandManager::instance()->getAction("MI_Cut");
Shinya Kitaoka 120a6e
  QAction *paste = CommandManager::instance()->getAction("MI_Paste");
Toshihiro Shimizu 890ddd
Shinya Kitaoka 120a6e
  menu.addAction(resetCenter);
Shinya Kitaoka 120a6e
  menu.addSeparator();
Shinya Kitaoka 120a6e
  menu.addAction(clear);
Shinya Kitaoka 120a6e
  menu.addAction(copy);
Shinya Kitaoka 120a6e
  menu.addAction(cut);
Shinya Kitaoka 120a6e
  menu.addAction(paste);
Shinya Kitaoka 120a6e
  menu.addSeparator();
Shinya Kitaoka 120a6e
  menu.addAction(group);
Shinya Kitaoka 120a6e
  menu.exec(cme->screenPos());
Toshihiro Shimizu 890ddd
}
Toshihiro Shimizu 890ddd
Toshihiro Shimizu 890ddd
//========================================================
Toshihiro Shimizu 890ddd
//
Shinya Kitaoka 120a6e
// CameraPainter
Toshihiro Shimizu 890ddd
//
Toshihiro Shimizu 890ddd
//========================================================
Toshihiro Shimizu 890ddd
Shinya Kitaoka 120a6e
CameraPainter::CameraPainter(StageSchematicCameraNode *parent, double width,
Shinya Kitaoka 120a6e
                             double height, const QString &name)
Shinya Kitaoka 120a6e
    : QGraphicsItem(parent)
Shinya Kitaoka 120a6e
    , m_width(width)
Shinya Kitaoka 120a6e
    , m_height(height)
Shinya Kitaoka 120a6e
    , m_parent(parent)
Shinya Kitaoka 120a6e
    , m_name(name) {
Shinya Kitaoka 120a6e
  StageSchematicScene *stageScene =
Shinya Kitaoka 120a6e
      dynamic_cast<stageschematicscene *="">(scene());</stageschematicscene>
Shinya Kitaoka 120a6e
  TXsheet *xsh = stageScene->getXsheet();
Shinya Kitaoka 120a6e
  m_isActive   = xsh->getStageObjectTree()->getCurrentCameraId() ==
Shinya Kitaoka 120a6e
               parent->getStageObject()->getId();
Toshihiro Shimizu 890ddd
}
Toshihiro Shimizu 890ddd
Toshihiro Shimizu 890ddd
//--------------------------------------------------------
Toshihiro Shimizu 890ddd
Shinya Kitaoka 120a6e
CameraPainter::~CameraPainter() {}
Toshihiro Shimizu 890ddd
Toshihiro Shimizu 890ddd
//--------------------------------------------------------
Toshihiro Shimizu 890ddd
Shinya Kitaoka 120a6e
QRectF CameraPainter::boundingRect() const {
Shinya Kitaoka 120a6e
  return QRectF(-5, -5, m_width + 10, m_height + 10);
Toshihiro Shimizu 890ddd
}
Toshihiro Shimizu 890ddd
Toshihiro Shimizu 890ddd
//--------------------------------------------------------
Toshihiro Shimizu 890ddd
Shinya Kitaoka 120a6e
void CameraPainter::paint(QPainter *painter,
Shinya Kitaoka 120a6e
                          const QStyleOptionGraphicsItem *option,
Shinya Kitaoka 120a6e
                          QWidget *widget) {
manongjohn d6e3cc
  StageSchematicScene *stageScene =
manongjohn d6e3cc
      dynamic_cast<stageschematicscene *="">(scene());</stageschematicscene>
manongjohn d6e3cc
  if (!stageScene) return;
manongjohn d6e3cc
manongjohn d6e3cc
  SchematicViewer *viewer = stageScene->getSchematicViewer();
manongjohn d6e3cc
  QColor cameraColor      = m_isActive ? viewer->getActiveCameraColor()
shun-iwasawa 443318
                                       : viewer->getOtherCameraColor();
Toshihiro Shimizu 890ddd
manongjohn d6e3cc
  painter->setBrush(cameraColor);
Shinya Kitaoka 120a6e
  painter->setPen(Qt::NoPen);
Shinya Kitaoka 120a6e
  painter->drawRect(QRectF(0, 0, m_width, m_height));
Toshihiro Shimizu 890ddd
Shinya Kitaoka 120a6e
  if (!m_parent->isNameEditing()) {
Shinya Kitaoka 120a6e
    if (stageScene->getCurrentObject() == m_parent->getStageObject()->getId())
manongjohn d6e3cc
      painter->setPen(viewer->getSelectedNodeTextColor());
Shinya Kitaoka 120a6e
    else
manongjohn d6e3cc
      painter->setPen(viewer->getTextColor());
Shinya Kitaoka 120a6e
    // Draw the name
Shinya Kitaoka 120a6e
    QRectF rect(18, 0, 54, 18);
Shinya Kitaoka 120a6e
    QString elidedName = elideText(m_name, painter->font(), rect.width());
Shinya Kitaoka 120a6e
    painter->drawText(rect, Qt::AlignLeft | Qt::AlignVCenter, elidedName);
Shinya Kitaoka 120a6e
  }
Toshihiro Shimizu 890ddd
}
Toshihiro Shimizu 890ddd
Toshihiro Shimizu 890ddd
//--------------------------------------------------------
Toshihiro Shimizu 890ddd
Shinya Kitaoka 120a6e
void CameraPainter::contextMenuEvent(QGraphicsSceneContextMenuEvent *cme) {
Shinya Kitaoka 120a6e
  StageSchematicScene *stageScene =
Shinya Kitaoka 120a6e
      dynamic_cast<stageschematicscene *="">(scene());</stageschematicscene>
Shinya Kitaoka 120a6e
  QMenu menu(stageScene->views()[0]);
Toshihiro Shimizu 890ddd
Shinya Kitaoka 120a6e
  QAction *cameraSettings =
Shinya Kitaoka 120a6e
      CommandManager::instance()->getAction("MI_CameraStage");
Toshihiro Shimizu 890ddd
Shinya Kitaoka 120a6e
  QAction *resetCenter = new QAction(tr("&Reset Center"), &menu);
Shinya Kitaoka 120a6e
  connect(resetCenter, SIGNAL(triggered()), stageScene, SLOT(onResetCenter()));
Toshihiro Shimizu 890ddd
Shinya Kitaoka 120a6e
  QAction *activate = new QAction(tr("&Activate"), &menu);
Shinya Kitaoka 120a6e
  connect(activate, SIGNAL(triggered()), stageScene, SLOT(onCameraActivate()));
Toshihiro Shimizu 890ddd
Shinya Kitaoka 120a6e
  QAction *clear = CommandManager::instance()->getAction("MI_Clear");
Shinya Kitaoka 120a6e
  QAction *copy  = CommandManager::instance()->getAction("MI_Copy");
Shinya Kitaoka 120a6e
  QAction *cut   = CommandManager::instance()->getAction("MI_Cut");
Shinya Kitaoka 120a6e
  QAction *paste = CommandManager::instance()->getAction("MI_Paste");
Toshihiro Shimizu 890ddd
Shinya Kitaoka 120a6e
  bool isDeactivated =
Shinya Kitaoka 120a6e
      m_parent->getStageObject()->getId() !=
Shinya Kitaoka 120a6e
      stageScene->getXsheet()->getStageObjectTree()->getCurrentCameraId();
Toshihiro Shimizu 890ddd
Shinya Kitaoka 120a6e
  if (isDeactivated)
Shinya Kitaoka 120a6e
    menu.addAction(activate);
Shinya Kitaoka 120a6e
  else
Shinya Kitaoka 120a6e
    menu.addAction(cameraSettings);
Shinya Kitaoka 120a6e
  menu.addAction(resetCenter);
Shinya Kitaoka 120a6e
  menu.addSeparator();
Shinya Kitaoka 120a6e
  if (isDeactivated) menu.addAction(clear);
Shinya Kitaoka 120a6e
  menu.addAction(copy);
Shinya Kitaoka 120a6e
  if (isDeactivated) menu.addAction(cut);
Shinya Kitaoka 120a6e
  menu.addAction(paste);
Shinya Kitaoka 120a6e
  menu.exec(cme->screenPos());
Toshihiro Shimizu 890ddd
}
Toshihiro Shimizu 890ddd
Toshihiro Shimizu 890ddd
//========================================================
Toshihiro Shimizu 890ddd
//
Shinya Kitaoka 120a6e
// TablePainter
Toshihiro Shimizu 890ddd
//
Toshihiro Shimizu 890ddd
//========================================================
Toshihiro Shimizu 890ddd
Shinya Kitaoka 120a6e
TablePainter::TablePainter(StageSchematicTableNode *parent, double width,
Shinya Kitaoka 120a6e
                           double height)
Shinya Kitaoka 120a6e
    : QGraphicsItem(parent)
Shinya Kitaoka 120a6e
    , m_width(width)
Shinya Kitaoka 120a6e
    , m_height(height)
Shinya Kitaoka 120a6e
    , m_parent(parent) {}
Toshihiro Shimizu 890ddd
Toshihiro Shimizu 890ddd
//--------------------------------------------------------
Toshihiro Shimizu 890ddd
Shinya Kitaoka 120a6e
TablePainter::~TablePainter() {}
Toshihiro Shimizu 890ddd
Toshihiro Shimizu 890ddd
//--------------------------------------------------------
Toshihiro Shimizu 890ddd
Shinya Kitaoka 120a6e
QRectF TablePainter::boundingRect() const {
Shinya Kitaoka 120a6e
  return QRectF(-5, -5, m_width + 10, m_height + 10);
Toshihiro Shimizu 890ddd
}
Toshihiro Shimizu 890ddd
Toshihiro Shimizu 890ddd
//--------------------------------------------------------
Toshihiro Shimizu 890ddd
Shinya Kitaoka 120a6e
void TablePainter::paint(QPainter *painter,
Shinya Kitaoka 120a6e
                         const QStyleOptionGraphicsItem *option,
Shinya Kitaoka 120a6e
                         QWidget *widget) {
Shinya Kitaoka 120a6e
  QPixmap tablePm = QPixmap(":Resources/schematic_tablenode.png");
Toshihiro Shimizu 890ddd
manongjohn d6e3cc
  StageSchematicScene *stageScene =
manongjohn d6e3cc
      dynamic_cast<stageschematicscene *="">(scene());</stageschematicscene>
manongjohn d6e3cc
  if (!stageScene) return;
Toshihiro Shimizu 890ddd
manongjohn d6e3cc
  SchematicViewer *viewer = stageScene->getSchematicViewer();
manongjohn d6e3cc
manongjohn d6e3cc
  painter->setBrush(viewer->getTableColor());
Shinya Kitaoka 120a6e
  painter->setPen(Qt::NoPen);
Shinya Kitaoka 120a6e
  painter->drawRect(QRectF(0, 0, m_width, m_height));
Toshihiro Shimizu 890ddd
Shinya Kitaoka 120a6e
  QRect imgRect(3, -3, 24, 24);
Toshihiro Shimizu 890ddd
Shinya Kitaoka 120a6e
  painter->drawPixmap(imgRect, tablePm);
Toshihiro Shimizu 890ddd
Shinya Kitaoka 120a6e
  if (stageScene->getCurrentObject() == m_parent->getStageObject()->getId())
manongjohn d6e3cc
    painter->setPen(viewer->getSelectedNodeTextColor());
Shinya Kitaoka 120a6e
  else
manongjohn d6e3cc
    painter->setPen(viewer->getTextColor());
Toshihiro Shimizu 890ddd
Shinya Kitaoka 120a6e
  // Draw the name
Shinya Kitaoka 120a6e
  QRectF rect(30, 0, 42, 18);
manongjohn d6e3cc
  painter->drawText(rect, Qt::AlignLeft | Qt::AlignVCenter,
manongjohn d6e3cc
                    QString(tr("Table")));
Toshihiro Shimizu 890ddd
}
Toshihiro Shimizu 890ddd
Toshihiro Shimizu 890ddd
//--------------------------------------------------------
Toshihiro Shimizu 890ddd
Shinya Kitaoka 120a6e
void TablePainter::contextMenuEvent(QGraphicsSceneContextMenuEvent *cme) {
Shinya Kitaoka 120a6e
  StageSchematicScene *stageScene =
Shinya Kitaoka 120a6e
      dynamic_cast<stageschematicscene *="">(scene());</stageschematicscene>
Shinya Kitaoka 120a6e
  QMenu menu(stageScene->views()[0]);
Toshihiro Shimizu 890ddd
Shinya Kitaoka 120a6e
  QAction *resetCenter = new QAction(tr("&Reset Center"), &menu);
Shinya Kitaoka 120a6e
  connect(resetCenter, SIGNAL(triggered()), stageScene, SLOT(onResetCenter()));
Toshihiro Shimizu 890ddd
Shinya Kitaoka 120a6e
  menu.addAction(resetCenter);
Shinya Kitaoka 120a6e
  menu.exec(cme->screenPos());
Toshihiro Shimizu 890ddd
}
Toshihiro Shimizu 890ddd
Toshihiro Shimizu 890ddd
//========================================================
Toshihiro Shimizu 890ddd
//
Shinya Kitaoka 120a6e
// SplinePainter
Toshihiro Shimizu 890ddd
//
Toshihiro Shimizu 890ddd
//========================================================
Toshihiro Shimizu 890ddd
Shinya Kitaoka 120a6e
SplinePainter::SplinePainter(StageSchematicSplineNode *parent, double width,
Shinya Kitaoka 120a6e
                             double height, const QString &name)
Shinya Kitaoka 120a6e
    : QGraphicsItem(parent)
Shinya Kitaoka 120a6e
    , m_parent(parent)
Shinya Kitaoka 120a6e
    , m_width(width)
Shinya Kitaoka 120a6e
    , m_height(height)
Shinya Kitaoka 120a6e
    , m_name(name) {}
Shinya Kitaoka 120a6e
Shinya Kitaoka 120a6e
//--------------------------------------------------------
Shinya Kitaoka 120a6e
Shinya Kitaoka 120a6e
SplinePainter::~SplinePainter() {}
Shinya Kitaoka 120a6e
Shinya Kitaoka 120a6e
//--------------------------------------------------------
Shinya Kitaoka 120a6e
Shinya Kitaoka 120a6e
QRectF SplinePainter::boundingRect() const {
Shinya Kitaoka 120a6e
  if (m_parent->isOpened())
Shinya Kitaoka 120a6e
    return QRectF(-5, -5, m_width + 10, m_height + 59);
Shinya Kitaoka 120a6e
  else
Shinya Kitaoka 120a6e
    return QRectF(-5, -5, m_width + 10, m_height + 10);
Shinya Kitaoka 120a6e
}
Shinya Kitaoka 120a6e
Shinya Kitaoka 120a6e
//--------------------------------------------------------
Shinya Kitaoka 120a6e
Shinya Kitaoka 120a6e
void SplinePainter::paint(QPainter *painter,
Shinya Kitaoka 120a6e
                          const QStyleOptionGraphicsItem *option,
Shinya Kitaoka 120a6e
                          QWidget *widget) {
manongjohn d6e3cc
  StageSchematicScene *stageScene =
manongjohn d6e3cc
      dynamic_cast<stageschematicscene *="">(scene());</stageschematicscene>
manongjohn d6e3cc
  if (!stageScene) return;
manongjohn d6e3cc
manongjohn d6e3cc
  SchematicViewer *viewer = stageScene->getSchematicViewer();
manongjohn d6e3cc
manongjohn d6e3cc
  painter->setBrush(viewer->getSplineColor());
Shinya Kitaoka 120a6e
  painter->setPen(Qt::NoPen);
Shinya Kitaoka 120a6e
  painter->drawRoundRect(QRectF(0, 0, m_width, m_height), 20, 99);
Shinya Kitaoka 120a6e
  if (m_parent->isOpened()) {
Shinya Kitaoka 120a6e
    // Draw the pixmap
Shinya Kitaoka 120a6e
    painter->setBrush(Qt::NoBrush);
Shinya Kitaoka 120a6e
    painter->setPen(QColor(0, 0, 0, 255));
Shinya Kitaoka 120a6e
    QPixmap pixmap = scalePixmapKeepingAspectRatio(
Shinya Kitaoka 120a6e
        m_parent->getPixmap(), QSize(m_width, 49), Qt::transparent);
Shinya Kitaoka 120a6e
    if (!pixmap.isNull()) {
Shinya Kitaoka 120a6e
      painter->drawPixmap(QPointF(0, 18), pixmap);
Shinya Kitaoka 120a6e
    } else {
Shinya Kitaoka 120a6e
      painter->setBrush(QColor(255, 255, 255, 255));
Shinya Kitaoka 120a6e
      painter->drawRect(0, 18, m_width, 49);
Shinya Kitaoka 120a6e
    }
Shinya Kitaoka 120a6e
  }
Shinya Kitaoka 120a6e
Shinya Kitaoka 120a6e
  //! draw the name only if it is not editing
Shinya Kitaoka 120a6e
  if (!m_parent->isNameEditing()) {
manongjohn d6e3cc
    /* There is no current spline
manongjohn d6e3cc
              TStageObjectId currObj = stageScene->getCurrentObject();
manongjohn d6e3cc
        if(currObj.getCode() == m_parent->getSpline()->getId())
manongjohn d6e3cc
          painter->setPen(viewer->getSelectedNodeTextColor());
manongjohn d6e3cc
        else
manongjohn d6e3cc
    */
manongjohn d6e3cc
    painter->setPen(viewer->getTextColor());
Shinya Kitaoka 120a6e
    QRectF rect(18, 0, 72, 18);
Shinya Kitaoka 120a6e
    QString elidedName = elideText(m_name, painter->font(), rect.width());
Shinya Kitaoka 120a6e
    painter->drawText(rect, Qt::AlignLeft | Qt::AlignVCenter, elidedName);
Shinya Kitaoka 120a6e
  }
Shinya Kitaoka 120a6e
}
Shinya Kitaoka 120a6e
Shinya Kitaoka 120a6e
//--------------------------------------------------------
Shinya Kitaoka 120a6e
Shinya Kitaoka 120a6e
void SplinePainter::contextMenuEvent(QGraphicsSceneContextMenuEvent *cme) {
Shinya Kitaoka 120a6e
  StageSchematicScene *stageScene =
Shinya Kitaoka 120a6e
      dynamic_cast<stageschematicscene *="">(scene());</stageschematicscene>
Shinya Kitaoka 120a6e
  QMenu menu(stageScene->views()[0]);
Shinya Kitaoka 120a6e
Shinya Kitaoka 120a6e
  QAction *removeSpline = new QAction(tr("&Delete"), &menu);
Shinya Kitaoka 120a6e
  connect(removeSpline, SIGNAL(triggered()), stageScene,
Shinya Kitaoka 120a6e
          SLOT(onRemoveSpline()));
Shinya Kitaoka 120a6e
  QAction *saveSpline = new QAction(tr("&Save Motion Path..."), &menu);
Shinya Kitaoka 120a6e
  connect(saveSpline, SIGNAL(triggered()), stageScene, SLOT(onSaveSpline()));
Shinya Kitaoka 120a6e
  QAction *loadSpline = new QAction(tr("&Load Motion Path..."), &menu);
Shinya Kitaoka 120a6e
  connect(loadSpline, SIGNAL(triggered()), stageScene, SLOT(onLoadSpline()));
Shinya Kitaoka 120a6e
Shinya Kitaoka 120a6e
  QAction *copy  = CommandManager::instance()->getAction("MI_Copy");
Shinya Kitaoka 120a6e
  QAction *cut   = CommandManager::instance()->getAction("MI_Cut");
Shinya Kitaoka 120a6e
  QAction *paste = CommandManager::instance()->getAction("MI_Paste");
Shinya Kitaoka 120a6e
Shinya Kitaoka 120a6e
  menu.addAction(saveSpline);
Shinya Kitaoka 120a6e
  menu.addAction(loadSpline);
Shinya Kitaoka 120a6e
  menu.addSeparator();
Shinya Kitaoka 120a6e
  menu.addAction(removeSpline);
Shinya Kitaoka 120a6e
  menu.addAction(copy);
Shinya Kitaoka 120a6e
  menu.addAction(cut);
Shinya Kitaoka 120a6e
  menu.addAction(paste);
Shinya Kitaoka 120a6e
  menu.exec(cme->screenPos());
Toshihiro Shimizu 890ddd
}
Toshihiro Shimizu 890ddd
Toshihiro Shimizu 890ddd
//========================================================
Toshihiro Shimizu 890ddd
//
Shinya Kitaoka 120a6e
// StageSchematicNodePort
Toshihiro Shimizu 890ddd
//
Toshihiro Shimizu 890ddd
//========================================================
Toshihiro Shimizu 890ddd
Shinya Kitaoka 120a6e
StageSchematicNodePort::StageSchematicNodePort(StageSchematicNodeDock *parent,
Shinya Kitaoka 120a6e
                                               int type)
Shinya Kitaoka 120a6e
    : SchematicPort(parent, parent->getNode(), type), m_handle("") {
Shinya Kitaoka 120a6e
  QRectF rect = boundingRect();
Shinya Kitaoka 120a6e
  if (parent->isParentPort())
Shinya Kitaoka 120a6e
    m_hook = QPointF(rect.left(), (rect.top() + rect.bottom()) * 0.5);
Shinya Kitaoka 120a6e
  else
Shinya Kitaoka 120a6e
    m_hook = QPointF(rect.right(), (rect.top() + rect.bottom()) * 0.5);
Shinya Kitaoka 120a6e
}
Shinya Kitaoka 120a6e
Shinya Kitaoka 120a6e
//--------------------------------------------------------
Shinya Kitaoka 120a6e
Shinya Kitaoka 120a6e
StageSchematicNodePort::~StageSchematicNodePort() {}
Shinya Kitaoka 120a6e
Shinya Kitaoka 120a6e
//--------------------------------------------------------
Shinya Kitaoka 120a6e
Shinya Kitaoka 120a6e
QRectF StageSchematicNodePort::boundingRect() const {
shun_iwasawa 3cc41f
  return QRectF(0, 0, 18, 18);
Shinya Kitaoka 120a6e
}
Shinya Kitaoka 120a6e
Shinya Kitaoka 120a6e
//--------------------------------------------------------
Shinya Kitaoka 120a6e
Shinya Kitaoka 120a6e
void StageSchematicNodePort::paint(QPainter *painter,
Shinya Kitaoka 120a6e
                                   const QStyleOptionGraphicsItem *option,
Shinya Kitaoka 120a6e
                                   QWidget *widget) {
Shinya Kitaoka 120a6e
  // StageSchematicNode *node = dynamic_cast<stageschematicnode *="">(getNode());</stageschematicnode>
Shinya Kitaoka 120a6e
  StageSchematicScene *scene =
Shinya Kitaoka 120a6e
      dynamic_cast<stageschematicscene *="">(this->scene());</stageschematicscene>
Shinya Kitaoka 120a6e
  if (scene && scene->isShowLetterOnPortFlagEnabled()) {
Shinya Kitaoka 120a6e
    painter->setBrush(QColor(255, 255, 255, 255));
Shinya Kitaoka 120a6e
    painter->setPen(QColor(180, 180, 180, 255));
Shinya Kitaoka 120a6e
    painter->drawRect(boundingRect());
Shinya Kitaoka 120a6e
    if (m_type == 103 || m_type == 104 || m_type == 105) return;
Shinya Kitaoka 120a6e
    painter->setPen(QColor(0, 0, 0, 255));
Shinya Kitaoka 120a6e
    QFont font("Verdana", 8);
Shinya Kitaoka 120a6e
    painter->setFont(font);
Shinya Kitaoka 120a6e
    QTextOption textOption(Qt::AlignCenter);
Shinya Kitaoka 120a6e
    QString text = m_handle;
Shinya Kitaoka 120a6e
    if (text.size() > 1 && text.at(0) == 'H') text.remove("H");
Shinya Kitaoka 120a6e
    painter->drawText(boundingRect(), text, textOption);
Shinya Kitaoka 120a6e
  } else {
shun_iwasawa 3cc41f
    QRect imgRect(2, 2, 14, 14);
shun_iwasawa 3cc41f
    QRect sourceRect = scene->views()[0]->matrix().mapRect(imgRect);
shun_iwasawa 3cc41f
    QPixmap pixmap;
shun_iwasawa 3cc41f
shun_iwasawa 3cc41f
    if (getType() == eStageParentPort || getType() == eStageParentGroupPort) {
shun_iwasawa 3cc41f
      if (isHighlighted())
shun_iwasawa 3cc41f
        pixmap = QIcon(":Resources/port_blue_highlight.svg")
shun_iwasawa 3cc41f
                     .pixmap(sourceRect.size());
shun_iwasawa 3cc41f
      else
shun_iwasawa 3cc41f
        pixmap = QIcon(":Resources/port_blue.svg").pixmap(sourceRect.size());
shun_iwasawa 3cc41f
    } else {
shun_iwasawa 3cc41f
      if (isHighlighted())
shun_iwasawa 3cc41f
        pixmap = QIcon(":Resources/port_red_highlight.svg")
shun_iwasawa 3cc41f
                     .pixmap(sourceRect.size());
shun_iwasawa 3cc41f
      else
shun_iwasawa 3cc41f
        pixmap = QIcon(":Resources/port_red.svg").pixmap(sourceRect.size());
shun_iwasawa 3cc41f
    }
shun-iwasawa f2e168
    painter->drawPixmap(imgRect, pixmap);
Shinya Kitaoka 120a6e
  }
Shinya Kitaoka 120a6e
}
Shinya Kitaoka 120a6e
Shinya Kitaoka 120a6e
//--------------------------------------------------------
Shinya Kitaoka 120a6e
Shinya Kitaoka 120a6e
bool StageSchematicNodePort::linkTo(SchematicPort *port, bool checkOnly) {
Shinya Kitaoka 120a6e
  StageSchematicScene *stageScene =
Shinya Kitaoka 120a6e
      dynamic_cast<stageschematicscene *="">(scene());</stageschematicscene>
Shinya Kitaoka 120a6e
  if (!port) return false;
Shinya Kitaoka 120a6e
Shinya Kitaoka 120a6e
  StageSchematicNode *srcNode = dynamic_cast<stageschematicnode *="">(getNode());</stageschematicnode>
Shinya Kitaoka 120a6e
  if (this == port && !srcNode->getStageObject()->isGrouped()) {
Shinya Kitaoka 120a6e
    if (!checkOnly)
Shinya Kitaoka 120a6e
      TStageObjectCmd::setParent(srcNode->getStageObject()->getId(),
Shinya Kitaoka 120a6e
                                 TStageObjectId::NoneId, "",
Shinya Kitaoka 120a6e
                                 stageScene->getXsheetHandle());
Shinya Kitaoka 120a6e
    return true;
Shinya Kitaoka 120a6e
  }
Shinya Kitaoka 120a6e
  StageSchematicNode *dstNode =
Shinya Kitaoka 120a6e
      dynamic_cast<stageschematicnode *="">(port->getNode());</stageschematicnode>
Shinya Kitaoka 120a6e
  if (!dstNode) return false;
Shinya Kitaoka 120a6e
  if (srcNode == dstNode) return false;
Shinya Kitaoka 120a6e
Shinya Kitaoka 120a6e
  TStageObject *pegbar = 0, *parentPegbar = 0;
Shinya Kitaoka 120a6e
  SchematicPort *childPort, *parentPort;
Shinya Kitaoka 120a6e
  if (getType() == eStageParentPort && port->getType() == eStageChildPort) {
Shinya Kitaoka 120a6e
    pegbar       = srcNode->getStageObject();
Shinya Kitaoka 120a6e
    parentPegbar = dstNode->getStageObject();
Shinya Kitaoka 120a6e
    childPort    = this;
Shinya Kitaoka 120a6e
    parentPort   = port;
Shinya Kitaoka 120a6e
  } else if (getType() == eStageChildPort &&
Shinya Kitaoka 120a6e
             port->getType() == eStageParentPort) {
Shinya Kitaoka 120a6e
    pegbar       = dstNode->getStageObject();
Shinya Kitaoka 120a6e
    parentPegbar = srcNode->getStageObject();
Shinya Kitaoka 120a6e
    childPort    = port;
Shinya Kitaoka 120a6e
    parentPort   = this;
Shinya Kitaoka 120a6e
  } else
Shinya Kitaoka 120a6e
    return false;
Shinya Kitaoka 120a6e
  if (pegbar->getId().isTable()) return false;
Shinya Kitaoka 120a6e
  if (pegbar->getId().isPegbar() && !parentPegbar->getId().isTable() &&
Shinya Kitaoka 120a6e
      !parentPegbar->getId().isPegbar() && !parentPegbar->getId().isCamera())
Shinya Kitaoka 120a6e
    return false;
Shinya Kitaoka 120a6e
Shinya Kitaoka 120a6e
  if (parentPegbar == pegbar || parentPegbar->isAncestor(pegbar)) return false;
Shinya Kitaoka 120a6e
  if (parentPegbar->isGrouped() || pegbar->isGrouped()) return false;
Shinya Kitaoka 120a6e
  if (checkOnly) return true;
Shinya Kitaoka 120a6e
Shinya Kitaoka 120a6e
  StageSchematicNodePort *dstPort =
Shinya Kitaoka 120a6e
      dynamic_cast<stageschematicnodeport *="">(parentPort);</stageschematicnodeport>
Shinya Kitaoka 120a6e
  if (!dstPort) return false;
Shinya Kitaoka 120a6e
  TStageObjectCmd::setParent(pegbar->getId(), parentPegbar->getId(),
Shinya Kitaoka 120a6e
                             dstPort->getHandle().toStdString(),
Shinya Kitaoka 120a6e
                             stageScene->getXsheetHandle());
Shinya Kitaoka 120a6e
  return true;
Shinya Kitaoka 120a6e
}
Shinya Kitaoka 120a6e
Shinya Kitaoka 120a6e
//--------------------------------------------------------
Shinya Kitaoka 120a6e
Shinya Kitaoka 120a6e
SchematicPort *StageSchematicNodePort::searchPort(const QPointF &scenePos) {
Shinya Kitaoka 120a6e
  QList<qgraphicsitem *=""> items = scene()->items(scenePos);</qgraphicsitem>
Shinya Kitaoka 120a6e
  int i;
Shinya Kitaoka 120a6e
  for (i = 0; i < items.size(); i++) {
Shinya Kitaoka 120a6e
    StageSchematicNodePort *linkingTo =
Shinya Kitaoka 120a6e
        dynamic_cast<stageschematicnodeport *="">(items[i]);</stageschematicnodeport>
Shinya Kitaoka 120a6e
    if (linkingTo) {
Shinya Kitaoka 120a6e
      StageSchematicNode *node =
Shinya Kitaoka 120a6e
          dynamic_cast<stageschematicnode *="">(linkingTo->getNode());</stageschematicnode>
Shinya Kitaoka 120a6e
      if (!node->getStageObject()->isGrouped()) return linkingTo;
Shinya Kitaoka 120a6e
    }
Shinya Kitaoka 120a6e
  }
Shinya Kitaoka 120a6e
  return 0;
Shinya Kitaoka 120a6e
}
Shinya Kitaoka 120a6e
Shinya Kitaoka 120a6e
//--------------------------------------------------------
Shinya Kitaoka 120a6e
shun-iwasawa 21e838
void StageSchematicNodePort::hideSnappedLinks(SchematicPort *linkingPort) {
shun-iwasawa 21e838
  if (!linkingPort) return;
Shinya Kitaoka 120a6e
  if (getType() == eStageChildPort &&
shun-iwasawa 21e838
      linkingPort->getType() == eStageParentPort &&
shun-iwasawa 21e838
      linkingPort->getLinkCount() == 1)
shun-iwasawa 21e838
    linkingPort->getLink(0)->hide();
Shinya Kitaoka 120a6e
  if (getType() == eStageParentPort &&
shun-iwasawa 21e838
      linkingPort->getType() == eStageChildPort && getLinkCount() == 1)
Shinya Kitaoka 120a6e
    getLink(0)->hide();
Shinya Kitaoka 120a6e
}
Shinya Kitaoka 120a6e
Shinya Kitaoka 120a6e
//--------------------------------------------------------
Shinya Kitaoka 120a6e
shun-iwasawa 21e838
void StageSchematicNodePort::showSnappedLinks(SchematicPort *linkingPort) {
shun-iwasawa 21e838
  if (!linkingPort) return;
Shinya Kitaoka 120a6e
  if (getType() == eStageChildPort &&
shun-iwasawa 21e838
      linkingPort->getType() == eStageParentPort &&
shun-iwasawa 21e838
      linkingPort->getLinkCount() == 1) {
shun-iwasawa 21e838
    linkingPort->getLink(0)->show();
shun-iwasawa 21e838
    linkingPort->highLight(true);
shun-iwasawa 21e838
    linkingPort->update();
Shinya Kitaoka 120a6e
  }
Shinya Kitaoka 120a6e
  if (getType() == eStageParentPort &&
shun-iwasawa 21e838
      linkingPort->getType() == eStageChildPort && getLinkCount() == 1) {
Shinya Kitaoka 120a6e
    getLink(0)->show();
shun-iwasawa 21e838
    linkingPort->highLight(true);
shun-iwasawa 21e838
    linkingPort->update();
Shinya Kitaoka 120a6e
  }
Toshihiro Shimizu 890ddd
}
Toshihiro Shimizu 890ddd
Toshihiro Shimizu 890ddd
//========================================================
Toshihiro Shimizu 890ddd
//
Shinya Kitaoka 120a6e
// StageSchematicSplinePort
Toshihiro Shimizu 890ddd
//
Toshihiro Shimizu 890ddd
//========================================================
Toshihiro Shimizu 890ddd
Shinya Kitaoka 120a6e
StageSchematicSplinePort::StageSchematicSplinePort(
Shinya Kitaoka 120a6e
    StageSchematicSplineDock *parent, int type)
Shinya Kitaoka 120a6e
    : SchematicPort(parent, parent->getNode(), type), m_parent(parent) {
Shinya Kitaoka 120a6e
  m_squarePixmap = QPixmap(":Resources/schematic_spline_aim_square.svg");
Shinya Kitaoka 120a6e
  m_rhombPixmap  = QPixmap(":Resources/schematic_spline_aim_rhomb.svg");
Shinya Kitaoka 120a6e
  QRectF rect    = boundingRect();
Shinya Kitaoka 120a6e
  if (parent->isParentPort())
Shinya Kitaoka 120a6e
    m_hook = QPointF((rect.left() + rect.right()) * 0.5, rect.bottom() - 5);
Shinya Kitaoka 120a6e
  else
Shinya Kitaoka 120a6e
    m_hook = QPointF((rect.left() + rect.right()) * 0.5, rect.top() + 5);
Toshihiro Shimizu 890ddd
}
Toshihiro Shimizu 890ddd
Toshihiro Shimizu 890ddd
//--------------------------------------------------------
Toshihiro Shimizu 890ddd
Shinya Kitaoka 120a6e
StageSchematicSplinePort::~StageSchematicSplinePort() {}
Toshihiro Shimizu 890ddd
Toshihiro Shimizu 890ddd
//--------------------------------------------------------
Toshihiro Shimizu 890ddd
Shinya Kitaoka 120a6e
QRectF StageSchematicSplinePort::boundingRect() const {
Shinya Kitaoka 120a6e
  return QRectF(0, 0, 16, 8);
Toshihiro Shimizu 890ddd
}
Toshihiro Shimizu 890ddd
Toshihiro Shimizu 890ddd
//--------------------------------------------------------
Toshihiro Shimizu 890ddd
Shinya Kitaoka 120a6e
void StageSchematicSplinePort::paint(QPainter *painter,
Shinya Kitaoka 120a6e
                                     const QStyleOptionGraphicsItem *option,
Shinya Kitaoka 120a6e
                                     QWidget *widget) {
shun-iwasawa f2e168
  QRect sourceRect =
shun-iwasawa f2e168
      scene()->views()[0]->matrix().mapRect(boundingRect().toRect());
shun_iwasawa 3cc41f
  QPixmap pixmap;
Toshihiro Shimizu 890ddd
Shinya Kitaoka 120a6e
  if (!m_parent->isParentPort()) {
shun_iwasawa 3cc41f
    if (getLinkCount() > 0) {
shun_iwasawa 3cc41f
      static QIcon splineChildIcon(":Resources/spline_child_port.svg");
shun_iwasawa 3cc41f
      pixmap = splineChildIcon.pixmap(sourceRect.size());
shun_iwasawa 3cc41f
    } else {
shun_iwasawa 3cc41f
      static QIcon splineChildDisconIcon(
shun_iwasawa 3cc41f
          ":Resources/spline_child_port_disconnect.svg");
shun_iwasawa 3cc41f
      pixmap = splineChildDisconIcon.pixmap(sourceRect.size());
shun_iwasawa 3cc41f
    }
shun_iwasawa 3cc41f
  } else {
shun_iwasawa 3cc41f
    static QIcon splineParentIcon(":Resources/spline_parent_port.svg");
shun_iwasawa 3cc41f
    pixmap = splineParentIcon.pixmap(sourceRect.size());
shun_iwasawa 3cc41f
  }
shun-iwasawa f2e168
  painter->drawPixmap(boundingRect().toRect(), pixmap);
Toshihiro Shimizu 890ddd
}
Toshihiro Shimizu 890ddd
Toshihiro Shimizu 890ddd
//--------------------------------------------------------
Toshihiro Shimizu 890ddd
Shinya Kitaoka 120a6e
bool StageSchematicSplinePort::linkTo(SchematicPort *port, bool checkOnly) {
Shinya Kitaoka 120a6e
  assert(port != 0);
Shinya Kitaoka 120a6e
  StageSchematicScene *stageScene =
Shinya Kitaoka 120a6e
      dynamic_cast<stageschematicscene *="">(scene());</stageschematicscene>
Shinya Kitaoka 120a6e
  StageSchematicNode *node = dynamic_cast<stageschematicnode *="">(getNode());</stageschematicnode>
Shinya Kitaoka 120a6e
  StageSchematicSplineNode *splineNode =
Shinya Kitaoka 120a6e
      dynamic_cast<stageschematicsplinenode *="">(getNode());</stageschematicsplinenode>
Shinya Kitaoka 120a6e
  if (node) {
Shinya Kitaoka 120a6e
    StageSchematicSplineNode *targetSplineNode =
Shinya Kitaoka 120a6e
        dynamic_cast<stageschematicsplinenode *="">(port->getNode());</stageschematicsplinenode>
Shinya Kitaoka 120a6e
    if (!targetSplineNode && port != this) return false;
Shinya Kitaoka 120a6e
    if (!checkOnly && targetSplineNode) {
Shinya Kitaoka 120a6e
      TStageObjectSpline *spline = targetSplineNode->getSpline();
Shinya Kitaoka 120a6e
      TStageObjectCmd::setSplineParent(spline, node->getStageObject(),
Shinya Kitaoka 120a6e
                                       stageScene->getXsheetHandle());
Shinya Kitaoka 120a6e
    } else if (!checkOnly && port == this)
Shinya Kitaoka 120a6e
      node->getStageObject()->setSpline(0);
Shinya Kitaoka 120a6e
    return true;
Shinya Kitaoka 120a6e
  } else if (splineNode) {
Shinya Kitaoka 120a6e
    StageSchematicNode *targetNode =
Shinya Kitaoka 120a6e
        dynamic_cast<stageschematicnode *="">(port->getNode());</stageschematicnode>
Shinya Kitaoka 120a6e
    if (!targetNode || port->getType() != eStageSplinePort) return false;
Shinya Kitaoka 120a6e
    if (!checkOnly) {
Shinya Kitaoka 120a6e
      TStageObjectSpline *spline = splineNode->getSpline();
Shinya Kitaoka 120a6e
      TStageObjectCmd::setSplineParent(spline, targetNode->getStageObject(),
Shinya Kitaoka 120a6e
                                       stageScene->getXsheetHandle());
Shinya Kitaoka 120a6e
    }
Shinya Kitaoka 120a6e
    return true;
Shinya Kitaoka 120a6e
  }
Shinya Kitaoka 120a6e
  return false;
Toshihiro Shimizu 890ddd
}
Toshihiro Shimizu 890ddd
Toshihiro Shimizu 890ddd
//--------------------------------------------------------
Toshihiro Shimizu 890ddd
Shinya Kitaoka 120a6e
SchematicPort *StageSchematicSplinePort::searchPort(const QPointF &scenePos) {
Shinya Kitaoka 120a6e
  QList<qgraphicsitem *=""> items = scene()->items(scenePos);</qgraphicsitem>
Shinya Kitaoka 120a6e
  int i;
Shinya Kitaoka 120a6e
  for (i = 0; i < items.size(); i++) {
Shinya Kitaoka 120a6e
    StageSchematicSplinePort *linkingTo =
Shinya Kitaoka 120a6e
        dynamic_cast<stageschematicsplineport *="">(items[i]);</stageschematicsplineport>
Shinya Kitaoka 120a6e
    if (linkingTo) return linkingTo;
Shinya Kitaoka 120a6e
  }
Shinya Kitaoka 120a6e
  return 0;
Toshihiro Shimizu 890ddd
}
Toshihiro Shimizu 890ddd
Toshihiro Shimizu 890ddd
//--------------------------------------------------------
Toshihiro Shimizu 890ddd
shun-iwasawa 21e838
void StageSchematicSplinePort::hideSnappedLinks(SchematicPort *) {
Shinya Kitaoka 120a6e
  if (!m_linkingTo) return;
Shinya Kitaoka 120a6e
  StageSchematicNode *node = dynamic_cast<stageschematicnode *="">(getNode());</stageschematicnode>
Shinya Kitaoka 120a6e
  StageSchematicSplineNode *splineNode =
Shinya Kitaoka 120a6e
      dynamic_cast<stageschematicsplinenode *="">(getNode());</stageschematicsplinenode>
Shinya Kitaoka 120a6e
  if (node && getLinkCount() == 1) getLink(0)->hide();
Shinya Kitaoka 120a6e
  if (splineNode && m_linkingTo->getLinkCount() == 1)
Shinya Kitaoka 120a6e
    m_linkingTo->getLink(0)->hide();
Toshihiro Shimizu 890ddd
}
Toshihiro Shimizu 890ddd
Toshihiro Shimizu 890ddd
//--------------------------------------------------------
Toshihiro Shimizu 890ddd
shun-iwasawa 21e838
void StageSchematicSplinePort::showSnappedLinks(SchematicPort *) {
Shinya Kitaoka 120a6e
  if (!m_linkingTo) return;
Shinya Kitaoka 120a6e
  StageSchematicNode *node = dynamic_cast<stageschematicnode *="">(getNode());</stageschematicnode>
Shinya Kitaoka 120a6e
  StageSchematicSplineNode *splineNode =
Shinya Kitaoka 120a6e
      dynamic_cast<stageschematicsplinenode *="">(getNode());</stageschematicsplinenode>
Shinya Kitaoka 120a6e
  if (node && getLinkCount() == 1) getLink(0)->show();
Shinya Kitaoka 120a6e
  if (splineNode && m_linkingTo->getLinkCount() == 1)
Shinya Kitaoka 120a6e
    m_linkingTo->getLink(0)->show();
Toshihiro Shimizu 890ddd
}
Toshihiro Shimizu 890ddd
Toshihiro Shimizu 890ddd
//========================================================
Toshihiro Shimizu 890ddd
//
Shinya Kitaoka 120a6e
// class SplineAimChanger
Toshihiro Shimizu 890ddd
//
Toshihiro Shimizu 890ddd
//========================================================
Toshihiro Shimizu 890ddd
Toshihiro Shimizu 890ddd
SplineAimChanger::SplineAimChanger(QGraphicsItem *parent)
Shinya Kitaoka 120a6e
    : SchematicHandleSpinBox(parent), m_aim(false) {}
Toshihiro Shimizu 890ddd
Toshihiro Shimizu 890ddd
//--------------------------------------------------------
Toshihiro Shimizu 890ddd
Shinya Kitaoka 120a6e
SplineAimChanger::~SplineAimChanger() {}
Toshihiro Shimizu 890ddd
Toshihiro Shimizu 890ddd
//--------------------------------------------------------
Toshihiro Shimizu 890ddd
Shinya Kitaoka 120a6e
void SplineAimChanger::mouseMoveEvent(QGraphicsSceneMouseEvent *me) {
Shinya Kitaoka 120a6e
  if (m_buttonState == Qt::LeftButton) {
shun-iwasawa f84c65
    bool increase = false;
shun-iwasawa f84c65
    int delta     = me->screenPos().y() - me->lastScreenPos().y();
Shinya Kitaoka 120a6e
    if (delta < 0) increase = true;
Shinya Kitaoka 120a6e
    m_delta += abs(delta);
Shinya Kitaoka 120a6e
    if (m_delta > 15) {
Shinya Kitaoka 120a6e
      emit(changeStatus());
Shinya Kitaoka 120a6e
      m_delta = 0;
Shinya Kitaoka 120a6e
    }
Shinya Kitaoka 120a6e
  }
Toshihiro Shimizu 890ddd
}
Toshihiro Shimizu 890ddd
Toshihiro Shimizu 890ddd
//--------------------------------------------------------
Toshihiro Shimizu 890ddd
Shinya Kitaoka 120a6e
void SplineAimChanger::mousePressEvent(QGraphicsSceneMouseEvent *me) {
Shinya Kitaoka 120a6e
  SchematicHandleSpinBox::mousePressEvent(me);
Toshihiro Shimizu 890ddd
}
Toshihiro Shimizu 890ddd
Toshihiro Shimizu 890ddd
//--------------------------------------------------------
Toshihiro Shimizu 890ddd
Shinya Kitaoka 120a6e
void SplineAimChanger::mouseReleaseEvent(QGraphicsSceneMouseEvent *me) {
Shinya Kitaoka 120a6e
  SchematicHandleSpinBox::mouseReleaseEvent(me);
Shinya Kitaoka 120a6e
  m_delta = 0;
Toshihiro Shimizu 890ddd
}
Toshihiro Shimizu 890ddd
Toshihiro Shimizu 890ddd
//========================================================
Toshihiro Shimizu 890ddd
//
Shinya Kitaoka 120a6e
// class StageSchematicNodeDock
Toshihiro Shimizu 890ddd
//
Toshihiro Shimizu 890ddd
//========================================================
Toshihiro Shimizu 890ddd
Shinya Kitaoka 120a6e
StageSchematicNodeDock::StageSchematicNodeDock(StageSchematicNode *parent,
Shinya Kitaoka 120a6e
                                               bool isParentPort,
Shinya Kitaoka 120a6e
                                               eStageSchematicPortType type)
Shinya Kitaoka 120a6e
    : QGraphicsItem(parent), m_parent(parent), m_isParentPort(isParentPort) {
Shinya Kitaoka 120a6e
  setFlag(QGraphicsItem::ItemIsSelectable, false);
Shinya Kitaoka 120a6e
  setFlag(QGraphicsItem::ItemIsFocusable, false);
Shinya Kitaoka 120a6e
  m_port = new StageSchematicNodePort(this, type);
Shinya Kitaoka 120a6e
Shinya Kitaoka 120a6e
  m_handleSpinBox = new SchematicHandleSpinBox(this);
Shinya Kitaoka 120a6e
Shinya Kitaoka 120a6e
  m_port->setPos(0, 0);
Shinya Kitaoka 120a6e
  if (isParentPort) {
Shinya Kitaoka 120a6e
    StageSchematicScene *stageScene =
Shinya Kitaoka 120a6e
        dynamic_cast<stageschematicscene *="">(scene());</stageschematicscene>
Shinya Kitaoka 120a6e
    if (stageScene && stageScene->isShowLetterOnPortFlagEnabled())
Shinya Kitaoka 120a6e
      m_port->setPos(m_handleSpinBox->boundingRect().width(), 0);
Shinya Kitaoka 120a6e
    m_handleSpinBox->setPos(0, 1);
Shinya Kitaoka 120a6e
  } else
Shinya Kitaoka 120a6e
    m_handleSpinBox->setPos(m_port->boundingRect().width(), 1);
Shinya Kitaoka 120a6e
Shinya Kitaoka 120a6e
  m_handleSpinBox->hide();
Shinya Kitaoka 120a6e
  connect(m_handleSpinBox, SIGNAL(modifyHandle(int)), this,
Shinya Kitaoka 120a6e
          SLOT(onModifyHandle(int)));
Shinya Kitaoka 120a6e
  connect(m_handleSpinBox, SIGNAL(sceneChanged()), parent,
Shinya Kitaoka 120a6e
          SIGNAL(sceneChanged()));
Shinya Kitaoka 120a6e
  connect(m_handleSpinBox, SIGNAL(handleReleased()), parent,
Shinya Kitaoka 120a6e
          SLOT(onHandleReleased()));
Shinya Kitaoka 120a6e
Shinya Kitaoka 120a6e
  connect(this, SIGNAL(sceneChanged()), parent, SIGNAL(sceneChanged()));
Shinya Kitaoka 120a6e
Shinya Kitaoka 120a6e
  connect(m_port, SIGNAL(isClicked()), this, SLOT(onPortClicked()));
Shinya Kitaoka 120a6e
  connect(m_port, SIGNAL(isReleased(const QPointF &)), this,
Shinya Kitaoka 120a6e
          SLOT(onPortReleased(const QPointF &)));
Shinya Kitaoka 120a6e
Shinya Kitaoka 120a6e
  m_timer = new QTimer(this);
Shinya Kitaoka 120a6e
  m_timer->setInterval(200);
Shinya Kitaoka 120a6e
  m_timer->setSingleShot(true);
Shinya Kitaoka 120a6e
  connect(m_timer, SIGNAL(timeout()), this, SLOT(onTimeOut()));
Shinya Kitaoka 120a6e
Shinya Kitaoka 120a6e
  connect(m_port, SIGNAL(sceneChanged()), parent, SIGNAL(sceneChanged()));
Shinya Kitaoka 120a6e
  connect(m_port, SIGNAL(xsheetChanged()), parent, SIGNAL(xsheetChanged()));
Shinya Kitaoka 120a6e
Shinya Kitaoka 120a6e
  setZValue(1.5);
Shinya Kitaoka 120a6e
  setAcceptHoverEvents(true);
Toshihiro Shimizu 890ddd
}
Toshihiro Shimizu 890ddd
Toshihiro Shimizu 890ddd
//--------------------------------------------------------
Toshihiro Shimizu 890ddd
Shinya Kitaoka 120a6e
StageSchematicNodeDock::~StageSchematicNodeDock() {}
Toshihiro Shimizu 890ddd
Toshihiro Shimizu 890ddd
//--------------------------------------------------------
Toshihiro Shimizu 890ddd
Shinya Kitaoka 120a6e
QRectF StageSchematicNodeDock::boundingRect() const {
Shinya Kitaoka 120a6e
  StageSchematicScene *stageScene =
Shinya Kitaoka 120a6e
      dynamic_cast<stageschematicscene *="">(scene());</stageschematicscene>
Shinya Kitaoka 120a6e
  QRectF portRect = m_port->boundingRect();
Shinya Kitaoka 120a6e
  portRect.moveTopLeft(QPointF(0, 0));
Shinya Kitaoka 120a6e
  if (stageScene && stageScene->isShowLetterOnPortFlagEnabled()) {
Shinya Kitaoka 120a6e
    QRectF handleRect = m_handleSpinBox->boundingRect();
Shinya Kitaoka 120a6e
    handleRect.moveTopLeft(QPointF(portRect.width(), handleRect.topLeft().y()));
Shinya Kitaoka 120a6e
    portRect = portRect.united(handleRect);
Shinya Kitaoka 120a6e
  }
Shinya Kitaoka 120a6e
  return portRect;
Toshihiro Shimizu 890ddd
}
Toshihiro Shimizu 890ddd
Toshihiro Shimizu 890ddd
//--------------------------------------------------------
Toshihiro Shimizu 890ddd
Toshihiro Shimizu 890ddd
void StageSchematicNodeDock::paint(QPainter *painter,
Shinya Kitaoka 120a6e
                                   const QStyleOptionGraphicsItem *option,
Shinya Kitaoka 120a6e
                                   QWidget *widget) {}
Toshihiro Shimizu 890ddd
Toshihiro Shimizu 890ddd
//--------------------------------------------------------
Toshihiro Shimizu 890ddd
Shinya Kitaoka 120a6e
void StageSchematicNodeDock::onModifyHandle(int increase) {
Shinya Kitaoka 120a6e
  StageSchematicScene *stageScene =
Shinya Kitaoka 120a6e
      dynamic_cast<stageschematicscene *="">(scene());</stageschematicscene>
Shinya Kitaoka 120a6e
  std::string handle(getPort()->getHandle().toStdString());
shun_iwasawa 22eaa4
Shinya Kitaoka 120a6e
  int index;
Shinya Kitaoka 120a6e
  if (handle[0] == 'H' && handle.length() > 1)
Shinya Kitaoka 120a6e
    index = -(std::stoi(handle.substr(1)));
Shinya Kitaoka 120a6e
  else
Shinya Kitaoka 120a6e
    index = handle[0] - 'A';
Shinya Kitaoka 120a6e
  index += -increase;  //==1 ? -1 : 1;
shun_iwasawa 22eaa4
Shinya Kitaoka 120a6e
  int min = (getNode()->getStageObject()->getId().isColumn())
Shinya Kitaoka 120a6e
                ? -HookSet::maxHooksCount
Shinya Kitaoka 120a6e
                : 0;
shun-iwasawa 443318
  index   = tcrop(index, min, 25);
shun_iwasawa 22eaa4
Shinya Kitaoka 120a6e
  if (index >= 0)
Shinya Kitaoka 120a6e
    handle = std::string(1, (char)('A' + index));
Shinya Kitaoka 120a6e
  else
Shinya Kitaoka 120a6e
    handle = "H" + std::to_string(-index);
shun_iwasawa 22eaa4
Shinya Kitaoka 120a6e
  if (m_isParentPort)
Shinya Kitaoka 120a6e
    TStageObjectCmd::setHandle(getNode()->getStageObject()->getId(), handle,
Shinya Kitaoka 120a6e
                               stageScene->getXsheetHandle());
Shinya Kitaoka 120a6e
  else {
Shinya Kitaoka 120a6e
    int i, linkCount = getPort()->getLinkCount();
Shinya Kitaoka 120a6e
    std::vector<tstageobjectid> ids;</tstageobjectid>
Shinya Kitaoka 120a6e
    for (i = 0; i < linkCount; i++) {
Shinya Kitaoka 120a6e
      StageSchematicNode *node =
Shinya Kitaoka 120a6e
          dynamic_cast<stageschematicnode *="">(getPort()->getLinkedNode(i));</stageschematicnode>
Shinya Kitaoka 120a6e
      if (node) ids.push_back(node->getStageObject()->getId());
Shinya Kitaoka 120a6e
    }
Shinya Kitaoka 120a6e
    TStageObjectCmd::setParentHandle(ids, handle,
Shinya Kitaoka 120a6e
                                     stageScene->getXsheetHandle());
Shinya Kitaoka 120a6e
  }
Shinya Kitaoka 120a6e
  getPort()->setHandle(QString::fromStdString(handle));
Shinya Kitaoka 120a6e
  getPort()->update();
shun_iwasawa 22eaa4
}
shun_iwasawa 22eaa4
shun_iwasawa 22eaa4
//--------------------------------------------------------
shun_iwasawa 22eaa4
Shinya Kitaoka 120a6e
void StageSchematicNodeDock::hoverEnterEvent(QGraphicsSceneHoverEvent *he) {
Shinya Kitaoka 120a6e
  QList<qgraphicsitem *=""> items = scene()->items(he->scenePos());</qgraphicsitem>
Shinya Kitaoka 120a6e
  eStageSchematicPortType type = (eStageSchematicPortType)getPort()->getType();
Shinya Kitaoka 120a6e
  if (items.contains(m_port) && type != 103 && type != 104 && type != 105) {
Shinya Kitaoka 120a6e
    m_port->highLight(true);
Shinya Kitaoka 120a6e
    m_timer->start();
Shinya Kitaoka 120a6e
  }
Shinya Kitaoka 120a6e
  QGraphicsItem::hoverEnterEvent(he);
Toshihiro Shimizu 890ddd
}
Toshihiro Shimizu 890ddd
Toshihiro Shimizu 890ddd
//--------------------------------------------------------
Toshihiro Shimizu 890ddd
Shinya Kitaoka 120a6e
void StageSchematicNodeDock::hoverLeaveEvent(QGraphicsSceneHoverEvent *he) {
Shinya Kitaoka 120a6e
  m_port->highLight(false);
Shinya Kitaoka 120a6e
  m_timer->stop();
Shinya Kitaoka 120a6e
  m_handleSpinBox->hide();
Shinya Kitaoka 120a6e
  QGraphicsItem::hoverLeaveEvent(he);
Shinya Kitaoka 120a6e
  int i;
Shinya Kitaoka 120a6e
  for (i = 0; i < m_port->getLinkCount(); i++) m_port->getLink(i)->updatePath();
Toshihiro Shimizu 890ddd
}
Toshihiro Shimizu 890ddd
Toshihiro Shimizu 890ddd
//--------------------------------------------------------
Toshihiro Shimizu 890ddd
Shinya Kitaoka 120a6e
void StageSchematicNodeDock::hoverMoveEvent(QGraphicsSceneHoverEvent *he) {
Shinya Kitaoka 120a6e
  QList<qgraphicsitem *=""> items = scene()->items(he->scenePos());</qgraphicsitem>
Shinya Kitaoka 120a6e
  if (!m_port->isHighlighted() && items.contains(m_port)) {
Shinya Kitaoka 120a6e
    m_port->highLight(true);
Shinya Kitaoka 120a6e
    eStageSchematicPortType type =
Shinya Kitaoka 120a6e
        (eStageSchematicPortType)getPort()->getType();
Shinya Kitaoka 120a6e
    if (!m_timer->isActive() && type != 103 && type != 104 && type != 105)
Shinya Kitaoka 120a6e
      m_timer->start();
Shinya Kitaoka 120a6e
  }
Shinya Kitaoka 120a6e
  QGraphicsItem::hoverMoveEvent(he);
Shinya Kitaoka 120a6e
  update();
Toshihiro Shimizu 890ddd
}
Toshihiro Shimizu 890ddd
Toshihiro Shimizu 890ddd
//--------------------------------------------------------
Toshihiro Shimizu 890ddd
Shinya Kitaoka 120a6e
void StageSchematicNodeDock::onPortClicked() {
Shinya Kitaoka 120a6e
  m_handleSpinBox->hide();
Shinya Kitaoka 120a6e
  m_timer->stop();
Shinya Kitaoka 120a6e
  int i;
Shinya Kitaoka 120a6e
  for (i = 0; i < m_port->getLinkCount(); i++) m_port->getLink(i)->updatePath();
Toshihiro Shimizu 890ddd
}
Toshihiro Shimizu 890ddd
Toshihiro Shimizu 890ddd
//--------------------------------------------------------
Toshihiro Shimizu 890ddd
Shinya Kitaoka 120a6e
void StageSchematicNodeDock::onPortReleased(const QPointF &pos) {
Shinya Kitaoka 120a6e
  QRectF portRect = m_port->boundingRect();
Shinya Kitaoka 120a6e
  portRect.moveTopLeft(m_port->scenePos());
Shinya Kitaoka 120a6e
  if (portRect.contains(pos)) m_timer->start();
Toshihiro Shimizu 890ddd
}
Toshihiro Shimizu 890ddd
Toshihiro Shimizu 890ddd
//--------------------------------------------------------
Shinya Kitaoka 120a6e
Shinya Kitaoka 120a6e
void StageSchematicNodeDock::onTimeOut() {
Shinya Kitaoka 120a6e
  StageSchematicScene *stageScene =
Shinya Kitaoka 120a6e
      dynamic_cast<stageschematicscene *="">(scene());</stageschematicscene>
Shinya Kitaoka 120a6e
  if (stageScene && stageScene->isShowLetterOnPortFlagEnabled())
Shinya Kitaoka 120a6e
    m_handleSpinBox->show();
Shinya Kitaoka 120a6e
  StageSchematicNodePort *port = getPort();
Shinya Kitaoka 120a6e
  int i;
Shinya Kitaoka 120a6e
  for (i = 0; i < port->getLinkCount(); i++) {
Shinya Kitaoka 120a6e
    SchematicLink *link      = port->getLink(i);
Shinya Kitaoka 120a6e
    SchematicPort *startPort = link->getStartPort();
Shinya Kitaoka 120a6e
    SchematicPort *endPort   = link->getEndPort();
Shinya Kitaoka 120a6e
    QPointF startPos         = startPort->getLinkEndPoint();
Shinya Kitaoka 120a6e
    QPointF endPos           = endPort->getLinkEndPoint();
Shinya Kitaoka 120a6e
    if (startPort == port) {
Shinya Kitaoka 120a6e
      if (port->getType() == 101 && startPos.x() > endPos.x())
Shinya Kitaoka 120a6e
        startPos = mapToScene(0, boundingRect().height() * 0.5);
Shinya Kitaoka 120a6e
      if (port->getType() == 102 && startPos.x() < endPos.x())
Shinya Kitaoka 120a6e
        startPos =
Shinya Kitaoka 120a6e
            mapToScene(boundingRect().width(), boundingRect().height() * 0.5);
Shinya Kitaoka 120a6e
      link->updatePath(startPos, endPos);
Shinya Kitaoka 120a6e
    } else {
Shinya Kitaoka 120a6e
      if (port->getType() == 101 && startPos.x() < endPos.x())
Shinya Kitaoka 120a6e
        endPos = mapToScene(0, boundingRect().height() * 0.5);
Shinya Kitaoka 120a6e
      if (port->getType() == 102 && startPos.x() > endPos.x())
Shinya Kitaoka 120a6e
        endPos =
Shinya Kitaoka 120a6e
            mapToScene(boundingRect().width(), boundingRect().height() * 0.5);
Shinya Kitaoka 120a6e
      link->updatePath(startPos, endPos);
Shinya Kitaoka 120a6e
    }
Shinya Kitaoka 120a6e
  }
Toshihiro Shimizu 890ddd
}
Toshihiro Shimizu 890ddd
Toshihiro Shimizu 890ddd
//========================================================
Toshihiro Shimizu 890ddd
//
Shinya Kitaoka 120a6e
// class StageSchematicSplineDock
Toshihiro Shimizu 890ddd
//
Toshihiro Shimizu 890ddd
//========================================================
Toshihiro Shimizu 890ddd
Shinya Kitaoka 120a6e
StageSchematicSplineDock::StageSchematicSplineDock(SchematicNode *parent,
Shinya Kitaoka 120a6e
                                                   bool isParentPort,
Shinya Kitaoka 120a6e
                                                   eStageSchematicPortType type)
Shinya Kitaoka 120a6e
    : QGraphicsItem(parent), m_parent(parent), m_isParentPort(isParentPort) {
Shinya Kitaoka 120a6e
  setFlag(QGraphicsItem::ItemIsSelectable, false);
Shinya Kitaoka 120a6e
  setFlag(QGraphicsItem::ItemIsFocusable, false);
Shinya Kitaoka 120a6e
  m_port = new StageSchematicSplinePort(this, type);
Shinya Kitaoka 120a6e
  setAcceptHoverEvents(true);
Toshihiro Shimizu 890ddd
Shinya Kitaoka 120a6e
  connect(m_port, SIGNAL(sceneChanged()), parent, SIGNAL(sceneChanged()));
Shinya Kitaoka 120a6e
  connect(m_port, SIGNAL(xsheetChanged()), parent, SIGNAL(xsheetChanged()));
Shinya Kitaoka 120a6e
  connect(this, SIGNAL(sceneChanged()), parent, SIGNAL(sceneChanged()));
Toshihiro Shimizu 890ddd
}
Toshihiro Shimizu 890ddd
Toshihiro Shimizu 890ddd
//--------------------------------------------------------
Toshihiro Shimizu 890ddd
Shinya Kitaoka 120a6e
StageSchematicSplineDock::~StageSchematicSplineDock() {}
Toshihiro Shimizu 890ddd
Toshihiro Shimizu 890ddd
//--------------------------------------------------------
Toshihiro Shimizu 890ddd
Shinya Kitaoka 120a6e
QRectF StageSchematicSplineDock::boundingRect() const {
Shinya Kitaoka 120a6e
  QRectF portRect = m_port->boundingRect();
Shinya Kitaoka 120a6e
  portRect.moveTopLeft(QPointF(0, 0));
Shinya Kitaoka 120a6e
  return portRect;
Toshihiro Shimizu 890ddd
}
Toshihiro Shimizu 890ddd
Toshihiro Shimizu 890ddd
//--------------------------------------------------------
Toshihiro Shimizu 890ddd
Shinya Kitaoka 120a6e
void StageSchematicSplineDock::paint(QPainter *painter,
Shinya Kitaoka 120a6e
                                     const QStyleOptionGraphicsItem *option,
Shinya Kitaoka 120a6e
                                     QWidget *widget) {}
Toshihiro Shimizu 890ddd
Toshihiro Shimizu 890ddd
//========================================================
Toshihiro Shimizu 890ddd
//
Shinya Kitaoka 120a6e
// class StageSchematicNode
Toshihiro Shimizu 890ddd
//
Toshihiro Shimizu 890ddd
//========================================================
Toshihiro Shimizu 890ddd
Shinya Kitaoka 120a6e
StageSchematicNode::StageSchematicNode(StageSchematicScene *scene,
Shinya Kitaoka 120a6e
                                       TStageObject *obj, int width, int height,
Shinya Kitaoka 120a6e
                                       bool isGroup)
Shinya Kitaoka 120a6e
    : SchematicNode(scene), m_stageObject(obj), m_isGroup(isGroup) {
Shinya Kitaoka 120a6e
  m_stageObject->addRef();
Shinya Kitaoka 120a6e
  m_width  = width;
Shinya Kitaoka 120a6e
  m_height = height;
Shinya Kitaoka 120a6e
Shinya Kitaoka 120a6e
  // aggiunge le porte
Shinya Kitaoka 120a6e
  qreal y = m_height * 0.5 - 5;
Shinya Kitaoka 120a6e
  qreal x = m_width * 0.5 - 8;
Shinya Kitaoka 120a6e
Shinya Kitaoka 120a6e
  if (m_isGroup)
Shinya Kitaoka 120a6e
    m_splineDock =
Shinya Kitaoka 120a6e
        new StageSchematicSplineDock(this, false, eStageSplineGroupPort);
Shinya Kitaoka 120a6e
  else
Shinya Kitaoka 120a6e
    m_splineDock = new StageSchematicSplineDock(this, false, eStageSplinePort);
Shinya Kitaoka 120a6e
  addPort(-1, m_splineDock->getPort());
Shinya Kitaoka 120a6e
  m_splineDock->setPos(x, m_height);
Shinya Kitaoka 120a6e
Shinya Kitaoka 120a6e
  m_pathToggle = new SchematicToggle_SplineOptions(
manongjohn 7b18ae
      this, QIcon(":Resources/schematic_spline_aim_rhomb.svg"),
manongjohn 7b18ae
      QIcon(":Resources/schematic_spline_aim_square.svg"), 0);
Shinya Kitaoka 120a6e
  m_cpToggle = new SchematicToggle_SplineOptions(
manongjohn 7b18ae
      this, QIcon(":Resources/schematic_spline_cp.svg"), 0);
Kite 521c84
  m_pathToggle->setSize(16, 16);
Kite 521c84
  m_cpToggle->setSize(16, 16);
Kite 521c84
  m_cpToggle->setPos(m_splineDock->pos() - QPointF(16, 0));
Kite 521c84
  m_pathToggle->setPos(m_cpToggle->pos() - QPointF(16, 0));
manongjohn 4f5378
  m_pathToggle->setToolTip(tr("Toggle Autorotate Along Motion Path"));
manongjohn 4f5378
  m_cpToggle->setToolTip(tr("Toggle Link Motion Path to Control Points"));
Shinya Kitaoka 120a6e
Shinya Kitaoka 120a6e
  if (m_stageObject->isPathEnabled()) {
Shinya Kitaoka 120a6e
    if (m_stageObject->isAimEnabled())
Shinya Kitaoka 120a6e
      m_pathToggle->setState(1);
Shinya Kitaoka 120a6e
    else
Shinya Kitaoka 120a6e
      m_pathToggle->setState(2);
Shinya Kitaoka 120a6e
  }
Shinya Kitaoka 120a6e
  m_cpToggle->setIsActive(m_stageObject->isUppkEnabled());
Shinya Kitaoka 120a6e
Shinya Kitaoka 120a6e
  connect(m_pathToggle, SIGNAL(stateChanged(int)), scene,
Shinya Kitaoka 120a6e
          SLOT(onPathToggled(int)));
Shinya Kitaoka 120a6e
  connect(m_cpToggle, SIGNAL(toggled(bool)), scene, SLOT(onCpToggled(bool)));
Shinya Kitaoka 120a6e
Shinya Kitaoka 120a6e
  if (!m_stageObject->getSpline()) {
Shinya Kitaoka 120a6e
    m_pathToggle->hide();
Shinya Kitaoka 120a6e
    m_cpToggle->hide();
Shinya Kitaoka 120a6e
  }
Shinya Kitaoka 120a6e
Shinya Kitaoka 120a6e
  if (m_isGroup)
Shinya Kitaoka 120a6e
    m_parentDock =
Shinya Kitaoka 120a6e
        new StageSchematicNodeDock(this, true, eStageParentGroupPort);
Shinya Kitaoka 120a6e
  else
Shinya Kitaoka 120a6e
    m_parentDock = new StageSchematicNodeDock(this, true, eStageParentPort);
Shinya Kitaoka 120a6e
  addPort(0, m_parentDock->getPort());
Shinya Kitaoka 120a6e
  if (scene->isShowLetterOnPortFlagEnabled())
Shinya Kitaoka 120a6e
    m_parentDock->setPos(-m_parentDock->boundingRect().width(), m_height - 15);
Shinya Kitaoka 120a6e
  else
Shinya Kitaoka 120a6e
    m_parentDock->setPos(0, 0);
Shinya Kitaoka 120a6e
  m_parentDock->getPort()->setHandle("B");
Shinya Kitaoka 120a6e
Shinya Kitaoka 120a6e
  StageSchematicNodeDock *childDock;
Shinya Kitaoka 120a6e
  if (m_isGroup)
Shinya Kitaoka 120a6e
    childDock = new StageSchematicNodeDock(this, false, eStageChildGroupPort);
Shinya Kitaoka 120a6e
  else
Shinya Kitaoka 120a6e
    childDock = new StageSchematicNodeDock(this, false, eStageChildPort);
Shinya Kitaoka 120a6e
  addPort(1, childDock->getPort());
Shinya Kitaoka 120a6e
  m_childDocks.append(childDock);
Shinya Kitaoka 120a6e
  if (scene->isShowLetterOnPortFlagEnabled())
Shinya Kitaoka 120a6e
    childDock->setPos(m_width, m_height - 15);
Shinya Kitaoka 120a6e
  else
Shinya Kitaoka 120a6e
    childDock->setPos(m_width - 18, 0);
Shinya Kitaoka 120a6e
  childDock->getPort()->setHandle("B");
Shinya Kitaoka 120a6e
}
Shinya Kitaoka 120a6e
Shinya Kitaoka 120a6e
//--------------------------------------------------------
Shinya Kitaoka 120a6e
Shinya Kitaoka 120a6e
StageSchematicNode::~StageSchematicNode() { m_stageObject->release(); }
Shinya Kitaoka 120a6e
Shinya Kitaoka 120a6e
//--------------------------------------------------------
Shinya Kitaoka 120a6e
Shinya Kitaoka 120a6e
void StageSchematicNode::setSchematicNodePos(const QPointF &pos) const {
Shinya Kitaoka 120a6e
  if (!m_stageObject->isGrouped() || m_stageObject->isGroupEditing())
Shinya Kitaoka 120a6e
    m_stageObject->setDagNodePos(TPointD(pos.x(), pos.y()));
Shinya Kitaoka 120a6e
  else {
Shinya Kitaoka 120a6e
    const StageSchematicGroupNode *groupNode =
Shinya Kitaoka 120a6e
        dynamic_cast<const *="" stageschematicgroupnode="">(this);</const>
Shinya Kitaoka 120a6e
    assert(groupNode);
Shinya Kitaoka 120a6e
    groupNode->updateObjsDagPosition(TPointD(pos.x(), pos.y()));
Shinya Kitaoka 120a6e
  }
Shinya Kitaoka 120a6e
}
Shinya Kitaoka 120a6e
Shinya Kitaoka 120a6e
//--------------------------------------------------------
Shinya Kitaoka 120a6e
Shinya Kitaoka 120a6e
StageSchematicNodePort *StageSchematicNode::makeChildPort(
Shinya Kitaoka 120a6e
    const QString &label) {
Shinya Kitaoka 120a6e
  int i, n = m_childDocks.size();
Shinya Kitaoka 120a6e
  assert(n > 0);
Shinya Kitaoka 120a6e
  for (i = 0; i < n - 1; i++)
Shinya Kitaoka 120a6e
    if (m_childDocks[i]->getPort()->getHandle() == label)
Shinya Kitaoka 120a6e
      return m_childDocks[i]->getPort();
Shinya Kitaoka 120a6e
  StageSchematicNodeDock *dock = m_childDocks.back();
Shinya Kitaoka 120a6e
  dock->getPort()->setHandle(label);
Shinya Kitaoka 120a6e
  int k;
Shinya Kitaoka 120a6e
  QString newPortName;
Shinya Kitaoka 120a6e
  for (k = 0;; k++) {
Shinya Kitaoka 120a6e
    newPortName = QString(1, (char)('A' + k));
Shinya Kitaoka 120a6e
    int j;
Shinya Kitaoka 120a6e
    for (j = 0; j < n; j++) {
Shinya Kitaoka 120a6e
      QString name = m_childDocks[j]->getPort()->getHandle();
Shinya Kitaoka 120a6e
      if (name == newPortName) break;
Shinya Kitaoka 120a6e
    }
Shinya Kitaoka 120a6e
    if (j == n) break;
Shinya Kitaoka 120a6e
  }
Shinya Kitaoka 120a6e
  StageSchematicScene *stageScene =
Shinya Kitaoka 120a6e
      dynamic_cast<stageschematicscene *="">(scene());</stageschematicscene>
Shinya Kitaoka 120a6e
  if (stageScene && stageScene->isShowLetterOnPortFlagEnabled()) {
Shinya Kitaoka 120a6e
    StageSchematicNodeDock *newDock;
Shinya Kitaoka 120a6e
    if (m_isGroup)
Shinya Kitaoka 120a6e
      newDock = new StageSchematicNodeDock(this, false, eStageChildGroupPort);
Shinya Kitaoka 120a6e
    else
Shinya Kitaoka 120a6e
      newDock = new StageSchematicNodeDock(this, false, eStageChildPort);
Shinya Kitaoka 120a6e
    addPort(m_childDocks.size() + 1, newDock->getPort());
Shinya Kitaoka 120a6e
    m_childDocks.append(newDock);
Shinya Kitaoka 120a6e
    newDock->getPort()->setHandle(newPortName);
Shinya Kitaoka 120a6e
  }
Shinya Kitaoka 120a6e
  updateChildDockPositions();
Shinya Kitaoka 120a6e
  return dock->getPort();
Shinya Kitaoka 120a6e
}
Shinya Kitaoka 120a6e
Shinya Kitaoka 120a6e
//--------------------------------------------------------
Shinya Kitaoka 120a6e
Shinya Kitaoka 120a6e
StageSchematicNodePort *StageSchematicNode::makeParentPort(
Shinya Kitaoka 120a6e
    const QString &label) {
Shinya Kitaoka 120a6e
  m_parentDock->getPort()->setHandle(label);
Shinya Kitaoka 120a6e
  return m_parentDock->getPort();
Shinya Kitaoka 120a6e
}
Shinya Kitaoka 120a6e
Shinya Kitaoka 120a6e
//--------------------------------------------------------
Shinya Kitaoka 120a6e
Shinya Kitaoka 120a6e
void StageSchematicNode::setPosition(const QPointF &newPos) {
Shinya Kitaoka 120a6e
  if (m_stageObject->isGrouped() && m_stageObject->getEditingGroupId() != -1) {
Shinya Kitaoka 120a6e
    StageSchematicScene *stageScene =
Shinya Kitaoka 120a6e
        dynamic_cast<stageschematicscene *="">(scene());</stageschematicscene>
Shinya Kitaoka 120a6e
    assert(stageScene);
Shinya Kitaoka 120a6e
    stageScene->updateNestedGroupEditors(this, newPos);
Shinya Kitaoka 120a6e
  } else
Shinya Kitaoka 120a6e
    setPos(newPos);
Shinya Kitaoka 120a6e
}
Shinya Kitaoka 120a6e
Shinya Kitaoka 120a6e
//--------------------------------------------------------
Shinya Kitaoka 120a6e
Shinya Kitaoka 120a6e
void StageSchematicNode::updateChildDockPositions() {
Shinya Kitaoka 120a6e
  int i, size = m_childDocks.size();
Shinya Kitaoka 120a6e
  StageSchematicScene *stageScene =
Shinya Kitaoka 120a6e
      dynamic_cast<stageschematicscene *="">(scene());</stageschematicscene>
Shinya Kitaoka 120a6e
  if (stageScene && stageScene->isShowLetterOnPortFlagEnabled()) {
Shinya Kitaoka 120a6e
    double portHeight = m_childDocks.at(0)->getPort()->boundingRect().height();
Shinya Kitaoka 120a6e
    double height     = size * portHeight;
Shinya Kitaoka 120a6e
    double y          = (m_height - 15 - portHeight * 0.5) + height * 0.5;
Shinya Kitaoka 120a6e
    for (i = 0; i < size; i++) {
Shinya Kitaoka 120a6e
      m_childDocks[i]->setPos(m_width, y);
Shinya Kitaoka 120a6e
      m_childDocks[i]->getPort()->updateLinksGeometry();
Shinya Kitaoka 120a6e
      y -= portHeight;
Shinya Kitaoka 120a6e
    }
Shinya Kitaoka 120a6e
  } else {
Shinya Kitaoka 120a6e
    double y = 18;
Shinya Kitaoka 120a6e
    for (i = 0; i < size; i++) {
Shinya Kitaoka 120a6e
      m_childDocks[i]->setPos(m_width - 18, m_height - y);
Shinya Kitaoka 120a6e
      m_childDocks[i]->getPort()->updateLinksGeometry();
Shinya Kitaoka 120a6e
      y += m_childDocks.at(0)->getPort()->boundingRect().height();
Shinya Kitaoka 120a6e
    }
Shinya Kitaoka 120a6e
  }
Shinya Kitaoka 120a6e
}
Shinya Kitaoka 120a6e
Shinya Kitaoka 120a6e
//--------------------------------------------------------
Shinya Kitaoka 120a6e
Shinya Kitaoka 120a6e
void StageSchematicNode::onClicked() {
Shinya Kitaoka 120a6e
  TStageObjectId id = m_stageObject->getId();
Shinya Kitaoka 120a6e
  emit currentObjectChanged(id, false);
Shinya Kitaoka 120a6e
  if (id.isColumn())
Shinya Kitaoka 120a6e
    emit currentColumnChanged(id.getIndex());
Shinya Kitaoka 120a6e
  else if (id.isCamera() || id.isPegbar() || id.isTable())
Shinya Kitaoka 120a6e
    emit editObject();
Shinya Kitaoka 120a6e
}
Shinya Kitaoka 120a6e
Shinya Kitaoka 120a6e
//--------------------------------------------------------
Shinya Kitaoka 120a6e
Shinya Kitaoka 120a6e
void StageSchematicNode::onHandleReleased() {
Shinya Kitaoka 120a6e
  int i;
Shinya Kitaoka 120a6e
  bool updated = false;
Shinya Kitaoka 120a6e
  for (i = m_childDocks.size() - 1; i >= 0; i--) {
Shinya Kitaoka 120a6e
    StageSchematicNodePort *port = m_childDocks[i]->getPort();
Shinya Kitaoka 120a6e
    assert(port);
Shinya Kitaoka 120a6e
    if (!port) continue;
Shinya Kitaoka 120a6e
    QString label = port->getHandle();
Shinya Kitaoka 120a6e
    int j;
Shinya Kitaoka 120a6e
    for (j = 0; j < m_childDocks.size(); j++) {
Shinya Kitaoka 120a6e
      StageSchematicNodePort *refPort = m_childDocks[j]->getPort();
Shinya Kitaoka 120a6e
      assert(refPort);
Shinya Kitaoka 120a6e
      if (!refPort) continue;
Shinya Kitaoka 120a6e
      if (refPort->getHandle() == label && i != j) {
Shinya Kitaoka 120a6e
        StageSchematicNodeDock *dock = m_childDocks[i];
Shinya Kitaoka 120a6e
        int k;
Shinya Kitaoka 120a6e
        if (port->getLinkCount() == 0 || refPort->getLinkCount() == 0) {
Shinya Kitaoka 120a6e
          updated = true;
Shinya Kitaoka 120a6e
          break;
Shinya Kitaoka 120a6e
        }
Shinya Kitaoka 120a6e
        for (k = port->getLinkCount() - 1; k >= 0; k--) {
Shinya Kitaoka 120a6e
          SchematicLink *link = port->getLink(k);
Shinya Kitaoka 120a6e
          assert(link);
Shinya Kitaoka 120a6e
          if (!link) continue;
Shinya Kitaoka 120a6e
          if (link->getStartPort() == port)
Shinya Kitaoka 120a6e
            link->setStartPort(refPort);
Shinya Kitaoka 120a6e
          else if (link->getEndPort() == port)
Shinya Kitaoka 120a6e
            link->setEndPort(refPort);
Shinya Kitaoka 120a6e
          port->removeLink(link);
Shinya Kitaoka 120a6e
          refPort->addLink(link);
Shinya Kitaoka 120a6e
        }
Shinya Kitaoka 120a6e
        m_childDocks.removeAt(i);
Shinya Kitaoka 120a6e
        delete dock;
Shinya Kitaoka 120a6e
        updateChildDockPositions();
Shinya Kitaoka 120a6e
        update();
Shinya Kitaoka 120a6e
        updated = true;
Shinya Kitaoka 120a6e
        break;
Shinya Kitaoka 120a6e
      }
Shinya Kitaoka 120a6e
    }
Shinya Kitaoka 120a6e
    if (updated) break;
Shinya Kitaoka 120a6e
  }
Shinya Kitaoka 120a6e
Shinya Kitaoka 120a6e
  if (updated) {
Shinya Kitaoka 120a6e
    QSet<qstring> labels;</qstring>
Shinya Kitaoka 120a6e
    StageSchematicNodePort *freePort = 0;
Shinya Kitaoka 120a6e
    for (i = 0; i < m_childDocks.size(); i++) {
Shinya Kitaoka 120a6e
      StageSchematicNodePort *port = m_childDocks[i]->getPort();
Shinya Kitaoka 120a6e
      assert(port);
Shinya Kitaoka 120a6e
      if (!port) continue;
Shinya Kitaoka 120a6e
      if (port->getLinkCount() == 0)
Shinya Kitaoka 120a6e
        freePort = port;
Shinya Kitaoka 120a6e
      else
Shinya Kitaoka 120a6e
        labels.insert(port->getHandle());
Shinya Kitaoka 120a6e
    }
Shinya Kitaoka 120a6e
Shinya Kitaoka 120a6e
    i = 0;
Shinya Kitaoka 120a6e
    while (labels.contains(QString(1, (char)('A' + i)))) i++;
Shinya Kitaoka 120a6e
    freePort->setHandle(QString(1, (char)('A' + i)));
Shinya Kitaoka 120a6e
    freePort->update();
Shinya Kitaoka 120a6e
  }
Toshihiro Shimizu 890ddd
}
Toshihiro Shimizu 890ddd
Toshihiro Shimizu 890ddd
//========================================================
Toshihiro Shimizu 890ddd
//
Shinya Kitaoka 120a6e
// class StageSchematicPegbarNode
Toshihiro Shimizu 890ddd
//
Toshihiro Shimizu 890ddd
//========================================================
Toshihiro Shimizu 890ddd
Shinya Kitaoka 120a6e
StageSchematicPegbarNode::StageSchematicPegbarNode(StageSchematicScene *scene,
Shinya Kitaoka 120a6e
                                                   TStageObject *pegbar)
Shinya Kitaoka 120a6e
    : StageSchematicNode(scene, pegbar, 90, 18) {
shun-iwasawa f2e168
  SchematicViewer *viewer = scene->getSchematicViewer();
shun-iwasawa f2e168
  std::string name        = m_stageObject->getFullName();
shun-iwasawa f2e168
  std::string id          = m_stageObject->getId().toString();
shun-iwasawa f2e168
  m_name                  = QString::fromStdString(name);
shun-iwasawa f2e168
  m_nameItem              = new SchematicName(this, 72, 20);
konero b50d23
  m_nameItem->setDefaultTextColor(viewer->getTextColor());
Shinya Kitaoka 120a6e
  m_nameItem->setName(m_name);
Shinya Kitaoka 120a6e
  m_nameItem->setPos(16, -1);
Shinya Kitaoka 120a6e
  m_nameItem->setZValue(2);
Shinya Kitaoka 120a6e
  connect(m_nameItem, SIGNAL(focusOut()), this, SLOT(onNameChanged()));
Shinya Kitaoka 120a6e
  m_nameItem->hide();
Toshihiro Shimizu 890ddd
Shinya Kitaoka 120a6e
  m_pegbarPainter = new PegbarPainter(this, m_width, m_height, m_name);
Shinya Kitaoka 120a6e
  m_pegbarPainter->setZValue(1);
Toshihiro Shimizu 890ddd
Shinya Kitaoka 120a6e
  QString toolTip =
Shinya Kitaoka 120a6e
      name == id ? m_name : m_name + " (" + QString::fromStdString(id) + ")";
Shinya Kitaoka 120a6e
  setToolTip(toolTip);
Toshihiro Shimizu 890ddd
}
Toshihiro Shimizu 890ddd
Toshihiro Shimizu 890ddd
//--------------------------------------------------------
Toshihiro Shimizu 890ddd
Shinya Kitaoka 120a6e
StageSchematicPegbarNode::~StageSchematicPegbarNode() {}
Toshihiro Shimizu 890ddd
Toshihiro Shimizu 890ddd
//--------------------------------------------------------
Toshihiro Shimizu 890ddd
Shinya Kitaoka 120a6e
QRectF StageSchematicPegbarNode::boundingRect() const {
Shinya Kitaoka 120a6e
  return QRectF(-5, -5, m_width + 10, m_height + 10);
Toshihiro Shimizu 890ddd
}
Toshihiro Shimizu 890ddd
Toshihiro Shimizu 890ddd
//--------------------------------------------------------
Toshihiro Shimizu 890ddd
Shinya Kitaoka 120a6e
void StageSchematicPegbarNode::paint(QPainter *painter,
Shinya Kitaoka 120a6e
                                     const QStyleOptionGraphicsItem *option,
Shinya Kitaoka 120a6e
                                     QWidget *widget) {
Shinya Kitaoka 120a6e
  StageSchematicNode::paint(painter, option, widget);
Toshihiro Shimizu 890ddd
}
Toshihiro Shimizu 890ddd
Toshihiro Shimizu 890ddd
//--------------------------------------------------------
Toshihiro Shimizu 890ddd
Shinya Kitaoka 120a6e
void StageSchematicPegbarNode::mouseDoubleClickEvent(
Shinya Kitaoka 120a6e
    QGraphicsSceneMouseEvent *me) {
Shinya Kitaoka 120a6e
  QRectF nameArea(18, 0, m_width - 36, 14);
Shinya Kitaoka 120a6e
  if (nameArea.contains(me->pos())) {
Shinya Kitaoka 120a6e
    m_nameItem->setPlainText(m_name);
Shinya Kitaoka 120a6e
    m_nameItem->show();
Shinya Kitaoka 120a6e
    m_nameItem->setFocus();
Shinya Kitaoka 120a6e
    setFlag(QGraphicsItem::ItemIsSelectable, false);
Shinya Kitaoka 120a6e
    return;
Shinya Kitaoka 120a6e
  }
Toshihiro Shimizu 890ddd
}
Toshihiro Shimizu 890ddd
Toshihiro Shimizu 890ddd
//--------------------------------------------------------
Toshihiro Shimizu 890ddd
Shinya Kitaoka 120a6e
void StageSchematicPegbarNode::onNameChanged() {
Shinya Kitaoka 120a6e
  StageSchematicScene *stageScene =
Shinya Kitaoka 120a6e
      dynamic_cast<stageschematicscene *="">(scene());</stageschematicscene>
Shinya Kitaoka 120a6e
  m_nameItem->hide();
Shinya Kitaoka 120a6e
  m_name = m_nameItem->toPlainText();
Shinya Kitaoka 120a6e
  m_pegbarPainter->setName(m_name);
Shinya Kitaoka 120a6e
  setFlag(QGraphicsItem::ItemIsSelectable, true);
Toshihiro Shimizu 890ddd
Shinya Kitaoka 120a6e
  TStageObjectId id = m_stageObject->getId();
Shinya Kitaoka 120a6e
  std::string strId = id.toString();
Shinya Kitaoka 120a6e
  std::string name  = m_name.toStdString();
Shinya Kitaoka 120a6e
  QString toolTip   = name == strId
shun-iwasawa 443318
                          ? m_name
shun-iwasawa 443318
                          : m_name + " (" + QString::fromStdString(strId) + ")";
Shinya Kitaoka 120a6e
  setToolTip(toolTip);
Shinya Kitaoka 120a6e
  if (id.isPegbar())
Shinya Kitaoka 120a6e
    TStageObjectCmd::rename(id, m_name.toStdString(),
Shinya Kitaoka 120a6e
                            stageScene->getXsheetHandle());
Shinya Kitaoka 120a6e
  update();
Toshihiro Shimizu 890ddd
}
Toshihiro Shimizu 890ddd
Toshihiro Shimizu 890ddd
//========================================================
Toshihiro Shimizu 890ddd
//
Shinya Kitaoka 120a6e
// class StageSchematicTableNode
Toshihiro Shimizu 890ddd
//
Toshihiro Shimizu 890ddd
//========================================================
Toshihiro Shimizu 890ddd
Shinya Kitaoka 120a6e
StageSchematicTableNode::StageSchematicTableNode(StageSchematicScene *scene,
Shinya Kitaoka 120a6e
                                                 TStageObject *pegbar)
Shinya Kitaoka 120a6e
    : StageSchematicNode(scene, pegbar, 90, 18) {
Shinya Kitaoka 120a6e
  m_parentDock->hide();
Shinya Kitaoka 120a6e
  updateChildDockPositions();
Toshihiro Shimizu 890ddd
Shinya Kitaoka 120a6e
  m_tablePainter = new TablePainter(this, m_width, m_height);
Shinya Kitaoka 120a6e
  m_tablePainter->setZValue(1);
Toshihiro Shimizu 890ddd
}
Toshihiro Shimizu 890ddd
Toshihiro Shimizu 890ddd
//--------------------------------------------------------
Toshihiro Shimizu 890ddd
Shinya Kitaoka 120a6e
StageSchematicTableNode::~StageSchematicTableNode() {}
Toshihiro Shimizu 890ddd
Toshihiro Shimizu 890ddd
//--------------------------------------------------------
Toshihiro Shimizu 890ddd
Shinya Kitaoka 120a6e
QRectF StageSchematicTableNode::boundingRect() const {
Shinya Kitaoka 120a6e
  return QRectF(-5, -5, m_width + 10, m_height + 10);
Toshihiro Shimizu 890ddd
}
Toshihiro Shimizu 890ddd
Toshihiro Shimizu 890ddd
//--------------------------------------------------------
Toshihiro Shimizu 890ddd
Shinya Kitaoka 120a6e
void StageSchematicTableNode::paint(QPainter *painter,
Shinya Kitaoka 120a6e
                                    const QStyleOptionGraphicsItem *option,
Shinya Kitaoka 120a6e
                                    QWidget *widget) {
Shinya Kitaoka 120a6e
  StageSchematicNode::paint(painter, option, widget);
Toshihiro Shimizu 890ddd
}
Toshihiro Shimizu 890ddd
Toshihiro Shimizu 890ddd
//--------------------------------------------------------
Toshihiro Shimizu 890ddd
Toshihiro Shimizu 890ddd
//========================================================
Toshihiro Shimizu 890ddd
//
Shinya Kitaoka 120a6e
// class StageSchematicColumnNode
Toshihiro Shimizu 890ddd
//
Toshihiro Shimizu 890ddd
//========================================================
Toshihiro Shimizu 890ddd
Shinya Kitaoka 120a6e
StageSchematicColumnNode::StageSchematicColumnNode(StageSchematicScene *scene,
Shinya Kitaoka 120a6e
                                                   TStageObject *pegbar)
Shinya Kitaoka 120a6e
    : StageSchematicNode(scene, pegbar, 90, 32), m_isOpened(true) {
Shinya Kitaoka 120a6e
  bool ret = true;
Toshihiro Shimizu 890ddd
Shinya Kitaoka 120a6e
  assert(pegbar && pegbar->getId().isColumn());
manongjohn d6e3cc
manongjohn d6e3cc
  SchematicViewer *viewer = scene->getSchematicViewer();
manongjohn d6e3cc
manongjohn d6e3cc
  TXshColumn *column =
manongjohn d6e3cc
      scene->getXsheet()->getColumn(pegbar->getId().getIndex());
manongjohn d6e3cc
Shinya Kitaoka 120a6e
  std::string name = m_stageObject->getName();
Toshihiro Shimizu 890ddd
manongjohn d6e3cc
  if (column) {
manongjohn d6e3cc
    // ZeraryFx columns store name elsewhere
manongjohn d6e3cc
    TXshZeraryFxColumn *zColumn = dynamic_cast<txshzeraryfxcolumn *="">(column);</txshzeraryfxcolumn>
manongjohn d6e3cc
    if (zColumn)
manongjohn d6e3cc
      name =
manongjohn d6e3cc
          ::to_string(zColumn->getZeraryColumnFx()->getZeraryFx()->getName());
manongjohn d6e3cc
  }
manongjohn d6e3cc
Shinya Kitaoka 120a6e
  m_name       = QString::fromStdString(name);
Shinya Kitaoka 120a6e
  m_resizeItem = new SchematicThumbnailToggle(this, m_stageObject->isOpened());
Shinya Kitaoka 120a6e
  m_resizeItem->setPos(2, 0);
Shinya Kitaoka 120a6e
  m_resizeItem->setZValue(2);
Shinya Kitaoka 120a6e
  ret = ret && connect(m_resizeItem, SIGNAL(toggled(bool)), this,
Shinya Kitaoka 120a6e
                       SLOT(onChangedSize(bool)));
Shinya Kitaoka 120a6e
Shinya Kitaoka 120a6e
  m_nameItem = new SchematicName(this, 54, 20);
konero b50d23
  m_nameItem->setDefaultTextColor(viewer->getTextColor());
Shinya Kitaoka 120a6e
  m_nameItem->setName(m_name);
Shinya Kitaoka 120a6e
  m_nameItem->setPos(16, -1);
Shinya Kitaoka 120a6e
  m_nameItem->setZValue(2);
Shinya Kitaoka 120a6e
  ret = ret &&
Shinya Kitaoka 120a6e
        connect(m_nameItem, SIGNAL(focusOut()), this, SLOT(onNameChanged()));
Shinya Kitaoka 120a6e
  m_nameItem->hide();
Shinya Kitaoka 120a6e
Shinya Kitaoka 120a6e
  m_renderToggle =
manongjohn d6e3cc
      new SchematicToggle(this, viewer->getSchematicPreviewButtonOnImage(),
manongjohn d6e3cc
                          viewer->getSchematicPreviewButtonBgOnColor(),
manongjohn d6e3cc
                          viewer->getSchematicPreviewButtonOffImage(),
manongjohn d6e3cc
                          viewer->getSchematicPreviewButtonBgOffColor(),
Shinya Kitaoka 120a6e
                          SchematicToggle::eIsParentColumn);
Shinya Kitaoka 120a6e
  ret = ret && connect(m_renderToggle, SIGNAL(toggled(bool)), this,
Shinya Kitaoka 120a6e
                       SLOT(onRenderToggleClicked(bool)));
Shinya Kitaoka 120a6e
  if (scene) {
Shinya Kitaoka 120a6e
    if (column) m_renderToggle->setIsActive(column->isPreviewVisible());
Shinya Kitaoka 120a6e
Shinya Kitaoka 120a6e
    m_renderToggle->setPos(72, 0);
Shinya Kitaoka 120a6e
    m_renderToggle->setZValue(2);
Shinya Kitaoka 120a6e
Shinya Kitaoka 120a6e
    m_cameraStandToggle = new SchematicToggle(
manongjohn d6e3cc
        this, viewer->getSchematicCamstandButtonOnImage(),
manongjohn d6e3cc
        viewer->getSchematicCamstandButtonTranspImage(),
manongjohn d6e3cc
        viewer->getSchematicCamstandButtonBgOnColor(),
manongjohn d6e3cc
        viewer->getSchematicCamstandButtonOffImage(),
manongjohn d6e3cc
        viewer->getSchematicCamstandButtonBgOffColor(),
Shinya Kitaoka 120a6e
        SchematicToggle::eIsParentColumn | SchematicToggle::eEnableNullState);
Shinya Kitaoka 120a6e
    ret = ret && connect(m_cameraStandToggle, SIGNAL(stateChanged(int)), this,
Shinya Kitaoka 120a6e
                         SLOT(onCameraStandToggleClicked(int)));
Shinya Kitaoka 120a6e
    if (column)
Shinya Kitaoka 120a6e
      m_cameraStandToggle->setState(column->isCamstandVisible()
Shinya Kitaoka 120a6e
                                        ? (column->getOpacity() < 255 ? 2 : 1)
Shinya Kitaoka 120a6e
                                        : 0);
Shinya Kitaoka 120a6e
Shinya Kitaoka 120a6e
    m_cameraStandToggle->setPos(72, 7);
Shinya Kitaoka 120a6e
    m_cameraStandToggle->setZValue(2);
Shinya Kitaoka 120a6e
  }
Shinya Kitaoka 120a6e
Shinya Kitaoka 120a6e
  qreal y = 14;
Shinya Kitaoka 120a6e
  m_parentDock->setY(y);
Shinya Kitaoka 120a6e
  m_childDocks[0]->setY(y);
Shinya Kitaoka 120a6e
Shinya Kitaoka 120a6e
  m_columnPainter = new ColumnPainter(this, m_width, m_height, m_name);
Shinya Kitaoka 120a6e
  m_columnPainter->setZValue(1);
Shinya Kitaoka 120a6e
shun-iwasawa 045b61
  if (column && !column->isControl() && !column->isRendered() &&
shun-iwasawa 045b61
      !column->getMeshColumn())
shun-iwasawa 045b61
    m_columnPainter->setIsReference();
shun-iwasawa 045b61
Shinya Kitaoka 120a6e
  int levelType;
Shinya Kitaoka 120a6e
  QString levelName;
Shinya Kitaoka 120a6e
  getLevelTypeAndName(levelType, levelName);
Shinya Kitaoka 120a6e
  setToolTip(QString("%1 : %2").arg(m_name, levelName));
Shinya Kitaoka 120a6e
Shinya Kitaoka 120a6e
  onChangedSize(m_stageObject->isOpened());
Shinya Kitaoka 120a6e
  assert(ret);
Shinya Kitaoka 120a6e
manongjohn d6e3cc
  if (levelType == PLT_XSHLEVEL) {
Shinya Kitaoka 120a6e
    m_resizeItem->hide();
manongjohn d6e3cc
    m_cameraStandToggle->hide();
shun-iwasawa 20630a
  } else if (Preferences::instance()->isUnifyColumnVisibilityTogglesEnabled())
shun-iwasawa 20630a
    m_cameraStandToggle->hide();
Shinya Kitaoka 120a6e
}
Shinya Kitaoka 120a6e
Shinya Kitaoka 120a6e
//--------------------------------------------------------
Shinya Kitaoka 120a6e
Shinya Kitaoka 120a6e
StageSchematicColumnNode::~StageSchematicColumnNode() {}
Shinya Kitaoka 120a6e
Shinya Kitaoka 120a6e
//--------------------------------------------------------
Shinya Kitaoka 120a6e
Shinya Kitaoka 120a6e
QRectF StageSchematicColumnNode::boundingRect() const {
Shinya Kitaoka 120a6e
  // iwasawa
Shinya Kitaoka 120a6e
  if (m_isOpened)
Shinya Kitaoka 120a6e
    return QRectF(-5, -54, m_width + 10, m_height + 59);
Shinya Kitaoka 120a6e
  else
Shinya Kitaoka 120a6e
    return QRectF(-5, -5, m_width + 10, m_height + 10);
Shinya Kitaoka 120a6e
}
Shinya Kitaoka 120a6e
Shinya Kitaoka 120a6e
//--------------------------------------------------------
Shinya Kitaoka 120a6e
Shinya Kitaoka 120a6e
void StageSchematicColumnNode::paint(QPainter *painter,
Shinya Kitaoka 120a6e
                                     const QStyleOptionGraphicsItem *option,
Shinya Kitaoka 120a6e
                                     QWidget *widget) {
Shinya Kitaoka 120a6e
  StageSchematicNode::paint(painter, option, widget);
Shinya Kitaoka 120a6e
  TStageObjectId id = m_stageObject->getId();
Shinya Kitaoka 120a6e
  assert(id.isColumn());
Shinya Kitaoka 120a6e
  QString colNumber = QString::number(id.getIndex() + 1);
Shinya Kitaoka 120a6e
  QFont font("Verdana", 8);
Shinya Kitaoka 120a6e
  painter->setFont(font);
Shinya Kitaoka 120a6e
  StageSchematicScene *scene = dynamic_cast<stageschematicscene *="">(m_scene);</stageschematicscene>
manongjohn d6e3cc
  SchematicViewer *viewer    = scene->getSchematicViewer();
manongjohn d6e3cc
  if (scene && scene->getCurrentObject() == id)
manongjohn d6e3cc
    painter->setPen(viewer->getSelectedNodeTextColor());
Shinya Kitaoka 120a6e
  QFontMetrics metrix(font);
Shinya Kitaoka 120a6e
  int srcWidth  = metrix.width(colNumber);
Shinya Kitaoka 120a6e
  int srcHeight = metrix.height();
Shinya Kitaoka 120a6e
  QPointF pos(m_cameraStandToggle->pos() -
Shinya Kitaoka 120a6e
              QPointF(srcWidth + 1, -srcHeight + 3));
Shinya Kitaoka 120a6e
  painter->drawText(pos, colNumber);
Shinya Kitaoka 120a6e
}
Toshihiro Shimizu 890ddd
Shinya Kitaoka 120a6e
//--------------------------------------------------------
Shinya Kitaoka 120a6e
Shinya Kitaoka 120a6e
QPixmap StageSchematicColumnNode::getPixmap() {
Shinya Kitaoka 120a6e
  StageSchematicScene *stageScene =
Shinya Kitaoka 120a6e
      dynamic_cast<stageschematicscene *="">(scene());</stageschematicscene>
Shinya Kitaoka 120a6e
  if (!stageScene) return QPixmap();
Shinya Kitaoka 120a6e
  int columnIndex = m_stageObject->getId().getIndex();
Shinya Kitaoka 120a6e
  TXsheet *xsh    = stageScene->getXsheet();
Shinya Kitaoka 120a6e
  if (xsh && !xsh->isColumnEmpty(columnIndex)) {
Shinya Kitaoka 120a6e
    int r0, r1;
Shinya Kitaoka 120a6e
    xsh->getCellRange(columnIndex, r0, r1);
Shinya Kitaoka 120a6e
    if (r1 >= r0) {
Shinya Kitaoka 120a6e
      TXshCell cell = xsh->getCell(r0, columnIndex);
Shinya Kitaoka 120a6e
      TXshLevel *xl = cell.m_level.getPointer();
Shinya Kitaoka 120a6e
      if (xl) {
Shinya Kitaoka 120a6e
        bool onDemand = false;
Shinya Kitaoka 120a6e
        if (Preferences::instance()->getColumnIconLoadingPolicy() ==
Shinya Kitaoka 120a6e
            Preferences::LoadOnDemand)
Shinya Kitaoka 120a6e
          onDemand =
Shinya Kitaoka 120a6e
              stageScene->getColumnHandle()->getColumnIndex() != columnIndex;
Shinya Kitaoka 120a6e
        return IconGenerator::instance()->getIcon(xl, cell.m_frameId, false,
Shinya Kitaoka 120a6e
                                                  onDemand);
Shinya Kitaoka 120a6e
      }
Shinya Kitaoka 120a6e
    }
Shinya Kitaoka 120a6e
  }
Shinya Kitaoka 120a6e
  return QPixmap();
Toshihiro Shimizu 890ddd
}
Toshihiro Shimizu 890ddd
Toshihiro Shimizu 890ddd
//--------------------------------------------------------
Toshihiro Shimizu 890ddd
Shinya Kitaoka 120a6e
void StageSchematicColumnNode::resize(bool maximized) {
Shinya Kitaoka 120a6e
  m_resizeItem->setIsDown(!maximized);
Toshihiro Shimizu 890ddd
}
Toshihiro Shimizu 890ddd
Toshihiro Shimizu 890ddd
//--------------------------------------------------------
Toshihiro Shimizu 890ddd
Shinya Kitaoka 120a6e
void StageSchematicColumnNode::getLevelTypeAndName(int <ype,
Shinya Kitaoka 120a6e
                                                   QString &levelName) {
Shinya Kitaoka 120a6e
  StageSchematicScene *stageScene =
Shinya Kitaoka 120a6e
      dynamic_cast<stageschematicscene *="">(scene());</stageschematicscene>
Shinya Kitaoka 120a6e
  if (!stageScene) {
Shinya Kitaoka 120a6e
    ltype     = NO_XSHLEVEL;
Shinya Kitaoka 120a6e
    levelName = QString();
Shinya Kitaoka 120a6e
    return;
Shinya Kitaoka 120a6e
  }
Toshihiro Shimizu 890ddd
Shinya Kitaoka 120a6e
  int columnIndex = m_stageObject->getId().getIndex();
Shinya Kitaoka 120a6e
  TXsheet *xsh    = stageScene->getXsheet();
Shinya Kitaoka 120a6e
  if (xsh && !xsh->isColumnEmpty(columnIndex)) {
Shinya Kitaoka 120a6e
    int r0, r1;
Shinya Kitaoka 120a6e
    xsh->getCellRange(columnIndex, r0, r1);
Shinya Kitaoka 120a6e
    if (r1 >= r0) {
Shinya Kitaoka 120a6e
      TXshCell cell = xsh->getCell(r0, columnIndex);
Shinya Kitaoka 120a6e
      TXshLevel *xl = cell.m_level.getPointer();
Shinya Kitaoka 120a6e
      if (xl) {
Shinya Kitaoka 120a6e
        ltype = cell.m_level->getType();
Toshihiro Shimizu 890ddd
Shinya Kitaoka 120a6e
        // for Zerary Fx, display FxId
Shinya Kitaoka 120a6e
        if (ltype == ZERARYFX_XSHLEVEL) {
Shinya Kitaoka 120a6e
          TXshZeraryFxColumn *zColumn =
Shinya Kitaoka 120a6e
              dynamic_cast<txshzeraryfxcolumn *="">(xsh->getColumn(columnIndex));</txshzeraryfxcolumn>
Shinya Kitaoka 120a6e
          if (zColumn) {
Shinya Kitaoka 120a6e
            TFx *fx   = zColumn->getZeraryColumnFx()->getZeraryFx();
Shinya Kitaoka 120a6e
            levelName = QString::fromStdWString(fx->getFxId());
Shinya Kitaoka 120a6e
            return;
Shinya Kitaoka 120a6e
          }
Shinya Kitaoka 120a6e
        }
Shinya Kitaoka 120a6e
Shinya Kitaoka 120a6e
        levelName = QString::fromStdWString(xl->getName());
Shinya Kitaoka 120a6e
        return;
Shinya Kitaoka 120a6e
      }
Shinya Kitaoka 120a6e
    }
Shinya Kitaoka 120a6e
  }
Shinya Kitaoka 120a6e
Shinya Kitaoka 120a6e
  ltype     = NO_XSHLEVEL;
Shinya Kitaoka 120a6e
  levelName = QString();
Shinya Kitaoka 120a6e
  return;
Shinya Kitaoka 120a6e
}
Shinya Kitaoka 120a6e
//--------------------------------------------------------
Shinya Kitaoka 120a6e
Shinya Kitaoka 120a6e
void StageSchematicColumnNode::onChangedSize(bool expand) {
Shinya Kitaoka 120a6e
  prepareGeometryChange();
Shinya Kitaoka 120a6e
  m_isOpened = expand;
Shinya Kitaoka 120a6e
  m_stageObject->setIsOpened(m_isOpened);
Shinya Kitaoka 120a6e
  m_height = 32;
Shinya Kitaoka 120a6e
  updatePortsPosition();
Shinya Kitaoka 120a6e
  updateLinksGeometry();
Shinya Kitaoka 120a6e
  update();
manongjohn adae7d
  emit nodeChangedSize();
Shinya Kitaoka 120a6e
}
Shinya Kitaoka 120a6e
Shinya Kitaoka 120a6e
//--------------------------------------------------------
Shinya Kitaoka 120a6e
Shinya Kitaoka 120a6e
void StageSchematicColumnNode::updatePortsPosition() {
Shinya Kitaoka 120a6e
  qreal x = m_width * 0.5 - 5;
Shinya Kitaoka 120a6e
  m_splineDock->setPos(x, m_height);
Shinya Kitaoka 120a6e
  updateChildDockPositions();
Shinya Kitaoka 120a6e
}
Shinya Kitaoka 120a6e
Shinya Kitaoka 120a6e
//--------------------------------------------------------
Shinya Kitaoka 120a6e
Shinya Kitaoka 120a6e
void StageSchematicColumnNode::mouseDoubleClickEvent(
Shinya Kitaoka 120a6e
    QGraphicsSceneMouseEvent *me) {
Shinya Kitaoka 120a6e
  StageSchematicScene *stageScene =
Shinya Kitaoka 120a6e
      dynamic_cast<stageschematicscene *="">(scene());</stageschematicscene>
Shinya Kitaoka 120a6e
  if (!stageScene) return;
Shinya Kitaoka 120a6e
  QRectF nameArea(14, 0, m_width - 15, 14);
Shinya Kitaoka 120a6e
  if (nameArea.contains(me->pos())) {
manongjohn d6e3cc
    std::string name = m_stageObject->getName();
manongjohn d6e3cc
manongjohn d6e3cc
    TStageObjectId id  = m_stageObject->getId();
manongjohn d6e3cc
    TXshColumn *column = stageScene->getXsheet()->getColumn(id.getIndex());
manongjohn d6e3cc
    if (column) {
manongjohn d6e3cc
      TXshZeraryFxColumn *fxColumn = dynamic_cast<txshzeraryfxcolumn *="">(column);</txshzeraryfxcolumn>
manongjohn d6e3cc
      if (fxColumn)
manongjohn d6e3cc
        name = ::to_string(
manongjohn d6e3cc
            fxColumn->getZeraryColumnFx()->getZeraryFx()->getName());
manongjohn d6e3cc
    }
manongjohn d6e3cc
manongjohn d6e3cc
    m_name = QString::fromStdString(name);
Shinya Kitaoka 120a6e
    m_nameItem->setPlainText(m_name);
Shinya Kitaoka 120a6e
    m_nameItem->show();
Shinya Kitaoka 120a6e
    m_nameItem->setFocus();
Shinya Kitaoka 120a6e
    setFlag(QGraphicsItem::ItemIsSelectable, false);
Shinya Kitaoka 120a6e
  }
Toshihiro Shimizu 890ddd
}
Toshihiro Shimizu 890ddd
Toshihiro Shimizu 890ddd
//--------------------------------------------------------
Toshihiro Shimizu 890ddd
Shinya Kitaoka 120a6e
void StageSchematicColumnNode::onNameChanged() {
Shinya Kitaoka 120a6e
  StageSchematicScene *stageScene =
Shinya Kitaoka 120a6e
      dynamic_cast<stageschematicscene *="">(scene());</stageschematicscene>
Shinya Kitaoka 120a6e
  if (!stageScene) return;
Shinya Kitaoka 120a6e
  m_nameItem->hide();
Shinya Kitaoka 120a6e
  m_name = m_nameItem->toPlainText();
Shinya Kitaoka 120a6e
  m_columnPainter->setName(m_name);
Shinya Kitaoka 120a6e
Shinya Kitaoka 120a6e
  int levelType;
Shinya Kitaoka 120a6e
  QString levelName;
Shinya Kitaoka 120a6e
  getLevelTypeAndName(levelType, levelName);
Shinya Kitaoka 120a6e
  setToolTip(QString("%1 : %2").arg(m_name, levelName));
Shinya Kitaoka 120a6e
Shinya Kitaoka 120a6e
  setFlag(QGraphicsItem::ItemIsSelectable, true);
Shinya Kitaoka 120a6e
Shinya Kitaoka 120a6e
  TStageObjectId id = m_stageObject->getId();
Shinya Kitaoka 120a6e
  if (!id.isColumn()) return;
Shinya Kitaoka 120a6e
  TXshColumn *column = stageScene->getXsheet()->getColumn(id.getIndex());
Shinya Kitaoka 120a6e
  TXshZeraryFxColumn *fxColumn = dynamic_cast<txshzeraryfxcolumn *="">(column);</txshzeraryfxcolumn>
Shinya Kitaoka 120a6e
  if (fxColumn)
Shinya Kitaoka 120a6e
    TFxCommand::renameFx(fxColumn->getZeraryColumnFx(), m_name.toStdWString(),
Shinya Kitaoka 120a6e
                         stageScene->getXsheetHandle());
Shinya Kitaoka 120a6e
  else {
Shinya Kitaoka 120a6e
    TStageObjectCmd::rename(id, m_name.toStdString(),
Shinya Kitaoka 120a6e
                            stageScene->getXsheetHandle());
Shinya Kitaoka 120a6e
    update();
Shinya Kitaoka 120a6e
  }
Toshihiro Shimizu 890ddd
}
Toshihiro Shimizu 890ddd
Toshihiro Shimizu 890ddd
//--------------------------------------------------------
Toshihiro Shimizu 890ddd
Shinya Kitaoka 120a6e
void StageSchematicColumnNode::onRenderToggleClicked(bool isActive) {
Shinya Kitaoka 120a6e
  StageSchematicScene *stageScene =
Shinya Kitaoka 120a6e
      dynamic_cast<stageschematicscene *="">(scene());</stageschematicscene>
Shinya Kitaoka 120a6e
  if (!stageScene) return;
Shinya Kitaoka 120a6e
  TXshColumn *column =
Shinya Kitaoka 120a6e
      stageScene->getXsheet()->getColumn(m_stageObject->getId().getIndex());
Shinya Kitaoka 120a6e
  if (column) {
Shinya Kitaoka 120a6e
    column->setPreviewVisible(isActive);
shun-iwasawa 20630a
    if (Preferences::instance()->isUnifyColumnVisibilityTogglesEnabled())
shun-iwasawa 20630a
      column->setCamstandVisible(isActive);
Shinya Kitaoka 120a6e
    emit sceneChanged();
Shinya Kitaoka 120a6e
    emit xsheetChanged();
Shinya Kitaoka 120a6e
  }
Toshihiro Shimizu 890ddd
}
Toshihiro Shimizu 890ddd
Toshihiro Shimizu 890ddd
//--------------------------------------------------------
Toshihiro Shimizu 890ddd
Shinya Kitaoka 120a6e
void StageSchematicColumnNode::onCameraStandToggleClicked(int state) {
Shinya Kitaoka 120a6e
  StageSchematicScene *stageScene =
Shinya Kitaoka 120a6e
      dynamic_cast<stageschematicscene *="">(scene());</stageschematicscene>
Shinya Kitaoka 120a6e
  if (!stageScene) return;
Shinya Kitaoka 120a6e
  TXshColumn *column =
Shinya Kitaoka 120a6e
      stageScene->getXsheet()->getColumn(m_stageObject->getId().getIndex());
Shinya Kitaoka 120a6e
  if (column) {
Shinya Kitaoka 120a6e
    // column->setCamstandNextState();
Shinya Kitaoka 120a6e
    column->setCamstandVisible(!column->isCamstandVisible());
Shinya Kitaoka 120a6e
    emit sceneChanged();
Shinya Kitaoka 120a6e
    emit xsheetChanged();
Shinya Kitaoka 120a6e
  }
Toshihiro Shimizu 890ddd
}
Toshihiro Shimizu 890ddd
Toshihiro Shimizu 890ddd
//========================================================
Toshihiro Shimizu 890ddd
//
Shinya Kitaoka 120a6e
// class StageSchematicCameraNode
Toshihiro Shimizu 890ddd
//
Toshihiro Shimizu 890ddd
//========================================================
Toshihiro Shimizu 890ddd
Shinya Kitaoka 120a6e
StageSchematicCameraNode::StageSchematicCameraNode(StageSchematicScene *scene,
Shinya Kitaoka 120a6e
                                                   TStageObject *pegbar)
Shinya Kitaoka 120a6e
    : StageSchematicNode(scene, pegbar, 90, 18) {
konero b50d23
  SchematicViewer *viewer = scene->getSchematicViewer();
shun-iwasawa f2e168
  std::string name        = m_stageObject->getFullName();
shun-iwasawa f2e168
  m_name                  = QString::fromStdString(name);
Toshihiro Shimizu 890ddd
Shinya Kitaoka 120a6e
  m_nameItem = new SchematicName(this, 54, 20);
konero b50d23
  m_nameItem->setDefaultTextColor(viewer->getTextColor());
Shinya Kitaoka 120a6e
  m_nameItem->setName(m_name);
Toshihiro Shimizu 890ddd
Shinya Kitaoka 120a6e
  m_nameItem->setPos(16, -2);
Shinya Kitaoka 120a6e
  connect(m_nameItem, SIGNAL(focusOut()), this, SLOT(onNameChanged()));
Shinya Kitaoka 120a6e
  m_nameItem->hide();
Shinya Kitaoka 120a6e
  m_nameItem->setZValue(2);
Toshihiro Shimizu 890ddd
Shinya Kitaoka 120a6e
  m_cameraPainter = new CameraPainter(this, m_width, m_height, m_name);
Shinya Kitaoka 120a6e
  m_cameraPainter->setZValue(1);
Toshihiro Shimizu 890ddd
Shinya Kitaoka 120a6e
  setToolTip(m_name);
Toshihiro Shimizu 890ddd
}
Toshihiro Shimizu 890ddd
Toshihiro Shimizu 890ddd
//--------------------------------------------------------
Toshihiro Shimizu 890ddd
Shinya Kitaoka 120a6e
StageSchematicCameraNode::~StageSchematicCameraNode() {}
Toshihiro Shimizu 890ddd
Toshihiro Shimizu 890ddd
//--------------------------------------------------------
Toshihiro Shimizu 890ddd
Shinya Kitaoka 120a6e
QRectF StageSchematicCameraNode::boundingRect() const {
Shinya Kitaoka 120a6e
  return QRectF(-5, -5, m_width + 10, m_height + 10);
Toshihiro Shimizu 890ddd
}
Toshihiro Shimizu 890ddd
Toshihiro Shimizu 890ddd
//--------------------------------------------------------
Toshihiro Shimizu 890ddd
Shinya Kitaoka 120a6e
void StageSchematicCameraNode::paint(QPainter *painter,
Shinya Kitaoka 120a6e
                                     const QStyleOptionGraphicsItem *option,
Shinya Kitaoka 120a6e
                                     QWidget *widget) {
Shinya Kitaoka 120a6e
  StageSchematicNode::paint(painter, option, widget);
Toshihiro Shimizu 890ddd
}
Toshihiro Shimizu 890ddd
Toshihiro Shimizu 890ddd
//--------------------------------------------------------
Toshihiro Shimizu 890ddd
Shinya Kitaoka 120a6e
void StageSchematicCameraNode::mouseDoubleClickEvent(
Shinya Kitaoka 120a6e
    QGraphicsSceneMouseEvent *me) {
Shinya Kitaoka 120a6e
  QRectF nameArea(0, -14, m_width, 14);
Shinya Kitaoka 120a6e
  if (nameArea.contains(me->pos())) {
Shinya Kitaoka 120a6e
    m_nameItem->setPlainText(m_name);
Shinya Kitaoka 120a6e
    m_nameItem->show();
Shinya Kitaoka 120a6e
    m_nameItem->setFocus();
Shinya Kitaoka 120a6e
    setFlag(QGraphicsItem::ItemIsSelectable, false);
Shinya Kitaoka 120a6e
  } else {
Shinya Kitaoka 120a6e
    QAction *cameraSettingsPopup =
Shinya Kitaoka 120a6e
        CommandManager::instance()->getAction("MI_CameraStage");
Shinya Kitaoka 120a6e
    cameraSettingsPopup->trigger();
Shinya Kitaoka 120a6e
  }
Toshihiro Shimizu 890ddd
}
Toshihiro Shimizu 890ddd
Toshihiro Shimizu 890ddd
//--------------------------------------------------------
Toshihiro Shimizu 890ddd
Shinya Kitaoka 120a6e
void StageSchematicCameraNode::onNameChanged() {
Shinya Kitaoka 120a6e
  StageSchematicScene *stageScene =
Shinya Kitaoka 120a6e
      dynamic_cast<stageschematicscene *="">(scene());</stageschematicscene>
Shinya Kitaoka 120a6e
  m_nameItem->hide();
Shinya Kitaoka 120a6e
  m_name = m_nameItem->toPlainText();
Shinya Kitaoka 120a6e
  m_cameraPainter->setName(m_name);
Shinya Kitaoka 120a6e
  setToolTip(m_name);
Shinya Kitaoka 120a6e
  setFlag(QGraphicsItem::ItemIsSelectable, true);
Toshihiro Shimizu 890ddd
Shinya Kitaoka 120a6e
  TStageObjectId id = m_stageObject->getId();
Shinya Kitaoka 120a6e
  if (id.isCamera())
Shinya Kitaoka 120a6e
    TStageObjectCmd::rename(id, m_name.toStdString(),
Shinya Kitaoka 120a6e
                            stageScene->getXsheetHandle());
Shinya Kitaoka 120a6e
  update();
Toshihiro Shimizu 890ddd
}
Toshihiro Shimizu 890ddd
Toshihiro Shimizu 890ddd
//========================================================
Toshihiro Shimizu 890ddd
//
Shinya Kitaoka 120a6e
// class StageSchematicSplineNode
Toshihiro Shimizu 890ddd
//
Toshihiro Shimizu 890ddd
//========================================================
Toshihiro Shimizu 890ddd
Shinya Kitaoka 120a6e
StageSchematicSplineNode::StageSchematicSplineNode(StageSchematicScene *scene,
Shinya Kitaoka 120a6e
                                                   TStageObjectSpline *spline)
Shinya Kitaoka 120a6e
    : SchematicNode(scene), m_spline(spline), m_isOpened(false) {
konero b50d23
  SchematicViewer *viewer = scene->getSchematicViewer();
shun-iwasawa f2e168
  m_width                 = 90;
shun-iwasawa f2e168
  m_height                = 18;
Shinya Kitaoka 120a6e
  assert(spline);
Toshihiro Shimizu 890ddd
Shinya Kitaoka 120a6e
  m_dock = new StageSchematicSplineDock(this, true, eStageSplinePort);
Shinya Kitaoka 120a6e
  addPort(-1, m_dock->getPort());
Shinya Kitaoka 120a6e
  QRectF rect = m_dock->getPort()->boundingRect();
Shinya Kitaoka 120a6e
  m_dock->setPos(m_width * 0.5 - rect.width() * 0.5, -rect.height());
Toshihiro Shimizu 890ddd
Shinya Kitaoka 120a6e
  m_resizeItem = new SchematicThumbnailToggle(this, m_spline->isOpened());
Shinya Kitaoka 120a6e
  m_resizeItem->setPos(2, 2);
Shinya Kitaoka 120a6e
  m_resizeItem->setZValue(2);
Shinya Kitaoka 120a6e
  connect(m_resizeItem, SIGNAL(toggled(bool)), this, SLOT(onChangedSize(bool)));
Toshihiro Shimizu 890ddd
Shinya Kitaoka 120a6e
  std::string name = m_spline->getName();
Shinya Kitaoka 120a6e
  m_splineName     = QString::fromStdString(name);
Shinya Kitaoka 120a6e
  m_nameItem       = new SchematicName(this, 72, 20);
konero b50d23
  m_nameItem->setDefaultTextColor(viewer->getTextColor());
Shinya Kitaoka 120a6e
  m_nameItem->setName(m_splineName);
Shinya Kitaoka 120a6e
  m_nameItem->setPos(16, -1);
Shinya Kitaoka 120a6e
  m_nameItem->setZValue(2);
Shinya Kitaoka 120a6e
  connect(m_nameItem, SIGNAL(focusOut()), this, SLOT(onNameChanged()));
Shinya Kitaoka 120a6e
  m_nameItem->hide();
Toshihiro Shimizu 890ddd
Shinya Kitaoka 120a6e
  m_splinePainter = new SplinePainter(this, m_width, m_height, m_splineName);
Shinya Kitaoka 120a6e
  m_splinePainter->setZValue(1);
Toshihiro Shimizu 890ddd
Shinya Kitaoka 120a6e
  setToolTip(m_splineName);
Shinya Kitaoka 120a6e
  onChangedSize(m_spline->isOpened());
Toshihiro Shimizu 890ddd
}
Toshihiro Shimizu 890ddd
Toshihiro Shimizu 890ddd
//--------------------------------------------------------
Toshihiro Shimizu 890ddd
Shinya Kitaoka 120a6e
StageSchematicSplineNode::~StageSchematicSplineNode() {}
Toshihiro Shimizu 890ddd
Toshihiro Shimizu 890ddd
//--------------------------------------------------------
Toshihiro Shimizu 890ddd
Shinya Kitaoka 120a6e
QRectF StageSchematicSplineNode::boundingRect() const {
Shinya Kitaoka 120a6e
  if (m_isOpened)
Shinya Kitaoka 120a6e
    return QRectF(-5, -5, m_width + 10, m_height + 59);
Shinya Kitaoka 120a6e
  else
Shinya Kitaoka 120a6e
    return QRectF(-5, -5, m_width + 10, m_height + 10);
Toshihiro Shimizu 890ddd
}
Toshihiro Shimizu 890ddd
Toshihiro Shimizu 890ddd
//--------------------------------------------------------
Toshihiro Shimizu 890ddd
Shinya Kitaoka 120a6e
void StageSchematicSplineNode::paint(QPainter *painter,
Shinya Kitaoka 120a6e
                                     const QStyleOptionGraphicsItem *option,
Shinya Kitaoka 120a6e
                                     QWidget *widget) {
Shinya Kitaoka 120a6e
  SchematicNode::paint(painter, option, widget);
Toshihiro Shimizu 890ddd
}
Toshihiro Shimizu 890ddd
Toshihiro Shimizu 890ddd
//--------------------------------------------------------
Toshihiro Shimizu 890ddd
Shinya Kitaoka 120a6e
void StageSchematicSplineNode::onClicked() {
Shinya Kitaoka 120a6e
  if (m_dock->getPort()->getLinkCount() > 0) {
Shinya Kitaoka 120a6e
    StageSchematicNode *parentNode =
Shinya Kitaoka 120a6e
        dynamic_cast<stageschematicnode *="">(m_dock->getPort()->getLinkedNode(0));</stageschematicnode>
Shinya Kitaoka 120a6e
    TStageObjectId parentId = parentNode->getStageObject()->getId();
Shinya Kitaoka 120a6e
    emit currentObjectChanged(parentId, true);
Shinya Kitaoka 120a6e
  }
Toshihiro Shimizu 890ddd
}
Toshihiro Shimizu 890ddd
Toshihiro Shimizu 890ddd
//--------------------------------------------------------
Toshihiro Shimizu 890ddd
Shinya Kitaoka 120a6e
void StageSchematicSplineNode::setSchematicNodePos(const QPointF &pos) const {
Shinya Kitaoka 120a6e
  m_spline->setDagNodePos(TPointD(pos.x(), pos.y()));
Toshihiro Shimizu 890ddd
}
Toshihiro Shimizu 890ddd
Toshihiro Shimizu 890ddd
//--------------------------------------------------------
Toshihiro Shimizu 890ddd
Shinya Kitaoka 120a6e
QPixmap StageSchematicSplineNode::getPixmap() {
Shinya Kitaoka 120a6e
  return IconGenerator::instance()->getIcon(m_spline);
Toshihiro Shimizu 890ddd
}
Toshihiro Shimizu 890ddd
Toshihiro Shimizu 890ddd
//--------------------------------------------------------
Toshihiro Shimizu 890ddd
Shinya Kitaoka 120a6e
void StageSchematicSplineNode::resize(bool maximized) {
Shinya Kitaoka 120a6e
  m_resizeItem->setIsDown(!maximized);
Toshihiro Shimizu 890ddd
}
Toshihiro Shimizu 890ddd
Toshihiro Shimizu 890ddd
//--------------------------------------------------------
Toshihiro Shimizu 890ddd
Shinya Kitaoka 120a6e
void StageSchematicSplineNode::mouseDoubleClickEvent(
Shinya Kitaoka 120a6e
    QGraphicsSceneMouseEvent *me) {
Shinya Kitaoka 120a6e
  QRectF nameArea(14, 0, m_width - 15, 14);
Shinya Kitaoka 120a6e
  if (nameArea.contains(me->pos())) {
Shinya Kitaoka 120a6e
    m_nameItem->setPlainText(m_splineName);
Shinya Kitaoka 120a6e
    m_nameItem->show();
Shinya Kitaoka 120a6e
    m_nameItem->setFocus();
Shinya Kitaoka 120a6e
    setFlag(QGraphicsItem::ItemIsSelectable, false);
Shinya Kitaoka 120a6e
  }
Toshihiro Shimizu 890ddd
}
Toshihiro Shimizu 890ddd
Toshihiro Shimizu 890ddd
//--------------------------------------------------------
Toshihiro Shimizu 890ddd
Shinya Kitaoka 120a6e
void StageSchematicSplineNode::onNameChanged() {
Shinya Kitaoka 120a6e
  m_nameItem->hide();
Shinya Kitaoka 120a6e
  m_splineName = m_nameItem->toPlainText();
Shinya Kitaoka 120a6e
  m_splinePainter->setName(m_splineName);
Shinya Kitaoka 120a6e
  setToolTip(m_splineName);
Shinya Kitaoka 120a6e
  setFlag(QGraphicsItem::ItemIsSelectable, true);
Toshihiro Shimizu 890ddd
Shinya Kitaoka 120a6e
  m_spline->setName(m_splineName.toStdString());
Shinya Kitaoka 120a6e
  update();
Toshihiro Shimizu 890ddd
}
Toshihiro Shimizu 890ddd
Toshihiro Shimizu 890ddd
//--------------------------------------------------------
Toshihiro Shimizu 890ddd
Shinya Kitaoka 120a6e
void StageSchematicSplineNode::onChangedSize(bool expanded) {
Shinya Kitaoka 120a6e
  prepareGeometryChange();
Shinya Kitaoka 120a6e
  m_isOpened = expanded;
Shinya Kitaoka 120a6e
  m_spline->setIsOpened(m_isOpened);
Shinya Kitaoka 120a6e
  m_height = 18;
Shinya Kitaoka 120a6e
  updateLinksGeometry();
Shinya Kitaoka 120a6e
  update();
Toshihiro Shimizu 890ddd
}
Toshihiro Shimizu 890ddd
Toshihiro Shimizu 890ddd
//========================================================
Toshihiro Shimizu 890ddd
//
Shinya Kitaoka 120a6e
// class StageSchematicSplineNode
Toshihiro Shimizu 890ddd
//
Toshihiro Shimizu 890ddd
//========================================================
Toshihiro Shimizu 890ddd
Shinya Kitaoka 120a6e
StageSchematicGroupNode::StageSchematicGroupNode(
Shinya Kitaoka 120a6e
    StageSchematicScene *scene, TStageObject *root,
Shinya Kitaoka 120a6e
    const QList<tstageobject *=""> groupedObj)</tstageobject>
Shinya Kitaoka 120a6e
    : StageSchematicNode(scene, root, 90, 18, true)
Shinya Kitaoka 120a6e
    , m_root(root)
Shinya Kitaoka 120a6e
    , m_groupedObj(groupedObj) {
konero b50d23
  SchematicViewer *viewer = scene->getSchematicViewer();
Shinya Kitaoka 120a6e
  int i;
shun-iwasawa f84c65
  for (i = 0; i < m_groupedObj.size(); i++) m_groupedObj[i]->addRef();
shun-iwasawa f84c65
  bool ret          = true;
Shinya Kitaoka 120a6e
  std::wstring name = m_stageObject->getGroupName(false);
Shinya Kitaoka 120a6e
  m_name            = QString::fromStdWString(name);
Toshihiro Shimizu 890ddd
Shinya Kitaoka 120a6e
  m_nameItem = new SchematicName(this, 72, 20);
konero b50d23
  m_nameItem->setDefaultTextColor(viewer->getTextColor());
Shinya Kitaoka 120a6e
  m_nameItem->setName(m_name);
Shinya Kitaoka 120a6e
  m_nameItem->setPos(16, -1);
Shinya Kitaoka 120a6e
  m_nameItem->setZValue(2);
Shinya Kitaoka 120a6e
  ret = ret &&
Shinya Kitaoka 120a6e
        connect(m_nameItem, SIGNAL(focusOut()), this, SLOT(onNameChanged()));
Shinya Kitaoka 120a6e
  m_nameItem->hide();
Toshihiro Shimizu 890ddd
Shinya Kitaoka 120a6e
  // m_childDocks[0]->setPos(m_width - 18, 0);
Shinya Kitaoka 120a6e
  // m_parentDock->setPos(0, 0);
Toshihiro Shimizu 890ddd
Shinya Kitaoka 120a6e
  m_painter = new GroupPainter(this, m_width, m_height, m_name);
Shinya Kitaoka 120a6e
  m_painter->setZValue(1);
Toshihiro Shimizu 890ddd
manongjohn d6e3cc
  QString id = "Group " + QString::number(getGroupId());
manongjohn d6e3cc
  if (m_name != id)
manongjohn d6e3cc
    setToolTip(QString("%1 (%2)").arg(m_name, id));
manongjohn d6e3cc
  else
manongjohn d6e3cc
    setToolTip(m_name);
Toshihiro Shimizu 890ddd
Shinya Kitaoka 120a6e
  assert(ret);
Toshihiro Shimizu 890ddd
}
Toshihiro Shimizu 890ddd
Toshihiro Shimizu 890ddd
//--------------------------------------------------------
Toshihiro Shimizu 890ddd
Shinya Kitaoka 120a6e
StageSchematicGroupNode::~StageSchematicGroupNode() {
Shinya Kitaoka 120a6e
  int i;
Shinya Kitaoka 120a6e
  for (i = 0; i < m_groupedObj.size(); i++) m_groupedObj[i]->release();
Toshihiro Shimizu 890ddd
}
Toshihiro Shimizu 890ddd
Toshihiro Shimizu 890ddd
//--------------------------------------------------------
Toshihiro Shimizu 890ddd
Shinya Kitaoka 120a6e
QRectF StageSchematicGroupNode::boundingRect() const {
Shinya Kitaoka 120a6e
  return QRectF(-5, -5, m_width + 10, m_height + 10);
Toshihiro Shimizu 890ddd
}
Toshihiro Shimizu 890ddd
Toshihiro Shimizu 890ddd
//--------------------------------------------------------
Toshihiro Shimizu 890ddd
Shinya Kitaoka 120a6e
void StageSchematicGroupNode::paint(QPainter *painter,
Shinya Kitaoka 120a6e
                                    const QStyleOptionGraphicsItem *option,
Shinya Kitaoka 120a6e
                                    QWidget *widget) {}
Toshihiro Shimizu 890ddd
Toshihiro Shimizu 890ddd
//--------------------------------------------------------
Toshihiro Shimizu 890ddd
Shinya Kitaoka 120a6e
void StageSchematicGroupNode::mouseDoubleClickEvent(
Shinya Kitaoka 120a6e
    QGraphicsSceneMouseEvent *me) {
Shinya Kitaoka 120a6e
  QRectF nameArea(14, 0, m_width - 15, 14);
Shinya Kitaoka 120a6e
  if (nameArea.contains(me->pos())) {
Shinya Kitaoka 120a6e
    m_name = QString::fromStdWString(m_root->getGroupName(false));
Shinya Kitaoka 120a6e
    m_nameItem->setPlainText(m_name);
Shinya Kitaoka 120a6e
    m_nameItem->show();
Shinya Kitaoka 120a6e
    m_nameItem->setFocus();
Shinya Kitaoka 120a6e
    setFlag(QGraphicsItem::ItemIsSelectable, false);
Shinya Kitaoka 120a6e
  }
Toshihiro Shimizu 890ddd
}
Toshihiro Shimizu 890ddd
Toshihiro Shimizu 890ddd
//--------------------------------------------------------
Toshihiro Shimizu 890ddd
Shinya Kitaoka 120a6e
void StageSchematicGroupNode::onNameChanged() {
Shinya Kitaoka 120a6e
  StageSchematicScene *stageScene =
Shinya Kitaoka 120a6e
      dynamic_cast<stageschematicscene *="">(scene());</stageschematicscene>
Shinya Kitaoka 120a6e
  if (!stageScene) return;
Shinya Kitaoka 120a6e
  m_nameItem->hide();
Shinya Kitaoka 120a6e
  m_name = m_nameItem->toPlainText();
Shinya Kitaoka 120a6e
  m_painter->setName(m_name);
manongjohn d6e3cc
  QString id = "Group " + QString::number(getGroupId());
manongjohn d6e3cc
  if (m_name != id)
manongjohn d6e3cc
    setToolTip(QString("%1 (%2)").arg(m_name, id));
manongjohn d6e3cc
  else
manongjohn d6e3cc
    setToolTip(m_name);
Shinya Kitaoka 120a6e
  setFlag(QGraphicsItem::ItemIsSelectable, true);
Toshihiro Shimizu 890ddd
Shinya Kitaoka 120a6e
  TStageObjectCmd::renameGroup(m_groupedObj, m_name.toStdWString(), false,
Shinya Kitaoka 120a6e
                               stageScene->getXsheetHandle());
Shinya Kitaoka 120a6e
  update();
Toshihiro Shimizu 890ddd
}
Toshihiro Shimizu 890ddd
Toshihiro Shimizu 890ddd
//--------------------------------------------------------
Toshihiro Shimizu 890ddd
Shinya Kitaoka 120a6e
int StageSchematicGroupNode::getGroupId() { return m_root->getGroupId(); }
Toshihiro Shimizu 890ddd
Toshihiro Shimizu 890ddd
//--------------------------------------------------------
Toshihiro Shimizu 890ddd
Shinya Kitaoka 120a6e
void StageSchematicGroupNode::onChangedSize(bool expanded) {
Shinya Kitaoka 120a6e
  prepareGeometryChange();
Shinya Kitaoka 120a6e
  m_isOpened = expanded;
Shinya Kitaoka 120a6e
  int i;
Shinya Kitaoka 120a6e
  for (i = 0; i < m_groupedObj.size(); i++)
Shinya Kitaoka 120a6e
    m_groupedObj[i]->setIsOpened(m_isOpened);
Shinya Kitaoka 120a6e
  if (m_isOpened) {
Shinya Kitaoka 120a6e
    m_height = 59;
Shinya Kitaoka 120a6e
    m_nameItem->setPos(4, -6);
Shinya Kitaoka 120a6e
  } else {
Shinya Kitaoka 120a6e
    m_height = 14;
Shinya Kitaoka 120a6e
    m_nameItem->setPos(8, -2);
Shinya Kitaoka 120a6e
  }
Shinya Kitaoka 120a6e
  updatePortsPosition();
Shinya Kitaoka 120a6e
  updateLinksGeometry();
Shinya Kitaoka 120a6e
  update();
Toshihiro Shimizu 890ddd
}
Toshihiro Shimizu 890ddd
Toshihiro Shimizu 890ddd
//--------------------------------------------------------
Toshihiro Shimizu 890ddd
Shinya Kitaoka 120a6e
void StageSchematicGroupNode::updateObjsDagPosition(const TPointD &pos) const {
Shinya Kitaoka 120a6e
  TPointD oldPos = m_root->getDagNodePos();
Shinya Kitaoka 120a6e
  TPointD delta  = pos - oldPos;
Shinya Kitaoka 120a6e
  int i;
Shinya Kitaoka 120a6e
  for (i = 0; i < m_groupedObj.size(); i++) {
Shinya Kitaoka 120a6e
    // If the node position is unidentified, then leave the placement of it to
Shinya Kitaoka 120a6e
    // placeNode() function.
Shinya Kitaoka 120a6e
    if (m_groupedObj[i]->getDagNodePos() != TConst::nowhere)
Shinya Kitaoka 120a6e
      m_groupedObj[i]->setDagNodePos(m_groupedObj[i]->getDagNodePos() + delta);
Shinya Kitaoka 120a6e
  }
Toshihiro Shimizu 890ddd
}
Toshihiro Shimizu 890ddd
Toshihiro Shimizu 890ddd
//--------------------------------------------------------
Toshihiro Shimizu 890ddd
Shinya Kitaoka 120a6e
void StageSchematicGroupNode::updatePortsPosition() {
Shinya Kitaoka 120a6e
  qreal middleY = m_isOpened ? (14 + m_height) * 0.5 : m_height * 0.5;
Shinya Kitaoka 120a6e
  qreal y = middleY - (m_parentDock->getPort()->boundingRect().height() * 0.5);
Toshihiro Shimizu 890ddd
Shinya Kitaoka 120a6e
  m_parentDock->setPos(-m_parentDock->boundingRect().width(), y);
Shinya Kitaoka 120a6e
  updateChildDockPositions();
Toshihiro Shimizu 890ddd
}
Toshihiro Shimizu 890ddd
Toshihiro Shimizu 890ddd
//--------------------------------------------------------
Toshihiro Shimizu 890ddd
Shinya Kitaoka 120a6e
void StageSchematicGroupNode::resize(bool maximized) {}