1
0
mirror of https://github.com/fadden/6502bench.git synced 2025-10-31 14:16:08 +00:00
Files
6502bench/SourceGen/WpfGui/ReferenceTable.xaml.cs
Andy McFadden afd55d36e3 Add "always on top" checkbox to reference table
It's annoying to have to go digging for the dialog.  The default
setting is "true", and the value is remembered for the duration of
the current session.
2025-06-27 13:21:36 -07:00

104 lines
3.6 KiB
C#

/*
* Copyright 2025 faddenSoft
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
using System;
using System.Collections.Generic;
using System.Collections.ObjectModel;
using System.Diagnostics;
using System.Windows;
using System.Windows.Input;
using CommonWPF;
namespace SourceGen.WpfGui {
/// <summary>
/// Side window with references to the project. This could be copied out of the References
/// panel or generated from a "find all" command.
/// </summary>
public partial class ReferenceTable : Window {
public class ReferenceTableItem {
public int OffsetValue { get; private set; }
public string Offset { get; private set; }
public string Addr { get; private set; }
public string Type { get; private set; }
public ReferenceTableItem(int offsetValue, string offset, string addr, string type) {
OffsetValue = offsetValue;
Offset = offset;
Addr = addr;
Type = type;
}
public override string ToString() {
return "[ReferenceTableItem: off=" + Offset + " addr=" + Addr + " type=" +
Type + "]";
}
}
// Remember setting for duration of execution.
private static bool sAlwaysOnTop = true;
public ObservableCollection<ReferenceTableItem> ReferencesList { get; private set; } =
new ObservableCollection<ReferenceTableItem>();
private MainController mMainCtrl;
public ReferenceTable(Window owner, MainController mainCtrl) {
InitializeComponent();
Owner = owner;
DataContext = this;
mMainCtrl = mainCtrl;
Topmost = sAlwaysOnTop;
}
/// <summary>
/// Replaces the existing list of items with a new list.
/// </summary>
public void SetItems(List<ReferenceTableItem> items) {
ReferencesList.Clear();
foreach (ReferenceTableItem item in items) {
ReferencesList.Add(item);
}
}
// Catch ESC key.
private void Window_KeyEventHandler(object sender, KeyEventArgs e) {
if (e.Key == Key.Escape) {
Close();
e.Handled = true;
}
}
// Remember the "always on top" setting.
private void Window_Closing(object sender, System.ComponentModel.CancelEventArgs e) {
sAlwaysOnTop = Topmost;
}
private void ReferencesList_MouseDoubleClick(object sender, MouseButtonEventArgs e) {
if (!tableDataGrid.GetClickRowColItem(e, out int unusedRow, out int unusedCol,
out object item)) {
// Header or empty area; ignore.
return;
}
ReferenceTableItem rli = (ReferenceTableItem)item;
// Jump to the offset, then shift the focus back to the code list.
mMainCtrl.GoToLocation(new NavStack.Location(rli.OffsetValue, 0,
NavStack.GoToMode.JumpToCodeData), true);
}
}
}