using System; using System.Collections.Generic; using System.Text; using System.Windows.Forms; using CecSharp; using LibCECTray.controller.applications; namespace LibCECTray.ui { /// /// Utility methods to change GUI content from another thread /// class AsyncControls { /// /// Enable or disable a control /// /// The control that contains the control to change /// The control to change /// True to enable, false to disable public static void SetControlEnabled(Control container, Control control, bool val) { if (container == null || control == null) return; if (container.InvokeRequired) { SetControlEnabledCallback d = SetControlEnabled; try { container.Invoke(d, new object[] { container, control, val }); } catch { } } else { control.Enabled = val; } } private delegate void SetControlEnabledCallback(Control container, Control control, bool val); /// /// Change the text label of a control /// /// The control that contains the control to change /// The control to change /// The new text public static void SetControlText(Control container, Control control, string val) { if (container == null || control == null) return; if (container.InvokeRequired) { SetControlTextCallback d = SetControlText; try { container.Invoke(d, new object[] { container, control, val }); } catch { } } else { control.Text = val; } } private delegate void SetControlTextCallback(Control container, Control control, string val); /// /// Change the checked status of a checkbox /// /// The control that contains the control to change /// The control to change /// True to change to checked, false to change to unchecked public static void SetCheckboxChecked(Control container, CheckBox control, bool val) { if (container.InvokeRequired) { SetCheckboxCheckedCallback d = SetCheckboxChecked; try { container.Invoke(d, new object[] { container, control, val }); } catch { } } else { control.Checked = val; } } private delegate void SetCheckboxCheckedCallback(Control container, CheckBox control, bool val); /// /// Change the checked status of an item in a CheckedListBox /// /// The control that contains the control to change /// The control to change /// The index of the checkbox in the list to change /// True to change to checked, false to change to unchecked public static void SetCheckboxItemChecked(Control container, CheckedListBox control, int index, bool val) { if (container.InvokeRequired) { SetCheckboxItemCheckedCallback d = SetCheckboxItemChecked; try { container.Invoke(d, new object[] { container, control, index, val }); } catch (Exception) { } } else { control.SetItemChecked(index, val); } } private delegate void SetCheckboxItemCheckedCallback(Control container, CheckedListBox control, int index, bool val); /// /// Changes the toolstrip menu text /// /// The control that contains the control to change /// The toolstrip menu item to change /// The new value public static void SetToolStripMenuText(Control container, ToolStripMenuItem item, string val) { if (container.InvokeRequired) { SetToolStripMenuTextCallback d = SetToolStripMenuText; try { container.Invoke(d, new object[] { container, item, val }); } catch (Exception) { } } else { item.Text = val; } } private delegate void SetToolStripMenuTextCallback(Control container, ToolStripMenuItem item, string val); /// /// Changes the progress value of a progress bar /// /// The control that contains the control to change /// The control to change /// The new percentage public static void SetProgressValue(Control container, ProgressBar control, int val) { if (container.InvokeRequired) { SetProgressValueCallback d = SetProgressValue; try { container.Invoke(d, new object[] { container, control, val }); } catch (Exception) { } } else { control.Value = val; } } private delegate void SetProgressValueCallback(Control container, ProgressBar control, int val); /// /// Replaces the items of a combobox /// /// The control that contains the control to change /// The control to change /// The new selection index /// The new content public static void SetComboBoxItems(Control container, ComboBox control, int selectedIndex, object[] val) { if (container.InvokeRequired) { SetComboBoxItemsCallback d = SetComboBoxItems; try { container.Invoke(d, new object[] { container, control, selectedIndex, val }); } catch (Exception) { } } else { control.Items.Clear(); control.Items.AddRange(val); if (control.Items.Count > 0) control.SelectedIndex = selectedIndex; } } private delegate void SetComboBoxItemsCallback(Control container, ComboBox control, int selectedIndex, object[] val); /// /// Make a control visible or invisible /// /// The control that contains the control to change /// The control to change /// True to make it visible, false to make it invisible public static void SetControlVisible(Control container, Control control, bool val) { if (container.InvokeRequired) { SetControlVisibleCallback d = SetControlVisible; try { container.Invoke(d, new object[] { container, control, val }); } catch (Exception) { } } else { control.Visible = val; } } private delegate void SetControlVisibleCallback(Control container, Control control, bool val); /// /// Display a new dialog /// /// The control that contains the control to change /// The control to display /// True to make it a modal dialog public static void DisplayDialog(Control container, Form control, bool modal) { if (container.InvokeRequired) { DisplayDialogCallback d = DisplayDialog; try { container.Invoke(d, new object[] { container, control, modal }); } catch (Exception) { } } else { if (modal) control.ShowDialog(container); else control.Show(container); } } private delegate void DisplayDialogCallback(Control container, Form control, bool modal); /// /// Hides a control /// /// The control to hide /// True to hide, false to show public static void SafeHide(Control container, bool val) { if (container.InvokeRequired) { SafeHideCallback d = SafeHide; try { container.Invoke(d, new object[] { container, val }); } catch (Exception) { } } else { if (val) container.Hide(); else container.Show(); } } private delegate void SafeHideCallback(Control container, bool val); /// /// Change the selected index /// /// The control that contains the control to change /// The control to change /// The new selected index public static void SetSelectedIndex(Control container, ComboBox control, int index) { if (container.InvokeRequired) { SetSelectedIndexCallback d = SetSelectedIndex; try { container.Invoke(d, new object[] { container, control, index }); } catch (Exception) { } } else { control.SelectedIndex = index; } } private delegate void SetSelectedIndexCallback(Control container, ComboBox control, int index); /// /// Get the name of the selected tab in a TabControl /// /// The tab container /// The tab pages /// The name of the selected tab public static string GetSelectedTabName(TabControl container, TabControl.TabPageCollection tabPages) { if (container.InvokeRequired) { GetSelectedTabNameCallback d = GetSelectedTabName; try { return container.Invoke(d, new object[] { container, tabPages }) as string; } catch (Exception) { } } else { return tabPages[container.SelectedIndex].Name; } return string.Empty; } private delegate string GetSelectedTabNameCallback(TabControl container, TabControl.TabPageCollection tabPages); /// /// Selects the row with the given CecKeypress for a datagrid /// /// The datagrid container /// The datagrid /// The key to selected public static void SelectKeypressRow(Control container, DataGridView dgView, CecKeypress key) { if (dgView.InvokeRequired) { SelectKeypressRowCallback d = SelectKeypressRow; try { container.Invoke(d, new object[] { container, dgView, key }); } catch (Exception) { } } else { var rowIndex = -1; foreach (DataGridViewRow row in dgView.Rows) { CecButtonConfigItem item = row.DataBoundItem as CecButtonConfigItem; if (item != null && item.Key.Keycode == key.Keycode) { rowIndex = row.Index; row.Selected = true; item.Enabled = true; } else { row.Selected = false; } } if (rowIndex > -1) dgView.FirstDisplayedScrollingRowIndex = rowIndex; } } private delegate void SelectKeypressRowCallback(Control container, DataGridView dgView, CecKeypress key); } }