TTKMusicPlayer  3.7.0.0
TTKMusicPlayer imitates Kugou UI, the music player uses of qmmp core library based on Qt for windows and linux
musiclrclocallinkwidget.cpp
Go to the documentation of this file.
2 #include "ui_musiclrclocallinkwidget.h"
4 #include "musicconnectionpool.h"
5 #include "musictoastlabel.h"
6 #include "musicfileutils.h"
7 #include "musicnetworkdefines.h"
8 
9 #include <QDir>
10 
12  : MusicAbstractTableWidget(parent)
13 {
14  setColumnCount(2);
15 
16  QHeaderView *headerView = horizontalHeader();
17  headerView->resizeSection(0, 147);
18  headerView->resizeSection(1, 235);
19 }
20 
21 bool MusicLrcLocalLinkTableWidget::contains(const QString &string)
22 {
23  for(int i = 0; i < rowCount(); ++i)
24  {
25  if(item(i, 1)->toolTip() == string)
26  {
27  return true;
28  }
29  }
30  return false;
31 }
32 
33 void MusicLrcLocalLinkTableWidget::addCellItems(const MusicLocalDataItemList &items)
34 {
35  const int count = rowCount();
36  setRowCount(count + items.count());
37 
38  QHeaderView *headerView = horizontalHeader();
39  for(int i = 0; i < items.count(); ++i)
40  {
41  const MusicLocalDataItem &v = items[i];
42 
43  QTableWidgetItem *item = new QTableWidgetItem;
44  item->setToolTip(v.m_name);
45  item->setText(TTK::Widget::elidedText(font(), item->toolTip(), Qt::ElideRight, headerView->sectionSize(0) - 20));
46  QtItemSetTextAlignment(item, Qt::AlignLeft | Qt::AlignVCenter);
47  setItem(count + i, 0, item);
48 
49  item = new QTableWidgetItem;
50  item->setToolTip(v.m_path);
51  item->setText(TTK::Widget::elidedText(font(), item->toolTip(), Qt::ElideRight, headerView->sectionSize(1) - 20));
52  QtItemSetTextAlignment(item, Qt::AlignLeft | Qt::AlignVCenter);
53  setItem(count + i, 1, item);
54  }
55 }
56 
57 
58 
60  : MusicAbstractMoveDialog(parent),
61  m_ui(new Ui::MusicLrcLocalLinkWidget)
62 {
63  m_ui->setupUi(this);
64  setFixedSize(size());
65  setBackgroundLabel(m_ui->background);
66 
67  m_ui->topTitleCloseButton->setIcon(QIcon(":/functions/btn_close_hover"));
68  m_ui->topTitleCloseButton->setStyleSheet(TTK::UI::ToolButtonStyle04);
69  m_ui->topTitleCloseButton->setCursor(QCursor(Qt::PointingHandCursor));
70  m_ui->topTitleCloseButton->setToolTip(tr("Close"));
71  connect(m_ui->topTitleCloseButton, SIGNAL(clicked()), SLOT(close()));
72 
73  m_ui->fuzzyButton->setStyleSheet(TTK::UI::CheckBoxStyle01);
74  m_ui->localSearchButton->setStyleSheet(TTK::UI::PushButtonStyle04);
75  m_ui->commitButton->setStyleSheet(TTK::UI::PushButtonStyle04);
76  m_ui->previewButton->setStyleSheet(TTK::UI::PushButtonStyle04);
77  m_ui->deleteButton->setStyleSheet(TTK::UI::PushButtonStyle04);
78  m_ui->titleEdit->setStyleSheet(TTK::UI::LineEditStyle01);
79 
80 #ifdef Q_OS_UNIX
81  m_ui->fuzzyButton->setFocusPolicy(Qt::NoFocus);
82  m_ui->localSearchButton->setFocusPolicy(Qt::NoFocus);
83  m_ui->commitButton->setFocusPolicy(Qt::NoFocus);
84  m_ui->previewButton->setFocusPolicy(Qt::NoFocus);
85  m_ui->deleteButton->setFocusPolicy(Qt::NoFocus);
86 #endif
87  m_ui->fuzzyButton->setChecked(true);
88 
89  connect(m_ui->fuzzyButton, SIGNAL(clicked(bool)), SLOT(fuzzyStateChanged()));
90  connect(m_ui->previewButton, SIGNAL(clicked()), SLOT(findInLocalFile()));
91  connect(m_ui->localSearchButton, SIGNAL(clicked()), SLOT(fuzzyStateChanged()));
92  connect(m_ui->deleteButton, SIGNAL(clicked()), SLOT(deleteFoundLrc()));
93  connect(m_ui->commitButton, SIGNAL(clicked()), SLOT(confirmButtonClicked()));
94 
95  G_CONNECTION_PTR->setValue(className(), this);
96  G_CONNECTION_PTR->connect(className(), MusicDownloadStatusModule::className());
97 }
98 
100 {
101  G_CONNECTION_PTR->removeValue(this);
102  delete m_ui;
103 }
104 
106 {
108  m_ui->titleEdit->setText(name);
110 }
111 
113 {
114  const QString &title = m_ui->titleEdit->text().trimmed();
115  if(title.isEmpty())
116  {
117  return;
118  }
119 
120  m_ui->fuzzyButton->isChecked();
121  const QStringList &list = QDir(TTK::String::lrcDirPrefix()).entryList(QDir::Files | QDir::Hidden | QDir::NoDotAndDotDot);
122 
123  MusicLocalDataItemList items;
124  for(const QString &var : qAsConst(list))
125  {
126  if(var.contains(title, m_ui->fuzzyButton->isChecked() ? Qt::CaseInsensitive : Qt::CaseSensitive))
127  {
128  MusicLocalDataItem item;
129  item.m_name = var;
130  item.m_path = TTK::String::lrcDirPrefix() + var;
131  items << item;
132  }
133  }
134  m_ui->searchedTable->addCellItems(items);
135 }
136 
138 {
139  m_ui->searchedTable->removeItems();
141 }
142 
144 {
145  const QString &path = TTK::File::getOpenFileName(this, "LRC Files (*.lrc)");
146  if(path.isEmpty() || m_ui->searchedTable->contains(path))
147  {
148  return;
149  }
150 
151  MusicLocalDataItem item;
152  item.m_name = QFileInfo(path).fileName();
153  item.m_path = path;
154 
155  m_ui->searchedTable->addCellItems({item});
156 }
157 
159 {
160  const int row = m_ui->searchedTable->currentRow();
161  if(row < 0)
162  {
163  MusicToastLabel::popup(tr("Please select one item first"));
164  return;
165  }
166 
167  m_ui->searchedTable->removeRow(row);
168 }
169 
171 {
172  const int row = m_ui->searchedTable->currentRow();
173  if(row < 0)
174  {
175  MusicToastLabel::popup(tr("Please select one item first"));
176  return;
177  }
178 
179  const QString &path = m_ui->searchedTable->item(row, 1)->toolTip();
180  QFile fileIn(path);
181  if(!fileIn.open(QIODevice::ReadOnly))
182  {
183  TTK_ERROR_STREAM("Lrc Input File Error");
184  close();
185  return;
186  }
187 
188  const QByteArray data(fileIn.readAll());
189  fileIn.close();
190 
191  QFile fileOut(QString("%1%2%3").arg(TTK::String::lrcDirPrefix(), m_currentName, LRC_FILE));
192  if(!fileOut.open(QIODevice::WriteOnly))
193  {
194  TTK_ERROR_STREAM("Lrc Output File Error");
195  close();
196  return;
197  }
198 
199  fileOut.write(data);
200  fileOut.flush();
201  fileOut.close();
202 
204  close();
205 }
void setBackgroundLabel(QLabel *label)
The class of the table widget base.
static const QString CheckBoxStyle01
CheckBox.
voidpf void uLong size
Definition: ioapi.h:136
TTK_MODULE_EXPORT QString getOpenFileName(QWidget *parent, const QString &filter="Image Files (*.png *.bmp *.jpg)")
#define QtItemSetTextAlignment(p, a)
Item text alignment.
Definition: ttkqtcompat.h:45
#define G_CONNECTION_PTR
static void popup(const QString &text)
#define qAsConst
Definition: ttkqtglobal.h:53
const char * name
Definition: http_parser.c:458
static constexpr const char * DOWNLOAD_KEY_LRC
TTK_MODULE_EXPORT QString lrcDirPrefix()
static const QString PushButtonStyle04
TTK_MODULE_EXPORT QString elidedText(const QFont &font, const QString &text, Qt::TextElideMode mode, int width)
The class of the moving dialog base.
The class of the local data item.
static const QString LineEditStyle01
LineEdit.
static const QString ToolButtonStyle04
#define LRC_FILE
Definition: musicobject.h:63
#define TTK_ERROR_STREAM(msg)
Definition: ttklogger.h:69