diff --git a/DiscImageChef.Gui/frmMain.xeto b/DiscImageChef.Gui/frmMain.xeto index 05190213e..f034b9279 100644 --- a/DiscImageChef.Gui/frmMain.xeto +++ b/DiscImageChef.Gui/frmMain.xeto @@ -35,7 +35,8 @@ Title="DiscImageChef" ClientSize="600, 450" Padding="10"> - + diff --git a/DiscImageChef.Gui/frmMain.xeto.cs b/DiscImageChef.Gui/frmMain.xeto.cs index 7db95b77b..d383bea4b 100644 --- a/DiscImageChef.Gui/frmMain.xeto.cs +++ b/DiscImageChef.Gui/frmMain.xeto.cs @@ -45,6 +45,7 @@ namespace DiscImageChef.Gui bool closing; GridView grdFiles; Label lblError; + TreeGridItem placeholderItem; TreeGridView treeImages; TreeGridItemCollection treeImagesItems; @@ -73,6 +74,8 @@ namespace DiscImageChef.Gui treeImagesItems.Add(imagesRoot); treeImagesItems.Add(devicesRoot); + placeholderItem = new TreeGridItem {Values = new object[] {"You should not be seeing this"}}; + Closing += OnClosing; } @@ -142,14 +145,13 @@ namespace DiscImageChef.Gui DicConsole.DebugWriteLine("Main window", "Found supported device model {0} by manufacturer {1} on bus {2} and path {3}", device.Model, device.Vendor, device.Bus, device.Path); - devicesRoot.Children.Add(new TreeGridItem + + TreeGridItem devItem = new TreeGridItem { - Values = new object[] - { - $"{device.Vendor} {device.Model} ({device.Bus})", - device.Path, null - } - }); + Values = new object[] {$"{device.Vendor} {device.Model} ({device.Bus})", device.Path, null} + }; + devItem.Children.Add(placeholderItem); + devicesRoot.Children.Add(devItem); } treeImages.ReloadData(); @@ -220,6 +222,60 @@ namespace DiscImageChef.Gui } } + protected void OnTreeImagesItemExpanding(object sender, TreeGridViewItemCancelEventArgs e) + { + // First expansion of a device + if((e.Item as TreeGridItem)?.Children?.Count == 1 && + ((TreeGridItem)e.Item).Children[0] == placeholderItem && + ((TreeGridItem)e.Item).Parent == devicesRoot) + { + TreeGridItem deviceItem = (TreeGridItem)e.Item; + + deviceItem.Children.Clear(); + Device dev; + try + { + dev = new Device((string)deviceItem.Values[1]); + if(dev.Error) + { + deviceItem.Values[2] = $"Error {dev.LastError} opening device"; + e.Cancel = true; + treeImages.ReloadData(); + treeImages.SelectedItem = deviceItem; + return; + } + } + catch(SystemException ex) + { + deviceItem.Values[2] = ex.Message; + e.Cancel = true; + treeImages.ReloadData(); + DicConsole.ErrorWriteLine(ex.Message); + treeImages.SelectedItem = deviceItem; + return; + } + + if(!dev.IsRemovable) + deviceItem.Children.Add(new TreeGridItem + { + Values = new object[] + { + "Non-removable device commands not yet implemented" + } + }); + else + deviceItem.Children.Add(new TreeGridItem + { + Values = new object[] + { + "Removable device commands not yet implemented" + } + }); + + dev.Close(); + } + } + #region XAML IDs TreeGridItem devicesRoot; TreeGridItem imagesRoot;