示例#1
0
void InterlinearChunkEditor::refreshLayout()
{
    if( mPosition - mChunkSize < 0 )
    {
        ui->previousButton->setEnabled(false);
        ui->beginningButton->setEnabled(false);
    }
    else
    {
        ui->previousButton->setEnabled(true);
        ui->beginningButton->setEnabled(true);
    }

    if( mPosition + mChunkSize >= mText->phraseCount() )
    {
        ui->nextButton->setEnabled(false);
        ui->endButton->setEnabled(false);
    }
    else
    {
        ui->nextButton->setEnabled(true);
        ui->endButton->setEnabled(true);
    }

    if( mTextTabWidget != 0 )
    {
        mTextTabWidget->setLines( makeLines() );
    }
}
示例#2
0
InterlinearChunkEditor::InterlinearChunkEditor(Text *text, Project *project, View::Type type, int chunkSize, QWidget *parent) :
    QWidget(parent),
    ui(new Ui::InterlinearChunkEditor)
{
    ui->setupUi(this);

    mTextTabWidget = 0;

    mText = text;
    mProject = project;
    mType = type;
    mChunkSize = chunkSize;
    mPosition = 0;

    connect( ui->previousButton , SIGNAL(clicked()), this, SLOT(previous()) );
    connect( ui->nextButton, SIGNAL(clicked()), this, SLOT(next()) );
    connect( ui->buttonGoTo, SIGNAL(clicked()), this, SLOT(goTo()) );
    connect( ui->beginningButton, SIGNAL(clicked()), this, SLOT(beginning()));
    connect( ui->endButton, SIGNAL(clicked()), this, SLOT(end()) );

    connect( text, SIGNAL(guiRefreshRequest()), this, SLOT(refreshLayout()));

    refreshLayout();

    mTextTabWidget = new TextTabWidget( mText, mProject, mType, makeLines(), QList<Focus>(), this );
    ui->ildLayout->addWidget(mTextTabWidget);

    setWindowTitle(tr("%1 [%2]").arg(mText->name()).arg(mProject->view(type)->name()));
}
示例#3
0
void myinit()
{
	g_iLineList = glGenLists(1);
	glNewList(g_iLineList, GL_COMPILE);
	makeLines();
	glEndList();

	initTexture(&g_iFloorName, g_pFloorTexture);
	g_iFloorList = glGenLists(2);
	glNewList(g_iFloorList, GL_COMPILE);
	makeFloor();
	glEndList();

	initTexture(&g_iSkyName, g_pSkyTexture);
	g_iSkyList = glGenLists(3);
	glNewList(g_iSkyList, GL_COMPILE);
	makeSky();
	glEndList();

	g_iTrackList = glGenLists(4);
	glNewList(g_iTrackList, GL_COMPILE);
	makeTracks();
	glEndList();

	glClearColor(0.0, 0.0, 0.0, 0.0);   // set background color
	glEnable(GL_DEPTH_TEST);            // enable depth buffering
	glShadeModel(GL_SMOOTH);            // interpolate colors during rasterization

	moveCamera();
}
示例#4
0
void Poly::makeLines(vector<Vector2d> &lines, Vector2d &startPoint) const
{
  if (size()<2) return;
  double mindist = INFTY;
  uint index = nearestDistanceSqTo(startPoint, mindist);
  makeLines(lines,index);
  startPoint = Vector2d(lines.back());
}
示例#5
0
void BSPTree::make(Communicator *communicator, time_t atime, const std::vector<TaggedLine> &lines, BSPNode *root) {

    typedef std::pair<std::vector<TaggedLine>, std::vector<TaggedLine>> TagLineVecPair;

    std::stack<BSPNode *> nodeStack;
    std::stack<TagLineVecPair> lineStack;

    nodeStack.push(root);
    lineStack.push(makeLines(communicator, atime, lines, root));

    int progress = 0;
    while (!nodeStack.empty()) {
        progress++; // might need to increase by 2 because it was one for each left/right in the previous iteration

        if (communicator) {
            if (communicator->IsCancelled()) {
                throw Communicator::CancelledException();
            }
            if (qtimer(atime, 500)) {
                communicator->CommPostMessage(Communicator::CURRENT_RECORD, progress);
            }
        }
        BSPNode *currNode = nodeStack.top();
        nodeStack.pop();
        TagLineVecPair currLines = lineStack.top();
        lineStack.pop();

        if (!currLines.first.empty()) {
            currNode->m_left = std::unique_ptr<BSPNode>(new BSPNode(currNode));
            nodeStack.push(currNode->m_left.get());
            lineStack.push(makeLines(communicator, atime, currLines.first, currNode->m_left.get()));
        }
        if (!currLines.second.empty()) {
            currNode->m_right = std::unique_ptr<BSPNode>(new BSPNode(currNode));
            nodeStack.push(currNode->m_right.get());
            lineStack.push(makeLines(communicator, atime, currLines.second, currNode->m_right.get()));
        }
    }
}
示例#6
0
void GraphConnection::render(QPainter &painter)
{
    assert(_impl);
    //dont draw connections with missing endpoints
    if (not _impl->outputEp.isValid()) return;
    if (not _impl->inputEp.isValid()) return;

    //query the connectable info
    const auto outputAttrs = _impl->outputEp.getConnectableAttrs();
    const auto inputAttrs = _impl->inputEp.getConnectableAttrs();

    //make the minimal output protrusion
    const auto op0 = outputAttrs.point;
    QTransform otrans; otrans.rotate(outputAttrs.rotation);
    const auto op1 = outputAttrs.point + otrans.map(QPointF(GraphConnectionMinPling, 0));

    //make the minimal input protrusion
    const auto ip0 = inputAttrs.point;
    QTransform itrans; itrans.rotate(inputAttrs.rotation + 180);
    const auto ip1 = inputAttrs.point + itrans.map(QPointF(GraphConnectionMinPling+GraphConnectionArrowLen, 0));

    //create a path for the connection lines
    QVector<QPointF> points;
    points.push_back(op0);
    points.push_back(op1);
    makeLines(points, op1, outputAttrs.rotation, ip1, inputAttrs.rotation + 180);
    points.push_back(ip1);
    points.push_back(ip0);

    //create a painter path with curves for corners
    QPainterPath path(points.front());
    for (int i = 1; i < points.size()-1; i++)
    {
        const auto last = points[i-1];
        const auto curr = points[i];
        const auto next = points[i+1];
        path.lineTo(lineShorten(QLineF(last, curr)).p2());
        path.quadTo(curr, lineShorten(QLineF(next, curr)).p2());
    }
    path.lineTo(points.back());

    //draw the painter path
    QColor color(getSelected()?GraphConnectionHighlightColor:GraphConnectionDefaultColor);
    painter.setBrush(Qt::NoBrush);
    QPen pen(color);
    pen.setWidthF(GraphConnectionGirth);
    painter.setPen(pen);
    painter.drawPath(path);
    _impl->points = points;

    //create arrow head
    QTransform trans0; trans0.rotate(inputAttrs.rotation + GraphConnectionArrowAngle);
    QTransform trans1; trans1.rotate(inputAttrs.rotation - GraphConnectionArrowAngle);
    const auto p0 = trans0.map(QPointF(-GraphConnectionArrowLen, 0));
    const auto p1 = trans1.map(QPointF(-GraphConnectionArrowLen, 0));
    QPolygonF arrowHead;
    arrowHead << ip0 << (ip0+p0) << (ip0+p1);
    painter.setBrush(QBrush(color));
    painter.drawPolygon(arrowHead);
    _impl->arrowHead = arrowHead;
}