mirror of
https://github.com/fadden/6502bench.git
synced 2025-08-10 12:24:58 +00:00
Implement Edit Comment
I still don't know why Windows wants to refer to semicolon as "Oem1". Happily it's possible to override the tip string.
This commit is contained in:
@@ -1427,11 +1427,9 @@ namespace SourceGenWPF {
|
|||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
case CodeListColumn.Comment:
|
case CodeListColumn.Comment:
|
||||||
#if false
|
if (CanEditComment()) {
|
||||||
if (editCommentToolStripMenuItem.Enabled) {
|
EditComment();
|
||||||
EditComment_Click(sender, e);
|
|
||||||
}
|
}
|
||||||
#endif
|
|
||||||
break;
|
break;
|
||||||
|
|
||||||
}
|
}
|
||||||
@@ -1486,6 +1484,33 @@ namespace SourceGenWPF {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public bool CanEditComment() {
|
||||||
|
if (SelectionAnalysis.mNumItemsSelected != 1) {
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
// Line must be code or data.
|
||||||
|
return (SelectionAnalysis.mLineType == LineListGen.Line.Type.Code ||
|
||||||
|
SelectionAnalysis.mLineType == LineListGen.Line.Type.Data);
|
||||||
|
}
|
||||||
|
|
||||||
|
public void EditComment() {
|
||||||
|
int selIndex = mMainWin.CodeListView_GetFirstSelectedIndex();
|
||||||
|
int offset = CodeLineList[selIndex].FileOffset;
|
||||||
|
|
||||||
|
string oldComment = mProject.Comments[offset];
|
||||||
|
EditComment dlg = new EditComment(mMainWin, oldComment);
|
||||||
|
if (dlg.ShowDialog() == true) {
|
||||||
|
if (!oldComment.Equals(dlg.CommentText)) {
|
||||||
|
Debug.WriteLine("Changing comment at +" + offset.ToString("x6"));
|
||||||
|
|
||||||
|
UndoableChange uc = UndoableChange.CreateCommentChange(offset,
|
||||||
|
oldComment, dlg.CommentText);
|
||||||
|
ChangeSet cs = new ChangeSet(uc);
|
||||||
|
ApplyUndoableChanges(cs);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
public void EditHeaderComment() {
|
public void EditHeaderComment() {
|
||||||
EditLongComment(LineListGen.Line.HEADER_COMMENT_OFFSET);
|
EditLongComment(LineListGen.Line.HEADER_COMMENT_OFFSET);
|
||||||
}
|
}
|
||||||
|
@@ -84,6 +84,9 @@
|
|||||||
<Compile Include="WpfGui\EditAppSettings.xaml.cs">
|
<Compile Include="WpfGui\EditAppSettings.xaml.cs">
|
||||||
<DependentUpon>EditAppSettings.xaml</DependentUpon>
|
<DependentUpon>EditAppSettings.xaml</DependentUpon>
|
||||||
</Compile>
|
</Compile>
|
||||||
|
<Compile Include="WpfGui\EditComment.xaml.cs">
|
||||||
|
<DependentUpon>EditComment.xaml</DependentUpon>
|
||||||
|
</Compile>
|
||||||
<Compile Include="WpfGui\EditDataOperand.xaml.cs">
|
<Compile Include="WpfGui\EditDataOperand.xaml.cs">
|
||||||
<DependentUpon>EditDataOperand.xaml</DependentUpon>
|
<DependentUpon>EditDataOperand.xaml</DependentUpon>
|
||||||
</Compile>
|
</Compile>
|
||||||
@@ -214,6 +217,10 @@
|
|||||||
<SubType>Designer</SubType>
|
<SubType>Designer</SubType>
|
||||||
<Generator>MSBuild:Compile</Generator>
|
<Generator>MSBuild:Compile</Generator>
|
||||||
</Page>
|
</Page>
|
||||||
|
<Page Include="WpfGui\EditComment.xaml">
|
||||||
|
<SubType>Designer</SubType>
|
||||||
|
<Generator>MSBuild:Compile</Generator>
|
||||||
|
</Page>
|
||||||
<Page Include="WpfGui\EditDataOperand.xaml">
|
<Page Include="WpfGui\EditDataOperand.xaml">
|
||||||
<SubType>Designer</SubType>
|
<SubType>Designer</SubType>
|
||||||
<Generator>MSBuild:Compile</Generator>
|
<Generator>MSBuild:Compile</Generator>
|
||||||
|
49
SourceGenWPF/WpfGui/EditComment.xaml
Normal file
49
SourceGenWPF/WpfGui/EditComment.xaml
Normal file
@@ -0,0 +1,49 @@
|
|||||||
|
<!--
|
||||||
|
Copyright 2019 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.
|
||||||
|
-->
|
||||||
|
|
||||||
|
<Window x:Class="SourceGenWPF.WpfGui.EditComment"
|
||||||
|
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
|
||||||
|
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
|
||||||
|
xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
|
||||||
|
xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
|
||||||
|
xmlns:system="clr-namespace:System;assembly=mscorlib"
|
||||||
|
xmlns:local="clr-namespace:SourceGenWPF.WpfGui"
|
||||||
|
mc:Ignorable="d"
|
||||||
|
Title="Edit Comment"
|
||||||
|
SizeToContent="WidthAndHeight" ResizeMode="NoResize"
|
||||||
|
ShowInTaskbar="False" WindowStartupLocation="CenterOwner"
|
||||||
|
ContentRendered="Window_ContentRendered">
|
||||||
|
|
||||||
|
<StackPanel Margin="8">
|
||||||
|
<TextBlock Text="Enter comment:"/>
|
||||||
|
<TextBox Name="commentTextBox" Text="{Binding CommentText}" Width="480" Margin="0,4,0,0"
|
||||||
|
TextChanged="CommentTextBox_TextChanged"/>
|
||||||
|
<DockPanel>
|
||||||
|
<TextBlock DockPanel.Dock="Right"
|
||||||
|
Text="{Binding StringFormat={}{0} characters, ElementName=commentTextBox, Path=Text.Length}"/>
|
||||||
|
<TextBlock Name="asciiOnlyLabel" DockPanel.Dock="Left" Margin="0,4,0,0"
|
||||||
|
Text="• ASCII-only is recommended"/>
|
||||||
|
</DockPanel>
|
||||||
|
<TextBlock Name="maxLengthLabel" Text="• Limit to 52 or fewer characters for nice 80-column output"/>
|
||||||
|
|
||||||
|
<StackPanel Orientation="Horizontal" HorizontalAlignment="Right" Margin="0,8,0,0">
|
||||||
|
<Button Name="okButton" Content="OK" IsDefault="True" Width="70"
|
||||||
|
Click="OkButton_Click"/>
|
||||||
|
<Button Name="cancelButton" Content="Cancel" IsCancel="True"
|
||||||
|
Width="70" Margin="4,0,0,0"/>
|
||||||
|
</StackPanel>
|
||||||
|
</StackPanel>
|
||||||
|
</Window>
|
84
SourceGenWPF/WpfGui/EditComment.xaml.cs
Normal file
84
SourceGenWPF/WpfGui/EditComment.xaml.cs
Normal file
@@ -0,0 +1,84 @@
|
|||||||
|
/*
|
||||||
|
* Copyright 2019 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.ComponentModel;
|
||||||
|
using System.Diagnostics;
|
||||||
|
using System.Runtime.CompilerServices;
|
||||||
|
using System.Text;
|
||||||
|
using System.Windows;
|
||||||
|
using System.Windows.Controls;
|
||||||
|
using System.Windows.Media;
|
||||||
|
|
||||||
|
namespace SourceGenWPF.WpfGui {
|
||||||
|
/// <summary>
|
||||||
|
/// Comment editor.
|
||||||
|
/// </summary>
|
||||||
|
public partial class EditComment : Window, INotifyPropertyChanged {
|
||||||
|
private const int RECOMMENDED_MAX_LENGTH = 52;
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// Edited comment string. Will be empty if the comment is to be deleted.
|
||||||
|
/// </summary>
|
||||||
|
public string CommentText {
|
||||||
|
get { return mCommentText; }
|
||||||
|
set {
|
||||||
|
mCommentText = value;
|
||||||
|
OnPropertyChanged();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
private string mCommentText;
|
||||||
|
|
||||||
|
private Brush mDefaultLabelColor;
|
||||||
|
|
||||||
|
// INotifyPropertyChanged implementation
|
||||||
|
public event PropertyChangedEventHandler PropertyChanged;
|
||||||
|
private void OnPropertyChanged([CallerMemberName] string propertyName = "") {
|
||||||
|
PropertyChanged?.Invoke(this, new PropertyChangedEventArgs(propertyName));
|
||||||
|
}
|
||||||
|
|
||||||
|
public EditComment(Window owner, string comment) {
|
||||||
|
InitializeComponent();
|
||||||
|
Owner = owner;
|
||||||
|
DataContext = this;
|
||||||
|
|
||||||
|
CommentText = comment;
|
||||||
|
mDefaultLabelColor = asciiOnlyLabel.Foreground;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void Window_ContentRendered(object sender, EventArgs e) {
|
||||||
|
commentTextBox.SelectAll();
|
||||||
|
commentTextBox.Focus();
|
||||||
|
}
|
||||||
|
|
||||||
|
private void OkButton_Click(object sender, RoutedEventArgs e) {
|
||||||
|
DialogResult = true;
|
||||||
|
}
|
||||||
|
|
||||||
|
private void CommentTextBox_TextChanged(object sender, TextChangedEventArgs e) {
|
||||||
|
if (!CommonUtil.TextUtil.IsPrintableAscii(commentTextBox.Text)) {
|
||||||
|
asciiOnlyLabel.Foreground = Brushes.Red;
|
||||||
|
} else {
|
||||||
|
asciiOnlyLabel.Foreground = mDefaultLabelColor;
|
||||||
|
}
|
||||||
|
if (commentTextBox.Text.Length > RECOMMENDED_MAX_LENGTH) {
|
||||||
|
maxLengthLabel.Foreground = Brushes.Red;
|
||||||
|
} else {
|
||||||
|
maxLengthLabel.Foreground = mDefaultLabelColor;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
@@ -57,6 +57,12 @@ limitations under the License.
|
|||||||
<RoutedUICommand x:Key="DebugSourceGenerationTestsCmd" Text="Source Generation Tests..."/>
|
<RoutedUICommand x:Key="DebugSourceGenerationTestsCmd" Text="Source Generation Tests..."/>
|
||||||
<RoutedUICommand x:Key="EditAddressCmd" Text="Set Address..."/>
|
<RoutedUICommand x:Key="EditAddressCmd" Text="Set Address..."/>
|
||||||
<RoutedUICommand x:Key="EditAppSettingsCmd" Text="Settings..."/>
|
<RoutedUICommand x:Key="EditAppSettingsCmd" Text="Settings..."/>
|
||||||
|
<RoutedUICommand x:Key="EditCommentCmd" Text="Edit Comment...">
|
||||||
|
<RoutedUICommand.InputGestures>
|
||||||
|
<!-- this works, but appears as "Ctrl+Oem1", so override tip in menu items -->
|
||||||
|
<KeyGesture>Ctrl+Semicolon</KeyGesture>
|
||||||
|
</RoutedUICommand.InputGestures>
|
||||||
|
</RoutedUICommand>
|
||||||
<RoutedUICommand x:Key="EditHeaderCommentCmd" Text="Edit Header Comment..."/>
|
<RoutedUICommand x:Key="EditHeaderCommentCmd" Text="Edit Header Comment..."/>
|
||||||
<RoutedUICommand x:Key="EditOperandCmd" Text="Edit Operand...">
|
<RoutedUICommand x:Key="EditOperandCmd" Text="Edit Operand...">
|
||||||
<RoutedUICommand.InputGestures>
|
<RoutedUICommand.InputGestures>
|
||||||
@@ -146,6 +152,8 @@ limitations under the License.
|
|||||||
Executed="DebugSourceGenerationTestsCmd_Executed"/>
|
Executed="DebugSourceGenerationTestsCmd_Executed"/>
|
||||||
<CommandBinding Command="{StaticResource EditAddressCmd}"
|
<CommandBinding Command="{StaticResource EditAddressCmd}"
|
||||||
CanExecute="CanEditAddress" Executed="EditAddressCmd_Executed"/>
|
CanExecute="CanEditAddress" Executed="EditAddressCmd_Executed"/>
|
||||||
|
<CommandBinding Command="{StaticResource EditCommentCmd}"
|
||||||
|
CanExecute="CanEditComment" Executed="EditCommentCmd_Executed"/>
|
||||||
<CommandBinding Command="{StaticResource EditHeaderCommentCmd}"
|
<CommandBinding Command="{StaticResource EditHeaderCommentCmd}"
|
||||||
CanExecute="IsProjectOpen" Executed="EditHeaderCommentCmd_Executed"/>
|
CanExecute="IsProjectOpen" Executed="EditHeaderCommentCmd_Executed"/>
|
||||||
<CommandBinding Command="{StaticResource EditLabelCmd}"
|
<CommandBinding Command="{StaticResource EditLabelCmd}"
|
||||||
@@ -243,7 +251,7 @@ limitations under the License.
|
|||||||
<MenuItem Command="{StaticResource EditStatusFlagsCmd}"/>
|
<MenuItem Command="{StaticResource EditStatusFlagsCmd}"/>
|
||||||
<MenuItem Command="{StaticResource EditLabelCmd}"/>
|
<MenuItem Command="{StaticResource EditLabelCmd}"/>
|
||||||
<MenuItem Command="{StaticResource EditOperandCmd}"/>
|
<MenuItem Command="{StaticResource EditOperandCmd}"/>
|
||||||
<MenuItem Header="Edit Comment..."/> <!-- Ctrl+; -->
|
<MenuItem Command="{StaticResource EditCommentCmd}" InputGestureText="Ctrl+;"/>
|
||||||
<MenuItem Command="{StaticResource EditLongCommentCmd}"/>
|
<MenuItem Command="{StaticResource EditLongCommentCmd}"/>
|
||||||
<MenuItem Header="Edit Note..."/> <!-- Ctrl+N -->
|
<MenuItem Header="Edit Note..."/> <!-- Ctrl+N -->
|
||||||
<MenuItem Header="Edit Project Symbol..."/>
|
<MenuItem Header="Edit Project Symbol..."/>
|
||||||
|
@@ -749,6 +749,10 @@ namespace SourceGenWPF.WpfGui {
|
|||||||
e.CanExecute = IsProjectOpen() && mMainCtrl.CanEditAddress();
|
e.CanExecute = IsProjectOpen() && mMainCtrl.CanEditAddress();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
private void CanEditComment(object sender, CanExecuteRoutedEventArgs e) {
|
||||||
|
e.CanExecute = IsProjectOpen() && mMainCtrl.CanEditComment();
|
||||||
|
}
|
||||||
|
|
||||||
private void CanEditLabel(object sender, CanExecuteRoutedEventArgs e) {
|
private void CanEditLabel(object sender, CanExecuteRoutedEventArgs e) {
|
||||||
e.CanExecute = IsProjectOpen() && mMainCtrl.CanEditLabel();
|
e.CanExecute = IsProjectOpen() && mMainCtrl.CanEditLabel();
|
||||||
}
|
}
|
||||||
@@ -852,6 +856,10 @@ namespace SourceGenWPF.WpfGui {
|
|||||||
mMainCtrl.EditAppSettings();
|
mMainCtrl.EditAppSettings();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
private void EditCommentCmd_Executed(object sender, ExecutedRoutedEventArgs e) {
|
||||||
|
mMainCtrl.EditComment();
|
||||||
|
}
|
||||||
|
|
||||||
private void EditHeaderCommentCmd_Executed(object sender, ExecutedRoutedEventArgs e) {
|
private void EditHeaderCommentCmd_Executed(object sender, ExecutedRoutedEventArgs e) {
|
||||||
mMainCtrl.EditHeaderComment();
|
mMainCtrl.EditHeaderComment();
|
||||||
}
|
}
|
||||||
|
Reference in New Issue
Block a user