Post

Replies

Boosts

Views

Activity

contextMenu and right click
Hi, I made a "Finder view" with SwiftUI, how is it possible to call viewModel.selectFileWithAnimation(file) when .contextMenu show? Thank you! @StateObject private var viewModel = FilesViewModel() // Use the view model to manage data and logic var body: some View { VStack { // Horizontal scrolling of files and folders ScrollView(.horizontal, showsIndicators: false) { if viewModel.sortedAndFilteredFolderContents.isEmpty { // Show "No Results" if no files or folders found Text("No Results") .font(.headline) .foregroundColor(.almostWhite) .padding() } else { HStack(spacing: 20) { ForEach(viewModel.sortedAndFilteredFolderContents, id: \.self) { file in VStack { ZStack { // Selection effect without matchedGeometryEffect if viewModel.selectedFile == file { RoundedRectangle(cornerRadius: 10) .fill(Color.blue.opacity(0.2)) .transition(.opacity) .frame(width: 80, height: 100) .animation(.easeInOut(duration: 0.3), value: viewModel.selectedFile) } VStack { Image(nsImage: viewModel.getFileIcon(for: file)) .resizable() .frame(width: 64, height: 64) .onTapGesture(count: 2) { // Select and open file/folder on double-tap viewModel.selectFileWithAnimation(file) viewModel.openFileOrFolder(file) } .onTapGesture { viewModel.selectFileWithAnimation(file) } .onLongPressGesture(minimumDuration: 0.5) { // Rename file with long press viewModel.rename(file) } .contextMenu { // Define your context menu buttons here Button(action: { viewModel.showInFinder(file) }) { Text("Show in Finder") Image(systemName: "folder") } Button(action: { viewModel.moveToTrash(file) }) { Text("Move to Trash") Image(systemName: "trash") } Button(action: { viewModel.rename(file) }) { Text("Rename") Image(systemName: "pencil") } Button(action: { viewModel.makeAlias(for: file) }) { Text("Make Alias") Image(systemName: "link") } Button(action: { viewModel.compress(file) }) { Text("Compress \(file.lastPathComponent)") Image(systemName: "archivebox") } Button(action: { viewModel.copyFile(file) }) { Text("Copy") Image(systemName: "doc.on.doc") } Button(action: { viewModel.shareFile(file, in: dynaClip.view) }) { Text("Share") Image(systemName: "square.and.arrow.up") } } Text(file.lastPathComponent) .font(.caption) .lineLimit(1) .truncationMode(.tail) .frame(width: 80) } } } } } .padding(.top, 20) } }
1
0
259
Sep ’24
Can't typing on NSTextField
Hi, I just did a NSTextField with auto complete that show a cities menu bar the problem is when I typing the first letter, the focus change to the menubar and if I try to write another letter it just replace the first letter and not add it how can I fix it? Thank you! class NSTextFieldAuto: NSTextField, NSMenuDelegate, NSTextFieldDelegate { var suggestionMenu: NSMenu? var selectedSuggestionIndex: Int? override func awakeFromNib() { super.awakeFromNib() self.delegate = self self.suggestionMenu = NSMenu() self.suggestionMenu?.delegate = self } override func mouseDown(with event: NSEvent) { super.mouseDown(with: event) // Deselect all text when the text field is clicked } override func textDidChange(_ notification: Notification) { super.textDidChange(notification) print("Still typing") updateSuggestionMenu() showSuggestionMenu() } override func textDidEndEditing(_ notification: Notification) { print("Finished typing") cityDef.setValue(self.stringValue, forKey: cityDefKey) } func updateSuggestionMenu() { self.suggestionMenu?.removeAllItems() let searchText = self.stringValue.lowercased() for (index, city) in allCities.enumerated() { if city.lowercased().hasPrefix(searchText) { let item = NSMenuItem(title: city, action: #selector(selectSuggestion(_:)), keyEquivalent: "") item.target = self self.suggestionMenu?.addItem(item) } } } func showSuggestionMenu() { if let menu = self.suggestionMenu, !menu.items.isEmpty { let textFieldRect = self.bounds let origin = NSPoint(x: textFieldRect.origin.x + 100.0, y: textFieldRect.origin.y + textFieldRect.size.height) menu.autoenablesItems = false menu.popUp(positioning: nil, at: origin, in: self) } } @objc func selectSuggestion(_ sender: NSMenuItem) { self.stringValue = sender.title } override func cancelOperation(_ sender: Any?) { self.suggestionMenu?.cancelTracking() self.window?.becomeFirstResponder() } func menuDidClose(_ menu: NSMenu) { self.window?.makeFirstResponder(self) // Set text field as first responder again print("Close menu") } override func becomeFirstResponder() -> Bool { let result = super.becomeFirstResponder() self.selectedSuggestionIndex = nil // Reset selected suggestion index return result } }
3
0
569
Jun ’24
IBAction not work with scrollview
Hi, I'm using NSSplitViewController and once I load a viewcontroller with scrollview the IBActions of NSSwitch,NSButtons etc not work after I added the scrollview How can I fix it? import Foundation //Categories Protocal delegate protocol CategoriesViewControllerDelegate: AnyObject { func didSelectCategory(category: String) } class DetailViewController:NSViewController, NSOutlineViewDataSource, CategoriesViewControllerDelegate { weak var delegate: CategoriesViewControllerDelegate? override func viewDidLoad() { // Other setup code... detViewController = self loadViewControllerWithScrollView(GeneralSettingsViewController.self, storyboardIdentifier: "GeneralSettingsViewController", originalViewController: self) } func didSelectCategory(category: String) { // Handle the selected category in DetailViewController print("Selected category: \(category)") // Load the corresponding view controller or perform any other actions switch category { case "General": // Load GeneralSettingsViewController // Example: self.replaceCurrentViewController(with: GeneralSettingsViewController()) print("Load GeneralSettingsViewController") loadViewControllerWithScrollView(GeneralSettingsViewController.self, storyboardIdentifier: "GeneralSettingsViewController", originalViewController: self) case "DynaMusiX": // Load DynaMusicSettingsViewController // Example: self.replaceCurrentViewController(with: DynaMusicSettingsViewController()) print("Load DynaMusicSettingsViewController") loadViewControllerWithScrollView(DynaMusicSettingsViewController.self, storyboardIdentifier: "DynaMusicSettingsViewController", originalViewController: self) case "DynaGlance": // Load DynaGlanceSettingsViewController // Example: self.replaceCurrentViewController(with: DynaGlanceSettingsViewController()) print("Load DynaGlanceSettingsViewController") loadViewControllerWithScrollView(DynaGlanceSettingsViewController.self, storyboardIdentifier: "DynaGlanceSettingsViewController", originalViewController: self) default: break } } } //Load viewcontroller with scrollview func loadViewControllerWithScrollView<T: NSViewController>(_ viewControllerType: T.Type, storyboardIdentifier: String, originalViewController: NSViewController) { let storyboard = NSStoryboard(name: NSStoryboard.Name("Main"), bundle: nil) let newViewController = storyboard.instantiateController(withIdentifier: NSStoryboard.SceneIdentifier(storyboardIdentifier)) as! T // Remove existing child view controllers for childVC in originalViewController.children { childVC.removeFromParent() childVC.view.removeFromSuperview() } // Wrap the new view controller's view in a scroll view let scrollView = NSScrollView() scrollView.documentView = newViewController.view scrollView.autoresizingMask = [.width, .height] scrollView.hasVerticalScroller = true scrollView.hasHorizontalScroller = false scrollView.contentView.scroll(to: NSPoint(x: 0, y: newViewController.view.frame.height)) scrollView.translatesAutoresizingMaskIntoConstraints = true // Set user interaction for the content view inside the scroll view scrollView.documentView?.translatesAutoresizingMaskIntoConstraints = true scrollView.documentView?.needsLayout = true // Add the scroll view as a subview of the original view controller originalViewController.view.addSubview(scrollView) scrollView.frame = originalViewController.view.bounds scrollView.layer?.zPosition = -1 } t
0
0
335
Feb ’24
Resize NSProgressIndicator
Hi, How is it possible to make NSProgressIndicator smaller ? When I use style property the thickness is also change This is the size that I want (it's from Xcode) it's with regular size style but it's smaller in size And this is my attempt
0
0
354
Feb ’24
NSWindow not release memory
Hi, How can I release my NSWindow manually? when the user tap on red close button? @objc func windowWillClose() { // Handle the window closing event here // You can perform any necessary cleanup or ask the user for confirmation // Return true to allow the window to close _window?.contentViewController = nil _window?.delegate = nil _window = nil NotificationCenter.default.removeObserver(self, name: NSWindow.willCloseNotification, object: nil) } //Settings cell tap @objc func settingsItemClicked () { //_window:NSWindow? NotificationCenter.default.addObserver(self, selector: #selector(windowWillClose), name: NSWindow.willCloseNotification, object:_window) if _window?.isVisible == false { // Load the view controller from the storyboard let storyboard = NSStoryboard(name: "Main", bundle: nil) guard let ViewController = storyboard.instantiateController(withIdentifier: "SettingsViewController") as? SettingsViewController else { fatalError("Unable to instantiate SettingsViewController from storyboard.") } // _window.delegate = self // Set the view controller as the content view controller of the window _window?.contentViewController = ViewController _window?.isReleasedWhenClosed = false _window?.hidesOnDeactivate = true // Set the window's title _window?.title = "DynamicLake" // Show the window _window?.makeKeyAndOrderFront(self) }else{ print("The settings view is already open") } }
2
0
820
Aug ’23