private bool IsAnyMenuSelectedByKey( ref DataGridView dgv, ref Menu menuFromSelected, ref string textselected) { Menu menu = menus[iMenuKey]; bool isStillSelected = false; if (menu != null && iRowKey > -1) { dgv = menu.GetDataGridView(); if (dgv.Rows.Count > iRowKey) { RowData rowData = (RowData)dgv. Rows[iRowKey].Cells[2].Value; if (rowData.IsSelected) { isStillSelected = true; menuFromSelected = rowData.SubMenu; textselected = dgv.Rows[iRowKey]. Cells[1].Value.ToString(); } } } return(isStillSelected); }
private void OpenSubMenu(object sender, RowData trigger) { Menu menuTriggered = trigger.SubMenu; Menu menuFromTrigger = menus[menuTriggered.Level - 1]; for (int level = menuTriggered.Level; level < MenuDefines.MenusMax; level++) { if (menus[level] != null) { Menu menuToClose = menus[level]; RowData oldTrigger = (RowData)menuToClose.Tag; DataGridView dgv = menuFromTrigger.GetDataGridView(); foreach (DataGridViewRow row in dgv.Rows) { RowData rowData = (RowData)row.Cells[2].Value; rowData.IsSelected = false; } trigger.IsSelected = true; dgv.ClearSelection(); dgv.Rows[trigger.RowIndex].Selected = true; menuToClose.HideWithFade(); menuToClose.VisibleChanged += MenuVisibleChanged; menus[level] = null; } } DisposeMenu(menus[menuTriggered.Level]); menus[menuTriggered.Level] = menuTriggered; AdjustMenusSizeAndLocation(); menus[menuTriggered.Level].ShowWithFadeOrTransparent(IsActive()); }
internal void SearchTextChanged(object sender, EventArgs e) { Menu menu = (Menu)sender; DataGridView dgv = menu.GetDataGridView(); if (dgv.Rows.Count > 0) { Select(dgv, 0, true); } }
private void AddItemsToMenu(List <RowData> data, Menu menu) { DataGridView dgv = menu.GetDataGridView(); DataTable dataTable = new DataTable(); dataTable.Columns.Add(dgv.Columns[0].Name, typeof(Icon)); dataTable.Columns.Add(dgv.Columns[1].Name, typeof(string)); dataTable.Columns.Add("data", typeof(RowData)); foreach (RowData rowData in data) { CreateMenuRow(rowData, menu, dataTable); } dgv.DataSource = dataTable; }
internal void DisposeMenu(Menu menuToDispose) { if (menuToDispose != null) { DataGridView dgv = menuToDispose.GetDataGridView(); foreach (DataGridViewRow row in dgv.Rows) { RowData rowData = (RowData)row.Cells[2].Value; rowData.Dispose(); DisposeMenu(rowData.SubMenu); } dgv.ClearSelection(); menuToDispose.Dispose(); } }
private void ClearIsSelectedByKey(int menuIndex, int rowIndex) { Menu menu = menus[menuIndex]; if (menu != null && rowIndex > -1) { DataGridView dgv = menu.GetDataGridView(); if (dgv.Rows.Count > rowIndex) { DataGridViewRow row = dgv.Rows[rowIndex]; RowData rowData = (RowData)row.Cells[2].Value; rowData.IsSelected = false; row.Selected = false; } } }
private void CheckMenuOpenerStop(int menuIndex, int rowIndex, DataGridView dgv = null) { Menu menu = menus[menuIndex]; if (menu != null && rowIndex > -1) { if (dgv == null) { dgv = menu.GetDataGridView(); } if (dgv.Rows.Count > rowIndex) { RowData trigger = (RowData)dgv.Rows[rowIndex].Cells[2].Value; if (trigger.Reading.IsBusy) { if (!trigger.IsContextMenuOpen) { trigger.IsSelected = false; dgv.Rows[rowIndex].Selected = false; } trigger.Reading.CancelAsync(); } else if (trigger.ContainsMenu && !trigger.IsLoading) { trigger.IsSelected = true; dgv.Rows[rowIndex].Selected = true; } else { if (!trigger.IsContextMenuOpen) { trigger.IsSelected = false; dgv.Rows[rowIndex].Selected = false; } } if (trigger.IsLoading) { trigger.StopLoadMenuAndStartWaitToOpenIt(); trigger.IsLoading = false; } } } }
private Menu Create(MenuData menuData, string title = null) { Menu menu = new Menu(); if (title != null) { if (string.IsNullOrEmpty(title)) { title = Path.GetPathRoot(Config.Path); } menu.SetTitle(title); menu.UserClickedOpenFolder += OpenFolder; void OpenFolder() { Log.ProcessStart("explorer.exe", Config.Path); } } menu.Level = menuData.Level; menu.MouseWheel += AdjustMenusSizeAndLocation; menu.MouseLeave += waitLeave.Start; menu.MouseEnter += waitLeave.Stop; menu.KeyPress += keyboardInput.KeyPress; menu.CmdKeyProcessed += keyboardInput.CmdKeyProcessed; menu.SearchTextChanging += keyboardInput.SearchTextChanging; menu.SearchTextChanged += Menu_SearchTextChanged; void Menu_SearchTextChanged(object sender, EventArgs e) { keyboardInput.SearchTextChanged(sender, e); AdjustMenusSizeAndLocation(); } menu.Deactivate += Deactivate; void Deactivate(object sender, EventArgs e) { FadeHalfOrOutIfNeeded(); if (!IsActive()) { deactivatedTime = DateTime.Now; } } menu.Activated += Activated; void Activated(object sender, EventArgs e) { if (IsActive() && menus[0].IsUsable) { menus[0].SetTitleColorActive(); AsList.ForEach(m => m.ShowWithFade()); } CheckIfWindowsStartStoleFocusNoDeactivateInRareCase(); void CheckIfWindowsStartStoleFocusNoDeactivateInRareCase() { timerStillActiveCheck.Interval = 1000; timerStillActiveCheck.Tick += StillActiveTick; void StillActiveTick(object senderTimer, EventArgs eTimer) { if (!waitLeave.IsRunning) { FadeHalfOrOutIfNeeded(); if (!IsActive()) { timerStillActiveCheck.Stop(); } } } timerStillActiveCheck.Start(); } } menu.VisibleChanged += MenuVisibleChanged; AddItemsToMenu(menuData.RowDatas, menu); DataGridView dgv = menu.GetDataGridView(); dgv.CellMouseEnter += Dgv_CellMouseEnter; dgv.CellMouseLeave += Dgv_CellMouseLeave; dgv.MouseDown += Dgv_MouseDown; dgv.MouseDoubleClick += Dgv_MouseDoubleClick; dgv.SelectionChanged += Dgv_SelectionChanged; return(menu); }
private void SelectByKey(Keys keys, string keyInput = "", bool keepSelection = false) { int iRowBefore = iRowKey; int iMenuBefore = iMenuKey; Menu menu = menus[iMenuKey]; DataGridView dgv = null; DataGridView dgvBefore = null; Menu menuFromSelected = null; string textselected = string.Empty; bool isStillSelected = IsAnyMenuSelectedByKey(ref dgv, ref menuFromSelected, ref textselected); if (isStillSelected) { if (keepSelection) { // If current selection is still valid for this search then skip selecting different item if (textselected.StartsWith(keyInput, true, CultureInfo.InvariantCulture)) { return; } } dgvBefore = dgv; } else { ResetSelectedByKey(); menu = menus[iMenuKey]; dgv = menu.GetDataGridView(); } bool toClear = false; switch (keys) { case Keys.Enter: if (iRowKey > -1 && dgv.Rows.Count > iRowKey) { RowData trigger = (RowData)dgv.Rows[iRowKey].Cells[2].Value; if (trigger.IsMenuOpen || !trigger.ContainsMenu) { trigger.MouseDown(dgv, null); trigger.DoubleClick( new MouseEventArgs(MouseButtons.Left, 0, 0, 0, 0)); } else { RowDeselected(iRowBefore, dgvBefore); SelectRow(dgv, iRowKey); EnterPressed.Invoke(dgv, iRowKey); } } break; case Keys.Up: if (SelectMatchedReverse(dgv, iRowKey) || SelectMatchedReverse(dgv, dgv.Rows.Count - 1)) { RowDeselected(iRowBefore, dgvBefore); SelectRow(dgv, iRowKey); toClear = true; } break; case Keys.Down: if (SelectMatched(dgv, iRowKey) || SelectMatched(dgv, 0)) { RowDeselected(iRowBefore, dgvBefore); SelectRow(dgv, iRowKey); toClear = true; } break; case Keys.Left: int iMenuKeyNext = iMenuKey + 1; if (isStillSelected) { if (menuFromSelected != null && menuFromSelected == menus[iMenuKeyNext]) { dgv = menuFromSelected.GetDataGridView(); if (dgv.Rows.Count > 0) { iMenuKey += 1; iRowKey = -1; if (SelectMatched(dgv, iRowKey) || SelectMatched(dgv, 0)) { RowDeselected(iRowBefore, dgvBefore); SelectRow(dgv, iRowKey); toClear = true; } } } } else { iRowKey = -1; iMenuKey = menus.Where(m => m != null).Count() - 1; if (menus[iMenuKey] != null) { dgv = menus[iMenuKey].GetDataGridView(); if (SelectMatched(dgv, iRowKey) || SelectMatched(dgv, 0)) { RowDeselected(iRowBefore, dgvBefore); SelectRow(dgv, iRowKey); toClear = true; } } } break; case Keys.Right: if (iMenuKey > 0) { if (menus[iMenuKey - 1] != null) { iMenuKey -= 1; iRowKey = -1; menu = menus[iMenuKey]; dgv = menu.GetDataGridView(); if (SelectMatched(dgv, dgv.SelectedRows[0].Index) || SelectMatched(dgv, 0)) { RowDeselected(iRowBefore, dgvBefore); SelectRow(dgv, iRowKey); toClear = true; } } } else { RowDeselected(iRowBefore, dgvBefore); iMenuKey = 0; iRowKey = -1; toClear = true; Cleared?.Invoke(); } break; case Keys.Escape: RowDeselected(iRowBefore, dgvBefore); iMenuKey = 0; iRowKey = -1; toClear = true; ClosePressed?.Invoke(); break; default: if (!string.IsNullOrEmpty(keyInput)) { if (SelectMatched(dgv, iRowKey, keyInput) || SelectMatched(dgv, 0, keyInput)) { RowDeselected(iRowBefore, null); SelectRow(dgv, iRowKey); toClear = true; } else if (isStillSelected) { iRowKey = iRowBefore - 1; if (SelectMatched(dgv, iRowKey, keyInput) || SelectMatched(dgv, 0, keyInput)) { RowDeselected(iRowBefore, null); SelectRow(dgv, iRowKey); } else { iRowKey = iRowBefore; } } } break; } if (isStillSelected && toClear) { ClearIsSelectedByKey(iMenuBefore, iRowBefore); } }