BD_empresa/MainWindow.xaml
Giuliano Paschoalino 2f1c28e482 Melhorias na usabilidade e interação com o GridView
Substituído duplo-clique por botão para abrir pastas,
adicionada nova coluna com ícone de pasta e handler
`OpenFolderButton_Click`. Células agora usam `TextBox`
readonly para permitir seleção de texto. Melhorado o
comando de cópia (`Ctrl+C`) com tratamento de exceções
e mensagens de erro detalhadas.

Refatorado hit-test para suportar a nova estrutura de
células e adicionado fallback para capturar texto de
outras fontes. Ajustado evento `KeyDown` para abrir
pastas com validações adicionais. Melhorias gerais na
robustez e mensagens informativas ao usuário.
2025-09-30 17:23:44 -03:00

212 lines
11 KiB
XML

<Window x:Class="BD_empresa.MainWindow"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
xmlns:local="clr-namespace:BD_empresa"
mc:Ignorable="d"
Loaded="Window_Loaded"
Title="Pesquisar Unidades" Height="650" Width="800">
<Grid>
<Grid.RowDefinitions>
<RowDefinition Height="Auto" />
<RowDefinition Height="Auto" />
<RowDefinition Height="Auto" />
<RowDefinition Height="*" />
</Grid.RowDefinitions>
<Grid.ColumnDefinitions>
<ColumnDefinition Width="*" />
</Grid.ColumnDefinitions>
<Grid Margin="10" Grid.Row="0" Grid.Column="0">
<Grid.ColumnDefinitions>
<ColumnDefinition Width="Auto" />
<ColumnDefinition Width="Auto" />
<ColumnDefinition Width="*" />
<ColumnDefinition Width="Auto" />
</Grid.ColumnDefinitions>
<Image Source="/marca.png"
Grid.Row="0" Grid.Column="0"
HorizontalAlignment="Left"
VerticalAlignment="Top"
Margin="10"
Height="50"
RenderOptions.BitmapScalingMode="HighQuality" />
<TextBlock Text="Pesquisar Empresa:" Margin="0,0,10,0" VerticalAlignment="Center" Grid.Column="1"/>
<Button Content="Recarregar dados do BD"
Margin="10"
Grid.Column="3"
Command="{Binding RefreshCommand}"
VerticalAlignment="Center" />
<TextBox
x:Name="txtEmpresaSearch"
Margin="0,0,10,0"
VerticalAlignment="Center"
Grid.Column="2"
Text="{Binding SearchEmpresaText, UpdateSourceTrigger=PropertyChanged}" />
</Grid>
<TextBlock Text="{Binding ErrorMessage}"
Foreground="Red"
Margin="10,5,10,0"
Grid.Row="1"
Visibility="{Binding ErrorMessage, Converter={StaticResource StringToVisibilityConverter}}" />
<Grid Grid.Row="2">
<Grid.RowDefinitions>
<RowDefinition Height="Auto" />
<RowDefinition Height="*" />
</Grid.RowDefinitions>
<TextBlock Text="Empresas:" Margin="10,0,10,0" FontWeight="Bold" Grid.Row="0"/>
<ListView ItemsSource="{Binding Clientes}" Height="213" Margin="10" SelectedItem="{Binding SelectedCliente, Mode=TwoWay}" Grid.Row="1">
<ListView.View>
<GridView>
<GridViewColumn Header="Gestão" DisplayMemberBinding="{Binding Gestao}" Width="70" />
<GridViewColumn Header="Cliente" DisplayMemberBinding="{Binding Cliente}" Width="400" />
</GridView>
</ListView.View>
</ListView>
<Grid Visibility="{Binding IsLoading, Converter={StaticResource BoolToVisibilityConverter}}"
Background="#80FFFFFF">
<ProgressBar IsIndeterminate="True" Height="30" Width="200" VerticalAlignment="Center" HorizontalAlignment="Center" />
</Grid>
</Grid>
<Grid Grid.Row="3">
<Grid.RowDefinitions>
<RowDefinition Height="Auto" />
<RowDefinition Height="Auto" />
<RowDefinition Height="*" />
</Grid.RowDefinitions>
<Grid Margin="10" Grid.Row="0" Grid.Column="0">
<Grid.ColumnDefinitions>
<ColumnDefinition Width="Auto" />
<ColumnDefinition Width="Auto" />
<ColumnDefinition Width="*" />
</Grid.ColumnDefinitions>
<TextBlock Text="Pesquisar Unidade:" Margin="0,0,10,0" Grid.Row="1"/>
<TextBox x:Name="txtUnidadeSearch"
Margin="0,0,10,0"
VerticalAlignment="Center"
Grid.Column="2"
Text="{Binding SearchUnidadeText, UpdateSourceTrigger=PropertyChanged}" />
</Grid>
<!-- texto atualizado: remove menção ao duplo-clique -->
<TextBlock Text="Unidades da empresa selecionada (Clique no ícone da pasta para abrir o caminho):" Margin="10,0,10,0" FontWeight="Bold" Grid.Row="1"/>
<ListView ItemsSource="{Binding UnidadesSelecionadas}" Margin="10" Grid.Row="2"
x:Name="UnidadesListView"
PreviewMouseLeftButtonDown="UnidadesListView_PreviewMouseLeftButtonDown"
PreviewMouseRightButtonDown="UnidadesListView_PreviewMouseRightButtonDown">
<ListView.InputBindings>
<KeyBinding Key="C" Modifiers="Control" Command="ApplicationCommands.Copy"/>
</ListView.InputBindings>
<ListView.CommandBindings>
<CommandBinding Command="ApplicationCommands.Copy" Executed="CopyCommand_Executed"/>
</ListView.CommandBindings>
<ListView.ContextMenu>
<ContextMenu>
<MenuItem Header="Copiar coluna" Click="CopyMenu_Click"/>
</ContextMenu>
</ListView.ContextMenu>
<ListView.View>
<GridView>
<!-- Coluna do ícone de pasta (pequena) -->
<GridViewColumn Width="36" Header="">
<GridViewColumn.CellTemplate>
<DataTemplate>
<!-- Botão com ícone (emoji) — simples e confiável.
Pode trocar por uma imagem se preferir (Image/Path). -->
<Button Click="OpenFolderButton_Click"
ToolTip="Abrir pasta da unidade"
Padding="2"
Margin="2"
BorderThickness="0"
Background="Transparent"
Cursor="Hand"
HorizontalAlignment="Center"
VerticalAlignment="Center"
DataContext="{Binding}">
<TextBlock Text="📁" FontSize="14" VerticalAlignment="Center" HorizontalAlignment="Center"/>
</Button>
</DataTemplate>
</GridViewColumn.CellTemplate>
</GridViewColumn>
<!-- Demais colunas (TextBox readonly para seleção) -->
<GridViewColumn Header="Unidade" Width="200">
<GridViewColumn.CellTemplate>
<DataTemplate>
<TextBox Text="{Binding Unidade}"
IsReadOnly="True"
BorderThickness="0"
Background="Transparent"
Padding="0"
VerticalAlignment="Center"
HorizontalAlignment="Left"
Cursor="IBeam"
Focusable="True"/>
</DataTemplate>
</GridViewColumn.CellTemplate>
</GridViewColumn>
<GridViewColumn Header="Instalação" Width="120">
<GridViewColumn.CellTemplate>
<DataTemplate>
<TextBox Text="{Binding Codigo_Instalacao}"
IsReadOnly="True"
BorderThickness="0"
Background="Transparent"
Padding="0"
VerticalAlignment="Center"
HorizontalAlignment="Left"
Cursor="IBeam"
Focusable="True"/>
</DataTemplate>
</GridViewColumn.CellTemplate>
</GridViewColumn>
<GridViewColumn Header="CNPJ" Width="120">
<GridViewColumn.CellTemplate>
<DataTemplate>
<TextBox Text="{Binding CNPJ_CPF}"
IsReadOnly="True"
BorderThickness="0"
Background="Transparent"
Padding="0"
VerticalAlignment="Center"
HorizontalAlignment="Left"
Cursor="IBeam"
Focusable="True"/>
</DataTemplate>
</GridViewColumn.CellTemplate>
</GridViewColumn>
<GridViewColumn Header="Razão Social" Width="Auto">
<GridViewColumn.CellTemplate>
<DataTemplate>
<TextBox Text="{Binding Razao_Social}"
IsReadOnly="True"
BorderThickness="0"
Background="Transparent"
Padding="0"
VerticalAlignment="Center"
HorizontalAlignment="Left"
Cursor="IBeam"
Focusable="True"/>
</DataTemplate>
</GridViewColumn.CellTemplate>
</GridViewColumn>
</GridView>
</ListView.View>
<ListView.ItemContainerStyle>
<Style TargetType="ListViewItem">
<!-- removido MouseDoubleClick -->
<!--<EventSetter Event="MouseDoubleClick" Handler="UnidadeListView_MouseDoubleClick" />-->
<EventSetter Event="KeyDown" Handler="UnidadeListView_EnterKeyDown" />
</Style>
</ListView.ItemContainerStyle>
</ListView>
</Grid>
</Grid>
</Window>