From 0fec8525f13704e2ee5dd454bb70ea874b79f31b Mon Sep 17 00:00:00 2001 From: chanhihi Date: Tue, 29 Aug 2023 02:28:00 +0900 Subject: [PATCH 1/4] =?UTF-8?q?refactor:=20QuickSlot=EC=95=88=EC=9C=BC?= =?UTF-8?q?=EB=A1=9C=20preferenceView=EA=B0=80=20=EB=93=A4=EC=96=B4?= =?UTF-8?q?=EA=B0=80=EB=8A=94=20=EA=B5=AC=EC=A1=B0=EB=A1=9C=20=EB=B3=80?= =?UTF-8?q?=EA=B2=BD=ED=95=A8=EC=97=90=20=EB=94=B0=EB=9D=BC=20=ED=8C=8C?= =?UTF-8?q?=EC=9D=BC=EA=B5=AC=EC=A1=B0=EB=8F=84=20=EB=B3=80=EA=B2=BD?= =?UTF-8?q?=ED=95=A9=EB=8B=88=EB=8B=A4.?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- Box42.xcodeproj/project.pbxproj | 2 +- Box42/{ => QuickSlot}/Preferences/Accessibility.swift | 0 Box42/{ => QuickSlot}/Preferences/Hotkey.swift | 0 Box42/{ => QuickSlot}/Preferences/PreferencesView.swift | 0 .../{ => QuickSlot}/Preferences/PreferencesViewController.swift | 0 5 files changed, 1 insertion(+), 1 deletion(-) rename Box42/{ => QuickSlot}/Preferences/Accessibility.swift (100%) rename Box42/{ => QuickSlot}/Preferences/Hotkey.swift (100%) rename Box42/{ => QuickSlot}/Preferences/PreferencesView.swift (100%) rename Box42/{ => QuickSlot}/Preferences/PreferencesViewController.swift (100%) diff --git a/Box42.xcodeproj/project.pbxproj b/Box42.xcodeproj/project.pbxproj index aefc71c..22999fd 100644 --- a/Box42.xcodeproj/project.pbxproj +++ b/Box42.xcodeproj/project.pbxproj @@ -230,7 +230,6 @@ DE9DA8122A97F1E2001C0D3B /* ButtonGroup */, DE1F1A202A8B50CA00A88DD8 /* Main */, DEB862D22A8511D600278FCD /* Scripts */, - DE874F512A591EC600FC3B77 /* Preferences */, DE018C0C2A509BDF00FF0AA3 /* Resources */, DE018C062A509B9000FF0AA3 /* System */, DE018C082A509BB500FF0AA3 /* WebView */, @@ -485,6 +484,7 @@ DE98E8382A98D48700F8744A /* QuickSlot */ = { isa = PBXGroup; children = ( + DE874F512A591EC600FC3B77 /* Preferences */, DE98E84E2A98E04F00F8744A /* ViewModel */, DE98E8492A98E02400F8744A /* Model */, DE98E8412A98DDEB00F8744A /* View */, diff --git a/Box42/Preferences/Accessibility.swift b/Box42/QuickSlot/Preferences/Accessibility.swift similarity index 100% rename from Box42/Preferences/Accessibility.swift rename to Box42/QuickSlot/Preferences/Accessibility.swift diff --git a/Box42/Preferences/Hotkey.swift b/Box42/QuickSlot/Preferences/Hotkey.swift similarity index 100% rename from Box42/Preferences/Hotkey.swift rename to Box42/QuickSlot/Preferences/Hotkey.swift diff --git a/Box42/Preferences/PreferencesView.swift b/Box42/QuickSlot/Preferences/PreferencesView.swift similarity index 100% rename from Box42/Preferences/PreferencesView.swift rename to Box42/QuickSlot/Preferences/PreferencesView.swift diff --git a/Box42/Preferences/PreferencesViewController.swift b/Box42/QuickSlot/Preferences/PreferencesViewController.swift similarity index 100% rename from Box42/Preferences/PreferencesViewController.swift rename to Box42/QuickSlot/Preferences/PreferencesViewController.swift From e104f027478cc8036f69d51d85e0cddf681b95ab Mon Sep 17 00:00:00 2001 From: chanhihi Date: Tue, 29 Aug 2023 03:32:59 +0900 Subject: [PATCH 2/4] =?UTF-8?q?feat:=20QuickSlot=EC=97=90=EC=84=9C=20conte?= =?UTF-8?q?nts=20view=EC=9D=98=20=EC=A0=84=ED=99=98=EC=9D=84=20=EB=8F=95?= =?UTF-8?q?=EC=8A=B5=EB=8B=88=EB=8B=A4.?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- Box42.xcodeproj/project.pbxproj | 34 +++- .../Main/BoxBaseContainerViewController.swift | 28 ++++ .../QuickSlotScriptsLogicController.swift | 5 +- Box42/QuickSlot/Model/QuickSlotUI.swift | 7 + .../PreferencesViewController.swift | 56 +++++++ .../PreferencesViewController.swift | 151 ------------------ .../Preferences/View/PreferencesCell.swift | 31 ++++ .../ViewModel/QuickSlotViewModel.swift | 9 +- Box42/View/BoxContentsViewGroup.swift | 23 +-- 9 files changed, 170 insertions(+), 174 deletions(-) create mode 100644 Box42/QuickSlot/Preferences/Controller/PreferencesViewController.swift delete mode 100644 Box42/QuickSlot/Preferences/PreferencesViewController.swift create mode 100644 Box42/QuickSlot/Preferences/View/PreferencesCell.swift diff --git a/Box42.xcodeproj/project.pbxproj b/Box42.xcodeproj/project.pbxproj index 22999fd..1b3f925 100644 --- a/Box42.xcodeproj/project.pbxproj +++ b/Box42.xcodeproj/project.pbxproj @@ -74,6 +74,8 @@ DE7886102A9C773300FE21DD /* IconsModel.swift in Sources */ = {isa = PBXBuildFile; fileRef = DE78860F2A9C773300FE21DD /* IconsModel.swift */; }; DE7886172A9CCB3B00FE21DD /* UserProfile.swift in Sources */ = {isa = PBXBuildFile; fileRef = DE7886162A9CCB3B00FE21DD /* UserProfile.swift */; }; DE78861C2A9CE7D700FE21DD /* IconChanged+WebView.swift in Sources */ = {isa = PBXBuildFile; fileRef = DE78861B2A9CE7D700FE21DD /* IconChanged+WebView.swift */; }; + DE7886282A9D186700FE21DD /* ScriptsController.swift in Sources */ = {isa = PBXBuildFile; fileRef = DE7886272A9D186700FE21DD /* ScriptsController.swift */; }; + DE78862D2A9D1ADE00FE21DD /* PreferencesCell.swift in Sources */ = {isa = PBXBuildFile; fileRef = DE78862C2A9D1ADE00FE21DD /* PreferencesCell.swift */; }; DE7A257A2A6D8CA20043225A /* PreferencesViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = DE7A25792A6D8CA20043225A /* PreferencesViewController.swift */; }; DE7F9D462A9B7A4700F8ACAE /* QuickSlotButtonViewItem.xib in Resources */ = {isa = PBXBuildFile; fileRef = DE7F9D442A9B7A4700F8ACAE /* QuickSlotButtonViewItem.xib */; }; DE874F4E2A591DEA00FC3B77 /* Hotkey.swift in Sources */ = {isa = PBXBuildFile; fileRef = DE874F4D2A591DEA00FC3B77 /* Hotkey.swift */; }; @@ -166,6 +168,8 @@ DE78860F2A9C773300FE21DD /* IconsModel.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = IconsModel.swift; sourceTree = ""; }; DE7886162A9CCB3B00FE21DD /* UserProfile.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = UserProfile.swift; sourceTree = ""; }; DE78861B2A9CE7D700FE21DD /* IconChanged+WebView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = "IconChanged+WebView.swift"; sourceTree = ""; }; + DE7886272A9D186700FE21DD /* ScriptsController.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ScriptsController.swift; sourceTree = ""; }; + DE78862C2A9D1ADE00FE21DD /* PreferencesCell.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = PreferencesCell.swift; sourceTree = ""; }; DE7A25792A6D8CA20043225A /* PreferencesViewController.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = PreferencesViewController.swift; sourceTree = ""; }; DE7F9D432A9B7A4700F8ACAE /* QuickSlotButtonViewItem.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = QuickSlotButtonViewItem.swift; sourceTree = ""; }; DE7F9D442A9B7A4700F8ACAE /* QuickSlotButtonViewItem.xib */ = {isa = PBXFileReference; lastKnownFileType = file.xib; path = QuickSlotButtonViewItem.xib; sourceTree = ""; }; @@ -461,6 +465,30 @@ path = Model; sourceTree = ""; }; + DE7886242A9D10AC00FE21DD /* Controller */ = { + isa = PBXGroup; + children = ( + DE7A25792A6D8CA20043225A /* PreferencesViewController.swift */, + ); + path = Controller; + sourceTree = ""; + }; + DE7886262A9D184900FE21DD /* Controller */ = { + isa = PBXGroup; + children = ( + DE7886272A9D186700FE21DD /* ScriptsController.swift */, + ); + path = Controller; + sourceTree = ""; + }; + DE78862B2A9D1A9E00FE21DD /* View */ = { + isa = PBXGroup; + children = ( + DE78862C2A9D1ADE00FE21DD /* PreferencesCell.swift */, + ); + path = View; + sourceTree = ""; + }; DE7F9D482A9B7A4E00F8ACAE /* Vertical Item */ = { isa = PBXGroup; children = ( @@ -473,7 +501,8 @@ DE874F512A591EC600FC3B77 /* Preferences */ = { isa = PBXGroup; children = ( - DE7A25792A6D8CA20043225A /* PreferencesViewController.swift */, + DE78862B2A9D1A9E00FE21DD /* View */, + DE7886242A9D10AC00FE21DD /* Controller */, DE874F532A591F1400FC3B77 /* PreferencesView.swift */, DE2AD3282A824EEB00002D51 /* Accessibility.swift */, DE874F4D2A591DEA00FC3B77 /* Hotkey.swift */, @@ -541,6 +570,7 @@ DEB862D22A8511D600278FCD /* Scripts */ = { isa = PBXGroup; children = ( + DE7886262A9D184900FE21DD /* Controller */, DE78860E2A9C771A00FE21DD /* Model */, DE78860A2A9C76F600FE21DD /* ViewModel */, DE7886082A9C741700FE21DD /* View */, @@ -736,11 +766,13 @@ DE3FF3762A978AB8009C88EF /* WindowCloseButton.swift in Sources */, DE3FF3772A978AB8009C88EF /* WindowMinimizeButton.swift in Sources */, DE4408022A923EB60091937A /* PinButtonView.swift in Sources */, + DE78862D2A9D1ADE00FE21DD /* PreferencesCell.swift in Sources */, DE0A91672A8E6CA700D1D6F1 /* WebViewManager.swift in Sources */, DE97CA7F2A9A73A9001073DE /* QuickSlotUI.swift in Sources */, DE4408152A92750D0091937A /* keyDown+BoxBaseContainerViewController.swift in Sources */, DE018BED2A509B2600FF0AA3 /* URLModel.swift in Sources */, DE97CA692A9A6364001073DE /* PixelConversion+CGFloat.swift in Sources */, + DE7886282A9D186700FE21DD /* ScriptsController.swift in Sources */, DE4408052A923EC00091937A /* QuitButtonView.swift in Sources */, DE0A918A2A8F88A900D1D6F1 /* GoForwardInToolbar.swift in Sources */, DE1F1A1E2A8B50C500A88DD8 /* BoxButtonViewGroup.swift in Sources */, diff --git a/Box42/Main/BoxBaseContainerViewController.swift b/Box42/Main/BoxBaseContainerViewController.swift index de5f5c0..b98f10f 100644 --- a/Box42/Main/BoxBaseContainerViewController.swift +++ b/Box42/Main/BoxBaseContainerViewController.swift @@ -9,6 +9,7 @@ import Cocoa import SnapKit class BoxBaseContainerViewController: NSViewController { + // MARK: - LeftContainer var splitView: BoxBaseSplitView = BoxBaseSplitView() var contentGroup: BoxContentsViewGroup = BoxContentsViewGroup() var toolbarGroupVC: ToolbarViewController = ToolbarViewController() @@ -17,6 +18,10 @@ class BoxBaseContainerViewController: NSViewController { let windowViewGroupVC: WindowButtonViewController = WindowButtonViewController() var leftContainer: MovableContainerView = MovableContainerView() var buttonGroupVC: ButtonGroupViewController = ButtonGroupViewController() + + // MARK: - QuickSlot + var preferenceVC: PreferencesViewController = PreferencesViewController() + weak var menubarVCDelegate: MenubarViewControllerDelegate? // extension override func loadView() { @@ -34,6 +39,8 @@ class BoxBaseContainerViewController: NSViewController { self.view.wantsLayer = true // self.view.layer?.backgroundColor = NSColor(hex: "#FF9548").cgColor self.view.layer?.backgroundColor = NSColor(hex: "#E7E7E7").cgColor + + NotificationCenter.default.addObserver(self, selector: #selector(handleButtonTapped), name: NSNotification.Name(NotifConst.object.collectionButtonTapped), object: nil) } func BoxButtonViewGroupInit() -> BoxButtonViewGroup { @@ -171,3 +178,24 @@ extension BoxBaseContainerViewController: BoxFunctionViewControllerDelegate { clickBtn(sender: "box") } } + +extension BoxBaseContainerViewController { + @objc func handleButtonTapped(notification: NSNotification) { + if let button = notification.object as? NSButton { + if button.title == QuickSlotUI.title.preferences { + print("Button with title \(button.title) was tapped in BaseVC") + contentGroup.showPreferences() + } + + if button.title == QuickSlotUI.title.user { + print("Button with title \(button.title) was tapped in BaseVC") + contentGroup.removeAllSubviews() + print(WebViewManager.shared.hostingWebView!) + contentGroup.addSubview(WebViewManager.shared.hostingWebView!) + WebViewManager.shared.hostingWebView!.snp.makeConstraints { make in + make.top.bottom.left.right.equalToSuperview() + } + } + } + } +} diff --git a/Box42/QuickSlot/Controller/QuickSlotScriptsLogicController.swift b/Box42/QuickSlot/Controller/QuickSlotScriptsLogicController.swift index 1038e76..346430f 100644 --- a/Box42/QuickSlot/Controller/QuickSlotScriptsLogicController.swift +++ b/Box42/QuickSlot/Controller/QuickSlotScriptsLogicController.swift @@ -17,11 +17,11 @@ class ScriptsLogicController { @objc func handleButtonTapped(notification: NSNotification) { if let button = notification.object as? NSButton { - let buttonTitle = button.title // 메인 스레드에서 타이틀을 캡쳐 + let buttonTitle = button.title print("Button with title \(buttonTitle) was tapped") DispatchQueue.global(qos: .background).async { [weak self] in - if buttonTitle == "clean" { + if buttonTitle == QuickSlotUI.title.clean { self?.executeCleanScript() } } @@ -53,5 +53,4 @@ class ScriptsLogicController { } } } - } diff --git a/Box42/QuickSlot/Model/QuickSlotUI.swift b/Box42/QuickSlot/Model/QuickSlotUI.swift index c61c2cf..096bcbc 100644 --- a/Box42/QuickSlot/Model/QuickSlotUI.swift +++ b/Box42/QuickSlot/Model/QuickSlotUI.swift @@ -21,4 +21,11 @@ enum QuickSlotUI { enum color { // static let pinText = NSColor(hex: "#696969") } + + enum title { + static let clean = "Clean" + static let preferences = "Preferences" + static let scripts = "Scripts" + static let user = "User" + } } diff --git a/Box42/QuickSlot/Preferences/Controller/PreferencesViewController.swift b/Box42/QuickSlot/Preferences/Controller/PreferencesViewController.swift new file mode 100644 index 0000000..f247d46 --- /dev/null +++ b/Box42/QuickSlot/Preferences/Controller/PreferencesViewController.swift @@ -0,0 +1,56 @@ +// +// PreferencesViewController.swift +// Box42 +// +// Created by Chanhee Kim on 7/24/23. +// + +import Cocoa +import SnapKit + +class PreferencesViewController: NSViewController { + var prefTableView : NSTableView? + + override func loadView() { + self.view = NSView() + self.view.wantsLayer = true + self.view.layer?.backgroundColor = NSColor.blue.cgColor + + prefTableView = NSTableView(frame: .zero) + // Column 추가 + let column1 = NSTableColumn(identifier: NSUserInterfaceItemIdentifier("Column1")) + column1.width = 100.0 + column1.title = "Column 1" + prefTableView?.addTableColumn(column1) + + // delegate와 dataSource 설정 + prefTableView?.delegate = self + prefTableView?.dataSource = self + + // TableView를 스크롤 뷰에 추가 (일반적으로 NSTableView는 NSScrollView 안에 위치합니다) + let scrollView = NSScrollView() + scrollView.documentView = prefTableView + self.view.addSubview(scrollView) + + + scrollView.snp.makeConstraints({ make in + make.edges.equalToSuperview() + }) + + prefTableView?.snp.makeConstraints({ make in + make.edges.equalToSuperview() + }) + } +} + +extension PreferencesViewController: NSTableViewDelegate, NSTableViewDataSource { + func numberOfRows(in tableView: NSTableView) -> Int { + return 10 // 총 로우 수 + } + + func tableView(_ tableView: NSTableView, viewFor tableColumn: NSTableColumn?, row: Int) -> NSView? { + let cell = tableView.makeView(withIdentifier: NSUserInterfaceItemIdentifier("MyCell"), owner: self) as? NSTableCellView ?? NSTableCellView() + cell.textField?.stringValue = "Row \(row), Column \(tableColumn?.identifier ?? NSUserInterfaceItemIdentifier(""))" + return cell + } +} diff --git a/Box42/QuickSlot/Preferences/PreferencesViewController.swift b/Box42/QuickSlot/Preferences/PreferencesViewController.swift deleted file mode 100644 index 5a6c36d..0000000 --- a/Box42/QuickSlot/Preferences/PreferencesViewController.swift +++ /dev/null @@ -1,151 +0,0 @@ -// -// PreferencesViewController.swift -// Box42 -// -// Created by Chanhee Kim on 7/24/23. -// - -import Cocoa -import Foundation - -class PreferencesViewController: NSViewController { - let menubarVC = MenubarViewController() - private var stackView: NSStackView! - private var rightView: NSView! - private var outputView: NSTextView! - - override func loadView() { - self.view = NSView() - self.stackView = NSStackView() - self.stackView.orientation = .vertical - self.stackView.distribution = .fillEqually - self.stackView.spacing = 20 - self.view.addSubview(stackView) - stackView.translatesAutoresizingMaskIntoConstraints = false - NSLayoutConstraint.activate([ - stackView.topAnchor.constraint(equalTo: self.view.topAnchor), - stackView.leadingAnchor.constraint(equalTo: self.view.leadingAnchor), - stackView.trailingAnchor.constraint(equalTo: self.view.trailingAnchor), - stackView.bottomAnchor.constraint(equalTo: self.view.bottomAnchor) - ]) - - let leftView = NSView() - self.rightView = NSView() - self.stackView.addArrangedSubview(leftView) - self.stackView.addArrangedSubview(rightView) - - outputView = NSTextView() - outputView.translatesAutoresizingMaskIntoConstraints = false - rightView.addSubview(outputView) - - NSLayoutConstraint.activate([ - outputView.topAnchor.constraint(equalTo: rightView.topAnchor), - outputView.leadingAnchor.constraint(equalTo: rightView.leadingAnchor), - outputView.trailingAnchor.constraint(equalTo: rightView.trailingAnchor), - outputView.bottomAnchor.constraint(equalTo: rightView.bottomAnchor) - ]) - - - var stackBox: [NSView] = [] - - let icons = iconModel().icon - icons.forEach { (icon) in - stackBox.append(NSButton(title: "Change \(icon) Icon", target: self, action: #selector(changeIconButtonPressed))) - } - - let scripts = Scripts().info - scripts.forEach { (script) in - stackBox.append(NSButton(title: "\(script.name) Script: \(script.description)", target: self, action: #selector(scriptButtonPressed))) - - } - -// let scriptButton = NSButton(title: "Script", target: self, action: #selector(scriptButtonPressed)) - let appleScriptButton = NSButton(title: "Apple Script", target: self, action: #selector(scriptButtonPressed)) - let etcButton = NSButton(title: "Etc.", target: self, action: #selector(etcButtonPressed)) - -// stackBox.append(scriptButton) - stackBox.append(appleScriptButton) - stackBox.append(etcButton) - let buttonStackView = NSStackView(views: stackBox) - buttonStackView.orientation = .vertical - buttonStackView.distribution = .fillEqually - buttonStackView.spacing = 20 - leftView.addSubview(buttonStackView) - buttonStackView.translatesAutoresizingMaskIntoConstraints = false - NSLayoutConstraint.activate([ - buttonStackView.topAnchor.constraint(equalTo: leftView.topAnchor), - buttonStackView.leadingAnchor.constraint(equalTo: leftView.leadingAnchor), - buttonStackView.trailingAnchor.constraint(equalTo: leftView.trailingAnchor), - buttonStackView.bottomAnchor.constraint(equalTo: leftView.bottomAnchor) - ]) - } - - @objc func changeIconButtonPressed(_ sender: NSButton) { - // Change the content of the right view for icon changing - let icon = sender.title.split(separator: " ").map{String($0)} - print(icon[1]) - menubarVC.menubarStopRunning() - menubarVC.buttonImageChange(icon[1]) - menubarVC.menubarStartRunning() - } - - @objc func scriptButtonPressed(_ sender: NSButton) { - let script = sender.title.split(separator: " ").map{String($0)} - if script[1] == "Script:" { - if let scriptPath = Bundle.main.path(forResource: script[0], ofType: "sh") { - let task = Process() - task.launchPath = "/bin/sh" - task.arguments = [scriptPath] - - let outputPipe = Pipe() - task.standardOutput = outputPipe - task.standardError = outputPipe - - - task.standardError = outputPipe - -// outputPipe.fileHandleForReading.readabilityHandler = { [weak self] fileHandle in -// if #available(OSX 10.15.4, *) { -// if let data = try? fileHandle.readToEnd(), let output = String(data: data, encoding: .utf8) { -// DispatchQueue.main.async { -// if let outputView = self?.outputView { -// outputView.string += "\(output)" -// } else { -// print("outputView is nil") -// } -// } -// } -// } else { -// // Fallback on earlier versions -// } -// } - - - task.launch() - task.waitUntilExit() - -// let outputData = outputPipe.fileHandleForReading.readDataToEndOfFile() -// let output = String(data: outputData, encoding: .utf8) ?? "" -// print("Output: \(output)") - } else { - print("Script not found") - } - } else if sender.title == "Apple Script" { - let appleScriptCode = "display dialog \"Hello, World!\"" - - if let appleScript = NSAppleScript(source: appleScriptCode) { - var errorDict: NSDictionary? = nil - appleScript.executeAndReturnError(&errorDict) - - if let error = errorDict { - print("Error: \(error)") - } - } - } - } - - @objc func etcButtonPressed() { - // Change the content of the right view for etc. - } -} - diff --git a/Box42/QuickSlot/Preferences/View/PreferencesCell.swift b/Box42/QuickSlot/Preferences/View/PreferencesCell.swift new file mode 100644 index 0000000..f9dfadb --- /dev/null +++ b/Box42/QuickSlot/Preferences/View/PreferencesCell.swift @@ -0,0 +1,31 @@ +// +// PreferencesCell.swift +// Box42 +// +// Created by Chanhee Kim on 8/29/23. +// + +import Cocoa +import SnapKit + +class PreferencesCell: NSTableCellView { + + var baseContainerView: NSView = { + let baseView = NSView() + baseView.wantsLayer = true + baseView.layer?.backgroundColor = NSColor.yellow.cgColor + return baseView + }() + + override func awakeFromNib() { + super.awakeFromNib() + self.setupViews() + } + + private func setupViews() { + self.addSubview(baseContainerView) + baseContainerView.snp.makeConstraints { make in + make.edges.equalToSuperview() + } + } +} diff --git a/Box42/QuickSlot/ViewModel/QuickSlotViewModel.swift b/Box42/QuickSlot/ViewModel/QuickSlotViewModel.swift index fe3e1da..ac5e1a5 100644 --- a/Box42/QuickSlot/ViewModel/QuickSlotViewModel.swift +++ b/Box42/QuickSlot/ViewModel/QuickSlotViewModel.swift @@ -12,11 +12,12 @@ class QuickSlotViewModel { @Published var buttons: [QuickSlotButtonModel] = [] init() { - let button1 = QuickSlotButtonModel(title: "clean") - let button2 = QuickSlotButtonModel(title: "icons") - let button3 = QuickSlotButtonModel(title: "scripts") + let button1 = QuickSlotButtonModel(title: QuickSlotUI.title.clean) + let button2 = QuickSlotButtonModel(title: QuickSlotUI.title.preferences) + let button3 = QuickSlotButtonModel(title: QuickSlotUI.title.scripts) + let button4 = QuickSlotButtonModel(title: QuickSlotUI.title.user) - buttons = [button1, button2, button3] + buttons = [button1, button2, button3, button4] } func addButton(_ button: QuickSlotButtonModel) { diff --git a/Box42/View/BoxContentsViewGroup.swift b/Box42/View/BoxContentsViewGroup.swift index 1eb1ee5..b5a0ad3 100644 --- a/Box42/View/BoxContentsViewGroup.swift +++ b/Box42/View/BoxContentsViewGroup.swift @@ -13,17 +13,12 @@ class BoxContentsViewGroup: NSView { var preferencesVC = PreferencesViewController() init() { + super.init(frame: .zero) webVC = WebViewController(nibName: nil, bundle: nil) - - super.init(frame: NSRect(x: 0, y: 0, width: BoxSizeManager.shared.size.width - BoxSizeManager.shared.buttonGroupSize.width, height: BoxSizeManager.shared.buttonGroupSize.height)) - - self.frame.size.width = BoxSizeManager.shared.size.width - BoxSizeManager.shared.buttonGroupSize.width - self.frame.size.height = BoxSizeManager.shared.size.height - self.wantsLayer = true + self.layer?.cornerRadius = 20 + self.layer?.masksToBounds = true self.addSubview(webVC!.view) - - webVC?.view.translatesAutoresizingMaskIntoConstraints = false webVC?.view.snp.makeConstraints { make in make.edges.equalTo(self) } @@ -32,12 +27,7 @@ class BoxContentsViewGroup: NSView { required init?(coder: NSCoder) { fatalError("init(coder:) has not been implemented") } - - override func draw(_ dirtyRect: NSRect) { - super.draw(dirtyRect) - // Drawing code here. - } - + func removeAllSubviews() { for subview in self.subviews { subview.removeFromSuperview() @@ -45,8 +35,11 @@ class BoxContentsViewGroup: NSView { } func showPreferences() { + self.removeAllSubviews() self.addSubview(preferencesVC.view) - preferencesVC.viewDidAppear() + preferencesVC.view.snp.makeConstraints { make in + make.edges.equalToSuperview() + } } func showWebviews(_ sender: NSButton) { From fc6593ba46b921da3837a2aad5af509975935944 Mon Sep 17 00:00:00 2001 From: chanhihi Date: Tue, 29 Aug 2023 18:05:55 +0900 Subject: [PATCH 3/4] build: pbxproj --- Box42.xcodeproj/project.pbxproj | 24 ++++++++++++++++++++++-- 1 file changed, 22 insertions(+), 2 deletions(-) diff --git a/Box42.xcodeproj/project.pbxproj b/Box42.xcodeproj/project.pbxproj index 1b3f925..f06821a 100644 --- a/Box42.xcodeproj/project.pbxproj +++ b/Box42.xcodeproj/project.pbxproj @@ -22,7 +22,6 @@ DE0A91632A8E6A5400D1D6F1 /* Constants.swift in Sources */ = {isa = PBXBuildFile; fileRef = DE0A91622A8E6A5400D1D6F1 /* Constants.swift */; }; DE0A91672A8E6CA700D1D6F1 /* WebViewManager.swift in Sources */ = {isa = PBXBuildFile; fileRef = DE0A91662A8E6CA700D1D6F1 /* WebViewManager.swift */; }; DE0A916D2A8E7DD700D1D6F1 /* HoverButton.swift in Sources */ = {isa = PBXBuildFile; fileRef = DE0A916C2A8E7DD700D1D6F1 /* HoverButton.swift */; }; - DE0A91782A8F014F00D1D6F1 /* WebView.swift in Sources */ = {isa = PBXBuildFile; fileRef = DE0A91772A8F014F00D1D6F1 /* WebView.swift */; }; DE0A917B2A8F0CA800D1D6F1 /* AppleScripts+ShowMessage.swift in Sources */ = {isa = PBXBuildFile; fileRef = DE0A917A2A8F0CA800D1D6F1 /* AppleScripts+ShowMessage.swift */; }; DE0A917F2A8F865400D1D6F1 /* BoxToolbarViewGroup.swift in Sources */ = {isa = PBXBuildFile; fileRef = DE0A917E2A8F865400D1D6F1 /* BoxToolbarViewGroup.swift */; }; DE0A91832A8F889000D1D6F1 /* GoHomePageViaToolbar().swift in Sources */ = {isa = PBXBuildFile; fileRef = DE0A91822A8F889000D1D6F1 /* GoHomePageViaToolbar().swift */; }; @@ -68,6 +67,10 @@ DE6332F22A9BCA2C00DCFAF6 /* QuickSlotScriptsLogicController.swift in Sources */ = {isa = PBXBuildFile; fileRef = DE6332F12A9BCA2C00DCFAF6 /* QuickSlotScriptsLogicController.swift */; }; DE77BA512A82580400713683 /* MenubarViewModel.swift in Sources */ = {isa = PBXBuildFile; fileRef = DE77BA502A82580400713683 /* MenubarViewModel.swift */; }; DE77BA562A82637900713683 /* StateManager.swift in Sources */ = {isa = PBXBuildFile; fileRef = DE77BA552A82637900713683 /* StateManager.swift */; }; + DE77BBA22A9DDC40006CC98B /* FileManager.swift in Sources */ = {isa = PBXBuildFile; fileRef = DE77BBA12A9DDC40006CC98B /* FileManager.swift */; }; + DE77BBA62A9DDF2B006CC98B /* WebView.swift in Sources */ = {isa = PBXBuildFile; fileRef = DE0A91772A8F014F00D1D6F1 /* WebView.swift */; }; + DE77BBAA2A9DE680006CC98B /* GetUserProfile.swift in Sources */ = {isa = PBXBuildFile; fileRef = DE77BBA92A9DE680006CC98B /* GetUserProfile.swift */; }; + DE77BBAF2A9DEBA6006CC98B /* ExcuteScripts.swift in Sources */ = {isa = PBXBuildFile; fileRef = DE77BBAE2A9DEBA6006CC98B /* ExcuteScripts.swift */; }; DE7886012A9C71BE00FE21DD /* IconsViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = DE7886002A9C71BE00FE21DD /* IconsViewController.swift */; }; DE7886042A9C71CB00FE21DD /* IconsView.swift in Sources */ = {isa = PBXBuildFile; fileRef = DE7886032A9C71CB00FE21DD /* IconsView.swift */; }; DE78860C2A9C770300FE21DD /* IconsViewModel.swift in Sources */ = {isa = PBXBuildFile; fileRef = DE78860B2A9C770300FE21DD /* IconsViewModel.swift */; }; @@ -162,6 +165,9 @@ DE6332F12A9BCA2C00DCFAF6 /* QuickSlotScriptsLogicController.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = QuickSlotScriptsLogicController.swift; sourceTree = ""; }; DE77BA502A82580400713683 /* MenubarViewModel.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = MenubarViewModel.swift; sourceTree = ""; }; DE77BA552A82637900713683 /* StateManager.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = StateManager.swift; sourceTree = ""; }; + DE77BBA12A9DDC40006CC98B /* FileManager.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = FileManager.swift; sourceTree = ""; }; + DE77BBA92A9DE680006CC98B /* GetUserProfile.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = GetUserProfile.swift; sourceTree = ""; }; + DE77BBAE2A9DEBA6006CC98B /* ExcuteScripts.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ExcuteScripts.swift; sourceTree = ""; }; DE7886002A9C71BE00FE21DD /* IconsViewController.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = IconsViewController.swift; sourceTree = ""; }; DE7886032A9C71CB00FE21DD /* IconsView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = IconsView.swift; sourceTree = ""; }; DE78860B2A9C770300FE21DD /* IconsViewModel.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = IconsViewModel.swift; sourceTree = ""; }; @@ -398,6 +404,8 @@ DE77BA542A82636500713683 /* Shared */ = { isa = PBXGroup; children = ( + DE77BBA82A9DE674006CC98B /* API */, + DE77BBA12A9DDC40006CC98B /* FileManager.swift */, DE1F1A282A8B50E200A88DD8 /* BoxSizeManager.swift */, DE77BA552A82637900713683 /* StateManager.swift */, DE0A91622A8E6A5400D1D6F1 /* Constants.swift */, @@ -406,6 +414,14 @@ path = Shared; sourceTree = ""; }; + DE77BBA82A9DE674006CC98B /* API */ = { + isa = PBXGroup; + children = ( + DE77BBA92A9DE680006CC98B /* GetUserProfile.swift */, + ); + path = API; + sourceTree = ""; + }; DE7885FD2A9C60C300FE21DD /* Controller */ = { isa = PBXGroup; children = ( @@ -477,6 +493,7 @@ isa = PBXGroup; children = ( DE7886272A9D186700FE21DD /* ScriptsController.swift */, + DE77BBAE2A9DEBA6006CC98B /* ExcuteScripts.swift */, ); path = Controller; sourceTree = ""; @@ -747,9 +764,11 @@ DE44080C2A924B520091937A /* BoxFunctionViewGroup.swift in Sources */, DE97CA7C2A9A7199001073DE /* QuickSlotGroupView.swift in Sources */, DE018BE42A509B1700FF0AA3 /* CPU.swift in Sources */, + DE77BBA22A9DDC40006CC98B /* FileManager.swift in Sources */, DE874F5F2A5935CC00FC3B77 /* String.swift in Sources */, DE0A91862A8F889F00D1D6F1 /* RefreshPageViaToolbar.swift in Sources */, DE874F4E2A591DEA00FC3B77 /* Hotkey.swift in Sources */, + DE77BBA62A9DDF2B006CC98B /* WebView.swift in Sources */, DE0A91832A8F889000D1D6F1 /* GoHomePageViaToolbar().swift in Sources */, DE6332F22A9BCA2C00DCFAF6 /* QuickSlotScriptsLogicController.swift in Sources */, DE018BB32A5099F900FF0AA3 /* AppDelegate.swift in Sources */, @@ -757,6 +776,7 @@ DE0A91632A8E6A5400D1D6F1 /* Constants.swift in Sources */, DE7886172A9CCB3B00FE21DD /* UserProfile.swift in Sources */, DE0A91902A8F88CA00D1D6F1 /* DisplayURLInToolbar.swift in Sources */, + DE77BBAF2A9DEBA6006CC98B /* ExcuteScripts.swift in Sources */, DE018BF32A509B3300FF0AA3 /* MenubarModel.swift in Sources */, DE7A257A2A6D8CA20043225A /* PreferencesViewController.swift in Sources */, DE24E63B2A8FE93900E29F5D /* NSImage.swift in Sources */, @@ -784,6 +804,7 @@ DEB862DC2A85347400278FCD /* Scripts.swift in Sources */, DE1F1A1D2A8B50C500A88DD8 /* BoxContentsViewGroup.swift in Sources */, DE24E6352A8FE02A00E29F5D /* MovableContainerView.swift in Sources */, + DE77BBAA2A9DE680006CC98B /* GetUserProfile.swift in Sources */, DE1F1A362A8BDDDF00A88DD8 /* StorageConfig.swift in Sources */, DE2AD3292A824EEB00002D51 /* Accessibility.swift in Sources */, DE24E6382A8FE10400E29F5D /* BoxBaseSplitView.swift in Sources */, @@ -791,7 +812,6 @@ DE98E8432A98DDFD00F8744A /* QuickSlotViewController.swift in Sources */, DE7886012A9C71BE00FE21DD /* IconsViewController.swift in Sources */, DE1F1A2E2A8BCC9800A88DD8 /* Storage.swift in Sources */, - DE0A91782A8F014F00D1D6F1 /* WebView.swift in Sources */, DE3FF36B2A978A57009C88EF /* WindowButtonViewController.swift in Sources */, DE1F1A312A8BD68F00A88DD8 /* Double.swift in Sources */, DE0A917F2A8F865400D1D6F1 /* BoxToolbarViewGroup.swift in Sources */, From fc8af6c37578f3eca77b73ac704ab59cbcb4084b Mon Sep 17 00:00:00 2001 From: chanhihi Date: Tue, 29 Aug 2023 18:48:48 +0900 Subject: [PATCH 4/4] =?UTF-8?q?fix:=20=EC=BB=B4=ED=8C=8C=EC=9D=BC=20?= =?UTF-8?q?=EC=98=A4=EB=A5=98=20=ED=95=B4=EA=B2=B0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../xcshareddata/swiftpm/Package.resolved | 16 ---------------- .../ButtonGroup/ButtonGroupViewController.swift | 6 +++++- .../Controller/QuickSlotViewController.swift | 2 +- 3 files changed, 6 insertions(+), 18 deletions(-) delete mode 100644 Box42.xcodeproj/project.xcworkspace/xcshareddata/swiftpm/Package.resolved diff --git a/Box42.xcodeproj/project.xcworkspace/xcshareddata/swiftpm/Package.resolved b/Box42.xcodeproj/project.xcworkspace/xcshareddata/swiftpm/Package.resolved deleted file mode 100644 index 19d4e8c..0000000 --- a/Box42.xcodeproj/project.xcworkspace/xcshareddata/swiftpm/Package.resolved +++ /dev/null @@ -1,16 +0,0 @@ -{ - "object": { - "pins": [ - { - "package": "SnapKit", - "repositoryURL": "https://github.com/SnapKit/SnapKit.git", - "state": { - "branch": null, - "revision": "f222cbdf325885926566172f6f5f06af95473158", - "version": "5.6.0" - } - } - ] - }, - "version": 1 -} diff --git a/Box42/ButtonGroup/ButtonGroupViewController.swift b/Box42/ButtonGroup/ButtonGroupViewController.swift index 2101feb..d2cb6f1 100644 --- a/Box42/ButtonGroup/ButtonGroupViewController.swift +++ b/Box42/ButtonGroup/ButtonGroupViewController.swift @@ -9,7 +9,7 @@ import Cocoa class ButtonGroupViewController: NSViewController { override func loadView() { -// let ButtonViewGroup = BoxButtonViewGroup() +// let ButtonViewGroup = BoxButtonViewGroup(clickAction: clickAction) let ButtonViewGroup = NSView() ButtonViewGroup.wantsLayer = true ButtonViewGroup.layer?.backgroundColor = NSColor.black.cgColor @@ -20,6 +20,10 @@ class ButtonGroupViewController: NSViewController { super.viewDidLoad() } + func clickAction(_ sender: NSButton?) { + print("click Action") + } + func preference() { print("preference") } diff --git a/Box42/QuickSlot/Controller/QuickSlotViewController.swift b/Box42/QuickSlot/Controller/QuickSlotViewController.swift index 177b5f9..47e6a29 100644 --- a/Box42/QuickSlot/Controller/QuickSlotViewController.swift +++ b/Box42/QuickSlot/Controller/QuickSlotViewController.swift @@ -26,7 +26,7 @@ class QuickSlotViewController: NSViewController { @objc func handleButtonTapped(notification: NSNotification) { if let button = notification.object as? NSButton { - print("Button with title \(button.title) was tapped") + print("Button with title \(button.title) was tapped in QuickSlotView") } } }