This commit is contained in:
Serge
2024-02-06 15:24:00 +01:00
23 changed files with 786 additions and 222 deletions

File diff suppressed because it is too large Load Diff

View File

@@ -55,6 +55,9 @@ namespace GHelper
buttonLightingZoneAll.Text = Properties.Strings.AuraZoneAll;
buttonLightingZoneDock.Text = Properties.Strings.AuraZoneDock;
buttonExport.Text = Properties.Strings.Export;
buttonImport.Text = Properties.Strings.Import;
InitTheme();
this.Text = mouse.GetDisplayName();
@@ -903,5 +906,64 @@ namespace GHelper
{
RefreshMouseData();
}
private void buttonImport_Click(object sender, EventArgs e)
{
byte[] data = null;
Thread t = new Thread(() =>
{
OpenFileDialog ofd = new OpenFileDialog();
ofd.Filter = "G-Helper Mouse Profile V1 (*.gmp1)|*.gmp1";
if (ofd.ShowDialog() == DialogResult.OK)
{
data = File.ReadAllBytes(ofd.FileName);
}
});
t.SetApartmentState(ApartmentState.STA);
t.Start();
t.Join();
if (data == null)
{
//User aborted loading
return;
}
if (!mouse.Import(data))
{
Logger.WriteLine("Failed to import mouse profile");
MessageBox.Show(Properties.Strings.MouseImportFailed);
}
else
{
if (!mouse.IsLightingZoned())
{
visibleZone = LightingZone.All;
}
RefreshMouseData();
}
}
private void buttonExport_Click(object sender, EventArgs e)
{
Thread t = new Thread(() =>
{
SaveFileDialog sfd = new SaveFileDialog();
sfd.Filter = "G-Helper Mouse Profile V1 (*.gmp1)|*.gmp1";
if (sfd.ShowDialog() == DialogResult.OK)
{
File.WriteAllBytes(sfd.FileName, mouse.Export());
}
});
t.SetApartmentState(ApartmentState.STA);
t.Start();
t.Join();
}
}
}

View File

@@ -1,9 +1,4 @@
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace GHelper.Peripherals
{
public enum PeripheralType
@@ -19,6 +14,10 @@ namespace GHelper.Peripherals
public int Battery { get; }
public bool Charging { get; }
public bool CanExport();
public byte[] Export();
public bool Import(byte[] blob);
public PeripheralType DeviceType();
public string GetDisplayName();

View File

@@ -97,6 +97,43 @@ namespace GHelper.Peripherals.Mouse
public AnimationDirection AnimationDirection { get; set; }
public byte[] Export()
{
byte[] data = new byte[0];
data = data
.Append((byte)LightingMode) // 1 Byte
.Concat(BitConverter.GetBytes(Brightness)) // 4 Bytes
.Concat(BitConverter.GetBytes(RGBColor.ToArgb())) // 4 Bytes
.Concat(BitConverter.GetBytes(RandomColor)) // 1 Byte
.Append((byte)AnimationSpeed) // 1 Byte
.Append((byte)AnimationDirection) // 1 Byte
.ToArray();
//12 bytes
return data;
}
public bool Import(byte[] blob)
{
if (blob.Length != 12)
{
//Data must be 12 bytes
return false;
}
LightingMode = (LightingMode)blob[0];
Brightness = BitConverter.ToInt32(blob, 1);
RGBColor = Color.FromArgb(BitConverter.ToInt32(blob, 5));
RandomColor = BitConverter.ToBoolean(blob, 9);
AnimationSpeed = (AnimationSpeed)blob[10];
AnimationDirection = (AnimationDirection)blob[11];
return true;
}
public override bool Equals(object? obj)
{
return obj is LightingSetting setting &&
@@ -135,6 +172,33 @@ namespace GHelper.Peripherals.Mouse
{
return "DPI: " + DPI + ", Color (" + Color.R + ", " + Color.G + ", " + Color.B + ")";
}
public byte[] Export()
{
byte[] data = new byte[0];
data = data
.Concat(BitConverter.GetBytes(DPI)) // 4 bytes
.Concat(BitConverter.GetBytes(Color.ToArgb())) // 4 bytes
.ToArray();
//8 bytes
return data;
}
public bool Import(byte[] blob)
{
if (blob.Length != 8)
{
//Data must be 8 bytes
return false;
}
DPI = BitConverter.ToUInt32(blob, 0);
Color = Color.FromArgb(BitConverter.ToInt32(blob, 4));
return true;
}
}
public abstract class AsusMouse : Device, IPeripheral
@@ -206,6 +270,165 @@ namespace GHelper.Peripherals.Mouse
this.reportId = reportId;
}
public bool CanExport()
{
return true;
}
//GMP1 = G-Helper Mouse Profile Version 1 :D
private static readonly byte[] MAGIC = { (byte)'G', (byte)'M', (byte)'P', (byte)'1' };
public byte[] Export()
{
byte[] data = new byte[0];
data = data
.Concat(MAGIC) // 4 Byte Magic
.ToArray();
foreach (LightingSetting ls in LightingSetting)
{
data = data.Concat(ls.Export()).ToArray(); // Append 12 bytes for each Lighting setting
}
data = data // = 6 Bytes
.Concat(BitConverter.GetBytes(LowBatteryWarning)) // 4 Bytes
.Append((byte)PowerOffSetting) // 1 Byte
.Append((byte)LiftOffDistance) // 1 Byte
.ToArray();
foreach (AsusMouseDPI dpi in DpiSettings)
{
data = data.Concat(dpi.Export()).ToArray(); // Append 8 bytes for each DPI Profile
}
data = data // = 13 Bytes
.Append((byte)PollingRate) // 1 Byte
.Concat(BitConverter.GetBytes(AngleSnapping)) // 1 Byte
.Concat(BitConverter.GetBytes(AngleAdjustmentDegrees)) // 2 Bytes
.Append((byte)Debounce) // 1 Byte
.Concat(BitConverter.GetBytes(Acceleration)) // 4 Bytes
.Concat(BitConverter.GetBytes(Deceleration)) // 4 Bytes
.ToArray();
//Total length: 4 + (LightingSetting.Length * 12) + 6 + (DPIProfileCount() + 8) + 13 Bytes
return data;
}
public bool Import(byte[] blob)
{
int expectedLength = 4 + (LightingSetting.Length * 12) + 6 + (DPIProfileCount() * 8) + 13;
if (blob.Length != expectedLength)
{
//Wrong lenght. Will not decode properly anyways.
Logger.WriteLine(GetDisplayName() + " Import: Failed to import due to wrong data Lenght. Expected: " + expectedLength + " Is: " + blob.Length);
return false;
}
if (blob[0] != MAGIC[0] || blob[1] != MAGIC[1] || blob[2] != MAGIC[2] || blob[3] != MAGIC[3])
{
//MAGIC does not match. Maybe some other profile or not even a profile at all.
Logger.WriteLine(GetDisplayName() + " Import: Failed to import. Magic Wrong: " + ByteArrayToString(blob));
return false;
}
int offset = 4; // skip MAGIC
for (int i = 0; i < LightingSetting.Length; ++i)
{
byte[] data = blob.Skip(offset).Take(12).ToArray(); // Read 12 Byte blocks
offset += 12;
if (!LightingSetting[i].Import(data))
{
Logger.WriteLine(GetDisplayName() + " Import: Failed to import LightingSetting. Data: " + ByteArrayToString(data));
return false;
}
}
LowBatteryWarning = BitConverter.ToInt32(blob, offset);
offset += 4;
PowerOffSetting = (PowerOffSetting)blob[offset++];
LiftOffDistance = (LiftOffDistance)blob[offset++];
for (int i = 0; i < DpiSettings.Length; ++i)
{
byte[] data = blob.Skip(offset).Take(8).ToArray(); // Read 8 Byte blocks
offset += 8;
if (!DpiSettings[i].Import(data))
{
Logger.WriteLine(GetDisplayName() + " Import: Failed to import DPISettings. Data: " + ByteArrayToString(data));
return false;
}
}
PollingRate = (PollingRate)blob[offset++];
AngleSnapping = BitConverter.ToBoolean(blob, offset++);
AngleAdjustmentDegrees = BitConverter.ToInt16(blob, offset);
offset += 2;
Acceleration = BitConverter.ToInt32(blob, offset);
offset += 4;
Deceleration = BitConverter.ToInt32(blob, offset);
offset += 4;
//Apply Settings to the mouse
if (HasBattery())
SetEnergySettings(LowBatteryWarning, PowerOffSetting);
SetPollingRate(PollingRate);
if (HasLiftOffSetting())
SetLiftOffDistance(LiftOffDistance);
if (HasAngleSnapping())
SetAngleSnapping(AngleSnapping);
if (HasAngleTuning())
SetAngleAdjustment(AngleAdjustmentDegrees);
if (HasAcceleration())
SetAcceleration(Acceleration);
if (HasDeceleration())
SetDeceleration(Deceleration);
if (HasRGB())
{
for (int i = 0; i < SupportedLightingZones().Length; ++i)
{
LightingZone lz = SupportedLightingZones()[i];
LightingSetting ls = LightingSettingForZone(lz);
SetLightingSetting(ls, lz);
}
}
for (int i = 0; i < DPIProfileCount(); ++i)
{
AsusMouseDPI dpi = DpiSettings[i];
SetDPIForProfile(dpi, i + 1);
}
return true;
}
public override bool Equals(object? obj)
{
if (obj is not AsusMouse item)

View File

@@ -790,6 +790,15 @@ namespace GHelper.Properties {
return ResourceManager.GetString("EnergySettings", resourceCulture);
}
}
/// <summary>
/// Looks up a localized string similar to Export.
/// </summary>
internal static string Export {
get {
return ResourceManager.GetString("Export", resourceCulture);
}
}
/// <summary>
/// Looks up a localized string similar to Extra.
@@ -1015,6 +1024,15 @@ namespace GHelper.Properties {
return ResourceManager.GetString("ImageRotation", resourceCulture);
}
}
/// <summary>
/// Looks up a localized string similar to Import.
/// </summary>
internal static string Import {
get {
return ResourceManager.GetString("Import", resourceCulture);
}
}
/// <summary>
/// Looks up a localized string similar to Key Bindings.
@@ -1276,6 +1294,15 @@ namespace GHelper.Properties {
return ResourceManager.GetString("MouseButtonResponse", resourceCulture);
}
}
/// <summary>
/// Looks up a localized string similar to Import failed. Selected file is not a valid mouse profile or corrutpted.
/// </summary>
internal static string MouseImportFailed {
get {
return ResourceManager.GetString("MouseImportFailed", resourceCulture);
}
}
/// <summary>
/// Looks up a localized string similar to Lift Off Distance.

View File

@@ -362,6 +362,9 @@ Trotzdem fortfahren?</value>
<data name="EnergySettings" xml:space="preserve">
<value>Energieeinstellungen</value>
</data>
<data name="Export" xml:space="preserve">
<value>Export Profile</value>
</data>
<data name="Extra" xml:space="preserve">
<value>Extra</value>
</data>
@@ -437,6 +440,9 @@ Trotzdem fortfahren?</value>
<data name="ImageRotation" xml:space="preserve">
<value>Image Rotation</value>
</data>
<data name="Import" xml:space="preserve">
<value>Import Profile</value>
</data>
<data name="KeyBindings" xml:space="preserve">
<value>Tastenbelegung</value>
</data>
@@ -524,6 +530,9 @@ Trotzdem fortfahren?</value>
<data name="MouseButtonResponse" xml:space="preserve">
<value>Tastenreaktionsgeschwindigkeit</value>
</data>
<data name="MouseImportFailed" xml:space="preserve">
<value>Import failed. Selected file is not a valid mouse profile or corrutpted.</value>
</data>
<data name="MouseLiftOffDistance" xml:space="preserve">
<value>Lift Off Distance</value>
</data>

View File

@@ -362,6 +362,9 @@
<data name="EnergySettings" xml:space="preserve">
<value>Ajustes de energía</value>
</data>
<data name="Export" xml:space="preserve">
<value>Export Profile</value>
</data>
<data name="Extra" xml:space="preserve">
<value>Adicional</value>
</data>
@@ -437,6 +440,9 @@
<data name="ImageRotation" xml:space="preserve">
<value>Image Rotation</value>
</data>
<data name="Import" xml:space="preserve">
<value>Import Profile</value>
</data>
<data name="KeyBindings" xml:space="preserve">
<value>Atajos de teclado</value>
</data>
@@ -524,6 +530,9 @@
<data name="MouseButtonResponse" xml:space="preserve">
<value>Respuesta del botón</value>
</data>
<data name="MouseImportFailed" xml:space="preserve">
<value>Import failed. Selected file is not a valid mouse profile or corrutpted.</value>
</data>
<data name="MouseLiftOffDistance" xml:space="preserve">
<value>Distancia de despegue (LOD)</value>
</data>

View File

@@ -362,6 +362,9 @@ Voulez-vous continuer ?</value>
<data name="EnergySettings" xml:space="preserve">
<value>Paramètres d'énergie</value>
</data>
<data name="Export" xml:space="preserve">
<value>Export Profile</value>
</data>
<data name="Extra" xml:space="preserve">
<value>+ d'options</value>
</data>
@@ -437,6 +440,9 @@ Voulez-vous continuer ?</value>
<data name="ImageRotation" xml:space="preserve">
<value>Image Rotation</value>
</data>
<data name="Import" xml:space="preserve">
<value>Import Profile</value>
</data>
<data name="KeyBindings" xml:space="preserve">
<value>Raccourcis clavier</value>
</data>
@@ -524,6 +530,9 @@ Voulez-vous continuer ?</value>
<data name="MouseButtonResponse" xml:space="preserve">
<value>Button Response</value>
</data>
<data name="MouseImportFailed" xml:space="preserve">
<value>Import failed. Selected file is not a valid mouse profile or corrutpted.</value>
</data>
<data name="MouseLiftOffDistance" xml:space="preserve">
<value>Lift Off Distance</value>
</data>

View File

@@ -362,6 +362,9 @@ Do you still want to continue?</value>
<data name="EnergySettings" xml:space="preserve">
<value>Energia beállítások</value>
</data>
<data name="Export" xml:space="preserve">
<value>Export Profile</value>
</data>
<data name="Extra" xml:space="preserve">
<value>Extra</value>
</data>
@@ -437,6 +440,9 @@ Do you still want to continue?</value>
<data name="ImageRotation" xml:space="preserve">
<value>Image Rotation</value>
</data>
<data name="Import" xml:space="preserve">
<value>Import Profile</value>
</data>
<data name="KeyBindings" xml:space="preserve">
<value>Gyorsbillentyűk</value>
</data>
@@ -524,6 +530,9 @@ Do you still want to continue?</value>
<data name="MouseButtonResponse" xml:space="preserve">
<value>Gomb funkciója</value>
</data>
<data name="MouseImportFailed" xml:space="preserve">
<value>Import failed. Selected file is not a valid mouse profile or corrutpted.</value>
</data>
<data name="MouseLiftOffDistance" xml:space="preserve">
<value>Lift Off Distance</value>
</data>

View File

@@ -362,6 +362,9 @@ Apakah Anda masih ingin melanjutkan?</value>
<data name="EnergySettings" xml:space="preserve">
<value>Pengaturan Energi</value>
</data>
<data name="Export" xml:space="preserve">
<value>Export Profile</value>
</data>
<data name="Extra" xml:space="preserve">
<value>Ekstra</value>
</data>
@@ -437,6 +440,9 @@ Apakah Anda masih ingin melanjutkan?</value>
<data name="ImageRotation" xml:space="preserve">
<value>Image Rotation</value>
</data>
<data name="Import" xml:space="preserve">
<value>Import Profile</value>
</data>
<data name="KeyBindings" xml:space="preserve">
<value>Pintasan Keyboard</value>
</data>
@@ -524,6 +530,9 @@ Apakah Anda masih ingin melanjutkan?</value>
<data name="MouseButtonResponse" xml:space="preserve">
<value>Respon Tombol</value>
</data>
<data name="MouseImportFailed" xml:space="preserve">
<value>Import failed. Selected file is not a valid mouse profile or corrutpted.</value>
</data>
<data name="MouseLiftOffDistance" xml:space="preserve">
<value>Jarak Angkat</value>
</data>

View File

@@ -362,6 +362,9 @@ Sei sicuro di voler continuare?</value>
<data name="EnergySettings" xml:space="preserve">
<value>Risparmio Energia</value>
</data>
<data name="Export" xml:space="preserve">
<value>Export Profile</value>
</data>
<data name="Extra" xml:space="preserve">
<value>Extra</value>
</data>
@@ -437,6 +440,9 @@ Sei sicuro di voler continuare?</value>
<data name="ImageRotation" xml:space="preserve">
<value>Image Rotation</value>
</data>
<data name="Import" xml:space="preserve">
<value>Import Profile</value>
</data>
<data name="KeyBindings" xml:space="preserve">
<value>Associazione Tasti</value>
</data>
@@ -524,6 +530,9 @@ Sei sicuro di voler continuare?</value>
<data name="MouseButtonResponse" xml:space="preserve">
<value>Risposta Tasto Mouse</value>
</data>
<data name="MouseImportFailed" xml:space="preserve">
<value>Import failed. Selected file is not a valid mouse profile or corrutpted.</value>
</data>
<data name="MouseLiftOffDistance" xml:space="preserve">
<value>Lift Off Distance</value>
</data>

View File

@@ -362,6 +362,9 @@
<data name="EnergySettings" xml:space="preserve">
<value>Energy Settings</value>
</data>
<data name="Export" xml:space="preserve">
<value>Export Profile</value>
</data>
<data name="Extra" xml:space="preserve">
<value>추가 설정</value>
</data>
@@ -437,6 +440,9 @@
<data name="ImageRotation" xml:space="preserve">
<value>Image Rotation</value>
</data>
<data name="Import" xml:space="preserve">
<value>Import Profile</value>
</data>
<data name="KeyBindings" xml:space="preserve">
<value>키 설정</value>
</data>
@@ -524,6 +530,9 @@
<data name="MouseButtonResponse" xml:space="preserve">
<value>버튼 응답</value>
</data>
<data name="MouseImportFailed" xml:space="preserve">
<value>Import failed. Selected file is not a valid mouse profile or corrutpted.</value>
</data>
<data name="MouseLiftOffDistance" xml:space="preserve">
<value>들어올림 거리</value>
</data>

View File

@@ -362,6 +362,9 @@ Vis tiek norite tęsti?</value>
<data name="EnergySettings" xml:space="preserve">
<value>Energijos nustatymai</value>
</data>
<data name="Export" xml:space="preserve">
<value>Export Profile</value>
</data>
<data name="Extra" xml:space="preserve">
<value>Išplėstiniai</value>
</data>
@@ -437,6 +440,9 @@ Vis tiek norite tęsti?</value>
<data name="ImageRotation" xml:space="preserve">
<value>Image Rotation</value>
</data>
<data name="Import" xml:space="preserve">
<value>Import Profile</value>
</data>
<data name="KeyBindings" xml:space="preserve">
<value>Klavišų priskyrimas</value>
</data>
@@ -524,6 +530,9 @@ Vis tiek norite tęsti?</value>
<data name="MouseButtonResponse" xml:space="preserve">
<value>Klavišo atsakas</value>
</data>
<data name="MouseImportFailed" xml:space="preserve">
<value>Import failed. Selected file is not a valid mouse profile or corrutpted.</value>
</data>
<data name="MouseLiftOffDistance" xml:space="preserve">
<value>Pakilimo atstumas</value>
</data>

View File

@@ -362,6 +362,9 @@ Nadal chcesz kontynuować?</value>
<data name="EnergySettings" xml:space="preserve">
<value>Ustawienia zasilania</value>
</data>
<data name="Export" xml:space="preserve">
<value>Export Profile</value>
</data>
<data name="Extra" xml:space="preserve">
<value>Ustawienia</value>
</data>
@@ -437,6 +440,9 @@ Nadal chcesz kontynuować?</value>
<data name="ImageRotation" xml:space="preserve">
<value>Image Rotation</value>
</data>
<data name="Import" xml:space="preserve">
<value>Import Profile</value>
</data>
<data name="KeyBindings" xml:space="preserve">
<value>Ustawienia klawiszy skrótów</value>
</data>
@@ -524,6 +530,9 @@ Nadal chcesz kontynuować?</value>
<data name="MouseButtonResponse" xml:space="preserve">
<value>Reakcja przycisków</value>
</data>
<data name="MouseImportFailed" xml:space="preserve">
<value>Import failed. Selected file is not a valid mouse profile or corrutpted.</value>
</data>
<data name="MouseLiftOffDistance" xml:space="preserve">
<value>Wysokość reakcji sensora</value>
</data>

View File

@@ -362,6 +362,9 @@ Do you still want to continue?</value>
<data name="EnergySettings" xml:space="preserve">
<value>Energy Settings</value>
</data>
<data name="Export" xml:space="preserve">
<value>Export Profile</value>
</data>
<data name="Extra" xml:space="preserve">
<value>Adicional</value>
</data>
@@ -437,6 +440,9 @@ Do you still want to continue?</value>
<data name="ImageRotation" xml:space="preserve">
<value>Image Rotation</value>
</data>
<data name="Import" xml:space="preserve">
<value>Import Profile</value>
</data>
<data name="KeyBindings" xml:space="preserve">
<value>Combinações de teclas</value>
</data>
@@ -524,6 +530,9 @@ Do you still want to continue?</value>
<data name="MouseButtonResponse" xml:space="preserve">
<value>Button Response</value>
</data>
<data name="MouseImportFailed" xml:space="preserve">
<value>Import failed. Selected file is not a valid mouse profile or corrutpted.</value>
</data>
<data name="MouseLiftOffDistance" xml:space="preserve">
<value>Lift Off Distance</value>
</data>

View File

@@ -362,6 +362,9 @@ Quer prosseguir?</value>
<data name="EnergySettings" xml:space="preserve">
<value>Configurações de Energia</value>
</data>
<data name="Export" xml:space="preserve">
<value>Export Profile</value>
</data>
<data name="Extra" xml:space="preserve">
<value>Adicional</value>
</data>
@@ -437,6 +440,9 @@ Quer prosseguir?</value>
<data name="ImageRotation" xml:space="preserve">
<value>Image Rotation</value>
</data>
<data name="Import" xml:space="preserve">
<value>Import Profile</value>
</data>
<data name="KeyBindings" xml:space="preserve">
<value>Combinações de teclas</value>
</data>
@@ -524,6 +530,9 @@ Quer prosseguir?</value>
<data name="MouseButtonResponse" xml:space="preserve">
<value>Button Response</value>
</data>
<data name="MouseImportFailed" xml:space="preserve">
<value>Import failed. Selected file is not a valid mouse profile or corrutpted.</value>
</data>
<data name="MouseLiftOffDistance" xml:space="preserve">
<value>Distância de Lift Off</value>
</data>

View File

@@ -362,6 +362,9 @@ Do you still want to continue?</value>
<data name="EnergySettings" xml:space="preserve">
<value>Energy Settings</value>
</data>
<data name="Export" xml:space="preserve">
<value>Export Profile</value>
</data>
<data name="Extra" xml:space="preserve">
<value>Extra</value>
</data>
@@ -437,6 +440,9 @@ Do you still want to continue?</value>
<data name="ImageRotation" xml:space="preserve">
<value>Image Rotation</value>
</data>
<data name="Import" xml:space="preserve">
<value>Import Profile</value>
</data>
<data name="KeyBindings" xml:space="preserve">
<value>Key Bindings</value>
</data>
@@ -524,6 +530,9 @@ Do you still want to continue?</value>
<data name="MouseButtonResponse" xml:space="preserve">
<value>Button Response</value>
</data>
<data name="MouseImportFailed" xml:space="preserve">
<value>Import failed. Selected file is not a valid mouse profile or corrutpted.</value>
</data>
<data name="MouseLiftOffDistance" xml:space="preserve">
<value>Lift Off Distance</value>
</data>

View File

@@ -362,6 +362,9 @@
<data name="EnergySettings" xml:space="preserve">
<value>Setări energie</value>
</data>
<data name="Export" xml:space="preserve">
<value>Export Profile</value>
</data>
<data name="Extra" xml:space="preserve">
<value>Extra</value>
</data>
@@ -437,6 +440,9 @@
<data name="ImageRotation" xml:space="preserve">
<value>Image Rotation</value>
</data>
<data name="Import" xml:space="preserve">
<value>Import Profile</value>
</data>
<data name="KeyBindings" xml:space="preserve">
<value>Asocieri taste</value>
</data>
@@ -524,6 +530,9 @@
<data name="MouseButtonResponse" xml:space="preserve">
<value>Răspuns buton</value>
</data>
<data name="MouseImportFailed" xml:space="preserve">
<value>Import failed. Selected file is not a valid mouse profile or corrutpted.</value>
</data>
<data name="MouseLiftOffDistance" xml:space="preserve">
<value>Distanța de oprire</value>
</data>

View File

@@ -362,6 +362,9 @@ Yine de devam etmek istiyor musunuz?</value>
<data name="EnergySettings" xml:space="preserve">
<value>Enerji Ayarları</value>
</data>
<data name="Export" xml:space="preserve">
<value>Export Profile</value>
</data>
<data name="Extra" xml:space="preserve">
<value>Ekstra</value>
</data>
@@ -437,6 +440,9 @@ Yine de devam etmek istiyor musunuz?</value>
<data name="ImageRotation" xml:space="preserve">
<value>Image Rotation</value>
</data>
<data name="Import" xml:space="preserve">
<value>Import Profile</value>
</data>
<data name="KeyBindings" xml:space="preserve">
<value>Tuş Atamaları</value>
</data>
@@ -524,6 +530,9 @@ Yine de devam etmek istiyor musunuz?</value>
<data name="MouseButtonResponse" xml:space="preserve">
<value>Tuş Tepkisi</value>
</data>
<data name="MouseImportFailed" xml:space="preserve">
<value>Import failed. Selected file is not a valid mouse profile or corrutpted.</value>
</data>
<data name="MouseLiftOffDistance" xml:space="preserve">
<value>Havalanma Mesafesi</value>
</data>

View File

@@ -362,6 +362,9 @@
<data name="EnergySettings" xml:space="preserve">
<value>Налаштування Енергії</value>
</data>
<data name="Export" xml:space="preserve">
<value>Export Profile</value>
</data>
<data name="Extra" xml:space="preserve">
<value>Додатково</value>
</data>
@@ -437,6 +440,9 @@
<data name="ImageRotation" xml:space="preserve">
<value>Поворот</value>
</data>
<data name="Import" xml:space="preserve">
<value>Import Profile</value>
</data>
<data name="KeyBindings" xml:space="preserve">
<value>Прив'язки клавіш</value>
</data>
@@ -524,6 +530,9 @@
<data name="MouseButtonResponse" xml:space="preserve">
<value>Відповідь Кнопок</value>
</data>
<data name="MouseImportFailed" xml:space="preserve">
<value>Import failed. Selected file is not a valid mouse profile or corrutpted.</value>
</data>
<data name="MouseLiftOffDistance" xml:space="preserve">
<value>Відстань підйому</value>
</data>

View File

@@ -362,6 +362,9 @@ Do you still want to continue?</value>
<data name="EnergySettings" xml:space="preserve">
<value>Energy Settings</value>
</data>
<data name="Export" xml:space="preserve">
<value>Export Profile</value>
</data>
<data name="Extra" xml:space="preserve">
<value>Thêm</value>
</data>
@@ -437,6 +440,9 @@ Do you still want to continue?</value>
<data name="ImageRotation" xml:space="preserve">
<value>Image Rotation</value>
</data>
<data name="Import" xml:space="preserve">
<value>Import Profile</value>
</data>
<data name="KeyBindings" xml:space="preserve">
<value>Tổ hợp phím</value>
</data>
@@ -524,6 +530,9 @@ Do you still want to continue?</value>
<data name="MouseButtonResponse" xml:space="preserve">
<value>Button Response</value>
</data>
<data name="MouseImportFailed" xml:space="preserve">
<value>Import failed. Selected file is not a valid mouse profile or corrutpted.</value>
</data>
<data name="MouseLiftOffDistance" xml:space="preserve">
<value>Lift Off Distance</value>
</data>

View File

@@ -362,6 +362,9 @@
<data name="EnergySettings" xml:space="preserve">
<value>电源设置</value>
</data>
<data name="Export" xml:space="preserve">
<value>Export Profile</value>
</data>
<data name="Extra" xml:space="preserve">
<value>更多</value>
</data>
@@ -437,6 +440,9 @@
<data name="ImageRotation" xml:space="preserve">
<value>Image Rotation</value>
</data>
<data name="Import" xml:space="preserve">
<value>Import Profile</value>
</data>
<data name="KeyBindings" xml:space="preserve">
<value>按键绑定</value>
</data>
@@ -524,6 +530,9 @@
<data name="MouseButtonResponse" xml:space="preserve">
<value>按键响应</value>
</data>
<data name="MouseImportFailed" xml:space="preserve">
<value>Import failed. Selected file is not a valid mouse profile or corrutpted.</value>
</data>
<data name="MouseLiftOffDistance" xml:space="preserve">
<value>响应高度</value>
</data>

View File

@@ -362,6 +362,9 @@
<data name="EnergySettings" xml:space="preserve">
<value>電源設定</value>
</data>
<data name="Export" xml:space="preserve">
<value>Export Profile</value>
</data>
<data name="Extra" xml:space="preserve">
<value>更多</value>
</data>
@@ -437,6 +440,9 @@
<data name="ImageRotation" xml:space="preserve">
<value>Image Rotation</value>
</data>
<data name="Import" xml:space="preserve">
<value>Import Profile</value>
</data>
<data name="KeyBindings" xml:space="preserve">
<value>按鍵綁定</value>
</data>
@@ -524,6 +530,9 @@
<data name="MouseButtonResponse" xml:space="preserve">
<value>按鍵回應</value>
</data>
<data name="MouseImportFailed" xml:space="preserve">
<value>Import failed. Selected file is not a valid mouse profile or corrutpted.</value>
</data>
<data name="MouseLiftOffDistance" xml:space="preserve">
<value>響應高度(LOD)</value>
</data>