HamBook – Rev

Subversion Repositories:
Rev:
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace HamBook.Radios.Generic
{
    public class CtcssMode
    {
        public int Mode { get; set; }

        public CtcssMode(string mode) : this()
        {
            Mode = Parse(mode);
        }

        public CtcssMode(int mode) : this()
        {
            Mode = Parse(mode);
        }

        public CtcssMode()
        {

        }

        public static bool TryParse(string mode, out CtcssMode ctcssMode)
        {
            switch (mode)
            {
                case "Off":
                case "Enc/Dec":
                case "Enc":
                    ctcssMode = new CtcssMode(mode);
                    return true;
                default:
                    ctcssMode = null;
                    return false;
            }
        }

        public static bool TryParse(int mode, out CtcssMode ctcssMode)
        {
            switch (mode)
            {
                case 0:
                case 1:
                case 2:
                    ctcssMode = new CtcssMode(mode);
                    return true;
                default:
                    ctcssMode = null;
                    return false;
            }
        }

        private int Parse(string mode)
        {
            switch (mode)
            {
                case "Off":
                    return 0;
                case "Enc/Dec":
                    return 1;
                case "Enc":
                    return 2;
                default:
                    throw new ArgumentException();
            }
        }

        private int Parse(int mode)
        {
            switch (mode)
            {
                case 0:
                case 1:
                case 2:
                    return mode;
                default:
                    throw new ArgumentException();
            }
        }

        public static implicit operator CtcssMode(string mode)
        {
            return new CtcssMode(mode);
        }

        public static implicit operator string(CtcssMode ctcssMode)
        {
            switch (ctcssMode.Mode)
            {
                case 0:
                    return "Off";
                case 1:
                    return "Enc/Dec";
                case 2:
                    return "Enc";
                default:
                    throw new ArgumentException();
            }
        }

        public static implicit operator CtcssMode(int mode)
        {
            return new CtcssMode(mode);
        }

        public static implicit operator int(CtcssMode ctcssMode)
        {
            return ctcssMode.Mode;
        }
    }
}