Add initial UI elements for Directories tab of Settings window

This commit is contained in:
Peter Kirmeier 2022-11-01 00:57:08 +01:00
parent 417d769744
commit 56912e0927
2 changed files with 110 additions and 87 deletions

View file

@ -166,7 +166,49 @@
<TabItem Header="{u:Translate 'Directories'}"> <TabItem Header="{u:Translate 'Directories'}">
<ScrollViewer HorizontalScrollBarVisibility="Auto" VerticalScrollBarVisibility="Auto"> <ScrollViewer HorizontalScrollBarVisibility="Auto" VerticalScrollBarVisibility="Auto">
<StackPanel> <StackPanel>
<Label Content="fill me 4" Background="Red"/> <GroupBox Header="{u:Translate 'Add content of directory to root directory'}">
<StackPanel>
<CheckBox x:Name="checkBoxShowOnlyAsSearchResult" Content="{u:Translate 'Show only as search result'}"/>
<DockPanel LastChildFill="False">
<Button DockPanel.Dock="Left" Content="{u:Translate 'Add directory'}" Margin="3" MinWidth="76" Click="ButtonAddFolderToRootFolder_Click"/>
<Button DockPanel.Dock="Right" x:Name="buttonRemoveFolder" Content="{u:Translate 'Remove directory'}" Margin="3" MinWidth="76" Click="ButtonRemoveFolder_Click" IsEnabled="False"/>
</DockPanel>
<ListView x:Name="dataGridViewFolders" x:FieldModifier="private" MinHeight="90" Margin="6,0" d:ItemsSource="{d:SampleData ItemCount=3}" ScrollViewer.CanContentScroll="True" ScrollViewer.VerticalScrollBarVisibility="Auto" Background="{x:Null}" SelectionChanged="DataGridViewFolders_SelectionChanged">
<ListView.View>
<GridView>
<GridViewColumn DisplayMemberBinding="{Binding ColumnFolder}">
<GridViewColumn.Header>
<GridViewColumnHeader Content="{u:Translate 'Directory paths'}" />
</GridViewColumn.Header>
</GridViewColumn>
<GridViewColumn>
<GridViewColumn.Header>
<GridViewColumnHeader Content="{u:Translate 'Recursive'}" />
</GridViewColumn.Header>
<GridViewColumn.CellTemplate>
<DataTemplate>
<CheckBox IsChecked="{Binding ColumnRecursiveLevel}"/>
</DataTemplate>
</GridViewColumn.CellTemplate>
</GridViewColumn>
<GridViewColumn>
<GridViewColumn.Header>
<GridViewColumnHeader Content="{u:Translate 'Only Files'}" />
</GridViewColumn.Header>
<GridViewColumn.CellTemplate>
<DataTemplate>
<CheckBox IsChecked="{Binding ColumnOnlyFiles}"/>
</DataTemplate>
</GridViewColumn.CellTemplate>
</GridViewColumn>
</GridView>
</ListView.View>
</ListView>
<Button x:Name="buttonAddSampleStartMenuFolder" Content="xxx" Margin="3" MinWidth="76" Click="ButtonAddSampleStartMenuFolder_Click" HorizontalAlignment="Left" IsEnabled="False"/>
<CheckBox x:Name="checkBoxGenerateShortcutsToDrives" Content="{u:Translate 'Generate drive shortcuts on startup'}"/>
</StackPanel>
</GroupBox>
<Button Content="{u:Translate 'Default'}" Margin="3" MinWidth="76" Click="ButtonClearFolders_Click" HorizontalAlignment="Left"/>
</StackPanel> </StackPanel>
</ScrollViewer> </ScrollViewer>
</TabItem> </TabItem>

View file

@ -11,8 +11,10 @@ namespace SystemTrayMenu.UserInterface
using System.IO; using System.IO;
using System.Reflection; using System.Reflection;
using System.Windows; using System.Windows;
using System.Windows.Controls;
using System.Windows.Media.Imaging; using System.Windows.Media.Imaging;
using SystemTrayMenu.Properties; using SystemTrayMenu.Properties;
using SystemTrayMenu.UserInterface.FolderBrowseDialog;
using SystemTrayMenu.Utilities; using SystemTrayMenu.Utilities;
using Windows.ApplicationModel; using Windows.ApplicationModel;
@ -122,18 +124,9 @@ namespace SystemTrayMenu.UserInterface
groupBoxAutostart.Content = $"{(string)groupBoxAutostart.Content} ({Translator.GetText("Task Manager")})"; groupBoxAutostart.Content = $"{(string)groupBoxAutostart.Content} ({Translator.GetText("Task Manager")})";
} }
#if TODO buttonAddSampleStartMenuFolder.Content = Translator.GetText("Add sample directory 'Start Menu'"); // TODO: Find a way to escape this in XAML
groupBoxFoldersInRootFolder.Text = Translator.GetText("Add content of directory to root directory");
checkBoxShowOnlyAsSearchResult.Text = Translator.GetText("Show only as search result");
buttonAddFolderToRootFolder.Text = Translator.GetText("Add directory");
buttonRemoveFolder.Text = Translator.GetText("Remove directory");
ColumnFolder.HeaderText = Translator.GetText("Directory paths");
ColumnRecursiveLevel.HeaderText = Translator.GetText("Recursive");
ColumnOnlyFiles.HeaderText = Translator.GetText("Only Files");
buttonAddSampleStartMenuFolder.Text = Translator.GetText("Add sample directory 'Start Menu'");
buttonDefaultFolders.Text = Translator.GetText("Default");
checkBoxGenerateShortcutsToDrives.Text = Translator.GetText("Generate drive shortcuts on startup");
#if TODO
groupBoxStaysOpen.Text = Translator.GetText("Menu stays open"); groupBoxStaysOpen.Text = Translator.GetText("Menu stays open");
checkBoxStayOpenWhenItemClicked.Text = Translator.GetText("If an element was clicked"); checkBoxStayOpenWhenItemClicked.Text = Translator.GetText("If an element was clicked");
checkBoxStayOpenWhenFocusLost.Text = Translator.GetText("If the focus is lost and the mouse is still on the menu"); checkBoxStayOpenWhenFocusLost.Text = Translator.GetText("If the focus is lost and the mouse is still on the menu");
@ -406,8 +399,7 @@ namespace SystemTrayMenu.UserInterface
radioButtonSystemSettingsShowHiddenFiles.IsChecked = true; radioButtonSystemSettingsShowHiddenFiles.IsChecked = true;
} }
#if TODO checkBoxShowOnlyAsSearchResult.IsChecked = Settings.Default.ShowOnlyAsSearchResult;
checkBoxShowOnlyAsSearchResult.Checked = Settings.Default.ShowOnlyAsSearchResult;
try try
{ {
foreach (string pathAndRecursivString in Settings.Default.PathsAddToMainMenu.Split(@"|")) foreach (string pathAndRecursivString in Settings.Default.PathsAddToMainMenu.Split(@"|"))
@ -420,7 +412,7 @@ namespace SystemTrayMenu.UserInterface
string pathAddToMainMenu = pathAndRecursivString.Split("recursiv:")[0].Trim(); string pathAddToMainMenu = pathAndRecursivString.Split("recursiv:")[0].Trim();
bool recursive = pathAndRecursivString.Split("recursiv:")[1].StartsWith("True"); bool recursive = pathAndRecursivString.Split("recursiv:")[1].StartsWith("True");
bool onlyFiles = pathAndRecursivString.Split("onlyFiles:")[1].StartsWith("True"); bool onlyFiles = pathAndRecursivString.Split("onlyFiles:")[1].StartsWith("True");
dataGridViewFolders.Rows.Add(pathAddToMainMenu, recursive, onlyFiles); dataGridViewFolders.Items.Add(new ListViewItemData(pathAddToMainMenu, recursive, onlyFiles));
} }
} }
catch (Exception ex) catch (Exception ex)
@ -428,8 +420,9 @@ namespace SystemTrayMenu.UserInterface
Log.Warn("PathsAddToMainMenu", ex); Log.Warn("PathsAddToMainMenu", ex);
} }
checkBoxGenerateShortcutsToDrives.Checked = Settings.Default.GenerateShortcutsToDrives; checkBoxGenerateShortcutsToDrives.IsChecked = Settings.Default.GenerateShortcutsToDrives;
#if TODO
checkBoxStayOpenWhenItemClicked.Checked = Settings.Default.StaysOpenWhenItemClicked; checkBoxStayOpenWhenItemClicked.Checked = Settings.Default.StaysOpenWhenItemClicked;
checkBoxStayOpenWhenFocusLost.Checked = Settings.Default.StaysOpenWhenFocusLost; checkBoxStayOpenWhenFocusLost.Checked = Settings.Default.StaysOpenWhenFocusLost;
@ -748,7 +741,6 @@ namespace SystemTrayMenu.UserInterface
private void SettingsForm_Load(object sender, EventArgs e) private void SettingsForm_Load(object sender, EventArgs e)
{ {
AdjustControlMultilineIfNecessary(checkBoxStayOpenWhenFocusLost); AdjustControlMultilineIfNecessary(checkBoxStayOpenWhenFocusLost);
dataGridViewFolders.ClearSelection();
} }
#endif #endif
@ -888,19 +880,19 @@ namespace SystemTrayMenu.UserInterface
Settings.Default.AlwaysShowHiddenFiles = radioButtonAlwaysShowHiddenFiles.IsChecked ?? false; Settings.Default.AlwaysShowHiddenFiles = radioButtonAlwaysShowHiddenFiles.IsChecked ?? false;
Settings.Default.NeverShowHiddenFiles = radioButtonNeverShowHiddenFiles.IsChecked ?? false; Settings.Default.NeverShowHiddenFiles = radioButtonNeverShowHiddenFiles.IsChecked ?? false;
#if TODO Settings.Default.ShowOnlyAsSearchResult = checkBoxShowOnlyAsSearchResult.IsChecked ?? false;
Settings.Default.ShowOnlyAsSearchResult = checkBoxShowOnlyAsSearchResult.Checked;
Settings.Default.PathsAddToMainMenu = string.Empty; string pathsAddToMainMenu = string.Empty;
foreach (DataGridViewRow row in dataGridViewFolders.Rows) foreach (ListViewItemData row in dataGridViewFolders.Items)
{ {
string pathAddToMainMenu = row.Cells[0].Value.ToString(); pathsAddToMainMenu += $"{row.ColumnFolder} recursiv:{row.ColumnRecursiveLevel} onlyFiles:{row.ColumnOnlyFiles}|";
bool recursiv = (bool)row.Cells[1].Value;
bool onlyFiles = (bool)row.Cells[2].Value;
Settings.Default.PathsAddToMainMenu += $"{pathAddToMainMenu} recursiv:{recursiv} onlyFiles:{onlyFiles}|";
} }
Settings.Default.GenerateShortcutsToDrives = checkBoxGenerateShortcutsToDrives.Checked; Settings.Default.PathsAddToMainMenu = pathsAddToMainMenu;
Settings.Default.GenerateShortcutsToDrives = checkBoxGenerateShortcutsToDrives.IsChecked ?? false;
#if TODO
Settings.Default.StaysOpenWhenItemClicked = checkBoxStayOpenWhenItemClicked.Checked; Settings.Default.StaysOpenWhenItemClicked = checkBoxStayOpenWhenItemClicked.Checked;
Settings.Default.StaysOpenWhenFocusLost = checkBoxStayOpenWhenFocusLost.Checked; Settings.Default.StaysOpenWhenFocusLost = checkBoxStayOpenWhenFocusLost.Checked;
Settings.Default.TimeUntilCloses = (int)numericUpDownTimeUntilClose.Value; Settings.Default.TimeUntilCloses = (int)numericUpDownTimeUntilClose.Value;
@ -1077,105 +1069,75 @@ namespace SystemTrayMenu.UserInterface
textBoxIcoFolder.Text = Settings.Default.PathIcoDirectory; textBoxIcoFolder.Text = Settings.Default.PathIcoDirectory;
} }
#if TODO private void ButtonAddSampleStartMenuFolder_Click(object sender, RoutedEventArgs e)
private void ButtonAddSampleStartMenuFolder_Click(object sender, EventArgs e)
{ {
dataGridViewFolders.Rows.Clear(); // dataGridViewFolders.Rows.Clear(); // TODO: This line must be removed in version 1, right?
string folderPathCommonStartMenu = Environment.GetFolderPath(Environment.SpecialFolder.CommonStartMenu); string folderPathCommonStartMenu = Environment.GetFolderPath(Environment.SpecialFolder.CommonStartMenu);
dataGridViewFolders.Rows.Add(folderPathCommonStartMenu, true, true); dataGridViewFolders.Items.Add(new ListViewItemData(folderPathCommonStartMenu, true, true));
dataGridViewFolders.ClearSelection(); EnableButtonAddStartMenu();
} }
private void ButtonClearFolders_Click(object sender, EventArgs e) private void ButtonClearFolders_Click(object sender, RoutedEventArgs e)
{ {
checkBoxShowOnlyAsSearchResult.Checked = false; checkBoxShowOnlyAsSearchResult.IsChecked = false;
dataGridViewFolders.Rows.Clear(); dataGridViewFolders.Items.Clear();
checkBoxGenerateShortcutsToDrives.Checked = false; EnableButtonAddStartMenu();
checkBoxGenerateShortcutsToDrives.IsChecked = false;
} }
private void ButtonAddFolderToRootFolder_Click(object sender, EventArgs e) private void ButtonAddFolderToRootFolder_Click(object sender, RoutedEventArgs e)
{ {
using FolderDialog dialog = new(); using FolderDialog dialog = new();
dialog.InitialFolder = Config.Path; dialog.InitialFolder = Config.Path;
if (dialog.ShowDialog() == DialogResult.OK) if (dialog.ShowDialog() == FormsExtensions.DialogResult.OK)
{
dataGridViewFolders.Rows.Add(dialog.Folder, false, true);
}
dataGridViewFolders.ClearSelection();
}
private void ButtonRemoveFolder_Click(object sender, EventArgs e)
{
int selectedRowCount = dataGridViewFolders.Rows.GetRowCount(DataGridViewElementStates.Selected);
if (selectedRowCount > 0)
{
for (int i = 0; i < selectedRowCount; i++)
{
dataGridViewFolders.Rows.RemoveAt(dataGridViewFolders.SelectedRows[0].Index);
}
}
dataGridViewFolders.ClearSelection();
}
private void DataGridViewFolders_SelectionChanged(object sender, EventArgs e)
{
buttonRemoveFolder.Enabled = dataGridViewFolders.SelectedRows.Count > 0;
}
private void DataGridViewFolders_MouseClick(object sender, MouseEventArgs e)
{
if (dataGridViewFolders.HitTest(e.X, e.Y).RowIndex < 0)
{
dataGridViewFolders.ClearSelection();
}
}
private void DataGridViewFolders_CellValidating(object sender, DataGridViewCellValidatingEventArgs e)
{
if (e.ColumnIndex == 0)
{
dataGridViewFolders.CancelEdit();
}
}
private void DataGridViewFolders_RowsRemoved(object sender, DataGridViewRowsRemovedEventArgs e)
{ {
dataGridViewFolders.Items.Add(new ListViewItemData(dialog.Folder, false, true));
EnableButtonAddStartMenu(); EnableButtonAddStartMenu();
} }
private void DataGridViewFolders_RowsAdded(object sender, DataGridViewRowsAddedEventArgs e) dataGridViewFolders.SelectedItem = null;
{
EnableButtonAddStartMenu();
} }
private void DataGridViewFolders_CurrentCellDirtyStateChanged(object sender, EventArgs e) private void ButtonRemoveFolder_Click(object sender, RoutedEventArgs e)
{ {
if (dataGridViewFolders.SelectedItems.Count > 0)
{
Array items = Array.CreateInstance(typeof(object), dataGridViewFolders.SelectedItems.Count);
dataGridViewFolders.SelectedItems.CopyTo(items, 0);
foreach (object item in items)
{
dataGridViewFolders.Items.Remove(item);
}
EnableButtonAddStartMenu(); EnableButtonAddStartMenu();
} }
}
private void DataGridViewFolders_SelectionChanged(object sender, SelectionChangedEventArgs e)
{
buttonRemoveFolder.IsEnabled = dataGridViewFolders.SelectedItems.Count > 0;
}
private void EnableButtonAddStartMenu() private void EnableButtonAddStartMenu()
{ {
bool doesStartMenuFolderExist = false; bool doesStartMenuFolderExist = false;
foreach (DataGridViewRow row in dataGridViewFolders.Rows) foreach (ListViewItemData row in dataGridViewFolders.Items)
{ {
string folderPathCommonStartMenu = Environment.GetFolderPath(Environment.SpecialFolder.CommonStartMenu); string folderPathCommonStartMenu = Environment.GetFolderPath(Environment.SpecialFolder.CommonStartMenu);
string pathAddToMainMenu = row.Cells[0].Value.ToString();
bool recursiv = (bool)row.Cells[1].EditedFormattedValue; // TODO: Check: Is RecursiveLevel and OnlyFiles really important to be the StartMenu folder entry? (Remove in version 1?)
bool onlyFiles = (bool)row.Cells[2].EditedFormattedValue; if (row.ColumnFolder == folderPathCommonStartMenu)
if (folderPathCommonStartMenu == pathAddToMainMenu &&
recursiv == true &&
onlyFiles == true)
{ {
doesStartMenuFolderExist = true; doesStartMenuFolderExist = true;
break;
} }
} }
buttonAddSampleStartMenuFolder.Enabled = !doesStartMenuFolderExist; buttonAddSampleStartMenuFolder.IsEnabled = !doesStartMenuFolderExist;
} }
#endif
private void ButtonSizeAndLocationDefault_Click(object sender, RoutedEventArgs e) private void ButtonSizeAndLocationDefault_Click(object sender, RoutedEventArgs e)
{ {
numericUpDownSizeInPercent.Value = 100; numericUpDownSizeInPercent.Value = 100;
@ -1426,5 +1388,24 @@ namespace SystemTrayMenu.UserInterface
{ {
numericUpDownOverlappingOffsetPixels.IsEnabled = false; numericUpDownOverlappingOffsetPixels.IsEnabled = false;
} }
/// <summary>
/// Type for ListView items.
/// </summary>
private class ListViewItemData
{
public ListViewItemData(string folder, bool recursiveLevel, bool onlyFiles)
{
ColumnFolder = folder;
ColumnRecursiveLevel = recursiveLevel;
ColumnOnlyFiles = onlyFiles;
}
public string ColumnFolder { get; set; }
public bool ColumnRecursiveLevel { get; set; }
public bool ColumnOnlyFiles { get; set; }
}
} }
} }