private bool InsertGrid(int x, int y, GuiVesselsPartGraphNode node) { // Grid koords [-4][-6] will be translated in list index [-4 - minX][-6 - minY] // so index will always be >= 0 // Also keep the grid (list of lists) quadratic // On new min value create a new list, insert amount of blanks, append old list // and replace list by new list if (x < PartGridMinX) { int diffX = PartGridMinX - x; List <List <GuiVesselsPartGraphNode> > list = new List <List <GuiVesselsPartGraphNode> >(); for (int i = 0; i < diffX; i++) { List <GuiVesselsPartGraphNode> l = new List <GuiVesselsPartGraphNode>(); for (int j = PartGridMinY; j <= PartGridMaxY; j++) { l.Add(null); } list.Add(l); } list.AddRange(PartGrid); PartGrid = list; PartGridMinX = x; } if (y < PartGridMinY) { int diffY = PartGridMinY - y; for (int i = 0; i < PartGrid.Count; i++) { List <GuiVesselsPartGraphNode> list = new List <GuiVesselsPartGraphNode>(); for (int j = 0; j < diffY; j++) { list.Add(null); } list.AddRange(PartGrid[i]); PartGrid[i] = list; } PartGridMinY = y; } if (x > PartGridMaxX) { int diffX = x - PartGridMaxX; for (int i = 0; i < diffX; i++) { List <GuiVesselsPartGraphNode> list = new List <GuiVesselsPartGraphNode>(); for (int j = PartGridMinY; j <= PartGridMaxY; j++) { list.Add(null); } PartGrid.Add(list); } PartGridMaxX = x; } if (y > PartGridMaxY) { int diffY = y - PartGridMaxY; for (int i = 0; i < PartGrid.Count; i++) { for (int j = 0; j < diffY; j++) { PartGrid[i].Add(null); } } PartGridMaxY = y; } if (PartGrid[x - PartGridMinX][y - PartGridMinY] == null) { PartGrid[x - PartGridMinX][y - PartGridMinY] = node; return(true); } else { return(false); } }