Files
2022-05-31 11:44:27 +00:00

360 lines
8.0 KiB
Swift

//
// MenuConfiguration.swift
// PrivadoVPN
//
// Created by Murad Shabanov on 05.08.2021.
// Copyright © 2021 Privado LLC. All rights reserved.
//
import Cocoa
public enum Alignment {
case left
case right
}
public enum Padding {
public struct Horizontal {
let left: CGFloat
let right: CGFloat
public init(left: CGFloat, right: CGFloat) {
self.left = left
self.right = right
}
}
public struct Vertical {
let top: CGFloat
let bottom: CGFloat
public init(top: CGFloat, bottom: CGFloat) {
self.top = top
self.bottom = bottom
}
}
}
extension Padding.Horizontal {
public static var zero: Padding.Horizontal {
return Padding.Horizontal(left: 0.0, right: 0.0)
}
}
extension Padding.Vertical {
public static var zero: Padding.Vertical {
return Padding.Vertical(top: 0.0, bottom: 0.0)
}
}
public protocol Configuration {
var titleBottomSpace: CGFloat { get }
var titleFont: NSFont? { get }
var titleColor: NSColor { get }
var backgroundColor: NSColor { get }
var cornerRadius: CGFloat { get }
var hasShadow: Bool { get }
var appearsBelowSender: Bool { get }
var presentingOffset: CGFloat { get }
var animationDuration: TimeInterval { get }
var contentEdgeInsets: NSEdgeInsets { get }
var maximumContentHeight: CGFloat? { get }
var separatorColor: NSColor { get }
var separatorThickness: CGFloat { get }
var separatorHorizontalPadding: Padding.Horizontal { get }
var separatorVerticlaPadding: Padding.Vertical { get }
var rememberSelection: Bool { get }
var textAlignment: Alignment { get }
var iconAlignment: Alignment { get }
var menuItemFont: NSFont? { get }
var menuItemHeight: CGFloat { get }
var menuItemWidth: CGFloat { get }
var menuItemHoverBackgroundColor: NSColor { get }
var menuItemTextColor: NSColor { get }
var menuItemHoverTextColor: NSColor { get }
var menuItemCheckmarkColor: NSColor { get }
var menuItemHoverCheckmarkColor: NSColor { get }
var menuItemCheckmarkHeight: CGFloat { get }
var menuItemCheckmarkThikness: CGFloat { get }
var menuItemHorizontalSpacing: CGFloat { get }
var menuItemImageHeight: CGFloat? { get }
var menuItemImageTintColor: NSColor? { get }
var menuItemHoverImageTintColor: NSColor? { get }
var menuItemHoverAnimationDuration: TimeInterval { get }
}
open class MenuConfiguration: Configuration {
public init() {}
open var titleBottomSpace: CGFloat {
return .grid1
}
open var titleFont: NSFont? {
return NSFont.systemFont(ofSize: 18, weight: .light)
}
open var titleColor: NSColor {
return NSColor.white
}
open var backgroundColor: NSColor {
return NSColor(red: 32, green: 40, blue: 100)
}
open var cornerRadius: CGFloat {
return 0.0
}
open var hasShadow: Bool {
return true
}
open var appearsBelowSender: Bool {
return true
}
open var presentingOffset: CGFloat {
return 0.0
}
open var animationDuration: TimeInterval {
return 0.15
}
open var contentEdgeInsets: NSEdgeInsets {
return NSEdgeInsets(top: 0, left: 10, bottom: 0, right: 0)
}
open var maximumContentHeight: CGFloat? {
return nil
}
open var separatorColor: NSColor {
return NSColor.init(calibratedRed: 76/255, green: 161/255, blue: 132/255, alpha: 1.0)
}
open var separatorThickness: CGFloat {
return 0
}
open var separatorHorizontalPadding: Padding.Horizontal {
return .init(left: .grid2, right: .grid2)
}
open var separatorVerticlaPadding: Padding.Vertical {
return .init(top: .gridHalf, bottom: .gridHalf)
}
open var rememberSelection: Bool {
return true
}
open var textAlignment: Alignment {
return .left
}
open var iconAlignment: Alignment {
return .left
}
open var menuItemFont: NSFont? {
return NSFont.systemFont(ofSize: 18, weight: .light)
}
open var menuItemHeight: CGFloat {
return 30
}
open var menuItemWidth: CGFloat {
return 100
}
open var menuItemHoverBackgroundColor: NSColor {
return NSColor(red: 122, green: 134, blue: 190)
}
open var menuItemHoverTextColor: NSColor {
return .white
}
open var menuItemTextColor: NSColor {
return NSColor(red: 122, green: 134, blue: 190)
}
open var menuItemCheckmarkColor: NSColor {
return .white
}
open var menuItemHoverCheckmarkColor: NSColor {
return .white
}
open var menuItemCheckmarkHeight: CGFloat {
return 0
}
open var menuItemCheckmarkThikness: CGFloat {
return 0
}
open var menuItemHorizontalSpacing: CGFloat {
return .grid1
}
open var menuItemImageHeight: CGFloat? {
return .grid3
}
open var menuItemImageTintColor: NSColor? {
return .white
}
open var menuItemHoverImageTintColor: NSColor? {
return .white
}
open var menuItemHoverAnimationDuration: TimeInterval {
return 0.15
}
}
open class SortPanelConfiguration: Configuration {
public init() {}
open var titleBottomSpace: CGFloat {
return .grid1
}
open var titleFont: NSFont? {
return NSFont(name: PrivadoConstants.Font.semiBold, size: 11)
}
open var titleColor: NSColor {
return NSColor.white
}
open var backgroundColor: NSColor {
return NSColor(red: 48, green: 55, blue: 152)
}
open var cornerRadius: CGFloat {
return 0.0
}
open var hasShadow: Bool {
return true
}
open var appearsBelowSender: Bool {
return true
}
open var presentingOffset: CGFloat {
return 0.0
}
open var animationDuration: TimeInterval {
return 0.15
}
open var contentEdgeInsets: NSEdgeInsets {
return NSEdgeInsets(top: 0, left: 10, bottom: 0, right: 0)
}
open var maximumContentHeight: CGFloat? {
return nil
}
open var separatorColor: NSColor {
return NSColor.init(calibratedRed: 76/255, green: 161/255, blue: 132/255, alpha: 1.0)
}
open var separatorThickness: CGFloat {
return 0
}
open var separatorHorizontalPadding: Padding.Horizontal {
return .init(left: .grid2, right: .grid2)
}
open var separatorVerticlaPadding: Padding.Vertical {
return .init(top: .gridHalf, bottom: .gridHalf)
}
open var rememberSelection: Bool {
return true
}
open var textAlignment: Alignment {
return .left
}
open var iconAlignment: Alignment {
return .left
}
open var menuItemFont: NSFont? {
return NSFont(name: PrivadoConstants.Font.semiBold, size: 11)
}
open var menuItemHeight: CGFloat {
return 34
}
open var menuItemWidth: CGFloat {
return 230
}
open var menuItemHoverBackgroundColor: NSColor {
return NSColor(red: 105, green: 112, blue: 208)
}
open var menuItemHoverTextColor: NSColor {
return .white
}
open var menuItemTextColor: NSColor {
return NSColor(red: 122, green: 134, blue: 190)
}
open var menuItemCheckmarkColor: NSColor {
return .white
}
open var menuItemHoverCheckmarkColor: NSColor {
return .white
}
open var menuItemCheckmarkHeight: CGFloat {
return 0
}
open var menuItemCheckmarkThikness: CGFloat {
return 0
}
open var menuItemHorizontalSpacing: CGFloat {
return .grid1
}
open var menuItemImageHeight: CGFloat? {
return .grid3
}
open var menuItemImageTintColor: NSColor? {
return .white
}
open var menuItemHoverImageTintColor: NSColor? {
return .white
}
open var menuItemHoverAnimationDuration: TimeInterval {
return 0.15
}
}