Skip to content

Commit

Permalink
Merge pull request #80 from mohammadKarimi/73-implement-highlighterha…
Browse files Browse the repository at this point in the history
…ndler-inkeditingmodehandler-settingspanelhandler

Complete Implementation of Highlighter and setting panel
  • Loading branch information
mohammadKarimi authored Oct 28, 2024
2 parents b2963e4 + bcdc909 commit 3c0e4ce
Show file tree
Hide file tree
Showing 12 changed files with 64 additions and 35 deletions.
4 changes: 1 addition & 3 deletions src/Riter/App.xaml
Original file line number Diff line number Diff line change
Expand Up @@ -65,15 +65,13 @@
</StackPanel>
<ControlTemplate.Triggers>
<Trigger Property="IsMouseOver" Value="True">
<Setter TargetName="ButtonBorder" Property="Background" Value="#EEE"/>
<Setter TargetName="ButtonBorder" Property="Background" Value="#E5E5E5"/>
<Setter TargetName="ButtonBorder" Property="Cursor" Value="Hand"/>
</Trigger>

<Trigger Property="Tag" Value="Selected">
<Setter TargetName="ButtonBorder" Property="Background" Value="#EEE"/>

</Trigger>

</ControlTemplate.Triggers>
</ControlTemplate>
</Setter.Value>
Expand Down
2 changes: 2 additions & 0 deletions src/Riter/Core/Consts/ButtonNames.cs
Original file line number Diff line number Diff line change
Expand Up @@ -17,4 +17,6 @@ public class ButtonNames
public const string SettingButton = "SettingButton";

public const string HighlighterButton = "HighlighterButton";

public const string ChangeBrushSettingButton = "ChangeBrushSettingButton";
}
2 changes: 1 addition & 1 deletion src/Riter/Core/UI/SettingPanel.xaml
Original file line number Diff line number Diff line change
Expand Up @@ -9,7 +9,7 @@
mc:Ignorable="d"
Width="545" Height="340" DataContext="{Binding}" >
<Grid Margin="0,0,0,4">
<Border Padding="8,8" CornerRadius="12" Visibility="{Binding SettingPanelVisibility}" Background="#FFF" BorderBrush="#E5E5E5" BorderThickness="1">
<Border Padding="8,8" CornerRadius="12" Visibility="{Binding SettingPanelViewModel.SettingPanelVisibility}" Background="#FFF" BorderBrush="#E5E5E5" BorderThickness="1">
<Border.Effect>
<DropShadowEffect Opacity="0.2" ShadowDepth="3" BlurRadius="10" />
</Border.Effect>
Expand Down
16 changes: 8 additions & 8 deletions src/Riter/Core/UI/ToolBox.xaml
Original file line number Diff line number Diff line change
Expand Up @@ -27,7 +27,7 @@
<Style TargetType="Button" BasedOn="{StaticResource ToolboxButtonStyle}">
<Setter Property="Tag" Value="UnSelected"/>
<Style.Triggers>
<DataTrigger Binding="{Binding ButtonSelectedName}" Value="ReleasedButton">
<DataTrigger Binding="{Binding ButtonSelectedViewModel.ButtonSelectedName}" Value="ReleasedButton">
<Setter Property="Tag" Value="Selected"/>
</DataTrigger>
</Style.Triggers>
Expand All @@ -42,21 +42,21 @@
<Style TargetType="Button" BasedOn="{StaticResource ToolboxButtonStyle}">
<Setter Property="Tag" Value="UnSelected"/>
<Style.Triggers>
<DataTrigger Binding="{Binding ButtonSelectedName}" Value="DrawingButton">
<DataTrigger Binding="{Binding ButtonSelectedViewModel.ButtonSelectedName}" Value="DrawingButton">
<Setter Property="Tag" Value="Selected"/>
</DataTrigger>
</Style.Triggers>
</Style>
</Button.Style>
</Button>
</Border>
<Border Width="12" Height="32" CornerRadius="4" HorizontalAlignment="Center" VerticalAlignment="Center">
<Button x:Name="ChangeInkSizeButton" Content="{StaticResource Icon_PenArrow}" Command="{Binding SettingPanelViewModel.ToggleSettingsPanelCommand}" >
<Border Width="12" Height="32" CornerRadius="4" Margin="2,0" HorizontalAlignment="Center" VerticalAlignment="Center">
<Button x:Name="ChangeBrushSettingButton" CommandParameter="ChangeBrushSettingButton" Content="{StaticResource Icon_PenArrow}" Command="{Binding SettingPanelViewModel.ShowBrushSettingsPanelCommand}" >
<Button.Style>
<Style TargetType="Button" BasedOn="{StaticResource ArrowButtonStyle}">
<Setter Property="Tag" Value="UnSelected"/>
<Style.Triggers>
<DataTrigger Binding="{Binding ButtonSelectedName}" Value="SettingButton">
<DataTrigger Binding="{Binding ButtonSelectedViewModel.ArrowButtonSelectedName}" Value="ChangeBrushSettingButton">
<Setter Property="Tag" Value="Selected"/>
</DataTrigger>
</Style.Triggers>
Expand All @@ -73,7 +73,7 @@
<Style TargetType="Button" BasedOn="{StaticResource ToolboxButtonStyle}">
<Setter Property="Tag" Value="UnSelected"/>
<Style.Triggers>
<DataTrigger Binding="{Binding ButtonSelectedName}" Value="HighlighterButton">
<DataTrigger Binding="{Binding ButtonSelectedViewModel.ButtonSelectedName}" Value="HighlighterButton">
<Setter Property="Tag" Value="Selected"/>
</DataTrigger>
</Style.Triggers>
Expand Down Expand Up @@ -111,7 +111,7 @@
<Style TargetType="Button" BasedOn="{StaticResource ToolboxButtonStyle}">
<Setter Property="Tag" Value="UnSelected"/>
<Style.Triggers>
<DataTrigger Binding="{Binding ButtonSelectedName}" Value="ErasingButton">
<DataTrigger Binding="{Binding ButtonSelectedViewModel.ButtonSelectedName}" Value="ErasingButton">
<Setter Property="Tag" Value="Selected"/>
</DataTrigger>
</Style.Triggers>
Expand Down Expand Up @@ -144,7 +144,7 @@
<Style TargetType="Button" BasedOn="{StaticResource ToolboxButtonStyle}">
<Setter Property="Tag" Value="UnSelected"/>
<Style.Triggers>
<DataTrigger Binding="{Binding ButtonSelectedName}" Value="SettingButton">
<DataTrigger Binding="{Binding ButtonSelectedViewModel.ButtonSelectedName}" Value="SettingButton">
<Setter Property="Tag" Value="Selected"/>
</DataTrigger>
</Style.Triggers>
Expand Down
2 changes: 2 additions & 0 deletions src/Riter/ViewModel/ButtonSelectedViewModel.cs
Original file line number Diff line number Diff line change
Expand Up @@ -10,4 +10,6 @@ public ButtonSelectedViewModel(IButtonSelectedStateHandler buttonSelectedStateHa
}

public string ButtonSelectedName => _buttonSelectedStateHandler.ButtonSelectedName;

public string ArrowButtonSelectedName => _buttonSelectedStateHandler.ArrowButtonSelectedName;
}
20 changes: 2 additions & 18 deletions src/Riter/ViewModel/PalleteStateOrchestratorViewModel.cs
Original file line number Diff line number Diff line change
Expand Up @@ -26,9 +26,6 @@ public PalleteStateOrchestratorViewModel(

BrushSettingsViewModel.PropertyChanged += (_, e) => OnBrushOrHighlightChanged(e.PropertyName);
HighlighterViewModel.PropertyChanged += (_, e) => OnBrushOrHighlightChanged(e.PropertyName);
DrawingViewModel.PropertyChanged += (_, e) => OnBrushOrHighlightChanged(e.PropertyName);
SettingPanelViewModel.PropertyChanged += (_, e) => OnBrushOrHighlightChanged(e.PropertyName);
buttonSelectedViewModel.PropertyChanged += (_, e) => OnBrushOrHighlightChanged(e.PropertyName);
}

public DrawingViewModel DrawingViewModel { get; init; }
Expand All @@ -49,10 +46,6 @@ public PalleteStateOrchestratorViewModel(

public DrawingAttributes InkDrawingAttributes => DrawingAttributesFactory.CreateDrawingAttributes(BrushSettingsViewModel.InkColor, BrushSettingsViewModel.SizeOfBrush, HighlighterViewModel.IsHighlighter);

public Visibility SettingPanelVisibility => SettingPanelViewModel.SettingPanelVisibility ? Visibility.Visible : Visibility.Hidden;

public string ButtonSelectedName => ButtonSelectedViewModel.ButtonSelectedName;

public void HandleHotkey(HotKey hotKey)
{
switch (hotKey)
Expand Down Expand Up @@ -98,19 +91,10 @@ public void HandleHotkey(HotKey hotKey)
private void OnBrushOrHighlightChanged(string propertyName)
{
if (propertyName == nameof(BrushSettingsViewModel.SizeOfBrush) ||
propertyName == nameof(HighlighterViewModel.IsHighlighter) || propertyName == nameof(BrushSettingsViewModel.InkColor))
propertyName == nameof(HighlighterViewModel.IsHighlighter) ||
propertyName == nameof(BrushSettingsViewModel.InkColor))
{
OnPropertyChanged(nameof(InkDrawingAttributes));
}

if (propertyName == nameof(SettingPanelVisibility))
{
OnPropertyChanged(nameof(SettingPanelVisibility));
}

if (propertyName == nameof(ButtonSelectedName))
{
OnPropertyChanged(nameof(ButtonSelectedName));
}
}
}
4 changes: 3 additions & 1 deletion src/Riter/ViewModel/SettingPanelViewModel.cs
Original file line number Diff line number Diff line change
Expand Up @@ -9,7 +9,9 @@ public SettingPanelViewModel(ISettingPanelStateHandler settingPanelStateHandler)
_settingPanelStateHandler.PropertyChanged += OnStateChanged;
}

public bool SettingPanelVisibility => _settingPanelStateHandler.SettingPanelVisibility;
public Visibility SettingPanelVisibility => _settingPanelStateHandler.SettingPanelVisibility ? Visibility.Visible : Visibility.Hidden;

public ICommand ToggleSettingsPanelCommand => new RelayCommand(_settingPanelStateHandler.ToggleSettingsPanel);

public ICommand ShowBrushSettingsPanelCommand => new RelayCommand<string>(_settingPanelStateHandler.ToggleBrushSettingsPanel);
}
13 changes: 9 additions & 4 deletions src/Riter/ViewModel/StateHandlers/BrushSettingsStateHandler.cs
Original file line number Diff line number Diff line change
Expand Up @@ -40,16 +40,21 @@ public void SetInkColor(string color)
{
InkColor = color;
ColorSelected = color;
_buttonSelectedStateHandler.ResetPreviousButton();
_settingPanelStateHandler.SetSettingPanelInvisibile();
ResetSettings();
}

public void SetSizeOfBrush(string size)
{
SizeOfBrush = double.Parse(size);
_buttonSelectedStateHandler.ResetPreviousButton();
_settingPanelStateHandler.SetSettingPanelInvisibile();
ResetSettings();
}

public void SetSizeOfBrushWithHotKey(BrushSize size) => SizeOfBrush = (double)size;

private void ResetSettings()
{
_buttonSelectedStateHandler.ResetPreviousButton();
_buttonSelectedStateHandler.ResetArrowButtonSelected();
_settingPanelStateHandler.SetSettingPanelInvisibile();
}
}
11 changes: 11 additions & 0 deletions src/Riter/ViewModel/StateHandlers/ButtonSelectedStateHandler.cs
Original file line number Diff line number Diff line change
Expand Up @@ -3,6 +3,7 @@
namespace Riter.ViewModel.StateHandlers;
public class ButtonSelectedStateHandler : BaseStateHandler, IButtonSelectedStateHandler
{
private static string _arrowButtonSelectedName;
private static string _buttonSelectedName;
private static string _previousButtonSelectedName = string.Empty;

Expand All @@ -17,6 +18,12 @@ public string ButtonSelectedName
protected set => SetProperty(ref _buttonSelectedName, value, nameof(ButtonSelectedName));
}

public string ArrowButtonSelectedName
{
get => _arrowButtonSelectedName;
protected set => SetProperty(ref _arrowButtonSelectedName, value, nameof(ArrowButtonSelectedName));
}

public void SetButtonSelectedName(string button) => ButtonSelectedName = button;

public void ResetPreviousButton()
Expand All @@ -36,4 +43,8 @@ public void StoreCurrentButton()
_previousButtonSelectedName = ButtonSelectedName;
}
}

public void ResetArrowButtonSelected() => ArrowButtonSelectedName = string.Empty;

public void SetArrowButtonSelected(string button) => ArrowButtonSelectedName = button;
}
Original file line number Diff line number Diff line change
Expand Up @@ -5,8 +5,14 @@ public interface IButtonSelectedStateHandler : INotifyPropertyChanged
{
string ButtonSelectedName { get; }

string ArrowButtonSelectedName { get; }

void ResetArrowButtonSelected();

void ResetPreviousButton();

void SetArrowButtonSelected(string button);

void SetButtonSelectedName(string button);

void StoreCurrentButton();
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -6,6 +6,10 @@ public interface ISettingPanelStateHandler : INotifyPropertyChanged
bool SettingPanelVisibility { get; }

void SetSettingPanelInvisibile();

void SetSettingPanelVisibile();

void ToggleBrushSettingsPanel(string button);

void ToggleSettingsPanel();
}
15 changes: 15 additions & 0 deletions src/Riter/ViewModel/StateHandlers/SettingsStatePanelHandler.cs
Original file line number Diff line number Diff line change
Expand Up @@ -30,11 +30,26 @@ public bool SettingPanelVisibility

public void SetSettingPanelVisibile() => SettingPanelVisibility = true;

public void ToggleBrushSettingsPanel(string button)
{
if (SettingPanelVisibility && _buttonSelectedStateHandler.ArrowButtonSelectedName == button)
{
_buttonSelectedStateHandler.ResetArrowButtonSelected();
SettingPanelVisibility = false;
}
else
{
_buttonSelectedStateHandler.SetArrowButtonSelected(ButtonNames.ChangeBrushSettingButton);
SettingPanelVisibility = true;
}
}

public void ToggleSettingsPanel()
{
if (SettingPanelVisibility && _buttonSelectedStateHandler.ButtonSelectedName == ButtonNames.SettingButton)
{
_buttonSelectedStateHandler.ResetPreviousButton();
_buttonSelectedStateHandler.ResetArrowButtonSelected();
SettingPanelVisibility = false;
}
else
Expand Down

0 comments on commit 3c0e4ce

Please sign in to comment.