예제 #1
0
        public void SetMoleculeSelected(int?moleculeID)
        {
            molecules.SelectedMoleculeID = moleculeID;

            foreach (KeyValuePair <int, MoleculeSettingsPanelListItem> item in moleculeListItems)
            {
                item.Value.SetHighlighted(false);
                UserInterfaceEvents.RaiseMoleculeSelected(item.Key, false);
            }

            if (moleculeID != null)
            {
                foreach (KeyValuePair <int, MoleculeSettingsPanelListItem> item in moleculeListItems)
                {
                    if (item.Key == molecules.SelectedMoleculeID)
                    {
                        item.Value.SetHighlighted(true);

                        // if molecule is hidden then dont raise event. When molecule is unhidden then an event will be raised instead
                        MoleculeSettings molecule = molecules.Get((int)moleculeID);
                        if (molecule != null && !molecule.Hidden)
                        {
                            UserInterfaceEvents.RaiseMoleculeSelected(item.Key, true);
                        }
                    }
                }
            }

            updateSelectedMoleculeInterfaceSettings();
        }
예제 #2
0
        public void MoleculeLoaded(int id, string name, string description, int atomCount, int residueCount)
        {
            if (molecules.Contains(id))
            {
                console.ShowMessage("Loaded file: " + name);

                MoleculeSettings settings = molecules.Get(id);
                settings.Name         = name;
                settings.Description  = description;
                settings.AtomCount    = atomCount;
                settings.ResidueCount = residueCount;
                settings.Loaded       = true;

                GameObject listItem = GameObject.Instantiate(moleculeListItemPrefab);
                listItem.transform.position   = Vector3.zero;
                listItem.transform.rotation   = Quaternion.identity;
                listItem.transform.localScale = Vector3.one;
                listItem.SetActive(true);
                listItem.transform.SetParent(moleculeListContent.transform, false);

                MoleculeSettingsPanelListItem item = listItem.GetComponent <MoleculeSettingsPanelListItem>();

                item.Initialise(id, settings.FileName, onMoleculeListItemClick, onMoleculeListItemDoubleClick);

                moleculeListItems.Add(id, item);
                numberMoleculeListItems();

                SetMoleculeSelected(id);
                onMoleculeListItemDoubleClick(id);

                updateSelectedMoleculeInterfaceSettings();
            }
        }
예제 #3
0
        public void UpdateFrameNumberInfo()
        {
            MoleculeSettings selectedMolecule = molecules.GetSelected();

            if (selectedMolecule.HasTrajectory)
            {
                int?frameNumber = selectedMolecule.CurrentTrajectoryFrameNumber;

                if (frameNumber == null)
                {
                    this.frameNumber.text = "-";
                }
                else
                {
                    this.frameNumber.text = (frameNumber + 1).ToString(); // trajectory indexes start at zero but display starts at 1
                }

                totalFrames.text = selectedMolecule.TrajectoryFrameCount.ToString();
            }
            else
            {
                frameNumber.text = "-";
                totalFrames.text = "-";
            }
        }
예제 #4
0
        // Settings file management methods below. These don't fit into the UserInterface or Molecule groups
        // so have left separately here. Could be moved into it's own class but the code but the code is minor
        // at the moment so have left here.

        private void saveSettingsFile(MoleculeSettings moleculeSettings, string saveFilePath)
        {
            SettingsFile settingsFile = new SettingsFile();

            settingsFile.StructureFilePath  = moleculeSettings.FilePath;
            settingsFile.TrajectoryFilePath = moleculeSettings.TrajectoryFilePath;
            settingsFile.RenderSettings     = moleculeSettings.RenderSettings;
            settingsFile.MoleculeTransform  = molecules.GetMoleculeTransform(moleculeSettings.ID);
            settingsFile.CameraTransform    = new SerializableTransform(sceneCamera.transform);

            try {
                fsSerializer serializer = new fsSerializer();
                fsData       data;
                serializer.TrySerialize <SettingsFile>(settingsFile, out data).AssertSuccessWithoutWarnings();
                string json = fsJsonPrinter.CompressedJson(data);

                if (!saveFilePath.EndsWith(Settings.SettingsFileExtension))
                {
                    saveFilePath += Settings.SettingsFileExtension;
                }

                File.WriteAllText(saveFilePath, json);
                userInterface.ShowConsoleMessage("Saved molecule settings to: " + saveFilePath);
            }
            catch (Exception e) {
                userInterface.ShowConsoleError("Error saving molecule settings: " + e.Message);
                return;
            }
        }
예제 #5
0
        public MoleculeSettings Add(string filePath)
        {
            lastMoleculeID++;
            MoleculeSettings molecule = new MoleculeSettings(lastMoleculeID, filePath);

            molecules[lastMoleculeID] = molecule;
            return(molecule);
        }
예제 #6
0
        public void OnResetPositionButton()
        {
            MoleculeSettings molecule = molecules.GetSelected();

            if (molecule == null)
            {
                return;
            }

            UserInterfaceEvents.RaiseResetMoleculeTransform(molecule.ID);
        }
예제 #7
0
        private void onSaveSettingsFileSubmitted(string fullPath)
        {
            MoleculeSettings molecule = molecules.GetSelected();

            if (molecule == null)
            {
                return;
            }

            UserInterfaceEvents.RaiseSaveMoleculeSettings(molecule, fullPath);
        }
예제 #8
0
 public void OnStopButton()
 {
     if (validMoleculeSelected())
     {
         animating = false;
         MoleculeSettings molecule = molecules.GetSelected();
         molecule.CurrentTrajectoryFrameNumber = null;
         UserInterfaceEvents.RaiseMoleculeRenderSettingsUpdated(molecule.ID, molecule.RenderSettings, molecule.CurrentTrajectoryFrameNumber);
         UpdateFrameNumberInfo();
     }
 }
예제 #9
0
        private bool validMoleculeSelected()
        {
            MoleculeSettings molecule = molecules.GetSelected();

            if (molecule == null || molecule.Hidden || !molecule.HasTrajectory)
            {
                return(false);
            }

            return(true);
        }
예제 #10
0
        private void loadRenderSettings(int moleculeID, MoleculeRenderSettings settings)
        {
            MoleculeSettings molecule = molecules.Get(moleculeID);

            if (molecule == null)
            {
                return;
            }

            molecule.RenderSettings = (MoleculeRenderSettings)settings;
            UserInterfaceEvents.RaiseMoleculeRenderSettingsUpdated(molecule.ID, molecule.RenderSettings, molecule.CurrentTrajectoryFrameNumber);
        }
예제 #11
0
        private void stepBackwardAnimation()
        {
            MoleculeSettings molecule = molecules.GetSelected();

            molecule.CurrentTrajectoryFrameNumber--;

            if (molecule.CurrentTrajectoryFrameNumber == null || molecule.CurrentTrajectoryFrameNumber < 0)
            {
                molecule.CurrentTrajectoryFrameNumber = molecule.TrajectoryFrameCount - 1;
            }

            UserInterfaceEvents.RaiseMoleculeRenderSettingsUpdated(molecule.ID, molecule.RenderSettings, molecule.CurrentTrajectoryFrameNumber);
            UpdateFrameNumberInfo();
        }
예제 #12
0
        public void UpdateSelectedMolecule()
        {
            if (isActiveAndEnabled)
            {
                selectedMolecule = molecules.GetSelected();

                if (selectedMolecule != null)
                {
                    selectedMoleculeText.text = "Selected molecule - " + selectedMolecule.FileName;
                }
                else
                {
                    selectedMoleculeText.text = "< no molecule selected >";
                }
            }
        }
예제 #13
0
        private void onConfirmLoadTransformsFromSettings(bool confirmed, object data = null)
        {
            MoleculeSettings molecule = molecules.GetSelected();

            if (molecule == null || data == null)
            {
                return;
            }

            try {
                UserInterfaceEvents.RaiseLoadMoleculeSettings(molecule.ID, (string)data, false, true, true, true, confirmed, loadRenderSettings);
            }
            catch (InvalidCastException) {
                // do nothing
            }
        }
        public void UpdateSelectedMolecule()
        {
            if (isActiveAndEnabled)
            {
                selectedMolecule = molecules.GetSelected();
                initialise();

                if (selectedMolecule != null)
                {
                    selectedMoleculeText.text = "Modifying settings for molecule  - " + selectedMolecule.FileName;
                }
                else
                {
                    selectedMoleculeText.text = "< no molecule selected >";
                }
            }
        }
예제 #15
0
        public void TrajectoryLoaded(int id, string filePath, int frameCount)
        {
            if (molecules.Contains(id))
            {
                console.ShowMessage("Loaded trajectory. Frame count: " + frameCount);

                MoleculeSettings settings = molecules.Get(id);
                settings.HasTrajectory                = true;
                settings.TrajectoryFilePath           = filePath;
                settings.TrajectoryFrameCount         = frameCount;
                settings.CurrentTrajectoryFrameNumber = null;

                loadTrajectoryButtonText.text = "Update Trajectory";

                updateSelectedMoleculeInterfaceSettings();
            }
        }
예제 #16
0
        private void onLoadRenderSettingsFileSubmitted(string fullPath)
        {
            MoleculeSettings molecule = molecules.GetSelected();

            if (molecule == null)
            {
                return;
            }

            if (!File.Exists(fullPath))
            {
                console.ShowError("Cannot load settings, file not found at " + fullPath);
                return;
            }

            confirmDialog.gameObject.SetActive(true);
            confirmDialog.Initialise("Load new camera position from settings file also?", onConfirmLoadTransformsFromSettings, fullPath);
        }
예제 #17
0
        public void OnSaveSettingsButton()
        {
            MoleculeSettings molecule = molecules.GetSelected();

            if (molecule == null)
            {
                return;
            }

            saveFileDialog.SetActive(true);
            SaveFileDialog dialog = saveFileDialog.GetComponent <SaveFileDialog>();
            List <string>  validFileExtensions = new List <string>()
            {
                Settings.SettingsFileExtension
            };

            dialog.Initialise(validFileExtensions, onSaveSettingsFileSubmitted);
        }
예제 #18
0
        private void onLoadMoleculeFileSubmitted(string filePath)
        {
            MoleculeSettings molecule = molecules.Add(filePath);

            if (interactionsPanel.MonitoringEnabled)
            {
                interactionsPanel.StopInteractions();
                console.ShowError("Stopped monitoring molecular interactions, loading molecule");
            }

            if (filePath.EndsWith(Settings.SettingsFileExtension))
            {
                UserInterfaceEvents.RaiseLoadMoleculeSettings(molecule.ID, filePath, true, true, true, true, true, loadRenderSettings);
            }
            else
            {
                UserInterfaceEvents.RaiseLoadMolecule(molecule.ID, filePath, molecule.RenderSettings);
            }
        }
        public void UpdateSelectedMolecule()
        {
            if (isActiveAndEnabled)
            {
                selectedMolecule = molecules.GetSelected();

                if (selectedMolecule != null)
                {
                    selectedMoleculeText.text = "Modifying settings for molecule  - " + selectedMolecule.FileName;
                    EnableSettings(true);
                    LoadSettings();
                }
                else
                {
                    selectedMoleculeText.text = "< no molecule selected >";
                    EnableSettings(false);
                    ClearSettings();
                }
            }
        }
예제 #20
0
        public void OnShowHideMoleculeButton()
        {
            MoleculeSettings molecule = molecules.GetSelected();

            if (molecule == null)
            {
                return;
            }

            if (hiddenMolecules.Contains(molecule.ID))
            {
                molecule.Hidden = false;
                UserInterfaceEvents.RaiseShowMolecule(molecule.ID);
                if (molecule.PendingRerender)
                {
                    UserInterfaceEvents.RaiseMoleculeRenderSettingsUpdated(molecule.ID, molecule.RenderSettings, molecule.CurrentTrajectoryFrameNumber);
                }

                UserInterfaceEvents.RaiseMoleculeSelected(molecule.ID, true);
                hiddenMolecules.Remove(molecule.ID);
            }
            else
            {
                molecule.Hidden = true;
                trajectoryControls.StopAnimation();
                UserInterfaceEvents.RaiseHideMolecule(molecule.ID);
                hiddenMolecules.Add(molecule.ID);

                if (interactionsPanel.MonitoringEnabled)
                {
                    interactionsPanel.StopInteractions();
                    console.ShowError("Stopped monitoring molecular interactions, hiding molecule");
                }

                UserInterfaceEvents.RaiseMoleculeSelected(molecule.ID, false);
            }

            updateSelectedMoleculeInterfaceSettings();
        }
예제 #21
0
        public void OnEndEditFrameInput()
        {
            Debug.Log("End frame input");

            try {
                int frameNumber = int.Parse(this.frameNumber.text);

                MoleculeSettings molecule = molecules.GetSelected();
                frameNumber           = Mathf.Clamp(frameNumber, 1, molecule.TrajectoryFrameCount);
                this.frameNumber.text = frameNumber.ToString();

                if (frameNumber != lastFrameNumber)
                {
                    Debug.Log("New frameNumber: " + frameNumber);
                    molecule.CurrentTrajectoryFrameNumber = frameNumber - 1;
                    UserInterfaceEvents.RaiseMoleculeRenderSettingsUpdated(molecule.ID, molecule.RenderSettings, molecule.CurrentTrajectoryFrameNumber);
                }
            }
            catch (Exception) {
                frameNumber.text = lastFrameNumber.ToString();
            }
        }
        public void UpdateSelectedMolecule()
        {
            if (isActiveAndEnabled)
            {
                selectedMolecule = molecules.GetSelected();

                if (selectedMolecule != null)
                {
                    selectedMoleculeText.text = "Modifying settings for molecule  - " + selectedMolecule.FileName;

                    if (primaryStructures.ContainsKey(selectedMolecule.ID))
                    {
                        PrimaryStructure primaryStructure = primaryStructures[selectedMolecule.ID];
                        initialiseResidueRenderSettings(primaryStructure);
                        showResidueNamesPanel(selectedMolecule.RenderSettings, primaryStructure);
                    }
                }
                else
                {
                    selectedMoleculeText.text = "< no molecule selected >";
                }
            }
        }
예제 #23
0
        private void updateSelectedMoleculeInterfaceSettings()
        {
            if (molecules.SelectedMoleculeID == null)
            {
                loadSettingsButton.interactable = false;
                loadSettingsButton.gameObject.SetActive(false);
                saveSettingsButton.interactable = false;
                saveSettingsButton.gameObject.SetActive(false);
                loadTrajectoryButton.interactable = false;
                loadTrajectoryButton.gameObject.SetActive(false);
                resetMoleculePositionButton.interactable = false;
                resetMoleculePositionButton.gameObject.SetActive(false);
                showHideMoleculeButton.interactable = false;
                showHideMoleculeButton.gameObject.SetActive(false);
                removeMoleculeButton.interactable = false;
                removeMoleculeButton.gameObject.SetActive(false);
                moleculeInfoPanel.SetActive(false);

                trajectoryControls.transform.gameObject.SetActive(false);
            }
            else
            {
                MoleculeSettings molecule = molecules.GetSelected();

                loadSettingsButton.interactable = true;
                loadSettingsButton.gameObject.SetActive(true);
                saveSettingsButton.interactable = true;
                saveSettingsButton.gameObject.SetActive(true);
                loadTrajectoryButton.interactable = true;
                loadTrajectoryButton.gameObject.SetActive(true);
                resetMoleculePositionButton.interactable = true;
                resetMoleculePositionButton.gameObject.SetActive(true);
                showHideMoleculeButton.interactable = true;
                showHideMoleculeButton.gameObject.SetActive(true);
                removeMoleculeButton.interactable = true;
                removeMoleculeButton.gameObject.SetActive(true);

                if (molecule.HasTrajectory)
                {
                    loadTrajectoryButtonText.text = "Update Trajectory";
                    trajectoryControls.transform.gameObject.SetActive(true);
                    trajectoryControls.UpdateFrameNumberInfo();
                }
                else
                {
                    loadTrajectoryButtonText.text = "Load Trajectory";
                    trajectoryControls.transform.gameObject.SetActive(false);
                }

                if (hiddenMolecules.Contains((int)molecule.ID))
                {
                    showHideMoleculeButtonText.text = "Show Molecule";
                }
                else
                {
                    showHideMoleculeButtonText.text = "Hide Molecule";
                }

                moleculeInfoPanel.SetActive(true);

                moleculePathText.text         = molecule.FilePath;
                moleculeHeaderText.text       = molecule.Description;
                moleculeAtomCountText.text    = molecule.AtomCount.ToString();
                moleculeResidueCountText.text = molecule.ResidueCount.ToString();
            }
        }