diff --git a/source/Triangulum/Generator.cs b/source/Triangulum/Generator.cs
index bba81ff..9f27367 100644
--- a/source/Triangulum/Generator.cs
+++ b/source/Triangulum/Generator.cs
@@ -24,11 +24,14 @@ You should have received a copy of the GNU General Public License
using System.Text;
using System.Text.RegularExpressions;
using System.Numerics;
+using System.IO;
namespace Triangulum
{
public class Generator
{
+ public static string output;
+
///
/// Pascals Triangle - Method
///
@@ -120,6 +123,13 @@ public static void PascalsTriangle(ViewModel vm, int rows)
} // End Loop
+ // Progress Info
+ if (vm.Display_IsChecked == false)
+ {
+ vm.Display_Text = "Complete\r\n\r\nPlease Enable Display or Save Output.";
+ }
+
+
// -------------------------
// Center
// -------------------------
@@ -136,7 +146,7 @@ public static void PascalsTriangle(ViewModel vm, int rows)
// -------------------------
// Output
// -------------------------
- string output = string.Join("\r\n", triangle);
+ output = string.Join("\r\n", triangle);
// -------------------------
@@ -162,6 +172,7 @@ public static void PascalsTriangle(ViewModel vm, int rows)
// Do not Regex Replace
}
+
// -------------------------
// Convert to ASCII
// -------------------------
@@ -196,6 +207,7 @@ public static void PascalsTriangle(ViewModel vm, int rows)
"9: " + output.Count(d => d == '9');
}
+
// -------------------------
// Inline
// -------------------------
@@ -205,10 +217,22 @@ public static void PascalsTriangle(ViewModel vm, int rows)
output = Regex.Replace(output, "\r\n", "");
}
+ // -------------------------
+ // Autosave Export
+ // -------------------------
+ if (vm.Autosave_IsChecked == true)
+ {
+ //Export.SaveFile();
+ File.WriteAllText(MainWindow.desktopDir + "Triangulum " + DateTime.Now.ToString("yyyy-MM-dd HHmmss") + ".txt", Generator.output, Encoding.Unicode);
+ }
+
// -------------------------
// Display
// -------------------------
- vm.Display_Text = output;
+ if (vm.Display_IsChecked == true)
+ {
+ vm.Display_Text = output;
+ }
}
diff --git a/source/Triangulum/MainWindow.xaml b/source/Triangulum/MainWindow.xaml
index 674a414..9fd03d2 100644
--- a/source/Triangulum/MainWindow.xaml
+++ b/source/Triangulum/MainWindow.xaml
@@ -32,7 +32,7 @@
Closing="Window_Closing"
Icon="icon.ico"
- Title="Triangulum v0.3.0"
+ Title="Triangulum v0.3.1"
RenderOptions.BitmapScalingMode="Fant"
UseLayoutRounding="True"
@@ -106,9 +106,9 @@
IsChecked="{Binding Decimal_IsChecked, Mode=TwoWay, UpdateSourceTrigger=PropertyChanged}"
IsEnabled="{Binding Decimal_IsEnabled, Mode=TwoWay, UpdateSourceTrigger=PropertyChanged}"
Content="Decimal"
- Margin="0,138,31,0"
+ Margin="0,138,18,0"
HorizontalAlignment="Right"
- Width="66"
+ Width="79"
Checked="cbxDecimal_Checked"
Height="15"
VerticalAlignment="Top"
@@ -121,9 +121,9 @@
+
+
+
+
+
+
+
+
@@ -272,9 +288,9 @@
+
+
+
+
+
+
+
+
+
public partial class MainWindow : Window
{
- ///
- /// View Model
- ///
+ // View Model
public ViewModel vm = new ViewModel();
- ///
- /// RichTextBox
- ///
+ // System
+ public static string appDir = AppDomain.CurrentDomain.BaseDirectory.TrimEnd('\\') + @"\"; // exe directory
+ public static string userProfile = Environment.GetFolderPath(Environment.SpecialFolder.UserProfile).TrimEnd('\\') + @"\";
+ public static string desktopDir = userProfile + @"Desktop\"; // C:\Users\Example\Desktop\
+
+ // RichTextBox
public static Paragraph p = new Paragraph();
+ // UI Update Timer
+ public static System.Timers.Timer dispatcherTimer = new System.Timers.Timer();
+
+ //PerformanceCounter cpuCounter;
+ //PerformanceCounter ramCounter;
+
///
/// Main Window
@@ -84,6 +94,18 @@ public MainWindow()
WindowState = WindowState.Maximized;
}
}
+
+ // CPU Usage
+ //cpuCounter = new PerformanceCounter("Processor", "% Processor Time", "_Total");
+
+ // RAM Usage
+ //ramCounter = new PerformanceCounter("Memory", "Available MBytes");
+
+ // --------------------------
+ // UI Update Timer
+ // --------------------------
+ //dispatcherTimer.Elapsed += new ElapsedEventHandler(OnTimedEvent);
+ //dispatcherTimer.Interval = 0500;
}
@@ -125,6 +147,32 @@ void Window_Closing(object sender, CancelEventArgs e)
Environment.Exit(0);
}
+ ///
+ /// UI Update
+ ///
+ private void OnTimedEvent(object source, ElapsedEventArgs e)
+ {
+ //vm.CPU_Text = "CPU: " + getCurrentCpuUsage().PadLeft(4, '0');
+ //vm.RAM_Text = "RAM: " + getAvailableRAM();
+ }
+
+
+ ///
+ /// CPU Usage
+ ///
+ //public string getCurrentCpuUsage()
+ //{
+ // return (int)Math.Round(cpuCounter.NextValue(), 0) + "%";
+ //}
+
+ ///
+ /// RAM Usage
+ ///
+ //public string getAvailableRAM()
+ //{
+ // return (int)Math.Round(ramCounter.NextValue(), 0) + "MB";
+ //}
+
///
/// Info - Button
@@ -134,7 +182,7 @@ private void btnInfo_Click(object sender, RoutedEventArgs e)
MessageBox.Show(@"
Triangulum
Pascal's Triangle Generator
-© 2018 Matt McManis
+© 2018-2019 Matt McManis
http://github.com/MattMcManis/Triangulum
mattmcmanis@outlook.com
GPL-3.0
@@ -169,6 +217,8 @@ private void btnClear_Click(object sender, RoutedEventArgs e)
///
private void btnSave_Click(object sender, RoutedEventArgs e)
{
+ //Export.SaveFile();
+
// Open 'Save File'
Microsoft.Win32.SaveFileDialog saveFile = new Microsoft.Win32.SaveFileDialog();
@@ -185,13 +235,10 @@ private void btnSave_Click(object sender, RoutedEventArgs e)
if (result == true)
{
// Save document
- File.WriteAllText(saveFile.FileName, vm.Display_Text, Encoding.Unicode);
+ File.WriteAllText(saveFile.FileName, /*vm.Display_Text*/Generator.output, Encoding.Unicode);
}
}
-
-
-
-
+
///
/// Font Size - Slider
@@ -385,6 +432,48 @@ private void cbxNumberDistribution_Unchecked(object sender, RoutedEventArgs e)
}
+ ///
+ /// Display - Checkbox
+ ///
+ private void cbxDisplay_Checked(object sender, RoutedEventArgs e)
+ {
+ vm.Display_Text = Generator.output;
+ }
+
+ private void cbxDisplay_Unchecked(object sender, RoutedEventArgs e)
+ {
+ vm.Display_Text = "Output Text Display is disabled but calculation will continue.";
+ }
+
+
+ ///
+ /// Autosave - Checkbox
+ ///
+ private void cbxAutosave_Checked(object sender, RoutedEventArgs e)
+ {
+
+ }
+
+ private void cbxAutosave_Unchecked(object sender, RoutedEventArgs e)
+ {
+
+ }
+
+
+ ///
+ /// Warnings - Checkbox
+ ///
+ private void cbxWarnings_Checked(object sender, RoutedEventArgs e)
+ {
+
+ }
+
+ private void cbxWarnings_Unchecked(object sender, RoutedEventArgs e)
+ {
+
+ }
+
+
///
/// Rows - TextBox
@@ -401,54 +490,65 @@ private void tbxRows_PreviewKeyDown(object sender, KeyEventArgs e)
///
- /// Go - Method
+ /// Generate - Method
///
- public void Go()
+ public /*async Task*/ void Generate()
{
- // Rows
- //
- int rows = 0;
- if (!string.IsNullOrWhiteSpace(tbxRows.Text))
- {
- rows = int.Parse(vm.Rows_Text);
- }
+ //int count = 0;
+ //await Task.Run(() =>
+ //{
+ // Display Timer
+ dispatcherTimer.Enabled = true;
- // Start New Thread
- //
- Thread worker = new Thread(() =>
- {
+ // Rows
+ //
+ int rows = 0;
+ if (!string.IsNullOrEmpty(vm.Rows_Text))
+ {
+ rows = int.Parse(vm.Rows_Text);
+ }
+
+ // Start New Thread
+ //
+ Thread worker = new Thread(() =>
+ {
Generator.PascalsTriangle(vm, rows);
- });
- worker.IsBackground = true;
+ });
+ //worker.IsBackground = true;
- // Start Download Thread
- //
- worker.Start();
+ // Start Download Thread
+ //
+ worker.Start();
+ //});
+
+ //return count;
}
///
- /// Go - Button
+ /// Generate - Button
///
- private void btnGo_Click(object sender, RoutedEventArgs e)
+ private /*async*/ void btnGo_Click(object sender, RoutedEventArgs e)
{
// Rows Over 1000 Warning
//
- if (int.Parse(vm.Rows_Text) >= 1000)
+ if (int.Parse(vm.Rows_Text) >= 1000 &&
+ vm.Warnings_IsChecked == true)
{
// Yes/No Dialog Confirmation
//
- MessageBoxResult result = MessageBox.Show(
- "Entering a high number of rows requires a lot of processing power and system memory, and could risk crashing your computer.\n\nContinue?",
- "Arithmetic Overflow Warning",
- MessageBoxButton.YesNo,
- MessageBoxImage.Warning
- );
+ MessageBoxResult result = MessageBox.Show("Entering a high number of rows requires a lot of processing power and system memory, and could risk crashing your computer.\n\nContinue?",
+ "Arithmetic Overflow Warning",
+ MessageBoxButton.YesNo,
+ MessageBoxImage.Warning
+ );
switch (result)
{
case MessageBoxResult.Yes:
// Run
- Go();
+ //Task task = Generate();
+ //int count = await task;
+ Generate();
break;
case MessageBoxResult.No:
@@ -461,10 +561,11 @@ private void btnGo_Click(object sender, RoutedEventArgs e)
//
else
{
- Go();
+ //Task task = Generate();
+ //int count = await task;
+ Generate();
}
}
-
-
+
}
}
diff --git a/source/Triangulum/Properties/AssemblyInfo.cs b/source/Triangulum/Properties/AssemblyInfo.cs
index 364e3fd..6d09834 100644
--- a/source/Triangulum/Properties/AssemblyInfo.cs
+++ b/source/Triangulum/Properties/AssemblyInfo.cs
@@ -51,5 +51,5 @@
// You can specify all the values or you can default the Build and Revision Numbers
// by using the '*' as shown below:
// [assembly: AssemblyVersion("1.0.*")]
-[assembly: AssemblyVersion("0.0.3.0")]
-[assembly: AssemblyFileVersion("0.0.3.0")]
+[assembly: AssemblyVersion("0.0.3.1")]
+[assembly: AssemblyFileVersion("0.0.3.1")]
diff --git a/source/Triangulum/ViewModel.cs b/source/Triangulum/ViewModel.cs
index e928485..111df47 100644
--- a/source/Triangulum/ViewModel.cs
+++ b/source/Triangulum/ViewModel.cs
@@ -47,8 +47,11 @@ public ViewModel()
// -------------------------
// Defaults
// -------------------------
- Center_IsChecked = true;
+ Display_IsChecked = true;
+ Warnings_IsChecked = true;
+ Center_IsChecked = true;
+ Inline_IsChecked = false;
Wrap_IsChecked = false;
Wrap_Text = "NoWrap";
@@ -58,14 +61,106 @@ public ViewModel()
ASCII_IsChecked = false;
- Inline_IsChecked = false;
-
Rows_Text = "70";
}
// -------------------------
- // Display
+ // CPU Usage
+ // -------------------------
+ private string _CPU_Text;
+ public string CPU_Text
+ {
+ get { return _CPU_Text; }
+ set
+ {
+ if (_CPU_Text == value)
+ {
+ return;
+ }
+
+ _CPU_Text = value;
+ OnPropertyChanged("CPU_Text");
+ }
+ }
+
+
+ // -------------------------
+ // RAM Usage
+ // -------------------------
+ private string _RAM_Text;
+ public string RAM_Text
+ {
+ get { return _RAM_Text; }
+ set
+ {
+ if (_RAM_Text == value)
+ {
+ return;
+ }
+
+ _RAM_Text = value;
+ OnPropertyChanged("RAM_Text");
+ }
+ }
+
+
+ // -------------------------
+ // Display - CheckBox
+ // -------------------------
+ private bool _Display_IsChecked;
+ public bool Display_IsChecked
+ {
+ get { return _Display_IsChecked; }
+ set
+ {
+ if (_Display_IsChecked != value)
+ {
+ _Display_IsChecked = value;
+ OnPropertyChanged("Display_IsChecked");
+ }
+ }
+ }
+
+
+ // -------------------------
+ // Warnings - CheckBox
+ // -------------------------
+ private bool _Warnings_IsChecked;
+ public bool Warnings_IsChecked
+ {
+ get { return _Warnings_IsChecked; }
+ set
+ {
+ if (_Warnings_IsChecked != value)
+ {
+ _Warnings_IsChecked = value;
+ OnPropertyChanged("Warnings_IsChecked");
+ }
+ }
+ }
+
+
+ // -------------------------
+ // Autosave - CheckBox
+ // -------------------------
+ private bool _Autosave_IsChecked;
+ public bool Autosave_IsChecked
+ {
+ get { return _Autosave_IsChecked; }
+ set
+ {
+ if (_Autosave_IsChecked != value)
+ {
+ _Autosave_IsChecked = value;
+ OnPropertyChanged("Autosave_IsChecked");
+ }
+ }
+ }
+
+
+ // -------------------------
+ // Display - Text
// -------------------------
public string _Display_Text;
public string Display_Text