예제 #1
0
        private void RunWizardForNewProjectFromTemplate(string selectedTemplate = null)
        {
            selectedTemplate = selectedTemplate == null ? string.Empty : selectedTemplate;

            ProjectFromTemplateDialog dialog = new ProjectFromTemplateDialog(selectedTemplate);

            string projectName = string.Empty;
            string projectDescription = string.Empty;
            string projectLocation = string.Empty;
            string dataDBInfo = string.Empty;
            Data.DbDriverInfo dbDriverInfo = new Data.DbDriverInfo();
            string projectTemplatePath = string.Empty;

            try
            {
                dialog.ShowDialog();

                if (dialog.DialogResult == DialogResult.OK)
                {
                    CloseCurrentProject();
                    projectName = dialog.ProjectName;
                    projectLocation = dialog.ProjectLocation;
                    dataDBInfo = dialog.DataDBInfo;
                    dbDriverInfo = dialog.DriverInfo;
                    projectTemplatePath = dialog.ProjectTemplatePath;
                }
                else
                {
                    return;
                }
            }
            finally
            {
                dialog.Dispose();
                GC.Collect();
                Refresh();
            }

            canvas.HideUpdateStart(SharedStrings.CREATING_PROJECT);

            Project newProject = new Project();

            newProject = newProject.CreateProject(
                projectName,
                projectDescription,
                projectLocation,
                dataDBInfo,
                dbDriverInfo);

            if (newProject != null)
            {
                mediator.Project = newProject;
                if (this.Interpreter == null)
                {
                    Assembly assembly = Assembly.Load(newProject.EnterMakeviewIntepreter);
                    Type myType = assembly.GetType(newProject.EnterMakeviewIntepreter + ".EpiInterpreterParser");
                    this.Interpreter = (IEnterInterpreter)Activator.CreateInstance(myType, new object[] { this.mediator });
                    this.Interpreter.Host = this.mediator;
                }

                canvas.UpdateHidePanel(SharedStrings.LOADING_PROJECT);

                projectExplorer.LoadProject(newProject);

                Template template = new Template(this.mediator);
                template.CreateFromTemplate(projectTemplatePath);

                //EnableFeatures();
                OnProjectAccessed(newProject);

                // The code below is needed to catch a condition where the ParentView property of each View object is
                // not set during the creation of the template. Instead of re-writing this code in the template creation
                // process, we simply force the metadata to be refreshed (which assigns the ParentView property correctly).
                newProject.views = null;
                newProject.LoadViews();
            }

            canvas.HideUpdateEnd();
            EnableFeatures();
        }