|
@@ -15,8 +15,7 @@ private enum SidebarPage: Int {
|
|
|
case joinMeetings = 0
|
|
case joinMeetings = 0
|
|
|
case photo = 1
|
|
case photo = 1
|
|
|
case video = 2
|
|
case video = 2
|
|
|
- case tutorials = 3
|
|
|
|
|
- case settings = 4
|
|
|
|
|
|
|
+ case settings = 3
|
|
|
}
|
|
}
|
|
|
|
|
|
|
|
private enum ZoomJoinMode: Int {
|
|
private enum ZoomJoinMode: Int {
|
|
@@ -1294,11 +1293,9 @@ private extension ViewController {
|
|
|
case .joinMeetings:
|
|
case .joinMeetings:
|
|
|
built = makeJoinMeetingsContent()
|
|
built = makeJoinMeetingsContent()
|
|
|
case .photo:
|
|
case .photo:
|
|
|
- built = makePlaceholderPage(title: "Photo", subtitle: "Backgrounds — choose a photo background for your meetings.")
|
|
|
|
|
|
|
+ built = makePlaceholderPage(title: "Schedule", subtitle: "Create and manage your upcoming meetings.")
|
|
|
case .video:
|
|
case .video:
|
|
|
- built = makePlaceholderPage(title: "Video", subtitle: "Backgrounds — video background options.")
|
|
|
|
|
- case .tutorials:
|
|
|
|
|
- built = makePlaceholderPage(title: "Tutorials", subtitle: "Learn how to use the app.")
|
|
|
|
|
|
|
+ built = makePlaceholderPage(title: "Calendar", subtitle: "View meetings by date and track your plan.")
|
|
|
case .settings:
|
|
case .settings:
|
|
|
built = makePlaceholderPage(title: "Settings", subtitle: "Preferences and account options.")
|
|
built = makePlaceholderPage(title: "Settings", subtitle: "Preferences and account options.")
|
|
|
}
|
|
}
|
|
@@ -1428,11 +1425,9 @@ private extension ViewController {
|
|
|
case .joinMeetings:
|
|
case .joinMeetings:
|
|
|
title = "App for Google Meet"
|
|
title = "App for Google Meet"
|
|
|
case .photo:
|
|
case .photo:
|
|
|
- title = "Backgrounds — Photo"
|
|
|
|
|
|
|
+ title = "Schedule"
|
|
|
case .video:
|
|
case .video:
|
|
|
- title = "Backgrounds — Video"
|
|
|
|
|
- case .tutorials:
|
|
|
|
|
- title = "Tutorials"
|
|
|
|
|
|
|
+ title = "Calendar"
|
|
|
case .settings:
|
|
case .settings:
|
|
|
title = "Settings"
|
|
title = "Settings"
|
|
|
}
|
|
}
|
|
@@ -1473,7 +1468,7 @@ private extension ViewController {
|
|
|
|
|
|
|
|
private func logoTemplateForSidebarPage(_ page: SidebarPage) -> Bool {
|
|
private func logoTemplateForSidebarPage(_ page: SidebarPage) -> Bool {
|
|
|
switch page {
|
|
switch page {
|
|
|
- case .photo, .tutorials: return false
|
|
|
|
|
|
|
+ case .photo: return false
|
|
|
case .joinMeetings, .video, .settings: return true
|
|
case .joinMeetings, .video, .settings: return true
|
|
|
}
|
|
}
|
|
|
}
|
|
}
|
|
@@ -1525,17 +1520,14 @@ private extension ViewController {
|
|
|
let joinRow = sidebarItem("Join Meetings", icon: "", page: .joinMeetings, logoImageName: "JoinMeetingsLogo", logoIconWidth: 24, logoHeightMultiplier: 56.0 / 52.0)
|
|
let joinRow = sidebarItem("Join Meetings", icon: "", page: .joinMeetings, logoImageName: "JoinMeetingsLogo", logoIconWidth: 24, logoHeightMultiplier: 56.0 / 52.0)
|
|
|
menuStack.addArrangedSubview(joinRow)
|
|
menuStack.addArrangedSubview(joinRow)
|
|
|
sidebarRowViews[.joinMeetings] = joinRow
|
|
sidebarRowViews[.joinMeetings] = joinRow
|
|
|
- menuStack.addArrangedSubview(sidebarSectionTitle("Backgrounds"))
|
|
|
|
|
- let photoRow = sidebarItem("Photo", icon: "", page: .photo, logoImageName: "SidebarPhotoLogo", logoIconWidth: 24, logoHeightMultiplier: 82.0 / 62.0)
|
|
|
|
|
|
|
+ menuStack.addArrangedSubview(sidebarSectionTitle("Planning"))
|
|
|
|
|
+ let photoRow = sidebarItem("Schedule", icon: "", page: .photo, systemSymbolName: "clock.badge.checkmark")
|
|
|
menuStack.addArrangedSubview(photoRow)
|
|
menuStack.addArrangedSubview(photoRow)
|
|
|
sidebarRowViews[.photo] = photoRow
|
|
sidebarRowViews[.photo] = photoRow
|
|
|
- let videoRow = sidebarItem("Video", icon: "", page: .video, logoImageName: "SidebarVideoLogo", logoIconWidth: 28, logoHeightMultiplier: 52.0 / 60.0)
|
|
|
|
|
|
|
+ let videoRow = sidebarItem("Calendar", icon: "", page: .video, systemSymbolName: "calendar")
|
|
|
menuStack.addArrangedSubview(videoRow)
|
|
menuStack.addArrangedSubview(videoRow)
|
|
|
sidebarRowViews[.video] = videoRow
|
|
sidebarRowViews[.video] = videoRow
|
|
|
menuStack.addArrangedSubview(sidebarSectionTitle("Additional"))
|
|
menuStack.addArrangedSubview(sidebarSectionTitle("Additional"))
|
|
|
- let tutorialsRow = sidebarItem("Tutorials", icon: "", page: .tutorials, logoImageName: "SidebarTutorialsLogo", logoIconWidth: 24, logoHeightMultiplier: 50.0 / 60.0)
|
|
|
|
|
- menuStack.addArrangedSubview(tutorialsRow)
|
|
|
|
|
- sidebarRowViews[.tutorials] = tutorialsRow
|
|
|
|
|
let settingsRow = sidebarItem("Settings", icon: "", page: .settings, logoImageName: "SidebarSettingsLogo", logoIconWidth: 28, logoHeightMultiplier: 68.0 / 62.0, showsDisclosure: true)
|
|
let settingsRow = sidebarItem("Settings", icon: "", page: .settings, logoImageName: "SidebarSettingsLogo", logoIconWidth: 28, logoHeightMultiplier: 68.0 / 62.0, showsDisclosure: true)
|
|
|
menuStack.addArrangedSubview(settingsRow)
|
|
menuStack.addArrangedSubview(settingsRow)
|
|
|
sidebarRowViews[.settings] = settingsRow
|
|
sidebarRowViews[.settings] = settingsRow
|
|
@@ -3768,7 +3760,7 @@ private extension ViewController {
|
|
|
return field
|
|
return field
|
|
|
}
|
|
}
|
|
|
|
|
|
|
|
- func sidebarItem(_ text: String, icon: String, page: SidebarPage, logoImageName: String? = nil, logoIconWidth: CGFloat = 18, logoHeightMultiplier: CGFloat = 1, logoTemplate: Bool = true, showsDisclosure: Bool = false) -> NSView {
|
|
|
|
|
|
|
+ func sidebarItem(_ text: String, icon: String, page: SidebarPage, logoImageName: String? = nil, systemSymbolName: String? = nil, logoIconWidth: CGFloat = 18, logoHeightMultiplier: CGFloat = 1, logoTemplate: Bool = true, showsDisclosure: Bool = false) -> NSView {
|
|
|
let item = HoverButton(title: "", target: self, action: #selector(sidebarButtonClicked(_:)))
|
|
let item = HoverButton(title: "", target: self, action: #selector(sidebarButtonClicked(_:)))
|
|
|
item.tag = page.rawValue
|
|
item.tag = page.rawValue
|
|
|
item.isBordered = false
|
|
item.isBordered = false
|
|
@@ -3789,6 +3781,14 @@ private extension ViewController {
|
|
|
imageView.imageAlignment = .alignCenter
|
|
imageView.imageAlignment = .alignCenter
|
|
|
imageView.isEditable = false
|
|
imageView.isEditable = false
|
|
|
leadingView = imageView
|
|
leadingView = imageView
|
|
|
|
|
+ } else if let symbolName = systemSymbolName, let symbol = NSImage(systemSymbolName: symbolName, accessibilityDescription: text) {
|
|
|
|
|
+ symbol.isTemplate = true
|
|
|
|
|
+ let imageView = NSImageView(image: symbol)
|
|
|
|
|
+ imageView.translatesAutoresizingMaskIntoConstraints = false
|
|
|
|
|
+ imageView.imageScaling = .scaleProportionallyDown
|
|
|
|
|
+ imageView.imageAlignment = .alignCenter
|
|
|
|
|
+ imageView.isEditable = false
|
|
|
|
|
+ leadingView = imageView
|
|
|
} else {
|
|
} else {
|
|
|
leadingView = textLabel(icon, font: typography.sidebarIcon, color: palette.textSecondary)
|
|
leadingView = textLabel(icon, font: typography.sidebarIcon, color: palette.textSecondary)
|
|
|
}
|
|
}
|
|
@@ -3820,7 +3820,7 @@ private extension ViewController {
|
|
|
constraints.append(titleLabel.trailingAnchor.constraint(lessThanOrEqualTo: item.trailingAnchor, constant: -10))
|
|
constraints.append(titleLabel.trailingAnchor.constraint(lessThanOrEqualTo: item.trailingAnchor, constant: -10))
|
|
|
}
|
|
}
|
|
|
|
|
|
|
|
- if logoImageName != nil {
|
|
|
|
|
|
|
+ if logoImageName != nil || systemSymbolName != nil {
|
|
|
let h = logoIconWidth * logoHeightMultiplier
|
|
let h = logoIconWidth * logoHeightMultiplier
|
|
|
constraints.append(contentsOf: [
|
|
constraints.append(contentsOf: [
|
|
|
leadingView.widthAnchor.constraint(equalToConstant: logoIconWidth),
|
|
leadingView.widthAnchor.constraint(equalToConstant: logoIconWidth),
|