void GeneralTab::updateFrameSize() { v4l2_frmsizeenum frmsize; bool ok = false; m_frameSize->clear(); ok = enum_framesizes(frmsize, m_pixelformat); if (ok && frmsize.type == V4L2_FRMSIZE_TYPE_DISCRETE) { do { m_frameSize->addItem(QString("%1x%2") .arg(frmsize.discrete.width).arg(frmsize.discrete.height)); if (frmsize.discrete.width == m_width && frmsize.discrete.height == m_height) m_frameSize->setCurrentIndex(frmsize.index); } while (enum_framesizes(frmsize)); m_frameWidth->setEnabled(false); m_frameHeight->setEnabled(false); m_frameSize->setEnabled(true); updateFrameInterval(); return; } if (!ok) { frmsize.stepwise.min_width = 8; frmsize.stepwise.max_width = 1920; frmsize.stepwise.step_width = 1; frmsize.stepwise.min_height = 8; frmsize.stepwise.max_height = 1200; frmsize.stepwise.step_height = 1; } m_frameWidth->setEnabled(true); m_frameHeight->setEnabled(true); m_frameSize->setEnabled(false); m_frameWidth->setMinimum(frmsize.stepwise.min_width); m_frameWidth->setMaximum(frmsize.stepwise.max_width); m_frameWidth->setSingleStep(frmsize.stepwise.step_width); m_frameWidth->setValue(m_width); m_frameHeight->setMinimum(frmsize.stepwise.min_height); m_frameHeight->setMaximum(frmsize.stepwise.max_height); m_frameHeight->setSingleStep(frmsize.stepwise.step_height); m_frameHeight->setValue(m_height); updateFrameInterval(); }
tdRenderer::tdRenderer(QPlainTextEdit *editor, int extensions, QWebElement body) : QObject(editor), m_ext(extensions), m_editor(editor), m_undoStack(new QUndoStack(this)), m_buffer(bufnew(1024)), m_tmpbuffer(bufnew(1024)), m_markdown(initSundown()), m_body(body), m_fframe(0), m_lframe(0), m_count(0), m_index(1), m_pants(true), m_undoSteps(0), m_isUndoRedo(false) { connect(m_editor, SIGNAL(cursorPositionChanged()), this, SLOT(updateFrameInterval())); connect(m_editor, SIGNAL(selectionChanged()), this, SLOT(updateFrameInterval())); connect(editor->document(), SIGNAL(contentsChange(int, int, int)), this, SLOT(parseMarkdown(int, int, int))); updateFrameInterval(); }
void tdRenderer::parseMarkdown(int at, int removed, int added) { QTextCursor cursor = m_editor->textCursor(); cursor.beginEditBlock(); int steps = m_editor->document()->availableUndoSteps(); bool undoStepsChanged = (steps != m_undoSteps); m_undoSteps = steps; if (undoStepsChanged && !m_isUndoRedo) m_undoStack->push(new tdRendererCursorCommand(this, at, removed, added)); m_isUndoRedo = false; int start; int end; if (m_sizes.isEmpty()) { start = end = 0; } else { int i = 0, n = 0; while (i < m_fframe) n += m_sizes.at(i++); start = n; while (i <= m_lframe) n += m_sizes.at(i++); end = n; } int diff = added - removed; m_count += diff; if (m_sizes.isEmpty()) end = m_count; else end += diff; cursor.setPosition(start); cursor.setPosition(qMin(end, m_count), QTextCursor::KeepAnchor); int c = m_fframe; int klass = 0; QWebElementCollection collection; while (c++ <= m_lframe && !m_sizes.isEmpty()) { m_sizes.takeAt(m_fframe); klass = m_indices.takeAt(m_fframe); collection.append(m_body.findAll(".__" % QString::number(klass) % "__")); } QList<QWebElement> list = collection.toList(); QWebElement element; if (klass) { QString k = "__" % QString::number(klass) % "__"; element = list.last(); while (element.parent().hasClass(k)) element = element.parent(); list.removeAll(element); element.setOuterXml("<div class=\"__tmp__\"></div>"); QList<QWebElement>::iterator i = list.begin(); for (; i != list.end(); ++i) i->takeFromDocument(); } else { m_body.prependInside("<div class=\"__tmp__\"></div>"); } render(cursor.selection().toPlainText().toAscii()); cursor.endEditBlock(); updateFrameInterval(); emit parsingDone(); }