-
Notifications
You must be signed in to change notification settings - Fork 1.4k
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
Infinite canvas #1958
Merged
azchohfi
merged 71 commits into
CommunityToolkit:master
from
IbraheemOsama:InfiniteCanvas
May 23, 2018
Merged
Infinite canvas #1958
Changes from 66 commits
Commits
Show all changes
71 commits
Select commit
Hold shift + click to select a range
c21f3bb
Adding infinite canvas initial commit
IbraheemOsama 4ba9f47
Merge remote-tracking branch 'refs/remotes/Microsoft/master' into Inf…
IbraheemOsama 6c81f9f
Editing samples.json
IbraheemOsama 7d1984e
Infinite Canvas Integrated and no build errors
IbraheemOsama 75a1f8d
Adding drwabeList
IbraheemOsama ff38584
Adding resize events
IbraheemOsama cf69a6e
Adding erase first step
IbraheemOsama eaafe34
Fixing bounding rect problem
IbraheemOsama 5c04d5d
adding clear all
IbraheemOsama c47e4ff
adding custom text button
IbraheemOsama 32d64ac
addign text box click functionality
IbraheemOsama 743c99c
Text working with inking
IbraheemOsama 919bd55
Fixing textbox issues
IbraheemOsama 914fdbf
Adding extract text basic logic
IbraheemOsama afc9cf4
Infinite canvas finally working with virtualization
IbraheemOsama 55748f8
Adding canvas Text Drawable.
IbraheemOsama 090ecb6
Everything is working start to remove the textbox
IbraheemOsama 414e83f
Removing margin
IbraheemOsama 324550b
Removing text border
IbraheemOsama 9f32997
refactoring
IbraheemOsama 06ebb05
Adding transparent textbox
IbraheemOsama 3b46c14
Text is working fine but in case of mouse only need to handle pan
IbraheemOsama 0001962
Now text is working fine :)
IbraheemOsama 26aa07a
Adding reverse process for text and it is working
IbraheemOsama e65538c
Tring to fix textbox right navigation problem
IbraheemOsama de9ed80
Everything is working after disableing interaction
IbraheemOsama 0a5c040
Adding button bold and italic
IbraheemOsama 4b7fdb0
Hahahaha TextBox With Scroll you loose
IbraheemOsama edb8bb8
Fixing scaling issue
IbraheemOsama c1b5cbe
Ink Drawing matches the canvas
IbraheemOsama 8b19bdc
Mapping between ink and drawing surface is accurate
IbraheemOsama e3face0
Fixing textbox heightlight problem
IbraheemOsama edb8550
Next is Undo and Redo
IbraheemOsama 427a5fd
Refactoring and adding commands
IbraheemOsama 42a22b8
Adding Create Text and Change text Command
IbraheemOsama 3d73f61
Adding the reset of text edit commands
IbraheemOsama d307174
Adding ink do undo
IbraheemOsama 5286edf
Adding clear all command
IbraheemOsama fac5611
Refactoring everything to match the toolkit guidelines
IbraheemOsama 71b9278
Adding import export methods
IbraheemOsama 380639c
Adding export import
IbraheemOsama 73dd3b0
Adding header files
IbraheemOsama 7a3aeb3
Adding header files
IbraheemOsama 27905a3
Merge remote-tracking branch 'refs/remotes/Microsoft/master' into Inf…
IbraheemOsama 0da4475
Fixing missing header agaaaaaaaaaaaaaaaaain
IbraheemOsama 6f6aad0
Fixing headers
IbraheemOsama 765b3b5
Renaming unexecute to undo and adding trim(0)
IbraheemOsama 11bfa1c
Adding hide/show
IbraheemOsama c4d4241
Addign min max zoom
IbraheemOsama 1a6ff40
Adding header file
IbraheemOsama b16b516
handling PR comments
IbraheemOsama d0fba89
Adding icon color and fix textbox scroll and view issues
IbraheemOsama a7949e3
Fixing PR Comments
IbraheemOsama bdc77bd
Fixing last Nikola comment (Hopefully)
IbraheemOsama c5ac903
resolving conflicts
IbraheemOsama d5b73db
addign do redo fixing execption
IbraheemOsama 9209c9e
Adding styles
IbraheemOsama a4ad3f8
Merging from master
IbraheemOsama 5fa9b22
Making color red
IbraheemOsama 34733e9
Fixing PR Comments
IbraheemOsama 27b954c
Fixing theming issue
IbraheemOsama 3ebe1cd
Merge remote-tracking branch 'refs/remotes/Microsoft/master' into Inf…
IbraheemOsama 2e84e1b
Adding number only textbox
IbraheemOsama a16634a
Adding Icon
IbraheemOsama c5074b6
Adding control documenations
IbraheemOsama f57fbd4
Merge branch 'master' into InfiniteCanvas
IbraheemOsama 8a69256
Merge branch 'master' into InfiniteCanvas
azchohfi db3b096
Fixing typo
IbraheemOsama aee31d8
Merging from master
IbraheemOsama 4df09aa
Merge branch 'master' into InfiniteCanvas
nmetulev 7a00d8f
Merge branch 'master' into InfiniteCanvas
azchohfi File filter
Filter by extension
Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
11 changes: 11 additions & 0 deletions
11
Microsoft.Toolkit.Uwp.SampleApp/SamplePages/InfiniteCanvas/InfiniteCanvas.bind
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,11 @@ | ||
<Page xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" | ||
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" | ||
xmlns:controls="using:Microsoft.Toolkit.Uwp.UI.Controls" | ||
xmlns:d="http://schemas.microsoft.com/expression/blend/2008" | ||
xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006" | ||
mc:Ignorable="d"> | ||
|
||
<Grid> | ||
<controls:InfiniteCanvas Name="canvas" IsToolbarVisible="@[IsToolbarVisible:Bool:True]"/> | ||
</Grid> | ||
</Page> |
Binary file added
BIN
+4.02 KB
Microsoft.Toolkit.Uwp.SampleApp/SamplePages/InfiniteCanvas/InfiniteCanvas.png
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
8 changes: 8 additions & 0 deletions
8
Microsoft.Toolkit.Uwp.SampleApp/SamplePages/InfiniteCanvas/InfiniteCanvasPage.xaml
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,8 @@ | ||
<Page x:Class="Microsoft.Toolkit.Uwp.SampleApp.SamplePages.InfiniteCanvasPage" | ||
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" | ||
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" | ||
xmlns:controls="using:Microsoft.Toolkit.Uwp.UI.Controls" | ||
xmlns:d="http://schemas.microsoft.com/expression/blend/2008" | ||
xmlns:local="using:Microsoft.Toolkit.Uwp.SampleApp.SamplePages" | ||
xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006" | ||
mc:Ignorable="d" /> |
97 changes: 97 additions & 0 deletions
97
Microsoft.Toolkit.Uwp.SampleApp/SamplePages/InfiniteCanvas/InfiniteCanvasPage.xaml.cs
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,97 @@ | ||
// ****************************************************************** | ||
// Copyright (c) Microsoft. All rights reserved. | ||
// This code is licensed under the MIT License (MIT). | ||
// THE CODE IS PROVIDED “AS IS”, WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, | ||
// INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, | ||
// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. | ||
// IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, | ||
// DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, | ||
// TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH | ||
// THE CODE OR THE USE OR OTHER DEALINGS IN THE CODE. | ||
// ****************************************************************** | ||
|
||
using System; | ||
using System.Collections.Generic; | ||
using Windows.Storage; | ||
using Windows.UI.Popups; | ||
using Microsoft.Toolkit.Uwp.Helpers; | ||
using Microsoft.Toolkit.Uwp.UI.Controls; | ||
using Microsoft.Toolkit.Uwp.UI.Extensions; | ||
using Windows.UI.Xaml; | ||
using Windows.UI.Xaml.Controls; | ||
using Windows.UI.Xaml.Navigation; | ||
|
||
namespace Microsoft.Toolkit.Uwp.SampleApp.SamplePages | ||
{ | ||
/// <summary> | ||
/// InfinteCanvas sample page. | ||
/// </summary> | ||
public sealed partial class InfiniteCanvasPage : Page, IXamlRenderListener | ||
{ | ||
private InfiniteCanvas _infiniteCanvas; | ||
|
||
public InfiniteCanvasPage() | ||
{ | ||
InitializeComponent(); | ||
} | ||
|
||
public void OnXamlRendered(FrameworkElement control) | ||
{ | ||
_infiniteCanvas = control.FindChildByName("canvas") as InfiniteCanvas; | ||
} | ||
|
||
protected override void OnNavigatedTo(NavigationEventArgs e) | ||
{ | ||
base.OnNavigatedTo(e); | ||
|
||
Shell.Current.RegisterNewCommand("Export & Save", async (sender, args) => | ||
{ | ||
if (_infiniteCanvas != null) | ||
{ | ||
var savePicker = new Windows.Storage.Pickers.FileSavePicker | ||
{ | ||
SuggestedStartLocation = Windows.Storage.Pickers.PickerLocationId.DocumentsLibrary | ||
}; | ||
savePicker.FileTypeChoices.Add("application/json", new List<string> { ".json" }); | ||
savePicker.SuggestedFileName = "Infinite Canvas Export"; | ||
|
||
StorageFile file = await savePicker.PickSaveFileAsync(); | ||
if (file != null) | ||
{ | ||
var json = _infiniteCanvas.ExportAsJson(); | ||
CachedFileManager.DeferUpdates(file); | ||
await FileIO.WriteTextAsync(file, json); | ||
} | ||
} | ||
}); | ||
|
||
Shell.Current.RegisterNewCommand("Import and Load", async (sender, args) => | ||
{ | ||
if (_infiniteCanvas != null) | ||
{ | ||
var picker = new Windows.Storage.Pickers.FileOpenPicker | ||
{ | ||
ViewMode = Windows.Storage.Pickers.PickerViewMode.Thumbnail, | ||
SuggestedStartLocation = Windows.Storage.Pickers.PickerLocationId.DocumentsLibrary | ||
}; | ||
picker.FileTypeFilter.Add(".json"); | ||
var file = await picker.PickSingleFileAsync(); | ||
|
||
if (file != null) | ||
{ | ||
try | ||
{ | ||
var json = await FileIO.ReadTextAsync(file); | ||
_infiniteCanvas.ImportFromJson(json); | ||
} | ||
catch | ||
{ | ||
var dialog = new MessageDialog("Invalid File"); | ||
await dialog.ShowAsync(); | ||
} | ||
} | ||
} | ||
}); | ||
} | ||
} | ||
} |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
21 changes: 21 additions & 0 deletions
21
Microsoft.Toolkit.Uwp.UI.Controls/InfiniteCanvas/Commands/IInfiniteCanvasCommand.cs
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,21 @@ | ||
// ****************************************************************** | ||
// Copyright (c) Microsoft. All rights reserved. | ||
// This code is licensed under the MIT License (MIT). | ||
// THE CODE IS PROVIDED “AS IS”, WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, | ||
// INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, | ||
// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. | ||
// IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, | ||
// DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, | ||
// TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH | ||
// THE CODE OR THE USE OR OTHER DEALINGS IN THE CODE. | ||
// ****************************************************************** | ||
|
||
namespace Microsoft.Toolkit.Uwp.UI.Controls | ||
{ | ||
internal interface IInfiniteCanvasCommand | ||
{ | ||
void Execute(); | ||
|
||
void Undo(); | ||
} | ||
} |
46 changes: 46 additions & 0 deletions
46
Microsoft.Toolkit.Uwp.UI.Controls/InfiniteCanvas/Commands/InfiniteCanvasClearAllCommand.cs
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,46 @@ | ||
// ****************************************************************** | ||
// Copyright (c) Microsoft. All rights reserved. | ||
// This code is licensed under the MIT License (MIT). | ||
// THE CODE IS PROVIDED “AS IS”, WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, | ||
// INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, | ||
// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. | ||
// IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, | ||
// DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, | ||
// TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH | ||
// THE CODE OR THE USE OR OTHER DEALINGS IN THE CODE. | ||
// ****************************************************************** | ||
|
||
using System.Collections.Generic; | ||
|
||
namespace Microsoft.Toolkit.Uwp.UI.Controls | ||
{ | ||
internal class InfiniteCanvasClearAllCommand : IInfiniteCanvasCommand | ||
{ | ||
private readonly List<IDrawable> _drawableList; | ||
private IDrawable[] _storeList; | ||
|
||
public InfiniteCanvasClearAllCommand(List<IDrawable> drawableList) | ||
{ | ||
_drawableList = drawableList; | ||
} | ||
|
||
public void Execute() | ||
{ | ||
_storeList = new IDrawable[_drawableList.Count]; | ||
for (int i = 0; i < _drawableList.Count; i++) | ||
{ | ||
_storeList[i] = _drawableList[i]; | ||
} | ||
|
||
_drawableList.Clear(); | ||
} | ||
|
||
public void Undo() | ||
{ | ||
foreach (var drawable in _storeList) | ||
{ | ||
_drawableList.Add(drawable); | ||
} | ||
} | ||
} | ||
} |
39 changes: 39 additions & 0 deletions
39
Microsoft.Toolkit.Uwp.UI.Controls/InfiniteCanvas/Commands/InfiniteCanvasCreateInkCommand.cs
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,39 @@ | ||
// ****************************************************************** | ||
// Copyright (c) Microsoft. All rights reserved. | ||
// This code is licensed under the MIT License (MIT). | ||
// THE CODE IS PROVIDED “AS IS”, WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, | ||
// INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, | ||
// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. | ||
// IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, | ||
// DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, | ||
// TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH | ||
// THE CODE OR THE USE OR OTHER DEALINGS IN THE CODE. | ||
// ****************************************************************** | ||
|
||
using System.Collections.Generic; | ||
using Windows.UI.Input.Inking; | ||
|
||
namespace Microsoft.Toolkit.Uwp.UI.Controls | ||
{ | ||
internal class InfiniteCanvasCreateInkCommand : IInfiniteCanvasCommand | ||
{ | ||
private readonly List<IDrawable> _drawableList; | ||
private readonly InkDrawable _drawable; | ||
|
||
public InfiniteCanvasCreateInkCommand(List<IDrawable> drawableList, IReadOnlyList<InkStroke> strokes) | ||
{ | ||
_drawable = new InkDrawable(strokes); | ||
_drawableList = drawableList; | ||
} | ||
|
||
public void Execute() | ||
{ | ||
_drawableList.Add(_drawable); | ||
} | ||
|
||
public void Undo() | ||
{ | ||
_drawableList.Remove(_drawable); | ||
} | ||
} | ||
} |
48 changes: 48 additions & 0 deletions
48
...oft.Toolkit.Uwp.UI.Controls/InfiniteCanvas/Commands/InfiniteCanvasCreateTextBoxCommand.cs
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,48 @@ | ||
// ****************************************************************** | ||
// Copyright (c) Microsoft. All rights reserved. | ||
// This code is licensed under the MIT License (MIT). | ||
// THE CODE IS PROVIDED “AS IS”, WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, | ||
// INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, | ||
// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. | ||
// IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, | ||
// DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, | ||
// TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH | ||
// THE CODE OR THE USE OR OTHER DEALINGS IN THE CODE. | ||
// ****************************************************************** | ||
|
||
using System.Collections.Generic; | ||
using Windows.UI; | ||
|
||
namespace Microsoft.Toolkit.Uwp.UI.Controls | ||
{ | ||
internal class InfiniteCanvasCreateTextBoxCommand : IInfiniteCanvasCommand | ||
{ | ||
private readonly List<IDrawable> _drawableList; | ||
private readonly TextDrawable _drawable; | ||
|
||
public InfiniteCanvasCreateTextBoxCommand(List<IDrawable> drawableList, double x, double y, double width, double height, int textFontSize, string text, Color color, bool isBold, bool isItalic) | ||
{ | ||
_drawable = new TextDrawable( | ||
x, | ||
y, | ||
width, | ||
height, | ||
textFontSize, | ||
text, | ||
color, | ||
isBold, | ||
isItalic); | ||
_drawableList = drawableList; | ||
} | ||
|
||
public void Execute() | ||
{ | ||
_drawableList.Add(_drawable); | ||
} | ||
|
||
public void Undo() | ||
{ | ||
_drawableList.Remove(_drawable); | ||
} | ||
} | ||
} |
38 changes: 38 additions & 0 deletions
38
Microsoft.Toolkit.Uwp.UI.Controls/InfiniteCanvas/Commands/InfiniteCanvasEraseInkCommand.cs
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,38 @@ | ||
// ****************************************************************** | ||
// Copyright (c) Microsoft. All rights reserved. | ||
// This code is licensed under the MIT License (MIT). | ||
// THE CODE IS PROVIDED “AS IS”, WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, | ||
// INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, | ||
// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. | ||
// IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, | ||
// DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, | ||
// TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH | ||
// THE CODE OR THE USE OR OTHER DEALINGS IN THE CODE. | ||
// ****************************************************************** | ||
|
||
using System.Collections.Generic; | ||
|
||
namespace Microsoft.Toolkit.Uwp.UI.Controls | ||
{ | ||
internal class InfiniteCanvasEraseInkCommand : IInfiniteCanvasCommand | ||
{ | ||
private readonly List<IDrawable> _drawableList; | ||
private readonly IDrawable _drawable; | ||
|
||
public InfiniteCanvasEraseInkCommand(List<IDrawable> drawableList, IDrawable drawable) | ||
{ | ||
_drawable = drawable; | ||
_drawableList = drawableList; | ||
} | ||
|
||
public void Execute() | ||
{ | ||
_drawableList.Remove(_drawable); | ||
} | ||
|
||
public void Undo() | ||
{ | ||
_drawableList.Add(_drawable); | ||
} | ||
} | ||
} |
Oops, something went wrong.
Add this suggestion to a batch that can be applied as a single commit.
This suggestion is invalid because no changes were made to the code.
Suggestions cannot be applied while the pull request is closed.
Suggestions cannot be applied while viewing a subset of changes.
Only one suggestion per line can be applied in a batch.
Add this suggestion to a batch that can be applied as a single commit.
Applying suggestions on deleted lines is not supported.
You must change the existing code in this line in order to create a valid suggestion.
Outdated suggestions cannot be applied.
This suggestion has been applied or marked resolved.
Suggestions cannot be applied from pending reviews.
Suggestions cannot be applied on multi-line comments.
Suggestions cannot be applied while the pull request is queued to merge.
Suggestion cannot be applied right now. Please check back later.
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Can you update these commands to save and load files outside of the app. They should ask the user where to save or what file to import.