enum FleetViewPosition: Int {
case above = 0
+
case below = 1
+
case divided = 2
+
case oldStyle = 0xffffffff
}
case #keyPath(flagShipName): return [#keyPath(flagShipID)]
default: return []
+
}
}
@IBOutlet private weak var stokerContainer: NSView!
@IBOutlet private weak var resourcePlaceholder: NSView!
@IBOutlet private weak var ancherageRepariTimerPlaceholder: NSView!
- @IBOutlet private weak var informations: NSTabView!
+ @IBOutlet private weak var informationsPlaceholder: NSView!
@IBOutlet private var deckContoller: NSArrayController!
override var windowNibName: NSNib.Name {
@objc var flagShipID: Int = 0
@objc var flagShipName: String? {
- return ServerDataStore.default.ship(by: flagShipID)?.name
- }
- var changeMainTabHandler: ((Int) -> Void)?
- @objc dynamic var selectedMainTabIndex: Int = 0 {
- didSet {
- changeMainTabHandler?(selectedMainTabIndex)
- }
+ return ServerDataStore.default.ship(by: flagShipID)?.name
}
private var gameViewController: GameViewController!
private var fleetViewController: FleetViewController!
- private var tabViewItemViewControllers: [MainTabVIewItemViewController] = []
+ @objc private var informantionViewController = InformationTabViewController()
private var ancherageRepariTimerViewController: AncherageRepairTimerViewController!
private var resourceViewController: ResourceViewController!
- private var docksViewController: DocksViewController!
- private var shipViewController: ShipViewController!
- private var powerUpViewController: PowerUpSupportViewController!
- private var strengthedListViewController: StrengthenListViewController!
- private var repairListViewController: RepairListViewController!
private var combinedViewController: CombileViewController!
private var fleetViewPosition: FleetViewPosition = .above
gameViewController = GameViewController()
replace(view: placeholder, with: gameViewController)
+ replace(view: informationsPlaceholder, with: informantionViewController)
+
resourceViewController = ResourceViewController()
replace(view: resourcePlaceholder, with: resourceViewController)
replace(view: ancherageRepariTimerPlaceholder, with: ancherageRepariTimerViewController)
if UserDefaults.standard[.screenshotButtonSize] == .small { toggleAnchorageSize(nil) }
- tabViewItemViewControllers = [
- DocksViewController(),
- ShipViewController(),
- PowerUpSupportViewController(),
- StrengthenListViewController(),
- RepairListViewController()
- ]
- tabViewItemViewControllers.enumerated().forEach {
-
- _ = $0.element.view
- let item = informations.tabViewItem(at: $0.offset)
- item.viewController = $0.element
- }
-
fleetViewController = FleetViewController(viewType: .detailViewType)
replace(view: deckPlaceholder, with: fleetViewController)
setFleetView(position: UserDefaults.standard[.fleetViewPosition], animate: false)
NotificationCenter.default
.addObserver(forName: .CombinedDidCange, object: nil, queue: nil) {
- guard UserDefaults.standard[.autoCombinedView] else { return }
- guard let type = $0.userInfo?[CombinedCommand.userInfoKey] as? CombineType else { return }
+ guard UserDefaults.standard[.autoCombinedView] else {
+
+ return
+ }
+ guard let type = $0.userInfo?[CombinedCommand.userInfoKey] as? CombineType else {
+
+ return
+ }
if !Thread.isMainThread { Thread.sleep(forTimeInterval: 0.1) }
DispatchQueue.main.async {
switch type {
+
case .cancel:
self.hideCombinedView()
case .maneuver, .water, .transportation:
self.showCombinedView()
+
}
}
}
- if UserDefaults.standard[.lastHasCombinedView] { showCombinedView() }
+ if UserDefaults.standard[.lastHasCombinedView] {
+
+ showCombinedView()
+ }
}
override func swipe(with event: NSEvent) {
- guard UserDefaults.standard[.useSwipeChangeCombinedView] else { return }
+ guard UserDefaults.standard[.useSwipeChangeCombinedView] else {
+
+ return
+ }
if event.deltaX > 0 {
private func showCombinedView() {
- if isCombinedMode { return }
+ if isCombinedMode {
+
+ return
+ }
- if fleetViewPosition == .oldStyle { return }
+ if fleetViewPosition == .oldStyle {
+
+ return
+ }
isCombinedMode = true
private func hideCombinedView() {
- if !isCombinedMode { return }
+ if !isCombinedMode {
+
+ return
+ }
isCombinedMode = false
private func showView(number: Int) {
- informations.selectTabViewItem(at: number)
+ informantionViewController.selectionIndex = number
}
@IBAction func reloadContent(_ sender: AnyObject?) {
@IBAction func clearQuestList(_ sender: AnyObject?) {
let store = ServerDataStore.oneTimeEditor()
- store.quests().forEach(store.delete)
+ store.sync { store.quests().forEach(store.delete) }
}
+ // call from menu item
@IBAction func selectView(_ sender: AnyObject?) {
- guard let tag = sender?.tag else { return }
+ guard let tag = sender?.tag else {
+
+ return
+ }
showView(number: tag)
}
+ // call from touch bar
@IBAction func changeMainTab(_ sender: AnyObject?) {
- guard let segment = sender?.selectedSegment else { return }
+ guard let segment = sender?.selectedSegment else {
+
+ return
+ }
showView(number: segment)
}
}()
ancherageRepariTimerViewController.controlSize = newSize
- var frame = informations.frame
+ var frame = informantionViewController.view.frame
frame.size.height -= diff
frame.origin.y += diff
- informations.frame = frame
+ informantionViewController.view.frame = frame
UserDefaults.standard[.screenshotButtonSize] = newSize
}
override func validateMenuItem(_ menuItem: NSMenuItem) -> Bool {
- guard let action: Selector = menuItem.action else { return false }
+ guard let action: Selector = menuItem.action else {
+
+ return false
+ }
switch action {
return true
case #selector(BroserWindowController.fleetListAbove(_:)):
+
menuItem.state = (fleetViewPosition == .above ? .on : .off)
+
return true
case #selector(BroserWindowController.fleetListBelow(_:)):
+
menuItem.state = (fleetViewPosition == .below ? .on : .off)
+
return true
case #selector(BroserWindowController.fleetListDivide(_:)):
+
menuItem.state = (fleetViewPosition == .divided ? .on : .off)
+
return true
case #selector(BroserWindowController.fleetListSimple(_:)):
+
menuItem.state = (fleetViewPosition == .oldStyle ? .on : .off)
+
return true
case #selector(BroserWindowController.reorderToDoubleLine(_:)):
+
menuItem.state = (fleetViewController.shipOrder == .doubleLine ? .on : .off)
+
return true
case #selector(BroserWindowController.reorderToLeftToRight(_:)):
+
menuItem.state = (fleetViewController.shipOrder == .leftToRight ? .on: .off)
+
return true
case #selector(BroserWindowController.clearQuestList(_:)):
+
return true
case #selector(BroserWindowController.showHideCombinedView(_:)):
+
if isCombinedMode {
menuItem.title = LocalizedStrings.hideCombinedView.string
return true
case #selector(BroserWindowController.toggleAnchorageSize(_:)):
+
return true
case #selector(BroserWindowController.changeSakutekiCalculator(_:)):
+
return fleetViewController.validateMenuItem(menuItem)
default:
+
return false
+
}
}
}
private func changeFleetViewForFleetViewPositionIfNeeded(position newPosition: FleetViewPosition) {
- if fleetViewPosition == newPosition { return }
- if fleetViewPosition != .oldStyle && newPosition != .oldStyle { return }
- if newPosition == .oldStyle && isCombinedMode { hideCombinedView() }
+ if fleetViewPosition == newPosition {
+
+ return
+ }
+ if fleetViewPosition != .oldStyle && newPosition != .oldStyle {
+
+ return
+ }
+ if newPosition == .oldStyle && isCombinedMode {
+
+ hideCombinedView()
+ }
let type: FleetViewType = (newPosition == .oldStyle) ? .minimumViewType : .detailViewType
- guard let newController = FleetViewController(viewType: type) else { return }
+ guard let newController = FleetViewController(viewType: type) else {
+
+ return
+ }
newController.enableAnimation = true
newController.shipOrder = fleetViewController.shipOrder
private func windowHeightForFleetViewPosition(position newPosition: FleetViewPosition) -> CGFloat {
- guard var contentHeight = window!.contentView?.frame.size.height else { return 0.0 }
+ guard var contentHeight = window!.contentView?.frame.size.height else {
+
+ return 0.0
+ }
- if fleetViewPosition == newPosition { return contentHeight }
+ if fleetViewPosition == newPosition {
+
+ return contentHeight
+ }
if fleetViewPosition == .oldStyle {
contentHeight += FleetViewController.heightDifference
var contentRect = window!.frame
- if fleetViewPosition == newPosition { return contentRect }
+ if fleetViewPosition == newPosition {
+
+ return contentRect
+ }
if fleetViewPosition == .oldStyle {
contentRect.size.height += FleetViewController.heightDifference
var flashRect = gameViewController.view.frame
var flashY: CGFloat
switch newPosition {
+
case .above:
flashY = contentHeight - flashRect.height - fleetViewController.normalHeight
case .oldStyle:
flashY = contentHeight - flashRect.height - BroserWindowController.flashTopMargin
+
}
flashRect.origin.y = flashY
var fleetViewY: CGFloat
switch newPosition {
+
case .above:
fleetViewHeight = fleetViewController.normalHeight
fleetViewY = contentHeight - fleetViewHeight
case .oldStyle:
fleetViewHeight = FleetViewController.oldStyleFleetViewHeight
fleetViewY = contentHeight - fleetViewHeight - flashRect.height - BroserWindowController.margin - BroserWindowController.flashTopMargin
+
}
fleetListRect.size.height = fleetViewHeight
private func setFleetView(position newPosition: FleetViewPosition, animate: Bool) {
- guard let window = window else { return }
+ guard let window = window else {
+
+ return
+ }
changeFleetViewForFleetViewPositionIfNeeded(position: newPosition)
let winFrame = windowFrameForFleetViewPosition(position: newPosition)
func changeShowsExtShip(_ fleetViewController: FleetViewController, showsExtShip: Bool) {
- guard self.fleetViewController == fleetViewController else { return }
+ guard self.fleetViewController == fleetViewController else {
+
+ return
+ }
if isExtShpMode && !showsExtShip {
// hide
let diffHeight = fleetViewController.shipViewSize.height
- var iFrame = informations.frame
+ var iFrame = informantionViewController.view.frame
iFrame.origin.y -= diffHeight
iFrame.size.height += diffHeight
- informations.animator().frame = iFrame
+ informantionViewController.view.animator().frame = iFrame
var sFrame = stokerContainer.frame
sFrame.origin.y -= diffHeight
//show
let diffHeight = fleetViewController.shipViewSize.height
- var iFrame = informations.frame
+ var iFrame = informantionViewController.view.frame
iFrame.origin.y += diffHeight
iFrame.size.height -= diffHeight
- informations.animator().frame = iFrame
+ informantionViewController.view.animator().frame = iFrame
var sFrame = stokerContainer.frame
sFrame.origin.y += diffHeight
Bundle.main.loadNibNamed(NSNib.Name("BroswerTouchBar"), owner: self, topLevelObjects: nil)
shipTypeSegment.bind(.selectedIndex,
- to: tabViewItemViewControllers[0],
- withKeyPath: #keyPath(MainTabVIewItemViewController.selectedShipType),
+ to: informantionViewController,
+ withKeyPath: #keyPath(InformationTabViewController.selectedShipType),
options: nil)
- let o = selectedMainTabIndex
- selectedMainTabIndex = o
- changeMainTabHandler = { [weak self] in
+ informantionViewController.selectionDidChangeHandler = { [weak self] in
- guard let `self` = self else { return }
+ guard let `self` = self else {
+
+ return
+ }
self.shipTypeButton.dismissPopover(nil)
- self.shipTypeSegment.unbind(.selectedIndex)
- guard let button = self.shipTypeButton.view as? NSButton else { return }
+ guard let button = self.shipTypeButton.view as? NSButton else {
+
+ return
+ }
+ button.isHidden = !self.informantionViewController.hasShipTypeSelector
- let vc = self.tabViewItemViewControllers[$0]
- button.isHidden = !vc.hasShipTypeSelector
self.shipTypeSegment.bind(.selectedIndex,
- to: vc,
- withKeyPath: #keyPath(MainTabVIewItemViewController.selectedShipType),
+ to: self.informantionViewController,
+ withKeyPath: #keyPath(InformationTabViewController.selectedShipType),
options: nil)
}