mirror of
https://github.com/gui-cs/Terminal.Gui.git
synced 2025-12-30 09:47:58 +01:00
merged
This commit is contained in:
@@ -10,7 +10,7 @@ using System.Collections;
|
||||
using System.Collections.Generic;
|
||||
using System.Text;
|
||||
|
||||
namespace Terminal.Gui;
|
||||
namespace Terminal.Gui;
|
||||
|
||||
/// <summary>
|
||||
/// Provides a drop-down list of items the user can select from.
|
||||
@@ -32,6 +32,7 @@ public class ComboBox : View {
|
||||
{
|
||||
_container = container ?? throw new ArgumentNullException (nameof (container), "ComboBox container cannot be null.");
|
||||
HideDropdownListOnClick = hideDropdownListOnClick;
|
||||
AddCommand (Command.LineUp, () => _container.MoveUpList ());
|
||||
}
|
||||
|
||||
public bool HideDropdownListOnClick {
|
||||
@@ -589,18 +590,23 @@ public class ComboBox : View {
|
||||
|
||||
bool? MoveUp ()
|
||||
{
|
||||
if (_search.HasFocus) {
|
||||
// stop odd behavior on KeyUp when search has focus
|
||||
return true;
|
||||
if (HasItems ()) {
|
||||
_listview.MoveUp ();
|
||||
}
|
||||
return true;
|
||||
}
|
||||
|
||||
bool? MoveUpList ()
|
||||
{
|
||||
if (_listview.HasFocus && _listview.SelectedItem == 0 && _searchset?.Count > 0) // jump back to search
|
||||
{
|
||||
_search.CursorPosition = _search.Text.GetRuneCount ();
|
||||
_search.SetFocus ();
|
||||
return true;
|
||||
} else {
|
||||
MoveUp ();
|
||||
}
|
||||
return null;
|
||||
|
||||
return true;
|
||||
}
|
||||
|
||||
bool? MoveDown ()
|
||||
@@ -612,6 +618,8 @@ public class ComboBox : View {
|
||||
_listview.SetFocus ();
|
||||
if (_listview.SelectedItem > -1) {
|
||||
SetValue (_searchset [_listview.SelectedItem]);
|
||||
} else {
|
||||
_listview.SelectedItem = 0;
|
||||
}
|
||||
} else {
|
||||
_listview.TabStop = false;
|
||||
@@ -731,18 +739,18 @@ public class ComboBox : View {
|
||||
_isShow = false;
|
||||
}
|
||||
|
||||
private int GetSelectedItemFromSource (string searchText)
|
||||
{
|
||||
if (_source is null) {
|
||||
return -1;
|
||||
}
|
||||
for (int i = 0; i < _searchset.Count; i++) {
|
||||
if (_searchset [i].ToString () == searchText) {
|
||||
return i;
|
||||
}
|
||||
}
|
||||
private int GetSelectedItemFromSource (string searchText)
|
||||
{
|
||||
if (_source is null) {
|
||||
return -1;
|
||||
}
|
||||
for (int i = 0; i < _searchset.Count; i++) {
|
||||
if (_searchset [i].ToString () == searchText) {
|
||||
return i;
|
||||
}
|
||||
}
|
||||
return -1;
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Reset to full original list
|
||||
@@ -784,20 +792,20 @@ public class ComboBox : View {
|
||||
}
|
||||
}
|
||||
|
||||
private void Search_Changed (object sender, TextChangedEventArgs e)
|
||||
{
|
||||
if (_source is null) { // Object initialization
|
||||
return;
|
||||
}
|
||||
private void Search_Changed (object sender, TextChangedEventArgs e)
|
||||
{
|
||||
if (_source is null) { // Object initialization
|
||||
return;
|
||||
}
|
||||
|
||||
if (string.IsNullOrEmpty (_search.Text) && string.IsNullOrEmpty (e.OldValue)) {
|
||||
ResetSearchSet ();
|
||||
} else if (_search.Text != e.OldValue) {
|
||||
if (_search.Text.Length < e.OldValue.Length) {
|
||||
_selectedItem = -1;
|
||||
}
|
||||
_isShow = true;
|
||||
ResetSearchSet (noCopy: true);
|
||||
if (string.IsNullOrEmpty (_search.Text) && string.IsNullOrEmpty (e.OldValue)) {
|
||||
ResetSearchSet ();
|
||||
} else if (_search.Text != e.OldValue) {
|
||||
if (_search.Text.Length < e.OldValue.Length) {
|
||||
_selectedItem = -1;
|
||||
}
|
||||
_isShow = true;
|
||||
ResetSearchSet (noCopy: true);
|
||||
|
||||
foreach (object item in _source.ToList ()) {
|
||||
// Iterate to preserver object type and force deep copy
|
||||
|
||||
@@ -3180,15 +3180,15 @@ public class TextView : View {
|
||||
/// <param name="toAdd">Text to add</param>
|
||||
public void InsertText (string toAdd)
|
||||
{
|
||||
foreach (var ch in toAdd) {
|
||||
KeyCode key;
|
||||
foreach (char ch in toAdd) {
|
||||
Key key;
|
||||
try {
|
||||
key = (KeyCode)ch;
|
||||
key = new Key(ch);
|
||||
} catch (Exception) {
|
||||
throw new ArgumentException ($"Cannot insert character '{ch}' because it does not map to a Key");
|
||||
}
|
||||
|
||||
InsertText (new Key (key));
|
||||
InsertText (key);
|
||||
|
||||
if (NeedsDisplay) {
|
||||
Adjust ();
|
||||
|
||||
@@ -65,6 +65,10 @@
|
||||
"MenuBarScenario": {
|
||||
"commandName": "Project",
|
||||
"commandLineArgs": "MenuBar"
|
||||
},
|
||||
"ListView & ComboBox": {
|
||||
"commandName": "Project",
|
||||
"commandLineArgs": "\"ListView & ComboBox\""
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -139,6 +139,9 @@ public class ResponderTests {
|
||||
[Fact]
|
||||
public void Responder_Not_Notifying_Dispose ()
|
||||
{
|
||||
// Only clear before because need to test after assert
|
||||
Responder.Instances.Clear ();
|
||||
|
||||
var container1 = new View () { Id = "Container1" };
|
||||
|
||||
var view = new View () { Id = "View" };
|
||||
@@ -175,6 +178,9 @@ public class ResponderTests {
|
||||
[Fact]
|
||||
public void Disposing_Event_Notify_All_Subscribers_On_The_Second_Container ()
|
||||
{
|
||||
// Only clear before because need to test after assert
|
||||
Responder.Instances.Clear ();
|
||||
|
||||
var container1 = new View () { Id = "Container1" };
|
||||
|
||||
var view = new View () { Id = "View" };
|
||||
@@ -212,6 +218,9 @@ public class ResponderTests {
|
||||
[Fact]
|
||||
public void Disposing_Event_Notify_All_Subscribers_On_The_First_Container ()
|
||||
{
|
||||
// Only clear before because need to test after assert
|
||||
Responder.Instances.Clear ();
|
||||
|
||||
var container1 = new View () { Id = "Container1" };
|
||||
var count = 0;
|
||||
|
||||
|
||||
@@ -153,7 +153,7 @@ namespace Terminal.Gui.TextTests {
|
||||
Assert.Equal (3, g.AllSuggestions.Count);
|
||||
Assert.True (tv.NewKeyDownEvent (new (tv.Autocomplete.SelectionKey)));
|
||||
tv.PositionCursor ();
|
||||
Assert.Equal ($"fortunately Fortunately super feature.", tv.Text);
|
||||
Assert.Equal ($"Fortunately Fortunately super feature.", tv.Text);
|
||||
Assert.Equal (new Point (11, 0), tv.CursorPosition);
|
||||
Assert.Empty (tv.Autocomplete.Suggestions);
|
||||
Assert.Equal (3, g.AllSuggestions.Count);
|
||||
|
||||
Reference in New Issue
Block a user