bool ChannelNick::setOp(bool state) { if(m_isop==state) return false; m_isop=state; markAsChanged(); return true; }
bool ChannelNick::setAdmin(bool state) { if(m_isadmin==state) return false; m_isadmin=state; markAsChanged(); return true; }
/** set the voice for the nick, and update * @returns Whether it needed to be changed. False for no change. */ bool ChannelNick::setVoice(bool state) { if(m_hasvoice==state) return false; m_hasvoice=state; markAsChanged(); return true; }
bool ChannelNick::setMode(bool admin,bool owner,bool op,bool halfop,bool voice) { if(m_isadmin==admin && m_isowner==owner && m_isop==op && m_ishalfop==halfop && m_hasvoice==voice) return false; m_isadmin=admin; m_isowner=owner; m_isop=op; m_ishalfop=halfop; m_hasvoice=voice; markAsChanged(); return true; }
FlexTextReader::Result FlexTextImporter::readFile(const QString & filepath) { QFile file(filepath); file.open(QFile::ReadOnly); QXmlStreamReader stream(&file); mText->removeAllParagraphs(); bool inWord = false; bool inPhrase = false; TextBitHash textForms; TextBitHash glossForms; while (!stream.atEnd()) { stream.readNext(); QString name = stream.name().toString(); if( stream.tokenType() == QXmlStreamReader::StartElement ) { if( name == "word" ) { inWord = true; textForms.clear(); glossForms.clear(); } else if ( name == "paragraph" ) // <paragraph> { mText->mParagraphs.append( new Paragraph(mText->mBaselineWritingSystem) ); QObject::connect( mText->mParagraphs.last(), SIGNAL(changed()), mText, SLOT(markAsChanged()) ); } else if ( name == "phrase" ) { inPhrase = true; mText->mParagraphs.last()->mPhrases.append( new Phrase(mText, mText->mProject) ); mText->mParagraphs.last()->mPhrases.last()->connectToText(); QXmlStreamAttributes attr = stream.attributes(); if( attr.hasAttribute("http://www.adambaker.org/gloss.php","annotation-start") && attr.hasAttribute("http://www.adambaker.org/gloss.php","annotation-end") ) { qlonglong start = attr.value("http://www.adambaker.org/gloss.php","annotation-start").toString().toLongLong(); qlonglong end = attr.value("http://www.adambaker.org/gloss.php","annotation-end").toString().toLongLong(); mText->mParagraphs.last()->phrases()->last()->setInterval( Interval(start, end) ); } } else if ( name == "item" ) { QXmlStreamAttributes attr = stream.attributes(); if( attr.hasAttribute("type") ) { QString type = attr.value("type").toString(); WritingSystem lang; if( attr.hasAttribute("lang") ) lang = mText->mProject->dbAdapter()->writingSystem( attr.value("lang").toString() ); QString text = stream.readElementText(); if( inWord ) { qlonglong itemId = attr.hasAttribute("http://www.adambaker.org/gloss.php","id") ? attr.value("http://www.adambaker.org/gloss.php","id").toString().toLongLong() : -1; // there's no handling here for the case where itemId == -1 // that is handled in GlossItem::loadStringsFromDatabase() if( type == "txt" ) { TextBit textForm( text , lang, itemId); textForms.insert( lang, textForm ); } else if( type == "gls" ) { glossForms.insert( lang, TextBit( text , lang, itemId) ); } else if ( type == "punct" ) { TextBit textForm( text , lang, itemId); textForms.insert( lang, textForm ); } } else if ( inPhrase && type == "gls" ) { mText->mParagraphs.last()->phrases()->last()->setPhrasalGloss( TextBit( text , lang ) ); } } } else if(name == "interlinear-text") { QXmlStreamAttributes attr = stream.attributes(); if( attr.hasAttribute("http://www.adambaker.org/gloss.php","audio-file") ) { mText->setSound( QUrl::fromEncoded( attr.value("http://www.adambaker.org/gloss.php","audio-file").toString().toUtf8() ) ); } } else if(name == "morphemes") { /// Skip over any <morphemes> element while( !( stream.name().toString() == "morphemes" && stream.tokenType() == QXmlStreamReader::EndElement ) ) { stream.readNext(); } } } else if( stream.tokenType() == QXmlStreamReader::EndElement ) { if(name == "word") { mText->mParagraphs.last()->phrases()->last()->appendGlossItem(new GlossItem( mText->mBaselineWritingSystem, textForms, glossForms, mText->mProject )); inWord = false; } else if(name == "phrase") { inPhrase = false; } } } file.close(); if (stream.hasError()) { qWarning() << "FlexTextImporter::readTextFromFlexText error with xml reading"; return FlexTextImporter::FlexTextReadXmlReadError; } return FlexTextImporter::FlexTextReadSuccess; }
/** * Submits the image to the backing store, or commits it if no backing * store is available. * * @param image Image. * @param rect Rectangle for the image determined by an IAllocator. */ void submitImage(Image const &image, Rectanglei const &rect) { Rectanglei const noBorders = rect.shrunk(border); Rectanglei const withMargin = rect.expanded(margin); if (hasBacking()) { // The margin is cleared to transparent black. backing.fill(withMargin, Image::Color(0, 0, 0, 0)); if (border > 0) { if (flags.testFlag(WrapBordersInBackingStore)) { // Wrap using the source image (left, right, top, bottom edges). backing.drawPartial(image, Rectanglei(0, 0, border, image.height()), rect.topRight() + Vector2i(-border, border)); backing.drawPartial(image, Rectanglei(image.width() - border, 0, border, image.height()), rect.topLeft + Vector2i(0, border)); backing.drawPartial(image, Rectanglei(0, 0, image.width(), border), rect.bottomLeft() + Vector2i(border, -border)); backing.drawPartial(image, Rectanglei(0, image.height() - border, image.width(), border), rect.topLeft + Vector2i(border, 0)); } } backing.draw(image, noBorders.topLeft); //backing.toQImage().save(QString("backing-%1.png").arg(uint64_t(this))); markAsChanged(rect); } else { // No backing, must commit immediately. if (border > 0) { // Expand with borders (repeat edges). QImage const srcImg = image.toQImage(); int const sw = srcImg.width(); int const sh = srcImg.height(); QImage bordered(QSize(rect.width(), rect.height()), srcImg.format()); int const w = bordered.width(); int const h = bordered.height(); QPainter painter(&bordered); painter.setCompositionMode(QPainter::CompositionMode_Source); painter.fillRect(bordered.rect(), QColor(0, 0, 0, 0)); /// @todo This really only works for a border of 1 pixels. Should /// repeat the same outmost edge pixels for every border. -jk painter.drawImage(border, border, srcImg); painter.drawImage(border, 0, srcImg, 0, 0, sw, 1); // top painter.drawImage(border, h - 1, srcImg, 0, sh - 1, sw, 1); // bottom painter.drawImage(0, border, srcImg, 0, 0, 1, sh); // left painter.drawImage(w - 1, border, srcImg, sw - 1, 0, 1, sh); // right // Corners. painter.drawImage(0, 0, srcImg, 0, 0, 1, 1); painter.drawImage(w - 1, 0, srcImg, sw - 1, 0, 1, 1); painter.drawImage(0, h - 1, srcImg, 0, sh - 1, 1, 1); painter.drawImage(w - 1, h - 1, srcImg, sw - 1, sh - 1, 1, 1); self().commit(bordered, rect.topLeft); } else { self().commit(image, noBorders.topLeft); } } }
bool compareNew() { clearWindow(nppData._scintillaMainHandle, true); clearWindow(nppData._scintillaSecondHandle, true); active = true; int doc1Length; int *lineNum1; char **doc1 = getAllLines(nppData._scintillaMainHandle, &doc1Length, &lineNum1); if(doc1Length < 1) { return true; } int doc2Length; int *lineNum2; char **doc2 = getAllLines(nppData._scintillaSecondHandle, &doc2Length, &lineNum2); if(doc2Length < 1) { return true; } int doc1Changed = 0; int doc2Changed = 0; diff_edit *doc1Changes = NULL; diff_edit *doc2Changes = NULL; unsigned int *doc1Hashes = computeHashes(doc1, doc1Length, Settings.IncludeSpace); unsigned int *doc2Hashes = computeHashes(doc2, doc2Length, Settings.IncludeSpace); /* make diff */ int sn; struct varray *ses = varray_new(sizeof(struct diff_edit), NULL); int result = (diff(doc1Hashes, 0, doc1Length, doc2Hashes, 0, doc2Length, (idx_fn)(getLineFromIndex), (cmp_fn)(compareLines), NULL, 0, ses, &sn, NULL)); int changeOffset = 0; shift_boundries(ses, sn, doc1Hashes, doc2Hashes, doc1Length, doc2Length); find_moves(ses, sn, doc1Hashes, doc2Hashes, Settings.DetectMove); /* * - insert empty lines * - count changed lines */ doc1Changed = 0; doc2Changed = 0; for (int i = 0; i < sn; i++) { struct diff_edit *e =(diff_edit*) varray_get(ses, i); if(e->op == DIFF_DELETE) { e->changeCount = 0; doc1Changed += e->len; struct diff_edit *e2 =(diff_edit*) varray_get(ses, i+1); e2->changeCount = 0; if(e2->op == DIFF_INSERT) { //see if the DELETE/INSERT COMBO includes changed lines or if its a completely new block if(compareWords(e, e2, doc1, doc2, Settings.IncludeSpace)) { e->op = DIFF_CHANGE1; e2->op = DIFF_CHANGE2; doc2Changed += e2->len; } } } else if(e->op == DIFF_INSERT) { e->changeCount = 0; doc2Changed += e->len; } } int doc1CurrentChange = 0; int doc2CurrentChange = 0; changeOffset = 0; doc1Changes = new diff_edit[doc1Changed]; doc2Changes = new diff_edit[doc2Changed]; int doc1Offset = 0; int doc2Offset = 0; //switch from blocks of lines to one change per line. Change CHANGE to DELETE or INSERT if there are no changes on that line int added; for (int i = 0; i < sn; i++) { struct diff_edit *e =(diff_edit*) varray_get(ses, i); e->set = i; switch(e->op) { case DIFF_CHANGE1: case DIFF_DELETE: added = setDiffLines(e, doc1Changes, &doc1CurrentChange, DIFF_DELETE, e->off + doc2Offset); doc2Offset -= added; doc1Offset += added; break; case DIFF_INSERT: case DIFF_CHANGE2: added = setDiffLines(e, doc2Changes, &doc2CurrentChange, DIFF_INSERT, e->off + doc1Offset); doc1Offset -= added; doc2Offset += added; break; } } if (result != -1) { int textIndex; different = (doc1Changed > 0) || (doc2Changed > 0); for(int i = 0; i < doc1Changed; i++) { switch(doc1Changes[i].op) { case DIFF_DELETE: markAsRemoved(nppData._scintillaMainHandle, doc1Changes[i].off); break; case DIFF_CHANGE1: markAsChanged(nppData._scintillaMainHandle, doc1Changes[i].off); textIndex = lineNum1[doc1Changes[i].off]; for(int k = 0; k < doc1Changes[i].changeCount; k++) { struct diff_change *change = (diff_change*)varray_get(doc1Changes[i].changes, k); markTextAsChanged(nppData._scintillaMainHandle, textIndex + change->off, change->len); } break; case DIFF_MOVE: markAsMoved(nppData._scintillaMainHandle, doc1Changes[i].off); break; } } for(int i = 0; i < doc2Changed; i++) { switch(doc2Changes[i].op) { case DIFF_INSERT: markAsAdded(nppData._scintillaSecondHandle, doc2Changes[i].off); break; case DIFF_CHANGE2: markAsChanged(nppData._scintillaSecondHandle, doc2Changes[i].off); textIndex = lineNum2[doc2Changes[i].off]; for(int k = 0; k < doc2Changes[i].changeCount; k++) { struct diff_change *change=(diff_change*)varray_get(doc2Changes[i].changes, k); markTextAsChanged(nppData._scintillaSecondHandle, textIndex+change->off, change->len); } break; case DIFF_MOVE: markAsMoved(nppData._scintillaSecondHandle,doc2Changes[i].off); break; } } doc1Offset = 0; doc2Offset = 0; if(Settings.AddLine) { int length = 0; int off = -1; for(int i = 0; i < doc1Changed; i++) { switch(doc1Changes[i].op) { case DIFF_DELETE: case DIFF_MOVE: if(doc1Changes[i].altLocation == off) { length++; } else { addEmptyLines(nppData._scintillaSecondHandle, off + doc2Offset, length); doc2Offset += length; off = doc1Changes[i].altLocation; length = 1; } break; } } addEmptyLines(nppData._scintillaSecondHandle, off + doc2Offset, length); if(doc2Offset > 0) { clearUndoBuffer(nppData._scintillaSecondHandle); } length = 0; off = 0; doc1Offset = 0; for(int i = 0; i < doc2Changed; i++) { switch(doc2Changes[i].op) { case DIFF_INSERT: case DIFF_MOVE: if(doc2Changes[i].altLocation == off) { length++; } else { addEmptyLines(nppData._scintillaMainHandle, off + doc1Offset, length); doc1Offset += length; off = doc2Changes[i].altLocation; length = 1; } break; } } addEmptyLines(nppData._scintillaMainHandle, off + doc1Offset, length); if(doc1Offset > 0) { clearUndoBuffer(nppData._scintillaMainHandle); } } //clean up resources #if CLEANUP for(int i = 0; i < doc1Length; i++) { if(*doc1[i] != 0) { delete[] doc1[i]; } } delete[] doc1; delete[] lineNum1; for(int i = 0; i < doc2Length; i++) { if(*doc2[i] != 0) { delete[] doc2[i]; } } delete[] doc2; delete lineNum2; delete[] doc1Hashes; delete[] doc2Hashes; clearEdits(ses, sn); for(int i = 0; i < doc1Changed; i++) { clearEdit(doc1Changes + (i)); } delete[] doc1Changes; for(int i = 0; i < doc2Changed; i++) { clearEdit(doc2Changes+(i)); } delete[] doc2Changes; #endif // CLEANUP if(!different) { ::MessageBox(nppData._nppHandle, TEXT("Files Match"), TEXT("Results :"), MB_OK); return true; } ::SendMessageA(nppData._scintillaMainHandle, SCI_SHOWLINES, 0, (LPARAM)1); ::SendMessageA(nppData._scintillaSecondHandle, SCI_SHOWLINES, 0, (LPARAM)1); return false; } return false; }