private void InitializePortsList(Gtk.TreeView portsList) { var viewModel = DataContext as SerialPortSelectorViewModel; var column = new Gtk.TreeViewColumn() { Title = SerialPortSelectorViewModel.PortColumnTitle }; var cellRenderer = new Gtk.CellRendererText(); column.PackStart(cellRenderer, true); column.SetCellDataFunc(cellRenderer, (l, c, m, i) => VisualHelpers.CellTextColumnRenderer <SerialPortViewModel>(l, c, m, i, p => p.PortName)); ////column.Sizing = Gtk.TreeViewColumnSizing.Fixed; ////column.FixedWidth = Properties.Settings.Default.MenuLayoutLongNameColWidth; ////column.Resizable = true; portsList.AppendColumn(column); portsList.Selection.Changed += HandleSelectedPortChanged; portsList.Selection.SelectFunction = ShouldSelectPort; var serialPortsModel = new Gtk.ListStore(typeof(SerialPortViewModel)); serialPortsModel.SynchronizeCollection(viewModel.AvailableSerialPorts); // TODO: Disable ports appropriately -- see ShouldSelect // TODO: Customize renderer somehow for disabled items to draw differently -- // Tinkering with CellRendererText.Foreground does not work as desired. portsList.Model = serialPortsModel; viewModel.AvailableSerialPorts.CollectionChanged += HandleAvailablePortsChanged; }
/// <summary> /// Initializes a new instance of the <see cref="INTV.Shared.View.RomListView"/> class. /// </summary> /// <param name="viewModel">The data context for this visual.</param> public RomListView(RomListViewModel viewModel) { // TODO: Set up sorting! // TODO: DragDrop! DataContext = viewModel; this.Build(); var treeView = _romListView; treeView.Selection.Mode = Gtk.SelectionMode.Multiple; treeView.HasTooltip = true; treeView.EnableModelDragDest(RomListViewModel.DragDropTargetEntries, Gdk.DragAction.Private); treeView.EnableModelDragSource(Gdk.ModifierType.Button1Mask, RomListViewModel.DragDropSourceEntries, Gdk.DragAction.Copy); var column = new Gtk.TreeViewColumn(); Gtk.CellRenderer cellRenderer = new Gtk.CellRendererPixbuf(); column.PackStart(cellRenderer, true); column.SetCellDataFunc(cellRenderer, (l, c, m, i) => VisualHelpers.CellImageColumnRenderer <ProgramDescriptionViewModel>(l, c, m, i, p => p.RomFileStatusIcon)); column.Sizing = Gtk.TreeViewColumnSizing.Fixed; column.FixedWidth = 20; treeView.AppendColumn(column); column = new Gtk.TreeViewColumn() { Title = RomListViewModel.TitleHeader }; cellRenderer = new Gtk.CellRendererText(); column.PackStart(cellRenderer, true); column.SetCellDataFunc(cellRenderer, (l, c, m, i) => VisualHelpers.CellTextColumnRenderer <ProgramDescriptionViewModel>(l, c, m, i, p => p.Name)); column.Sizing = Gtk.TreeViewColumnSizing.Fixed; column.FixedWidth = Properties.Settings.Default.RomListNameColWidth; column.Resizable = true; treeView.AppendColumn(column); column = new Gtk.TreeViewColumn() { Title = RomListViewModel.CompanyHeader }; cellRenderer = new Gtk.CellRendererText(); column.PackStart(cellRenderer, true); column.SetCellDataFunc(cellRenderer, (l, c, m, i) => VisualHelpers.CellTextColumnRenderer <ProgramDescriptionViewModel>(l, c, m, i, p => p.Vendor)); column.Sizing = Gtk.TreeViewColumnSizing.Fixed; column.FixedWidth = Properties.Settings.Default.RomListVendorColWidth; column.Resizable = true; treeView.AppendColumn(column); column = new Gtk.TreeViewColumn() { Title = RomListViewModel.YearHeader }; cellRenderer = new Gtk.CellRendererText(); column.PackStart(cellRenderer, true); column.SetCellDataFunc(cellRenderer, (l, c, m, i) => VisualHelpers.CellTextColumnRenderer <ProgramDescriptionViewModel>(l, c, m, i, p => p.Year)); column.Sizing = Gtk.TreeViewColumnSizing.Fixed; column.FixedWidth = Properties.Settings.Default.RomListYearColWidth; column.Resizable = true; treeView.AppendColumn(column); column = new Gtk.TreeViewColumn() { Title = RomListViewModel.FeaturesHeader }; cellRenderer = new Gtk.CellRendererPixbuf(); cellRenderer.Xalign = 0; column.PackStart(cellRenderer, true); column.SetCellDataFunc(cellRenderer, (l, c, m, i) => VisualHelpers.CellImageColumnRenderer <ProgramDescriptionViewModel>(l, c, m, i, p => INTV.Shared.Converter.ProgramFeaturesToPixbufConverter.ConvertToPixbuf(p))); column.Sizing = Gtk.TreeViewColumnSizing.Fixed; column.FixedWidth = Properties.Settings.Default.RomListFeaturesColWidth; column.Resizable = true; treeView.AppendColumn(column); column = new Gtk.TreeViewColumn() { Title = RomListViewModel.RomFileHeader }; cellRenderer = new Gtk.CellRendererText(); column.PackStart(cellRenderer, true); column.SetCellDataFunc(cellRenderer, (l, c, m, i) => VisualHelpers.CellTextColumnRenderer <ProgramDescriptionViewModel>(l, c, m, i, p => p.Rom.RomPath)); ////column.Sizing = Gtk.TreeViewColumnSizing.Fixed; ////column.FixedWidth = Properties.Settings.Default.RomListPathColWidth; column.Resizable = true; treeView.AppendColumn(column); treeView.QueryTooltip += HandleQueryTooltip; ////column = new Gtk.TreeViewColumn() { Title = "Manual" }; ////cellRenderer = new Gtk.CellRendererText(); ////column.PackStart(cellRenderer, true); ////column.SetCellDataFunc(cellRenderer, (l,c,m,i) =>VisualHelpers.CellTextColumnRenderer<ProgramDescriptionViewModel>(l,c,m,i, p => p.ManualPath)); ////column.Sizing = Gtk.TreeViewColumnSizing.Fixed; ////column.FixedWidth = Properties.Settings.Default.RomListManualPathColWidth;; ////column.Resizable = true; ////treeView.AppendColumn(column); var romListStore = new Gtk.ListStore(typeof(ProgramDescriptionViewModel)); romListStore.SynchronizeCollection(viewModel.Programs); treeView.Model = romListStore; // Hackish way to get the visibility right. HandleSettingsChanged(Properties.Settings.Default, new System.ComponentModel.PropertyChangedEventArgs(Properties.Settings.ShowRomDetailsSettingName)); Properties.Settings.Default.PropertyChanged += HandleSettingsChanged; viewModel.Programs.CollectionChanged += HandleProgramsChanged; viewModel.Model.ProgramStatusChanged += HandleProgramStatusChanged; treeView.Selection.Changed += HandleSelectionChanged; ViewModel.CurrentSelection.CollectionChanged += HandleViewModelSelectionChanged; }