File indexing completed on 2024-04-21 04:48:10

0001 /* AUDEX CDDA EXTRACTOR
0002  * SPDX-FileCopyrightText: Copyright (C) 2007 Marco Nelles
0003  * <https://userbase.kde.org/Audex>
0004  *
0005  * SPDX-License-Identifier: GPL-3.0-or-later
0006  */
0007 
0008 #include "commandwizarddialog.h"
0009 #include "dialogs/textviewdialog.h"
0010 #include "utils/schemeparser.h"
0011 
0012 #include <QDialogButtonBox>
0013 #include <QVBoxLayout>
0014 
0015 CommandWizardDialog::CommandWizardDialog(const QString &command, QWidget *parent)
0016     : QDialog(parent)
0017 {
0018     Q_UNUSED(parent);
0019 
0020     setWindowTitle(i18n("Command Scheme Wizard"));
0021 
0022     auto *mainLayout = new QVBoxLayout;
0023     setLayout(mainLayout);
0024 
0025     QDialogButtonBox *buttonBox = new QDialogButtonBox(QDialogButtonBox::Ok | QDialogButtonBox::Cancel | QDialogButtonBox::Apply);
0026     okButton = buttonBox->button(QDialogButtonBox::Ok);
0027     applyButton = buttonBox->button(QDialogButtonBox::Apply);
0028     okButton->setDefault(true);
0029     okButton->setShortcut(Qt::CTRL | Qt::Key_Return);
0030     connect(buttonBox, &QDialogButtonBox::accepted, this, &CommandWizardDialog::slotAccepted);
0031     connect(buttonBox, &QDialogButtonBox::rejected, this, &CommandWizardDialog::reject);
0032     connect(applyButton, &QPushButton::clicked, this, &CommandWizardDialog::slotApplied);
0033 
0034     QWidget *widget = new QWidget(this);
0035     mainLayout->addWidget(widget);
0036     mainLayout->addWidget(buttonBox);
0037     ui.setupUi(widget);
0038 
0039     help_dialog = new TextViewDialog(SchemeParser::helpHTMLDoc(2), i18n("Command scheme help"), this);
0040 
0041     ui.qlineedit_command->setText(command);
0042     connect(ui.qlineedit_command, SIGNAL(textEdited(const QString &)), this, SLOT(trigger_changed()));
0043     connect(ui.qlineedit_command, SIGNAL(textChanged(const QString &)), this, SLOT(update_example()));
0044     ui.qlineedit_command->setCursorPosition(0);
0045 
0046     connect(ui.kurllabel_help, SIGNAL(leftClickedUrl()), this, SLOT(help()));
0047 
0048     connect(ui.kpushbutton_albumartist, SIGNAL(clicked()), this, SLOT(insAlbumArtist()));
0049     connect(ui.kpushbutton_albumtitle, SIGNAL(clicked()), this, SLOT(insAlbumTitle()));
0050     connect(ui.kpushbutton_trackartist, SIGNAL(clicked()), this, SLOT(insTrackArtist()));
0051     connect(ui.kpushbutton_tracktitle, SIGNAL(clicked()), this, SLOT(insTrackTitle()));
0052     connect(ui.kpushbutton_trackno, SIGNAL(clicked()), this, SLOT(insTrackNo()));
0053     connect(ui.kpushbutton_cdno, SIGNAL(clicked()), this, SLOT(insCDNo()));
0054     connect(ui.kpushbutton_date, SIGNAL(clicked()), this, SLOT(insDate()));
0055     connect(ui.kpushbutton_genre, SIGNAL(clicked()), this, SLOT(insGenre()));
0056     connect(ui.kpushbutton_cover_file, SIGNAL(clicked()), this, SLOT(insCoverFile()));
0057     connect(ui.kpushbutton_nooftracks, SIGNAL(clicked()), this, SLOT(insNoOfTracks()));
0058     connect(ui.kpushbutton_input_file, SIGNAL(clicked()), this, SLOT(insInFile()));
0059     connect(ui.kpushbutton_output_file, SIGNAL(clicked()), this, SLOT(insOutFile()));
0060 
0061     this->command = command;
0062 
0063     applyButton->setEnabled(false);
0064 
0065     update_example();
0066 }
0067 
0068 CommandWizardDialog::~CommandWizardDialog()
0069 {
0070     if (help_dialog != nullptr) {
0071         help_dialog->close();
0072         delete help_dialog;
0073         help_dialog = nullptr;
0074     }
0075 }
0076 
0077 void CommandWizardDialog::slotAccepted()
0078 {
0079     save();
0080     accept();
0081 }
0082 
0083 void CommandWizardDialog::slotApplied()
0084 {
0085     save();
0086 }
0087 
0088 void CommandWizardDialog::trigger_changed()
0089 {
0090     if (ui.qlineedit_command->text() != command) {
0091         applyButton->setEnabled(true);
0092         return;
0093     }
0094     applyButton->setEnabled(false);
0095 }
0096 
0097 void CommandWizardDialog::help()
0098 {
0099     help_dialog->showNormal();
0100 }
0101 
0102 void CommandWizardDialog::insAlbumArtist()
0103 {
0104     QString text = ui.qlineedit_command->text();
0105     text.insert(ui.qlineedit_command->cursorPosition(), '$' + QString(VAR_ALBUM_ARTIST));
0106     ui.qlineedit_command->setText(text);
0107     update_example();
0108 }
0109 
0110 void CommandWizardDialog::insAlbumTitle()
0111 {
0112     QString text = ui.qlineedit_command->text();
0113     text.insert(ui.qlineedit_command->cursorPosition(), '$' + QString(VAR_ALBUM_TITLE));
0114     ui.qlineedit_command->setText(text);
0115     update_example();
0116 }
0117 
0118 void CommandWizardDialog::insTrackArtist()
0119 {
0120     QString text = ui.qlineedit_command->text();
0121     text.insert(ui.qlineedit_command->cursorPosition(), '$' + QString(VAR_TRACK_ARTIST));
0122     ui.qlineedit_command->setText(text);
0123     update_example();
0124 }
0125 
0126 void CommandWizardDialog::insTrackTitle()
0127 {
0128     QString text = ui.qlineedit_command->text();
0129     text.insert(ui.qlineedit_command->cursorPosition(), '$' + QString(VAR_TRACK_TITLE));
0130     ui.qlineedit_command->setText(text);
0131     update_example();
0132 }
0133 
0134 void CommandWizardDialog::insTrackNo()
0135 {
0136     QString text = ui.qlineedit_command->text();
0137     text.insert(ui.qlineedit_command->cursorPosition(), '$' + QString(VAR_TRACK_NO));
0138     ui.qlineedit_command->setText(text);
0139     update_example();
0140 }
0141 
0142 void CommandWizardDialog::insCDNo()
0143 {
0144     QString text = ui.qlineedit_command->text();
0145     text.insert(ui.qlineedit_command->cursorPosition(), '$' + QString(VAR_CD_NO));
0146     ui.qlineedit_command->setText(text);
0147     update_example();
0148 }
0149 
0150 void CommandWizardDialog::insDate()
0151 {
0152     QString text = ui.qlineedit_command->text();
0153     text.insert(ui.qlineedit_command->cursorPosition(), '$' + QString(VAR_DATE));
0154     ui.qlineedit_command->setText(text);
0155     update_example();
0156 }
0157 
0158 void CommandWizardDialog::insGenre()
0159 {
0160     QString text = ui.qlineedit_command->text();
0161     text.insert(ui.qlineedit_command->cursorPosition(), '$' + QString(VAR_GENRE));
0162     ui.qlineedit_command->setText(text);
0163     update_example();
0164 }
0165 
0166 void CommandWizardDialog::insCoverFile()
0167 {
0168     QString text = ui.qlineedit_command->text();
0169     text.insert(ui.qlineedit_command->cursorPosition(), '$' + QString(VAR_COVER_FILE));
0170     ui.qlineedit_command->setText(text);
0171     update_example();
0172 }
0173 
0174 void CommandWizardDialog::insNoOfTracks()
0175 {
0176     QString text = ui.qlineedit_command->text();
0177     text.insert(ui.qlineedit_command->cursorPosition(), QString("$" VAR_NO_OF_TRACKS));
0178     ui.qlineedit_command->setText(text);
0179     update_example();
0180 }
0181 
0182 void CommandWizardDialog::insInFile()
0183 {
0184     QString text = ui.qlineedit_command->text();
0185     text.insert(ui.qlineedit_command->cursorPosition(), '$' + QString(VAR_INPUT_FILE));
0186     ui.qlineedit_command->setText(text);
0187     update_example();
0188 }
0189 
0190 void CommandWizardDialog::insOutFile()
0191 {
0192     QString text = ui.qlineedit_command->text();
0193     text.insert(ui.qlineedit_command->cursorPosition(), '$' + QString(VAR_OUTPUT_FILE));
0194     ui.qlineedit_command->setText(text);
0195     update_example();
0196 }
0197 
0198 bool CommandWizardDialog::save()
0199 {
0200     command = ui.qlineedit_command->text();
0201     applyButton->setEnabled(false);
0202     return true;
0203 }
0204 
0205 void CommandWizardDialog::update_example()
0206 {
0207     SchemeParser schemeparser;
0208     QString filename = schemeparser.parsePerTrackCommandScheme(ui.qlineedit_command->text(),
0209                                                                "/tmp/tmp.wav",
0210                                                                QString("%1/music/Meat Loaf/02 - Meat Loaf - Blind As A Bat.ogg").arg(QDir::homePath()),
0211                                                                2,
0212                                                                1,
0213                                                                1,
0214                                                                12,
0215                                                                "Meat Loaf",
0216                                                                "Bat Out Of Hell III",
0217                                                                "Meat Loaf",
0218                                                                "Blind As A Bat",
0219                                                                "2006",
0220                                                                "Rock",
0221                                                                "AA6Q72000047",
0222                                                                "ogg",
0223                                                                QImage(),
0224                                                                QDir::tempPath(),
0225                                                                "LAME 3.100",
0226                                                                true);
0227     ui.qlineedit_album_example->setText(filename);
0228     ui.qlineedit_album_example->setCursorPosition(0);
0229     filename =
0230         schemeparser.parsePerTrackCommandScheme(ui.qlineedit_command->text(),
0231                                                 "/tmp/tmp.wav",
0232                                                 QString("%1/music/Alternative Hits/Volume 4/04 - Wolfsheim - Approaching Lightspeed.ogg").arg(QDir::homePath()),
0233                                                 4,
0234                                                 2,
0235                                                 1,
0236                                                 18,
0237                                                 "Alternative Hits",
0238                                                 "Volume 4",
0239                                                 "Wolfsheim",
0240                                                 "Approaching Lightspeed",
0241                                                 "2003",
0242                                                 "Darkwave",
0243                                                 "AA6Q72000047",
0244                                                 "ogg",
0245                                                 QImage(),
0246                                                 QDir::tempPath(),
0247                                                 "LAME 3.100",
0248                                                 true);
0249     ui.qlineedit_sampler_example->setText(filename);
0250     ui.qlineedit_sampler_example->setCursorPosition(0);
0251 }