This commit is contained in:
mika-n 2020-01-01 17:28:50 +02:00
commit 7c3b4668d1
18 changed files with 758 additions and 62 deletions

View File

@ -425,8 +425,7 @@ namespace DS4Windows
[DS4Controls.SwipeLeft] = "Swipe Left", [DS4Controls.SwipeLeft] = "Swipe Left",
[DS4Controls.SwipeRight] = "Swipe Right", [DS4Controls.SwipeRight] = "Swipe Right",
[DS4Controls.SwipeUp] = "Swipe Up", [DS4Controls.SwipeUp] = "Swipe Up",
[DS4Controls.SwipeUp] = "Swipe Up", [DS4Controls.SwipeDown] = "Swipe Down",
[DS4Controls.SwipeDown] = "None",
}; };
public static Dictionary<DS4Controls, int> macroDS4Values = new Dictionary<DS4Controls, int>() public static Dictionary<DS4Controls, int> macroDS4Values = new Dictionary<DS4Controls, int>()

View File

@ -301,7 +301,10 @@ Suspend support not enabled.", true);
Dispatcher.BeginInvoke((Action)(() => Dispatcher.BeginInvoke((Action)(() =>
{ {
int count = logListView.Items.Count; int count = logListView.Items.Count;
logListView.ScrollIntoView(logvm.LogItems[count > 0 ? count-1 : 0]); if (count > 0)
{
logListView.ScrollIntoView(logvm.LogItems[count - 1]);
}
})); }));
} }
} }

View File

@ -57,16 +57,16 @@
<Button Content="Top Touch" x:Name="topTouchConBtn" Canvas.Left="157" Canvas.Top="46" Width="125" Height="23" Style="{StaticResource NoBGHoverBtn}" Click="HoverConBtn_Click" MouseEnter="ContBtn_MouseEnter" MouseLeave="ContBtn_MouseLeave" /> <Button Content="Top Touch" x:Name="topTouchConBtn" Canvas.Left="157" Canvas.Top="46" Width="125" Height="23" Style="{StaticResource NoBGHoverBtn}" Click="HoverConBtn_Click" MouseEnter="ContBtn_MouseEnter" MouseLeave="ContBtn_MouseLeave" />
<Button Content="L3" x:Name="l3ConBtn" Canvas.Left="138" Canvas.Top="147" Width="42" Height="42" Style="{StaticResource NoBGHoverBtn}" Click="HoverConBtn_Click" MouseEnter="ContBtn_MouseEnter" MouseLeave="ContBtn_MouseLeave" /> <Button Content="L3" x:Name="l3ConBtn" Canvas.Left="138" Canvas.Top="147" Width="42" Height="42" Style="{StaticResource NoBGHoverBtn}" Click="HoverConBtn_Click" MouseEnter="ContBtn_MouseEnter" MouseLeave="ContBtn_MouseLeave" />
<Button Content="LSU" x:Name="lsuConBtn" Canvas.Left="150" Canvas.Top="138" Width="17" Height="15" Style="{StaticResource NoBGHoverBtn}" Click="HoverConBtn_Click" MouseEnter="ContBtn_MouseEnter" MouseLeave="ContBtn_MouseLeave" /> <Button Content="LSU" x:Name="lsuConBtn" Canvas.Left="150" Canvas.Top="140" Width="17" Height="15" Style="{StaticResource NoBGHoverBtn}" Click="HoverConBtn_Click" MouseEnter="ContBtn_MouseEnter" MouseLeave="ContBtn_MouseLeave" />
<Button Content="LSR" x:Name="lsrConBtn" Canvas.Left="174" Canvas.Top="162" Width="17" Height="15" Style="{StaticResource NoBGHoverBtn}" Click="HoverConBtn_Click" MouseEnter="ContBtn_MouseEnter" MouseLeave="ContBtn_MouseLeave" /> <Button Content="LSR" x:Name="lsrConBtn" Canvas.Left="172" Canvas.Top="162" Width="17" Height="15" Style="{StaticResource NoBGHoverBtn}" Click="HoverConBtn_Click" MouseEnter="ContBtn_MouseEnter" MouseLeave="ContBtn_MouseLeave" />
<Button Content="LSD" x:Name="lsdConBtn" Canvas.Left="150" Canvas.Top="182" Width="17" Height="15" Style="{StaticResource NoBGHoverBtn}" Click="HoverConBtn_Click" MouseEnter="ContBtn_MouseEnter" MouseLeave="ContBtn_MouseLeave" /> <Button Content="LSD" x:Name="lsdConBtn" Canvas.Left="150" Canvas.Top="180" Width="17" Height="15" Style="{StaticResource NoBGHoverBtn}" Click="HoverConBtn_Click" MouseEnter="ContBtn_MouseEnter" MouseLeave="ContBtn_MouseLeave" />
<Button Content="LSL" x:Name="lslConBtn" Canvas.Left="124" Canvas.Top="162" Width="17" Height="15" Style="{StaticResource NoBGHoverBtn}" Click="HoverConBtn_Click" MouseEnter="ContBtn_MouseEnter" MouseLeave="ContBtn_MouseLeave" /> <Button Content="LSL" x:Name="lslConBtn" Canvas.Left="126" Canvas.Top="162" Width="17" Height="15" Style="{StaticResource NoBGHoverBtn}" Click="HoverConBtn_Click" MouseEnter="ContBtn_MouseEnter" MouseLeave="ContBtn_MouseLeave" />
<Button Content="R3" x:Name="r3ConBtn" Canvas.Left="262" Canvas.Top="149" Width="42" Height="42" Style="{StaticResource NoBGHoverBtn}" Click="HoverConBtn_Click" MouseEnter="ContBtn_MouseEnter" MouseLeave="ContBtn_MouseLeave" /> <Button Content="R3" x:Name="r3ConBtn" Canvas.Left="262" Canvas.Top="149" Width="42" Height="42" Style="{StaticResource NoBGHoverBtn}" Click="HoverConBtn_Click" MouseEnter="ContBtn_MouseEnter" MouseLeave="ContBtn_MouseLeave" />
<Button Content="RSU" x:Name="rsuConBtn" Canvas.Left="275" Canvas.Top="138" Width="17" Height="15" Style="{StaticResource NoBGHoverBtn}" Click="HoverConBtn_Click" MouseEnter="ContBtn_MouseEnter" MouseLeave="ContBtn_MouseLeave" /> <Button Content="RSU" x:Name="rsuConBtn" Canvas.Left="275" Canvas.Top="142" Width="17" Height="15" Style="{StaticResource NoBGHoverBtn}" Click="HoverConBtn_Click" MouseEnter="ContBtn_MouseEnter" MouseLeave="ContBtn_MouseLeave" />
<Button Content="RSR" x:Name="rsrConBtn" Canvas.Left="302" Canvas.Top="162" Width="17" Height="15" Style="{StaticResource NoBGHoverBtn}" Click="HoverConBtn_Click" MouseEnter="ContBtn_MouseEnter" MouseLeave="ContBtn_MouseLeave" /> <Button Content="RSR" x:Name="rsrConBtn" Canvas.Left="298" Canvas.Top="162" Width="17" Height="15" Style="{StaticResource NoBGHoverBtn}" Click="HoverConBtn_Click" MouseEnter="ContBtn_MouseEnter" MouseLeave="ContBtn_MouseLeave" />
<Button Content="RSD" x:Name="rsdConBtn" Canvas.Left="275" Canvas.Top="183" Width="17" Height="15" Style="{StaticResource NoBGHoverBtn}" Click="HoverConBtn_Click" MouseEnter="ContBtn_MouseEnter" MouseLeave="ContBtn_MouseLeave" /> <Button Content="RSD" x:Name="rsdConBtn" Canvas.Left="275" Canvas.Top="180" Width="17" Height="15" Style="{StaticResource NoBGHoverBtn}" Click="HoverConBtn_Click" MouseEnter="ContBtn_MouseEnter" MouseLeave="ContBtn_MouseLeave" />
<Button Content="RSL" x:Name="rslConBtn" Canvas.Left="244" Canvas.Top="162" Width="17" Height="15" Style="{StaticResource NoBGHoverBtn}" Click="HoverConBtn_Click" MouseEnter="ContBtn_MouseEnter" MouseLeave="ContBtn_MouseLeave" /> <Button Content="RSL" x:Name="rslConBtn" Canvas.Left="248" Canvas.Top="162" Width="17" Height="15" Style="{StaticResource NoBGHoverBtn}" Click="HoverConBtn_Click" MouseEnter="ContBtn_MouseEnter" MouseLeave="ContBtn_MouseLeave" />
<Button Content="Up" x:Name="upConBtn" Canvas.Left="88" Canvas.Top="74" Width="20" Height="35" Style="{StaticResource NoBGHoverBtn}" Click="HoverConBtn_Click" MouseEnter="ContBtn_MouseEnter" MouseLeave="ContBtn_MouseLeave" /> <Button Content="Up" x:Name="upConBtn" Canvas.Left="88" Canvas.Top="74" Width="20" Height="35" Style="{StaticResource NoBGHoverBtn}" Click="HoverConBtn_Click" MouseEnter="ContBtn_MouseEnter" MouseLeave="ContBtn_MouseLeave" />
<Button Content="Right" x:Name="rightConBtn" Canvas.Left="103" Canvas.Top="103" Width="35" Height="20" Style="{StaticResource NoBGHoverBtn}" Click="HoverConBtn_Click" MouseEnter="ContBtn_MouseEnter" MouseLeave="ContBtn_MouseLeave" /> <Button Content="Right" x:Name="rightConBtn" Canvas.Left="103" Canvas.Top="103" Width="35" Height="20" Style="{StaticResource NoBGHoverBtn}" Click="HoverConBtn_Click" MouseEnter="ContBtn_MouseEnter" MouseLeave="ContBtn_MouseLeave" />
@ -118,7 +118,7 @@
<RadioButton x:Name="useTouchControlsRadio" Content="Use As Controls" GroupName="tpMode" Click="UseTouchControlsRadio_Click" Margin="10,0,0,0" /> <RadioButton x:Name="useTouchControlsRadio" Content="Use As Controls" GroupName="tpMode" Click="UseTouchControlsRadio_Click" Margin="10,0,0,0" />
</StackPanel> </StackPanel>
<StackPanel x:Name="useMousePanel" Margin="0,10,0,0"> <StackPanel x:Name="useMousePanel" Margin="0,10,0,0" Visibility="Visible">
<StackPanel Orientation="Horizontal"> <StackPanel Orientation="Horizontal">
<StackPanel Orientation="Horizontal" Height="20"> <StackPanel Orientation="Horizontal" Height="20">
<CheckBox Content="{lex:Loc TouchSlide}" IsChecked="{Binding TouchSenExists}" /> <CheckBox Content="{lex:Loc TouchSlide}" IsChecked="{Binding TouchSenExists}" />
@ -206,19 +206,19 @@
<StackPanel x:Name="useControlsPanel" Margin="0,10,0,0" Visibility="Collapsed"> <StackPanel x:Name="useControlsPanel" Margin="0,10,0,0" Visibility="Collapsed">
<StackPanel Orientation="Horizontal"> <StackPanel Orientation="Horizontal">
<Button x:Name="swipeUpBtn" Content="Swipe Up" Width="70" /> <Button x:Name="swipeUpBtn" Content="Swipe Up" Width="70" Tag="36" Click="SwipeControlsButton_Click" />
<Label x:Name="swipeUpLb" Content="{Binding MappingName,FallbackValue=Unassigned}" Margin="10,0,0,0"/> <Label x:Name="swipeUpLb" Content="{Binding MappingName,FallbackValue=Unassigned}" Margin="10,0,0,0"/>
</StackPanel> </StackPanel>
<StackPanel Orientation="Horizontal" Margin="0,8,0,0"> <StackPanel Orientation="Horizontal" Margin="0,8,0,0">
<Button x:Name="swipeDownBtn" Content="Swipe Down" Width="70" /> <Button x:Name="swipeDownBtn" Content="Swipe Down" Width="70" Tag="37" Click="SwipeControlsButton_Click" />
<Label x:Name="swipeDownLb" Content="{Binding MappingName,FallbackValue=Unassigned}" Margin="10,0,0,0"/> <Label x:Name="swipeDownLb" Content="{Binding MappingName,FallbackValue=Unassigned}" Margin="10,0,0,0"/>
</StackPanel> </StackPanel>
<StackPanel Orientation="Horizontal" Margin="0,8,0,0"> <StackPanel Orientation="Horizontal" Margin="0,8,0,0">
<Button x:Name="swipeLeftBtn" Content="Swipe Left" Width="70" /> <Button x:Name="swipeLeftBtn" Content="Swipe Left" Width="70" Tag="34" Click="SwipeControlsButton_Click" />
<Label x:Name="swipeLeftLb" Content="{Binding MappingName,FallbackValue=Unassigned}" Margin="10,0,0,0"/> <Label x:Name="swipeLeftLb" Content="{Binding MappingName,FallbackValue=Unassigned}" Margin="10,0,0,0"/>
</StackPanel> </StackPanel>
<StackPanel Orientation="Horizontal" Margin="0,8,0,0"> <StackPanel Orientation="Horizontal" Margin="0,8,0,0">
<Button x:Name="swipeRightBtn" Content="Swipe Right" Width="70" /> <Button x:Name="swipeRightBtn" Content="Swipe Right" Width="70" Tag="35" Click="SwipeControlsButton_Click" />
<Label x:Name="swipeRightLb" Content="{Binding MappingName,FallbackValue=Unassigned}" Margin="10,0,0,0"/> <Label x:Name="swipeRightLb" Content="{Binding MappingName,FallbackValue=Unassigned}" Margin="10,0,0,0"/>
</StackPanel> </StackPanel>
</StackPanel> </StackPanel>

View File

@ -1255,5 +1255,17 @@ namespace DS4WinWPF.DS4Forms
mpControl.UpdateMappingName(); mpControl.UpdateMappingName();
UpdateHighlightLabel(mpControl); UpdateHighlightLabel(mpControl);
} }
private void SwipeControlsButton_Click(object sender, RoutedEventArgs e)
{
Button btn = sender as Button;
DS4Controls control = (DS4Controls)Convert.ToInt32(btn.Tag);
MappedControl mpControl = mappingListVM.ControlMap[control];
BindingWindow window = new BindingWindow(deviceNum, mpControl.Setting);
window.Owner = App.Current.MainWindow;
window.ShowDialog();
mpControl.UpdateMappingName();
UpdateHighlightLabel(mpControl);
}
} }
} }

View File

@ -10,7 +10,7 @@
lex:ResxLocalizationProvider.DefaultDictionary="Strings" lex:ResxLocalizationProvider.DefaultDictionary="Strings"
xmlns:local="clr-namespace:DS4WinWPF.DS4Forms" xmlns:local="clr-namespace:DS4WinWPF.DS4Forms"
mc:Ignorable="d" mc:Ignorable="d"
d:DesignHeight="350" d:DesignWidth="800" KeyDown="UserControl_KeyDown" KeyUp="UserControl_KeyUp" MouseDown="UserControl_MouseDown" MouseUp="UserControl_MouseUp" > d:DesignHeight="350" d:DesignWidth="800" KeyDown="UserControl_KeyDown" KeyUp="UserControl_KeyUp" MouseDown="UserControl_MouseDown" MouseUp="UserControl_MouseUp" Focusable="True" >
<UserControl.Resources> <UserControl.Resources>
<DataTemplate x:Key="DisplayTemplate"> <DataTemplate x:Key="DisplayTemplate">
<StackPanel Orientation="Horizontal"> <StackPanel Orientation="Horizontal">

View File

@ -62,6 +62,23 @@ namespace DS4WinWPF.DS4Forms
private void SetupLateEvents() private void SetupLateEvents()
{ {
macroListBox.SelectionChanged += MacroListBox_SelectionChanged; macroListBox.SelectionChanged += MacroListBox_SelectionChanged;
recordBoxVM.MacroSteps.CollectionChanged += MacroSteps_CollectionChanged;
}
private void MacroSteps_CollectionChanged(object sender,
System.Collections.Specialized.NotifyCollectionChangedEventArgs e)
{
if (e.Action == System.Collections.Specialized.NotifyCollectionChangedAction.Add)
{
Dispatcher.BeginInvoke((Action)(() =>
{
int count = recordBoxVM.MacroSteps.Count;
if (count > 0)
{
macroListBox.ScrollIntoView(recordBoxVM.MacroSteps[count - 1]);
}
}));
}
} }
private void MacroListBox_SelectionChanged(object sender, SelectionChangedEventArgs e) private void MacroListBox_SelectionChanged(object sender, SelectionChangedEventArgs e)
@ -271,12 +288,14 @@ namespace DS4WinWPF.DS4Forms
recordBoxVM.KeysdownMap.Add(value, true); recordBoxVM.KeysdownMap.Add(value, true);
} }
e.Handled = true;
//Console.WriteLine(e.Key); //Console.WriteLine(e.Key);
//Console.WriteLine(e.SystemKey); //Console.WriteLine(e.SystemKey);
} }
else if (e.Key == Key.Delete && recordBoxVM.MacroStepIndex >= 0) else if (e.Key == Key.Delete && recordBoxVM.MacroStepIndex >= 0)
{ {
recordBoxVM.MacroSteps.RemoveAt(recordBoxVM.MacroStepIndex); recordBoxVM.MacroSteps.RemoveAt(recordBoxVM.MacroStepIndex);
e.Handled = true;
} }
} }
@ -294,6 +313,7 @@ namespace DS4WinWPF.DS4Forms
recordBoxVM.KeysdownMap.Remove(value); recordBoxVM.KeysdownMap.Remove(value);
} }
e.Handled = true;
//Console.WriteLine(e.Key); //Console.WriteLine(e.Key);
//Console.WriteLine(e.SystemKey); //Console.WriteLine(e.SystemKey);
} }
@ -499,6 +519,7 @@ namespace DS4WinWPF.DS4Forms
DS4Windows.MacroStep.StepType.ActDown, DS4Windows.MacroStep.StepOutput.Button); DS4Windows.MacroStep.StepType.ActDown, DS4Windows.MacroStep.StepOutput.Button);
recordBoxVM.AddMacroStep(step); recordBoxVM.AddMacroStep(step);
recordBoxVM.KeysdownMap.Add(value, true); recordBoxVM.KeysdownMap.Add(value, true);
e.Handled = true;
} }
} }
@ -521,6 +542,7 @@ namespace DS4WinWPF.DS4Forms
DS4Windows.MacroStep.StepType.ActUp, DS4Windows.MacroStep.StepOutput.Button); DS4Windows.MacroStep.StepType.ActUp, DS4Windows.MacroStep.StepOutput.Button);
recordBoxVM.AddMacroStep(step); recordBoxVM.AddMacroStep(step);
recordBoxVM.KeysdownMap.Remove(value); recordBoxVM.KeysdownMap.Remove(value);
e.Handled = true;
} }
} }
} }

View File

@ -124,28 +124,44 @@ namespace DS4WinWPF.DS4Forms
private void LoadAction(DS4Windows.SpecialAction specialAction) private void LoadAction(DS4Windows.SpecialAction specialAction)
{ {
specialActVM.LoadAction(specialAction); specialActVM.LoadAction(specialAction);
foreach(string control in specialActVM.ControlTriggerList) string[] tempTriggers = specialActVM.ControlTriggerList.ToArray();
foreach (string control in tempTriggers)
{ {
bool found = false;
foreach (CheckBox box in triggerBoxes) foreach (CheckBox box in triggerBoxes)
{ {
if (box.Tag.ToString() == control) if (box.Tag.ToString() == control)
{ {
box.IsChecked = true; box.IsChecked = true;
found = true;
break; break;
} }
} }
if (!found)
{
specialActVM.ControlTriggerList.Remove(control);
}
} }
foreach (string control in specialActVM.ControlUnloadTriggerList) tempTriggers = specialActVM.ControlUnloadTriggerList.ToArray();
foreach (string control in tempTriggers)
{ {
bool found = false;
foreach (CheckBox box in unloadTriggerBoxes) foreach (CheckBox box in unloadTriggerBoxes)
{ {
if (box.Tag.ToString() == control) if (box.Tag.ToString() == control)
{ {
box.IsChecked = true; box.IsChecked = true;
found = true;
break; break;
} }
} }
if (!found)
{
specialActVM.ControlUnloadTriggerList.Remove(control);
}
} }
switch (specialAction.typeID) switch (specialAction.typeID)

View File

@ -68,10 +68,13 @@ namespace DS4WinWPF.DS4Forms.ViewModels
if (action.ucontrols != null) if (action.ucontrols != null)
{ {
foreach (string s in action.ucontrols.Split('/')) foreach (string s in action.ucontrols.Split('/'))
{
if (s != "AutomaticUntrigger")
{ {
controlUnloadTriggerList.Add(s); controlUnloadTriggerList.Add(s);
} }
} }
}
actionName = action.name; actionName = action.name;
for(int i = 0; i < typeAssoc.Length; i++) for(int i = 0; i < typeAssoc.Length; i++)

View File

@ -63,6 +63,11 @@ namespace DS4WinWPF.DS4Forms.ViewModels.SpecialActions
if (profileIndex > 0) if (profileIndex > 0)
{ {
string profilename = profileList.ProfileListCol[profileIndex - 1].Name; string profilename = profileList.ProfileListCol[profileIndex - 1].Name;
if (action.ucontrols == null)
{
action.ucontrols = string.Empty;
}
Global.SaveAction(action.name, action.controls, 3, profilename, edit, Global.SaveAction(action.name, action.controls, 3, profilename, edit,
action.ucontrols + action.ucontrols +
(autoUntrigger ? (action.ucontrols.Length > 0 ? "/" : "") + "AutomaticUntrigger" : "")); (autoUntrigger ? (action.ucontrols.Length > 0 ? "/" : "") + "AutomaticUntrigger" : ""));

View File

@ -18,6 +18,11 @@ namespace DS4WinWPF.DS4Forms.ViewModels
public static string trayTitle = $"DS4Windows v{Global.exeversion}"; public static string trayTitle = $"DS4Windows v{Global.exeversion}";
private ContextMenu contextMenu; private ContextMenu contextMenu;
private MenuItem changeServiceItem; private MenuItem changeServiceItem;
private MenuItem openItem;
private MenuItem minimizeItem;
private MenuItem openProgramItem;
private MenuItem closeItem;
public string TooltipText { get => tooltipText; public string TooltipText { get => tooltipText;
set set
@ -69,6 +74,15 @@ namespace DS4WinWPF.DS4Forms.ViewModels
changeServiceItem.Click += ChangeControlServiceItem_Click; changeServiceItem.Click += ChangeControlServiceItem_Click;
changeServiceItem.IsEnabled = false; changeServiceItem.IsEnabled = false;
openItem = new MenuItem() { Header = "Open" };
openItem.Click += OpenMenuItem_Click;
minimizeItem = new MenuItem() { Header = "Minimize" };
minimizeItem.Click += MinimizeMenuItem_Click;
openProgramItem = new MenuItem() { Header = "Open Program Folder" };
openProgramItem.Click += OpenProgramFolderItem_Click;
closeItem = new MenuItem() { Header = "Exit (Middle Mouse)" }; ;
closeItem.Click += ExitMenuItem_Click;
PopulateControllerList(); PopulateControllerList();
PopulateToolText(); PopulateToolText();
PopulateContextMenu(); PopulateContextMenu();
@ -187,25 +201,16 @@ namespace DS4WinWPF.DS4Forms.ViewModels
idx++; idx++;
} }
if (idx == 0)
{
item.IsEnabled = false;
}
_colLocker.ExitReadLock(); _colLocker.ExitReadLock();
items.Add(item); items.Add(item);
items.Add(new Separator()); items.Add(new Separator());
item = changeServiceItem; PopulateStaticItems();
items.Add(item);
item = new MenuItem() { Header = "Open" };
item.Click += OpenMenuItem_Click;
items.Add(item);
item = new MenuItem() { Header = "Minimize" };
item.Click += MinimizeMenuItem_Click;
items.Add(item);
item = new MenuItem() { Header = "Open Program Folder" };
item.Click += OpenProgramFolderItem_Click;
items.Add(item);
items.Add(new Separator());
item = new MenuItem() { Header = "Exit (Middle Mouse)" };
item.Click += ExitMenuItem_Click;
items.Add(item);
} }
private void ChangeControlServiceItem_Click(object sender, System.Windows.RoutedEventArgs e) private void ChangeControlServiceItem_Click(object sender, System.Windows.RoutedEventArgs e)
@ -370,23 +375,21 @@ namespace DS4WinWPF.DS4Forms.ViewModels
//contextMenu.Items.Clear(); //contextMenu.Items.Clear();
} }
private void PopulateStaticItems()
{
ItemCollection items = contextMenu.Items;
items.Add(changeServiceItem);
items.Add(openItem);
items.Add(minimizeItem);
items.Add(openProgramItem);
items.Add(new Separator());
items.Add(closeItem);
}
public void ClearContextMenu() public void ClearContextMenu()
{ {
contextMenu.Items.Clear(); contextMenu.Items.Clear();
ItemCollection items = contextMenu.Items; PopulateStaticItems();
MenuItem item;
item = changeServiceItem;
items.Add(item);
item = new MenuItem() { Header = "Open" };
item.Click += OpenMenuItem_Click;
items.Add(item);
item = new MenuItem() { Header = "Minimize" };
item.Click += MinimizeMenuItem_Click;
items.Add(item);
items.Add(new Separator());
item = new MenuItem() { Header = "Exit (Middle Mouse)" };
item.Click += ExitMenuItem_Click;
items.Add(item);
} }
private void ExitMenuItem_Click(object sender, System.Windows.RoutedEventArgs e) private void ExitMenuItem_Click(object sender, System.Windows.RoutedEventArgs e)

View File

@ -14,7 +14,7 @@ namespace DS4WinWPF.DS4Forms
public partial class WelcomeDialog : Window public partial class WelcomeDialog : Window
{ {
private const string InstallerDL = private const string InstallerDL =
"https://github.com/ViGEm/ViGEmBus/releases/download/v1.16.112/ViGEmBus_Setup_1.16.115.exe"; "https://github.com/ViGEm/ViGEmBus/releases/download/setup-v1.16.115/ViGEmBus_Setup_1.16.115.exe";
private const string InstFileName = "ViGEmBus_Setup_1.16.115.exe"; private const string InstFileName = "ViGEmBus_Setup_1.16.115.exe";
private string tempInstFileName; private string tempInstFileName;
@ -87,18 +87,27 @@ namespace DS4WinWPF.DS4Forms
{ {
File.Move(tempInstFileName, filename); File.Move(tempInstFileName, filename);
} }
success = false; // Reset for later check
if (File.Exists(DS4Windows.Global.exedirpath + $"\\{InstFileName}")) if (File.Exists(DS4Windows.Global.exedirpath + $"\\{InstFileName}"))
{ {
//vigemInstallBtn.Content = Properties.Resources.OpeningInstaller; //vigemInstallBtn.Content = Properties.Resources.OpeningInstaller;
monitorProc = Process.Start(DS4Windows.Global.exedirpath + $"\\{InstFileName}"); monitorProc = Process.Start(DS4Windows.Global.exedirpath + $"\\{InstFileName}");
vigemInstallBtn.Content = Properties.Resources.Installing; vigemInstallBtn.Content = Properties.Resources.Installing;
success = true;
} }
if (success)
{
monitorTimer = new NonFormTimer(); monitorTimer = new NonFormTimer();
monitorTimer.Elapsed += ViGEmInstallTimer_Tick; monitorTimer.Elapsed += ViGEmInstallTimer_Tick;
monitorTimer.Start(); monitorTimer.Start();
} }
else
{
vigemInstallBtn.Content = Properties.Resources.InstallFailed;
}
}
private void ViGEmInstallTimer_Tick(object sender, System.Timers.ElapsedEventArgs e) private void ViGEmInstallTimer_Tick(object sender, System.Timers.ElapsedEventArgs e)
{ {

View File

@ -366,10 +366,18 @@
<Generator>PublicResXFileCodeGenerator</Generator> <Generator>PublicResXFileCodeGenerator</Generator>
<LastGenOutput>Strings.Designer.cs</LastGenOutput> <LastGenOutput>Strings.Designer.cs</LastGenOutput>
</EmbeddedResource> </EmbeddedResource>
<EmbeddedResource Include="Translations\Strings.es.resx">
<SubType>Designer</SubType>
<DependentUpon>Strings.resx</DependentUpon>
</EmbeddedResource>
<EmbeddedResource Include="Translations\Strings.ja.resx"> <EmbeddedResource Include="Translations\Strings.ja.resx">
<SubType>Designer</SubType> <SubType>Designer</SubType>
<DependentUpon>Strings.resx</DependentUpon> <DependentUpon>Strings.resx</DependentUpon>
</EmbeddedResource> </EmbeddedResource>
<EmbeddedResource Include="Translations\Strings.pt-BR.resx">
<SubType>Designer</SubType>
<DependentUpon>Strings.resx</DependentUpon>
</EmbeddedResource>
<EmbeddedResource Include="Translations\Strings.ru.resx"> <EmbeddedResource Include="Translations\Strings.ru.resx">
<SubType>Designer</SubType> <SubType>Designer</SubType>
<DependentUpon>Strings.resx</DependentUpon> <DependentUpon>Strings.resx</DependentUpon>
@ -474,7 +482,7 @@
<PostBuildEvent>rem Copy compiled l18n assemblies to alt folder <PostBuildEvent>rem Copy compiled l18n assemblies to alt folder
GOTO END GOTO END
if not exist $(TargetDir)Lang mkdir $(TargetDir)Lang if not exist $(TargetDir)Lang mkdir $(TargetDir)Lang
set langs=ja ru set langs=es ja pt-BR ru
for %25%25l in (%25langs%25) do ( for %25%25l in (%25langs%25) do (
xcopy $(TargetDir)%25%25l $(TargetDir)Lang\%25%25l\ /s /y xcopy $(TargetDir)%25%25l $(TargetDir)Lang\%25%25l\ /s /y

View File

@ -51,7 +51,7 @@ using System.Windows;
// You can specify all the values or you can default the Build and Revision Numbers // You can specify all the values or you can default the Build and Revision Numbers
// by using the '*' as shown below: // by using the '*' as shown below:
// [assembly: AssemblyVersion("1.0.*")] // [assembly: AssemblyVersion("1.0.*")]
[assembly: AssemblyVersion("2.0.1")] [assembly: AssemblyVersion("2.0.3")]
[assembly: AssemblyFileVersion("2.0.1")] [assembly: AssemblyFileVersion("2.0.3")]
[assembly: NeutralResourcesLanguage("")] [assembly: NeutralResourcesLanguage("")]
[assembly: Guid("a52b5b20-d9ee-4f32-8518-307fa14aa0c6")] [assembly: Guid("a52b5b20-d9ee-4f32-8518-307fa14aa0c6")]

View File

@ -0,0 +1,308 @@
<?xml version="1.0" encoding="utf-8"?>
<root>
<!--
Microsoft ResX Schema
Version 2.0
The primary goals of this format is to allow a simple XML format
that is mostly human readable. The generation and parsing of the
various data types are done through the TypeConverter classes
associated with the data types.
Example:
... ado.net/XML headers & schema ...
<resheader name="resmimetype">text/microsoft-resx</resheader>
<resheader name="version">2.0</resheader>
<resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
<resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
<data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
<data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
<data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
<value>[base64 mime encoded serialized .NET Framework object]</value>
</data>
<data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
<value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
<comment>This is a comment</comment>
</data>
There are any number of "resheader" rows that contain simple
name/value pairs.
Each data row contains a name, and value. The row also contains a
type or mimetype. Type corresponds to a .NET class that support
text/value conversion through the TypeConverter architecture.
Classes that don't support this are serialized and stored with the
mimetype set.
The mimetype is used for serialized objects, and tells the
ResXResourceReader how to depersist the object. This is currently not
extensible. For a given mimetype the value must be set accordingly:
Note - application/x-microsoft.net.object.binary.base64 is the format
that the ResXResourceWriter will generate, however the reader can
read any of the formats listed below.
mimetype: application/x-microsoft.net.object.binary.base64
value : The object must be serialized with
: System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
: and then encoded with base64 encoding.
mimetype: application/x-microsoft.net.object.soap.base64
value : The object must be serialized with
: System.Runtime.Serialization.Formatters.Soap.SoapFormatter
: and then encoded with base64 encoding.
mimetype: application/x-microsoft.net.object.bytearray.base64
value : The object must be serialized into a byte array
: using a System.ComponentModel.TypeConverter
: and then encoded with base64 encoding.
-->
<xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
<xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
<xsd:element name="root" msdata:IsDataSet="true">
<xsd:complexType>
<xsd:choice maxOccurs="unbounded">
<xsd:element name="metadata">
<xsd:complexType>
<xsd:sequence>
<xsd:element name="value" type="xsd:string" minOccurs="0" />
</xsd:sequence>
<xsd:attribute name="name" use="required" type="xsd:string" />
<xsd:attribute name="type" type="xsd:string" />
<xsd:attribute name="mimetype" type="xsd:string" />
<xsd:attribute ref="xml:space" />
</xsd:complexType>
</xsd:element>
<xsd:element name="assembly">
<xsd:complexType>
<xsd:attribute name="alias" type="xsd:string" />
<xsd:attribute name="name" type="xsd:string" />
</xsd:complexType>
</xsd:element>
<xsd:element name="data">
<xsd:complexType>
<xsd:sequence>
<xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
<xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
</xsd:sequence>
<xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
<xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
<xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
<xsd:attribute ref="xml:space" />
</xsd:complexType>
</xsd:element>
<xsd:element name="resheader">
<xsd:complexType>
<xsd:sequence>
<xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
</xsd:sequence>
<xsd:attribute name="name" type="xsd:string" use="required" />
</xsd:complexType>
</xsd:element>
</xsd:choice>
</xsd:complexType>
</xsd:element>
</xsd:schema>
<resheader name="resmimetype">
<value>text/microsoft-resx</value>
</resheader>
<resheader name="version">
<value>2.0</value>
</resheader>
<resheader name="reader">
<value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</resheader>
<resheader name="writer">
<value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</resheader>
<data name="Accel" xml:space="preserve">
<value>Acelerar</value>
</data>
<data name="Action" xml:space="preserve">
<value>Acción</value>
</data>
<data name="AddDirectory" xml:space="preserve">
<value>Añadir Directorio</value>
</data>
<data name="AddPrograms" xml:space="preserve">
<value>Añadir Programas</value>
</data>
<data name="AddStartMenuPrograms" xml:space="preserve">
<value>Añadir al Menú de Inicio de Programas</value>
</data>
<data name="AddSteamGames" xml:space="preserve">
<value>Añadir Juegos de Steam</value>
</data>
<data name="All" xml:space="preserve">
<value>Todo</value>
</data>
<data name="AutoProfiles" xml:space="preserve">
<value>Perfiles automáticos</value>
</data>
<data name="Battery" xml:space="preserve">
<value>Batería</value>
</data>
<data name="Browse" xml:space="preserve">
<value>Navegar</value>
</data>
<data name="BrowseOtherPrograms" xml:space="preserve">
<value>Navegar en Otros Programas</value>
</data>
<data name="Cancel" xml:space="preserve">
<value>Cancelar</value>
</data>
<data name="CheckUpdateNow" xml:space="preserve">
<value>Buscar Actualizaciones</value>
</data>
<data name="CheckUpdateStartup" xml:space="preserve">
<value>Buscar Actualizaciones de DS4Windows al Inicio</value>
</data>
<data name="Clear" xml:space="preserve">
<value>Vaciar</value>
</data>
<data name="CloseMinimizes" xml:space="preserve">
<value>Cerrar Minimizado</value>
</data>
<data name="Color" xml:space="preserve">
<value>Color</value>
</data>
<data name="Controller1Text" xml:space="preserve">
<value>Mando 1</value>
</data>
<data name="Controller2Text" xml:space="preserve">
<value>Mando 2</value>
</data>
<data name="Controller3Text" xml:space="preserve">
<value>Mando 3</value>
</data>
<data name="Controller4Text" xml:space="preserve">
<value>Mando 4</value>
</data>
<data name="Controllers" xml:space="preserve">
<value>Mandos</value>
</data>
<data name="ControlPanel" xml:space="preserve">
<value>Panel de Control</value>
</data>
<data name="Delete" xml:space="preserve">
<value>Eliminar</value>
</data>
<data name="DriverSetup" xml:space="preserve">
<value>Configuración del Mando/Driver</value>
</data>
<data name="Duplicate" xml:space="preserve">
<value>Duplicar</value>
</data>
<data name="Edit" xml:space="preserve">
<value>Editar</value>
</data>
<data name="EditAction" xml:space="preserve">
<value>Editar Acción</value>
</data>
<data name="Export" xml:space="preserve">
<value>Exportar</value>
</data>
<data name="Full" xml:space="preserve">
<value>Todo</value>
</data>
<data name="Gyro" xml:space="preserve">
<value>Gyro</value>
</data>
<data name="HideUnchecked" xml:space="preserve">
<value>Ocultar Desmarcado</value>
</data>
<data name="Import" xml:space="preserve">
<value>Importar</value>
</data>
<data name="LeftStick" xml:space="preserve">
<value>Stick Izquierdo</value>
</data>
<data name="Log" xml:space="preserve">
<value>Registro</value>
</data>
<data name="Name" xml:space="preserve">
<value>Nombre</value>
</data>
<data name="New" xml:space="preserve">
<value>Nuevo</value>
</data>
<data name="NewAction" xml:space="preserve">
<value>Nueva Acción</value>
</data>
<data name="NewProfile" xml:space="preserve">
<value>Nuevo Perfil</value>
</data>
<data name="None" xml:space="preserve">
<value>Ninguno</value>
</data>
<data name="Path" xml:space="preserve">
<value>Ruta</value>
</data>
<data name="Profile" xml:space="preserve">
<value>Perfil</value>
</data>
<data name="ProfileFolder" xml:space="preserve">
<value>Directorio del Perfil</value>
</data>
<data name="QuickCharge" xml:space="preserve">
<value>Cambio Rápido</value>
</data>
<data name="RecordText" xml:space="preserve">
<value>Guardar</value>
</data>
<data name="Remove" xml:space="preserve">
<value>Quitar</value>
</data>
<data name="RemoveAction" xml:space="preserve">
<value>Quitar Acción</value>
</data>
<data name="RightStick" xml:space="preserve">
<value>Stick Derecho</value>
</data>
<data name="Rumble" xml:space="preserve">
<value>Vibración</value>
</data>
<data name="RunAtStartup" xml:space="preserve">
<value>Ejecutar al Iniciar el Equipo</value>
</data>
<data name="Save" xml:space="preserve">
<value>Guardar</value>
</data>
<data name="SaveProfile" xml:space="preserve">
<value>Guardar</value>
</data>
<data name="Settings" xml:space="preserve">
<value>Opciones</value>
</data>
<data name="ShowNotifications" xml:space="preserve">
<value>Mostrar Notificaciones</value>
</data>
<data name="StartMinimized" xml:space="preserve">
<value>Iniciar Minimizado</value>
</data>
<data name="StartText" xml:space="preserve">
<value>Iniciar</value>
</data>
<data name="Status" xml:space="preserve">
<value>Estado</value>
</data>
<data name="StopText" xml:space="preserve">
<value>Detener</value>
</data>
<data name="TouchScroll" xml:space="preserve">
<value>Desplazar</value>
</data>
<data name="TouchSlide" xml:space="preserve">
<value>Deslizar</value>
</data>
<data name="TouchTap" xml:space="preserve">
<value>Pulsar</value>
</data>
<data name="Trigger" xml:space="preserve">
<value>Disparador</value>
</data>
<data name="WarningsOnly" xml:space="preserve">
<value>Solo Advertencias</value>
</data>
</root>

View File

@ -0,0 +1,309 @@
<?xml version="1.0" encoding="utf-8"?>
<root>
<!--
Microsoft ResX Schema
Version 2.0
The primary goals of this format is to allow a simple XML format
that is mostly human readable. The generation and parsing of the
various data types are done through the TypeConverter classes
associated with the data types.
Example:
... ado.net/XML headers & schema ...
<resheader name="resmimetype">text/microsoft-resx</resheader>
<resheader name="version">2.0</resheader>
<resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
<resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
<data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
<data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
<data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
<value>[base64 mime encoded serialized .NET Framework object]</value>
</data>
<data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
<value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
<comment>This is a comment</comment>
</data>
There are any number of "resheader" rows that contain simple
name/value pairs.
Each data row contains a name, and value. The row also contains a
type or mimetype. Type corresponds to a .NET class that support
text/value conversion through the TypeConverter architecture.
Classes that don't support this are serialized and stored with the
mimetype set.
The mimetype is used for serialized objects, and tells the
ResXResourceReader how to depersist the object. This is currently not
extensible. For a given mimetype the value must be set accordingly:
Note - application/x-microsoft.net.object.binary.base64 is the format
that the ResXResourceWriter will generate, however the reader can
read any of the formats listed below.
mimetype: application/x-microsoft.net.object.binary.base64
value : The object must be serialized with
: System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
: and then encoded with base64 encoding.
mimetype: application/x-microsoft.net.object.soap.base64
value : The object must be serialized with
: System.Runtime.Serialization.Formatters.Soap.SoapFormatter
: and then encoded with base64 encoding.
mimetype: application/x-microsoft.net.object.bytearray.base64
value : The object must be serialized into a byte array
: using a System.ComponentModel.TypeConverter
: and then encoded with base64 encoding.
-->
<xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
<xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
<xsd:element name="root" msdata:IsDataSet="true">
<xsd:complexType>
<xsd:choice maxOccurs="unbounded">
<xsd:element name="metadata">
<xsd:complexType>
<xsd:sequence>
<xsd:element name="value" type="xsd:string" minOccurs="0" />
</xsd:sequence>
<xsd:attribute name="name" use="required" type="xsd:string" />
<xsd:attribute name="type" type="xsd:string" />
<xsd:attribute name="mimetype" type="xsd:string" />
<xsd:attribute ref="xml:space" />
</xsd:complexType>
</xsd:element>
<xsd:element name="assembly">
<xsd:complexType>
<xsd:attribute name="alias" type="xsd:string" />
<xsd:attribute name="name" type="xsd:string" />
</xsd:complexType>
</xsd:element>
<xsd:element name="data">
<xsd:complexType>
<xsd:sequence>
<xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
<xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
</xsd:sequence>
<xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
<xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
<xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
<xsd:attribute ref="xml:space" />
</xsd:complexType>
</xsd:element>
<xsd:element name="resheader">
<xsd:complexType>
<xsd:sequence>
<xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
</xsd:sequence>
<xsd:attribute name="name" type="xsd:string" use="required" />
</xsd:complexType>
</xsd:element>
</xsd:choice>
</xsd:complexType>
</xsd:element>
</xsd:schema>
<resheader name="resmimetype">
<value>text/microsoft-resx</value>
</resheader>
<resheader name="version">
<value>2.0</value>
</resheader>
<resheader name="reader">
<value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</resheader>
<resheader name="writer">
<value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</resheader>
<data name="Accel" xml:space="preserve">
<value>Aceleração</value>
</data>
<data name="Action" xml:space="preserve">
<value>Ação</value>
</data>
<data name="AddDirectory" xml:space="preserve">
<value>Adicionar Diretório</value>
</data>
<data name="AddPrograms" xml:space="preserve">
<value>Adicionar Programas</value>
</data>
<data name="AddStartMenuPrograms" xml:space="preserve">
<value>Adicionar Programas do Menu de Inicialização</value>
</data>
<data name="AddSteamGames" xml:space="preserve">
<value>Adicionar Jogos da Steam</value>
</data>
<data name="All" xml:space="preserve">
<value>Todos</value>
</data>
<data name="AutoProfiles" xml:space="preserve">
<value>Perfis Automáticos</value>
</data>
<data name="Battery" xml:space="preserve">
<value>Bateria</value>
</data>
<data name="Browse" xml:space="preserve">
<value>Procurar</value>
</data>
<data name="BrowseOtherPrograms" xml:space="preserve">
<value>Procurar por Outros Programas</value>
</data>
<data name="Cancel" xml:space="preserve">
<value>Cancelar</value>
</data>
<data name="CheckUpdateNow" xml:space="preserve">
<value>Verificar Atualizações Agora</value>
</data>
<data name="CheckUpdateStartup" xml:space="preserve">
<value>Verificar Atualizações para DS4Windows na inicialização</value>
</data>
<data name="Clear" xml:space="preserve">
<value>Limpar</value>
</data>
<data name="CloseMinimizes" xml:space="preserve">
<value>Fechar Minimiza</value>
</data>
<data name="Color" xml:space="preserve">
<value>Cor</value>
</data>
<data name="Controller1Text" xml:space="preserve">
<value>Controle 1</value>
</data>
<data name="Controller2Text" xml:space="preserve">
<value>Controle 2</value>
</data>
<data name="Controller3Text" xml:space="preserve">
<value>Controle 3</value>
</data>
<data name="Controller4Text" xml:space="preserve">
<value>Controle 4</value>
</data>
<data name="Controllers" xml:space="preserve">
<value>Controles</value>
</data>
<data name="ControlPanel" xml:space="preserve">
<value>Painel de COntrole</value>
</data>
<data name="Delete" xml:space="preserve">
<value>Deletar</value>
</data>
<data name="DriverSetup" xml:space="preserve">
<value>Configuração Controle/Driver</value>
</data>
<data name="Duplicate" xml:space="preserve">
<value>Duplicar</value>
</data>
<data name="Edit" xml:space="preserve">
<value>Editar</value>
</data>
<data name="EditAction" xml:space="preserve">
<value>Editar Ação</value>
</data>
<data name="Export" xml:space="preserve">
<value>Exportar</value>
</data>
<data name="Full" xml:space="preserve">
<value>Cheio</value>
</data>
<data name="Gyro" xml:space="preserve">
<value>Giroscópio</value>
</data>
<data name="HideUnchecked" xml:space="preserve">
<value>Ocultar Desmarcados</value>
</data>
<data name="Import" xml:space="preserve">
<value>Importar</value>
</data>
<data name="LeftStick" xml:space="preserve">
<value>Controle Esquerdo</value>
</data>
<data name="Log" xml:space="preserve">
<value>Registro</value>
</data>
<data name="Name" xml:space="preserve">
<value>Nome</value>
</data>
<data name="New" xml:space="preserve">
<value>Novo</value>
</data>
<data name="NewAction" xml:space="preserve">
<value>Nova Ação</value>
</data>
<data name="NewProfile" xml:space="preserve">
<value>Novo Perfil</value>
</data>
<data name="None" xml:space="preserve">
<value>Nenhum</value>
</data>
<data name="Path" xml:space="preserve">
<value>Caminho</value>
</data>
<data name="Profile" xml:space="preserve">
<value>Perfil</value>
</data>
<data name="ProfileFolder" xml:space="preserve">
<value>Pasta de Perfil</value>
</data>
<data name="QuickCharge" xml:space="preserve">
<value>Carregamento Rápido</value>
</data>
<data name="RecordText" xml:space="preserve">
<value>Gravar</value>
</data>
<data name="Remove" xml:space="preserve">
<value>Remover</value>
</data>
<data name="RemoveAction" xml:space="preserve">
<value>Remover Ação</value>
</data>
<data name="RightStick" xml:space="preserve">
<value>Controle Direito</value>
</data>
<data name="Rumble" xml:space="preserve">
<value>Vibração</value>
</data>
<data name="RunAtStartup" xml:space="preserve">
<value>Executar na Inicialização</value>
</data>
<data name="Save" xml:space="preserve">
<value>Salvar</value>
</data>
<data name="SaveProfile" xml:space="preserve">
<value>Salvar</value>
</data>
<data name="Settings" xml:space="preserve">
<value>Configurações</value>
</data>
<data name="ShowNotifications" xml:space="preserve">
<value>Mostrar Notificações</value>
</data>
<data name="StartMinimized" xml:space="preserve">
<value>Iniciar Minimizado</value>
</data>
<data name="StartText" xml:space="preserve">
<value>Começar</value>
</data>
<data name="Status" xml:space="preserve">
<value>Status</value>
</data>
<data name="StopText" xml:space="preserve">
<value>Parar</value>
</data>
<data name="TouchScroll" xml:space="preserve">
<value>Rolagem</value>
</data>
<data name="TouchSlide" xml:space="preserve">
<value>Deslizar</value>
</data>
<data name="TouchTap" xml:space="preserve">
<value>Pressionar</value>
</data>
<data name="Trigger" xml:space="preserve">
<value>Gatilho</value>
</data>
<data name="WarningsOnly" xml:space="preserve">
<value>Apenas Avisos</value>
</data>
</root>

View File

@ -160,8 +160,7 @@
<value>Check for DS4Windows Updates at Startup</value> <value>Check for DS4Windows Updates at Startup</value>
</data> </data>
<data name="Clear" xml:space="preserve"> <data name="Clear" xml:space="preserve">
<value>Clear <value>Clear</value>
</value>
</data> </data>
<data name="CloseMinimizes" xml:space="preserve"> <data name="CloseMinimizes" xml:space="preserve">
<value>Close Minimizes</value> <value>Close Minimizes</value>
@ -293,8 +292,7 @@
<value>Stop</value> <value>Stop</value>
</data> </data>
<data name="TouchScroll" xml:space="preserve"> <data name="TouchScroll" xml:space="preserve">
<value>Scroll <value>Scroll</value>
</value>
</data> </data>
<data name="TouchSlide" xml:space="preserve"> <data name="TouchSlide" xml:space="preserve">
<value>Slide</value> <value>Slide</value>

View File

@ -1 +1 @@
2.0.1 2.0.3

View File

@ -11,3 +11,4 @@ Rajko Stojadinovic (rajkosto)
Sander0542 Sander0542
xrossb xrossb
Yuki-nyan Yuki-nyan
Leonardo Melati (Leomelati)