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