/// <summary> Main GUI function </summary>
        public override void OnInspectorGUI()
        {
            serializedObject.Update();

            m_editorUtils.Initialize(); // Do not remove this!

            m_editorUtils.Panel("GeneralPanel", GeneralPanel, true);
            m_editorUtils.Panel("GlobalSequencesPanel", GlobalSequencesPanel, true);
            m_editorUtils.Panel("OutputPanel", OutputPanel, true);

            if (EditorApplication.isPlaying)
            {
                AmbienceManager.GetSequences(ref GlobalSequences, ref AreaSequences);
                AllTracks     = AmbienceManager.GetTracks();
                GlobalBlocked = AmbienceManager.GetBlocked();
                if (AreaSequences.Count > 0)
                {
                    m_editorUtils.Panel("AreaAudioPanel", AreaAudioPanel, true);
                }
                if (GlobalSequences.Count > 0)
                {
                    m_editorUtils.Panel("AddedSequencesPanel", AddedSequencesPanel, true);
                }
                if (AllTracks.Count > 0)
                {
                    m_editorUtils.Panel("CurrentlyPlayingPanel", CurrentlyPlayingPanel, true);
                }
                if (GlobalBlocked.Count > 0)
                {
                    m_editorUtils.Panel("CurrentlyBlockedPanel", CurrentlyBlockedPanel, true);
                }
                m_editorUtils.Panel("ValuesPanel", ValuesPanel, true);
                m_editorUtils.Panel("EventsPanel", EventsPanel, true);
                EditorUtility.SetDirty(target);
            }

            Event currentEvent = Event.current;

            if (currentEvent.type == EventType.DragUpdated && DragAndDrop.objectReferences.Length > 0)
            {
                for (int x = 0; x < DragAndDrop.objectReferences.Length; ++x)
                {
                    if (DragAndDrop.objectReferences[x] is Sequence && string.IsNullOrEmpty((DragAndDrop.objectReferences[x] as Sequence).m_syncGroup))
                    {
                        DragAndDrop.visualMode = DragAndDropVisualMode.Link;
                        break;
                    }
                }
            }
            else if (currentEvent.type == EventType.DragPerform && DragAndDrop.objectReferences.Length > 0)
            {
                bool foundOne = false;
                for (int x = 0; x < DragAndDrop.objectReferences.Length; ++x)
                {
                    if (DragAndDrop.objectReferences[x] is Sequence)
                    {
                        Sequence seq = DragAndDrop.objectReferences[x] as Sequence;
                        m_globalSequences.InsertArrayElementAtIndex(m_globalSequences.arraySize);
                        m_globalSequences.GetArrayElementAtIndex(m_globalSequences.arraySize - 1).objectReferenceValue = seq;
                        foundOne = true;
                    }
                }
                if (foundOne)
                {
                    DragAndDrop.AcceptDrag();
                    currentEvent.Use();
                }
            }

            serializedObject.ApplyModifiedProperties();
        }