public void UpdateStatusStrip(TileKey selectedKey)
        {
            string statusString = "";

            if (FPGA.FPGA.Instance.Contains(selectedKey))
            {
                Tile selectedTile = FPGA.FPGA.Instance.GetTile(selectedKey);
                statusString = selectedTile.Location + " " + selectedKey.ToString();

                if (selectedTile.Slices.Count > 0)
                {
                    statusString += " (";

                    // only display up to to slice
                    int displayedSlices = Math.Min(2, selectedTile.Slices.Count);
                    for (int i = 0; i < displayedSlices; i++)
                    {
                        statusString += selectedTile.Slices[i].ToString();
                        if (i != selectedTile.Slices.Count - 1)
                        {
                            statusString += ",";
                        }
                    }

                    // add dots for tiles with more than two slices
                    if (selectedTile.Slices.Count > 2)
                    {
                        statusString += "...";
                    }

                    statusString += ") ";
                }
                // 2 element buffer
                m_lastClickedTile      = m_currentlyClickedTile;
                m_currentlyClickedTile = selectedTile;
            }

            // print selection info
            if (StoredPreferences.Instance.PrintSelectionResourceInfo)
            {
                statusString += "Selection contains ";
                statusString += TileSelectionManager.Instance.NumberOfSelectedTiles + " tiles, ";
                int clbs  = 0;
                int brams = 0;
                int dsps  = 0;
                TileSelectionManager.Instance.GetRessourcesInSelection(TileSelectionManager.Instance.GetSelectedTiles(), out clbs, out brams, out dsps);
                int others = TileSelectionManager.Instance.NumberOfSelectedTiles - (clbs + brams + dsps);
                statusString += clbs + " CLBs, ";
                statusString += brams + " BRAMs, and ";
                statusString += dsps + " DPS tiles, and ";
                statusString += others + " other tiles";
            }

            m_statusStripLabelSelectedTile.Text = statusString;
        }
        private void ShowToolTipAfterTimerFired(object sender, EventArgs e)
        {
            if (StoredPreferences.Instance.ShowToolTips)
            {
                Point p = (Point)m_timer.Tag;

                // only show a new tool tip, if the position changes
                if (m_lastToolTipLocation.Equals(p))
                {
                    return;
                }

                m_lastToolTipLocation = p;
                TileKey key = GetClickedKey(p.X, p.Y);
                if (FPGA.FPGA.Instance.Contains(key))
                {
                    Tile where = FPGA.FPGA.Instance.GetTile(key);
                    string toolTip           = key.ToString() + " " + where.Location;
                    Objects.LibElemInst inst = LibraryElementInstanceManager.Instance.GetInstantiation(where);
                    if (inst != null)
                    {
                        toolTip += Environment.NewLine + inst.ToString();

                        foreach (Tuple <string, string, PortMapper.MappingKind> tuple in inst.PortMapper.GetMappings().OrderBy(t => t.Item1))
                        {
                            toolTip += Environment.NewLine + tuple.Item1 + " => " + tuple.Item2 + " (" + tuple.Item3 + ")";
                        }
                    }
                    if (Blackboard.Instance.HasToolTipInfo(where))
                    {
                        toolTip += Environment.NewLine + Blackboard.Instance.GetToolTipInfo(where);
                    }
                    m_toolTip.Show(toolTip, this, p.X, p.Y + 20, 10000);
                }
            }
        }