145 lines
5.6 KiB
C#
145 lines
5.6 KiB
C#
using System;
|
|
using System.Windows.Forms;
|
|
|
|
namespace SpectacleTransformer {
|
|
public partial class MainForm : Form {
|
|
|
|
public static Language[] languages = Language.Load();
|
|
|
|
/// <summary>
|
|
/// Whether or not the specified instance URL is valid.
|
|
/// </summary>
|
|
private bool validInstance = false;
|
|
|
|
public MainForm() {
|
|
InitializeComponent();
|
|
}
|
|
|
|
[STAThread]
|
|
static void Main() {
|
|
Application.EnableVisualStyles();
|
|
Application.SetCompatibleTextRenderingDefault(false);
|
|
Application.Run(new MainForm());
|
|
}
|
|
|
|
private bool validateUri(string uriString) {
|
|
try {
|
|
Uri uri = new Uri(uriString, UriKind.Absolute);
|
|
return uri.Scheme == Uri.UriSchemeHttp || uri.Scheme == Uri.UriSchemeHttps;
|
|
} catch (UriFormatException) {
|
|
return false;
|
|
}
|
|
}
|
|
|
|
private void updateButtonStates() {
|
|
translateButton.Enabled = sourceLanguagePicker.SelectedItem != null
|
|
&& destinationLanguagePicker.SelectedItem != null
|
|
&& validInstance
|
|
&& sourceTextBox.Text.Length > 0;
|
|
}
|
|
|
|
private void MainForm_Load(object sender, EventArgs e) {
|
|
instanceUrlPicker.BeginUpdate();
|
|
foreach (string item in Properties.Settings.Default.KnownInstances) {
|
|
instanceUrlPicker.Items.Add(item);
|
|
}
|
|
if (instanceUrlPicker.Items.Contains(Properties.Settings.Default.LastSelectedInstance)) {
|
|
instanceUrlPicker.SelectedItem = Properties.Settings.Default.LastSelectedInstance;
|
|
validInstance = validateUri(instanceUrlPicker.SelectedItem.ToString());
|
|
updateButtonStates();
|
|
}
|
|
instanceUrlPicker.EndUpdate();
|
|
|
|
sourceLanguagePicker.BeginUpdate();
|
|
destinationLanguagePicker.BeginUpdate();
|
|
sourceLanguagePicker.Items.Clear();
|
|
destinationLanguagePicker.Items.Clear();
|
|
foreach (Language language in languages) {
|
|
if (language.SourceName != null) sourceLanguagePicker.Items.Add(language);
|
|
if (language.TargetName != null) destinationLanguagePicker.Items.Add(language);
|
|
}
|
|
sourceLanguagePicker.EndUpdate();
|
|
destinationLanguagePicker.EndUpdate();
|
|
}
|
|
|
|
private void MainForm_FormClosing(object sender, FormClosingEventArgs e) {
|
|
Properties.Settings.Default.Save();
|
|
}
|
|
|
|
private void instanceUrlPicker_TextChanged(object sender, EventArgs e) {
|
|
validInstance = validateUri(instanceUrlPicker.Text);
|
|
if (validInstance && instanceUrlPicker.SelectedItem != null)
|
|
Properties.Settings.Default.LastSelectedInstance = instanceUrlPicker.SelectedItem.ToString();
|
|
updateButtonStates();
|
|
}
|
|
|
|
private void sourceLanguagePicker_TextChanged(object sender, EventArgs e) {
|
|
updateButtonStates();
|
|
}
|
|
|
|
private void destinationLanguagePicker_TextChanged(object sender, EventArgs e) {
|
|
updateButtonStates();
|
|
}
|
|
|
|
private void sourceTextBox_TextChanged(object sender, EventArgs e) {
|
|
updateButtonStates();
|
|
}
|
|
|
|
private void clearButton_Click(object sender, EventArgs e) {
|
|
sourceTextBox.Clear();
|
|
destinationTextBox.Clear();
|
|
}
|
|
|
|
private void translateButton_Click(object sender, EventArgs e) {
|
|
mainTableLayoutPanel.Enabled = false;
|
|
|
|
// TODO: Use a list to allow registering various translation services
|
|
TranslationRequest tr;
|
|
Uri instanceUri = new Uri(instanceUrlPicker.Text);
|
|
if (GoogleTranslationRequest.MatchesInstance(instanceUri)) tr = new GoogleTranslationRequest(
|
|
instanceUri,
|
|
(Language)sourceLanguagePicker.SelectedItem,
|
|
(Language)destinationLanguagePicker.SelectedItem,
|
|
sourceTextBox.Text
|
|
);
|
|
else tr = new LingvaTranslationRequest(
|
|
instanceUri,
|
|
(Language)sourceLanguagePicker.SelectedItem,
|
|
(Language)destinationLanguagePicker.SelectedItem,
|
|
sourceTextBox.Text
|
|
);
|
|
|
|
translator.RunWorkerAsync(tr);
|
|
}
|
|
|
|
private void translator_DoWork(object sender, System.ComponentModel.DoWorkEventArgs e) {
|
|
try {
|
|
e.Result = ((TranslationRequest)e.Argument).Run();
|
|
} catch (Exception ex) {
|
|
MessageBox.Show(
|
|
String.Format(Properties.Resources.GenericTranslationError, ex.ToString()),
|
|
Properties.Resources.GenericTranslationErrorTitle,
|
|
MessageBoxButtons.OK,
|
|
MessageBoxIcon.Error
|
|
);
|
|
}
|
|
}
|
|
|
|
private void translator_RunWorkerCompleted(object sender, System.ComponentModel.RunWorkerCompletedEventArgs e) {
|
|
mainTableLayoutPanel.Enabled = true;
|
|
|
|
// Null is returned when an error occurs
|
|
if (e.Result == null) return;
|
|
|
|
// Save an unknown host when the request was completed
|
|
if (!instanceUrlPicker.Items.Contains(instanceUrlPicker.Text)) {
|
|
instanceUrlPicker.Items.Add(instanceUrlPicker.Text);
|
|
instanceUrlPicker.SelectedItem = instanceUrlPicker.Text;
|
|
Properties.Settings.Default.KnownInstances.Add(instanceUrlPicker.Text);
|
|
}
|
|
|
|
destinationTextBox.Text = (string)e.Result;
|
|
}
|
|
}
|
|
}
|