Пример #1
0
/*
 * TODO XXX FIXME WTF this seems incredibly dangerous legacy code ... it's unused fortunately but should be fully deprecated
 */
bool
QuasiStack::GetFrameMap(frame_map_hdr *&map)
{
	short i;
	frame_map_hdr	*p;
	long	map_len;
	map_len = sizeof(frame_map_hdr) * (countFrames()+1);
	map_len += stackable->countControllers()*(sizeof(StabEnt *));
	map_len += countFrames()*(sizeof(QuasiStack *));

	char	*cmap = (char *)malloc(map_len);
	map = (frame_map_hdr *)cmap;
	p = map;
	p->context = context;
	p->frame_handle = this;
	p->n_children = countFrames();
	p->n_controller = stackable->countControllers();
	p->status = locusStatus;
	cmap += sizeof(frame_map_hdr);
	StabEnt	**q = (StabEnt **)cmap;
	for (i=0; i<stackable->countControllers(); i++) {
		*q = stackable->controller(i);
		q++;
	}
	cmap += sizeof(StabEnt *) * stackable->countControllers();
	QuasiStack **r = (QuasiStack **)cmap;
	for (i=0; i<countFrames(); i++) {
		if (frameAt(i)) {
//			fprintf(stderr, "\tname %s\n", stackable->Controller(i)->uniqueName());
		}
		*r++ = frameAt(i);
	}

	return true;
}
Пример #2
0
QTextFrame *QTextDocumentPrivate::insertFrame(int start, int end, const QTextFrameFormat &format)
{
    Q_ASSERT(start >= 0 && start < length());
    Q_ASSERT(end >= 0 && end < length());
    Q_ASSERT(start <= end || end == -1);

    if (start != end && frameAt(start) != frameAt(end))
        return 0;

    beginEditBlock();

    QTextFrame *frame = qobject_cast<QTextFrame *>(createObject(format));
    Q_ASSERT(frame);

    // #### using the default block and char format below might be wrong
    int idx = formats.indexForFormat(QTextBlockFormat());
    QTextCharFormat cfmt;
    cfmt.setObjectIndex(frame->objectIndex());
    int charIdx = formats.indexForFormat(cfmt);

    insertBlock(QTextBeginningOfFrame, start, idx, charIdx, QTextUndoCommand::MoveCursor);
    insertBlock(QTextEndOfFrame, ++end, idx, charIdx, QTextUndoCommand::KeepCursor);

    frame->d_func()->fragment_start = find(start).n;
    frame->d_func()->fragment_end = find(end).n;

    insert_frame(frame);

    endEditBlock();

    return frame;
}
Пример #3
0
void QTextDocumentPrivate::insert_frame(QTextFrame *f)
{
    int start = f->firstPosition();
    int end = f->lastPosition();
    QTextFrame *parent = frameAt(start-1);
    Q_ASSERT(parent == frameAt(end+1));

    if (start != end) {
        // iterator over the parent and move all children contained in my frame to myself
        for (int i = 0; i < parent->d_func()->childFrames.size(); ++i) {
            QTextFrame *c = parent->d_func()->childFrames.at(i);
            if (start < c->firstPosition() && end > c->lastPosition()) {
                parent->d_func()->childFrames.removeAt(i);
                f->d_func()->childFrames.append(c);
                c->d_func()->parentFrame = f;
            }
        }
    }
    // insert at the correct position
    int i = 0;
    for (; i < parent->d_func()->childFrames.size(); ++i) {
        QTextFrame *c = parent->d_func()->childFrames.at(i);
        if (c->firstPosition() > end)
            break;
    }
    parent->d_func()->childFrames.insert(i, f);
    f->d_func()->parentFrame = parent;
}
Пример #4
0
bool VideoFrameSource_sV::rebuildRequired(const FrameSize frameSize)
{
    bool needsRebuild = false;

    QImage frame = frameAt(0, frameSize);
    needsRebuild |= frame.isNull();

    frame = frameAt(m_videoInfo->framesCount-1, frameSize);
    needsRebuild |= frame.isNull();

    return needsRebuild;
}
Пример #5
0
bool VideoFrameSource_sV::rebuildRequired(const FrameSize frameSize)
{
    bool needsRebuild = false;

    QImage frame = frameAt(0, frameSize);
    needsRebuild |= frame.isNull();

    //qDebug() << "last frame to check " << m_videoInfo->framesCount-1;
    // rewind a little bit to account rounding error...
    frame = frameAt(m_videoInfo->framesCount-10, frameSize);
    needsRebuild |= frame.isNull();

    return needsRebuild;
}
Пример #6
0
status_t
QuasiStack::LoadSnapshotChildren(tinyxml2::XMLElement *element, std::vector<std::string> textFragments)
{
	tinyxml2::XMLNode*childNode = element->FirstChildElement();
	int childStackCount = 0;
	while (childNode != nullptr) {
		tinyxml2::XMLText *textNode;
		tinyxml2::XMLElement *elementNode;
		if ((textNode = childNode->ToText()) != nullptr) {
			textFragments.push_back(textNode->Value());
		}
		else if ((elementNode = childNode->ToElement()) != nullptr) {
			const char *namestr = elementNode->Value();
			if (namestr == "stack") {
				QuasiStack	*child = nullptr;
				if (childStackCount < countFrames()) {
					child = frameAt(childStackCount);
				}
				if (child) {
					child->LoadSnapshotElement(elementNode);
				}
				childStackCount++;
			} else {
				LoadSnapshotElement(elementNode);
			}
		}

		childNode = childNode->NextSibling();
	}

	return B_OK;
}
Пример #7
0
int ApiTrace::numCallsInFrame(int idx) const
{
    const ApiTraceFrame *frame = frameAt(idx);
    if (frame) {
        return frame->numTotalCalls();
    } else {
        return 0;
    }
}
Пример #8
0
 void Debugger::traceArgumentsString(PrintWriter& prw)
 {
     DebugStackFrame* frame = (DebugStackFrame*)frameAt(0);
     int count;
     Atom* arr;
     if (frame && frame->arguments(arr, count))
     {
         for(int i=0; i<count; i++)
         {
             prw << asAtom(arr[i]);
             if (i+1 < count)
                 prw << ",";
         }
     }
 }
Пример #9
0
 Stringp Debugger::traceArgumentsString()
 {
     Stringp args = core->kEmptyString;
     DebugStackFrame* frame = (DebugStackFrame*)frameAt(0);
     int count;
     Atom* arr;
     if (frame && frame->arguments(arr, count))
     {
         Stringp comma = core->newConstantStringLatin1(",");
         for(int i=0; i<count; i++)
         {
             args = core->concatStrings(args, core->format(arr[i]));
             if (i+1 < count)
                 args = core->concatStrings(args, comma);
         }
     }
     return args;
 }
Пример #10
0
status_t
QuasiStack::SaveSnapshot(ostream &out, const char *label)
{
	status_t	err=B_NO_ERROR;

	bool saveChildStacks = true;
	if (stackable) {
		bool saveBinaryValues = true;
		bool saveSymbolicValues = true;
		if (stackable->stackSize > 0 && saveBinaryValues) {
			out << "<stack name=\"" << label << "\" length=\"" << stackable->stackSize << "\" encoding=\"base64\">" << endl;
			std::string outb = Base64::Encode((uchar *)vars, stackable->stackSize);
			out << outb << endl;
		}
		else {
			out << "<stack name=\"" << label << "\">" << endl;
		}

		if (stackable->sym) {
			StabEnt	*p = stackable->sym->children;
			while (p!= nullptr) {
				switch (p->type) {
					case TypedValue::S_BOOL:
					case TypedValue::S_SHORT:
					case TypedValue::S_BYTE:
					case TypedValue::S_INT:
					case TypedValue::S_TIME:
					case TypedValue::S_FLOAT:
					case TypedValue::S_LONG:
					case TypedValue::S_DOUBLE: {
						if (p->refType == TypedValue::REF_STACK) {
							err=p->SaveSimpleTypeSnapshot(out, stacker, this);
						}
						break;
					}

					case TypedValue::S_CHANNEL: {
						if (p->refType == TypedValue::REF_STACK) {
							err=p->SaveSimpleTypeSnapshot(out, stacker, this);
						}
						break;
					}
					case TypedValue::S_TAKE: {
						break;
					}
					case TypedValue::S_CLIP: {
						if (p->refType == TypedValue::REF_STACK) {
							err=p->SaveSimpleTypeSnapshot(out, stacker, this);
						}
						break;
					}
				}
				p = p->sibling;
			}
		}
	} else {
		out << "<stack name=\""<<label<<"\">"<<endl;
	}
	if (saveChildStacks) {
		for (short i=0; i<countFrames(); i++) {
			QuasiStack	*s = frameAt(i);
			std::string chlabel = "child";
			if (s->callingBlock) {
				switch (s->callingBlock->type) {
					case Block::C_CALL:
						if (s->callingBlock->crap.call.crap.lambda) {
							chlabel = s->callingBlock->crap.call.crap.lambda->sym->name;
						} else {
							chlabel = "call";
						}
						break;
					case Block::C_VST:
						if (s->callingBlock->crap.call.crap.vstplugin) {
							chlabel = s->callingBlock->crap.call.crap.vstplugin->sym->name;
						} else {
							chlabel = "vst";
						}
						break;

					case Block::C_GENERIC_PLAYER:
					case Block::C_MIDI_PLAYER:
					case Block::C_SAMPLE_PLAYER:
					case Block::C_TUNEDSAMPLE_PLAYER:
					case Block::C_STREAM_PLAYER:
					case Block::C_MARKOV_PLAYER:
						chlabel = findClipPlayer(s->callingBlock->type);
						break;
				}
			}
			s->SaveSnapshot(out, chlabel.c_str());
		}
	}
	out <<"</stack>"<<endl;
	return err;
}
Пример #11
0
void Plot::onPickerMoved( const QPointF& pos )
{
    const int idx = frameAt( pos.x() );
    if ( idx >= 0 )
        Q_EMIT cursorMoved( idx );
}
Пример #12
0
void QTextDocumentPrivate::move(int pos, int to, int length, QTextUndoCommand::Operation op)
{
    Q_ASSERT(to <= fragments.length() && to <= pos);
    Q_ASSERT(pos >= 0 && pos+length <= fragments.length());
    Q_ASSERT(blocks.length() == fragments.length());

    if (pos == to)
        return;

    const bool needsInsert = to != -1;

#if !defined(QT_NO_DEBUG)
    const bool startAndEndInSameFrame = (frameAt(pos) == frameAt(pos + length - 1));

    const bool endIsEndOfChildFrame = (isAncestorFrame(frameAt(pos), frameAt(pos + length - 1))
                                       && text.at(find(pos + length - 1)->stringPosition) == QTextEndOfFrame);

    const bool startIsStartOfFrameAndEndIsEndOfFrameWithCommonParent
               = (text.at(find(pos)->stringPosition) == QTextBeginningOfFrame
                  && text.at(find(pos + length - 1)->stringPosition) == QTextEndOfFrame
                  && frameAt(pos)->parentFrame() == frameAt(pos + length - 1)->parentFrame());

    const bool isFirstTableCell = (qobject_cast<QTextTable *>(frameAt(pos + length - 1))
                                  && frameAt(pos + length - 1)->parentFrame() == frameAt(pos));

    Q_ASSERT(startAndEndInSameFrame || endIsEndOfChildFrame || startIsStartOfFrameAndEndIsEndOfFrameWithCommonParent || isFirstTableCell);
#endif

    beginEditBlock();

    split(pos);
    split(pos+length);

    uint dst = needsInsert ? fragments.findNode(to) : 0;
    uint dstKey = needsInsert ? fragments.position(dst) : 0;

    uint x = fragments.findNode(pos);
    uint end = fragments.findNode(pos+length);

    uint w = 0;
    while (x != end) {
        uint n = fragments.next(x);

        uint key = fragments.position(x);
        uint b = blocks.findNode(key+1);
        QTextBlockData *B = blocks.fragment(b);
        int blockRevision = B->revision;

        QTextFragmentData *X = fragments.fragment(x);
        QTextUndoCommand c = { QTextUndoCommand::Removed, true,
                               op, X->format, X->stringPosition, key, { X->size },
                               blockRevision };
        QTextUndoCommand cInsert = { QTextUndoCommand::Inserted, true,
                                     op, X->format, X->stringPosition, dstKey, { X->size },
                                     blockRevision };

        if (key+1 != blocks.position(b)) {
//	    qDebug("remove_string from %d length %d", key, X->size);
            Q_ASSERT(noBlockInString(text.mid(X->stringPosition, X->size)));
            w = remove_string(key, X->size, op);

            if (needsInsert) {
                insert_string(dstKey, X->stringPosition, X->size, X->format, op);
                dstKey += X->size;
            }
        } else {
//	    qDebug("remove_block at %d", key);
            Q_ASSERT(X->size == 1 && isValidBlockSeparator(text.at(X->stringPosition)));
            b = blocks.previous(b);
            B = 0;
            c.command = blocks.size(b) == 1 ? QTextUndoCommand::BlockDeleted : QTextUndoCommand::BlockRemoved;
            w = remove_block(key, &c.blockFormat, QTextUndoCommand::BlockAdded, op);

            if (needsInsert) {
                insert_block(dstKey++, X->stringPosition, X->format, c.blockFormat, op, QTextUndoCommand::BlockRemoved);
                cInsert.command = blocks.size(b) == 1 ? QTextUndoCommand::BlockAdded : QTextUndoCommand::BlockInserted;
                cInsert.blockFormat = c.blockFormat;
            }
        }
        appendUndoItem(c);
        if (B)
            B->revision = undoState;
        x = n;

        if (needsInsert)
            appendUndoItem(cInsert);
    }
    if (w)
        unite(w);

    Q_ASSERT(blocks.length() == fragments.length());

    endEditBlock();
}