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() ); } }
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())); }
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(); }
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()); }
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())); } } }
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; }