TTKMusicPlayer  3.7.0.0
TTKMusicPlayer imitates Kugou UI, the music player uses of qmmp core library based on Qt for windows and linux
musiclrcmakerwidget.cpp
Go to the documentation of this file.
1 #include "musiclrcmakerwidget.h"
2 #include "ui_musiclrcmakerwidget.h"
4 #include "musicmessagebox.h"
5 #include "musictoastlabel.h"
6 #include "musicconnectionpool.h"
7 #include "musicplayer.h"
8 #include "musicapplication.h"
9 #include "musiclrcanalysis.h"
11 #include "musicsettingmanager.h"
12 #include "musicsong.h"
13 
14 #include <QTextBlock>
15 #include <QPropertyAnimation>
16 #include <QSequentialAnimationGroup>
17 
19  : QLabel(ui),
20  m_parent(parent)
21 {
23  setFixedSize(650, TTK_ITEM_SIZE_L);
24 
25  reset();
26 
27  QFont font = this->font();
28  font.setPointSize(18);
29  setFont(font);
30 }
31 
33 {
34  return m_currentIndex > value;
35 }
36 
38 {
39  return m_painetLineDone;
40 }
41 
43 {
44  m_leftDirection = false;
45  m_painetLineDone = false;
46  m_intervalCount = 5;
47  m_currentIndex = 0;
48  m_paintIndex = 0;
49  m_itemDelta = 0;
50 
51  move(0, 0);
52 }
53 
55 {
56  if(--m_currentIndex < 0)
57  {
58  m_currentIndex = 0;
59  return;
60  }
61 
62  m_paintIndex = 0;
63  m_intervalCount = 5;
64  m_painetLineDone = false;
65 
67 }
68 
70 {
71  if(++m_currentIndex >= 6)
72  {
73  m_currentIndex = 6;
74  }
75  m_paintIndex = 0;
76  m_intervalCount = 5;
77  m_painetLineDone = false;
78 
80 }
81 
83 {
84  m_leftDirection = true;
85  m_painetLineDone = false;
87 
88  if(m_paintIndex <= 0)
89  {
90  m_paintIndex = 0;
91  }
92  update();
93 }
94 
96 {
97  m_leftDirection = false;
98  const int w = TTK::Widget::fontTextWidth(font(), text());
100 
101  if(m_paintIndex >= w)
102  {
103  m_painetLineDone = true;
104  m_paintIndex = w;
105  TTK_SIGNLE_SHOT(m_parent, currentLineFinished, TTK_SLOT);
106  }
107  update();
108 }
109 
110 void MusicLrcMakerWidgetItem::setText(const QString &string)
111 {
112  QLabel::setText(string);
113  const int len = string.isEmpty() ? 1 : string.length();
114  m_itemDelta = TTK::Widget::fontTextWidth(font(), string) / len;
115 }
116 
117 void MusicLrcMakerWidgetItem::paintEvent(QPaintEvent *event)
118 {
119  Q_UNUSED(event);
120 
121  const int w = TTK::Widget::fontTextWidth(font(), text());
122  if(!m_leftDirection && m_intervalCount + w >= width() && m_paintIndex >= width() / 2)
123  {
125  }
127  {
129  }
130 
131  QPainter painter(this);
132  painter.setPen(QColor(0, 0, 0));
133  painter.drawText(m_intervalCount, -10, w, 60, Qt::AlignLeft | Qt::AlignVCenter, text());
134 
135  painter.setPen(QColor(144, 184, 214));
136  painter.drawText(m_intervalCount, -10, m_paintIndex, 60, Qt::AlignLeft | Qt::AlignVCenter, text());
137 }
138 
139 
140 
142  : MusicAbstractMoveWidget(parent),
143  m_ui(new Ui::MusicLrcMakerWidget),
144  m_currentLine(0),
145  m_intervalTime(0)
146 {
147  m_ui->setupUi(this);
148  setFixedSize(size());
149  setAttribute(Qt::WA_DeleteOnClose);
150  setBackgroundLabel(m_ui->background);
151 
152  m_ui->stackedWidget->setFocusPolicy(Qt::StrongFocus);
153  m_ui->topTitleCloseButton->setIcon(QIcon(":/functions/btn_close_hover"));
154  m_ui->topTitleCloseButton->setStyleSheet(TTK::UI::ToolButtonStyle04);
155  m_ui->topTitleCloseButton->setCursor(QCursor(Qt::PointingHandCursor));
156  m_ui->topTitleCloseButton->setToolTip(tr("Close"));
157  connect(m_ui->topTitleCloseButton, SIGNAL(clicked()), SLOT(close()));
158 
159  m_ui->stackedWidget->setStyleSheet(QString("#stackedWidget{%1}").arg(TTK::UI::BackgroundStyle10));
160 
165 
168 
169  G_CONNECTION_PTR->setValue(className(), this);
170  G_CONNECTION_PTR->connect(MusicPlayer::className(), className());
171 }
172 
174 {
176  G_CONNECTION_PTR->removeValue(this);
177  TTKRemoveSingleWidget(className());
178  qDeleteAll(m_lrcContainer);
179  delete m_lineItem;
180  delete m_analysis;
181  delete m_ui;
182 }
183 
185 {
186  m_plainText.clear();
187  m_analysis->setCurrentFilePath(QString("%1%2%3").arg(TTK::String::lrcDirPrefix(), name, LRC_FILE));
188  m_ui->songNameEdit->setText(TTK::generateSongTitle(name));
189  m_ui->artNameEdit->setText(TTK::generateSongArtist(name));
190 }
191 
193 {
194  m_ui->timeSlider_F->blockSignals(true);
195  m_ui->timeSlider_S->blockSignals(true);
196  m_ui->timeSlider_T->blockSignals(true);
197 
198  m_ui->timeSlider_F->setValue(position);
199  m_ui->timeSlider_S->setValue(position);
200  m_ui->timeSlider_T->setValue(position);
201 
202  m_ui->timeSlider_F->blockSignals(false);
203  m_ui->timeSlider_S->blockSignals(false);
204  m_ui->timeSlider_T->blockSignals(false);
205 
206  const QString &t = QString("%1/%2").arg(TTKTime::formatDuration(position),
207  TTKTime::formatDuration(m_ui->timeSlider_F->maximum()));
208  m_ui->labelTime_F->setText(t);
209  m_ui->labelTime_S->setText(t);
210  m_ui->labelTime_T->setText(t);
211 
212  if(m_ui->stackedWidget->currentIndex() == 3)
213  {
214  if(m_analysis->isEmpty())
215  {
216  return;
217  }
218 
219  QString currentLrc, laterLrc;
220  if(m_analysis->findText(position, m_ui->timeSlider_F->maximum(), currentLrc, laterLrc, m_intervalTime))
221  {
222  if(currentLrc != m_lrcContainer[m_analysis->lineMiddle()]->text())
223  {
225  }
226  }
227  }
228 }
229 
231 {
232  m_ui->timeSlider_F->setRange(0, position);
233  m_ui->timeSlider_S->setRange(0, position);
234  m_ui->timeSlider_T->setRange(0, position);
235 }
236 
238 {
239  createCurrentLine(Qt::Key_Down);
240 }
241 
243 {
246 }
247 
249 {
250  if(m_times.count() != m_plainText.count())
251  {
252  return;
253  }
254  m_analysis->saveData();
255 
256  MusicToastLabel::popup(tr("Save file finished"));
257 }
258 
260 {
261  MusicMessageBox message;
262  message.setText(tr("Are you sure that you want to remake lyrics?"));
263  if(message.exec())
264  {
267  }
268 }
269 
271 {
272  MusicMessageBox message;
273  message.setText(tr("Go back and lyrics will be lost"));
274  if(message.exec())
275  {
278  }
279 }
280 
282 {
283  const QString &text = (m_ui->stateButton_F->text() == tr("Play")) ? tr("Pause") : tr("Play");
284  m_ui->stateButton_F->setText(text);
285  m_ui->stateButton_T->setText(text);
286 
288 }
289 
291 {
292  const bool state = m_ui->stateButton_T->text() == tr("Play");
293  const QString &text = state ? tr("Pause") : tr("Play");
294  m_ui->stateButton_F->setText(text);
295  m_ui->stateButton_T->setText(text);
296 
298  if(state)
299  {
300  m_lrcContainer[m_analysis->lineMiddle()]->startDrawLrcMask(m_intervalTime);
301  }
302  else
303  {
304  m_lrcContainer[m_analysis->lineMiddle()]->stopDrawLrc();
305  m_ui->lrcViewer->stop();
306  }
307 }
308 
310 {
311  m_ui->stackedWidget->setCurrentIndex(0);
312 }
313 
315 {
316  m_ui->stackedWidget->setCurrentIndex(1);
317 }
318 
320 {
321  if(m_ui->stackedWidget->currentIndex() == 1 && !checkInputValid())
322  {
323  return;
324  }
325 
327  {
329  }
330  else
331  {
333  }
334 
335  m_plainText = m_ui->lrcTextEdit->toPlainText().trimmed().split("\n");
336  m_times.clear();
337  m_currentLine = 0;
338  m_lineItem->reset();
339  m_times[m_currentLine] = 0;
340 
341  m_ui->makeTextEdit->setText(m_ui->lrcTextEdit->toPlainText().trimmed() + "\n");
342  QTextCursor cursor = m_ui->makeTextEdit->textCursor();
343  for(int i = 0; i < m_plainText.count(); ++i)
344  {
345  QTextBlockFormat textBlockFormat = cursor.blockFormat();
346  textBlockFormat.setBottomMargin(18);
347  cursor.setBlockFormat(textBlockFormat);
348  cursor.movePosition(QTextCursor::NextBlock);
349  }
350  cursor.movePosition(QTextCursor::Start);
351  m_ui->makeTextEdit->setTextCursor(cursor);
352  m_ui->makeTextEdit->setCurrentCharFormat(QTextCharFormat());
353  m_lineItem->setText(cursor.block().text());
354 
355  m_ui->stackedWidget->setCurrentIndex(2);
356 }
357 
359 {
360  if(m_ui->stackedWidget->currentIndex() == 2 && m_plainText.count() > m_ui->makeTextEdit->textCursor().blockNumber())
361  {
362  MusicToastLabel::popup(tr("Lyrics make has not been completed"));
363  return;
364  }
365 
367  m_ui->stackedWidget->setCurrentIndex(3);
368 
369  if(m_times.count() == m_plainText.count())
370  {
371  TTKIntStringMap data;
372  for(int i = 0; i < m_times.count(); ++i)
373  {
374  data.insert(m_times.value(i), m_plainText[i]);
375  }
376  m_analysis->setData(data);
377 
378  for(int i = 0; i < m_analysis->lineMax(); ++i)
379  {
380  m_lrcContainer[i]->setText({});
381  }
382  setItemStyleSheet(0, -3, 90);
383  setItemStyleSheet(1, -6, 35);
384  setItemStyleSheet(2, -10, 0);
385  setItemStyleSheet(3, -6, 35);
386  setItemStyleSheet(4, -3, 90);
387  }
388 }
389 
391 {
392  for(int i = 0; i < m_analysis->lineMax(); ++i)
393  {
394  m_lrcContainer[i]->setText(m_analysis->text(i));
395  }
396 
398  m_lrcContainer[m_analysis->lineMiddle()]->startDrawLrcMask(m_intervalTime);
399 }
400 
402 {
404  updateCurrentLrc(m_analysis->setSongTimeSpeed(m_ui->timeSlider_T->value()));
405 }
406 
408 {
410  updateCurrentLrc(m_analysis->setSongTimeSpeed(m_ui->timeSlider_T->value()));
411 }
412 
414 {
415  MusicAbstractMoveWidget::keyPressEvent(event);
416 }
417 
419 {
420  MusicAbstractMoveWidget::keyReleaseEvent(event);
421 
422  createCurrentLine(event->key());
423  if(event->key() == Qt::Key_Space)
424  {
426  }
427 }
428 
430 {
431  QTextCursor cursor = m_ui->makeTextEdit->textCursor();
432  if(m_ui->stackedWidget->currentIndex() == 2 && m_plainText.count() > m_currentLine)
433  {
434  switch(key)
435  {
436  case Qt::Key_Left:
437  {
438  MusicApplication::instance()->playAnyTimeAt(m_ui->timeSlider_F->value() - 2222);
439  m_lineItem->moveLeft();
440  break;
441  }
442  case Qt::Key_Up:
443  {
444  cursor.movePosition(QTextCursor::PreviousBlock, QTextCursor::KeepAnchor);
445  m_lineItem->setText(cursor.block().text());
446 
447  if(--m_currentLine < 0)
448  {
449  m_currentLine = 0;
450  }
451 
452  m_lineItem->moveUp();
453  m_times[m_currentLine] = m_ui->timeSlider_S->value();
454  break;
455  }
456  case Qt::Key_Right:
457  {
459  break;
460  }
461  case Qt::Key_Down:
462  {
463  if(!m_lineItem->done())
464  {
465  return;
466  }
467 
468  cursor.movePosition(QTextCursor::NextBlock, QTextCursor::KeepAnchor);
469  m_lineItem->setText(cursor.block().text());
470 
471  if(++m_currentLine >= m_plainText.count())
472  {
475  {
476  m_lineItem->moveDown();
477  }
478  }
479  else
480  {
481  m_lineItem->moveDown();
482  m_times[m_currentLine] = m_ui->timeSlider_S->value();
483  }
484  break;
485  }
486  default: break;
487  }
488  }
489  m_ui->makeTextEdit->setTextCursor(cursor);
490 }
491 
493 {
494  m_ui->nextButton_M->setStyleSheet(TTK::UI::PushButtonStyle04);
495  m_ui->cancelButton_M->setStyleSheet(TTK::UI::PushButtonStyle04);
496 #ifdef Q_OS_UNIX
497  m_ui->nextButton_M->setFocusPolicy(Qt::NoFocus);
498  m_ui->cancelButton_M->setFocusPolicy(Qt::NoFocus);
499 #endif
500  connect(m_ui->cancelButton_M, SIGNAL(clicked()), SLOT(close()));
501  connect(m_ui->nextButton_M, SIGNAL(clicked()), SLOT(setCurrentFirstWidget()));
502 
503  QPropertyAnimation *anim1 = new QPropertyAnimation(m_ui->label_M5, "geometry", this);
504  anim1->setDuration(1500);
505  anim1->setStartValue(QRect(630, 280, 0, 30));
506  anim1->setEndValue(QRect(400, 280, 230, 30));
507  anim1->setEasingCurve(QEasingCurve::Linear);
508 
509  QPropertyAnimation *anim2 = new QPropertyAnimation(m_ui->label_M6, "geometry", this);
510  anim2->setDuration(1500);
511  anim2->setStartValue(QRect(630, 315, 0, 30));
512  anim2->setEndValue(QRect(400, 315, 230, 30));
513  anim2->setEasingCurve(QEasingCurve::Linear);
514 
515  QPropertyAnimation *anim3 = new QPropertyAnimation(m_ui->label_M7, "geometry", this);
516  anim3->setDuration(1500);
517  anim3->setStartValue(QRect(630, 350, 0, 30));
518  anim3->setEndValue(QRect(400, 350, 230, 30));
519  anim3->setEasingCurve(QEasingCurve::Linear);
520 
521  QPropertyAnimation *anim4 = new QPropertyAnimation(m_ui->label_M8, "geometry", this);
522  anim4->setDuration(1500);
523  anim4->setStartValue(QRect(630, 385, 0, 30));
524  anim4->setEndValue(QRect(400, 385, 230, 30));
525  anim4->setEasingCurve(QEasingCurve::Linear);
526 
527  QPropertyAnimation *anim5 = new QPropertyAnimation(m_ui->label_M9, "geometry", this);
528  anim5->setDuration(1500);
529  anim5->setStartValue(QRect(630, 420, 0, 30));
530  anim5->setEndValue(QRect(400, 420, 230, 30));
531  anim5->setEasingCurve(QEasingCurve::Linear);
532 
533  QSequentialAnimationGroup *group = new QSequentialAnimationGroup(this);
534  group->addAnimation(anim1);
535  group->addAnimation(anim2);
536  group->addAnimation(anim3);
537  group->addAnimation(anim4);
538  group->addAnimation(anim5);
539  group->start();
540 }
541 
543 {
544  m_ui->stateButton_F->setText(!MusicApplication::instance()->isPlaying() ? tr("Play") : tr("Pause"));
545 
546  m_ui->artNameEdit->setStyleSheet(TTK::UI::LineEditStyle01);
547  m_ui->songNameEdit->setStyleSheet(TTK::UI::LineEditStyle01);
548  m_ui->authorNameEdit->setStyleSheet(TTK::UI::LineEditStyle01);
549  m_ui->introductionTextEdit->setStyleSheet(TTK::UI::TextEditStyle01);
550  m_ui->lrcTextEdit->setVerticalScrollBarPolicy(Qt::ScrollBarAlwaysOff);
551  m_ui->lrcTextEdit->setHorizontalScrollBarPolicy(Qt::ScrollBarAlwaysOff);
552  m_ui->lrcTextEdit->setStyleSheet(TTK::UI::TextEditStyle01 + TTK::UI::ScrollBarStyle01);
553  m_ui->lrcTextEdit->setAcceptRichText(false);
554  m_ui->lrcTextEdit->setLineWrapMode(QTextEdit::NoWrap);
555 
556  QTextBlockFormat fmt;
557  fmt.setLineHeight(30, QTextBlockFormat::FixedHeight);
558  QTextCursor cur = m_ui->lrcTextEdit->textCursor();
559  cur.setBlockFormat(fmt);
560  m_ui->lrcTextEdit->setTextCursor(cur);
561 
562  m_ui->timeSlider_F->setFocusPolicy(Qt::NoFocus);
563  m_ui->timeSlider_F->setStyleSheet(TTK::UI::SliderStyle09);
564  m_ui->stateButton_F->setStyleSheet(TTK::UI::PushButtonStyle04);
565  m_ui->previousButton_F->setStyleSheet(TTK::UI::PushButtonStyle04);
566  m_ui->nextButton_F->setStyleSheet(TTK::UI::PushButtonStyle04);
567  m_ui->cancelButton_F->setStyleSheet(TTK::UI::PushButtonStyle04);
568 
569 #ifdef Q_OS_UNIX
570  m_ui->stateButton_F->setFocusPolicy(Qt::NoFocus);
571  m_ui->previousButton_F->setFocusPolicy(Qt::NoFocus);
572  m_ui->nextButton_F->setFocusPolicy(Qt::NoFocus);
573  m_ui->cancelButton_F->setFocusPolicy(Qt::NoFocus);
574 #endif
575 
576  connect(m_ui->timeSlider_F, SIGNAL(sliderReleasedAt(int)), SLOT(timeSliderValueChanged(int)));
577  connect(m_ui->stateButton_F, SIGNAL(clicked(bool)), SLOT(firstWidgetStateButtonClicked()));
578  connect(m_ui->cancelButton_F, SIGNAL(clicked()), SLOT(close()));
579  connect(m_ui->nextButton_F, SIGNAL(clicked()), SLOT(setCurrentSecondWidget()));
580  connect(m_ui->previousButton_F, SIGNAL(clicked()), SLOT(setCurrentMainWidget()));
581 }
582 
584 {
585  m_lineItem = new MusicLrcMakerWidgetItem(m_ui->makeTextEdit, this);
586  m_lineItem->show();
587 
588  m_ui->makeTextEdit->setReadOnly(true);
589  m_ui->makeTextEdit->setLineWrapMode(QTextEdit::NoWrap);
590  m_ui->makeTextEdit->setVerticalScrollBarPolicy(Qt::ScrollBarAlwaysOff);
591  m_ui->makeTextEdit->setHorizontalScrollBarPolicy(Qt::ScrollBarAlwaysOff);
592  m_ui->makeTextEdit->setStyleSheet(TTK::UI::TextEditStyle01 + TTK::UI::ScrollBarStyle01);
593  m_ui->makeTextEdit->setAcceptRichText(false);
594  m_ui->makeTextEdit->setAutoFormatting(QTextEdit::AutoNone);
595  m_ui->makeTextEdit->setEnabled(false);
596 
597  QFont font = m_ui->makeTextEdit->font();
598  font.setPointSize(15);
599  m_ui->makeTextEdit->setFont(font);
600 
601  m_ui->timeSlider_S->setFocusPolicy(Qt::NoFocus);
602  m_ui->timeSlider_S->setStyleSheet(TTK::UI::SliderStyle09);
603  m_ui->previousButton_S->setStyleSheet(TTK::UI::PushButtonStyle04);
604  m_ui->nextButton_S->setStyleSheet(TTK::UI::PushButtonStyle04);
605  m_ui->cancelButton_S->setStyleSheet(TTK::UI::PushButtonStyle04);
606 
607 #ifdef Q_OS_UNIX
608  m_ui->previousButton_S->setFocusPolicy(Qt::NoFocus);
609  m_ui->nextButton_S->setFocusPolicy(Qt::NoFocus);
610  m_ui->cancelButton_S->setFocusPolicy(Qt::NoFocus);
611 #endif
612 
613  connect(m_ui->timeSlider_S, SIGNAL(sliderReleasedAt(int)), SLOT(timeSliderValueChanged(int)));
614  connect(m_ui->cancelButton_S, SIGNAL(clicked()), SLOT(close()));
615  connect(m_ui->nextButton_S, SIGNAL(clicked()), SLOT(setCurrentThirdWidget()));
616  connect(m_ui->previousButton_S, SIGNAL(clicked()), SLOT(setCurrentFirstWidget()));
617 }
618 
620 {
621  m_analysis = new MusicLrcAnalysis(this);
623  m_ui->lrcViewer->connectTo(this);
624 
625  for(int i = 0; i < m_analysis->lineMax(); ++i)
626  {
628  w->setLrcPerWidth(-20);
629  m_ui->lrcViewer->addWidget(w);
630  m_lrcContainer.append(w);
631  }
632 
633  m_ui->stateButton_T->setText(!MusicApplication::instance()->isPlaying() ? tr("Play") : tr("Pause"));
634  m_ui->timeSlider_T->setFocusPolicy(Qt::NoFocus);
635  m_ui->lrc_make_up_T->setToolTip(tr("Before 1.0s"));
636  m_ui->lrc_make_down_T->setToolTip(tr("After 1.0s"));
637  m_ui->lrc_make_up_T->setStyleSheet(TTK::UI::InteriorMakeUp);
638  m_ui->lrc_make_down_T->setStyleSheet(TTK::UI::InteriorMakeDown);
639  connect(m_ui->lrc_make_up_T, SIGNAL(clicked()), SLOT(lrcSpeedSlower()));
640  connect(m_ui->lrc_make_down_T, SIGNAL(clicked()), SLOT(lrcSpeedFaster()));
641 
642  m_ui->timeSlider_T->setStyleSheet(TTK::UI::SliderStyle09);
643  m_ui->stateButton_T->setStyleSheet(TTK::UI::PushButtonStyle04);
644  m_ui->remakeButton_T->setStyleSheet(TTK::UI::PushButtonStyle04);
645  m_ui->uploadButton_T->setStyleSheet(TTK::UI::PushButtonStyle04);
646  m_ui->saveButton_T->setStyleSheet(TTK::UI::PushButtonStyle04);
647  m_ui->previousButton_T->setStyleSheet(TTK::UI::PushButtonStyle04);
648  m_ui->cancelButton_T->setStyleSheet(TTK::UI::PushButtonStyle04);
649 
650 #ifdef Q_OS_UNIX
651  m_ui->stateButton_T->setFocusPolicy(Qt::NoFocus);
652  m_ui->remakeButton_T->setFocusPolicy(Qt::NoFocus);
653  m_ui->uploadButton_T->setFocusPolicy(Qt::NoFocus);
654  m_ui->saveButton_T->setFocusPolicy(Qt::NoFocus);
655  m_ui->previousButton_T->setFocusPolicy(Qt::NoFocus);
656  m_ui->cancelButton_T->setFocusPolicy(Qt::NoFocus);
657 #endif
658 
659  connect(m_ui->timeSlider_T, SIGNAL(sliderReleasedAt(int)), SLOT(timeSliderValueChanged(int)));
660  connect(m_ui->remakeButton_T, SIGNAL(clicked()), SLOT(reMakeButtonClicked()));
661  connect(m_ui->saveButton_T, SIGNAL(clicked()), SLOT(saveButtonClicked()));
662  connect(m_ui->stateButton_T, SIGNAL(clicked()), SLOT(thirdWidgetStateButtonClicked()));
663  connect(m_ui->cancelButton_T, SIGNAL(clicked()), SLOT(close()));
664  connect(m_ui->previousButton_T, SIGNAL(clicked()), SLOT(backToMakeLrcWidget()));
665 }
666 
668 {
669  bool error = false;
670  QString msg;
671  if(m_ui->artNameEdit->text().isEmpty())
672  {
673  error = true;
674  msg = tr("Art name is empty");
675  }
676 
677  if(m_ui->songNameEdit->text().isEmpty())
678  {
679  error = true;
680  msg = tr("Song name is empty");
681  }
682 
683  if(m_ui->lrcTextEdit->toPlainText().isEmpty())
684  {
685  error = true;
686  msg = tr("Lrc text is empty");
687  }
688 
689  if(error)
690  {
692  return false;
693  }
694  return true;
695 }
696 
698 {
699  m_ui->artNameEdit->setEnabled(enabled);
700  m_ui->songNameEdit->setEnabled(enabled);
701  m_ui->authorNameEdit->setEnabled(enabled);
702  m_ui->lrcTextEdit->setEnabled(enabled);
703  m_ui->introductionTextEdit->setEnabled(enabled);
704 }
705 
707 {
708  const TTKTime t(time);
709  return QString("[%1.%2]").arg(t.toString("mm:ss"), QString::number(t.millionSecond()).rightJustified(3, '0'));
710 }
711 
713 {
715  switch(m_playMode)
716  {
717  case TTK::PlayMode::Order: w->playOrder(); break;
718  case TTK::PlayMode::Random: w->playRandom(); break;
719  case TTK::PlayMode::ListLoop: w->playlistLoop(); break;
720  case TTK::PlayMode::OneLoop: w->playOneLoop(); break;
721  case TTK::PlayMode::Once: w->playOnce(); break;
722  default: break;
723  }
724 }
725 
727 {
728  if(m_analysis->isValid())
729  {
730  m_intervalTime = time;
731  m_ui->lrcViewer->start();
732  }
733 }
734 
735 void MusicLrcMakerWidget::setItemStyleSheet(int index, int size, int transparent)
736 {
738  w->setFontSize(size);
739 
740  const int value = qBound<int>(TTK_RN_MIN, TTK_RN_MAX - transparent, TTK_RN_MAX);
741  w->setFontTransparent(value);
742  w->setTransparent(value);
743 
744  if(G_SETTING_PTR->value("LrcColor").toInt() != -1)
745  {
746  const MusicLrcColor::Color index = TTKStaticCast(MusicLrcColor::Color, G_SETTING_PTR->value("LrcColor").toInt());
748  }
749  else
750  {
751  const MusicLrcColor cl(TTK::readColorConfig(G_SETTING_PTR->value("LrcFrontgroundColor").toString()),
752  TTK::readColorConfig(G_SETTING_PTR->value("LrcBackgroundColor").toString()));
753  w->setLinearGradientColor(cl);
754  }
755 }
#define TTKStaticCast(x, y)
Definition: ttkglobal.h:159
void setBackgroundLabel(QLabel *label)
QList< MusicLrcManagerForInterior * > m_lrcContainer
MusicLrcMakerWidgetItem * m_lineItem
bool isValid() const
TTK_MODULE_EXPORT QString generateSongArtist(const QString &name, const QString &key=TTK_DEFAULT_STR)
Definition: musicsong.cpp:128
static constexpr const char * InteriorMakeUp
void revertTime(qint64 pos)
The class of the lrc color.
static MusicApplication * instance()
void setText(const QString &text) const
virtual void keyPressEvent(QKeyEvent *event) overridefinal
void setLineMax(int max)
void setCurrentIndex(int index)
int lineMax() const
TTK::PlayMode playMode() const
void setCurrentSongName(const QString &name)
static constexpr wchar_t key[]
State setData(const QByteArray &data)
voidpf void uLong size
Definition: ioapi.h:136
The class of the app main widget.
The class of the messagebox widget.
void timeSliderValueChanged(int value)
void setText(const QString &string)
TTK_MODULE_EXPORT QString generateSongTitle(const QString &name, const QString &key=TTK_DEFAULT_STR)
Definition: musicsong.cpp:117
#define G_CONNECTION_PTR
int millionSecond() const noexcept
Definition: ttktime.h:90
MusicLrcAnalysis * m_analysis
#define TTK_RN_MAX
Definition: ttkglobal.h:359
void playAnyTimeAt(int time)
static void popup(const QString &text)
static constexpr const char * InteriorMakeDown
static const QString TextEditStyle01
TextEdit.
MusicLrcMakerWidget(QWidget *parent=nullptr)
int lineMiddle() const
const char * name
Definition: http_parser.c:458
static const QString ScrollBarStyle01
ScrollBar.
void updateCurrentLrc(qint64 time)
static const QString SliderStyle09
bool findText(qint64 current, qint64 total, QString &pre, QString &last, qint64 &interval) const
The class of the core lrc analysis.
bool isEmpty() const
#define TTKRemoveSingleWidget(name)
QMap< qint64, QString > TTKIntStringMap
Definition: ttkqtglobal.h:192
#define TTK_SIGNLE_SHOT(...)
Definition: ttkqtglobal.h:177
The class of the interior lrc manager.
bool biggerThan(int value) const
int currentIndex() const
QString text(int index) const
QMap< int, qint64 > m_times
void setCurrentFilePath(const QString &name)
void setControlEnabled(bool enabled) const
void setItemStyleSheet(int index, int size, int transparent)
TTK_MODULE_EXPORT QString lrcDirPrefix()
static const QString PushButtonStyle04
#define TTK_RN_MIN
Definition: ttkglobal.h:358
The class of the lrc maker widget item.
qint64 setSongTimeSpeed(qint64 time)
The class of the lrc maker widget.
virtual void keyReleaseEvent(QKeyEvent *event) overridefinal
#define TTK_SLOT
Definition: ttkqtglobal.h:165
void durationChanged(qint64 duration)
static const QString BackgroundStyle10
MusicLrcMakerWidgetItem(QWidget *ui=nullptr, QObject *parent=nullptr)
The class of the ttk time object.
Definition: ttktime.h:28
#define TTK_DN_S2MS
Definition: ttkglobal.h:276
TTK_MODULE_EXPORT int fontTextWidth(const QFont &font, const QString &text)
static const QString LineEditStyle01
LineEdit.
static const QString BorderStyle02
bool isPlaying() const
void positionChanged(qint64 position)
static const QString ToolButtonStyle04
MusicLrcColor mapIndexToColor(MusicLrcColor::Color index)
#define TTK_ITEM_SIZE_L
Definition: ttkglobal.h:243
void setLinearGradientColor(const MusicLrcColor &color)
static QString toString(qint64 time, const QString &format) noexcept
Definition: ttktime.cpp:72
#define LRC_FILE
Definition: musicobject.h:63
Ui::MusicLrcMakerWidget * m_ui
QList< QColor > readColorConfig(const QString &value)
QString translateTimeString(qint64 time)
state
Definition: http_parser.c:279
void setFontTransparent(int t)
virtual void paintEvent(QPaintEvent *event) overridefinal
#define G_SETTING_PTR
static qint64 formatDuration(const QString &time) noexcept
Definition: ttktime.cpp:123
The class of the moving widget base.