/* Copyright (C) 2013 * swift project Community / Contributors * * This file is part of swift project. It is subject to the license terms in the LICENSE file found in the top-level * directory of this distribution and at http://www.swift-project.org/license.html. No part of swift project, * including this file, may be copied, modified, propagated, or distributed except according to the terms * contained in the LICENSE file. */ #include "blackmisc/icon.h" #include "blackmisc/iconlist.h" #include "blackmisc/icons.h" #include "blackmisc/network/voicecapabilities.h" #include #include #include using namespace BlackMisc; namespace BlackMisc { namespace Network { CVoiceCapabilities::CVoiceCapabilities(const QString &flightPlanRemarks) { this->setFromFlightPlanRemarks(flightPlanRemarks); } QString CVoiceCapabilities::convertToQString(bool i18n) const { Q_UNUSED(i18n); static const QString v("voice"); static const QString t("text only"); static const QString r("voice listening only"); static const QString u("unknown"); switch (m_voiceCapabilities) { case Voice: return v; case TextOnly: return t; case VoiceReceivingOnly: return r; case Unknown: return u; default: break; } Q_ASSERT_X(false, Q_FUNC_INFO, "Illegal mode"); return u; } void CVoiceCapabilities::setFromFlightPlanRemarks(const QString &flightPlanRemarks) { // http://www.vatpac.org/cms/index.php?option=com_content&view=article&id=608&Itemid=213 // this function is very frequently called, so I put the most likely scenarios on top const QString r = flightPlanRemarks.toUpper().trimmed(); if (flightPlanRemarks.isEmpty()) { this->setCapabilities(Unknown); return; } if (r.contains("/V/")) { this->setCapabilities(Voice); return; } if (r.contains("/T/")) { this->setCapabilities(TextOnly); return; } if (r.contains("/R/")) { this->setCapabilities(VoiceReceivingOnly); return; } if (r.contains("/VOICE/")) { this->setCapabilities(Voice); return; } if (r.contains("/TEXT/")) { this->setCapabilities(TextOnly); return; } this->setCapabilities(Unknown); } CIcon CVoiceCapabilities::toIcon() const { switch (m_voiceCapabilities) { case Voice: return CIcon::iconByIndex(CIcons::NetworkCapabilityVoiceBackground); case TextOnly: return CIcon::iconByIndex(CIcons::NetworkCapabilityTextOnly); case VoiceReceivingOnly: return CIcon::iconByIndex(CIcons::NetworkCapabilityVoiceReceiveOnlyBackground); case Unknown: return CIcon::iconByIndex(CIcons::NetworkCapabilityUnknown); default: break; } Q_ASSERT_X(false, Q_FUNC_INFO, "Illegal mode"); return CIcon::iconByIndex(CIcons::NetworkCapabilityUnknown); // never reached } const CVoiceCapabilities &CVoiceCapabilities::fromVoiceCapabilities(CVoiceCapabilities::VoiceCapabilities capabilities) { static const CVoiceCapabilities u(CVoiceCapabilities::Unknown); static const CVoiceCapabilities to(CVoiceCapabilities::TextOnly); static const CVoiceCapabilities v(CVoiceCapabilities::Voice); static const CVoiceCapabilities vro(CVoiceCapabilities::VoiceReceivingOnly); switch (capabilities) { case CVoiceCapabilities::TextOnly: return to; case CVoiceCapabilities::Voice: return v; case CVoiceCapabilities::VoiceReceivingOnly: return vro; case CVoiceCapabilities::Unknown: return u; default: break; } Q_ASSERT_X(false, Q_FUNC_INFO, "Illegal mode"); return u; // normally never reached } CVoiceCapabilities CVoiceCapabilities::fromFlightPlanRemarks(const QString &remarks) { return CVoiceCapabilities(remarks); } const QList &CVoiceCapabilities::allCapabilities() { static const QList all({fromVoiceCapabilities(Unknown), fromVoiceCapabilities(Voice), fromVoiceCapabilities(VoiceReceivingOnly), fromVoiceCapabilities(TextOnly)}); return all; } } // namespace } // namespace