Skip to content
Draft
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
139 commits
Select commit Hold shift + click to select a range
47d60dd
Add annotation.
dkocher Sep 15, 2025
2d3eb32
Increase padding.
dkocher Sep 15, 2025
52684f8
Increase height and add padding in bottom bar.
dkocher Sep 15, 2025
a27ec96
Review view layout.
dkocher Sep 15, 2025
82878ed
Use system symbols.
dkocher Sep 15, 2025
ab5ff74
Remove fill in symbols.
dkocher Sep 15, 2025
ae49488
Changes.
dkocher Sep 16, 2025
f87de8f
Switch to constraint layout.
dkocher Sep 23, 2025
7525c73
Use system icons.
dkocher Sep 30, 2025
cbe5fb1
Add system icons for menu items.
dkocher Sep 30, 2025
4f4c082
Add implementation to run alerts as popover.
dkocher Oct 5, 2025
7f0f75b
Remove URL field.
dkocher Oct 5, 2025
44e1ad5
Use system images.
dkocher Oct 23, 2025
9c6fca9
Remove custom disclosable view implementation.
dkocher Oct 24, 2025
925fc28
Switch to constraint layout. Use popover for file details.
dkocher Oct 25, 2025
74a4e38
Use system image.
dkocher Oct 26, 2025
97cf192
Allow custom positioning rect.
dkocher Oct 26, 2025
fe115af
Auto resize window from constraints.
dkocher Oct 26, 2025
a442e6d
Rename field.
dkocher Oct 26, 2025
8b88365
Remove toggle.
dkocher Oct 26, 2025
1cab344
Remove comment field.
dkocher Oct 26, 2025
dcb740d
Add keyword.
dkocher Oct 26, 2025
528a883
Display bookmark window as popover.
dkocher Oct 26, 2025
1c6292d
Replace with lambda.
dkocher Oct 27, 2025
9e37f7e
Add flag for popover or floating window display.
dkocher Oct 27, 2025
663e51c
Switch to constraint layout.
dkocher Oct 27, 2025
6bbeee0
Hide controls when configuration option not available.
dkocher Oct 27, 2025
03d1665
Move field up.
dkocher Oct 27, 2025
2da31e4
Change to local scope.
dkocher Oct 27, 2025
ae737a3
Move field up.
dkocher Oct 27, 2025
0cde9fb
Use regular bookmark panel.
dkocher Oct 27, 2025
e6ddf40
Add images for local and server URL.
dkocher Oct 27, 2025
2be8bf0
Move to upper class.
dkocher Oct 28, 2025
a17d8d0
Add setter for translating auto resize mask to constraints.
dkocher Oct 29, 2025
454930d
Bookmark editing frame with content view loaded separately.
dkocher Oct 30, 2025
b9be4ba
New connection editing frame with content view loaded separately.
dkocher Oct 30, 2025
60ba084
Allow custom behaviour.
dkocher Oct 30, 2025
6794d82
Synchronize access.
dkocher Oct 30, 2025
dc3aa99
Move out of window.
dkocher Oct 30, 2025
c3f8f89
Remove non-generic controls.
dkocher Oct 31, 2025
1788e58
Add options.
dkocher Oct 31, 2025
1e0c5a8
Default to utility panel.
dkocher Oct 31, 2025
1f6bfb4
Reuse content view to edit bookmark.
dkocher Oct 31, 2025
c08f93f
Implement tabs.
dkocher Oct 31, 2025
cfeca1c
Resize on tab selection change.
dkocher Oct 31, 2025
a63e0c8
Rename class.
dkocher Nov 1, 2025
3c9f232
Rename outlets.
dkocher Nov 1, 2025
afed73c
Remove custom class in file owner
dkocher Nov 2, 2025
59c13a3
Remove custom class in file owner
dkocher Nov 2, 2025
f790058
Remove custom class in file owner
dkocher Nov 2, 2025
8badfab
Refactor using inheritance loading both container and content XIB int…
dkocher Nov 2, 2025
8a2f3a5
Set window title from bookmark.
dkocher Nov 2, 2025
c75c348
Make controls regular sized.
dkocher Nov 2, 2025
f0eb677
Transparent title bar.
dkocher Nov 2, 2025
372933e
Add "Connect" and "Disconnect" menu items to "Go" menu.
dkocher Nov 3, 2025
9ecd622
Add "Connect" and "Disconnect" menu items to context menu.
dkocher Nov 3, 2025
b29d369
Updated constraints.
dkocher Nov 3, 2025
1476504
Move to upper class.
dkocher Nov 4, 2025
00b7826
Set ascent colour.
dkocher Nov 4, 2025
4eed08f
Javadoc.
dkocher Nov 4, 2025
f923058
Do not set application name in window title.
dkocher Nov 4, 2025
f9a18d9
Extract navigation controller.
dkocher Nov 4, 2025
b6535d2
Allow annotating methods.
dkocher Nov 4, 2025
c4a1e64
Extract status controller.
dkocher Nov 4, 2025
c954133
Add type.
dkocher Nov 4, 2025
f3828fc
Skip manually setting first responder.
dkocher Nov 4, 2025
f477ce9
Always reload after setting filter.
dkocher Nov 4, 2025
20c703d
Recalculate key loop after toggling controls.
dkocher Nov 4, 2025
0ddc54d
Add NSWindowStyleMask constants.
dkocher Nov 5, 2025
36d08d0
Remove unnecessary variable.
dkocher Nov 5, 2025
7bc352b
Set window title and subtitle depending on selected tab.
dkocher Nov 5, 2025
a10214f
Formatting.
dkocher Nov 5, 2025
e040d7b
Javadoc.
dkocher Nov 5, 2025
daeb5f6
Remove custom configuration.
dkocher Nov 5, 2025
e0aaccb
Formatting.
dkocher Nov 5, 2025
5f4d928
Explicitly set transparent titlebar.
dkocher Nov 5, 2025
bf49e35
Add observer in constructor to notify collection.
dkocher Nov 6, 2025
15b3ec3
Always create new controller when displayed in popover.
dkocher Nov 6, 2025
469b20a
Revert "Default to utility panel."
dkocher Nov 6, 2025
48ba5bc
Add constraints.
dkocher Nov 6, 2025
73b5bc4
Auto configure on username change.
dkocher Nov 6, 2025
38fa3fe
Use intrinsic size to fix proper resize of popover.
dkocher Nov 6, 2025
8c5587b
Switch to icon only default mode for toolbar.
dkocher Nov 6, 2025
1d3c4ba
Javadoc.
dkocher Nov 7, 2025
3614279
Set window level.
dkocher Nov 7, 2025
7acfbf2
Update recommended settings.
dkocher Nov 7, 2025
fd5f5a4
Add progress indicator in browser view.
dkocher Nov 7, 2025
e54a30d
Register handler to close self.
dkocher Nov 7, 2025
ee91bd7
Add constructor.
dkocher Nov 8, 2025
51fe638
Formatting.
dkocher Nov 8, 2025
7ac8caf
Add annotations.
dkocher Nov 9, 2025
6c0eb70
Change implementation for view based table view.
dkocher Nov 10, 2025
8b108f4
Remove default override.
dkocher Sep 9, 2023
c0e023e
Fix implementation of menuForEvent to use outline view delgate.
dkocher Aug 13, 2023
4d243fa
Add NSUserInterfaceItemIdentification protocol.
dkocher Nov 11, 2025
dab99b9
Forward double action to delegate.
dkocher Nov 11, 2025
da7601a
Redundant override.
dkocher Nov 11, 2025
da41f2b
Remove unnecessary notification.
dkocher Nov 11, 2025
fc9b512
Remove custom click handling.
dkocher Nov 11, 2025
5836350
Add missing type.
dkocher Nov 11, 2025
08cbb03
Add missing type.
dkocher Nov 11, 2025
bdddc6a
Set prior notifying listeners.
dkocher Nov 11, 2025
65b554a
Add mappings for layout.
dkocher Nov 12, 2025
3a217d5
Delete unused.
dkocher Nov 12, 2025
b6e634e
Update view to use constraints.
dkocher Nov 12, 2025
d63c337
Update view to use constraints.
dkocher Nov 12, 2025
9a37821
Add generic type.
dkocher Nov 12, 2025
9b38e5c
Review outlets.
dkocher Nov 12, 2025
60d6a13
Update view to use constraints.
dkocher Nov 12, 2025
20540e2
Update view to use constraints.
dkocher Nov 12, 2025
50fcdf9
Bump version.
dkocher Nov 13, 2025
5503503
Update view to use constraints.
dkocher Nov 13, 2025
2d10df5
Set min width constraint.
dkocher Nov 13, 2025
299b1d0
Update view to use constraints.
dkocher Nov 13, 2025
2f17910
Update view to use constraints.
dkocher Nov 14, 2025
c0a99b4
Formatting.
dkocher Nov 14, 2025
81b5c22
Add accessor for view controller.
dkocher Nov 16, 2025
6776055
Add content border setters.
dkocher Nov 16, 2025
1432f20
Change alert to image view.
dkocher Nov 17, 2025
4c06af7
Add annotations.
dkocher Nov 17, 2025
f2a9639
Update constraints.
dkocher Nov 17, 2025
decd5d8
Remove redundant custom highlighting.
dkocher Nov 17, 2025
801c5ac
Add annotations.
dkocher Nov 17, 2025
d3109b4
Inline progress and buttons.
dkocher Nov 17, 2025
418ece0
Ignore xcuserdata.
dkocher Nov 17, 2025
bf96b88
Add annotations.
dkocher Nov 17, 2025
a184b38
Add annotations.
dkocher Nov 17, 2025
ce0ed3a
Adjust height only on content change.
dkocher Nov 17, 2025
73049d9
Allow moving window.
dkocher Nov 17, 2025
5977e28
Set double action.
dkocher Nov 17, 2025
5f59a63
Add annotations.
dkocher Nov 17, 2025
bfb40bb
No hyperlink for URL.
dkocher Nov 17, 2025
cefa903
Single item for title and description.
dkocher Nov 17, 2025
f0ef014
Fix display of spinner on connect.
dkocher Nov 17, 2025
0c0cb28
Add bottom window border.
dkocher Nov 17, 2025
7496da6
Align buttons.
dkocher Nov 17, 2025
67e84d4
Use threaded animation.
dkocher Nov 18, 2025
1ce9d13
Validate all options.
dkocher Nov 19, 2025
601a44e
Draw background.
dkocher Nov 19, 2025
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
The table of contents is too big for display.
Diff view
Diff view
  •  
  •  
  •  
1 change: 1 addition & 0 deletions .gitignore
Original file line number Diff line number Diff line change
Expand Up @@ -3,6 +3,7 @@ target
!.idea/codeStyleSettings.xml
!.idea/copyright
*.iml
xcuserdata/*

# VSCode/Java #
###############
Expand Down
1 change: 1 addition & 0 deletions CHANGELOG.md
Original file line number Diff line number Diff line change
Expand Up @@ -5,6 +5,7 @@
* [Feature] Connect with Multi-Bucket Application Keys that grant access to a specific group of buckets within an
account, including the option to limit access based on a single file prefix (
B2) ([#17139](https://trac.cyberduck.io/ticket/17139))
* [Feature] Support for Liquid Glass (macOS) ([#17459](https://trac.cyberduck.io/ticket/17459))
* [Feature] Connect with connection profile obtaining temporary credentials from AWS Security Token Service (STS) by
assuming role with optional Multi-Factor Authentication (MFA) input (
S3) ([#17437](https://trac.cyberduck.io/ticket/17437))
Expand Down
2 changes: 0 additions & 2 deletions Credits.rtf
Original file line number Diff line number Diff line change
Expand Up @@ -39,8 +39,6 @@
\cf3 Synapticloop\
\cf0 {\field{\*\fldinst{HYPERLINK "http://zathras.de/"}}{\fldrslt UKCrashReporter}}\
\cf3 M. Uli Kusterer\
\cf0 {\field{\*\fldinst{HYPERLINK "http://www.snoize.com/"}}{\fldrslt SNDisclosableView}}\
\cf3 Kurt Revis\
\cf0 {\field{\*\fldinst{HYPERLINK "https://opensource.apple.com/tarballs/mDNSResponder/"}}{\fldrslt mDNSResponder}}\
\cf3 Apple Inc.\
\cf0 {\field{\*\fldinst{HYPERLINK "https://sparkle-project.org/"}}{\fldrslt Sparkle}}\
Expand Down
168 changes: 140 additions & 28 deletions Cyberduck.xcodeproj/project.pbxproj

Large diffs are not rendered by default.

Original file line number Diff line number Diff line change
Expand Up @@ -30,13 +30,17 @@
import ch.cyberduck.core.Factory;
import ch.cyberduck.core.FactoryException;

import ch.cyberduck.core.LocaleFactory;

import org.apache.commons.lang3.StringUtils;
import org.apache.logging.log4j.LogManager;
import org.apache.logging.log4j.Logger;

public abstract class BundleController extends ProxyController {
private static final Logger log = LogManager.getLogger(BundleController.class);

protected static final String DEFAULT = LocaleFactory.localizedString("Default");

public static final NSMutableParagraphStyle PARAGRAPH_STYLE_LEFT_ALIGNMENT_TRUNCATE_MIDDLE;
public static final NSMutableParagraphStyle PARAGRAPH_STYLE_LEFT_ALIGNMENT_TRUNCATE_TAIL;
public static final NSMutableParagraphStyle PARAGRAPH_STYLE_RIGHT_ALIGNMENT_TRUNCATE_TAIL;
Expand Down
2 changes: 1 addition & 1 deletion binding/src/main/java/ch/cyberduck/binding/Outlet.java
Original file line number Diff line number Diff line change
Expand Up @@ -22,7 +22,7 @@
import java.lang.annotation.ElementType;
import java.lang.annotation.RetentionPolicy;

@java.lang.annotation.Target({ElementType.FIELD})
@java.lang.annotation.Target({ElementType.FIELD, ElementType.METHOD})
@java.lang.annotation.Retention(RetentionPolicy.SOURCE)
public @interface Outlet {
}
134 changes: 132 additions & 2 deletions binding/src/main/java/ch/cyberduck/binding/ProxyController.java
Original file line number Diff line number Diff line change
Expand Up @@ -17,9 +17,15 @@

import ch.cyberduck.binding.application.NSAlert;
import ch.cyberduck.binding.application.NSApplication;
import ch.cyberduck.binding.application.NSPopover;
import ch.cyberduck.binding.application.NSView;
import ch.cyberduck.binding.application.NSViewController;
import ch.cyberduck.binding.application.NSWindow;
import ch.cyberduck.binding.application.SheetCallback;
import ch.cyberduck.binding.application.WindowListener;
import ch.cyberduck.binding.foundation.FoundationKitFunctions;
import ch.cyberduck.binding.foundation.NSNotification;
import ch.cyberduck.binding.foundation.NSObject;
import ch.cyberduck.binding.foundation.NSThread;
import ch.cyberduck.core.AbstractController;
import ch.cyberduck.core.threading.DefaultMainAction;
Expand All @@ -28,11 +34,14 @@
import org.apache.logging.log4j.LogManager;
import org.apache.logging.log4j.Logger;
import org.rococoa.ID;
import org.rococoa.cocoa.foundation.NSRect;
import org.rococoa.cocoa.foundation.NSSize;

import java.util.HashSet;
import java.util.Set;
import java.util.concurrent.CountDownLatch;
import java.util.concurrent.atomic.AtomicInteger;
import java.util.concurrent.atomic.AtomicReference;

import com.google.common.util.concurrent.Uninterruptibles;

Expand Down Expand Up @@ -153,6 +162,16 @@ public int alert(final SheetController sheet, final AlertRunner runner, final Co
protected static final Set<AlertRunner> alerts
= new HashSet<>();

/**
* @param sheet Controller for alert window
* @param callback Handler invoked after sheet is dismissed with selected option
* @param runner Implementation to display alert window
* @return Selected alert option by user
*/
public int alert(final SheetController sheet, final SheetCallback callback, final AlertRunner runner) {
return this.alert(sheet, callback, runner, new CountDownLatch(1));
}

/**
* Display as sheet attached to window of parent controller
*
Expand All @@ -164,7 +183,9 @@ public int alert(final SheetController sheet, final AlertRunner runner, final Co
*/
public int alert(final SheetController sheet, final SheetCallback callback, final AlertRunner runner, final CountDownLatch signal) {
log.debug("Alert with runner {} and callback {}", runner, callback);
alerts.add(runner);
synchronized(alerts) {
alerts.add(runner);
}
final AtomicInteger option = new AtomicInteger(SheetCallback.CANCEL_OPTION);
final CountDownLatch state = new CountDownLatch(1);
final SheetCallback.DelegatingSheetCallback chain = new SheetCallback.DelegatingSheetCallback(new SheetCallback.ReturnCodeSheetCallback(option), sheet, callback);
Expand All @@ -174,7 +195,11 @@ public void run() {
log.info("Load bundle for alert {}", sheet);
sheet.loadBundle();
runner.alert(sheet.window(), new SheetCallback.DelegatingSheetCallback(new SignalSheetCallback(state),
chain, new SignalSheetCallback(signal), (returncode) -> alerts.remove(runner)));
chain, new SignalSheetCallback(signal), (returncode) -> {
synchronized(alerts) {
alerts.remove(runner);
}
}));
}
}, true);
if(!NSThread.isMainThread()) {
Expand Down Expand Up @@ -310,4 +335,109 @@ public void callback(final int returncode) {
signal.countDown();
}
}

public static final class PopoverAlertRunner extends Proxy implements AlertRunner, AlertRunner.CloseHandler, WindowListener {
private final NSPopover popover = NSPopover.create();
private final NSView positioningView;
private final NSRect positioningRect;
private final SheetController controller;
private final AtomicReference<Proxy> reference = new AtomicReference<>();
private final AtomicInteger option = new AtomicInteger(SheetCallback.CANCEL_OPTION);
private final int behaviour;

public PopoverAlertRunner(final NSView positioningView, final SheetController controller) {
this(positioningView, positioningView.frame(), controller);
}

public PopoverAlertRunner(final NSView positioningView, final SheetController controller, final int behaviour) {
this(positioningView, positioningView.frame(), controller, behaviour);
}

public PopoverAlertRunner(final NSView positioningView, final NSRect positioningRect, final SheetController controller) {
this(positioningView, positioningRect, controller, NSPopover.NSPopoverBehaviorSemitransient);
}

public PopoverAlertRunner(final NSView positioningView, final NSRect positioningRect, final SheetController controller, final int behaviour) {
this.positioningView = positioningView;
this.positioningRect = positioningRect;
this.controller = controller;
this.controller.addHandler(this);
this.behaviour = behaviour;
}

@Override
public void alert(final NSWindow sheet, final SheetCallback callback) {
NSApplication.sharedApplication().activateIgnoringOtherApps(true);
final Proxy proxy = new PopoverDelegate(controller, option, callback);
reference.set(proxy);
popover.setDelegate(proxy.id());
popover.setAnimates(false);
popover.setBehavior(behaviour);
final NSViewController viewController = NSViewController.create();
viewController.setView(sheet.contentView());
popover.setContentViewController(viewController);
popover.showRelativeToRect_ofView_preferredEdge(positioningRect, positioningView,
FoundationKitFunctions.NSRectEdge.NSMinYEdge);
controller.addListener(this);
}

@Override
public void windowDidResize(final NSSize windowFrame) {
log.debug("Resize popover to {}", windowFrame);
final NSSize intrinsicContentSize = controller.view().intrinsicContentSize();
// Adjust height only
popover.setContentSize(new NSSize(popover.contentSize().width.doubleValue(), intrinsicContentSize.height.doubleValue()));
}

@Override
public void closed(final NSWindow sheet, final int returncode) {
option.set(returncode);
popover.performClose(null);
}
}

public static final class PopoverDelegate extends Proxy {
private final SheetController controller;
private final AtomicInteger returncode;
private final SheetCallback callback;

public PopoverDelegate(final SheetController controller, final AtomicInteger returncode, final SheetCallback callback) {
this.controller = controller;
this.returncode = returncode;
this.callback = callback;
}

@Delegate
public void popoverWillClose(final NSNotification notification) {
final NSObject popoverCloseReasonValue = notification.userInfo().objectForKey(NSPopover.NSPopoverCloseReasonKey);
if(popoverCloseReasonValue != null) {
if(NSPopover.NSPopoverCloseReasonValue.NSPopoverCloseReasonStandard.equals(popoverCloseReasonValue.toString())) {
log.debug("Notify {} of return code {}", callback, returncode.get());
// No window close notification for popover
controller.invalidate();
callback.callback(returncode.get());
}
else {
log.debug("Ignore notification {}", notification);
}
}
}

@Delegate
public boolean popoverShouldDetach(final NSPopover popover) {
return true;
}
}

/**
* Adjust frame of subview to match the parent view and attach with translating autoresizing mask into constraints
*
* @param parent Container View
* @param subview Content View
*/
protected void addSubview(final NSView parent, final NSView subview) {
subview.setTranslatesAutoresizingMaskIntoConstraints(true);
subview.setFrame(parent.bounds());
parent.addSubview(subview);
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -75,12 +75,10 @@ public void closeSheet(final NSButton sender) {
public void closeSheetWithOption(int option) {
log.debug("Close sheet with option {}", option);
window.endEditingFor(null);
if(option == SheetCallback.DEFAULT_OPTION || option == SheetCallback.ALTERNATE_OPTION) {
if(!this.validate(option)) {
log.warn("Failed validation with option {}", option);
AppKitFunctionsLibrary.beep();
return;
}
if(!this.validate(option)) {
log.warn("Failed validation with option {}", option);
AppKitFunctionsLibrary.beep();
return;
}
handlers.forEach(h -> h.closed(window, option));
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -47,8 +47,6 @@
public abstract class WindowController extends BundleController implements NSWindow.Delegate {
private static final Logger log = LogManager.getLogger(WindowController.class);

protected static final String DEFAULT = LocaleFactory.localizedString("Default");

protected final Set<WindowListener> listeners
= Collections.synchronizedSet(new HashSet<>());
/**
Expand Down Expand Up @@ -89,6 +87,7 @@ public void setWindow(final NSWindow window) {
this.window.recalculateKeyViewLoop();
this.window.setReleasedWhenClosed(true);
this.window.setDelegate(this.id());
this.window.setLevel(NSWindow.NSWindowLevel.NSNormalWindowLevel);
this.window.setCollectionBehavior(window.collectionBehavior()
| NSWindow.NSWindowCollectionBehavior.NSWindowCollectionBehaviorTransient);
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -102,6 +102,14 @@ public static NSPopover create() {
*/
public abstract void setContentViewController(NSViewController controller);

/**
* You must set the content view controller of the popover before the popover is shown. Changes to the popover’s content
* view controller while the popover is shown will cause the popover to animate if the animates property is true.
*
* @return The view controller that manages the content of the popover.
*/
public abstract NSViewController contentViewController();

/**
* Shows the popover anchored to the specified view.
* <p>
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -27,9 +27,11 @@
import ch.cyberduck.binding.foundation.NSURL;

import org.rococoa.ID;
import org.rococoa.Selector;
import org.rococoa.cocoa.CGFloat;
import org.rococoa.cocoa.foundation.NSInteger;
import org.rococoa.cocoa.foundation.NSPoint;
import org.rococoa.cocoa.foundation.NSRect;
import org.rococoa.cocoa.foundation.NSUInteger;

/// <i>native declaration : :69</i>
Expand Down Expand Up @@ -260,6 +262,20 @@ public interface Delegate {
*/
public abstract CGFloat rowHeight();

/**
*
* @param enable A Boolean value that indicates whether the table view uses autolayout to calculate the height of rows.
* @since macOS 10.13+
*/
public abstract void setUsesAutomaticRowHeights(boolean enable);

/**
*
* @return A Boolean value that indicates whether the table view uses autolayout to calculate the height of rows.
* @since macOS 10.13+
*/
public abstract boolean usesAutomaticRowHeights();

/**
* If the delegate implements -tableView:heightOfRow:, this method immediately re-tiles the table view using row
* heights it provides.<br> Original signature : <code>void noteHeightOfRowsWithIndexesChanged(NSIndexSet*)</code><br>
Expand Down Expand Up @@ -394,13 +410,13 @@ public interface Delegate {
* Original signature : <code>void setDoubleAction(SEL)</code><br>
* <i>native declaration : :175</i>
*/
public abstract void setDoubleAction(org.rococoa.Selector aSelector);
public abstract void setDoubleAction(Selector aSelector);

/**
* Original signature : <code>SEL doubleAction()</code><br>
* <i>native declaration : :176</i>
*/
public abstract org.rococoa.Selector doubleAction();
public abstract Selector doubleAction();

/**
* Sorting Support<br> The array of sort descriptors is archived. Sort descriptors will persist along with other
Expand Down Expand Up @@ -841,4 +857,14 @@ public void editRow(NSInteger column, NSInteger row, boolean select) {
* <i>from NSDeprecated native declaration : :528</i><br>
* Conversion Error : NSRect
*/

/**
* Returns the rectangle containing the row at the specified index.
*
* @param row Table row
* @return The rectangle containing the row at rowIndex. Returns NSZeroRect if rowIndex lies outside the
* range of valid row indexes for the table view.
*/
public abstract NSRect rectOfRow(NSInteger row);

}
Original file line number Diff line number Diff line change
@@ -0,0 +1,31 @@
package ch.cyberduck.binding.application;

/*
* Copyright (c) 2002-2025 iterate GmbH. All rights reserved.
* https://cyberduck.io/
*
* This program is free software; you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation, either version 3 of the License, or
* (at your option) any later version.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*/

public interface NSUserInterfaceItemIdentification {

/**
*
* @return A string that identifies the user interface item.
*/
String identifier();

/**
*
* @param identifier A string that identifies the user interface item.
*/
void setIdentifier(String identifier);
}
Loading