aboutsummaryrefslogblamecommitdiff
path: root/qmidiplayer-desktop/qmpinfowindow.cpp
blob: 654c8f4e5b2028037a97ca127636c679ea84b7a6 (plain) (tree)
1
2
3
4
5
6
7
8
9
                     


                             
                                
 


                                                      

                                               

                             
 








                                                        



                               


                                                                      

 

                                              


                                                                  
 

                                            

                                                                  

 
 

                                




































                                                                                                                         
 

                                            


            
                        


              
                         


               
#include <QTextCodec>
#include "qmpinfowindow.hpp"
#include "ui_qmpinfowindow.h"
#include "qmpmainwindow.hpp"
#include "qmpsettingswindow.hpp"

const char *minors = "abebbbf c g d a e b f#c#g#d#a#";
const char *majors = "CbGbDbAbEbBbF C G D A E B F#C#";
const char *standards = "?  GM GM2GS XG ";

qmpInfoWindow::qmpInfoWindow(QWidget *parent) :
    QDialog(parent),
    ui(new Ui::qmpInfoWindow)
{
    ui->setupUi(this);
    qmpMainWindow::getInstance()->registerFunctionality(
        infof = new qmpInfoFunc(this),
        std::string("FileInfo"),
        tr("File Information").toStdString(),
        getThemedIconc(":/img/info.svg"),
        0,
        true
    );
}

qmpInfoWindow::~qmpInfoWindow()
{
    qmpMainWindow::getInstance()->unregisterFunctionality("FileInfo");
    delete infof;
    delete ui;
}

void qmpInfoWindow::closeEvent(QCloseEvent *e)
{
    setVisible(false);
    qmpMainWindow::getInstance()->setFuncState("FileInfo", false);
    e->accept();
}
void qmpInfoWindow::hideEvent(QHideEvent *e)
{
    qmpMainWindow::getInstance()->setFuncState("FileInfo", false);
    e->accept();
}


void qmpInfoWindow::updateInfo()
{
    char str[256];
    CMidiPlayer *player = qmpMainWindow::getInstance()->getPlayer();
    std::string textencoding = qmpMainWindow::getInstance()->getSettings()->getOptionEnumIntOptName("Midi/TextEncoding");
    ui->lbFileName->setText(QString("File name: ") + qmpMainWindow::getInstance()->getFileName());
    if (player->getTitle())
    {
        if (textencoding != "Unicode")
            ui->lbTitle->setText(QString("Title: ") +
                QTextCodec::codecForName(textencoding.c_str())->toUnicode(player->getTitle()));
        else
            ui->lbTitle->setText(QString("Title: ") + player->getTitle());
    }
    else ui->lbTitle->setText(QString("Title: "));
    if (player->getCopyright())
    {
        if (textencoding != "Unicode")
            ui->lbCopyright->setText(QString("Copyright: ") +
                QTextCodec::codecForName(textencoding.c_str())->toUnicode(player->getCopyright()));
        else
            ui->lbCopyright->setText(QString("Copyright: ") + player->getCopyright());
    }
    else ui->lbCopyright->setText(QString("Copyright: "));
    ui->lbTempo->setText(QString("Tempo: ") + QString::number(player->getTempo(), 'g', 5));
    int t, r;
    t = player->getCurrentKeySignature();
    r = (int8_t)((t >> 8) & 0xFF) + 7;
    strncpy(str, t & 0xFF ? minors + 2 * r : majors + 2 * r, 2);
    str[2] = '\0';
    ui->lbKeySig->setText(QString("Key Sig.: ") + str);
    player->getCurrentTimeSignature(&t, &r);
    sprintf(str, "Time Sig.: %d/%d", t, r);
    ui->lbTimeSig->setText(str);
    sprintf(str, "Note count: %u", player->getFileNoteCount());
    ui->lbNoteCount->setText(str);
    strncpy(str, standards + player->getFileStandard() * 3, 3);
    str[3] = '\0';
    ui->lbFileStandard->setText(QString("File standard: ") + str);
}

qmpInfoFunc::qmpInfoFunc(qmpInfoWindow *par)
{
    p = par;
}
void qmpInfoFunc::show()
{
    p->show();
}
void qmpInfoFunc::close()
{
    p->close();
}