public Screen(string path) // Конструктор принимает строку - путь до папки, элементы которой нужно отобразить { Path = path; DirectoryInfo dir = new DirectoryInfo(Path); Content = dir.GetFileSystemInfos(); CurrentItem = 0; // Устанавливает выбранный элемент на 0й Mode = FMode.Directory; // По умолчанию FMode = Directory }
public Screen(string path) { //принимает путь для необходимой папки, элементы которой нужно отобразить Path = path; DirectoryInfo dir = new DirectoryInfo(Path); Content = dir.GetFileSystemInfos(); CurrentItem = 0; // устанавливает выбранный элемент на начальнуй (нулевой) Mode = FMode.Directory; // по умолчанию FMode = Directory }
private void SpecialKeyStateChanged(IAsyncResult ar) { if ((_stream != null) && ar.IsCompleted) { try { _stream.EndRead(ar); } catch (OperationCanceledException) { } catch (IOException) { Disconnected?.Invoke(null, EventArgs.Empty); Stop(); Start(); return; } byte[] asyncState = ar.AsyncState as byte[]; if (asyncState[0] == 0x11 || asyncState[0] == 0x00) { bool fnDown = (asyncState[1] & 0x10) == 0x10; bool ejectDown = (asyncState[1] & 0x8) == 0x8; if (fnDown != FnDown) { FnDown = fnDown; Fn?.Invoke(FnDown); FMode?.Invoke(FnDown); } if (ejectDown != EjectDown) { EjectDown = ejectDown; Eject?.Invoke(EjectDown); Key?.Invoke(System.Windows.Input.Key.F13, EjectDown); } } else if (asyncState[0] == 0x13) { PowerButtonDown = asyncState[1] == 1; Power?.Invoke(PowerButtonDown); } _stream.BeginRead(asyncState, 0, asyncState.Length, new AsyncCallback(SpecialKeyStateChanged), asyncState); } }
public void Display() // Вывод в консоль всех папок и файлов { Console.Clear(); // Очистка консоли от предыдущих папок и файлов Console.ForegroundColor = ConsoleColor.Yellow; Console.WriteLine("Arrow Up - next | Arrow down - previous | Enter - Open | Backspace - Back | R - Rename | Esc - Exit"); // Вывести команды в консоль Mode = FMode.Directory; for (int i = 0; i < Content.Length; i++) { if (i == CurrentItem) { Console.ForegroundColor = ConsoleColor.Green; // Если текущий индекс соответствует выбранному, то выделить цветом } else { Console.ForegroundColor = ConsoleColor.White; } Console.WriteLine(i + 1 + ". " + Content[i].Name); } }
public void Display() { // выводит в консоль всех папок и файлов Console.Clear(); // очищает консоли от предыдущих папок и файлов Console.ForegroundColor = ConsoleColor.Yellow; Console.WriteLine("Arrow Up - next | Arrow down - previous | Enter - Open | Backspace - Back | R - Rename | Esc - Exit"); // выводит команды в консоль для удобства юзера Mode = FMode.Directory; for (int i = 0; i < Content.Length; i++) { if (i == CurrentItem) { Console.ForegroundColor = ConsoleColor.DarkRed; // выделяет цветом, если индекс соответсвует выбранному } else { Console.ForegroundColor = ConsoleColor.White; } Console.WriteLine(i + 1 + ". " + Content[i].Name); } }
public void Stop() { if (stream != null) { stream.Close(); stream = null; } if (FnDown) { Fn?.Invoke(false); FMode?.Invoke(false); FnDown = false; } if (EjectDown) { Eject?.Invoke(false); EjectDown = false; } }
private void SpecialKeyStateChanged(IAsyncResult ar) { // Check Stream if (stream == null || !ar.IsCompleted) { return; } // Process Event if (!(ar.AsyncState is byte[] asyncState)) { return; } if (asyncState[0] == 0x11 || asyncState[0] == 0x00) { var fnDown = (asyncState[1] & 0x10) == 0x10; var ejectDown = (asyncState[1] & 0x8) == 0x8; if (fnDown != FnDown) { FnDown = fnDown; Fn?.Invoke(FnDown); FMode?.Invoke(FnDown); } if (ejectDown != EjectDown) { EjectDown = ejectDown; Eject?.Invoke(EjectDown); Key?.Invoke(System.Windows.Input.Key.F13, EjectDown); } } else if (asyncState[0] == 0x13) { PowerButtonDown = asyncState[1] == 1; Power?.Invoke(PowerButtonDown); } // End this read try { stream.EndRead(ar); } catch (IOException) { // TODO maybe move this restart logic elsewhere? Disconnected?.Invoke(null, EventArgs.Empty); Stop(); Start(); return; } catch { // ignored } //TODO Convert to Observable<byte[0x16]> // Next read next stream.BeginRead(asyncState, 0, asyncState.Length, SpecialKeyStateChanged, asyncState); }