/*-------------------------------------------------------------*/ private void btnLdStackConfig_Click(object sender, EventArgs e) { try { using (OpenFileDialog openDialog = new OpenFileDialog()) { openDialog.InitialDirectory = Environment.GetFolderPath(Environment.SpecialFolder.MyDocuments); openDialog.Filter = "csv files (.CSV)|*.csv|Text Files (.txt)|*.txt|All Files (*.*)|*.*"; openDialog.Title = "Please select a pnp machine file..."; if (openDialog.ShowDialog() == DialogResult.OK) { //HOW IT WORKS: //1)get the reel list of the displayed layer StackList oldStackList = (StackList)tcPhaseDisplayer.SelectedTab.Controls["stackList"]; List <Reel> stackReelList = oldStackList.GetTotalList(); //2) Make a new phase string[] stackConfig = pnpMachine.LoadStackConfiguration(openDialog.FileName); //StackList newStackList = new StackList(pnpMachine, openDialog.FileName, stackReelList); StackList newStackList = new StackList(pnpMachine, stackConfig, stackReelList); newStackList.Name = "stackList"; newStackList.updateAllListsEvent += UpdateAllListsEvent; stacklisters.Add(newStackList); //3) Try to add all components to the new stackList foreach (Reel stackReel in stackReelList) { newStackList.AddReelWithUpdate(stackReel); } //4) int phaseCounter = 0; tcPhaseDisplayer.TabPages.Clear(); stacklisters = stacklisters.OrderBy(stacklist_ => stacklist_.Layer).ToList(); //http://stackoverflow.com/questions/3309188/how-to-sort-a-listt-by-a-property-in-the-object while (phaseCounter < stacklisters.Count) { StackList curStackList = stacklisters[phaseCounter]; if (curStackList.ContainsReels) { phaseCounter++; curStackList.PhaseNumber = phaseCounter; GenerateTabPage(curStackList); } else { curStackList.updateAllListsEvent -= UpdateAllListsEvent; stacklisters.Remove(curStackList); curStackList.Dispose(); } } } } } catch (Exception exc) { MessageBox.Show(exc.Message, "Error", MessageBoxButtons.OK, MessageBoxIcon.Error); } }
/// <summary> /// Checks all reels and fill the stacks automatic with the good reels /// </summary> /// <param name="showWarnings">True if warnings are shown, else false</param> private void AssignReels(bool showWarnings) { //1) Filter the reels List <Reel> acceptedReels = new List <Reel>(); acceptedReels = reelsToPlace.FindAll(curReel => pnpMachine.ReelCanBePlaced(curReel)); if (showWarnings) { //Show warnings to the user if (acceptedReels.Count == 0) { MessageBox.Show("No reels accepted", "Warning", MessageBoxButtons.OK, MessageBoxIcon.Information); return; } int numberRejected = reelsToPlace.Count - acceptedReels.Count; //Not all components are accepted if ((numberRejected != 0) && (MessageBox.Show(numberRejected.ToString() + " rejected" + Environment.NewLine + "Do you want to continue?", "Warning", MessageBoxButtons.YesNo, MessageBoxIcon.Question) == DialogResult.No)) { return; } } //2) clear the old tabPages ClearPhases(); //3) split the list: top and bottom List <Reel> topReels, bottomReels; Reel.SplitReelList(acceptedReels, out topReels, out bottomReels); FillStackListers(topReels); FillStackListers(bottomReels); int index = 0; while (index < stacklisters.Count) { if (stacklisters[index].Layer == ReelLayer.Top) { stacklisters[index].SetTotalList(topReels); } else if (stacklisters[index].Layer == ReelLayer.Bottom) { stacklisters[index].SetTotalList(bottomReels); } else if (!stacklisters[index].ContainsReels) { //Stacklayer == both -> empty stacklist //if, for some reasen (reasen = bug), the layer is both and it contains reels, it should not be removed StackList removedStackList = stacklisters[index]; //need pointer to control for dispose removedStackList.updateAllListsEvent -= UpdateAllListsEvent; stacklisters.RemoveAt(index); removedStackList.Dispose(); continue; } GenerateTabPage(stacklisters[index]); index++; //index > 0 } if (index != 0) { this.pnlExportButtons.Enabled = true; } }