Skip to content

Commit

Permalink
fix #22022: Heading names for track panel
Browse files Browse the repository at this point in the history
  • Loading branch information
trig-ger committed Jul 26, 2013
1 parent 5bc5abc commit f97a0a1
Show file tree
Hide file tree
Showing 7 changed files with 72 additions and 35 deletions.
21 changes: 17 additions & 4 deletions mscore/importmidi_data.cpp
Expand Up @@ -9,9 +9,14 @@ void MidiData::setTracksData(const QString &fileName, const QList<TrackData> &tr
data[fileName].tracksData = tracksData;
}

void MidiData::setTableViewData(const QString &fileName, const QByteArray &tableViewData)
void MidiData::saveHHeaderState(const QString &fileName, const QByteArray &headerData)
{
data[fileName].tableViewData = tableViewData;
data[fileName].HHeaderData = headerData;
}

void MidiData::saveVHeaderState(const QString &fileName, const QByteArray &headerData)
{
data[fileName].VHeaderData = headerData;
}

void MidiData::excludeFile(const QString &fileName)
Expand All @@ -27,12 +32,20 @@ QList<TrackData> MidiData::tracksData(const QString &fileName) const
return it.value().tracksData;
}

QByteArray MidiData::tableViewData(const QString &fileName) const
QByteArray MidiData::HHeaderData(const QString &fileName) const
{
auto it = data.find(fileName);
if (it == data.end())
return QByteArray();
return it.value().HHeaderData;
}

QByteArray MidiData::VHeaderData(const QString &fileName) const
{
auto it = data.find(fileName);
if (it == data.end())
return QByteArray();
return it.value().tableViewData;
return it.value().VHeaderData;
}

int MidiData::selectedRow(const QString &fileName) const
Expand Down
9 changes: 6 additions & 3 deletions mscore/importmidi_data.h
Expand Up @@ -12,10 +12,12 @@ class MidiData
{
public:
void setTracksData(const QString &fileName, const QList<TrackData> &tracksData);
void setTableViewData(const QString &fileName, const QByteArray &tableViewData);
void saveHHeaderState(const QString &fileName, const QByteArray &headerData);
void saveVHeaderState(const QString &fileName, const QByteArray &headerData);
void excludeFile(const QString &fileName);
QList<TrackData> tracksData(const QString &fileName) const;
QByteArray tableViewData(const QString &fileName) const;
QByteArray HHeaderData(const QString &fileName) const;
QByteArray VHeaderData(const QString &fileName) const;
int selectedRow(const QString &fileName) const;
void setSelectedRow(const QString &fileName, int row);
void setMidiFile(const QString &fileName, const MidiFile &midiFile);
Expand All @@ -24,7 +26,8 @@ class MidiData
private:
struct MidiDataStore
{
QByteArray tableViewData;
QByteArray HHeaderData;
QByteArray VHeaderData;
QList<TrackData> tracksData;
int selectedRow = 0;
MidiFile midiFile;
Expand Down
2 changes: 1 addition & 1 deletion mscore/importmidi_operations.h
Expand Up @@ -55,7 +55,7 @@ struct TrackOperations

struct TrackMeta
{
QString trackName;
QString staffName;
QString instrumentName;
};

Expand Down
33 changes: 26 additions & 7 deletions mscore/importmidi_panel.cpp
Expand Up @@ -73,7 +73,7 @@ class CustomHorizHeaderView : public QHeaderView
{
auto sz = QHeaderView::sectionSizeFromContents(logicalIndex);
const int EXTRA_SPACE = 35;
if (logicalIndex == TrackCol::TRACK_NAME || logicalIndex == TrackCol::INSTRUMENT)
if (logicalIndex == TrackCol::STAFF_NAME || logicalIndex == TrackCol::INSTRUMENT)
return QSize(sz.width() + EXTRA_SPACE, sz.height());
else
return sz;
Expand Down Expand Up @@ -103,7 +103,7 @@ void ImportMidiPanel::tweakUi()
QHeaderView::ResizeToContents);
ui->tableViewTracks->horizontalHeader()->setResizeMode(TrackCol::DO_IMPORT,
QHeaderView::ResizeToContents);
ui->tableViewTracks->horizontalHeader()->setResizeMode(TrackCol::TRACK_NAME,
ui->tableViewTracks->horizontalHeader()->setResizeMode(TrackCol::STAFF_NAME,
QHeaderView::ResizeToContents);
ui->tableViewTracks->horizontalHeader()->setResizeMode(TrackCol::INSTRUMENT,
QHeaderView::Stretch);
Expand Down Expand Up @@ -209,15 +209,18 @@ bool ImportMidiPanel::isMidiFile(const QString &fileName)

void ImportMidiPanel::saveTableViewState(const QString &fileName)
{
QByteArray tableViewData = ui->tableViewTracks->verticalHeader()->saveState();
preferences.midiImportOperations.midiData().setTableViewData(fileName, tableViewData);
QByteArray hData = ui->tableViewTracks->horizontalHeader()->saveState();
QByteArray vData = ui->tableViewTracks->verticalHeader()->saveState();
preferences.midiImportOperations.midiData().saveHHeaderState(fileName, hData);
preferences.midiImportOperations.midiData().saveVHeaderState(fileName, vData);
}

void ImportMidiPanel::restoreTableViewState(const QString &fileName)
{
QByteArray tableViewData
= preferences.midiImportOperations.midiData().tableViewData(fileName);
ui->tableViewTracks->verticalHeader()->restoreState(tableViewData);
QByteArray hData = preferences.midiImportOperations.midiData().HHeaderData(fileName);
QByteArray vData = preferences.midiImportOperations.midiData().VHeaderData(fileName);
ui->tableViewTracks->horizontalHeader()->restoreState(hData);
ui->tableViewTracks->verticalHeader()->restoreState(vData);
}

void ImportMidiPanel::setMidiPrefOperations(const QList<TrackData> &trackData)
Expand Down Expand Up @@ -253,6 +256,21 @@ void ImportMidiPanel::setMidiPrefOperations(const QString &fileName)
setMidiPrefOperations(trackData);
}

void ImportMidiPanel::showOrHideStaffNameCol(const QList<TrackMeta> &tracksMeta)
{
bool emptyName = true;
for (const auto &meta: tracksMeta) {
if (!meta.staffName.isEmpty()) {
emptyName = false;
break;
}
}
if (emptyName)
ui->tableViewTracks->horizontalHeader()->hideSection(TrackCol::STAFF_NAME);
else
ui->tableViewTracks->horizontalHeader()->showSection(TrackCol::STAFF_NAME);
}

void ImportMidiPanel::setMidiFile(const QString &fileName)
{
if (reopenInProgress)
Expand All @@ -270,6 +288,7 @@ void ImportMidiPanel::setMidiFile(const QString &fileName)
clearMidiPrefOperations();
QList<TrackMeta> tracksMeta(extractMidiTracksMeta(fileName));
tracksModel->reset(tracksMeta);
showOrHideStaffNameCol(tracksMeta);
operationsModel->reset(tracksMeta.size());
for (int i = 0; i != tracksModel->trackCount(); ++i)
trackData.push_back(tracksModel->trackData(i));
Expand Down
4 changes: 3 additions & 1 deletion mscore/importmidi_panel.h
Expand Up @@ -15,6 +15,7 @@ class TracksModel;
class OperationsModel;
class OperationsDelegate;
struct TrackData;
struct TrackMeta;

class ImportMidiPanel : public QWidget
{
Expand All @@ -30,7 +31,7 @@ class ImportMidiPanel : public QWidget
void setPrefferedVisible(bool visible);
void setMidiPrefOperations(const QString &fileName);

private slots:
private slots:
void updateUi();
void onCurrentTrackChanged(const QModelIndex &currentIndex);
void onOperationChanged(const QModelIndex &index);
Expand All @@ -52,6 +53,7 @@ class ImportMidiPanel : public QWidget
void setMidiPrefOperations(const QList<TrackData> &trackData);
void clearMidiPrefOperations();
bool isMidiFileExists() const;
void showOrHideStaffNameCol(const QList<TrackMeta> &tracksMeta);

Ui::ImportMidiPanel *ui;
QTimer *updateUiTimer;
Expand Down
32 changes: 16 additions & 16 deletions mscore/importmidi_trmodel.cpp
Expand Up @@ -17,13 +17,13 @@ void TracksModel::reset(const QList<TrackMeta> &tracksMeta)
tracksData_.clear();
int i = 0;
for (const auto &meta: tracksMeta) {
QString trackName = meta.trackName.isEmpty()
? "-" : meta.trackName;
QString staffName = meta.staffName.isEmpty()
? "-" : meta.staffName;
QString instrumentName = meta.instrumentName.isEmpty()
? "-" : meta.instrumentName;
TrackOperations ops; // initialized by default values - see ctor
ops.reorderedIndex = i++;
tracksData_.push_back({{trackName, instrumentName}, ops});
tracksData_.push_back({{staffName, instrumentName}, ops});
}
endResetModel();
}
Expand Down Expand Up @@ -336,10 +336,10 @@ QVariant TracksModel::data(const QModelIndex &index, int role) const
if (trackIndex == -1)
return "All";
return trackIndex + 1;
case TrackCol::TRACK_NAME:
case TrackCol::STAFF_NAME:
if (trackIndex == -1)
return "";
return tracksData_[trackIndex].meta.trackName;
return tracksData_[trackIndex].meta.staffName;
case TrackCol::INSTRUMENT:
if (trackIndex == -1)
return "";
Expand Down Expand Up @@ -383,15 +383,15 @@ bool TracksModel::setData(const QModelIndex &index, const QVariant &value, int r
bool result = false;
int trackIndex = trackIndexFromRow(index.row());

if (trackIndex == -1) { // all tracks row
if (trackIndex == -1) { // all tracks row
if (index.column() == TrackCol::DO_IMPORT && role == Qt::CheckStateRole) {
for (auto &trackData: tracksData_)
trackData.opers.doImport = value.toBool();
result = true;
}
if (result) {
// update checkboxes of all tracks
// because we've changed option for all tracks simultaneously
// update checkboxes of all tracks
// because we've changed option for all tracks simultaneously
auto begIndex = this->index(0, TrackCol::DO_IMPORT);
auto endIndex = this->index(rowCount(QModelIndex()), TrackCol::DO_IMPORT);
emit dataChanged(begIndex, endIndex);
Expand All @@ -406,9 +406,9 @@ bool TracksModel::setData(const QModelIndex &index, const QVariant &value, int r
result = true;
}
if (result) {
// update checkbox of current track row
// update checkbox of current track row
emit dataChanged(index, index);
// update checkbox of all tracks row
// update checkbox of all tracks row
auto allIndex = this->index(0, TrackCol::DO_IMPORT);
emit dataChanged(allIndex, allIndex);
}
Expand All @@ -420,14 +420,14 @@ QVariant TracksModel::headerData(int section, Qt::Orientation orientation, int r
{
if (orientation == Qt::Horizontal && role == Qt::DisplayRole) {
switch (section) {
case TrackCol::DO_IMPORT:
return "Import";
case TrackCol::TRACK_NUMBER:
return "Track";
case TrackCol::DO_IMPORT:
return "Import?";
case TrackCol::TRACK_NAME:
return "Name";
case TrackCol::STAFF_NAME:
return "Staff Name";
case TrackCol::INSTRUMENT:
return "Instrument";
return "Sound";
default:
break;
}
Expand All @@ -454,7 +454,7 @@ TrackData* TracksModel::trackDataFromIndex(const QModelIndex &index)

bool TracksModel::isMappingRowToTrackValid(int row) const
{
if (trackCount_ > 1) // first row is reserved for all tracks
if (trackCount_ > 1) // first row is reserved for all tracks
return (row > 0 && row <= trackCount_);
return row >= 0 && row < trackCount_;
}
Expand Down
6 changes: 3 additions & 3 deletions mscore/importmidi_trmodel.h
Expand Up @@ -13,9 +13,9 @@ struct DefinedTrackOperations;

struct TrackCol {
enum {
TRACK_NUMBER = 0,
DO_IMPORT,
TRACK_NAME,
DO_IMPORT = 0,
TRACK_NUMBER,
STAFF_NAME,
INSTRUMENT,
COL_COUNT
};
Expand Down

0 comments on commit f97a0a1

Please sign in to comment.