Free cookie consent management tool by TermsFeed Policy Generator

Ignore:
Timestamp:
11/12/14 01:43:03 (10 years ago)
Author:
swagner
Message:

#2205: Implemented review comments:

  • added IConnectablePort
  • replaced MessagePort.Messages by MessagePort.LastMessage
  • removed Path and PathChanged in NetworkItem

Additional changes:

  • refactored CanConnectToPort
  • refactored cloning of port parameters in MessagePortView
Location:
branches/OptimizationNetworks
Files:
1 added
8 edited

Legend:

Unmodified
Added
Removed
  • branches/OptimizationNetworks/HeuristicLab.Optimization.Networks.Views/3.3/Core.Networks.Views/MessagePortView.Designer.cs

    r11530 r11538  
    3838      this.clearConnectedPortButton = new System.Windows.Forms.Button();
    3939      this.connectedPortView = new HeuristicLab.Core.Networks.Views.PortView();
    40       this.cloneConnectedPortParametersButton = new System.Windows.Forms.Button();
     40      this.cloneParametersFromPortButton = new System.Windows.Forms.Button();
    4141      this.sendMessageButton = new System.Windows.Forms.Button();
    4242      this.splitContainer = new System.Windows.Forms.SplitContainer();
    4343      this.portParameterCollectionView = new HeuristicLab.Core.Networks.Views.PortParameterCollectionView();
    44       this.messageCollectionView = new HeuristicLab.Core.Networks.Views.MessageCollectionView();
    45       this.logMessagesCheckBox = new System.Windows.Forms.CheckBox();
     44      this.lastMessageGroupBox = new System.Windows.Forms.GroupBox();
     45      this.lastMessageView = new HeuristicLab.Core.Networks.Views.MessageView();
    4646      ((System.ComponentModel.ISupportInitialize)(this.errorProvider)).BeginInit();
    4747      this.connectedPortGroupBox.SuspendLayout();
     
    5050      this.splitContainer.Panel2.SuspendLayout();
    5151      this.splitContainer.SuspendLayout();
     52      this.lastMessageGroupBox.SuspendLayout();
    5253      this.SuspendLayout();
    5354      //
     
    112113      this.connectedPortView.DragOver += new System.Windows.Forms.DragEventHandler(this.connectedPortView_DragEnterOver);
    113114      //
    114       // cloneConnectedPortParametersButton
    115       //
    116       this.cloneConnectedPortParametersButton.Image = HeuristicLab.Common.Resources.VSImageLibrary.Clone;
    117       this.cloneConnectedPortParametersButton.Location = new System.Drawing.Point(156, 101);
    118       this.cloneConnectedPortParametersButton.Name = "cloneConnectedPortParametersButton";
    119       this.cloneConnectedPortParametersButton.Size = new System.Drawing.Size(24, 24);
    120       this.cloneConnectedPortParametersButton.TabIndex = 5;
    121       this.toolTip.SetToolTip(this.cloneConnectedPortParametersButton, "Clone Parameters from Connected Port");
    122       this.cloneConnectedPortParametersButton.UseVisualStyleBackColor = true;
    123       this.cloneConnectedPortParametersButton.Click += new System.EventHandler(this.cloneConnectedPortParametersButton_Click);
     115      // cloneParametersFromPortButton
     116      //
     117      this.cloneParametersFromPortButton.Image = HeuristicLab.Common.Resources.VSImageLibrary.Clone;
     118      this.cloneParametersFromPortButton.Location = new System.Drawing.Point(156, 101);
     119      this.cloneParametersFromPortButton.Name = "cloneParametersFromPortButton";
     120      this.cloneParametersFromPortButton.Size = new System.Drawing.Size(24, 24);
     121      this.cloneParametersFromPortButton.TabIndex = 5;
     122      this.toolTip.SetToolTip(this.cloneParametersFromPortButton, "Clone parameters from another port");
     123      this.cloneParametersFromPortButton.UseVisualStyleBackColor = true;
     124      this.cloneParametersFromPortButton.Click += new System.EventHandler(this.cloneParametersFromPortButton_Click);
    124125      //
    125126      // sendMessageButton
     
    149150      // splitContainer.Panel2
    150151      //
    151       this.splitContainer.Panel2.Controls.Add(this.logMessagesCheckBox);
    152       this.splitContainer.Panel2.Controls.Add(this.messageCollectionView);
     152      this.splitContainer.Panel2.Controls.Add(this.lastMessageGroupBox);
    153153      this.splitContainer.Size = new System.Drawing.Size(645, 435);
    154154      this.splitContainer.SplitterDistance = 218;
     
    167167      this.portParameterCollectionView.TabIndex = 0;
    168168      //
    169       // messageCollectionView
    170       //
    171       this.messageCollectionView.Caption = "MessageCollection View";
    172       this.messageCollectionView.Content = null;
    173       this.messageCollectionView.Dock = System.Windows.Forms.DockStyle.Fill;
    174       this.messageCollectionView.Location = new System.Drawing.Point(0, 0);
    175       this.messageCollectionView.Name = "messageCollectionView";
    176       this.messageCollectionView.ReadOnly = false;
    177       this.messageCollectionView.ShowDetails = true;
    178       this.messageCollectionView.Size = new System.Drawing.Size(645, 213);
    179       this.messageCollectionView.TabIndex = 0;
    180       //
    181       // logMessagesCheckBox
    182       //
    183       this.logMessagesCheckBox.AutoSize = true;
    184       this.logMessagesCheckBox.Location = new System.Drawing.Point(156, 24);
    185       this.logMessagesCheckBox.Name = "logMessagesCheckBox";
    186       this.logMessagesCheckBox.Size = new System.Drawing.Size(95, 17);
    187       this.logMessagesCheckBox.TabIndex = 1;
    188       this.logMessagesCheckBox.Text = "&Log Messages";
    189       this.logMessagesCheckBox.UseVisualStyleBackColor = true;
    190       this.logMessagesCheckBox.CheckedChanged += new System.EventHandler(this.logMessagesCheckBox_CheckedChanged);
     169      // lastMessageGroupBox
     170      //
     171      this.lastMessageGroupBox.Controls.Add(this.lastMessageView);
     172      this.lastMessageGroupBox.Dock = System.Windows.Forms.DockStyle.Fill;
     173      this.lastMessageGroupBox.Location = new System.Drawing.Point(0, 0);
     174      this.lastMessageGroupBox.Name = "lastMessageGroupBox";
     175      this.lastMessageGroupBox.Size = new System.Drawing.Size(645, 213);
     176      this.lastMessageGroupBox.TabIndex = 0;
     177      this.lastMessageGroupBox.TabStop = false;
     178      this.lastMessageGroupBox.Text = "Last Message";
     179      //
     180      // lastMessageView
     181      //
     182      this.lastMessageView.Caption = "Message View";
     183      this.lastMessageView.Content = null;
     184      this.lastMessageView.Dock = System.Windows.Forms.DockStyle.Fill;
     185      this.lastMessageView.Location = new System.Drawing.Point(3, 16);
     186      this.lastMessageView.Name = "lastMessageView";
     187      this.lastMessageView.ReadOnly = true;
     188      this.lastMessageView.Size = new System.Drawing.Size(639, 194);
     189      this.lastMessageView.TabIndex = 0;
    191190      //
    192191      // MessagePortView
     
    194193      this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Inherit;
    195194      this.Controls.Add(this.sendMessageButton);
    196       this.Controls.Add(this.cloneConnectedPortParametersButton);
     195      this.Controls.Add(this.cloneParametersFromPortButton);
    197196      this.Controls.Add(this.connectedPortGroupBox);
    198197      this.Controls.Add(this.splitContainer);
     
    203202      this.Controls.SetChildIndex(this.infoLabel, 0);
    204203      this.Controls.SetChildIndex(this.connectedPortGroupBox, 0);
    205       this.Controls.SetChildIndex(this.cloneConnectedPortParametersButton, 0);
     204      this.Controls.SetChildIndex(this.cloneParametersFromPortButton, 0);
    206205      this.Controls.SetChildIndex(this.sendMessageButton, 0);
    207206      ((System.ComponentModel.ISupportInitialize)(this.errorProvider)).EndInit();
     
    209208      this.splitContainer.Panel1.ResumeLayout(false);
    210209      this.splitContainer.Panel2.ResumeLayout(false);
    211       this.splitContainer.Panel2.PerformLayout();
    212210      ((System.ComponentModel.ISupportInitialize)(this.splitContainer)).EndInit();
    213211      this.splitContainer.ResumeLayout(false);
     212      this.lastMessageGroupBox.ResumeLayout(false);
    214213      this.ResumeLayout(false);
    215214      this.PerformLayout();
     
    223222    protected System.Windows.Forms.Button clearConnectedPortButton;
    224223    protected System.Windows.Forms.Button setConnectedPortButton;
    225     protected System.Windows.Forms.Button cloneConnectedPortParametersButton;
     224    protected System.Windows.Forms.Button cloneParametersFromPortButton;
    226225    protected System.Windows.Forms.Button sendMessageButton;
    227226    protected System.Windows.Forms.SplitContainer splitContainer;
    228227    protected PortParameterCollectionView portParameterCollectionView;
    229     protected MessageCollectionView messageCollectionView;
    230     protected System.Windows.Forms.CheckBox logMessagesCheckBox;
     228    protected System.Windows.Forms.GroupBox lastMessageGroupBox;
     229    protected MessageView lastMessageView;
    231230
    232231
  • branches/OptimizationNetworks/HeuristicLab.Optimization.Networks.Views/3.3/Core.Networks.Views/MessagePortView.cs

    r11530 r11538  
    5454      Content.ConnectedPortChanged -= Content_ConnectedPortChanged;
    5555      Content.PortConnectionValidChanged -= Content_PortConnectionValidChanged;
    56       Content.LogMessagesChanged -= Content_LogMessagesChanged;
     56      Content.LastMessageChanged -= Content_LastMessageChanged;
    5757      base.DeregisterContentEvents();
    5858    }
     
    6161      Content.ConnectedPortChanged += Content_ConnectedPortChanged;
    6262      Content.PortConnectionValidChanged += Content_PortConnectionValidChanged;
    63       Content.LogMessagesChanged += Content_LogMessagesChanged;
     63      Content.LastMessageChanged += Content_LastMessageChanged;
    6464    }
    6565
     
    6969      connectedPortView.Content = Content == null ? null : Content.ConnectedPort;
    7070      portParameterCollectionView.Content = Content == null ? null : Content.Parameters;
    71       logMessagesCheckBox.Checked = Content == null ? false : Content.LogMessages;
    72       messageCollectionView.Content = Content == null ? null : Content.Messages;
     71      lastMessageView.Content = Content == null ? null : Content.LastMessage;
    7372      errorProvider.SetError(connectedPortView, ((Content == null) || Content.PortConnectionValid) ? string.Empty : "Port connection is not valid");
    7473    }
     
    8180      clearConnectedPortButton.Enabled = Content != null && Content.ConnectedPort != null && !ReadOnly;
    8281      portParameterCollectionView.Enabled = Content != null && !ReadOnly;
    83       cloneConnectedPortParametersButton.Enabled = Content != null && Content.ConnectedPort != null && !ReadOnly;
    84       logMessagesCheckBox.Enabled = Content != null && !ReadOnly;
    85       messageCollectionView.Enabled = Content != null && !ReadOnly;
     82      cloneParametersFromPortButton.Enabled = Content != null && Content.ConnectedPort != null && !ReadOnly;
     83      lastMessageView.Enabled = Content != null && !ReadOnly;
    8684    }
    8785
     
    9189      else {
    9290        clearConnectedPortButton.Enabled = Content.ConnectedPort != null && !ReadOnly;
    93         cloneConnectedPortParametersButton.Enabled = Content.ConnectedPort != null && !ReadOnly;
     91        cloneParametersFromPortButton.Enabled = Content.ConnectedPort != null && !ReadOnly;
    9492        connectedPortView.Content = Content.ConnectedPort;
    9593      }
     
    102100      }
    103101    }
    104     protected virtual void Content_LogMessagesChanged(object sender, EventArgs e) {
     102    protected virtual void Content_LastMessageChanged(object sender, EventArgs e) {
    105103      if (InvokeRequired)
    106         Invoke(new EventHandler(Content_LogMessagesChanged), sender, e);
     104        Invoke(new EventHandler(Content_LastMessageChanged), sender, e);
    107105      else {
    108         logMessagesCheckBox.Checked = Content.LogMessages;
     106        lastMessageView.Content = Content.LastMessage;
    109107      }
    110108    }
     
    115113
    116114    protected virtual void setConnectedPortButton_Click(object sender, EventArgs e) {
    117       if (networkItemSelectorDialog == null) {
    118         networkItemSelectorDialog = new NetworkItemSelectorDialog();
    119         networkItemSelectorDialog.Caption = "Select Connected Port";
    120         networkItemSelectorDialog.NetworkItemSelector.Caption = "Available Ports";
    121       }
     115      if (networkItemSelectorDialog == null) networkItemSelectorDialog = new NetworkItemSelectorDialog();
     116      networkItemSelectorDialog.Caption = "Select Connected Port";
     117      networkItemSelectorDialog.NetworkItemSelector.Caption = "Available Ports";
    122118
    123119      try {
     
    145141    protected virtual void connectedPortView_DragEnterOver(object sender, DragEventArgs e) {
    146142      e.Effect = DragDropEffects.None;
    147       var data = e.Data.GetData(HeuristicLab.Common.Constants.DragDropDataFormat) as IMessagePort;
     143      var data = e.Data.GetData(HeuristicLab.Common.Constants.DragDropDataFormat) as IPort;
    148144
    149145      if (!ReadOnly && (data != null) && (Content.CanConnectToPort(data))) {
     
    157153      }
    158154    }
    159     protected virtual void cloneConnectedPortParametersButton_Click(object sender, EventArgs e) {
    160       Content.CloneParametersFromPort(Content.ConnectedPort);
    161     }
    162     protected virtual void logMessagesCheckBox_CheckedChanged(object sender, EventArgs e) {
    163       Content.LogMessages = logMessagesCheckBox.Checked;
     155    protected virtual void cloneParametersFromPortButton_Click(object sender, EventArgs e) {
     156      if (networkItemSelectorDialog == null) networkItemSelectorDialog = new NetworkItemSelectorDialog();
     157      networkItemSelectorDialog.Caption = "Select Port to Clone Parameters from";
     158      networkItemSelectorDialog.NetworkItemSelector.Caption = "Available Ports";
     159
     160      INetworkItem root = Content;
     161      while (root.Parent != null)
     162        root = root.Parent;
     163      networkItemSelectorDialog.NetworkItemSelector.Configure(
     164        root,
     165        null,
     166        typeof(IParameterizedPort)
     167      );
     168
     169      if (networkItemSelectorDialog.ShowDialog(this) == DialogResult.OK) {
     170        Content.CloneParametersFromPort(networkItemSelectorDialog.NetworkItemSelector.SelectedNetworkItem as IParameterizedPort);
     171      }
    164172    }
    165173  }
  • branches/OptimizationNetworks/HeuristicLab.Optimization.Networks.Views/3.3/Core.Networks.Views/NetworkItemView.cs

    r11528 r11538  
    2222using HeuristicLab.Core.Views;
    2323using HeuristicLab.MainForm;
    24 using System;
    2524using System.Windows.Forms;
    2625
     
    3837      InitializeComponent();
    3938    }
    40 
    41     protected override void DeregisterContentEvents() {
    42       Content.PathChanged -= Content_PathChanged;
    43       base.DeregisterContentEvents();
    44     }
    45     protected override void RegisterContentEvents() {
    46       base.RegisterContentEvents();
    47       Content.PathChanged += Content_PathChanged;
    48     }
    49 
    50     protected override void OnContentChanged() {
    51       base.OnContentChanged();
    52       toolTip.SetToolTip(nameTextBox, Content != null ? Content.Path : string.Empty);
    53     }
    54 
    55     protected virtual void Content_PathChanged(object sender, System.EventArgs e) {
    56       if (InvokeRequired)
    57         Invoke(new EventHandler(Content_PathChanged), sender, e);
    58       else {
    59         toolTip.SetToolTip(nameTextBox, Content != null ? Content.Path : string.Empty);
    60       }
    61     }
    6239  }
    6340}
  • branches/OptimizationNetworks/HeuristicLab.Optimization.Networks/3.3/Core.Networks/IMessagePort.cs

    r11530 r11538  
    2626
    2727namespace HeuristicLab.Core.Networks {
    28   public interface IMessagePort : IParameterizedPort {
    29     IMessagePort ConnectedPort { get; set; }
    30     bool PortConnectionValid { get; }
    31     bool LogMessages { get; set; }
    32     MessageCollection Messages { get; }
     28  public interface IMessagePort : IParameterizedPort, IConnectablePort {
     29    new IMessagePort ConnectedPort { get; set; }
    3330
    34     bool CanConnectToPort(IPort port);
    35 
    36     event EventHandler ConnectedPortChanged;
    37     event EventHandler PortConnectionValidChanged;
    38     event EventHandler LogMessagesChanged;
     31    IMessage LastMessage { get; }
     32    event EventHandler LastMessageChanged;
    3933
    4034    IMessage PrepareMessage();
  • branches/OptimizationNetworks/HeuristicLab.Optimization.Networks/3.3/Core.Networks/INetworkItem.cs

    r11528 r11538  
    2727    INetworkItem Parent { get; }
    2828    IEnumerable<INetworkItem> Children { get; }
    29     string Path { get; }
    30     event EventHandler PathChanged;
    3129  }
    3230}
  • branches/OptimizationNetworks/HeuristicLab.Optimization.Networks/3.3/Core.Networks/MessagePort.cs

    r11530 r11538  
    5454          RegisterConnectedPortEvents();
    5555          OnConnectedPortChanged();
    56           OnInterfaceChanged();
    57         }
     56          CheckPortConnection();
     57        }
     58      }
     59    }
     60    IPort IConnectablePort.ConnectedPort {
     61      get { return ConnectedPort; }
     62      set {
     63        if (!(value is IMessagePort))
     64          throw new InvalidOperationException("Type mismatch. ConnectedPort is not an IMessagePort.");
     65        ConnectedPort = (IMessagePort)value;
    5866      }
    5967    }
     
    7179    }
    7280    [Storable]
    73     protected bool logMessages;
    74     public bool LogMessages {
    75       get { return logMessages; }
    76       set {
    77         if (value != logMessages) {
    78           logMessages = value;
    79           OnLogMessagesChanged();
    80         }
    81       }
    82     }
    83     [Storable]
    84     protected MessageCollection messages;
    85     public MessageCollection Messages {
    86       get { return messages; }
     81    protected IMessage lastMessage;
     82    public IMessage LastMessage {
     83      get { return lastMessage; }
     84      protected set {
     85        if (value != lastMessage) {
     86          lastMessage = value;
     87          OnLastMessageChanged();
     88        }
     89      }
    8790    }
    8891
     
    9396      connectedPort = cloner.Clone(original.connectedPort);
    9497      portConnectionValid = original.portConnectionValid;
    95       logMessages = original.logMessages;
    96       messages = cloner.Clone(original.messages);
     98      lastMessage = null;
    9799      RegisterConnectedPortEvents();
    98100    }
     
    100102      : base("MessagePort") {
    101103      portConnectionValid = true;
    102       logMessages = false;
    103       messages = new MessageCollection();
     104      lastMessage = null;
    104105    }
    105106    public MessagePort(string name)
    106107      : base(name) {
    107108      portConnectionValid = true;
    108       logMessages = false;
    109       messages = new MessageCollection();
     109      lastMessage = null;
    110110    }
    111111    public MessagePort(string name, string description)
    112112      : base(name, description) {
    113113      portConnectionValid = true;
    114       logMessages = false;
    115       messages = new MessageCollection();
     114      lastMessage = null;
    116115    }
    117116
     
    126125
    127126    public bool CanConnectToPort(IPort port) {
    128       if (port == null) return true;
    129 
    130       var p = port as IMessagePort;
    131       if (p == null) return false;
    132 
    133       // check if the local parameters are compatible to the input parameters of the port
    134       if (!ParametersCompatibleToTarget(Parameters, p.Parameters)) return false;
    135       // check if the parameters of the port are compatible to the local input parameters
    136       if (!ParametersCompatibleToTarget(p.Parameters, Parameters)) return false;
    137 
    138       return true;
     127      return (port == null) || (port is IMessagePort);
    139128    }
    140129
     
    162151    public void SendMessage(IMessage message, CancellationToken token) {
    163152      if (!PortConnectionValid) throw new InvalidOperationException("Port connection is not valid");
    164       if (LogMessages) Messages.Add(message);
     153      LastMessage = message;
    165154      if (ConnectedPort != null) ConnectedPort.ReceiveMessage(message, token);
    166155      OnMessageSent(message, token);
     
    180169    public void ReceiveMessage(IMessage message, CancellationToken token) {
    181170      if (!PortConnectionValid) throw new InvalidOperationException("Port connection is not valid");
    182       if (LogMessages) Messages.Add(message);
     171      LastMessage = message;
    183172      OnMessageReceived(message, token);
    184173    }
     
    199188      if (handler != null) handler(this, EventArgs.Empty);
    200189    }
    201     public event EventHandler LogMessagesChanged;
    202     protected virtual void OnLogMessagesChanged() {
    203       var handler = LogMessagesChanged;
     190    public event EventHandler LastMessageChanged;
     191    protected virtual void OnLastMessageChanged() {
     192      var handler = LastMessageChanged;
    204193      if (handler != null) handler(this, EventArgs.Empty);
    205194    }
    206195
    207196    protected override void OnInterfaceChanged() {
    208       PortConnectionValid = CanConnectToPort(connectedPort);
     197      CheckPortConnection();
    209198      base.OnInterfaceChanged();
    210199    }
     
    224213    }
    225214    protected virtual void ConnectedPort_InterfaceChanged(object sender, EventArgs e) {
    226       OnInterfaceChanged();
     215      CheckPortConnection();
    227216    }
    228217    protected virtual void ConnectedPort_MessageSent(object sender, EventArgs<IMessage, CancellationToken> e) {
     
    232221
    233222    #region Helpers
     223    protected virtual void CheckPortConnection() {
     224      PortConnectionValid = (ConnectedPort == null) ||
     225                            (ParametersCompatibleToTarget(Parameters, ConnectedPort.Parameters) &&
     226                             ParametersCompatibleToTarget(ConnectedPort.Parameters, Parameters));
     227    }
    234228    protected virtual bool ParametersCompatibleToTarget(IEnumerable<IPortParameter> source, IEnumerable<IPortParameter> target) {
    235229      // checks if the source parameters are compatible to the input parameters of the target
  • branches/OptimizationNetworks/HeuristicLab.Optimization.Networks/3.3/Core.Networks/NetworkItem.cs

    r11528 r11538  
    3131  [StorableClass]
    3232  public abstract class NetworkItem : NamedItem, INetworkItem {
    33     public static readonly string PathSeparator = " => ";
    3433    public static new Image StaticItemImage {
    3534      get { return HeuristicLab.Common.Resources.VSImageLibrary.Class; }
     
    4140      protected set {
    4241        if (value != parent) {
    43           DeregisterParentEvents();
    4442          parent = value;
    45           RegisterParentEvents();
    46           OnPathChanged();
    4743        }
    4844      }
     
    5046    public virtual IEnumerable<INetworkItem> Children {
    5147      get { return Enumerable.Empty<INetworkItem>(); }
    52     }
    53     public string Path {
    54       get {
    55         return parent != null ? parent.Path + PathSeparator + Name : Name;
    56       }
    5748    }
    5849
     
    6354    protected NetworkItem(string name) : base(name) { }
    6455    protected NetworkItem(string name, string description) : base(name, description) { }
    65 
    66     protected override void OnNameChanging(CancelEventArgs<string> e) {
    67       base.OnNameChanging(e);
    68       e.Cancel = e.Cancel || e.Value.Contains(PathSeparator);
    69     }
    70     protected override void OnNameChanged() {
    71       base.OnNameChanged();
    72       OnPathChanged();
    73     }
    74 
    75     public event EventHandler PathChanged;
    76     protected virtual void OnPathChanged() {
    77       var handler = PathChanged;
    78       if (handler != null) handler(this, EventArgs.Empty);
    79     }
    80 
    81     #region Parent Events
    82     protected virtual void RegisterParentEvents() {
    83       if (parent != null) {
    84         parent.PathChanged += Parent_PathChanged;
    85       }
    86     }
    87     protected virtual void DeregisterParentEvents() {
    88       if (parent != null) {
    89         parent.PathChanged -= Parent_PathChanged;
    90       }
    91     }
    92     void Parent_PathChanged(object sender, EventArgs e) {
    93       OnPathChanged();
    94     }
    95     #endregion
    9656  }
    9757}
  • branches/OptimizationNetworks/HeuristicLab.Optimization.Networks/3.3/HeuristicLab.Optimization.Networks-3.3.csproj

    r11530 r11538  
    9090  </ItemGroup>
    9191  <ItemGroup>
     92    <Compile Include="Core.Networks\IConnectablePort.cs" />
    9293    <Compile Include="Core.Networks\IUserDefinedMessagePort.cs" />
    9394    <Compile Include="Core.Networks\IMessagePort.cs" />
Note: See TracChangeset for help on using the changeset viewer.