mirror of
https://github.com/ClassiCube/ClassiCube.git
synced 2025-09-17 19:45:23 -04:00
Fix highlighted server hash changing with search filters (Thanks Odd0002)
This commit is contained in:
parent
046f334187
commit
c3b7cde53b
@ -79,7 +79,7 @@ namespace Launcher.Gui.Screens {
|
||||
if (e.Key == Key.Enter) {
|
||||
string curServer = Get(view.hashIndex) ?? "";
|
||||
if (table.Count >= 1 && curServer == "") {
|
||||
widgets[view.hashIndex].Text = table.usedEntries[0].Hash;
|
||||
widgets[view.hashIndex].Text = table.Get(0).Hash;
|
||||
ConnectToServer(0, 0);
|
||||
} else if (curServer != "" &&
|
||||
(selectedWidget == null || selectedWidget == widgets[view.tableIndex])) {
|
||||
@ -139,10 +139,11 @@ namespace Launcher.Gui.Screens {
|
||||
void SwitchToMain(int x, int y) { game.SetScreen(new MainScreen(game)); }
|
||||
|
||||
void FilterList() {
|
||||
if (curInput != widgets[view.searchIndex])
|
||||
return;
|
||||
if (curInput != widgets[view.searchIndex]) return;
|
||||
|
||||
TableWidget table = (TableWidget)widgets[view.tableIndex];
|
||||
table.FilterEntries(curInput.Text);
|
||||
table.SetSelected(table.SelectedHash);
|
||||
MarkPendingRedraw();
|
||||
}
|
||||
|
||||
|
@ -52,8 +52,8 @@ namespace Launcher.Gui.Widgets {
|
||||
maxIndex = i; return;
|
||||
}
|
||||
|
||||
table.usedEntries[i].Y = y;
|
||||
table.usedEntries[i].Height = entryHeight;
|
||||
table.entries[table.order[i]].Y = y;
|
||||
table.entries[table.order[i]].Height = entryHeight;
|
||||
y += entryHeight + 2;
|
||||
}
|
||||
}
|
||||
@ -97,10 +97,11 @@ namespace Launcher.Gui.Widgets {
|
||||
public void DrawFlags() {
|
||||
using (FastBitmap dst = game.LockBits()) {
|
||||
for (int i = table.CurrentIndex; i < maxIndex; i++) {
|
||||
int x = table.X, y = table.usedEntries[i].Y;
|
||||
FastBitmap flag = GetFlag(table.usedEntries[i].Flag);
|
||||
TableEntry entry = table.Get(i);
|
||||
FastBitmap flag = GetFlag(entry.Flag);
|
||||
if (flag == null) continue;
|
||||
|
||||
int x = table.X, y = entry.Y;
|
||||
Rectangle rect = new Rectangle(x + 2, y + 3, 16, 11);
|
||||
BitmapDrawer.Draw(flag, dst, rect);
|
||||
}
|
||||
@ -119,13 +120,14 @@ namespace Launcher.Gui.Widgets {
|
||||
|
||||
y += 5;
|
||||
for (int i = table.CurrentIndex; i < table.Count; i++) {
|
||||
args = new DrawTextArgs(filter(table.usedEntries[i]), font, true);
|
||||
if ((i == table.SelectedIndex || table.entries[i].Featured) && !separator) {
|
||||
TableEntry entry = table.Get(i);
|
||||
args = new DrawTextArgs(filter(entry), font, true);
|
||||
if ((i == table.SelectedIndex || entry.Featured) && !separator) {
|
||||
int startY = y - 3;
|
||||
int height = Math.Min(startY + (entryHeight + 4), table.Y + table.Height) - startY;
|
||||
drawer.Clear(GetGridCol(table.entries[i].Featured, i == table.SelectedIndex), table.X, startY, table.Width, height);
|
||||
drawer.Clear(GetGridCol(entry.Featured, i == table.SelectedIndex), table.X, startY, table.Width, height);
|
||||
}
|
||||
if (!DrawColumnEntry(drawer, ref args, maxWidth, x, ref y, ref table.usedEntries[i])) {
|
||||
if (!DrawColumnEntry(drawer, ref args, maxWidth, x, ref y, ref entry)) {
|
||||
maxIndex = i; break;
|
||||
}
|
||||
}
|
||||
@ -166,8 +168,8 @@ namespace Launcher.Gui.Widgets {
|
||||
|
||||
void ResetEntries() {
|
||||
for (int i = 0; i < table.Count; i++) {
|
||||
table.entries[i].Height = 0; table.usedEntries[i].Height = 0;
|
||||
table.entries[i].Y = -10; table.usedEntries[i].Y = -10;
|
||||
table.entries[i].Height = 0;
|
||||
table.entries[i].Y = -10;
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -30,14 +30,15 @@ namespace Launcher.Gui.Widgets {
|
||||
public string SelectedHash = "";
|
||||
public int CurrentIndex, Count;
|
||||
|
||||
internal TableEntry[] entries, usedEntries;
|
||||
internal List<ServerListEntry> servers;
|
||||
internal TableEntry[] entries;
|
||||
internal int[] order;
|
||||
internal List<ServerListEntry> servers;
|
||||
internal TableEntry Get(int i) { return entries[order[i]]; }
|
||||
|
||||
public void SetEntries(List<ServerListEntry> servers) {
|
||||
entries = new TableEntry[servers.Count];
|
||||
usedEntries = new TableEntry[servers.Count];
|
||||
order = new int[servers.Count];
|
||||
this.servers = servers;
|
||||
int index = 0;
|
||||
|
||||
for (int i = 0; i < servers.Count; i++) {
|
||||
ServerListEntry e = servers[i];
|
||||
@ -51,25 +52,25 @@ namespace Launcher.Gui.Widgets {
|
||||
tableEntry.Featured = e.Featured;
|
||||
tableEntry.Flag = e.Flag;
|
||||
|
||||
entries[index] = tableEntry;
|
||||
usedEntries[index] = tableEntry;
|
||||
index++;
|
||||
entries[i] = tableEntry;
|
||||
order[i] = i;
|
||||
}
|
||||
Count = entries.Length;
|
||||
}
|
||||
|
||||
string curFilter;
|
||||
public void FilterEntries(string filter) {
|
||||
curFilter = filter;
|
||||
Count = 0;
|
||||
int index = 0;
|
||||
|
||||
for (int i = 0; i < entries.Length; i++) {
|
||||
TableEntry entry = entries[i];
|
||||
if (entry.Name.IndexOf(filter, StringComparison.OrdinalIgnoreCase) >= 0) {
|
||||
Count++;
|
||||
usedEntries[index++] = entry;
|
||||
order[Count++] = i;
|
||||
}
|
||||
}
|
||||
SetSelected(SelectedHash);
|
||||
for (int i = Count; i < entries.Length; i++) {
|
||||
order[i] = -100000;
|
||||
}
|
||||
}
|
||||
|
||||
internal void GetScrollbarCoords(out int y, out int height) {
|
||||
@ -93,18 +94,18 @@ namespace Launcher.Gui.Widgets {
|
||||
ClampIndex();
|
||||
|
||||
if (Count > 0) {
|
||||
SelectedChanged(usedEntries[index].Hash);
|
||||
SelectedHash = usedEntries[index].Hash;
|
||||
TableEntry entry = Get(index);
|
||||
SelectedChanged(entry.Hash);
|
||||
SelectedHash = entry.Hash;
|
||||
}
|
||||
}
|
||||
|
||||
public void SetSelected(string hash) {
|
||||
SelectedIndex = -1;
|
||||
for (int i = 0; i < Count; i++) {
|
||||
if (usedEntries[i].Hash == hash) {
|
||||
SetSelected(i);
|
||||
return;
|
||||
}
|
||||
if (Get(i).Hash != hash) continue;
|
||||
SetSelected(i);
|
||||
return;
|
||||
}
|
||||
}
|
||||
|
||||
@ -194,11 +195,13 @@ namespace Launcher.Gui.Widgets {
|
||||
}
|
||||
|
||||
void SortEntries(TableEntryComparer comparer, bool noRedraw) {
|
||||
Array.Sort(usedEntries, 0, Count, comparer);
|
||||
Array.Sort(entries, 0, entries.Length, comparer);
|
||||
lastIndex = -10;
|
||||
if (noRedraw) return;
|
||||
lastIndex = -10;
|
||||
if (curFilter != null && curFilter.Length > 0) {
|
||||
FilterEntries(curFilter);
|
||||
}
|
||||
|
||||
if (noRedraw) return;
|
||||
comparer.Invert = !comparer.Invert;
|
||||
SetSelected(SelectedHash);
|
||||
NeedRedraw();
|
||||
@ -206,7 +209,7 @@ namespace Launcher.Gui.Widgets {
|
||||
|
||||
void GetSelectedServer(int mouseX, int mouseY) {
|
||||
for (int i = 0; i < Count; i++) {
|
||||
TableEntry entry = usedEntries[i];
|
||||
TableEntry entry = Get(i);
|
||||
if (mouseY < entry.Y || mouseY >= entry.Y + entry.Height + 2) continue;
|
||||
|
||||
if (lastIndex == i && (DateTime.UtcNow - lastPress).TotalSeconds < 1) {
|
||||
|
Loading…
x
Reference in New Issue
Block a user