diff --git a/AboutForm.cs b/AboutForm.cs index ccbcabb..f694430 100644 --- a/AboutForm.cs +++ b/AboutForm.cs @@ -1,3 +1,9 @@ + // _ _ + //| | _____ _ __| |_ __ _ _ __ _ __ ____ + //| |/ / _ \| '__| __/ _` | '_ \| '_ \ ____|_ / + //| | (_) | | | || (_| | |_) | |_) |_____/ / + //|_|\_\___/|_| \__\__,_| .__/| .__/ /___| + // |_| |_| using System; using System.Drawing; using System.Windows.Forms; diff --git a/AppCard.cs b/AppCard.cs index 7d522a7..c792fd8 100644 --- a/AppCard.cs +++ b/AppCard.cs @@ -1,3 +1,9 @@ + // _ _ + //| | _____ _ __| |_ __ _ _ __ _ __ ____ + //| |/ / _ \| '__| __/ _` | '_ \| '_ \ ____|_ / + //| | (_) | | | || (_| | |_) | |_) |_____/ / + //|_|\_\___/|_| \__\__,_| .__/| .__/ /___| + // |_| |_| using System; using System.Drawing; using System.Windows.Forms; diff --git a/AppSearch.cs b/AppSearch.cs index ac88f75..900d84c 100644 --- a/AppSearch.cs +++ b/AppSearch.cs @@ -1,3 +1,9 @@ + // _ _ + //| | _____ _ __| |_ __ _ _ __ _ __ ____ + //| |/ / _ \| '__| __/ _` | '_ \| '_ \ ____|_ / + //| | (_) | | | || (_| | |_) | |_) |_____/ / + //|_|\_\___/|_| \__\__,_| .__/| .__/ /___| + // |_| |_| using System; using System.Collections.Generic; using System.Linq; diff --git a/DownloadItem.cs b/DownloadItem.cs index 0729c59..a15169d 100644 --- a/DownloadItem.cs +++ b/DownloadItem.cs @@ -1,125 +1,131 @@ -using System; -using System.Drawing; -using System.Windows.Forms; - -namespace AppStore -{ - public class DownloadItem : UserControl - { - private Label nameLabel; - private ProgressBar progressBar; - private Label statusLabel; - private Button cancelBtn; - - public string FileName { get; set; } = string.Empty; - public int Progress { get; set; } - public string Status { get; set; } = string.Empty; - - public DownloadItem() - { - nameLabel = new Label(); - progressBar = new ProgressBar(); - statusLabel = new Label(); - cancelBtn = new Button(); - - InitializeComponent(); - - // 监听主题变化 - ThemeManager.ThemeChanged += (theme) => { - this.Invoke((MethodInvoker)delegate { - ApplyTheme(); - }); - }; - } - - private void ApplyTheme() - { - this.BackColor = ThemeManager.CurrentTheme == ThemeManager.ThemeMode.Light - ? Color.White - : Color.Black; - this.ForeColor = ThemeManager.CurrentTheme == ThemeManager.ThemeMode.Light - ? Color.Black - : Color.White; - - cancelBtn.BackColor = ThemeManager.CurrentTheme == ThemeManager.ThemeMode.Light - ? SystemColors.Control - : Color.FromArgb(70, 70, 70); - cancelBtn.ForeColor = ThemeManager.TextColor; - } - - private void InitializeComponent() - { - this.Size = new Size(400, 60); - this.BackColor = ThemeManager.CurrentTheme == ThemeManager.ThemeMode.Light - ? Color.White - : Color.Black; - this.BorderStyle = BorderStyle.FixedSingle; - this.ForeColor = ThemeManager.CurrentTheme == ThemeManager.ThemeMode.Light - ? Color.Black - : Color.White; - - // 文件名标签 - nameLabel = new Label(); - nameLabel.AutoSize = true; - nameLabel.Location = new Point(10, 10); - nameLabel.Font = new Font("Microsoft YaHei", 9, FontStyle.Bold); - this.Controls.Add(nameLabel); - - // 进度条 - progressBar = new ProgressBar(); - progressBar.Size = new Size(200, 20); - progressBar.Location = new Point(10, 30); - this.Controls.Add(progressBar); - - // 状态标签 - statusLabel = new Label(); - statusLabel.AutoSize = true; - statusLabel.Location = new Point(220, 30); - statusLabel.Font = new Font("Microsoft YaHei", 8); - this.Controls.Add(statusLabel); - - // 取消按钮 - cancelBtn = new Button(); - cancelBtn.Text = "取消"; - cancelBtn.Size = new Size(60, 25); - cancelBtn.Location = new Point(320, 30); - cancelBtn.BackColor = ThemeManager.CurrentTheme == ThemeManager.ThemeMode.Light - ? SystemColors.Control - : Color.FromArgb(70, 70, 70); - cancelBtn.ForeColor = ThemeManager.TextColor; - cancelBtn.FlatStyle = FlatStyle.Flat; - cancelBtn.FlatAppearance.BorderSize = 0; - cancelBtn.Click += CancelBtn_Click; - this.Controls.Add(cancelBtn); - } - - public void UpdateDisplay() - { - nameLabel.Text = FileName; - progressBar.Value = Progress; - statusLabel.Text = Status; - } - - private void CancelBtn_Click(object sender, EventArgs e) - { - if (sender == null || e == null) return; - if (InvokeRequired) - { - Invoke(new EventHandler(CancelBtn_Click), sender, e); - return; - } - - try - { - DownloadManager.Instance.CancelDownload(this); - Status = "已取消"; - UpdateDisplay(); - } - catch (Exception ex) - { - Status = $"取消失败: {ex.Message}"; - UpdateDisplay(); - } - } - } -} + // _ _ + //| | _____ _ __| |_ __ _ _ __ _ __ ____ + //| |/ / _ \| '__| __/ _` | '_ \| '_ \ ____|_ / + //| | (_) | | | || (_| | |_) | |_) |_____/ / + //|_|\_\___/|_| \__\__,_| .__/| .__/ /___| + // |_| |_| +using System; +using System.Drawing; +using System.Windows.Forms; + +namespace AppStore +{ + public class DownloadItem : UserControl + { + private Label nameLabel; + private ProgressBar progressBar; + private Label statusLabel; + private Button cancelBtn; + + public string FileName { get; set; } = string.Empty; + public int Progress { get; set; } + public string Status { get; set; } = string.Empty; + + public DownloadItem() + { + nameLabel = new Label(); + progressBar = new ProgressBar(); + statusLabel = new Label(); + cancelBtn = new Button(); + + InitializeComponent(); + + // 监听主题变化 + ThemeManager.ThemeChanged += (theme) => { + this.Invoke((MethodInvoker)delegate { + ApplyTheme(); + }); + }; + } + + private void ApplyTheme() + { + this.BackColor = ThemeManager.CurrentTheme == ThemeManager.ThemeMode.Light + ? Color.White + : Color.Black; + this.ForeColor = ThemeManager.CurrentTheme == ThemeManager.ThemeMode.Light + ? Color.Black + : Color.White; + + cancelBtn.BackColor = ThemeManager.CurrentTheme == ThemeManager.ThemeMode.Light + ? SystemColors.Control + : Color.FromArgb(70, 70, 70); + cancelBtn.ForeColor = ThemeManager.TextColor; + } + + private void InitializeComponent() + { + this.Size = new Size(400, 60); + this.BackColor = ThemeManager.CurrentTheme == ThemeManager.ThemeMode.Light + ? Color.White + : Color.Black; + this.BorderStyle = BorderStyle.FixedSingle; + this.ForeColor = ThemeManager.CurrentTheme == ThemeManager.ThemeMode.Light + ? Color.Black + : Color.White; + + // 文件名标签 + nameLabel = new Label(); + nameLabel.AutoSize = true; + nameLabel.Location = new Point(10, 10); + nameLabel.Font = new Font("Microsoft YaHei", 9, FontStyle.Bold); + this.Controls.Add(nameLabel); + + // 进度条 + progressBar = new ProgressBar(); + progressBar.Size = new Size(200, 20); + progressBar.Location = new Point(10, 30); + this.Controls.Add(progressBar); + + // 状态标签 + statusLabel = new Label(); + statusLabel.AutoSize = true; + statusLabel.Location = new Point(220, 30); + statusLabel.Font = new Font("Microsoft YaHei", 8); + this.Controls.Add(statusLabel); + + // 取消按钮 + cancelBtn = new Button(); + cancelBtn.Text = "取消"; + cancelBtn.Size = new Size(60, 25); + cancelBtn.Location = new Point(320, 30); + cancelBtn.BackColor = ThemeManager.CurrentTheme == ThemeManager.ThemeMode.Light + ? SystemColors.Control + : Color.FromArgb(70, 70, 70); + cancelBtn.ForeColor = ThemeManager.TextColor; + cancelBtn.FlatStyle = FlatStyle.Flat; + cancelBtn.FlatAppearance.BorderSize = 0; + cancelBtn.Click += CancelBtn_Click; + this.Controls.Add(cancelBtn); + } + + public void UpdateDisplay() + { + nameLabel.Text = FileName; + progressBar.Value = Progress; + statusLabel.Text = Status; + } + + private void CancelBtn_Click(object sender, EventArgs e) + { + if (sender == null || e == null) return; + if (InvokeRequired) + { + Invoke(new EventHandler(CancelBtn_Click), sender, e); + return; + } + + try + { + DownloadManager.Instance.CancelDownload(this); + Status = "已取消"; + UpdateDisplay(); + } + catch (Exception ex) + { + Status = $"取消失败: {ex.Message}"; + UpdateDisplay(); + } + } + } +} diff --git a/DownloadManager.cs b/DownloadManager.cs index 152d8fb..a6a8cc5 100644 --- a/DownloadManager.cs +++ b/DownloadManager.cs @@ -1,3 +1,9 @@ + // _ _ + //| | _____ _ __| |_ __ _ _ __ _ __ ____ + //| |/ / _ \| '__| __/ _` | '_ \| '_ \ ____|_ / + //| | (_) | | | || (_| | |_) | |_) |_____/ / + //|_|\_\___/|_| \__\__,_| .__/| .__/ /___| + // |_| |_| using System; using System.Collections.Generic; using System.Diagnostics; diff --git a/ImageCompressorForm.cs b/ImageCompressorForm.cs index ebe3aef..01348b7 100644 --- a/ImageCompressorForm.cs +++ b/ImageCompressorForm.cs @@ -1,190 +1,196 @@ -using System; -using System.Diagnostics; -using System.Drawing; -using System.IO; -using System.Windows.Forms; - -namespace AppStore -{ - public class ImageCompressorForm : Form - { - private Button btnSelectInput = new Button(); - private Button btnSelectOutput = new Button(); - private Button btnCompress = new Button(); - private TextBox txtInput = new TextBox(); - private TextBox txtOutput = new TextBox(); - private RadioButton rbLossy = new RadioButton(); - private RadioButton rbLossless = new RadioButton(); - private TrackBar tbQuality = new TrackBar(); - private Label lblQuality = new Label(); - private CheckBox cbKeepExif = new CheckBox(); - private ProgressBar progressBar = new ProgressBar(); - - public ImageCompressorForm() - { - InitializeComponent(); - } - - private void InitializeComponent() - { - this.Text = "图片压缩工具"; - this.Size = new Size(500, 350); - this.StartPosition = FormStartPosition.CenterScreen; - this.FormBorderStyle = FormBorderStyle.FixedDialog; - this.MaximizeBox = false; - - // 输入文件选择 - btnSelectInput.Text = "选择..."; - btnSelectInput.Location = new Point(400, 20); - btnSelectInput.Click += (s, e) => SelectFile(txtInput); - this.Controls.Add(btnSelectInput); - - txtInput.Location = new Point(20, 20); - txtInput.Size = new Size(370, 20); - txtInput.ReadOnly = true; - this.Controls.Add(txtInput); - - Label lblInput = new Label(); - lblInput.Text = "输入文件:"; - lblInput.Location = new Point(20, 0); - this.Controls.Add(lblInput); - - // 输出文件选择 - btnSelectOutput.Text = "选择..."; - btnSelectOutput.Location = new Point(400, 70); - btnSelectOutput.Click += (s, e) => SelectFile(txtOutput, true); - this.Controls.Add(btnSelectOutput); - - txtOutput.Location = new Point(20, 70); - txtOutput.Size = new Size(370, 20); - this.Controls.Add(txtOutput); - - Label lblOutput = new Label(); - lblOutput.Text = "输出文件:"; - lblOutput.Location = new Point(20, 50); - this.Controls.Add(lblOutput); - - // 压缩类型 - rbLossy.Text = "有损压缩 (JPEG)"; - rbLossy.Location = new Point(20, 110); - rbLossy.Checked = true; - this.Controls.Add(rbLossy); - - rbLossless.Text = "无损压缩 (PNG)"; - rbLossless.Location = new Point(20, 135); - this.Controls.Add(rbLossless); - - // 质量设置 - tbQuality.Minimum = 1; - tbQuality.Maximum = 1000; - tbQuality.Value = 800; - tbQuality.Location = new Point(20, 190); - tbQuality.Size = new Size(300, 50); - tbQuality.Scroll += (s, e) => lblQuality.Text = $"压缩质量: {tbQuality.Value}"; - this.Controls.Add(tbQuality); - - lblQuality.Text = $"压缩质量: {tbQuality.Value}"; - lblQuality.Location = new Point(20, 170); - this.Controls.Add(lblQuality); - - // EXIF选项 - cbKeepExif.Text = "保留EXIF信息"; - cbKeepExif.Location = new Point(20, 240); - this.Controls.Add(cbKeepExif); - - // 压缩按钮 - btnCompress.Text = "开始压缩"; - btnCompress.Location = new Point(20, 280); - btnCompress.Size = new Size(460, 30); - btnCompress.Click += BtnCompress_Click; - this.Controls.Add(btnCompress); - - // 调整窗体大小 - this.Size = new Size(500, 370); - } - - private void SelectFile(TextBox target, bool isSave = false) - { - var dialog = isSave ? new SaveFileDialog() : new OpenFileDialog() as FileDialog; - dialog.Filter = "图片文件|*.jpg;*.jpeg;*.png;*.bmp|所有文件|*.*"; - - if (dialog.ShowDialog() == DialogResult.OK) - { - target.Text = dialog.FileName; - } - } - - private void BtnCompress_Click(object sender, EventArgs e) - { - if (string.IsNullOrEmpty(txtInput.Text) || !File.Exists(txtInput.Text)) - { - MessageBox.Show("请选择有效的输入文件", "错误", MessageBoxButtons.OK, MessageBoxIcon.Error); - return; - } - - if (string.IsNullOrEmpty(txtOutput.Text)) - { - MessageBox.Show("请指定输出文件", "错误", MessageBoxButtons.OK, MessageBoxIcon.Error); - return; - } - - btnCompress.Enabled = false; - - try - { - string toolPath = Path.Combine(Application.StartupPath, "resource", "image_compressor.exe"); - if (!File.Exists(toolPath)) - { - MessageBox.Show("图片压缩工具未找到", "错误", MessageBoxButtons.OK, MessageBoxIcon.Error); - return; - } - - string args = $"\"{txtInput.Text}\" \"{txtOutput.Text}\""; - args += $" -t {(rbLossy.Checked ? "lossy" : "lossless")}"; - args += $" -q {tbQuality.Value}"; - if (cbKeepExif.Checked) args += " -e"; - - var process = new Process(); - process.StartInfo.FileName = toolPath; - process.StartInfo.Arguments = args; - process.StartInfo.UseShellExecute = false; - process.StartInfo.CreateNoWindow = true; - process.StartInfo.RedirectStandardOutput = true; - process.StartInfo.RedirectStandardError = true; - - process.OutputDataReceived += (s, ev) => { - if (!string.IsNullOrEmpty(ev.Data)) - Console.WriteLine(ev.Data); - }; - - process.ErrorDataReceived += (s, ev) => { - if (!string.IsNullOrEmpty(ev.Data)) - Console.Error.WriteLine(ev.Data); - }; - - process.Start(); - process.BeginOutputReadLine(); - process.BeginErrorReadLine(); - process.WaitForExit(); - - if (process.ExitCode == 0) - { - MessageBox.Show("图片压缩完成", "完成", MessageBoxButtons.OK, MessageBoxIcon.Information); - } - else - { - MessageBox.Show("图片压缩失败", "错误", MessageBoxButtons.OK, MessageBoxIcon.Error); - } - } - catch (Exception ex) - { - MessageBox.Show($"压缩过程中发生错误: {ex.Message}", "错误", MessageBoxButtons.OK, MessageBoxIcon.Error); - } - finally - { - btnCompress.Enabled = true; - progressBar.Visible = false; - } - } - } -} + // _ _ + //| | _____ _ __| |_ __ _ _ __ _ __ ____ + //| |/ / _ \| '__| __/ _` | '_ \| '_ \ ____|_ / + //| | (_) | | | || (_| | |_) | |_) |_____/ / + //|_|\_\___/|_| \__\__,_| .__/| .__/ /___| + // |_| |_| +using System; +using System.Diagnostics; +using System.Drawing; +using System.IO; +using System.Windows.Forms; + +namespace AppStore +{ + public class ImageCompressorForm : Form + { + private Button btnSelectInput = new Button(); + private Button btnSelectOutput = new Button(); + private Button btnCompress = new Button(); + private TextBox txtInput = new TextBox(); + private TextBox txtOutput = new TextBox(); + private RadioButton rbLossy = new RadioButton(); + private RadioButton rbLossless = new RadioButton(); + private TrackBar tbQuality = new TrackBar(); + private Label lblQuality = new Label(); + private CheckBox cbKeepExif = new CheckBox(); + private ProgressBar progressBar = new ProgressBar(); + + public ImageCompressorForm() + { + InitializeComponent(); + } + + private void InitializeComponent() + { + this.Text = "图片压缩工具"; + this.Size = new Size(500, 350); + this.StartPosition = FormStartPosition.CenterScreen; + this.FormBorderStyle = FormBorderStyle.FixedDialog; + this.MaximizeBox = false; + + // 输入文件选择 + btnSelectInput.Text = "选择..."; + btnSelectInput.Location = new Point(400, 20); + btnSelectInput.Click += (s, e) => SelectFile(txtInput); + this.Controls.Add(btnSelectInput); + + txtInput.Location = new Point(20, 20); + txtInput.Size = new Size(370, 20); + txtInput.ReadOnly = true; + this.Controls.Add(txtInput); + + Label lblInput = new Label(); + lblInput.Text = "输入文件:"; + lblInput.Location = new Point(20, 0); + this.Controls.Add(lblInput); + + // 输出文件选择 + btnSelectOutput.Text = "选择..."; + btnSelectOutput.Location = new Point(400, 70); + btnSelectOutput.Click += (s, e) => SelectFile(txtOutput, true); + this.Controls.Add(btnSelectOutput); + + txtOutput.Location = new Point(20, 70); + txtOutput.Size = new Size(370, 20); + this.Controls.Add(txtOutput); + + Label lblOutput = new Label(); + lblOutput.Text = "输出文件:"; + lblOutput.Location = new Point(20, 50); + this.Controls.Add(lblOutput); + + // 压缩类型 + rbLossy.Text = "有损压缩 (JPEG)"; + rbLossy.Location = new Point(20, 110); + rbLossy.Checked = true; + this.Controls.Add(rbLossy); + + rbLossless.Text = "无损压缩 (PNG)"; + rbLossless.Location = new Point(20, 135); + this.Controls.Add(rbLossless); + + // 质量设置 + tbQuality.Minimum = 1; + tbQuality.Maximum = 1000; + tbQuality.Value = 800; + tbQuality.Location = new Point(20, 190); + tbQuality.Size = new Size(300, 50); + tbQuality.Scroll += (s, e) => lblQuality.Text = $"压缩质量: {tbQuality.Value}"; + this.Controls.Add(tbQuality); + + lblQuality.Text = $"压缩质量: {tbQuality.Value}"; + lblQuality.Location = new Point(20, 170); + this.Controls.Add(lblQuality); + + // EXIF选项 + cbKeepExif.Text = "保留EXIF信息"; + cbKeepExif.Location = new Point(20, 240); + this.Controls.Add(cbKeepExif); + + // 压缩按钮 + btnCompress.Text = "开始压缩"; + btnCompress.Location = new Point(20, 280); + btnCompress.Size = new Size(460, 30); + btnCompress.Click += BtnCompress_Click; + this.Controls.Add(btnCompress); + + // 调整窗体大小 + this.Size = new Size(500, 370); + } + + private void SelectFile(TextBox target, bool isSave = false) + { + var dialog = isSave ? new SaveFileDialog() : new OpenFileDialog() as FileDialog; + dialog.Filter = "图片文件|*.jpg;*.jpeg;*.png;*.bmp|所有文件|*.*"; + + if (dialog.ShowDialog() == DialogResult.OK) + { + target.Text = dialog.FileName; + } + } + + private void BtnCompress_Click(object sender, EventArgs e) + { + if (string.IsNullOrEmpty(txtInput.Text) || !File.Exists(txtInput.Text)) + { + MessageBox.Show("请选择有效的输入文件", "错误", MessageBoxButtons.OK, MessageBoxIcon.Error); + return; + } + + if (string.IsNullOrEmpty(txtOutput.Text)) + { + MessageBox.Show("请指定输出文件", "错误", MessageBoxButtons.OK, MessageBoxIcon.Error); + return; + } + + btnCompress.Enabled = false; + + try + { + string toolPath = Path.Combine(Application.StartupPath, "resource", "image_compressor.exe"); + if (!File.Exists(toolPath)) + { + MessageBox.Show("图片压缩工具未找到", "错误", MessageBoxButtons.OK, MessageBoxIcon.Error); + return; + } + + string args = $"\"{txtInput.Text}\" \"{txtOutput.Text}\""; + args += $" -t {(rbLossy.Checked ? "lossy" : "lossless")}"; + args += $" -q {tbQuality.Value}"; + if (cbKeepExif.Checked) args += " -e"; + + var process = new Process(); + process.StartInfo.FileName = toolPath; + process.StartInfo.Arguments = args; + process.StartInfo.UseShellExecute = false; + process.StartInfo.CreateNoWindow = true; + process.StartInfo.RedirectStandardOutput = true; + process.StartInfo.RedirectStandardError = true; + + process.OutputDataReceived += (s, ev) => { + if (!string.IsNullOrEmpty(ev.Data)) + Console.WriteLine(ev.Data); + }; + + process.ErrorDataReceived += (s, ev) => { + if (!string.IsNullOrEmpty(ev.Data)) + Console.Error.WriteLine(ev.Data); + }; + + process.Start(); + process.BeginOutputReadLine(); + process.BeginErrorReadLine(); + process.WaitForExit(); + + if (process.ExitCode == 0) + { + MessageBox.Show("图片压缩完成", "完成", MessageBoxButtons.OK, MessageBoxIcon.Information); + } + else + { + MessageBox.Show("图片压缩失败", "错误", MessageBoxButtons.OK, MessageBoxIcon.Error); + } + } + catch (Exception ex) + { + MessageBox.Show($"压缩过程中发生错误: {ex.Message}", "错误", MessageBoxButtons.OK, MessageBoxIcon.Error); + } + finally + { + btnCompress.Enabled = true; + progressBar.Visible = false; + } + } + } +} diff --git a/MainForm.cs b/MainForm.cs index 1942d62..010257f 100644 --- a/MainForm.cs +++ b/MainForm.cs @@ -1,3 +1,9 @@ + // _ _ + //| | _____ _ __| |_ __ _ _ __ _ __ ____ + //| |/ / _ \| '__| __/ _` | '_ \| '_ \ ____|_ / + //| | (_) | | | || (_| | |_) | |_) |_____/ / + //|_|\_\___/|_| \__\__,_| .__/| .__/ /___| + // |_| |_| #nullable enable using System; using System.Drawing; diff --git a/Program.cs b/Program.cs index 9ce17df..00320df 100644 --- a/Program.cs +++ b/Program.cs @@ -1,16 +1,22 @@ -using System; -using System.Windows.Forms; - -namespace AppStore -{ - static class Program - { - [STAThread] - static void Main() - { - Application.EnableVisualStyles(); - Application.SetCompatibleTextRenderingDefault(false); - Application.Run(new MainForm()); - } - } -} + // _ _ + //| | _____ _ __| |_ __ _ _ __ _ __ ____ + //| |/ / _ \| '__| __/ _` | '_ \| '_ \ ____|_ / + //| | (_) | | | || (_| | |_) | |_) |_____/ / + //|_|\_\___/|_| \__\__,_| .__/| .__/ /___| + // |_| |_| +using System; +using System.Windows.Forms; + +namespace AppStore +{ + static class Program + { + [STAThread] + static void Main() + { + Application.EnableVisualStyles(); + Application.SetCompatibleTextRenderingDefault(false); + Application.Run(new MainForm()); + } + } +} diff --git a/SettingsForm.cs b/SettingsForm.cs index 067037f..e3d269f 100644 --- a/SettingsForm.cs +++ b/SettingsForm.cs @@ -1,3 +1,9 @@ + // _ _ + //| | _____ _ __| |_ __ _ _ __ _ __ ____ + //| |/ / _ \| '__| __/ _` | '_ \| '_ \ ____|_ / + //| | (_) | | | || (_| | |_) | |_) |_____/ / + //|_|\_\___/|_| \__\__,_| .__/| .__/ /___| + // |_| |_| using System; using System.Diagnostics; using System.IO; diff --git a/ThemeManager.cs b/ThemeManager.cs index cb45330..d1b6d2b 100644 --- a/ThemeManager.cs +++ b/ThemeManager.cs @@ -1,3 +1,9 @@ + // _ _ + //| | _____ _ __| |_ __ _ _ __ _ __ ____ + //| |/ / _ \| '__| __/ _` | '_ \| '_ \ ____|_ / + //| | (_) | | | || (_| | |_) | |_) |_____/ / + //|_|\_\___/|_| \__\__,_| .__/| .__/ /___| + // |_| |_| using System; using System.Drawing; using System.Windows.Forms; diff --git a/ToolCard.cs b/ToolCard.cs index fd8d313..3769816 100644 --- a/ToolCard.cs +++ b/ToolCard.cs @@ -1,113 +1,119 @@ -using System; -using System.Drawing; -using System.Windows.Forms; - -namespace AppStore -{ - public class ToolCard : UserControl - { - private PictureBox iconBox = new PictureBox(); - private Label nameLabel = new Label(); - private Panel namePanel = new Panel(); - private Color borderColor = SystemColors.ControlDark; - - public string ToolName { get; set; } = string.Empty; - public Image ToolIcon { get; set; } = SystemIcons.Shield.ToBitmap(); - - // 自定义点击事件初始化为空委托 - public event EventHandler ToolCardClicked = delegate {}; - - public ToolCard() - { - // 启用双缓冲 - this.SetStyle(ControlStyles.OptimizedDoubleBuffer | - ControlStyles.ResizeRedraw, true); - InitializeComponent(); - } - - private void InitializeComponent() - { - this.Size = new Size(240, 220); - this.BackColor = Color.White; - this.Padding = new Padding(5); - this.BorderStyle = BorderStyle.FixedSingle; - - // 工具图标 - iconBox = new PictureBox(); - iconBox.Size = new Size(80, 80); - iconBox.Location = new Point((Width - 80) / 2, 15); - iconBox.SizeMode = PictureBoxSizeMode.StretchImage; - this.Controls.Add(iconBox); - - // 工具名称 - 使用Panel包裹Label实现边框颜色 - namePanel = new Panel(); - namePanel.Size = new Size(Width - 20, 30); - namePanel.Location = new Point(10, 100); - namePanel.Paint += (sender, e) => { - ControlPaint.DrawBorder(e.Graphics, namePanel.ClientRectangle, - borderColor, ButtonBorderStyle.Solid); - }; - - nameLabel = new Label(); - nameLabel.Dock = DockStyle.Fill; - nameLabel.Font = new Font("Microsoft YaHei", 10, FontStyle.Bold); - nameLabel.TextAlign = ContentAlignment.MiddleCenter; - namePanel.Controls.Add(nameLabel); - - // 初始主题设置 - UpdateLabelTheme(); - - // 订阅主题变化事件 - ThemeManager.ThemeChanged += (theme) => UpdateLabelTheme(); - - this.Controls.Add(namePanel); - - // 打开按钮 - var openButton = new Button(); - openButton.Text = "打开工具"; - openButton.Size = new Size(100, 30); - openButton.Location = new Point((Width - 100) / 2, 140); - openButton.BackColor = Color.FromArgb(0, 120, 215); - openButton.ForeColor = Color.White; - openButton.FlatStyle = FlatStyle.Flat; - openButton.FlatAppearance.BorderSize = 0; - openButton.Cursor = Cursors.Hand; - // 按钮点击直接触发ToolCardClicked事件 - openButton.Click += (s, e) => { - ToolCardClicked?.Invoke(this, e); - }; - this.Controls.Add(openButton); - - // 设置按钮悬停效果 - openButton.BackColor = Color.FromArgb(0, 120, 215); - openButton.FlatAppearance.MouseOverBackColor = Color.FromArgb(0, 100, 180); - openButton.FlatAppearance.MouseDownBackColor = Color.FromArgb(0, 80, 160); - } - - private void UpdateLabelTheme() - { - if (ThemeManager.CurrentTheme == ThemeManager.ThemeMode.Dark) - { - nameLabel.BackColor = Color.Black; - nameLabel.ForeColor = Color.White; - namePanel.BackColor = Color.Black; - borderColor = Color.White; - } - else - { - nameLabel.BackColor = Color.White; - nameLabel.ForeColor = Color.Black; - namePanel.BackColor = Color.White; - borderColor = SystemColors.ControlDark; - } - namePanel.Invalidate(); // 触发重绘 - } - - public void UpdateDisplay() - { - nameLabel.Text = ToolName; - iconBox.Image = ToolIcon; - UpdateLabelTheme(); - } - } -} + // _ _ + //| | _____ _ __| |_ __ _ _ __ _ __ ____ + //| |/ / _ \| '__| __/ _` | '_ \| '_ \ ____|_ / + //| | (_) | | | || (_| | |_) | |_) |_____/ / + //|_|\_\___/|_| \__\__,_| .__/| .__/ /___| + // |_| |_| +using System; +using System.Drawing; +using System.Windows.Forms; + +namespace AppStore +{ + public class ToolCard : UserControl + { + private PictureBox iconBox = new PictureBox(); + private Label nameLabel = new Label(); + private Panel namePanel = new Panel(); + private Color borderColor = SystemColors.ControlDark; + + public string ToolName { get; set; } = string.Empty; + public Image ToolIcon { get; set; } = SystemIcons.Shield.ToBitmap(); + + // 自定义点击事件初始化为空委托 + public event EventHandler ToolCardClicked = delegate {}; + + public ToolCard() + { + // 启用双缓冲 + this.SetStyle(ControlStyles.OptimizedDoubleBuffer | + ControlStyles.ResizeRedraw, true); + InitializeComponent(); + } + + private void InitializeComponent() + { + this.Size = new Size(240, 220); + this.BackColor = Color.White; + this.Padding = new Padding(5); + this.BorderStyle = BorderStyle.FixedSingle; + + // 工具图标 + iconBox = new PictureBox(); + iconBox.Size = new Size(80, 80); + iconBox.Location = new Point((Width - 80) / 2, 15); + iconBox.SizeMode = PictureBoxSizeMode.StretchImage; + this.Controls.Add(iconBox); + + // 工具名称 - 使用Panel包裹Label实现边框颜色 + namePanel = new Panel(); + namePanel.Size = new Size(Width - 20, 30); + namePanel.Location = new Point(10, 100); + namePanel.Paint += (sender, e) => { + ControlPaint.DrawBorder(e.Graphics, namePanel.ClientRectangle, + borderColor, ButtonBorderStyle.Solid); + }; + + nameLabel = new Label(); + nameLabel.Dock = DockStyle.Fill; + nameLabel.Font = new Font("Microsoft YaHei", 10, FontStyle.Bold); + nameLabel.TextAlign = ContentAlignment.MiddleCenter; + namePanel.Controls.Add(nameLabel); + + // 初始主题设置 + UpdateLabelTheme(); + + // 订阅主题变化事件 + ThemeManager.ThemeChanged += (theme) => UpdateLabelTheme(); + + this.Controls.Add(namePanel); + + // 打开按钮 + var openButton = new Button(); + openButton.Text = "打开工具"; + openButton.Size = new Size(100, 30); + openButton.Location = new Point((Width - 100) / 2, 140); + openButton.BackColor = Color.FromArgb(0, 120, 215); + openButton.ForeColor = Color.White; + openButton.FlatStyle = FlatStyle.Flat; + openButton.FlatAppearance.BorderSize = 0; + openButton.Cursor = Cursors.Hand; + // 按钮点击直接触发ToolCardClicked事件 + openButton.Click += (s, e) => { + ToolCardClicked?.Invoke(this, e); + }; + this.Controls.Add(openButton); + + // 设置按钮悬停效果 + openButton.BackColor = Color.FromArgb(0, 120, 215); + openButton.FlatAppearance.MouseOverBackColor = Color.FromArgb(0, 100, 180); + openButton.FlatAppearance.MouseDownBackColor = Color.FromArgb(0, 80, 160); + } + + private void UpdateLabelTheme() + { + if (ThemeManager.CurrentTheme == ThemeManager.ThemeMode.Dark) + { + nameLabel.BackColor = Color.Black; + nameLabel.ForeColor = Color.White; + namePanel.BackColor = Color.Black; + borderColor = Color.White; + } + else + { + nameLabel.BackColor = Color.White; + nameLabel.ForeColor = Color.Black; + namePanel.BackColor = Color.White; + borderColor = SystemColors.ControlDark; + } + namePanel.Invalidate(); // 触发重绘 + } + + public void UpdateDisplay() + { + nameLabel.Text = ToolName; + iconBox.Image = ToolIcon; + UpdateLabelTheme(); + } + } +} diff --git a/border_renderer.cpp b/border_renderer.cpp index 4c3dcab..d1206df 100644 --- a/border_renderer.cpp +++ b/border_renderer.cpp @@ -1,64 +1,70 @@ -#include -#include -#include -#include -#include - -// 高性能边框路径生成 -void GenerateBorderPath(int width, int height, int radius, const char* outputPath) { - std::ofstream out(outputPath); - const float pi = 3.1415926f; - const int segments = 24; // 高分段数确保平滑 - - std::vector points; - - // 优化后的圆角路径生成 - auto addArc = [&](float startAngle, float endAngle, float cx, float cy) { - for (int i = 0; i <= segments; ++i) { - float angle = startAngle + (endAngle - startAngle) * i / segments; - points.push_back({ - cx + radius * cosf(angle), - cy + radius * sinf(angle) - }); - } - }; - - // 左上角 - addArc(pi, 3*pi/2, radius, radius); - - // 右上角 - addArc(3*pi/2, 2*pi, width - radius, radius); - - // 右下角 - addArc(0, pi/2, width - radius, height - radius); - - // 左下角 - addArc(pi/2, pi, radius, height - radius); - - // 闭合路径 - points.push_back(points[0]); - - // 写入优化格式 - if (out.is_open()) { - for (const auto& p : points) { - out << p.x << "," << p.y << "\n"; - } - } -} - -int WINAPI WinMain(HINSTANCE, HINSTANCE, LPSTR, int) { - int argc; - LPWSTR* argv = CommandLineToArgvW(GetCommandLineW(), &argc); - - if (argc != 5) return 1; - - int width = _wtoi(argv[1]); - int height = _wtoi(argv[2]); - int radius = _wtoi(argv[3]); - - char outputPath[MAX_PATH]; - wcstombs(outputPath, argv[4], MAX_PATH); - - GenerateBorderPath(width, height, radius, outputPath); - return 0; -} + // _ _ + //| | _____ _ __| |_ __ _ _ __ _ __ ____ + //| |/ / _ \| '__| __/ _` | '_ \| '_ \ ____|_ / + //| | (_) | | | || (_| | |_) | |_) |_____/ / + //|_|\_\___/|_| \__\__,_| .__/| .__/ /___| + // |_| |_| +#include +#include +#include +#include +#include + +// 高性能边框路径生成 +void GenerateBorderPath(int width, int height, int radius, const char* outputPath) { + std::ofstream out(outputPath); + const float pi = 3.1415926f; + const int segments = 24; // 高分段数确保平滑 + + std::vector points; + + // 优化后的圆角路径生成 + auto addArc = [&](float startAngle, float endAngle, float cx, float cy) { + for (int i = 0; i <= segments; ++i) { + float angle = startAngle + (endAngle - startAngle) * i / segments; + points.push_back({ + cx + radius * cosf(angle), + cy + radius * sinf(angle) + }); + } + }; + + // 左上角 + addArc(pi, 3*pi/2, radius, radius); + + // 右上角 + addArc(3*pi/2, 2*pi, width - radius, radius); + + // 右下角 + addArc(0, pi/2, width - radius, height - radius); + + // 左下角 + addArc(pi/2, pi, radius, height - radius); + + // 闭合路径 + points.push_back(points[0]); + + // 写入优化格式 + if (out.is_open()) { + for (const auto& p : points) { + out << p.x << "," << p.y << "\n"; + } + } +} + +int WINAPI WinMain(HINSTANCE, HINSTANCE, LPSTR, int) { + int argc; + LPWSTR* argv = CommandLineToArgvW(GetCommandLineW(), &argc); + + if (argc != 5) return 1; + + int width = _wtoi(argv[1]); + int height = _wtoi(argv[2]); + int radius = _wtoi(argv[3]); + + char outputPath[MAX_PATH]; + wcstombs(outputPath, argv[4], MAX_PATH); + + GenerateBorderPath(width, height, radius, outputPath); + return 0; +} diff --git a/card_calculator.cpp b/card_calculator.cpp index b08b75f..610eacb 100644 --- a/card_calculator.cpp +++ b/card_calculator.cpp @@ -1,90 +1,96 @@ -#include -#include -#include -#include -#include - -using namespace std; - -struct Point { - float x; - float y; -}; - -void WritePathToFile(const vector& path, const string& filename) { - ofstream outFile(filename); - if (!outFile) { - cerr << "无法打开输出文件: " << filename << endl; - return; - } - - for (const auto& point : path) { - outFile << point.x << "," << point.y << "\n"; - } - outFile.close(); -} - -vector CalculateRoundedRectPath(int width, int height, int radius) { - vector pathPoints; - - const int segments = 10; - const float angleStep = 3.1415926f / (2 * segments); - - // 左上角 - for (int i = 0; i <= segments; i++) { - float angle = 3.1415926f + i * angleStep; - pathPoints.push_back({ - radius + radius * cosf(angle), - radius + radius * sinf(angle) - }); - } - - // 右上角 - for (int i = 0; i <= segments; i++) { - float angle = 3 * 3.1415926f / 2 + i * angleStep; - pathPoints.push_back({ - width - radius + radius * cosf(angle), - radius + radius * sinf(angle) - }); - } - - // 右下角 - for (int i = 0; i <= segments; i++) { - float angle = 0 + i * angleStep; - pathPoints.push_back({ - width - radius + radius * cosf(angle), - height - radius + radius * sinf(angle) - }); - } - - // 左下角 - for (int i = 0; i <= segments; i++) { - float angle = 3.1415926f / 2 + i * angleStep; - pathPoints.push_back({ - radius + radius * cosf(angle), - height - radius + radius * sinf(angle) - }); - } - - // 闭合路径 - pathPoints.push_back(pathPoints[0]); - - return pathPoints; -} - -int main(int argc, char* argv[]) { - if (argc != 5) { - cout << "用法: card_calculator [宽度] [高度] [圆角半径] [输出文件]" << endl; - return 1; - } - - int width = stoi(argv[1]); - int height = stoi(argv[2]); - int radius = stoi(argv[3]); - string outputFile = argv[4]; - - auto path = CalculateRoundedRectPath(width, height, radius); - WritePathToFile(path, outputFile); - - return 0; -} + // _ _ + //| | _____ _ __| |_ __ _ _ __ _ __ ____ + //| |/ / _ \| '__| __/ _` | '_ \| '_ \ ____|_ / + //| | (_) | | | || (_| | |_) | |_) |_____/ / + //|_|\_\___/|_| \__\__,_| .__/| .__/ /___| + // |_| |_| +#include +#include +#include +#include +#include + +using namespace std; + +struct Point { + float x; + float y; +}; + +void WritePathToFile(const vector& path, const string& filename) { + ofstream outFile(filename); + if (!outFile) { + cerr << "无法打开输出文件: " << filename << endl; + return; + } + + for (const auto& point : path) { + outFile << point.x << "," << point.y << "\n"; + } + outFile.close(); +} + +vector CalculateRoundedRectPath(int width, int height, int radius) { + vector pathPoints; + + const int segments = 10; + const float angleStep = 3.1415926f / (2 * segments); + + // 左上角 + for (int i = 0; i <= segments; i++) { + float angle = 3.1415926f + i * angleStep; + pathPoints.push_back({ + radius + radius * cosf(angle), + radius + radius * sinf(angle) + }); + } + + // 右上角 + for (int i = 0; i <= segments; i++) { + float angle = 3 * 3.1415926f / 2 + i * angleStep; + pathPoints.push_back({ + width - radius + radius * cosf(angle), + radius + radius * sinf(angle) + }); + } + + // 右下角 + for (int i = 0; i <= segments; i++) { + float angle = 0 + i * angleStep; + pathPoints.push_back({ + width - radius + radius * cosf(angle), + height - radius + radius * sinf(angle) + }); + } + + // 左下角 + for (int i = 0; i <= segments; i++) { + float angle = 3.1415926f / 2 + i * angleStep; + pathPoints.push_back({ + radius + radius * cosf(angle), + height - radius + radius * sinf(angle) + }); + } + + // 闭合路径 + pathPoints.push_back(pathPoints[0]); + + return pathPoints; +} + +int main(int argc, char* argv[]) { + if (argc != 5) { + cout << "用法: card_calculator [宽度] [高度] [圆角半径] [输出文件]" << endl; + return 1; + } + + int width = stoi(argv[1]); + int height = stoi(argv[2]); + int radius = stoi(argv[3]); + string outputFile = argv[4]; + + auto path = CalculateRoundedRectPath(width, height, radius); + WritePathToFile(path, outputFile); + + return 0; +} diff --git a/log_cleaner.cpp b/log_cleaner.cpp index d7f5273..da71655 100644 --- a/log_cleaner.cpp +++ b/log_cleaner.cpp @@ -1,65 +1,71 @@ -#include -#include -#include - -namespace fs = std::filesystem; - -int main() { - try { - auto start = std::chrono::high_resolution_clock::now(); - - // 定义日志目录路径 - fs::path logDir; - - #ifdef _WIN32 - // Windows系统获取AppData路径 - char* appData = nullptr; - size_t len = 0; - if (_dupenv_s(&appData, &len, "APPDATA") == 0 && appData != nullptr) { - logDir = fs::path(appData) / "zsyg" / "kortapp-z" / ".logs"; - free(appData); - } else { - std::cerr << "无法获取APPDATA环境变量" << std::endl; - return 1; - } - #else - // 非Windows系统使用默认路径 - logDir = fs::path(getenv("HOME")) / ".zsyg" / "kortapp-z" / ".logs"; - #endif - size_t deletedCount = 0; - size_t errorCount = 0; - - // 检查目录是否存在 - if (fs::exists(logDir) && fs::is_directory(logDir)) { - // 遍历并删除所有日志文件 - for (const auto& entry : fs::directory_iterator(logDir)) { - try { - if (fs::is_regular_file(entry)) { - fs::remove(entry); - deletedCount++; - } - } catch (const std::exception& e) { - std::cerr << "删除文件失败: " << entry.path() << " - " << e.what() << std::endl; - errorCount++; - } - } - } else { - std::cout << "日志目录不存在,无需清理" << std::endl; - return 0; - } - - auto end = std::chrono::high_resolution_clock::now(); - auto duration = std::chrono::duration_cast(end - start); - - std::cout << "日志清理完成: " << std::endl; - std::cout << "删除文件数: " << deletedCount << std::endl; - std::cout << "错误数: " << errorCount << std::endl; - std::cout << "耗时: " << duration.count() << " 毫秒" << std::endl; - - } catch (const std::exception& e) { - std::cerr << "发生错误: " << e.what() << std::endl; - return 1; - } - - return 0; -} + // _ _ + //| | _____ _ __| |_ __ _ _ __ _ __ ____ + //| |/ / _ \| '__| __/ _` | '_ \| '_ \ ____|_ / + //| | (_) | | | || (_| | |_) | |_) |_____/ / + //|_|\_\___/|_| \__\__,_| .__/| .__/ /___| + // |_| |_| +#include +#include +#include + +namespace fs = std::filesystem; + +int main() { + try { + auto start = std::chrono::high_resolution_clock::now(); + + // 定义日志目录路径 + fs::path logDir; + + #ifdef _WIN32 + // Windows系统获取AppData路径 + char* appData = nullptr; + size_t len = 0; + if (_dupenv_s(&appData, &len, "APPDATA") == 0 && appData != nullptr) { + logDir = fs::path(appData) / "zsyg" / "kortapp-z" / ".logs"; + free(appData); + } else { + std::cerr << "无法获取APPDATA环境变量" << std::endl; + return 1; + } + #else + // 非Windows系统使用默认路径 + logDir = fs::path(getenv("HOME")) / ".zsyg" / "kortapp-z" / ".logs"; + #endif + size_t deletedCount = 0; + size_t errorCount = 0; + + // 检查目录是否存在 + if (fs::exists(logDir) && fs::is_directory(logDir)) { + // 遍历并删除所有日志文件 + for (const auto& entry : fs::directory_iterator(logDir)) { + try { + if (fs::is_regular_file(entry)) { + fs::remove(entry); + deletedCount++; + } + } catch (const std::exception& e) { + std::cerr << "删除文件失败: " << entry.path() << " - " << e.what() << std::endl; + errorCount++; + } + } + } else { + std::cout << "日志目录不存在,无需清理" << std::endl; + return 0; + } + + auto end = std::chrono::high_resolution_clock::now(); + auto duration = std::chrono::duration_cast(end - start); + + std::cout << "日志清理完成: " << std::endl; + std::cout << "删除文件数: " << deletedCount << std::endl; + std::cout << "错误数: " << errorCount << std::endl; + std::cout << "耗时: " << duration.count() << " 毫秒" << std::endl; + + } catch (const std::exception& e) { + std::cerr << "发生错误: " << e.what() << std::endl; + return 1; + } + + return 0; +} diff --git a/logger.cs b/logger.cs index 80276a8..74c914c 100644 --- a/logger.cs +++ b/logger.cs @@ -1,3 +1,9 @@ + // _ _ + //| | _____ _ __| |_ __ _ _ __ _ __ ____ + //| |/ / _ \| '__| __/ _` | '_ \| '_ \ ____|_ / + //| | (_) | | | || (_| | |_) | |_) |_____/ / + //|_|\_\___/|_| \__\__,_| .__/| .__/ /___| + // |_| |_| using System; using System.IO; using System.Text;