protected override void VesselSelected(string filePath, CraftBrowserDialog.LoadType loadType)
        {
            if (filePath == _selectedCraftFilePath)
            {
                return;
            }

            // Clear out previously selected vessel
            _cachedCostData  = null;
            _cachedResources = null;
            _window.ShipSelected(null);

            _selectedCraftFilePath = filePath;
            _craftConfigNode       = ConfigNode.Load(filePath);
            if (_craftConfigNode == null || _craftConfigNode.CountNodes < 1)
            {
                _window.ShowAlert(_invalidVesselErrorText);
                return;
            }

            var error = string.Empty;

            if (!ShipConstruction.AllPartsFound(_craftConfigNode, ref error))
            {
                Debug.LogError($"[KONSTRUCTION] Failed to load vessel at {_selectedCraftFilePath}");
                Debug.LogError($"[KONSTRUCTION] {error}");
                _window.ShowAlert(_unavailablePartsErrorText);
                return;
            }

            var protoVessel = CreateProtoVessel();

            if (protoVessel == null)
            {
                _window.ShowAlert(_invalidVesselErrorText);
                return;
            }
            else if (_hasLaunchClamp)
            {
                _window.ShowAlert(_launchClampErrorText);
                return;
            }
            _cachedProtoVessel = protoVessel;

            var partResources = GetResourceCosts();

            var konstructorMetadata = new KonstructorMetadata(partResources);
            var shipName            = Localizer.Format(_craftConfigNode.GetValue("ship"));
            var shipMetadata        = new ShipMetadata(
                shipName,
                $"{_dryMassText}: {_cachedDryMass:N1} t",
                $"{_dryCostText}: {_cachedFundsCost:N0}",
                konstructorMetadata,
                _cachedThumbnail);

            _window.ShipSelected(shipMetadata);
        }