public override void Start()
        {
            base.Start();

            if (Parent == null)
            {
                ModDebug.Error(String.Format("Parent not set in {0}", this.GetType().Name));
                return;
            }

            width            = Parent.width;
            relativePosition = Vector3.zero;
            isVisible        = true;
            canFocus         = true;
            isInteractive    = true;;

            _drag.width            = width - 50;
            _drag.height           = height;
            _drag.relativePosition = Vector3.zero;
            _drag.target           = Parent;

            _icon.spriteName       = IconSprite;
            _icon.relativePosition = new Vector3(5, 10);

            _title.relativePosition = new Vector3(50, 13);
            _title.text             = TitleText;

            _close.relativePosition = new Vector3(width - 35, 2);
            _close.normalBgSprite   = "buttonclose";
            _close.hoveredBgSprite  = "buttonclosehover";
            _close.pressedBgSprite  = "buttonclosepressed";
            _close.eventClick      += (component, param) => Parent.Hide();
        }
        private void HookIntoNativeUI()
        {
            _busPanel   = UIUtil.FindUIComponent("BusPanel");
            _metroPanel = UIUtil.FindUIComponent("MetroPanel");
            _trainPanel = UIUtil.FindUIComponent("TrainPanel");
            _tramPanel  = UIUtil.FindUIComponent("TramPanel");

            _busBg   = UIUtil.FindUIComponent("BusBackground");
            _metroBg = UIUtil.FindUIComponent("MetroBackground");
            _trainBg = UIUtil.FindUIComponent("TrainBackground");
            _tramBg  = UIUtil.FindUIComponent("TramBackground");

            if (_busPanel == null || _busBg == null)
            {
                ModDebug.Error("Failed to locate BusPanel - could not hook into native UI.");
                return;
            }

            if (_metroPanel == null || _metroBg == null)
            {
                ModDebug.Error("Failed to locate MetroPanel - could not hook into native UI.");
                return;
            }

            if (_trainPanel == null || _trainBg == null)
            {
                ModDebug.Error("Failed to locate TrainPanel - could not hook into native UI.");
                return;
            }

            if (_tramPanel == null || _tramBg == null)
            {
                ModDebug.Error("Failed to locate TramPanel - could not hook into native UI.");
                return;
            }

            // extended bus hook
            _busPanel.eventClick      += BusPanelOnEventClick;
            _busPanel.eventMouseHover += BusPanelOnEventMouseHover;
            _busPanel.eventMouseLeave += BusPanelOnEventMouseLeave;

            // extended metro hook
            _metroPanel.eventClick      += MetroPanelOnEventClick;
            _metroPanel.eventMouseHover += MetroPanelOnEventMouseHover;
            _metroPanel.eventMouseLeave += MetroPanelOnEventMouseLeave;

            // extended train hook
            _trainPanel.eventClick      += TrainPanelOnEventClick;
            _trainPanel.eventMouseHover += TrainPanelOnEventMouseHover;
            _trainPanel.eventMouseLeave += TrainPanelOnEventMouseLeave;

            // extended tram hook
            _tramPanel.eventClick      += TramPanelOnEventClick;
            _tramPanel.eventMouseHover += TramPanelOnEventMouseHover;
            _tramPanel.eventMouseLeave += TramPanelOnEventMouseLeave;

            // hide all extended panels, when the transport info view gets closed
            _busPanel.parent.eventVisibilityChanged += InfoPanelOnEventVisibilityChanged;
        }