/// <summary>
        /// Creates a new schema: Clean the canvas (with CleanACS()) and reset the deployment
        /// model in the background. Open save dialog, if requested
        /// </summary>
        /// <param name="sender"></param>
        /// <param name="e"></param>
        private void NewSchema_Click(object sender, RoutedEventArgs e)
        {
            if (modelHasBeenEdited) {
                SaveQuestionDialog saveQuestion = new SaveQuestionDialog();
                saveQuestion.Owner = this;
                saveQuestion.ShowDialog();

                // Process message box results
                switch (saveQuestion.Result) {
                    case SaveQuestionDialog.save:
                        if (SaveLocalCommand(false) == true) {
                            CleanACS();
                            modelHasBeenEdited = false;
                        }
                        break;
                    case SaveQuestionDialog.dontSave:
                        CleanACS();
                        modelHasBeenEdited = false;
                        break;
                    case SaveQuestionDialog.cancel:
                        break;
                }
            }
            else {
                CleanACS();
            }
            SetSaveFile(null);
            deploymentModel.modelName = GenerateModelName();

            if (areStatus.Status == AREStatus.ConnectionStatus.Synchronised) {
                areStatus.Status = AREStatus.ConnectionStatus.Connected;
            }
            else if ((areStatus.Status == AREStatus.ConnectionStatus.Running) || (areStatus.Status == AREStatus.ConnectionStatus.Pause)) {
                areStatus.Status = AREStatus.ConnectionStatus.Synchronised;
                areStatus.Status = AREStatus.ConnectionStatus.Connected;
            }
        }
        /// <summary>
        /// Close Application. Before layout settings will be saved and the user
        /// will be asked to save the data model
        /// </summary>
        /// <param name="eventObject">Object of type CancelEventArgs or RoutedEventArgs</param>
        private void CloseCommand(object eventObject)
        {
            if (dockableComponentProperties.ContainerPane.Items.Count > 0) {
                dockableComponentProperties.ContainerPane.SelectedItem = dockableComponentProperties.ContainerPane.Items[0];
            }
            if (ini.IniReadValue("Options", "useAppDataFolder").Equals("true")) {
                dockManager.SaveLayout(Environment.GetFolderPath(System.Environment.SpecialFolder.ApplicationData) + "\\AsTeRICS\\ACS\\" + ini.IniReadValue("Layout", "layout_file"));
            } else {
                if (File.Exists(ini.IniReadValue("Layout", "layout_file"))) {
                    dockManager.SaveLayout(ini.IniReadValue("Layout", "layout_file"));
                } else {
                    dockManager.SaveLayout(AppDomain.CurrentDomain.BaseDirectory + ini.IniReadValue("Layout", "layout_file"));
                }
            }

            if (modelHasBeenEdited) {
                SaveQuestionDialog saveQuestion = new SaveQuestionDialog();
                saveQuestion.Owner = this;
                saveQuestion.ShowDialog();

                // Process message box results
                switch (saveQuestion.Result) {
                    case SaveQuestionDialog.save:
                        bool shouldSaveAs = false;
                        if (saveFile == null) shouldSaveAs = true;
                        if (SaveLocalCommand(shouldSaveAs) == true) {
                            StopStatusPolling();
                            if (!(eventObject is CancelEventArgs)) {
                                Application.Current.Shutdown();
                            }
                        }
                        else {
                            if (eventObject is CancelEventArgs) {
                                ((CancelEventArgs)eventObject).Cancel = true;
                            }
                        }
                        break;
                    case SaveQuestionDialog.dontSave:
                        StopStatusPolling();
                        if (!(eventObject is CancelEventArgs)) {
                            Application.Current.Shutdown();
                        }
                        break;
                    case SaveQuestionDialog.cancel:
                        if (eventObject is CancelEventArgs) {
                            ((CancelEventArgs)eventObject).Cancel = true;
                        }
                        break;
                }
            }
            else {
                StopStatusPolling();
                if (!(eventObject is CancelEventArgs)) {
                    Application.Current.Shutdown();
                }
            }
        }
        /// <summary>
        /// Download and install the bundle from the ARE
        /// </summary>
        /// <param name="sender"></param>
        /// <param name="e"></param>
        private void DownloadBundles_Click(object sender, RoutedEventArgs e)
        {
            Boolean doOverride = true;
            if (showOverrideComponentCollectionQuestion) {
                CustomMessageBox messageBox = new CustomMessageBox(Properties.Resources.BundleDownloadFromAREQuestion, Properties.Resources.BundleDownloadFromAREQuestionHeader, CustomMessageBox.messageType.Question, CustomMessageBox.resultType.YesNo);
                messageBox.Owner = this;
                messageBox.showCheckbox.IsChecked = showOverrideComponentCollectionQuestion;
                messageBox.ShowDialog();

                showOverrideComponentCollectionQuestion = (bool)messageBox.showCheckbox.IsChecked;
                if (showOverrideComponentCollectionQuestion) {
                    ini.IniWriteValue("Options", "showOverrideComponentCollectionQuestion", "true");
                } else {
                    ini.IniWriteValue("Options", "showOverrideComponentCollectionQuestion", "false");
                }
                doOverride = (bool)messageBox.DialogResult;
            }

            if (doOverride) {

                bool cont = true;
                if (modelHasBeenEdited) {
                    SaveQuestionDialog saveQuestion = new SaveQuestionDialog();
                    saveQuestion.Owner = this;
                    saveQuestion.ShowDialog();

                    // Process message box results
                    switch (saveQuestion.Result) {
                        case SaveQuestionDialog.save:
                            if (SaveLocalCommand(false) == true) {
                                CleanACS();
                                modelHasBeenEdited = false;
                            }
                            break;
                        case SaveQuestionDialog.dontSave:
                            CleanACS();
                            modelHasBeenEdited = false;
                            break;
                        case SaveQuestionDialog.cancel:
                            cont = false;
                            break;
                    }
                } else {
                    CleanACS();
                }
                if (cont) {

                    SetSaveFile(null);
                    deploymentModel.modelName = GenerateModelName();

                    try {
                        List<String> allBundles = asapiClient.getBundleDescriptors();
                        StreamWriter tempfile = new StreamWriter(System.IO.Path.GetTempPath() + "tempBundle.xml", false, System.Text.Encoding.ASCII);
                        tempfile.Write("<?xml version=\"1.0\"?>");
                        tempfile.Write("<componentTypes xmlns:xsi=\"http://www.w3.org/2001/XMLSchema-instance\" xmlns:xsd=\"http://www.w3.org/2001/XMLSchema\">");
                        String tempStr;
                        foreach (string str in allBundles) {
                            tempStr = str.Remove(0, str.IndexOf("<componentType ") - 1);
                            tempStr = tempStr.Remove(tempStr.IndexOf("</componentTypes>"), 17);
                            tempfile.WriteLine(tempStr);
                            //Console.WriteLine(str);
                        }

                        tempfile.Write("</componentTypes>");

                        tempfile.Close();
                        componentList.Clear();
                        LoadBundle(System.IO.Path.GetTempPath() + "tempBundle.xml");  // ini.IniReadValue("model", "tempfile"));
                        activeBundle = AREHost;
                    } catch (Exception ex) {
                        MessageBox.Show(Properties.Resources.DownloadBundleError, Properties.Resources.DownloadBundleErrorHeader, MessageBoxButton.OK, MessageBoxImage.Error);
                        traceSource.TraceEvent(TraceEventType.Error, 3, ex.Message);
                        CheckASAPIConnection();
                    }
                }
            }
        }
        /// <summary>
        /// Check if current model needs saving and then open model
        /// </summary>
        private void CheckIfSavedAndOpenCommand(String inputFile)
        {
            if (modelHasBeenEdited) {
                SaveQuestionDialog saveQuestion = new SaveQuestionDialog();
                saveQuestion.Owner = this;
                saveQuestion.ShowDialog();

                // Process message box results
                switch (saveQuestion.Result) {
                    case SaveQuestionDialog.save:
                        if (SaveLocalCommand(false) == true) {
                            OpenLocalCommand(inputFile);
                            modelHasBeenEdited = false;
                        }
                        break;
                    case SaveQuestionDialog.dontSave:
                        OpenLocalCommand(inputFile);
                        modelHasBeenEdited = false;
                        break;
                    case SaveQuestionDialog.cancel:
                        break;
                }
            }
            else {
                OpenLocalCommand(inputFile);
                modelHasBeenEdited = false;
            }
        }