/* -*- Mode: C++; tab-width: 2; indent-tabs-mode: nil; c-basic-offset: 2 -*- */ /*************************************************************************** * project.cc * * Sun May 6 11:38:11 CEST 2018 * Copyright 2018 Bent Bisballe Nyeng * deva@aasimon.org ****************************************************************************/ /* * This file is part of DrumGizmo. * * DrumGizmo is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2 of the License, or * (at your option) any later version. * * DrumGizmo is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with DrumGizmo; if not, write to the Free Software * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA. */ #include "project.h" #include #include Instrument::Instrument(Project& project, int id) : id(id) , project(project) { } int Instrument::getId() const { return id; } QString Instrument::getInstrumentName() const { return instrument_name; } void Instrument::setInstrumentName(const QString& instrument_name) { if(this->instrument_name == instrument_name) { return; } { Project::RAIIBulkUpdate bulkUpdate(project); this->instrument_name = instrument_name; } } QString Instrument::getMasterFile() const { return master_file; } void Instrument::setMasterFile(const QString& master_file) { if(this->master_file == master_file) { return; } { Project::RAIIBulkUpdate bulkUpdate(project); this->master_file = master_file; } } AudioFileList Instrument::getFileList() const { return file_list; } void Instrument::setFileList(const AudioFileList& file_list) { if(this->file_list == file_list) { return; } { Project::RAIIBulkUpdate bulkUpdate(project); this->file_list = file_list; } } void Project::bulkUpdateBegin() { ++update_count; } void Project::bulkUpdateEnd() { Q_ASSERT(update_count); --update_count; if(update_count == 0) { emit projectChanged(); } } QString Project::getProjectFile() const { return project_file; } void Project::setProjectFile(const QString& project_file) { this->project_file = project_file; } QString Project::getProjectName() const { return project_name; } void Project::setProjectName(const QString& project_name) { if(this->project_name == project_name) { return; } { RAIIBulkUpdate bulkUpdate(*this); this->project_name = project_name; } } QString Project::getRawFileRoot() const { return raw_file_root; } void Project::setRawFileRoot(const QString& raw_file_root) { if(this->raw_file_root == raw_file_root) { return; } { RAIIBulkUpdate bulkUpdate(*this); this->raw_file_root = raw_file_root; } } Instrument& Project::getInstrument(int id) { std::cout << "get " << id << std::endl; for(auto& instrument : instruments) { if(instrument.getId() == id) { return instrument; } } Q_ASSERT(false); // No such instrument id. } int Project::createInstrument() { RAIIBulkUpdate bulkUpdate(*this); instruments.emplace_back(*this, next_id); ++next_id; return instruments.back().getId(); } void Project::deleteInstrument(int id) { RAIIBulkUpdate bulkUpdate(*this); for(auto it = instruments.begin(); it != instruments.end(); ++it) { if((*it).getId() == id) { instruments.erase(it); return; } } Q_ASSERT(false); // No such instrument id. } QList Project::getInstrumentList() const { QList instrument_list; for(auto& instrument : instruments) { instrument_list.push_back(instrument.getId()); } return instrument_list; } void Project::reset() { RAIIBulkUpdate bulkUpdate(*this); setRawFileRoot(""); setProjectName(""); instruments.clear(); next_id = 0; }