Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
49 changes: 16 additions & 33 deletions src/app/Application.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -132,17 +132,9 @@ void Application::initialize() {
m_midiInputManager->loadFromSettings();
}

void Application::connectToMixer(const QString& type, const QString& host, int port) {
disconnectFromMixer();

m_mixer = ProtocolFactory::create(type, this);
if (!m_mixer) {
return;
}

void Application::setupMixerConnection(const QString& type, const QString& host, int port) {
m_playbackEngine->setMixer(m_mixer);

// setup connection logging
m_connectionLogBridge->setConnectionContext(type, host, port);
m_connectionLogBridge->attachToMixer(m_mixer);
m_appLogger->logConnectionAttempt(type, host, port);
Expand All @@ -160,38 +152,29 @@ void Application::connectToMixer(const QString& type, const QString& host, int p
settings.endGroup();
}

void Application::connectToDiscoveredConsole(const DiscoveredConsole& console) {
if (!console.isValid()) {
return;
}

void Application::connectToMixer(const QString& type, const QString& host, int port) {
disconnectFromMixer();

m_mixer = ProtocolFactory::create(console, this);
if (!m_mixer) {
m_mixer = ProtocolFactory::create(type, this);
if (!m_mixer)
return;
}

m_playbackEngine->setMixer(m_mixer);
setupMixerConnection(type, host, port);
}

// setup connection logging
QString host = console.address.toString();
QString protocol = console.modelName;
m_connectionLogBridge->setConnectionContext(protocol, host, console.port);
m_connectionLogBridge->attachToMixer(m_mixer);
m_appLogger->logConnectionAttempt(protocol, host, console.port);
void Application::connectToDiscoveredConsole(const DiscoveredConsole& console) {
if (!console.isValid())
return;

connect(m_mixer, &MixerProtocol::connected, this, [this]() { emit mixerConnected(); });
connect(m_mixer, &MixerProtocol::disconnected, this, [this]() { emit mixerDisconnected(); });
disconnectFromMixer();

m_mixer->connect(host, console.port);
m_mixer = ProtocolFactory::create(console, this);
if (!m_mixer)
return;

QSettings settings;
settings.beginGroup("LastMixer");
settings.setValue("host", host);
settings.setValue("type", console.toCapabilities().protocolId);
settings.setValue("port", console.port);
settings.endGroup();
setupMixerConnection(console.toCapabilities().protocolId,
console.address.toString(),
console.port);
}

void Application::disconnectFromMixer() {
Expand Down
2 changes: 2 additions & 0 deletions src/app/Application.h
Original file line number Diff line number Diff line change
Expand Up @@ -83,6 +83,8 @@ class Application : public QObject {
void mixerDisconnected();

private:
void setupMixerConnection(const QString& type, const QString& host, int port);

static Application* s_instance;

Show* m_show;
Expand Down
11 changes: 5 additions & 6 deletions src/core/CueValidator.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -7,7 +7,7 @@ namespace OpenMix {

CueValidator::CueValidator(QObject* parent) : QObject(parent) {}

ValidationResult CueValidator::validate(const Cue& cue, const CueList* cueList) const {
ValidationResult CueValidator::validate(const Cue& cue, const CueList* cueList) {
ValidationResult result;
result.valid = true;

Expand All @@ -21,20 +21,19 @@ ValidationResult CueValidator::validate(const Cue& cue, const CueList* cueList)
}

if (cue.macroExecutionMode() == MacroExecutionMode::Parallel) {
if (!detectConflictingFadeTargets(cue, cueList, result.issues)) {
}
detectConflictingFadeTargets(cue, cueList, result.issues);
}
}

if (!validateParameters(cue, result.issues)) {
result.valid = false;
}

emit const_cast<CueValidator*>(this)->validationCompleted(result);
emit validationCompleted(result);
return result;
}

ValidationResult CueValidator::validateAll(const CueList* cueList) const {
ValidationResult CueValidator::validateAll(const CueList* cueList) {
ValidationResult result;
result.valid = true;

Expand All @@ -61,7 +60,7 @@ ValidationResult CueValidator::validateAll(const CueList* cueList) const {
}
}

emit const_cast<CueValidator*>(this)->validationCompleted(result);
emit validationCompleted(result);
return result;
}

Expand Down
44 changes: 15 additions & 29 deletions src/core/CueValidator.h
Original file line number Diff line number Diff line change
Expand Up @@ -2,6 +2,7 @@

#include <QList>
#include <QObject>
#include <algorithm>
#include <QSet>
#include <QString>

Expand All @@ -25,37 +26,23 @@ struct ValidationResult {
QList<ValidationIssue> issues;

bool hasErrors() const {
for (const auto& issue : issues) {
if (issue.isError())
return true;
}
return false;
return std::any_of(issues.begin(), issues.end(),
[](const ValidationIssue& i) { return i.isError(); });
}

bool hasWarnings() const {
for (const auto& issue : issues) {
if (issue.isWarning())
return true;
}
return false;
return std::any_of(issues.begin(), issues.end(),
[](const ValidationIssue& i) { return i.isWarning(); });
}

int errorCount() const {
int count = 0;
for (const auto& issue : issues) {
if (issue.isError())
count++;
}
return count;
return static_cast<int>(std::count_if(issues.begin(), issues.end(),
[](const ValidationIssue& i) { return i.isError(); }));
}

int warningCount() const {
int count = 0;
for (const auto& issue : issues) {
if (issue.isWarning())
count++;
}
return count;
return static_cast<int>(std::count_if(issues.begin(), issues.end(),
[](const ValidationIssue& i) { return i.isWarning(); }));
}
};

Expand All @@ -65,21 +52,20 @@ class CueValidator : public QObject {
public:
explicit CueValidator(QObject* parent = nullptr);

ValidationResult validate(const Cue& cue, const CueList* cueList) const;
ValidationResult validateAll(const CueList* cueList) const;
ValidationResult validate(const Cue& cue, const CueList* cueList);
ValidationResult validateAll(const CueList* cueList);

signals:
void validationCompleted(const ValidationResult& result);

private:
bool validateMacroIds(const Cue& cue, const CueList* cueList,
QList<ValidationIssue>& issues) const;
bool validateParameters(const Cue& cue, QList<ValidationIssue>& issues) const;
bool detectCircularMacroReferences(const Cue& cue, const CueList* cueList,
QList<ValidationIssue>& issues) const;
bool detectConflictingFadeTargets(const Cue& cue, const CueList* cueList,
QList<ValidationIssue>& issues) const;

signals:
void validationCompleted(const ValidationResult& result);

private:
bool hasCircularReference(const QString& cueId, const CueList* cueList, QSet<QString>& visited,
QSet<QString>& recursionStack) const;
QSet<QString> collectMacroParameters(const Cue& cue, const CueList* cueList) const;
Expand Down
58 changes: 9 additions & 49 deletions src/core/OperationMode.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -24,61 +24,21 @@ QString OperationModeManager::modeString(AppMode mode) {
return tr("Unknown");
}

bool OperationModeManager::canEditCues() const {
bool OperationModeManager::requiresProgrammerMode(const QString& operation) {
if (m_mode != AppMode::Programmer) {
emit const_cast<OperationModeManager*>(this)->operationBlocked(tr("Edit cues"));
emit operationBlocked(operation);
return false;
}
return true;
}

bool OperationModeManager::canDeleteCues() const {
if (m_mode != AppMode::Programmer) {
emit const_cast<OperationModeManager*>(this)->operationBlocked(tr("Delete cues"));
return false;
}
return true;
}

bool OperationModeManager::canModifyShow() const {
if (m_mode != AppMode::Programmer) {
emit const_cast<OperationModeManager*>(this)->operationBlocked(tr("Modify show"));
return false;
}
return true;
}

bool OperationModeManager::canAddCues() const {
if (m_mode != AppMode::Programmer) {
emit const_cast<OperationModeManager*>(this)->operationBlocked(tr("Add cues"));
return false;
}
return true;
}

bool OperationModeManager::canRenumberCues() const {
if (m_mode != AppMode::Programmer) {
emit const_cast<OperationModeManager*>(this)->operationBlocked(tr("Renumber cues"));
return false;
}
return true;
}

bool OperationModeManager::canOpenShow() const {
if (m_mode != AppMode::Programmer) {
emit const_cast<OperationModeManager*>(this)->operationBlocked(tr("Open show"));
return false;
}
return true;
}

bool OperationModeManager::canNewShow() const {
if (m_mode != AppMode::Programmer) {
emit const_cast<OperationModeManager*>(this)->operationBlocked(tr("New show"));
return false;
}
return true;
}
bool OperationModeManager::canEditCues() { return requiresProgrammerMode(tr("Edit cues")); }
bool OperationModeManager::canDeleteCues() { return requiresProgrammerMode(tr("Delete cues")); }
bool OperationModeManager::canModifyShow() { return requiresProgrammerMode(tr("Modify show")); }
bool OperationModeManager::canAddCues() { return requiresProgrammerMode(tr("Add cues")); }
bool OperationModeManager::canRenumberCues() { return requiresProgrammerMode(tr("Renumber cues")); }
bool OperationModeManager::canOpenShow() { return requiresProgrammerMode(tr("Open show")); }
bool OperationModeManager::canNewShow() { return requiresProgrammerMode(tr("New show")); }

bool OperationModeManager::canSaveShow() const { return true; }

Expand Down
15 changes: 8 additions & 7 deletions src/core/OperationMode.h
Original file line number Diff line number Diff line change
Expand Up @@ -23,13 +23,13 @@ class OperationModeManager : public QObject {
QString modeString() const;
static QString modeString(AppMode mode);

bool canEditCues() const; // programmer only
bool canDeleteCues() const; // programmer only
bool canModifyShow() const; // programmer only
bool canAddCues() const; // programmer only
bool canRenumberCues() const; // programmer only
bool canOpenShow() const; // programmer only
bool canNewShow() const; // programmer only
bool canEditCues(); // programmer only
bool canDeleteCues(); // programmer only
bool canModifyShow(); // programmer only
bool canAddCues(); // programmer only
bool canRenumberCues(); // programmer only
bool canOpenShow(); // programmer only
bool canNewShow(); // programmer only
bool canSaveShow() const; // always (emergency save)
bool canGo() const; // always
bool canStop() const; // always
Expand Down Expand Up @@ -58,6 +58,7 @@ class OperationModeManager : public QObject {
void passwordRequired();

private:
bool requiresProgrammerMode(const QString& operation);
QString hashPassword(const QString& password) const;

AppMode m_mode = AppMode::Programmer;
Expand Down
3 changes: 1 addition & 2 deletions src/midi/MidiInputManager.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -11,7 +11,7 @@ namespace OpenMix {

MidiInputManager::MidiInputManager(QObject* parent) : QObject(parent) {
try {
m_midiIn = new RtMidiIn();
m_midiIn = std::make_unique<RtMidiIn>();
} catch (RtMidiError& error) {
qWarning() << "RtMidi initialization error:" << QString::fromStdString(error.getMessage());
}
Expand All @@ -24,7 +24,6 @@ MidiInputManager::MidiInputManager(QObject* parent) : QObject(parent) {

MidiInputManager::~MidiInputManager() {
closeDevice();
delete m_midiIn;
}

QVector<MidiDeviceInfo> MidiInputManager::availableDevices() const {
Expand Down
3 changes: 2 additions & 1 deletion src/midi/MidiInputManager.h
Original file line number Diff line number Diff line change
Expand Up @@ -4,6 +4,7 @@

#include <QObject>
#include <QTimer>
#include <memory>

class RtMidiIn;

Expand Down Expand Up @@ -80,7 +81,7 @@ class MidiInputManager : public QObject {

static void midiCallback(double timeStamp, std::vector<unsigned char>* message, void* userData);

RtMidiIn* m_midiIn = nullptr;
std::unique_ptr<RtMidiIn> m_midiIn;
bool m_deviceOpen = false;
QString m_currentDeviceName;
QString m_savedDeviceName;
Expand Down
2 changes: 0 additions & 2 deletions src/protocol/MixerProtocol.h
Original file line number Diff line number Diff line change
Expand Up @@ -56,6 +56,4 @@ class MixerProtocol : public QObject {
void sceneChanged(int sceneNumber);
};

MixerProtocol* createMixerProtocol(const QString& type, QObject* parent = nullptr);

} // namespace OpenMix
4 changes: 0 additions & 4 deletions src/protocol/ProtocolFactory.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -117,8 +117,4 @@ MixerCapabilities ProtocolFactory::capabilities(const QString& type) {
return MixerCapabilities::forProtocolId(type);
}

MixerProtocol* createMixerProtocol(const QString& type, QObject* parent) {
return ProtocolFactory::create(type, parent);
}

} // namespace OpenMix
Loading