Пример #1
0
void ScoreView::lyricsReturn()
      {
      Lyrics* lyrics   = (Lyrics*)editObject;
      Segment* segment = lyrics->segment();

      endEdit();

      _score->startCmd();

      Lyrics* oldLyrics = lyrics;

      lyrics = static_cast<Lyrics*>(Element::create(lyrics->type(), _score));
      lyrics->setTrack(oldLyrics->track());
      lyrics->setParent(segment->element(oldLyrics->track()));
      lyrics->setNo(oldLyrics->no() + 1);
      _score->undoAddElement(lyrics);
      _score->select(lyrics, SELECT_SINGLE, 0);
      startEdit(lyrics, -1);
      mscore->changeState(mscoreState());

      adjustCanvasPosition(lyrics, false);
      _score->setLayoutAll(true);
      _score->end2();
      _score->end1();
      }
Пример #2
0
void ScoreView::lyricsReturn()
      {
      Lyrics* lyrics = toLyrics(editData.element);

      changeState(ViewState::NORMAL);

      _score->startCmd();
      int newVerse;
      newVerse = lyrics->no() + 1;

      Lyrics* oldLyrics = lyrics;
      lyrics = new Lyrics(_score);
      lyrics->setTrack(oldLyrics->track());
      lyrics->setParent(oldLyrics->segment()->element(oldLyrics->track()));
      lyrics->setPlacement(oldLyrics->placement());
      lyrics->setPropertyFlags(Pid::PLACEMENT, oldLyrics->propertyFlags(Pid::PLACEMENT));
      lyrics->setNo(newVerse);

      _score->undoAddElement(lyrics);
      _score->endCmd();

      _score->select(lyrics, SelectType::SINGLE, 0);
      startEdit(lyrics, Grip::NO_GRIP);

      adjustCanvasPosition(lyrics, false);
      }
 bool setText(const QString& text) {
   
   startEdit();
   bool ret = m_document->setText(text);
   endEdit();
   ModificationRevision::clearModificationCache(m_url);
   return ret;
 }
Пример #4
0
void
TextBuffer::insertChar( char c, TextLoc& loc ) { 
    
	startEdit( loc,loc);
	TextLoc p = loc;
	loc.chr = _lines[loc.line].addChar(c, loc.chr);   
	endEdit( p, loc );
}
Пример #5
0
void ScoreView::startEdit(Element* element, int startGrip)
      {
      editObject = element;
      startEdit();
      if (startGrip == -1)
            curGrip = grips-1;
      else if (startGrip >= 0)
            curGrip = startGrip;
      }
Пример #6
0
void
TextBuffer::removeLineBreak( TextLoc &loc ) { 

	loc.line--;
	loc.chr = _lines[loc.line].size();
    
    startEdit ( loc,   TextLoc( loc.line+1 , 0 ) );
	_lines[loc.line].str() += _lines[loc.line+1].str();
    _lines.erase(_lines.begin() + loc.line + 1 );
	endEdit(loc, loc);	
}
Пример #7
0
void ScoreView::lyricsUpDown(bool up, bool end)
      {
      Lyrics* lyrics       = toLyrics(editData.element);
      int track            = lyrics->track();
      ChordRest* cr        = lyrics->chordRest();
      int verse            = lyrics->no();
      Placement placement  = lyrics->placement();
      PropertyFlags pFlags = lyrics->propertyFlags(Pid::PLACEMENT);

      if (up) {
            if (verse == 0)
                  return;
            --verse;
            }
      else {
            ++verse;
            if (verse > cr->lastVerse(placement))
                  return;
            }

      changeState(ViewState::NORMAL);
      lyrics = cr->lyrics(verse, placement);
      if (!lyrics) {
            lyrics = new Lyrics(_score);
            lyrics->setTrack(track);
            lyrics->setParent(cr);
            lyrics->setNo(verse);
            lyrics->setPlacement(placement);
            lyrics->setPropertyFlags(Pid::PLACEMENT, pFlags);
            _score->startCmd();
            _score->undoAddElement(lyrics);
            _score->endCmd();
            }

      _score->select(lyrics, SelectType::SINGLE, 0);
      startEdit(lyrics, Grip::NO_GRIP);
      mscore->changeState(mscoreState());
      adjustCanvasPosition(lyrics, false);

      lyrics = toLyrics(editData.element);
      TextCursor* cursor = lyrics->cursor(editData);
      if (end) {
            cursor->movePosition(QTextCursor::Start, QTextCursor::MoveAnchor);
            cursor->movePosition(QTextCursor::End, QTextCursor::KeepAnchor);
            }
      else {
            cursor->movePosition(QTextCursor::End, QTextCursor::MoveAnchor);
            cursor->movePosition(QTextCursor::Start, QTextCursor::KeepAnchor);
            }

      _score->setLayoutAll();
      _score->update();
      }
Пример #8
0
void ScoreView::startEdit(Element* element, Grip startGrip)
      {
      if (!element || !element->isEditable()) {
            qDebug("The element cannot be edited");
            return;
            }
      editObject = element;
      startEdit();
      if (startGrip == Grip::NO_GRIP)
            curGrip = defaultGrip;
      else
            curGrip = startGrip;
      }
Пример #9
0
void
TextBuffer::insertSpan( std::string s, TextSpan &span ) { 

	startEdit( span.begin, span.end );

	if ( !span.empty() ) removeSpan(span);

	for ( t_CKUINT i=0; i < s.size(); i++) { 
		if ( s[i] == '\n' ) insertLine( span.end );
		else insertChar( s[i], span.end );
	}

	endEdit ( span.begin, span.end );
}
Пример #10
0
void
TextBuffer::removeChar(TextLoc &loc ) { 
    if ( loc.chr == 0 && loc.line == 0 ) { 
        return;
    }
    else if ( loc.chr == 0 && loc.line > 0 ) {
        removeLineBreak(loc);
    }
    else { 
		startEdit( loc.shift(0,-1), loc);
		_lines[loc.line].remChar(loc.chr--);
		endEdit(loc,loc);
	}
}
Пример #11
0
void ScoreView::lyricsUpDown(bool up, bool end)
      {
      Lyrics* lyrics   = toLyrics(editObject);
      int track        = lyrics->track();
      ChordRest* cr    = lyrics->chordRest();
      int verse        = lyrics->no();
      Element::Placement placement = lyrics->placement();

      if (placement == Element::Placement::ABOVE)
            up = !up;
      if (up) {
            if (verse == 0)
                  return;
            --verse;
            }
      else {
            ++verse;
            if (verse > cr->lastVerse(placement))
                  return;
            }

      endEdit();
      _score->startCmd();
      lyrics = cr->lyrics(verse, placement);
      if (!lyrics) {
            lyrics = new Lyrics(_score);
            lyrics->setTrack(track);
            lyrics->setParent(cr);
            lyrics->setNo(verse);
            lyrics->setPlacement(placement);
            _score->undoAddElement(lyrics);
            }

      _score->select(lyrics, SelectType::SINGLE, 0);
      startEdit(lyrics, Grip::NO_GRIP);
      mscore->changeState(mscoreState());
      adjustCanvasPosition(lyrics, false);
      if (end) {
            ((Lyrics*)editObject)->movePosition(QTextCursor::Start, QTextCursor::MoveAnchor);
            ((Lyrics*)editObject)->movePosition(QTextCursor::End, QTextCursor::KeepAnchor);
            }
      else {
            ((Lyrics*)editObject)->movePosition(QTextCursor::End, QTextCursor::MoveAnchor);
            ((Lyrics*)editObject)->movePosition(QTextCursor::Start, QTextCursor::KeepAnchor);
            }

      _score->setLayoutAll();
      _score->update();
      }
Пример #12
0
  bool replace(const KTextEditor::Range& range, const QString& oldText,
               const QString& newText, bool ignoreOldText) {
      QString old = m_document->text(range);
      if(oldText != old && !ignoreOldText) {
          return false;
      }

      startEdit();
      bool ret = m_document->replaceText(range, newText);
      endEdit();

      ModificationRevision::clearModificationCache(m_url);

      return ret;
  }
Пример #13
0
// Works for HTML Documents, http links etc
// if it starts with file:, then fire off the filename
void ExecuteFile(LPSTR FileName)
{
    if (strncmp(FileName, "file:", 5) == 0) {
	//find the line number
	char Buffer[MAX_PATH];
	char* s = strrchr(FileName, ':');
	int LineNo;
	if (s != NULL) {
	    int i;
	    s++;
	    for (i = 0; s[i] != 0; i++) {
		if (!isdigit(s[i])) {
		    s = NULL;
		    break;
		}
	    }
	}

	if (s == NULL)
	    LineNo = 0; // the null line
	else {
	    s[-1] = 0;
	    LineNo = atoi(s);
	}

	FileName += 5;			/* skip over "file:" */
	if (strncmp("{Hugs}", FileName, 6) == 0) {
	    strcpy(Buffer, hugsdir());
	    strcat(Buffer, &FileName[6]);
	} else if (IsRelativeFile(FileName)) {
	    GetCurrentDirectory(MAX_PATH, Buffer);
	    if (!IsSeparatorChar(Buffer[strlen(Buffer) - 1]))
		strcat(Buffer, "\\");
	    strcat(Buffer, FileName);
	} else
	    strcpy(Buffer, FileName);

	startEdit(LineNo, Buffer);
    } else {
	int Res = (int) ShellExecute(hThisWindow, NULL, FileName, NULL, NULL, SW_SHOWNORMAL);
	if (Res <= 32) {
	    char Buffer[MAX_PATH*2];
	    strcpy(Buffer, "Failed to launch file:\n");
	    strcat(Buffer, FileName);
	    MessageBox(hThisWindow, Buffer, "Hugs98", MB_ICONWARNING);
	}
    }
}
Пример #14
0
void
RecurringMaster::slotPost()
{
    if (!saveItem(true)) return;

    Gltx gltx;
    if (!_quasar->db()->lookup(_curr.gltxId(), gltx)) {
	QMessageBox::critical(this, tr("Error"), tr("Can't read transaction"));
	return;
    }

    QDate nextDue = _curr.nextDue();
    if (nextDue > QDate::currentDate()) {
	QString message = tr("The next due date is in the future\n"
			     "so this will post a future transaction.\n"
			     "Are you sure you want to do this?");
	int choice = QMessageBox::warning(this, tr("Warning"), message,
					  tr("Yes"), tr("No"));
	if (choice != 0) return;
    }

    if (_curr.cardGroup() != INVALID_ID) {
        CardSelect conditions;
	conditions.group_id = _curr.cardGroup();
	vector<Card> cards;
	_quasar->db()->select(cards, conditions);
	for (unsigned int i = 0; i < cards.size(); ++i)
	    if (!postOne(gltx, cards[i].id()))
	        return;
    } else {
        if (!postOne(gltx, gltx.cardId()))
	    return;
    }

    int postingCnt = _curr.postingCount();
    int maxPostings = _curr.maxPostings();

    Recurring old = _curr;
    _curr.setLastPosted(nextDue);
    _curr.setPostingCount(++postingCnt);
    if (maxPostings > 0 && postingCnt >= maxPostings)
	_quasar->db()->setActive(_curr, false);
    _quasar->db()->update(old, _curr);

    _id = _curr.id();
    startEdit();
}
Пример #15
0
void ScoreView::lyricsReturn()
      {
      Lyrics* lyrics   = (Lyrics*)editObject;
      Segment* segment = lyrics->segment();

      endEdit();

      _score->startCmd();

      Lyrics* oldLyrics = lyrics;

      int newVerse;
      if (lyrics->placeAbove()) {
            newVerse = oldLyrics->no() - 1;
            if (newVerse == -1) {
                  // raise all lyrics above
                  newVerse = 0;
                  for (Segment* s = _score->firstSegment(Segment::Type::ChordRest); s; s = s->next1(Segment::Type::ChordRest)) {
                        ChordRest* cr = s->cr(lyrics->track());
                        if (cr) {
                              for (Lyrics* l : cr->lyrics()) {
                                    if (l->placement() == oldLyrics->placement())
                                          l->undoChangeProperty(P_ID::VERSE, l->no() + 1);
                                    }
                              }
                        }
                  }
            }
      else
            newVerse = oldLyrics->no() + 1;
      lyrics = static_cast<Lyrics*>(Element::create(lyrics->type(), _score));
      lyrics->setTrack(oldLyrics->track());
      lyrics->setParent(segment->element(oldLyrics->track()));
      lyrics->setPlacement(oldLyrics->placement());

      lyrics->setNo(newVerse);

      _score->undoAddElement(lyrics);
      _score->select(lyrics, SelectType::SINGLE, 0);
      startEdit(lyrics, Grip::NO_GRIP);
      mscore->changeState(mscoreState());

      adjustCanvasPosition(lyrics, false);
      _score->setLayoutAll();
      _score->update();
      }
Пример #16
0
void ScoreView::lyricsUpDown(bool up, bool end)
      {
      Lyrics* lyrics   = static_cast<Lyrics*>(editObject);
      int track        = lyrics->track();
      ChordRest* cr    = lyrics->chordRest();
      int verse        = lyrics->no();
      const QList<Lyrics*>* ll = &lyrics->chordRest()->lyricsList();

      if (up) {
            if (verse == 0)
                  return;
            --verse;
            }
      else {
            ++verse;
            if (verse >= ll->size())
                  return;
            }
      endEdit();
      _score->startCmd();
      lyrics = ll->value(verse);
      if (!lyrics) {
            lyrics = new Lyrics(_score);
            lyrics->setTrack(track);
            lyrics->setParent(cr);
            lyrics->setNo(verse);
            _score->undoAddElement(lyrics);
            }

      _score->select(lyrics, SELECT_SINGLE, 0);
      startEdit(lyrics, -1);
      mscore->changeState(mscoreState());
      adjustCanvasPosition(lyrics, false);
      if (end)
            ((Lyrics*)editObject)->moveCursorToEnd();
      else
            ((Lyrics*)editObject)->moveCursorToStart();

      _score->setLayoutAll(true);
      _score->end2();
      _score->end1();
      }
Пример #17
0
void
TextBuffer::insertLine( TextLoc &loc ) { 

	TextLoc p = loc;
//	fprintf(stderr, "inserting line break\n");

	startEdit( loc,loc );

	addLine("", loc.line + 1);
    if ( loc.chr < _lines[loc.line].size() ) { 
        std::string l1 = _lines[loc.line].str();
        std::string l2 = _lines[loc.line+1].str();
        _lines[loc.line+1].str() = l1.substr( loc.chr, l1.size() - loc.chr );
        _lines[loc.line].str() = l1.substr( 0, loc.chr );
    }
    loc.chr = 0;
    loc.line++;

	endEdit(p, loc);
	//    _viewportDirty = true;
//    _canvasDirty = true;
}
Пример #18
0
void
TextBuffer::removeSpan( TextSpan &span ) {
	checkSpan(span); //also checks
	
	//start new edit
	startEdit( span.begin, span.end );
	if ( span.begin.line == span.end.line ) { 
		std::string orig = _lines[span.begin.line].str();
		_lines[span.begin.line].str() = orig.substr(0, span.begin.chr) + orig.substr( span.end.chr, orig.size() );
	}
	else { 
		//concatenate first to last;
		_lines[span.begin.line].str() =   _lines[span.begin.line].substr(0, span.begin.chr) \
										+ _lines[span.end.line].substr( span.end.chr, _lines[span.end.line].size() );
		
		for ( int i = span.end.line; i > span.begin.line; i-- ) 
			//if pointers - delete _lines[i];
			_lines.erase(_lines.begin()+i);		
	}    
	span.end = span.begin;
	endEdit( span.begin, span.end );
}
Пример #19
0
void RendererWidget::enableTransformationMode(int mode)
{
    if(_editMode == SCENE_EDITOR && _stateReady == NO_INTERACTION)
    {
        switch(mode)
        {
        case 0:
            _stateReady = TRANSLATE_MODE;
            break;

        case 1:
            _stateReady = SCALE_MODE;
            break;

        case 2:
            _stateReady = ROTATE_MODE;
            break;
        }

        emit startEdit();
        emit stateChanged(_stateReady);
    }
}
Пример #20
0
LogViewer::LogViewer(QWidget *parent) :
    QWidget(parent),
    ui(new Ui::LogViewer),
    logModel(log::QsoLog::getModel())
{
    ui->setupUi(this);

    if(logModel == NULL) {
        qCritical() << "Log Viewer: don't have valid QSO log data model";
    } else {
        ui->qsoLogTable->setModel(logModel);
    }

    ui->qsoLogTable->verticalHeader()->setVisible(false);

    refreshLog();

    // set correct sizing
    setMinimumSize(minimumSizeHint());
    resize(minimumSizeHint());

    // setup the qso form
    ui->qsoForm->setTitle("Edit QSO Record");
    ui->qsoForm->hide();

    // init correct button states
    ui->cancelBtn->hide();
    ui->deleteBtn->hide();
    ui->saveBtn->hide();
    ui->editBtn->setEnabled(false);

    // TODO figure out how to show number of records

    // double-clicks start an edit
    connect(ui->qsoLogTable, SIGNAL(doubleClicked(QModelIndex)), this, SLOT(startEdit(QModelIndex)));
}
Пример #21
0
void ScoreView::elementPropertyAction(const QString& cmd, Element* e)
      {
      if (cmd == "a-props") {
            ArticulationProperties rp(static_cast<Articulation*>(e));
            rp.exec();
            }
      else if (cmd == "b-props") {
            Bend* bend = static_cast<Bend*>(e);
            BendProperties bp(bend, 0);
            if (bp.exec())
                  score()->undo(new ChangeBend(bend, bp.points()));
            }
      else if (cmd == "f-props") {
            BoxProperties vp(static_cast<Box*>(e), 0);
            vp.exec();
            }
      else if (cmd == "measure-props") {
            MeasureProperties vp(static_cast<Note*>(e)->chord()->segment()->measure());
            vp.exec();
            }
      else if (cmd == "frame-text") {
            Text* s = new Text(score());
//            s->setSubtype(TEXT_FRAME);
            s->setTextStyleType(TEXT_STYLE_FRAME);
            s->setParent(e);
            score()->undoAddElement(s);
            score()->select(s, SELECT_SINGLE, 0);
            startEdit(s);
            score()->setLayoutAll(true);
            }
      else if (cmd == "picture") {
            mscore->addImage(score(), static_cast<HBox*>(e));
            }
      else if (cmd == "frame-text") {
            Text* t = new Text(score());
            t->setTextStyleType(TEXT_STYLE_FRAME);
            t->setParent(e);
            score()->undoAddElement(t);
            score()->select(t, SELECT_SINGLE, 0);
            startEdit(t);
            }
      else if (cmd == "title-text") {
            Text* t = new Text(score());
            t->setTextStyleType(TEXT_STYLE_TITLE);
            t->setParent(e);
            score()->undoAddElement(t);
            score()->select(t, SELECT_SINGLE, 0);
            startEdit(t);
            }
      else if (cmd == "subtitle-text") {
            Text* t = new Text(score());
            t->setTextStyleType(TEXT_STYLE_SUBTITLE);
            t->setParent(e);
            score()->undoAddElement(t);
            score()->select(t, SELECT_SINGLE, 0);
            startEdit(t);
            }
      else if (cmd == "composer-text") {
            Text* t = new Text(score());
            t->setTextStyleType(TEXT_STYLE_COMPOSER);
            t->setParent(e);
            score()->undoAddElement(t);
            score()->select(t, SELECT_SINGLE, 0);
            startEdit(t);
            }
      else if (cmd == "poet-text") {
            Text* t = new Text(score());
            t->setTextStyleType(TEXT_STYLE_POET);
            t->setParent(e);
            score()->undoAddElement(t);
            score()->select(t, SELECT_SINGLE, 0);
            startEdit(t);
            }
      else if (cmd == "insert-hbox") {
            HBox* s = new HBox(score());
            double w = width() - s->leftMargin() * MScore::DPMM - s->rightMargin() * MScore::DPMM;
            s->setBoxWidth(Spatium(w / s->spatium()));
            s->setParent(e);
            score()->undoAddElement(s);
            score()->select(s, SELECT_SINGLE, 0);
            startEdit(s);
            }
      else if (cmd == "picture")
            mscore->addImage(score(), e);
      else if (cmd == "v-props") {
            VoltaSegment* vs = static_cast<VoltaSegment*>(e);
            VoltaProperties vp;
            vp.setText(vs->volta()->text());
            vp.setEndings(vs->volta()->endings());
            int rv = vp.exec();
            if (rv) {
                  QString txt  = vp.getText();
                  QList<int> l = vp.getEndings();
                  if (txt != vs->volta()->text())
                        score()->undoChangeVoltaText(vs->volta(), txt);
                  if (l != vs->volta()->endings())
                        score()->undoChangeVoltaEnding(vs->volta(), l);
                  }
            }
      else if (cmd == "l-props") {
            TextLineSegment* vs = static_cast<TextLineSegment*>(e);
            TextLine* nTl  = vs->textLine()->clone();
            LineProperties lp(nTl);
            if (lp.exec()) {
                  score()->undoChangeElement(vs->textLine(), nTl);
                  // force new text
                  foreach(SpannerSegment* l, nTl->spannerSegments())
                        static_cast<TextLineSegment*>(l)->clearText();
                  }
            else
                  delete nTl;
            }
      else if (cmd == "tr-props") {
            TremoloBar* tb = static_cast<TremoloBar*>(e);
            TremoloBarProperties bp(tb, 0);
            if (bp.exec())
                  score()->undo(new ChangeTremoloBar(tb, bp.points()));
            }
      if (cmd == "ts-courtesy") {
            TimeSig* ts = static_cast<TimeSig*>(e);
            score()->undo(new ChangeTimesig(static_cast<TimeSig*>(e), !ts->showCourtesySig(), ts->sig(),
                  ts->stretch(), ts->numeratorString(), ts->denominatorString(), ts->timeSigType()));
            }
      else if (cmd == "ts-props") {
            TimeSig* ts = static_cast<TimeSig*>(e);
            TimeSig r(*ts);
            TimeSigProperties vp(&r);
            int rv = vp.exec();
            if (rv) {
                  bool stretchChanged = r.stretch() != ts->stretch();
                  if (r.numeratorString() != ts->numeratorString()
                     || r.denominatorString() != ts->denominatorString()
                     || r.sig() != ts->sig()
                     || stretchChanged
                     || r.timeSigType() != ts->timeSigType()) {
                        score()->undo(new ChangeTimesig(ts, r.showCourtesySig(), r.sig(), r.stretch(),
                           r.numeratorString(), r.denominatorString(), r.timeSigType()));
                        if (stretchChanged)
                              score()->timesigStretchChanged(ts, ts->measure(), ts->staffIdx());
                        }
                  }
            }
      else if (cmd == "smallAcc")
            score()->undoChangeProperty(e, P_SMALL, !static_cast<Accidental*>(e)->small());
      else if (cmd == "smallNote")
            score()->undoChangeProperty(e, P_SMALL, !static_cast<Note*>(e)->small());
      else if (cmd == "clef-courtesy") {
            bool show = !static_cast<Clef*>(e)->showCourtesy();
            score()->undoChangeProperty(e, P_SHOW_COURTESY, show);
            }
      else if (cmd == "d-props") {
            Dynamic* dynamic = static_cast<Dynamic*>(e);
            Dynamic* nText = new Dynamic(*dynamic);
            TextProperties tp(nText, 0);
            int rv = tp.exec();
            if (rv)
                  score()->undoChangeElement(dynamic, nText);
            else
                  delete nText;
            }
      else if (cmd == "st-props") {
            StaffTextProperties rp(static_cast<StaffText*>(e));
            rp.exec();
            }
      else if (cmd == "d-dynamics") {
            Dynamic* dynamic = static_cast<Dynamic*>(e);
            int oldVelo    = dynamic->velocity();
            Element::DynamicRange ot = dynamic->dynRange();
            DynamicProperties dp(dynamic);
            int rv = dp.exec();
            if (rv) {
                  int newVelo    = dynamic->velocity();
                  Element::DynamicRange nt = dynamic->dynRange();
                  dynamic->setVelocity(oldVelo);
                  dynamic->setDynRange(ot);
                  if (newVelo != oldVelo)
                        score()->undoChangeProperty(dynamic, P_VELOCITY, newVelo);
                  if (nt != ot)
                        score()->undoChangeProperty(dynamic, P_DYNAMIC_RANGE, nt);
                  }
            }
      else if (cmd == "text-props") {
            Text* ot    = static_cast<Text*>(e);
            Text* nText = static_cast<Text*>(ot->clone());
            TextProperties tp(nText);
            int rv = tp.exec();
            if (rv) {
                  QList<Element*> sl = score()->selection().elements();
                  QList<Element*> selectedElements;
                  foreach(Element* e, sl) {
                        if (e->type() != ot->type())
                              continue;

                        Text* t  = static_cast<Text*>(e);
                        Text* tt = t->clone();

                        if (nText->styled() != ot->styled() || nText->styled()) {
                              if (nText->styled())
                                    tt->setTextStyleType(nText->textStyleType());
                              else
                                    tt->setUnstyled();
                              tt->setModified(true);
                              }

                        if (!nText->styled() && (nText->textStyle() != ot->textStyle())) {
                              tt->setTextStyle(nText->textStyle());
                              tt->styleChanged();
                              tt->setModified(true);
                              }

                        if (t->selected())
                              selectedElements.append(tt);
                        score()->undoChangeElement(t, tt);
                        }
                  score()->select(0, SELECT_SINGLE, 0);
                  foreach(Element* e, selectedElements)
                        score()->select(e, SELECT_ADD, 0);
                  }
            delete nText;
            }
MaterialGeneratorNode::MaterialGeneratorNode(MaterialGraph* const parent): 
    NodeGraphNode(parent),
    m_Evaluating(false), m_CompileState(true)
{
    startEdit();
}
Пример #23
0
void ScoreView::lyricsUnderscore()
      {
      Lyrics* lyrics   = toLyrics(editData.element);
      int track        = lyrics->track();
      Segment* segment = lyrics->segment();
      int verse        = lyrics->no();
      Placement placement = lyrics->placement();
      PropertyFlags pFlags = lyrics->propertyFlags(Pid::PLACEMENT);
      int endTick      = segment->tick(); // a previous melisma cannot extend beyond this point

      changeState(ViewState::NORMAL);

      // search next chord
      Segment* nextSegment = segment;
      while ((nextSegment = nextSegment->next1(SegmentType::ChordRest))) {
            Element* el = nextSegment->element(track);
            if (el &&  el->isChord())
                  break;
            }

      // look for the lyrics we are moving from; may be the current lyrics or a previous one
      // we are extending with several underscores
      Lyrics* fromLyrics = 0;
      while (segment) {
            ChordRest* cr = toChordRest(segment->element(track));
            if (cr) {
                  fromLyrics = cr->lyrics(verse, placement);
                  if (fromLyrics)
                        break;
                  }
            segment = segment->prev1(SegmentType::ChordRest);
            // if the segment has a rest in this track, stop going back
            Element* e = segment ? segment->element(track) : 0;
            if (e && !e->isChord())
                  break;
            }

      // one-chord melisma?
      // if still at melisma initial chord and there is a valid next chord (if not,
      // there will be no melisma anyway), set a temporary melisma duration
      if (fromLyrics == lyrics && nextSegment) {
            _score->startCmd();
            lyrics->undoChangeProperty(Pid::LYRIC_TICKS, Lyrics::TEMP_MELISMA_TICKS);
            _score->setLayoutAll();
            _score->endCmd();
            }

      if (nextSegment == 0) {
            _score->startCmd();
            if (fromLyrics) {
                  switch(fromLyrics->syllabic()) {
                        case Lyrics::Syllabic::SINGLE:
                        case Lyrics::Syllabic::END:
                              break;
                        default:
                              fromLyrics->undoChangeProperty(Pid::SYLLABIC, int(Lyrics::Syllabic::END));
                              break;
                        }
                  if (fromLyrics->segment()->tick() < endTick)
                        fromLyrics->undoChangeProperty(Pid::LYRIC_TICKS, endTick - fromLyrics->segment()->tick());
                  }
            // leave edit mode, select something (just for user feedback) and update to show extended melisam
            mscore->changeState(STATE_NORMAL);
            if (fromLyrics)
                  _score->select(fromLyrics, SelectType::SINGLE, 0);
            _score->setLayoutAll();
            _score->endCmd();
            return;
            }

      // if a place for a new lyrics has been found, create a lyrics there

      ChordRest* cr    = toChordRest(nextSegment->element(track));
      Lyrics* toLyrics = cr->lyrics(verse, placement);
      bool newLyrics   = (toLyrics == 0);
      if (!toLyrics) {
            toLyrics = new Lyrics(_score);
            toLyrics->setTrack(track);
            toLyrics->setParent(nextSegment->element(track));
            toLyrics->setNo(verse);
            toLyrics->setPlacement(placement);
            toLyrics->setPropertyFlags(Pid::PLACEMENT, pFlags);
            toLyrics->setSyllabic(Lyrics::Syllabic::SINGLE);
            }
      // as we arrived at toLyrics by an underscore, it cannot have syllabic dashes before
      else if (toLyrics->syllabic() == Lyrics::Syllabic::MIDDLE)
            toLyrics->undoChangeProperty(Pid::SYLLABIC, int(Lyrics::Syllabic::BEGIN));
      else if (toLyrics->syllabic() == Lyrics::Syllabic::END)
            toLyrics->undoChangeProperty(Pid::SYLLABIC, int(Lyrics::Syllabic::SINGLE));

      if (fromLyrics) {
            // as we moved away from fromLyrics by an underscore,
            // it can be isolated or terminal but cannot have dashes after
            switch(fromLyrics->syllabic()) {
                  case Lyrics::Syllabic::SINGLE:
                  case Lyrics::Syllabic::END:
                        break;
                  default:
                        fromLyrics->undoChangeProperty(Pid::SYLLABIC, int(Lyrics::Syllabic::END));
                        break;
                  }
            // for the same reason, if it has a melisma, this cannot extend beyond toLyrics
            if (fromLyrics->segment()->tick() < endTick)
                  fromLyrics->undoChangeProperty(Pid::LYRIC_TICKS, endTick - fromLyrics->segment()->tick());
            }
      if (newLyrics)
            _score->undoAddElement(toLyrics);
      _score->endCmd();

      _score->select(toLyrics, SelectType::SINGLE, 0);
      startEdit(toLyrics, Grip::NO_GRIP);

      adjustCanvasPosition(toLyrics, false);
      TextCursor* cursor = Ms::toLyrics(editData.element)->cursor(editData);
      Ms::toLyrics(editData.element)->selectAll(cursor);
      }
Пример #24
0
void ScoreView::lyricsMinus()
      {
      Lyrics* lyrics   = toLyrics(editData.element);
      int track        = lyrics->track();
      Segment* segment = lyrics->segment();
      int verse        = lyrics->no();
      Placement placement = lyrics->placement();
      PropertyFlags pFlags = lyrics->propertyFlags(Pid::PLACEMENT);

      changeState(ViewState::NORMAL);

      // search next chord
      Segment* nextSegment = segment;
      while ((nextSegment = nextSegment->next1(SegmentType::ChordRest))) {
            Element* el = nextSegment->element(track);
            if (el &&  el->isChord())
                  break;
            }
      if (nextSegment == 0)
            return;

      // look for the lyrics we are moving from; may be the current lyrics or a previous one
      // we are extending with several dashes
      Lyrics* fromLyrics = 0;
      while (segment) {
            ChordRest* cr = toChordRest(segment->element(track));
            if (!cr) {
                  segment = segment->prev1(SegmentType::ChordRest);
                  continue;
                  }
            fromLyrics = cr->lyrics(verse, placement);
            if (fromLyrics)
                  break;
            segment = segment->prev1(SegmentType::ChordRest);
            }

      _score->startCmd();
      ChordRest* cr = toChordRest(nextSegment->element(track));
      Lyrics* toLyrics           = cr->lyrics(verse, placement);
      bool newLyrics = (toLyrics == 0);
      if (!toLyrics) {
            toLyrics = new Lyrics(_score);
            toLyrics->setTrack(track);
            toLyrics->setParent(nextSegment->element(track));
            toLyrics->setNo(verse);
            toLyrics->setPlacement(placement);
            toLyrics->setPropertyFlags(Pid::PLACEMENT, pFlags);
            toLyrics->setSyllabic(Lyrics::Syllabic::END);
            }
      else {
            // as we arrived at toLyrics by a dash, it cannot be initial or isolated
            if (toLyrics->syllabic() == Lyrics::Syllabic::BEGIN)
                  toLyrics->undoChangeProperty(Pid::SYLLABIC, int(Lyrics::Syllabic::MIDDLE));
            else if (toLyrics->syllabic() == Lyrics::Syllabic::SINGLE)
                  toLyrics->undoChangeProperty(Pid::SYLLABIC, int(Lyrics::Syllabic::END));
            }

      if (fromLyrics) {
            // as we moved away from fromLyrics by a dash,
            // it can have syll. dashes before and after but cannot be isolated or terminal
            switch(fromLyrics->syllabic()) {
                  case Lyrics::Syllabic::BEGIN:
                  case Lyrics::Syllabic::MIDDLE:
                        break;
                  case Lyrics::Syllabic::SINGLE:
                        fromLyrics->undoChangeProperty(Pid::SYLLABIC, int(Lyrics::Syllabic::BEGIN));
                        break;
                  case Lyrics::Syllabic::END:
                        fromLyrics->undoChangeProperty(Pid::SYLLABIC, int(Lyrics::Syllabic::MIDDLE));
                        break;
                  }
            // for the same reason, it cannot have a melisma
            fromLyrics->undoChangeProperty(Pid::LYRIC_TICKS, 0);
            }

      if (newLyrics)
            _score->undoAddElement(toLyrics);
      _score->endCmd();

      _score->select(toLyrics, SelectType::SINGLE, 0);
      startEdit(toLyrics, Grip::NO_GRIP);

      adjustCanvasPosition(toLyrics, false);
      TextCursor* cursor = Ms::toLyrics(editData.element)->cursor(editData);
      Ms::toLyrics(editData.element)->selectAll(cursor);
      _score->setLayoutAll();
      }
Пример #25
0
void ScoreView::lyricsTab(bool back, bool end, bool moveOnly)
      {
      Lyrics* lyrics   = toLyrics(editData.element);
      int track        = lyrics->track();
      Segment* segment = lyrics->segment();
      int verse        = lyrics->no();
      Placement placement = lyrics->placement();
      PropertyFlags pFlags = lyrics->propertyFlags(Pid::PLACEMENT);

      Segment* nextSegment = segment;
      if (back) {
            // search prev chord
            while ((nextSegment = nextSegment->prev1(SegmentType::ChordRest))) {
                  Element* el = nextSegment->element(track);
                  if (el &&  el->isChord())
                        break;
                  }
            }
      else {
            // search next chord
            while ((nextSegment = nextSegment->next1(SegmentType::ChordRest))) {
                  Element* el = nextSegment->element(track);
                  if (el &&  el->isChord())
                        break;
                  }
            }
      if (nextSegment == 0)
            return;

      changeState(ViewState::NORMAL);

      // look for the lyrics we are moving from; may be the current lyrics or a previous one
      // if we are skipping several chords with spaces
      Lyrics* fromLyrics = 0;
      if (!back) {
            while (segment) {
                  ChordRest* cr = toChordRest(segment->element(track));
                  if (cr) {
                        fromLyrics = cr->lyrics(verse, placement);
                        if (fromLyrics)
                              break;
                        }
                  segment = segment->prev1(SegmentType::ChordRest);
                  }
            }

      ChordRest* cr = toChordRest(nextSegment->element(track));
      if (!cr) {
            qDebug("no next lyrics list: %s", nextSegment->element(track)->name());
            return;
            }
      Lyrics* _toLyrics = cr->lyrics(verse, placement);

      bool newLyrics = false;
      if (!_toLyrics) {
            _toLyrics = new Lyrics(_score);
            _toLyrics->setTrack(track);
            ChordRest* cr = toChordRest(nextSegment->element(track));
            _toLyrics->setParent(cr);
            _toLyrics->setNo(verse);
            _toLyrics->setPlacement(placement);
            _toLyrics->setPropertyFlags(Pid::PLACEMENT, pFlags);
            _toLyrics->setSyllabic(Lyrics::Syllabic::SINGLE);
            newLyrics = true;
            }

      _score->startCmd();
      if (fromLyrics && !moveOnly) {
            switch (_toLyrics->syllabic()) {
                  // as we arrived at toLyrics by a [Space], it can be the beginning
                  // of a multi-syllable, but cannot have syllabic dashes before
                  case Lyrics::Syllabic::SINGLE:
                  case Lyrics::Syllabic::BEGIN:
                        break;
                  case Lyrics::Syllabic::END:
                        _toLyrics->undoChangeProperty(Pid::SYLLABIC, int(Lyrics::Syllabic::SINGLE));
                        break;
                  case Lyrics::Syllabic::MIDDLE:
                        _toLyrics->undoChangeProperty(Pid::SYLLABIC, int(Lyrics::Syllabic::BEGIN));
                        break;
                  }
            // as we moved away from fromLyrics by a [Space], it can be
            // the end of a multi-syllable, but cannot have syllabic dashes after
            switch (fromLyrics->syllabic()) {
                  case Lyrics::Syllabic::SINGLE:
                  case Lyrics::Syllabic::END:
                        break;
                  case Lyrics::Syllabic::BEGIN:
                        fromLyrics->undoChangeProperty(Pid::SYLLABIC, int(Lyrics::Syllabic::SINGLE));
                        break;
                  case Lyrics::Syllabic::MIDDLE:
                        fromLyrics->undoChangeProperty(Pid::SYLLABIC, int(Lyrics::Syllabic::END));
                        break;
                  }
            // for the same reason, it cannot have a melisma
            fromLyrics->undoChangeProperty(Pid::LYRIC_TICKS, 0);
            }

      if (newLyrics)
            _score->undoAddElement(_toLyrics);
      _score->endCmd();

      _score->select(_toLyrics, SelectType::SINGLE, 0);
      startEdit(_toLyrics, Grip::NO_GRIP);

      adjustCanvasPosition(_toLyrics, false);

      TextCursor* cursor = toLyrics(editData.element)->cursor(editData);
      if (end) {
            cursor->movePosition(QTextCursor::Start, QTextCursor::MoveAnchor);
            cursor->movePosition(QTextCursor::End, QTextCursor::KeepAnchor);
            }
      else {
            cursor->movePosition(QTextCursor::End, QTextCursor::MoveAnchor);
            cursor->movePosition(QTextCursor::Start, QTextCursor::KeepAnchor);
            }
      _score->setLayoutAll();
      }
Пример #26
0
void RendererWidget::keyPressEvent(QKeyEvent* event)
{
    if(event->key() == Qt::Key_F11)
        emit F11_pressed();

    if(event->key() == Qt::Key_Shift)
        _shiftPressed=true;

    if(_editMode == SCENE_EDITOR && _rightMouse && _stateReady == NO_INTERACTION)
    {
        if(event->key() == Qt::Key_W) _renderer->setMoveDirection(0, true);
        else if(event->key() == Qt::Key_A) _renderer->setMoveDirection(1, true);
        else if(event->key() == Qt::Key_S) _renderer->setMoveDirection(2, true);
        else if(event->key() == Qt::Key_D) _renderer->setMoveDirection(3, true);
        else if(event->key() == Qt::Key_Shift) _renderer->setSpeedBoost(true);

//        else if(event->key() == Qt::Key_G)
//        {
//            _stateReady = TRANSLATE_MODE;
//            emit startEdit();
//            emit stateChanged(_stateReady);
//        }
//        else if(event->key() == Qt::Key_F)
//        {
//            _stateReady = SCALE_MODE;
//            emit startEdit();
//            emit stateChanged(_stateReady);
//        }
//        else if(event->key() == Qt::Key_R)
//        {
//            _stateReady = ROTATE_MODE;
//            emit startEdit();
//            emit stateChanged(_stateReady);
//        }

        event->accept();
    }
    else if(_editMode == SCENE_EDITOR && _stateReady == NO_INTERACTION)
    {
        if(event->key() == Qt::Key_G && _stateReady != TRANSLATE_MODE)
        {
            _stateReady = TRANSLATE_MODE;
            emit startEdit();
            emit stateChanged(_stateReady);
        }
        else if(event->key() == Qt::Key_F && _stateReady != SCALE_MODE)
        {
            _stateReady = SCALE_MODE;
            emit startEdit();
            emit stateChanged(_stateReady);
        }
        else if(event->key() == Qt::Key_R && _stateReady != ROTATE_MODE)
        {
            _stateReady = ROTATE_MODE;
            emit startEdit();
            emit stateChanged(_stateReady);
        }
        else if(event->key() == Qt::Key_Shift) _renderer->setSpeedBoost(true);
        else if(event->key() == Qt::Key_Escape) emit escapePressed();
        else if(event->key() == Qt::Key_Delete) emit deleteCurrent();

        event->accept();
    }
    else if(_editMode == SCENE_EDITOR && _stateReady >= TRANSLATE_MODE && _stateReady <= TRANSLATE_Z_MODE)
    {
        int newState = _stateReady;
        if(event->key() == Qt::Key_X)
            newState = TRANSLATE_X_MODE;
        else if(event->key() == Qt::Key_Y)
            newState = TRANSLATE_Y_MODE;
        else if(event->key() == Qt::Key_Z)
            newState = TRANSLATE_Z_MODE;

        if(newState != _stateReady)
        {
            _stateReady = newState;
            emit stateChanged(_stateReady);
        }

        event->accept();
    }
    else if(_editMode == SCENE_EDITOR && _stateReady >= SCALE_MODE && _stateReady <= SCALE_Z_MODE)
    {
        int newState = _stateReady;
        if(event->key() == Qt::Key_X)
            newState = SCALE_X_MODE;
        else if(event->key() == Qt::Key_Y)
            newState = SCALE_Y_MODE;
        else if(event->key() == Qt::Key_Z)
            newState = SCALE_Z_MODE;

        if(newState != _stateReady)
        {
            _stateReady = newState;
            emit stateChanged(_stateReady);
        }

        event->accept();
    }
    else if(_editMode == SCENE_EDITOR && _stateReady >= ROTATE_MODE && _stateReady <= ROTATE_Z_MODE)
    {
        int newState = _stateReady;
        if(event->key() == Qt::Key_X)
            newState = ROTATE_X_MODE;
        else if(event->key() == Qt::Key_Y)
            newState = ROTATE_Y_MODE;
        else if(event->key() == Qt::Key_Z)
            newState = ROTATE_Z_MODE;

        if(newState != _stateReady)
        {
            _stateReady = newState;
            emit stateChanged(_stateReady);
        }

        event->accept();
    }
}
Пример #27
0
void LogViewer::on_editBtn_clicked()
{
    QModelIndex i = ui->qsoLogTable->currentIndex();
    startEdit(i);
}
Пример #28
0
void InlinePalette::handleDoubleClick(QListWidgetItem *item)
{
	if (item)
		emit startEdit(item->data(Qt::UserRole).toInt());
}
Пример #29
0
void InlinePalette::handleEditItem()
{
	emit startEdit(actItem);
}
Пример #30
0
 void MainWindowTask::setup()
 {
     ui->setupUi(this);
     ui->treeView->setContextMenuPolicy(Qt::CustomContextMenu);
     settings = new QSettings("NIISI RAS","Kumir 1.9");
     setWindowIcon(QIcon(":/taskEdit.ico"));
     settings->setIniCodec("UTF-8");
     lastFiles=settings->value("RescentFiles").toStringList();
     customMenu.hide();
     connect(ui->loadCurs,SIGNAL(activated()),this,SLOT(loadCourse()));
     connect(ui->actionSave,SIGNAL(activated()),this,SLOT(saveCourse()));
     connect(ui->treeView,SIGNAL(clicked(QModelIndex)),this,SLOT(showText(QModelIndex)));
     connect(ui->treeView,SIGNAL(doubleClicked(QModelIndex)),this,SLOT(startEdit(QModelIndex)));
    //   connect(ui->do_task,SIGNAL(triggered()),this,SLOT(startTask()));
       qDebug()<<"Check Connect tttttttttttttttttt";
       //connect(ui->checkTask,SIGNAL(triggered()),this,SLOT(checkTask()));
      //connect(ui->actionReset,SIGNAL(triggered()),this,SLOT(resetTask()));
        connect(ui->actionClose,SIGNAL(triggered()),this,SLOT(Close()));
        //   connect(ui->actionTested,SIGNAL(triggered()),this,SLOT(returnTested()));
           connect(ui->treeView,SIGNAL(customContextMenuRequested(QPoint)),this,SLOT(customContextMenuRequested(QPoint)));

           customMenu.addAction(ui->actionAdd);
           customMenu.addAction(ui->actionRemove);
           customMenu.addAction(ui->actionEdit);
           customMenu.addAction(ui->addDeep);
       customMenu.addSeparator();
       customMenu.addAction(ui->actionup);
       customMenu.addAction(ui->actionDown);
       customMenu.addAction(ui->actionMakeSection);
       customMenu.addMenu(ui->menuMove);
        connect(ui->zadRb,SIGNAL(clicked(bool)),this,SLOT(setType()));
        connect(ui->nodeRb,SIGNAL(clicked(bool)),this,SLOT(setType()));




       connect(ui->actionup,SIGNAL(triggered()),this,SLOT(moveUp()));
       connect(ui->actionDown,SIGNAL(triggered()),this,SLOT(moveDown()));
           connect(ui->actionAdd,SIGNAL(triggered()),this,SLOT(addTask()));
            connect(ui->addDeep,SIGNAL(triggered()),this,SLOT(addDeepTask()));
           connect(ui->actionSaveK,SIGNAL(triggered()),this,SLOT(saveKurs()));
            connect(ui->actionSave,SIGNAL(triggered()),this,SLOT(saveKursAs()));
           connect(ui->actionRemove,SIGNAL(triggered()),this,SLOT(deleteTask()));
           connect(ui->actionMakeSection,SIGNAL(triggered()),this,SLOT(makeSection()));
           newDialog=new newKursDialog();
           connect(ui->actionNewK,SIGNAL(triggered()),this,SLOT(newKurs()));
           editDialog = new EditDialog(this);
           connect(ui->actionEdit,SIGNAL(triggered()),this,SLOT(editTask()));
           //ui->menuKurs->menuAction()->setVisible(false);
          // ui->menuKurs->menuAction()->setEnabled(false);
           setEditTaskEnabled(false);
           ui->treeView->setSelectionMode(QAbstractItemView::SingleSelection);
           editRoot=new QLineEdit(ui->treeView);
           editRoot->hide();
           connect(editRoot,SIGNAL(editingFinished ()),this,SLOT(endRootEdit()));
           connect(ui->remIspButt,SIGNAL(pressed()),this,SLOT(remSelIsp()));
           connect(ui->addIspButt,SIGNAL(pressed()),this,SLOT(addIsp()));
           connect(ui->ispList,SIGNAL(clicked(QModelIndex)),this,SLOT(showFields()));
           connect(ui->fieldsList,SIGNAL(clicked(QModelIndex)),this,SLOT(fieldClick()));
           connect(ui->remFieldButt,SIGNAL(pressed()),this,SLOT(remField()));
           connect(ui->addFieldButt,SIGNAL(pressed()),this,SLOT(addField()));
           connect(ui->actionS,SIGNAL(triggered()),this,SLOT(saveBaseKurs()));
           connect(ui->selFileButt,SIGNAL(pressed()),this,SLOT(setPrg()));
           connect(ui->prgEdit,SIGNAL(textChanged(QString)),this,SLOT(prgLineChange()));
           connect(ui->editFButt,SIGNAL(pressed()),this,SLOT(editFile()));
           connect(ui->menuMove,SIGNAL(aboutToShow()),this,SLOT(createMoveMenu()));

         //  QMessageBox::information( 0, "", trUtf8("Setup add "), 0,0,0);
           ui->ispSel->addItem("Robot");
           ui->ispSel->addItem(trUtf8("Водолей"));
           ui->actionup->setIcon(QIcon(":/arrow_up.png"));
           ui->actionDown->setIcon(QIcon(":/arrow_down.png"));
           changed=false;
isTeacher=true;
       onTask=false;
       cursFile="";
createRescentMenu();
       //ui->textBrowser->setVisible(false);
 };