Free cookie consent management tool by TermsFeed Policy Generator

Ignore:
Timestamp:
07/07/14 17:02:50 (10 years ago)
Author:
gkronber
Message:

#2195: merged r11048,r11052,r11057,r11067,r11074,r11092 from trunk to stable (release)

Location:
stable
Files:
2 edited

Legend:

Unmodified
Added
Removed
  • stable

  • stable/HeuristicLab.Optimizer/3.3/StartPage.cs

    r11105 r11122  
    11#region License Information
    22/* HeuristicLab
    3  * Copyright (C) 2002-2013 Heuristic and Evolutionary Algorithms Laboratory (HEAL)
     3 * Copyright (C) 2002-2014 Heuristic and Evolutionary Algorithms Laboratory (HEAL)
    44 *
    55 * This file is part of HeuristicLab.
     
    2121
    2222using System;
     23using System.Collections.Generic;
    2324using System.IO;
    2425using System.Linq;
     
    3435  [View("Start Page")]
    3536  public partial class StartPage : HeuristicLab.MainForm.WindowsForms.View {
     37    private const string StandardProblemsGroupName = "Standard Problems";
     38    private const string DataAnalysisGroupName = "Data Analysis";
     39    private const string ScriptsGroupName = "Scripts";
     40    private const string UncategorizedGroupName = "Uncategorized";
     41    private const string SampleNamePrefix = "HeuristicLab.Optimizer.Documents.";
     42    private const string SampleNameSuffix = ".hl";
     43
     44    private readonly Dictionary<ListViewGroup, List<string>> groupLookup = new Dictionary<ListViewGroup, List<string>>();
     45    private readonly ListViewGroup standardProblemsGroup = new ListViewGroup(StandardProblemsGroupName);
     46    private readonly ListViewGroup dataAnalysisGroup = new ListViewGroup(DataAnalysisGroupName);
     47    private readonly ListViewGroup scriptsGroup = new ListViewGroup(ScriptsGroupName);
     48    private readonly ListViewGroup uncategorizedGroup = new ListViewGroup(UncategorizedGroupName);
     49
    3650    private IProgress progress;
    3751
     
    5165        using (Stream stream = assembly.GetManifestResourceStream(typeof(StartPage), "Documents.FirstSteps.rtf"))
    5266          firstStepsRichTextBox.LoadFile(stream, RichTextBoxStreamType.RichText);
    53       }
    54       catch (Exception) { }
     67      } catch (Exception) { }
    5568
    5669      samplesListView.Enabled = false;
     70      samplesListView.Groups.Add(standardProblemsGroup);
     71      samplesListView.Groups.Add(dataAnalysisGroup);
     72      samplesListView.Groups.Add(scriptsGroup);
     73      samplesListView.Groups.Add(uncategorizedGroup);
     74      FillGroupLookup();
     75
    5776      showStartPageCheckBox.Checked = Properties.Settings.Default.ShowStartPage;
    5877
     
    7190      progress = MainFormManager.GetMainForm<HeuristicLab.MainForm.WindowsForms.MainForm>().AddOperationProgressToView(samplesListView, "Loading...");
    7291      try {
    73         Assembly assembly = Assembly.GetExecutingAssembly();
    74         var samples = assembly.GetManifestResourceNames().Where(x => x.EndsWith(".hl"));
     92        var assembly = Assembly.GetExecutingAssembly();
     93        var samples = assembly.GetManifestResourceNames().Where(x => x.EndsWith(SampleNameSuffix));
    7594        int count = samples.Count();
    76         string path = Path.GetTempFileName();
    77 
    78         foreach (string name in samples) {
    79           try {
    80             using (Stream stream = assembly.GetManifestResourceStream(name)) {
    81               WriteStreamToTempFile(stream, path);
    82               INamedItem item = XmlParser.Deserialize<INamedItem>(path);
    83               OnSampleLoaded(item, 1.0 / count);
    84             }
     95
     96        foreach (var entry in groupLookup) {
     97          var group = entry.Key;
     98          var sampleList = entry.Value;
     99          foreach (var sampleName in sampleList) {
     100            string resourceName = SampleNamePrefix + sampleName + SampleNameSuffix;
     101            LoadSample(resourceName, assembly, group, count);
    85102          }
    86           catch (Exception) {
    87           }
    88         }
     103        }
     104
     105        var categorizedSamples = groupLookup.Select(x => x.Value).SelectMany(x => x).Select(x => SampleNamePrefix + x + SampleNameSuffix);
     106        var uncategorizedSamples = samples.Except(categorizedSamples);
     107
     108        foreach (var resourceName in uncategorizedSamples) {
     109          LoadSample(resourceName, assembly, uncategorizedGroup, count);
     110        }
     111
    89112        OnAllSamplesLoaded();
    90       }
    91       finally {
     113      } finally {
    92114        MainFormManager.GetMainForm<HeuristicLab.MainForm.WindowsForms.MainForm>().RemoveOperationProgressFromView(samplesListView);
    93115      }
    94116    }
    95     private void OnSampleLoaded(INamedItem sample, double progress) {
     117
     118    private void LoadSample(string name, Assembly assembly, ListViewGroup group, int count) {
     119      string path = Path.GetTempFileName();
     120      try {
     121        using (var stream = assembly.GetManifestResourceStream(name)) {
     122          WriteStreamToTempFile(stream, path); // create a file in a temporary folder (persistence cannot load these files directly from the stream)
     123          var item = XmlParser.Deserialize<INamedItem>(path);
     124          OnSampleLoaded(item, group, 1.0 / count);
     125        }
     126      } catch (Exception) {
     127      } finally {
     128        if (File.Exists(path)) {
     129          File.Delete(path); // make sure we remove the temporary file
     130        }
     131      }
     132    }
     133
     134    private void FillGroupLookup() {
     135      var standardProblems = new List<string> { "ES_Griewank", "GA_TSP", "GA_VRP", "GE_ArtificialAnt",
     136                "IslandGA_TSP", "LS_Knapsack", "PSO_Schwefel", "RAPGA_JSSP",
     137                "SA_Rastrigin", "SGP_SantaFe","GP_Multiplexer", "SS_VRP", "TS_TSP", "TS_VRP", "VNS_TSP"
     138        };
     139      groupLookup[standardProblemsGroup] = standardProblems;
     140      var dataAnalysisProblems = new List<string> { "SGP_SymbClass", "SGP_SymbReg", "OSGP_TimeSeries", "GE_SymbReg", "GPR" };
     141      groupLookup[dataAnalysisGroup] = dataAnalysisProblems;
     142      var scripts = new List<string> { "GA_QAP_Script", "GUI_Automation_Script", "OSGA_Rastrigin_Script" };
     143      groupLookup[scriptsGroup] = scripts;
     144    }
     145
     146    private void OnSampleLoaded(INamedItem sample, ListViewGroup group, double progress) {
    96147      if (InvokeRequired)
    97         Invoke(new Action<INamedItem, double>(OnSampleLoaded), sample, progress);
     148        Invoke(new Action<INamedItem, ListViewGroup, double>(OnSampleLoaded), sample, group, progress);
    98149      else {
    99         ListViewItem item = new ListViewItem(new string[] { sample.Name, sample.Description });
     150        ListViewItem item = new ListViewItem(new string[] { sample.Name, sample.Description }, group);
    100151        item.ToolTipText = sample.ItemName + ": " + sample.ItemDescription;
    101152        samplesListView.SmallImageList.Images.Add(sample.ItemImage);
     
    123174
    124175    private void samplesListView_DoubleClick(object sender, EventArgs e) {
    125       if (samplesListView.SelectedItems.Count == 1)
    126         MainFormManager.MainForm.ShowContent((IContent)((IItem)samplesListView.SelectedItems[0].Tag).Clone());
     176      if (samplesListView.SelectedItems.Count == 1) {
     177        var mainForm = MainFormManager.GetMainForm<MainForm.WindowsForms.MainForm>();
     178        try {
     179          mainForm.SetWaitCursor();
     180          mainForm.ShowContent((IContent)((IItem)samplesListView.SelectedItems[0].Tag).Clone());
     181        } finally {
     182          mainForm.ResetWaitCursor();
     183        }
     184
     185      }
    127186    }
    128187    private void samplesListView_ItemDrag(object sender, ItemDragEventArgs e) {
     
    142201    private void WriteStreamToTempFile(Stream stream, string path) {
    143202      using (FileStream output = new FileStream(path, FileMode.Create, FileAccess.Write)) {
    144         int cnt = 0;
    145         byte[] buffer = new byte[32 * 1024];
    146         while ((cnt = stream.Read(buffer, 0, buffer.Length)) != 0)
    147           output.Write(buffer, 0, cnt);
     203        stream.CopyTo(output);
    148204      }
    149205    }
Note: See TracChangeset for help on using the changeset viewer.