TTKMusicPlayer  4.3.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.setRenderHint(QPainter::TextAntialiasing);
134  painter.setPen(QColor(0, 0, 0));
135  painter.drawText(m_intervalCount, -10, w, 60, Qt::AlignLeft | Qt::AlignVCenter, text());
136 
137  painter.setPen(QColor(144, 184, 214));
138  painter.drawText(m_intervalCount, -10, m_paintIndex, 60, Qt::AlignLeft | Qt::AlignVCenter, text());
139 }
140 
141 
142 
144  : MusicAbstractMoveWidget(parent),
145  m_ui(new Ui::MusicLrcMakerWidget),
146  m_currentLine(0),
147  m_intervalTime(0)
148 {
149  m_ui->setupUi(this);
150  setFixedSize(size());
151  setAttribute(Qt::WA_DeleteOnClose);
152  setBackgroundLabel(m_ui->background);
153 
154  m_ui->stackedWidget->setFocusPolicy(Qt::StrongFocus);
155  m_ui->topTitleCloseButton->setIcon(QIcon(":/functions/btn_close_hover"));
156  m_ui->topTitleCloseButton->setStyleSheet(TTK::UI::ToolButtonStyle04);
157  m_ui->topTitleCloseButton->setCursor(QCursor(Qt::PointingHandCursor));
158  m_ui->topTitleCloseButton->setToolTip(tr("Close"));
159  connect(m_ui->topTitleCloseButton, SIGNAL(clicked()), SLOT(close()));
160 
161  m_ui->stackedWidget->setStyleSheet(QString("#stackedWidget{ %1 }").arg(TTK::UI::BackgroundStyle10));
162 
167 
170 
173 }
174 
176 {
180  qDeleteAll(m_lrcContainer);
181  delete m_lineItem;
182  delete m_analysis;
183  delete m_ui;
184 }
185 
187 {
188  m_plainText.clear();
189  m_analysis->setFilePath(QString("%1%2%3").arg(TTK::String::lrcDirPrefix(), name, LRC_FILE));
190  m_ui->songNameEdit->setText(TTK::generateSongTitle(name));
191  m_ui->artNameEdit->setText(TTK::generateSongArtist(name));
192 }
193 
195 {
196  m_ui->timeSlider_F->blockSignals(true);
197  m_ui->timeSlider_S->blockSignals(true);
198  m_ui->timeSlider_T->blockSignals(true);
199 
200  m_ui->timeSlider_F->setValue(position);
201  m_ui->timeSlider_S->setValue(position);
202  m_ui->timeSlider_T->setValue(position);
203 
204  m_ui->timeSlider_F->blockSignals(false);
205  m_ui->timeSlider_S->blockSignals(false);
206  m_ui->timeSlider_T->blockSignals(false);
207 
208  const QString &t = QString("%1/%2").arg(TTKTime::formatDuration(position),
209  TTKTime::formatDuration(m_ui->timeSlider_F->maximum()));
210  m_ui->labelTime_F->setText(t);
211  m_ui->labelTime_S->setText(t);
212  m_ui->labelTime_T->setText(t);
213 
214  if(m_ui->stackedWidget->currentIndex() == 3)
215  {
216  if(m_analysis->isEmpty())
217  {
218  return;
219  }
220 
221  QString currentLrc, laterLrc;
222  if(m_analysis->findText(position, m_ui->timeSlider_F->maximum(), currentLrc, laterLrc, m_intervalTime))
223  {
224  if(currentLrc != m_lrcContainer[m_analysis->middle()]->text())
225  {
227  }
228  }
229  }
230 }
231 
233 {
234  m_ui->timeSlider_F->setRange(0, position);
235  m_ui->timeSlider_S->setRange(0, position);
236  m_ui->timeSlider_T->setRange(0, position);
237 }
238 
240 {
241  createCurrentLine(Qt::Key_Down);
242 }
243 
245 {
248 }
249 
251 {
252  if(m_times.count() != m_plainText.count())
253  {
254  return;
255  }
256  m_analysis->save();
257 
258  MusicToastLabel::popup(tr("Save file finished"));
259 }
260 
262 {
264  message.setText(tr("Are you sure that you want to remake lyrics?"));
265  if(message.exec())
266  {
269  }
270 }
271 
273 {
275  message.setText(tr("Go back and lyrics will be lost"));
276  if(message.exec())
277  {
280  }
281 }
282 
284 {
285  const QString &text = (m_ui->stateButton_F->text() == tr("Play")) ? tr("Pause") : tr("Play");
286  m_ui->stateButton_F->setText(text);
287  m_ui->stateButton_T->setText(text);
288 
290 }
291 
293 {
294  const bool state = m_ui->stateButton_T->text() == tr("Play");
295  const QString &text = state ? tr("Pause") : tr("Play");
296  m_ui->stateButton_F->setText(text);
297  m_ui->stateButton_T->setText(text);
298 
300  if(state)
301  {
303  }
304  else
305  {
306  m_lrcContainer[m_analysis->middle()]->stop();
307  m_ui->lrcViewer->stop();
308  }
309 }
310 
312 {
313  m_ui->stackedWidget->setCurrentIndex(0);
314 }
315 
317 {
318  m_ui->stackedWidget->setCurrentIndex(1);
319 }
320 
322 {
323  if(m_ui->stackedWidget->currentIndex() == 1 && !checkInputValid())
324  {
325  return;
326  }
327 
329  {
331  }
332  else
333  {
335  }
336 
337  m_plainText = m_ui->lrcTextEdit->toPlainText().trimmed().split(TTK_LINEFEED);
338  m_times.clear();
339  m_currentLine = 0;
340  m_lineItem->reset();
341  m_times[m_currentLine] = 0;
342 
343  m_ui->makeTextEdit->setText(m_ui->lrcTextEdit->toPlainText().trimmed() + TTK_LINEFEED);
344  QTextCursor cursor = m_ui->makeTextEdit->textCursor();
345  for(int i = 0; i < m_plainText.count(); ++i)
346  {
347  QTextBlockFormat textBlockFormat = cursor.blockFormat();
348  textBlockFormat.setBottomMargin(18);
349  cursor.setBlockFormat(textBlockFormat);
350  cursor.movePosition(QTextCursor::NextBlock);
351  }
352  cursor.movePosition(QTextCursor::Start);
353  m_ui->makeTextEdit->setTextCursor(cursor);
354  m_ui->makeTextEdit->setCurrentCharFormat(QTextCharFormat());
355  m_lineItem->setText(cursor.block().text());
356 
357  m_ui->stackedWidget->setCurrentIndex(2);
358 }
359 
361 {
362  if(m_ui->stackedWidget->currentIndex() == 2 && m_plainText.count() > m_ui->makeTextEdit->textCursor().blockNumber())
363  {
364  MusicToastLabel::popup(tr("Lyrics make has not been completed"));
365  return;
366  }
367 
369  m_ui->stackedWidget->setCurrentIndex(3);
370 
371  if(m_times.count() == m_plainText.count())
372  {
373  TTKIntStringMap data;
374  for(int i = 0; i < m_times.count(); ++i)
375  {
376  data.insert(m_times.value(i), m_plainText[i]);
377  }
378  m_analysis->loadFromBuffer(data);
379 
380  for(int i = 0; i < m_analysis->maximum(); ++i)
381  {
382  m_lrcContainer[i]->setText({});
383  }
384 
385  setItemStyleSheet(0, -3, 90);
386  setItemStyleSheet(1, -6, 35);
387  setItemStyleSheet(2, -10, 0);
388  setItemStyleSheet(3, -6, 35);
389  setItemStyleSheet(4, -3, 90);
390  }
391 }
392 
394 {
395  for(int i = 0; i < m_analysis->maximum(); ++i)
396  {
397  m_lrcContainer[i]->setText(m_analysis->text(i));
398  }
399 
402 }
403 
405 {
407  updateCurrentLrc(m_analysis->findTimePosition(m_ui->timeSlider_T->value()));
408 }
409 
411 {
413  updateCurrentLrc(m_analysis->findTimePosition(m_ui->timeSlider_T->value()));
414 }
415 
417 {
418  MusicAbstractMoveWidget::keyPressEvent(event);
419 }
420 
422 {
423  MusicAbstractMoveWidget::keyReleaseEvent(event);
424 
425  createCurrentLine(event->key());
426  if(event->key() == Qt::Key_Space)
427  {
429  }
430 }
431 
433 {
434  QTextCursor cursor = m_ui->makeTextEdit->textCursor();
435  if(m_ui->stackedWidget->currentIndex() == 2 && m_plainText.count() > m_currentLine)
436  {
437  switch(key)
438  {
439  case Qt::Key_Left:
440  {
441  MusicApplication::instance()->playTimePosition(m_ui->timeSlider_F->value() - 2222);
442  m_lineItem->moveLeft();
443  break;
444  }
445  case Qt::Key_Up:
446  {
447  cursor.movePosition(QTextCursor::PreviousBlock, QTextCursor::KeepAnchor);
448  m_lineItem->setText(cursor.block().text());
449 
450  if(--m_currentLine < 0)
451  {
452  m_currentLine = 0;
453  }
454 
455  m_lineItem->moveUp();
456  m_times[m_currentLine] = m_ui->timeSlider_S->value();
457  break;
458  }
459  case Qt::Key_Right:
460  {
462  break;
463  }
464  case Qt::Key_Down:
465  {
466  if(!m_lineItem->done())
467  {
468  return;
469  }
470 
471  cursor.movePosition(QTextCursor::NextBlock, QTextCursor::KeepAnchor);
472  m_lineItem->setText(cursor.block().text());
473 
474  if(++m_currentLine >= m_plainText.count())
475  {
478  {
479  m_lineItem->moveDown();
480  }
481  }
482  else
483  {
484  m_lineItem->moveDown();
485  m_times[m_currentLine] = m_ui->timeSlider_S->value();
486  }
487  break;
488  }
489  default: break;
490  }
491  }
492  m_ui->makeTextEdit->setTextCursor(cursor);
493 }
494 
496 {
497  m_ui->nextButton_M->setStyleSheet(TTK::UI::PushButtonStyle04);
498  m_ui->cancelButton_M->setStyleSheet(TTK::UI::PushButtonStyle04);
499 #ifdef Q_OS_UNIX
500  m_ui->nextButton_M->setFocusPolicy(Qt::NoFocus);
501  m_ui->cancelButton_M->setFocusPolicy(Qt::NoFocus);
502 #endif
503  connect(m_ui->cancelButton_M, SIGNAL(clicked()), SLOT(close()));
504  connect(m_ui->nextButton_M, SIGNAL(clicked()), SLOT(setCurrentFirstWidget()));
505 
506  QPropertyAnimation *anim1 = new QPropertyAnimation(m_ui->label_M5, "geometry", this);
507  anim1->setDuration(1500);
508  anim1->setStartValue(QRect(630, 280, 0, 30));
509  anim1->setEndValue(QRect(400, 280, 230, 30));
510  anim1->setEasingCurve(QEasingCurve::Linear);
511 
512  QPropertyAnimation *anim2 = new QPropertyAnimation(m_ui->label_M6, "geometry", this);
513  anim2->setDuration(1500);
514  anim2->setStartValue(QRect(630, 315, 0, 30));
515  anim2->setEndValue(QRect(400, 315, 230, 30));
516  anim2->setEasingCurve(QEasingCurve::Linear);
517 
518  QPropertyAnimation *anim3 = new QPropertyAnimation(m_ui->label_M7, "geometry", this);
519  anim3->setDuration(1500);
520  anim3->setStartValue(QRect(630, 350, 0, 30));
521  anim3->setEndValue(QRect(400, 350, 230, 30));
522  anim3->setEasingCurve(QEasingCurve::Linear);
523 
524  QPropertyAnimation *anim4 = new QPropertyAnimation(m_ui->label_M8, "geometry", this);
525  anim4->setDuration(1500);
526  anim4->setStartValue(QRect(630, 385, 0, 30));
527  anim4->setEndValue(QRect(400, 385, 230, 30));
528  anim4->setEasingCurve(QEasingCurve::Linear);
529 
530  QPropertyAnimation *anim5 = new QPropertyAnimation(m_ui->label_M9, "geometry", this);
531  anim5->setDuration(1500);
532  anim5->setStartValue(QRect(630, 420, 0, 30));
533  anim5->setEndValue(QRect(400, 420, 230, 30));
534  anim5->setEasingCurve(QEasingCurve::Linear);
535 
536  QSequentialAnimationGroup *group = new QSequentialAnimationGroup(this);
537  group->addAnimation(anim1);
538  group->addAnimation(anim2);
539  group->addAnimation(anim3);
540  group->addAnimation(anim4);
541  group->addAnimation(anim5);
542  group->start();
543 }
544 
546 {
547  m_ui->stateButton_F->setText(!MusicApplication::instance()->isPlaying() ? tr("Play") : tr("Pause"));
548 
549  m_ui->artNameEdit->setStyleSheet(TTK::UI::LineEditStyle01);
550  m_ui->songNameEdit->setStyleSheet(TTK::UI::LineEditStyle01);
551  m_ui->authorNameEdit->setStyleSheet(TTK::UI::LineEditStyle01);
552  m_ui->introductionTextEdit->setStyleSheet(TTK::UI::TextEditStyle01);
553  m_ui->lrcTextEdit->setVerticalScrollBarPolicy(Qt::ScrollBarAlwaysOff);
554  m_ui->lrcTextEdit->setHorizontalScrollBarPolicy(Qt::ScrollBarAlwaysOff);
555  m_ui->lrcTextEdit->setStyleSheet(TTK::UI::TextEditStyle01 + TTK::UI::ScrollBarStyle01);
556  m_ui->lrcTextEdit->setAcceptRichText(false);
557  m_ui->lrcTextEdit->setLineWrapMode(QTextEdit::NoWrap);
558 
559  QTextBlockFormat fmt;
560  fmt.setLineHeight(30, QTextBlockFormat::FixedHeight);
561  QTextCursor cur = m_ui->lrcTextEdit->textCursor();
562  cur.setBlockFormat(fmt);
563  m_ui->lrcTextEdit->setTextCursor(cur);
564 
565  m_ui->timeSlider_F->setFocusPolicy(Qt::NoFocus);
566  m_ui->timeSlider_F->setStyleSheet(TTK::UI::SliderStyle09);
567  m_ui->stateButton_F->setStyleSheet(TTK::UI::PushButtonStyle04);
568  m_ui->previousButton_F->setStyleSheet(TTK::UI::PushButtonStyle04);
569  m_ui->nextButton_F->setStyleSheet(TTK::UI::PushButtonStyle04);
570  m_ui->cancelButton_F->setStyleSheet(TTK::UI::PushButtonStyle04);
571 
572 #ifdef Q_OS_UNIX
573  m_ui->stateButton_F->setFocusPolicy(Qt::NoFocus);
574  m_ui->previousButton_F->setFocusPolicy(Qt::NoFocus);
575  m_ui->nextButton_F->setFocusPolicy(Qt::NoFocus);
576  m_ui->cancelButton_F->setFocusPolicy(Qt::NoFocus);
577 #endif
578 
579  connect(m_ui->timeSlider_F, SIGNAL(sliderReleasedAt(int)), SLOT(timeSliderValueChanged(int)));
580  connect(m_ui->stateButton_F, SIGNAL(clicked(bool)), SLOT(firstWidgetStateButtonClicked()));
581  connect(m_ui->cancelButton_F, SIGNAL(clicked()), SLOT(close()));
582  connect(m_ui->nextButton_F, SIGNAL(clicked()), SLOT(setCurrentSecondWidget()));
583  connect(m_ui->previousButton_F, SIGNAL(clicked()), SLOT(setCurrentMainWidget()));
584 }
585 
587 {
588  m_lineItem = new MusicLrcMakerWidgetItem(m_ui->makeTextEdit, this);
589  m_lineItem->show();
590 
591  m_ui->makeTextEdit->setReadOnly(true);
592  m_ui->makeTextEdit->setLineWrapMode(QTextEdit::NoWrap);
593  m_ui->makeTextEdit->setVerticalScrollBarPolicy(Qt::ScrollBarAlwaysOff);
594  m_ui->makeTextEdit->setHorizontalScrollBarPolicy(Qt::ScrollBarAlwaysOff);
595  m_ui->makeTextEdit->setStyleSheet(TTK::UI::TextEditStyle01 + TTK::UI::ScrollBarStyle01);
596  m_ui->makeTextEdit->setAcceptRichText(false);
597  m_ui->makeTextEdit->setAutoFormatting(QTextEdit::AutoNone);
598  m_ui->makeTextEdit->setEnabled(false);
599 
600  QFont font = m_ui->makeTextEdit->font();
601  font.setPointSize(15);
602  m_ui->makeTextEdit->setFont(font);
603 
604  m_ui->timeSlider_S->setFocusPolicy(Qt::NoFocus);
605  m_ui->timeSlider_S->setStyleSheet(TTK::UI::SliderStyle09);
606  m_ui->previousButton_S->setStyleSheet(TTK::UI::PushButtonStyle04);
607  m_ui->nextButton_S->setStyleSheet(TTK::UI::PushButtonStyle04);
608  m_ui->cancelButton_S->setStyleSheet(TTK::UI::PushButtonStyle04);
609 
610 #ifdef Q_OS_UNIX
611  m_ui->previousButton_S->setFocusPolicy(Qt::NoFocus);
612  m_ui->nextButton_S->setFocusPolicy(Qt::NoFocus);
613  m_ui->cancelButton_S->setFocusPolicy(Qt::NoFocus);
614 #endif
615 
616  connect(m_ui->timeSlider_S, SIGNAL(sliderReleasedAt(int)), SLOT(timeSliderValueChanged(int)));
617  connect(m_ui->cancelButton_S, SIGNAL(clicked()), SLOT(close()));
618  connect(m_ui->nextButton_S, SIGNAL(clicked()), SLOT(setCurrentThirdWidget()));
619  connect(m_ui->previousButton_S, SIGNAL(clicked()), SLOT(setCurrentFirstWidget()));
620 }
621 
623 {
624  m_analysis = new MusicLrcAnalysis(this);
626  m_ui->lrcViewer->connectTo(this);
627 
628  for(int i = 0; i < m_analysis->maximum(); ++i)
629  {
631  w->setLrcPerWidth(-20);
632  m_ui->lrcViewer->addWidget(w);
633  m_lrcContainer.append(w);
634  }
635 
636  m_ui->stateButton_T->setText(!MusicApplication::instance()->isPlaying() ? tr("Play") : tr("Pause"));
637  m_ui->timeSlider_T->setFocusPolicy(Qt::NoFocus);
638  m_ui->lrc_make_up_T->setToolTip(tr("Before 1.0s"));
639  m_ui->lrc_make_down_T->setToolTip(tr("After 1.0s"));
640  m_ui->lrc_make_up_T->setStyleSheet(TTK::UI::InteriorMakeUp);
641  m_ui->lrc_make_down_T->setStyleSheet(TTK::UI::InteriorMakeDown);
642  connect(m_ui->lrc_make_up_T, SIGNAL(clicked()), SLOT(lrcPositionSlower()));
643  connect(m_ui->lrc_make_down_T, SIGNAL(clicked()), SLOT(lrcPositionFaster()));
644 
645  m_ui->timeSlider_T->setStyleSheet(TTK::UI::SliderStyle09);
646  m_ui->stateButton_T->setStyleSheet(TTK::UI::PushButtonStyle04);
647  m_ui->remakeButton_T->setStyleSheet(TTK::UI::PushButtonStyle04);
648  m_ui->uploadButton_T->setStyleSheet(TTK::UI::PushButtonStyle04);
649  m_ui->saveButton_T->setStyleSheet(TTK::UI::PushButtonStyle04);
650  m_ui->previousButton_T->setStyleSheet(TTK::UI::PushButtonStyle04);
651  m_ui->cancelButton_T->setStyleSheet(TTK::UI::PushButtonStyle04);
652 
653 #ifdef Q_OS_UNIX
654  m_ui->stateButton_T->setFocusPolicy(Qt::NoFocus);
655  m_ui->remakeButton_T->setFocusPolicy(Qt::NoFocus);
656  m_ui->uploadButton_T->setFocusPolicy(Qt::NoFocus);
657  m_ui->saveButton_T->setFocusPolicy(Qt::NoFocus);
658  m_ui->previousButton_T->setFocusPolicy(Qt::NoFocus);
659  m_ui->cancelButton_T->setFocusPolicy(Qt::NoFocus);
660 #endif
661 
662  connect(m_ui->timeSlider_T, SIGNAL(sliderReleasedAt(int)), SLOT(timeSliderValueChanged(int)));
663  connect(m_ui->remakeButton_T, SIGNAL(clicked()), SLOT(reMakeButtonClicked()));
664  connect(m_ui->saveButton_T, SIGNAL(clicked()), SLOT(saveButtonClicked()));
665  connect(m_ui->stateButton_T, SIGNAL(clicked()), SLOT(thirdWidgetStateButtonClicked()));
666  connect(m_ui->cancelButton_T, SIGNAL(clicked()), SLOT(close()));
667  connect(m_ui->previousButton_T, SIGNAL(clicked()), SLOT(backToMakeLrcWidget()));
668 }
669 
671 {
672  bool error = false;
673  QString msg;
674  if(m_ui->artNameEdit->text().isEmpty())
675  {
676  error = true;
677  msg = tr("Art name is empty");
678  }
679 
680  if(m_ui->songNameEdit->text().isEmpty())
681  {
682  error = true;
683  msg = tr("Song name is empty");
684  }
685 
686  if(m_ui->lrcTextEdit->toPlainText().isEmpty())
687  {
688  error = true;
689  msg = tr("Lrc text is empty");
690  }
691 
692  if(error)
693  {
695  return false;
696  }
697  return true;
698 }
699 
701 {
702  m_ui->artNameEdit->setEnabled(enabled);
703  m_ui->songNameEdit->setEnabled(enabled);
704  m_ui->authorNameEdit->setEnabled(enabled);
705  m_ui->lrcTextEdit->setEnabled(enabled);
706  m_ui->introductionTextEdit->setEnabled(enabled);
707 }
708 
710 {
711  const TTKTime t(time);
712  return QString("[%1.%2]").arg(t.toString("mm:ss"), QString::number(t.millionSecond()).rightJustified(3, '0'));
713 }
714 
716 {
718  switch(m_playMode)
719  {
720  case TTK::PlayMode::Order: w->playOrder(); break;
721  case TTK::PlayMode::Random: w->playRandom(); break;
722  case TTK::PlayMode::ListLoop: w->playlistLoop(); break;
723  case TTK::PlayMode::OneLoop: w->playOneLoop(); break;
724  case TTK::PlayMode::Once: w->playOnce(); break;
725  default: break;
726  }
727 }
728 
730 {
731  if(m_analysis->isValid())
732  {
733  m_intervalTime = time;
734  m_ui->lrcViewer->start();
735  }
736 }
737 
738 void MusicLrcMakerWidget::setItemStyleSheet(int index, int size, int transparent)
739 {
741  w->setFontSize(size);
742 
743  const int value = qBound<int>(TTK_RN_MIN, TTK_RN_MAX - transparent, TTK_RN_MAX);
744  w->setFontTransparent(value);
745  w->setTransparent(value);
746 
747  if(G_SETTING_PTR->value("LrcColor").toInt() != -1)
748  {
750  }
751  else
752  {
753  w->setLinearGradientColor({TTK::readColorConfig(G_SETTING_PTR->value("LrcFrontgroundColor").toString()),
754  TTK::readColorConfig(G_SETTING_PTR->value("LrcBackgroundColor").toString())});
755  }
756 }
#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)
static constexpr const char * InteriorMakeUp
static QString message(const TTK::Attribute attr)
static MusicApplication * instance()
void setText(const QString &text) const
virtual void keyPressEvent(QKeyEvent *event) overridefinal
void setFontTransparent(int t) noexcept
void setCurrentSongName(const QString &name)
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)
void setBackgroundLabel(QLabel *label) noexcept
int millionSecond() const noexcept
Definition: ttktime.h:89
The class of the music player.
Definition: musicplayer.h:46
MusicLrcAnalysis * m_analysis
#define TTK_RN_MAX
Definition: ttkglobal.h:439
int maximum() const noexcept
TTK::PlayMode playMode() const noexcept
void setTimePosition(qint64 pos)
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.
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
void setMaximum(int max) noexcept
#define TTK_REMOVE_SINGLE_WIDGET(object)
#define TTK_RN_MIN
Definition: ttkglobal.h:438
The class of the lrc maker widget item.
void setFilePath(const QString &name) noexcept
qint64 findTimePosition(qint64 time)
The class of the lrc maker widget.
virtual void keyReleaseEvent(QKeyEvent *event) overridefinal
#define TTK_SLOT
Definition: ttkqtglobal.h:177
#define TTK_CONNECTIONPOOL_UNREGISTER(object)
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)
void playTimePosition(int time)
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
#define TTK_CONNECTIONPOOL_BIND_FROM(object)
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
State loadFromBuffer(const TTKIntStringMap &data)
#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 TTK_CONNECTIONPOOL_REGISTER(object)
#define G_SETTING_PTR
static qint64 formatDuration(const QString &time) noexcept
Definition: ttktime.cpp:123
The class of the moving widget base.
int middle() const noexcept