Minor fix
* Fix selection error when use delete after to delete the last tas unit * Fix sel_rect display error * Add some documents * Fix layout becoming confusing when secondly open file.
This commit is contained in:
@ -38,7 +38,8 @@ namespace BallanceTASEditor.Core {
|
||||
}
|
||||
|
||||
public long GetPointerIndex() {
|
||||
if (mPointer == null) throw new Exception("Data is not ready");
|
||||
// return invalid data to prevent error
|
||||
if (mPointer == null) return -1;//throw new Exception("Data is not ready");
|
||||
return mPointerIndex;
|
||||
}
|
||||
|
||||
|
||||
@ -31,6 +31,7 @@
|
||||
<sys:String x:Key="ui_MainWindow_StatusBar_Mode_Cursor">选择模式</sys:String>
|
||||
<sys:String x:Key="ui_MainWindow_StatusBar_Mode_Fill">填充模式</sys:String>
|
||||
<sys:String x:Key="ui_MainWindow_StatusBar_Mode_Overwritten">画笔模式</sys:String>
|
||||
<sys:String x:Key="ui_MainWindow_StatusBar_OverwrittenPaste">覆盖式粘贴</sys:String>
|
||||
<sys:String x:Key="ui_MainWindow_StatusBar_Selected">已选择:</sys:String>
|
||||
|
||||
|
||||
|
||||
@ -31,6 +31,7 @@
|
||||
<sys:String x:Key="ui_MainWindow_StatusBar_Mode_Cursor">Select mode</sys:String>
|
||||
<sys:String x:Key="ui_MainWindow_StatusBar_Mode_Fill">Fill mode</sys:String>
|
||||
<sys:String x:Key="ui_MainWindow_StatusBar_Mode_Overwritten">Draw mode</sys:String>
|
||||
<sys:String x:Key="ui_MainWindow_StatusBar_OverwrittenPaste">Overwritten paste</sys:String>
|
||||
<sys:String xml:space="preserve" x:Key="ui_MainWindow_StatusBar_Selected">Selected: </sys:String>
|
||||
|
||||
|
||||
|
||||
@ -233,15 +233,19 @@
|
||||
</Slider>
|
||||
|
||||
</Grid>
|
||||
|
||||
|
||||
</Grid>
|
||||
|
||||
</Grid>
|
||||
|
||||
<StatusBar x:Name="uiStatusbar" Grid.Row="2">
|
||||
<TextBlock x:Name="uiStatusbar_Mode_Cursor" Text="{DynamicResource ui_MainWindow_StatusBar_Mode_Cursor}"/>
|
||||
<TextBlock x:Name="uiStatusbar_Mode_Fill" Text="{DynamicResource ui_MainWindow_StatusBar_Mode_Fill}"/>
|
||||
<TextBlock x:Name="uiStatusbar_Mode_Overwrite" Text="{DynamicResource ui_MainWindow_StatusBar_Mode_Overwritten}"/>
|
||||
<Grid>
|
||||
<TextBlock x:Name="uiStatusbar_Mode_Cursor" Text="{DynamicResource ui_MainWindow_StatusBar_Mode_Cursor}"/>
|
||||
<TextBlock x:Name="uiStatusbar_Mode_Fill" Text="{DynamicResource ui_MainWindow_StatusBar_Mode_Fill}"/>
|
||||
<TextBlock x:Name="uiStatusbar_Mode_Overwrite" Text="{DynamicResource ui_MainWindow_StatusBar_Mode_Overwritten}"/>
|
||||
</Grid>
|
||||
<Separator/>
|
||||
<TextBlock x:Name="uiStatusbar_OverwrittenPaste" Text="{DynamicResource ui_MainWindow_StatusBar_OverwrittenPaste}"/>
|
||||
<Separator/>
|
||||
<TextBlock Text="{DynamicResource ui_MainWindow_StatusBar_Selected}"/>
|
||||
<TextBlock x:Name="uiStatusbar_Selected" Text="-"/>
|
||||
|
||||
@ -22,6 +22,7 @@ namespace BallanceTASEditor {
|
||||
public partial class MainWindow : Window {
|
||||
public MainWindow() {
|
||||
InitializeComponent();
|
||||
mIsHorizontalLayout = true;
|
||||
|
||||
// init layout controller
|
||||
var headers = new List<TextBlock>();
|
||||
@ -56,6 +57,7 @@ namespace BallanceTASEditor {
|
||||
TASViewer mViewer;
|
||||
TASFlow mFlow;
|
||||
TASSlider mSlider;
|
||||
bool mIsHorizontalLayout;
|
||||
|
||||
#region ui func
|
||||
|
||||
@ -127,6 +129,7 @@ namespace BallanceTASEditor {
|
||||
|
||||
private void funcMenu_Display_OverwrittenPaste(object sender, RoutedEventArgs e) {
|
||||
uiMenu_Display_OverwrittenPaste.IsChecked = !uiMenu_Display_OverwrittenPaste.IsChecked;
|
||||
uiStatusbar_OverwrittenPaste.Visibility = uiMenu_Display_OverwrittenPaste.IsChecked ? Visibility.Visible : Visibility.Hidden;
|
||||
|
||||
GlobalVariable.configManager.Configuration[ConfigManager.CfgNode_IsOverwrittenPaste] = uiMenu_Display_OverwrittenPaste.IsChecked.ToString();
|
||||
if (mViewer != null)
|
||||
@ -307,6 +310,7 @@ namespace BallanceTASEditor {
|
||||
|
||||
uiMenu_Display_OverwrittenPaste.IsChecked = isOverwrittenPaste;
|
||||
uiMenu_Display_HorizontalLayout.IsChecked = isHorizontalLayout;
|
||||
uiStatusbar_OverwrittenPaste.Visibility = isOverwrittenPaste ? Visibility.Visible : Visibility.Hidden;
|
||||
if (mViewer != null) {
|
||||
mViewer.ChangeOverwrittenMode(isOverwrittenPaste);
|
||||
mViewer.ChangeListLength(itemCount);
|
||||
@ -450,6 +454,9 @@ namespace BallanceTASEditor {
|
||||
}
|
||||
|
||||
private void ChangeLayout(bool isHorizontal) {
|
||||
if (isHorizontal == mIsHorizontalLayout) return;
|
||||
mIsHorizontalLayout = isHorizontal;
|
||||
|
||||
// swap window size
|
||||
var swap = this.Width;
|
||||
this.Width = this.Height;
|
||||
|
||||
@ -28,8 +28,6 @@ namespace BallanceTASEditor.UI {
|
||||
|
||||
public event Action Click;
|
||||
|
||||
private const double SELECTION_HEADER_HEIGHT = 10.0f; // header selection height, originally copied from TASFlowItem class
|
||||
|
||||
private readonly TextBlock[] mHeaders;
|
||||
private bool mIsHorizontalLayout;
|
||||
private Grid uiCoreWindow;
|
||||
@ -57,7 +55,7 @@ namespace BallanceTASEditor.UI {
|
||||
// column is tas unit
|
||||
|
||||
// header
|
||||
layout_row_adder(new GridLength(SELECTION_HEADER_HEIGHT, GridUnitType.Pixel));
|
||||
layout_row_adder(GridLength.Auto);
|
||||
for (int r = 0; r < lenHeader; r++) {
|
||||
layout_row_adder(GridLength.Auto);
|
||||
}
|
||||
@ -74,7 +72,7 @@ namespace BallanceTASEditor.UI {
|
||||
// column is header count (use start to split, not auto)
|
||||
|
||||
// header
|
||||
layout_column_adder(new GridLength(SELECTION_HEADER_HEIGHT, GridUnitType.Pixel));
|
||||
layout_column_adder(GridLength.Auto);
|
||||
for (int r = 0; r < lenHeader; r++) {
|
||||
if (r == 0 || r == 1)
|
||||
layout_column_adder(GridLength.Auto);
|
||||
@ -249,6 +247,7 @@ namespace BallanceTASEditor.UI {
|
||||
private static readonly Color COLOR_UNSET = Color.FromArgb(0, 255, 255, 255);
|
||||
private static readonly Color COLOR_SELECTED = Colors.OrangeRed;
|
||||
private static readonly Color COLOR_UNSELECTED = Colors.LightGray;
|
||||
private const double SELECTION_HEADER_HEIGHT = 10.0f;
|
||||
private const int KEY_COUNT = 9;
|
||||
|
||||
public TASFlowUIItem(int column, bool useHorizontalLayout) {
|
||||
@ -279,7 +278,10 @@ namespace BallanceTASEditor.UI {
|
||||
|
||||
sel_rect.StrokeThickness = 2;
|
||||
sel_rect.Stroke = SEL_RECT_STROKE;
|
||||
//sel_rect.Height = SELECTION_HEADER_HEIGHT; // now sel_rect's size decided by layout
|
||||
if (useHorizontalLayout)
|
||||
sel_rect.Height = SELECTION_HEADER_HEIGHT;
|
||||
else
|
||||
sel_rect.Width = SELECTION_HEADER_HEIGHT;
|
||||
|
||||
// keystates item
|
||||
keystates = new Rectangle[KEY_COUNT];
|
||||
@ -314,6 +316,11 @@ namespace BallanceTASEditor.UI {
|
||||
for (int i = 0; i < KEY_COUNT; i++) {
|
||||
UI.Util.SwapGridItemRC(keystates[i]);
|
||||
}
|
||||
|
||||
// swap sel_rect height and width
|
||||
var swap = sel_rect.Height;
|
||||
sel_rect.Height = sel_rect.Width;
|
||||
sel_rect.Width = swap;
|
||||
}
|
||||
|
||||
public void Add(Grid target, Dictionary<Rectangle, CellPosition> map, MouseButtonEventHandler func) {
|
||||
|
||||
@ -34,8 +34,16 @@ namespace BallanceTASEditor.UI {
|
||||
}
|
||||
|
||||
public void UpdateRange(TASFile mFile) {
|
||||
components.mSlider.Maximum = mFile.mFrameCount - 1;
|
||||
components.mSlider.Value = mFile.GetPointerIndex();
|
||||
components.mSlider.Maximum = mFile.mFrameCount == 0 ? 0 : mFile.mFrameCount - 1;
|
||||
var index = mFile.GetPointerIndex();
|
||||
if (index >= 0) {
|
||||
components.mSlider.Value = mFile.GetPointerIndex();
|
||||
components.mSlider.IsEnabled = true;
|
||||
} else {
|
||||
// invalid index, mean slider is useless, disable it
|
||||
components.mSlider.Value = components.mSlider.Maximum;
|
||||
components.mSlider.IsEnabled = false;
|
||||
}
|
||||
}
|
||||
|
||||
private void func_SliderValueChanged(object sender, RoutedPropertyChangedEventArgs<double> e) {
|
||||
|
||||
@ -202,12 +202,12 @@ namespace BallanceTASEditor.UI {
|
||||
if (oper == OperationEnum.DeleteBefore) pos -= 1; // delete after mean delete current selected item
|
||||
if (pos < 0 || pos >= mFile.mFrameCount) return;
|
||||
|
||||
// only delete before need shift selection
|
||||
// delete before need shift selection
|
||||
// delete before couldn't cause empty list, so we just need to directly shift
|
||||
if (oper == OperationEnum.DeleteBefore)
|
||||
mSelectionHelp.ShiftTo(false);
|
||||
// also, if we use delete after and delete the tail of item list, we also need to shift pos(use `else if` to prevent double shift)
|
||||
else if (oper == OperationEnum.DeleteAfter && pos == mFile.mFrameCount) {
|
||||
else if (oper == OperationEnum.DeleteAfter && pos == mFile.mFrameCount - 1) {
|
||||
// but delete after may cause empty list error(delete the item within only 1 item list)
|
||||
// so we need prevent this situation
|
||||
if (mFile.mFrameCount == 1) mSelectionHelp.Reset(); //yes, reset selection to prevent error
|
||||
|
||||
Reference in New Issue
Block a user