All in one preferences window.
This commit is contained in:
@ -1,27 +0,0 @@
|
||||
//
|
||||
// AdvPreferencesWindowController.swift
|
||||
// ShadowsocksX-NG
|
||||
//
|
||||
// Created by 邱宇舟 on 16/6/6.
|
||||
// Copyright © 2016年 qiuyuzhou. All rights reserved.
|
||||
//
|
||||
|
||||
import Cocoa
|
||||
|
||||
class AdvPreferencesWindowController: NSWindowController, NSWindowDelegate {
|
||||
|
||||
override func windowDidLoad() {
|
||||
super.windowDidLoad()
|
||||
|
||||
// Implement this method to handle any initialization after your window controller's window has been loaded from its nib file.
|
||||
self.window?.delegate = self
|
||||
}
|
||||
|
||||
//------------------------------------------------------------
|
||||
// NSWindowDelegate
|
||||
func windowWillClose(_ notification: Notification) {
|
||||
NotificationCenter.default
|
||||
.post(name: Notification.Name(rawValue: NOTIFY_ADV_CONF_CHANGED), object: nil)
|
||||
}
|
||||
|
||||
}
|
@ -8,22 +8,16 @@
|
||||
|
||||
import Cocoa
|
||||
import Carbon
|
||||
import RxCocoa
|
||||
import RxSwift
|
||||
|
||||
@NSApplicationMain
|
||||
class AppDelegate: NSObject, NSApplicationDelegate, NSUserNotificationCenterDelegate {
|
||||
|
||||
var qrcodeWinCtrl: SWBQRCodeWindowController!
|
||||
var preferencesWinCtrl: PreferencesWindowController!
|
||||
var advPreferencesWinCtrl: AdvPreferencesWindowController!
|
||||
var proxyPreferencesWinCtrl: ProxyPreferencesController!
|
||||
var editUserRulesWinCtrl: UserRulesController!
|
||||
var httpPreferencesWinCtrl : HTTPPreferencesWindowController!
|
||||
var shortcutsPreferencesWinCtrl: ShortcutsPreferencesWindowController!
|
||||
|
||||
let keyCodeP = kVK_ANSI_P
|
||||
let keyCodeS = kVK_ANSI_S
|
||||
let modifierKeys = cmdKey+controlKey
|
||||
var hotKeyRef: EventHotKeyRef?
|
||||
var allInOnePreferencesWinCtrl: PreferencesWinController!
|
||||
|
||||
var launchAtLoginController: LaunchAtLoginController = LaunchAtLoginController()
|
||||
|
||||
@ -35,7 +29,6 @@ class AppDelegate: NSObject, NSApplicationDelegate, NSUserNotificationCenterDele
|
||||
@IBOutlet weak var autoModeMenuItem: NSMenuItem!
|
||||
@IBOutlet weak var globalModeMenuItem: NSMenuItem!
|
||||
@IBOutlet weak var manualModeMenuItem: NSMenuItem!
|
||||
@IBOutlet weak var showRunningModeMenuItem: NSMenuItem!
|
||||
|
||||
@IBOutlet weak var serversMenuItem: NSMenuItem!
|
||||
@IBOutlet var showQRCodeMenuItem: NSMenuItem!
|
||||
@ -100,6 +93,7 @@ class AppDelegate: NSObject, NSApplicationDelegate, NSUserNotificationCenterDele
|
||||
"Kcptun.LocalHost": "127.0.0.1",
|
||||
"Kcptun.LocalPort": NSNumber(value: 8388),
|
||||
"Kcptun.Conn": NSNumber(value: 1),
|
||||
"ShowRunningModeOnStatusBar": true,
|
||||
])
|
||||
|
||||
statusItem = NSStatusBar.system().statusItem(withLength: AppDelegate.StatusItemIconWidth)
|
||||
@ -109,13 +103,23 @@ class AppDelegate: NSObject, NSApplicationDelegate, NSUserNotificationCenterDele
|
||||
statusItem.menu = statusMenu
|
||||
|
||||
|
||||
_ = defaults.rx.observe(Bool.self, "ShowRunningModeOnStatusBar")
|
||||
// .distinctUntilChanged()
|
||||
.subscribe(onNext: { value in
|
||||
if let enabled = value {
|
||||
self.updateStatusItemUI(isShownnRunningMode: enabled)
|
||||
}
|
||||
})
|
||||
|
||||
let notifyCenter = NotificationCenter.default
|
||||
notifyCenter.addObserver(forName: NSNotification.Name(rawValue: NOTIFY_ADV_PROXY_CONF_CHANGED), object: nil, queue: nil
|
||||
, using: {
|
||||
(note) in
|
||||
|
||||
_ = notifyCenter.rx.notification(NOTIFY_CONF_CHANGED)
|
||||
.subscribe(onNext: { noti in
|
||||
SyncSSLocal()
|
||||
self.applyConfig()
|
||||
}
|
||||
)
|
||||
self.updateCopyHttpProxyExportMenu()
|
||||
})
|
||||
|
||||
notifyCenter.addObserver(forName: NSNotification.Name(rawValue: NOTIFY_SERVER_PROFILES_CHANGED), object: nil, queue: nil
|
||||
, using: {
|
||||
(note) in
|
||||
@ -131,106 +135,34 @@ class AppDelegate: NSObject, NSApplicationDelegate, NSUserNotificationCenterDele
|
||||
SyncSSLocal()
|
||||
}
|
||||
)
|
||||
notifyCenter.addObserver(forName: NSNotification.Name(rawValue: NOTIFY_ADV_CONF_CHANGED), object: nil, queue: nil
|
||||
, using: {
|
||||
(note) in
|
||||
SyncSSLocal()
|
||||
self.applyConfig()
|
||||
}
|
||||
)
|
||||
notifyCenter.addObserver(forName: NSNotification.Name(rawValue: NOTIFY_HTTP_CONF_CHANGED), object: nil, queue: nil
|
||||
, using: {
|
||||
(note) in
|
||||
SyncPrivoxy()
|
||||
self.applyConfig()
|
||||
self.updateCopyHttpProxyExportMenu()
|
||||
}
|
||||
)
|
||||
notifyCenter.addObserver(forName: NSNotification.Name(rawValue: "NOTIFY_TOGGLE_RUNNING"), object: nil, queue: nil
|
||||
, using: {
|
||||
(note) in
|
||||
var isOn = UserDefaults.standard.bool(forKey: "ShadowsocksOn")
|
||||
isOn = !isOn
|
||||
if isOn {
|
||||
self.isNameTextField.stringValue = "Shadowsocks: On".localized
|
||||
}
|
||||
else {
|
||||
self.isNameTextField.stringValue = "Shadowsocks: Off".localized
|
||||
}
|
||||
|
||||
UserDefaults.standard.set(isOn, forKey: "ShadowsocksOn")
|
||||
|
||||
self.updateMainMenu()
|
||||
self.applyConfig()
|
||||
self.fadeInHud()
|
||||
}
|
||||
)
|
||||
notifyCenter.addObserver(forName: NSNotification.Name(rawValue: "NOTIFY_SWITCH_PROXY_MODE"), object: nil, queue: nil
|
||||
, using: {
|
||||
(note) in
|
||||
|
||||
switch Globals.proxyType {
|
||||
case .pac:
|
||||
Globals.proxyType = .global
|
||||
UserDefaults.standard.setValue("global", forKey: "ShadowsocksRunningMode")
|
||||
_ = notifyCenter.rx.notification(NOTIFY_TOGGLE_RUNNING_SHORTCUT)
|
||||
.subscribe(onNext: { noti in
|
||||
self.doToggleRunning(showToast: true)
|
||||
})
|
||||
_ = notifyCenter.rx.notification(NOTIFY_SWITCH_PROXY_MODE_SHORTCUT)
|
||||
.subscribe(onNext: { noti in
|
||||
let mode = defaults.string(forKey: "ShadowsocksRunningMode")!
|
||||
switch mode {
|
||||
case "auto":
|
||||
defaults.setValue("global", forKey: "ShadowsocksRunningMode")
|
||||
self.isNameTextField.stringValue = "Global Mode".localized
|
||||
case .global:
|
||||
Globals.proxyType = .pac
|
||||
UserDefaults.standard.setValue("auto", forKey: "ShadowsocksRunningMode")
|
||||
case "global":
|
||||
defaults.setValue("auto", forKey: "ShadowsocksRunningMode")
|
||||
self.isNameTextField.stringValue = "Auto Mode By PAC".localized
|
||||
default:
|
||||
defaults.setValue("auto", forKey: "ShadowsocksRunningMode")
|
||||
self.isNameTextField.stringValue = "Auto Mode By PAC".localized
|
||||
}
|
||||
|
||||
self.updateRunningModeMenu()
|
||||
self.applyConfig()
|
||||
self.fadeInHud()
|
||||
}
|
||||
)
|
||||
notifyCenter.addObserver(forName: NSNotification.Name(rawValue: "NOTIFY_FOUND_SS_URL"), object: nil, queue: nil) {
|
||||
(note: Notification) in
|
||||
|
||||
let sendNotify = {
|
||||
(title: String, subtitle: String, infoText: String) in
|
||||
|
||||
let userNote = NSUserNotification()
|
||||
userNote.title = title
|
||||
userNote.subtitle = subtitle
|
||||
userNote.informativeText = infoText
|
||||
userNote.soundName = NSUserNotificationDefaultSoundName
|
||||
|
||||
NSUserNotificationCenter.default
|
||||
.deliver(userNote);
|
||||
}
|
||||
|
||||
if let userInfo = (note as NSNotification).userInfo {
|
||||
let urls: [URL] = userInfo["urls"] as! [URL]
|
||||
|
||||
let mgr = ServerProfileManager.instance
|
||||
var isChanged = false
|
||||
|
||||
for url in urls {
|
||||
if let profile = ServerProfile(url: url) {
|
||||
mgr.profiles.append(profile)
|
||||
isChanged = true
|
||||
|
||||
var subtitle: String = ""
|
||||
if userInfo["source"] as! String == "qrcode" {
|
||||
subtitle = "By scan QR Code".localized
|
||||
} else if userInfo["source"] as! String == "url" {
|
||||
subtitle = "By Handle SS URL".localized
|
||||
}
|
||||
|
||||
sendNotify("Add Shadowsocks Server Profile".localized, subtitle, "Host: \(profile.serverHost)")
|
||||
}
|
||||
}
|
||||
|
||||
if isChanged {
|
||||
mgr.save()
|
||||
self.updateServersMenu()
|
||||
} else {
|
||||
sendNotify("Not found valid qrcode of shadowsocks profile.", "", "")
|
||||
}
|
||||
}
|
||||
}
|
||||
})
|
||||
|
||||
_ = notifyCenter.rx.notification(NOTIFY_FOUND_SS_URL)
|
||||
.subscribe(onNext: { noti in
|
||||
self.handleFoundSSURL(noti)
|
||||
})
|
||||
|
||||
// Handle ss url scheme
|
||||
NSAppleEventManager.shared().setEventHandler(self
|
||||
@ -241,7 +173,6 @@ class AppDelegate: NSObject, NSApplicationDelegate, NSUserNotificationCenterDele
|
||||
updateCopyHttpProxyExportMenu()
|
||||
updateServersMenu()
|
||||
updateRunningModeMenu()
|
||||
updateLaunchAtLoginMenu()
|
||||
|
||||
ProxyConfHelper.install()
|
||||
ProxyConfHelper.startMonitorPAC()
|
||||
@ -258,7 +189,6 @@ class AppDelegate: NSObject, NSApplicationDelegate, NSUserNotificationCenterDele
|
||||
StopKcptun()
|
||||
StopPrivoxy()
|
||||
ProxyConfHelper.disableProxy()
|
||||
if let ref = hotKeyRef { UnregisterEventHotKey(ref) }
|
||||
}
|
||||
|
||||
func applyConfig() {
|
||||
@ -287,14 +217,27 @@ class AppDelegate: NSObject, NSApplicationDelegate, NSUserNotificationCenterDele
|
||||
|
||||
// MARK: - UI Methods
|
||||
@IBAction func toggleRunning(_ sender: NSMenuItem) {
|
||||
self.doToggleRunning(showToast: false)
|
||||
}
|
||||
|
||||
func doToggleRunning(showToast: Bool) {
|
||||
let defaults = UserDefaults.standard
|
||||
var isOn = defaults.bool(forKey: "ShadowsocksOn")
|
||||
var isOn = UserDefaults.standard.bool(forKey: "ShadowsocksOn")
|
||||
isOn = !isOn
|
||||
defaults.set(isOn, forKey: "ShadowsocksOn")
|
||||
|
||||
updateMainMenu()
|
||||
self.updateMainMenu()
|
||||
self.applyConfig()
|
||||
|
||||
applyConfig()
|
||||
if showToast {
|
||||
if isOn {
|
||||
self.isNameTextField.stringValue = "Shadowsocks: On".localized
|
||||
}
|
||||
else {
|
||||
self.isNameTextField.stringValue = "Shadowsocks: Off".localized
|
||||
}
|
||||
self.fadeInHud()
|
||||
}
|
||||
}
|
||||
|
||||
@IBAction func updateGFWList(_ sender: NSMenuItem) {
|
||||
@ -359,11 +302,6 @@ class AppDelegate: NSObject, NSApplicationDelegate, NSUserNotificationCenterDele
|
||||
ServerProfileManager.instance.exportConfigFile()
|
||||
}
|
||||
|
||||
@IBAction func toggleLaunghAtLogin(sender: NSMenuItem) {
|
||||
launchAtLoginController.launchAtLogin = !launchAtLoginController.launchAtLogin;
|
||||
updateLaunchAtLoginMenu()
|
||||
}
|
||||
|
||||
@IBAction func selectPACMode(_ sender: NSMenuItem) {
|
||||
let defaults = UserDefaults.standard
|
||||
defaults.setValue("auto", forKey: "ShadowsocksRunningMode")
|
||||
@ -397,51 +335,16 @@ class AppDelegate: NSObject, NSApplicationDelegate, NSUserNotificationCenterDele
|
||||
ctrl.window?.makeKeyAndOrderFront(self)
|
||||
}
|
||||
|
||||
@IBAction func editAdvPreferences(_ sender: NSMenuItem) {
|
||||
if advPreferencesWinCtrl != nil {
|
||||
advPreferencesWinCtrl.close()
|
||||
}
|
||||
let ctrl = AdvPreferencesWindowController(windowNibName: "AdvPreferencesWindowController")
|
||||
advPreferencesWinCtrl = ctrl
|
||||
|
||||
ctrl.showWindow(self)
|
||||
NSApp.activate(ignoringOtherApps: true)
|
||||
ctrl.window?.makeKeyAndOrderFront(self)
|
||||
}
|
||||
|
||||
@IBAction func editHTTPPreferences(_ sender: NSMenuItem) {
|
||||
if httpPreferencesWinCtrl != nil {
|
||||
httpPreferencesWinCtrl.close()
|
||||
}
|
||||
let ctrl = HTTPPreferencesWindowController(windowNibName: "HTTPPreferencesWindowController")
|
||||
httpPreferencesWinCtrl = ctrl
|
||||
|
||||
ctrl.showWindow(self)
|
||||
NSApp.activate(ignoringOtherApps: true)
|
||||
ctrl.window?.makeKeyAndOrderFront(self)
|
||||
}
|
||||
|
||||
@IBAction func editProxyPreferences(_ sender: NSObject) {
|
||||
if proxyPreferencesWinCtrl != nil {
|
||||
proxyPreferencesWinCtrl.close()
|
||||
}
|
||||
proxyPreferencesWinCtrl = ProxyPreferencesController(windowNibName: "ProxyPreferencesController")
|
||||
proxyPreferencesWinCtrl.showWindow(self)
|
||||
NSApp.activate(ignoringOtherApps: true)
|
||||
proxyPreferencesWinCtrl.window?.makeKeyAndOrderFront(self)
|
||||
}
|
||||
|
||||
@IBAction func editShortcutsPreferences(_ sender: NSMenuItem) {
|
||||
if shortcutsPreferencesWinCtrl != nil {
|
||||
shortcutsPreferencesWinCtrl.close()
|
||||
@IBAction func showAllInOnePreferences(_ sender: NSMenuItem) {
|
||||
if allInOnePreferencesWinCtrl != nil {
|
||||
allInOnePreferencesWinCtrl.close()
|
||||
}
|
||||
|
||||
shortcutsPreferencesWinCtrl = ShortcutsPreferencesWindowController(
|
||||
windowNibName: "ShortcutsPreferencesWindowController")
|
||||
allInOnePreferencesWinCtrl = PreferencesWinController(windowNibName: "PreferencesWinController")
|
||||
|
||||
shortcutsPreferencesWinCtrl.showWindow(self)
|
||||
allInOnePreferencesWinCtrl.showWindow(self)
|
||||
NSApp.activate(ignoringOtherApps: true)
|
||||
shortcutsPreferencesWinCtrl.window?.makeKeyAndOrderFront(self)
|
||||
allInOnePreferencesWinCtrl.window?.makeKeyAndOrderFront(self)
|
||||
}
|
||||
|
||||
@IBAction func selectServer(_ sender: NSMenuItem) {
|
||||
@ -495,29 +398,10 @@ class AppDelegate: NSObject, NSApplicationDelegate, NSUserNotificationCenterDele
|
||||
NSApp.activate(ignoringOtherApps: true)
|
||||
}
|
||||
|
||||
@IBAction func showRunningMode(_ sender: NSMenuItem) {
|
||||
sender.state = sender.state == 1 ? 0 : 1
|
||||
let defaults = UserDefaults.standard
|
||||
let isShown = (sender.state == 1)
|
||||
defaults.set(isShown, forKey: "ShowRunningModeOnStatusBar")
|
||||
updateStatusItemUI(isShownnRunningMode: isShown)
|
||||
}
|
||||
|
||||
func updateLaunchAtLoginMenu() {
|
||||
if launchAtLoginController.launchAtLogin {
|
||||
lanchAtLoginMenuItem.state = 1
|
||||
} else {
|
||||
lanchAtLoginMenuItem.state = 0
|
||||
}
|
||||
}
|
||||
|
||||
func updateRunningModeMenu() {
|
||||
let defaults = UserDefaults.standard
|
||||
let mode = defaults.string(forKey: "ShadowsocksRunningMode")
|
||||
|
||||
showRunningModeMenuItem.title = "Show Running Mode On Status Bar".localized
|
||||
showRunningModeMenuItem.state = defaults.bool(forKey: "ShowRunningModeOnStatusBar") ? 1 : 0
|
||||
|
||||
var serverMenuText = "Servers".localized
|
||||
|
||||
let mgr = ServerProfileManager.instance
|
||||
@ -645,6 +529,51 @@ class AppDelegate: NSObject, NSApplicationDelegate, NSUserNotificationCenterDele
|
||||
}
|
||||
}
|
||||
|
||||
func handleFoundSSURL(_ note: Notification) {
|
||||
let sendNotify = {
|
||||
(title: String, subtitle: String, infoText: String) in
|
||||
|
||||
let userNote = NSUserNotification()
|
||||
userNote.title = title
|
||||
userNote.subtitle = subtitle
|
||||
userNote.informativeText = infoText
|
||||
userNote.soundName = NSUserNotificationDefaultSoundName
|
||||
|
||||
NSUserNotificationCenter.default
|
||||
.deliver(userNote);
|
||||
}
|
||||
|
||||
if let userInfo = (note as NSNotification).userInfo {
|
||||
let urls: [URL] = userInfo["urls"] as! [URL]
|
||||
|
||||
let mgr = ServerProfileManager.instance
|
||||
var isChanged = false
|
||||
|
||||
for url in urls {
|
||||
if let profile = ServerProfile(url: url) {
|
||||
mgr.profiles.append(profile)
|
||||
isChanged = true
|
||||
|
||||
var subtitle: String = ""
|
||||
if userInfo["source"] as! String == "qrcode" {
|
||||
subtitle = "By scan QR Code".localized
|
||||
} else if userInfo["source"] as! String == "url" {
|
||||
subtitle = "By Handle SS URL".localized
|
||||
}
|
||||
|
||||
sendNotify("Add Shadowsocks Server Profile".localized, subtitle, "Host: \(profile.serverHost)")
|
||||
}
|
||||
}
|
||||
|
||||
if isChanged {
|
||||
mgr.save()
|
||||
self.updateServersMenu()
|
||||
} else {
|
||||
sendNotify("Not found valid qrcode of shadowsocks profile.", "", "")
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
//------------------------------------------------------------
|
||||
// NSUserNotificationCenterDelegate
|
||||
|
||||
|
@ -1,298 +0,0 @@
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<document type="com.apple.InterfaceBuilder3.Cocoa.XIB" version="3.0" toolsVersion="11762" systemVersion="16C67" targetRuntime="MacOSX.Cocoa" propertyAccessControl="none" useAutolayout="YES" customObjectInstantitationMethod="direct">
|
||||
<dependencies>
|
||||
<deployment identifier="macosx"/>
|
||||
<plugIn identifier="com.apple.InterfaceBuilder.CocoaPlugin" version="11762"/>
|
||||
<capability name="documents saved in the Xcode 8 format" minToolsVersion="8.0"/>
|
||||
</dependencies>
|
||||
<objects>
|
||||
<customObject id="-2" userLabel="File's Owner" customClass="AdvPreferencesWindowController" customModule="ShadowsocksX_NG" customModuleProvider="target">
|
||||
<connections>
|
||||
<outlet property="window" destination="F0z-JX-Cv5" id="gIp-Ho-8D9"/>
|
||||
</connections>
|
||||
</customObject>
|
||||
<customObject id="-1" userLabel="First Responder" customClass="FirstResponder"/>
|
||||
<customObject id="-3" userLabel="Application" customClass="NSObject"/>
|
||||
<window title="Advanced Preferences" allowsToolTipsWhenApplicationIsInactive="NO" autorecalculatesKeyViewLoop="NO" oneShot="NO" animationBehavior="default" id="F0z-JX-Cv5">
|
||||
<windowStyleMask key="styleMask" titled="YES" closable="YES" miniaturizable="YES"/>
|
||||
<rect key="contentRect" x="562" y="415" width="480" height="415"/>
|
||||
<rect key="screenRect" x="0.0" y="0.0" width="1440" height="877"/>
|
||||
<view key="contentView" id="se5-gp-TjO">
|
||||
<rect key="frame" x="0.0" y="0.0" width="480" height="415"/>
|
||||
<autoresizingMask key="autoresizingMask"/>
|
||||
<subviews>
|
||||
<textField horizontalHuggingPriority="251" verticalHuggingPriority="750" fixedFrame="YES" translatesAutoresizingMaskIntoConstraints="NO" id="wCp-nB-dda">
|
||||
<rect key="frame" x="18" y="378" width="439" height="17"/>
|
||||
<autoresizingMask key="autoresizingMask" flexibleMaxX="YES" flexibleMinY="YES"/>
|
||||
<textFieldCell key="cell" scrollable="YES" lineBreakMode="clipping" sendsActionOnEndEditing="YES" alignment="center" title="Don't change these preferences if you have no idea what they are." id="8wL-qv-5nD">
|
||||
<font key="font" metaFont="system"/>
|
||||
<color key="textColor" name="labelColor" catalog="System" colorSpace="catalog"/>
|
||||
<color key="backgroundColor" name="controlColor" catalog="System" colorSpace="catalog"/>
|
||||
</textFieldCell>
|
||||
</textField>
|
||||
<box verticalHuggingPriority="750" fixedFrame="YES" boxType="separator" translatesAutoresizingMaskIntoConstraints="NO" id="JBW-8M-eHP">
|
||||
<rect key="frame" x="36" y="367" width="403" height="5"/>
|
||||
<autoresizingMask key="autoresizingMask" flexibleMaxX="YES" flexibleMinY="YES"/>
|
||||
</box>
|
||||
<textField horizontalHuggingPriority="251" verticalHuggingPriority="750" fixedFrame="YES" translatesAutoresizingMaskIntoConstraints="NO" id="S5h-Xx-HUG">
|
||||
<rect key="frame" x="27" y="309" width="201" height="17"/>
|
||||
<autoresizingMask key="autoresizingMask" flexibleMaxX="YES" flexibleMinY="YES"/>
|
||||
<textFieldCell key="cell" scrollable="YES" lineBreakMode="clipping" sendsActionOnEndEditing="YES" alignment="right" title="Local Socks5 Listen Port:" id="qRs-ow-vVB">
|
||||
<font key="font" metaFont="system"/>
|
||||
<color key="textColor" name="labelColor" catalog="System" colorSpace="catalog"/>
|
||||
<color key="backgroundColor" name="controlColor" catalog="System" colorSpace="catalog"/>
|
||||
</textFieldCell>
|
||||
</textField>
|
||||
<textField horizontalHuggingPriority="251" verticalHuggingPriority="750" fixedFrame="YES" translatesAutoresizingMaskIntoConstraints="NO" id="xWv-tc-lQe">
|
||||
<rect key="frame" x="27" y="342" width="201" height="17"/>
|
||||
<autoresizingMask key="autoresizingMask" flexibleMaxX="YES" flexibleMinY="YES"/>
|
||||
<textFieldCell key="cell" scrollable="YES" lineBreakMode="clipping" sendsActionOnEndEditing="YES" alignment="right" title="Local Socks5 Listen Address:" id="cwr-n0-zwn">
|
||||
<font key="font" metaFont="system"/>
|
||||
<color key="textColor" name="labelColor" catalog="System" colorSpace="catalog"/>
|
||||
<color key="backgroundColor" name="controlColor" catalog="System" colorSpace="catalog"/>
|
||||
</textFieldCell>
|
||||
</textField>
|
||||
<textField verticalHuggingPriority="750" fixedFrame="YES" translatesAutoresizingMaskIntoConstraints="NO" id="Q2L-Fh-TW1">
|
||||
<rect key="frame" x="234" y="339" width="163" height="22"/>
|
||||
<autoresizingMask key="autoresizingMask" flexibleMaxX="YES" flexibleMinY="YES"/>
|
||||
<textFieldCell key="cell" scrollable="YES" lineBreakMode="clipping" selectable="YES" editable="YES" sendsActionOnEndEditing="YES" state="on" borderStyle="bezel" drawsBackground="YES" id="iRm-V5-3gu">
|
||||
<font key="font" metaFont="system"/>
|
||||
<color key="textColor" name="textColor" catalog="System" colorSpace="catalog"/>
|
||||
<color key="backgroundColor" name="textBackgroundColor" catalog="System" colorSpace="catalog"/>
|
||||
</textFieldCell>
|
||||
<connections>
|
||||
<binding destination="pR1-Bo-AWz" name="value" keyPath="values.LocalSocks5.ListenAddress" id="lWm-tS-Zgn">
|
||||
<dictionary key="options">
|
||||
<bool key="NSContinuouslyUpdatesValue" value="YES"/>
|
||||
</dictionary>
|
||||
</binding>
|
||||
</connections>
|
||||
</textField>
|
||||
<textField horizontalHuggingPriority="251" verticalHuggingPriority="750" fixedFrame="YES" translatesAutoresizingMaskIntoConstraints="NO" id="e3S-m6-k5Y">
|
||||
<rect key="frame" x="27" y="245" width="201" height="17"/>
|
||||
<autoresizingMask key="autoresizingMask" flexibleMaxX="YES" flexibleMinY="YES"/>
|
||||
<textFieldCell key="cell" scrollable="YES" lineBreakMode="clipping" sendsActionOnEndEditing="YES" alignment="right" title="Timeout:" id="i4l-2S-gOQ">
|
||||
<font key="font" metaFont="system"/>
|
||||
<color key="textColor" name="labelColor" catalog="System" colorSpace="catalog"/>
|
||||
<color key="backgroundColor" name="controlColor" catalog="System" colorSpace="catalog"/>
|
||||
</textFieldCell>
|
||||
</textField>
|
||||
<textField verticalHuggingPriority="750" fixedFrame="YES" translatesAutoresizingMaskIntoConstraints="NO" id="sRP-xs-alR">
|
||||
<rect key="frame" x="234" y="243" width="60" height="22"/>
|
||||
<autoresizingMask key="autoresizingMask" flexibleMaxX="YES" flexibleMinY="YES"/>
|
||||
<textFieldCell key="cell" scrollable="YES" lineBreakMode="clipping" selectable="YES" editable="YES" sendsActionOnEndEditing="YES" state="on" borderStyle="bezel" alignment="right" drawsBackground="YES" id="wjv-Nc-tjX">
|
||||
<font key="font" metaFont="system"/>
|
||||
<color key="textColor" name="textColor" catalog="System" colorSpace="catalog"/>
|
||||
<color key="backgroundColor" name="textBackgroundColor" catalog="System" colorSpace="catalog"/>
|
||||
</textFieldCell>
|
||||
<connections>
|
||||
<binding destination="pR1-Bo-AWz" name="value" keyPath="values.LocalSocks5.Timeout" id="h0q-50-04x">
|
||||
<dictionary key="options">
|
||||
<bool key="NSContinuouslyUpdatesValue" value="YES"/>
|
||||
</dictionary>
|
||||
</binding>
|
||||
<outlet property="formatter" destination="YkP-l0-oah" id="BzU-cu-104"/>
|
||||
</connections>
|
||||
</textField>
|
||||
<button fixedFrame="YES" translatesAutoresizingMaskIntoConstraints="NO" id="DiD-K0-Y43">
|
||||
<rect key="frame" x="232" y="219" width="222" height="18"/>
|
||||
<autoresizingMask key="autoresizingMask" flexibleMaxX="YES" flexibleMinY="YES"/>
|
||||
<buttonCell key="cell" type="check" title="Enable Udp Replay" bezelStyle="regularSquare" imagePosition="left" state="on" inset="2" id="1C3-4s-Apd">
|
||||
<behavior key="behavior" changeContents="YES" doesNotDimImage="YES" lightByContents="YES"/>
|
||||
<font key="font" metaFont="system"/>
|
||||
</buttonCell>
|
||||
<connections>
|
||||
<binding destination="pR1-Bo-AWz" name="value" keyPath="values.LocalSocks5.EnableUDPRelay" id="fuM-ii-maJ"/>
|
||||
</connections>
|
||||
</button>
|
||||
<textField verticalHuggingPriority="750" fixedFrame="YES" translatesAutoresizingMaskIntoConstraints="NO" id="XQ5-fw-o8t">
|
||||
<rect key="frame" x="234" y="307" width="60" height="22"/>
|
||||
<autoresizingMask key="autoresizingMask" flexibleMaxX="YES" flexibleMinY="YES"/>
|
||||
<textFieldCell key="cell" scrollable="YES" lineBreakMode="clipping" selectable="YES" editable="YES" sendsActionOnEndEditing="YES" state="on" borderStyle="bezel" alignment="right" drawsBackground="YES" id="rfR-7k-cS8">
|
||||
<font key="font" metaFont="system"/>
|
||||
<color key="textColor" name="textColor" catalog="System" colorSpace="catalog"/>
|
||||
<color key="backgroundColor" name="textBackgroundColor" catalog="System" colorSpace="catalog"/>
|
||||
</textFieldCell>
|
||||
<connections>
|
||||
<binding destination="pR1-Bo-AWz" name="value" keyPath="values.LocalSocks5.ListenPort" id="7vW-S9-ejr">
|
||||
<dictionary key="options">
|
||||
<bool key="NSContinuouslyUpdatesValue" value="YES"/>
|
||||
</dictionary>
|
||||
</binding>
|
||||
<outlet property="formatter" destination="uE9-0u-CJW" id="QsO-5H-MYE"/>
|
||||
</connections>
|
||||
</textField>
|
||||
<textField horizontalHuggingPriority="251" verticalHuggingPriority="750" fixedFrame="YES" translatesAutoresizingMaskIntoConstraints="NO" id="eoD-7r-Q85">
|
||||
<rect key="frame" x="300" y="245" width="99" height="17"/>
|
||||
<autoresizingMask key="autoresizingMask" flexibleMaxX="YES" flexibleMinY="YES"/>
|
||||
<textFieldCell key="cell" scrollable="YES" lineBreakMode="clipping" sendsActionOnEndEditing="YES" title="Seconds" id="Gd3-Fm-sWh">
|
||||
<font key="font" metaFont="system"/>
|
||||
<color key="textColor" name="labelColor" catalog="System" colorSpace="catalog"/>
|
||||
<color key="backgroundColor" name="controlColor" catalog="System" colorSpace="catalog"/>
|
||||
</textFieldCell>
|
||||
</textField>
|
||||
<button fixedFrame="YES" translatesAutoresizingMaskIntoConstraints="NO" id="qVQ-tJ-cO6">
|
||||
<rect key="frame" x="232" y="199" width="222" height="18"/>
|
||||
<autoresizingMask key="autoresizingMask" flexibleMaxX="YES" flexibleMinY="YES"/>
|
||||
<buttonCell key="cell" type="check" title="Enable Verbose Mode" bezelStyle="regularSquare" imagePosition="left" state="on" inset="2" id="dCD-gg-I2i">
|
||||
<behavior key="behavior" changeContents="YES" doesNotDimImage="YES" lightByContents="YES"/>
|
||||
<font key="font" metaFont="system"/>
|
||||
</buttonCell>
|
||||
<connections>
|
||||
<binding destination="pR1-Bo-AWz" name="value" keyPath="values.LocalSocks5.EnableVerboseMode" id="Nu9-zu-vUE"/>
|
||||
</connections>
|
||||
</button>
|
||||
<textField horizontalHuggingPriority="251" verticalHuggingPriority="750" fixedFrame="YES" translatesAutoresizingMaskIntoConstraints="NO" id="Wsf-gl-dkY">
|
||||
<rect key="frame" x="90" y="277" width="138" height="17"/>
|
||||
<autoresizingMask key="autoresizingMask" flexibleMaxX="YES" flexibleMinY="YES"/>
|
||||
<textFieldCell key="cell" scrollable="YES" lineBreakMode="clipping" sendsActionOnEndEditing="YES" alignment="right" title="Local PAC Listen Port:" id="DiO-6B-ALO">
|
||||
<font key="font" metaFont="system"/>
|
||||
<color key="textColor" name="labelColor" catalog="System" colorSpace="catalog"/>
|
||||
<color key="backgroundColor" name="controlColor" catalog="System" colorSpace="catalog"/>
|
||||
</textFieldCell>
|
||||
</textField>
|
||||
<textField verticalHuggingPriority="750" fixedFrame="YES" translatesAutoresizingMaskIntoConstraints="NO" id="FoE-i9-Rfb">
|
||||
<rect key="frame" x="234" y="275" width="60" height="22"/>
|
||||
<autoresizingMask key="autoresizingMask" flexibleMaxX="YES" flexibleMinY="YES"/>
|
||||
<textFieldCell key="cell" scrollable="YES" lineBreakMode="clipping" selectable="YES" editable="YES" sendsActionOnEndEditing="YES" state="on" borderStyle="bezel" alignment="right" drawsBackground="YES" id="XhZ-XN-MoS">
|
||||
<font key="font" metaFont="system"/>
|
||||
<color key="textColor" name="textColor" catalog="System" colorSpace="catalog"/>
|
||||
<color key="backgroundColor" name="textBackgroundColor" catalog="System" colorSpace="catalog"/>
|
||||
</textFieldCell>
|
||||
<connections>
|
||||
<binding destination="pR1-Bo-AWz" name="value" keyPath="values.PacServer.ListenPort" id="zY2-id-Gtj">
|
||||
<dictionary key="options">
|
||||
<bool key="NSContinuouslyUpdatesValue" value="YES"/>
|
||||
</dictionary>
|
||||
</binding>
|
||||
<outlet property="formatter" destination="uE9-0u-CJW" id="YNn-yx-cWk"/>
|
||||
</connections>
|
||||
</textField>
|
||||
<box verticalHuggingPriority="750" fixedFrame="YES" boxType="separator" translatesAutoresizingMaskIntoConstraints="NO" id="ayu-Tb-kmf">
|
||||
<rect key="frame" x="38" y="96" width="405" height="5"/>
|
||||
<autoresizingMask key="autoresizingMask" flexibleMaxX="YES" flexibleMinY="YES"/>
|
||||
</box>
|
||||
<textField horizontalHuggingPriority="251" verticalHuggingPriority="750" fixedFrame="YES" translatesAutoresizingMaskIntoConstraints="NO" id="I4a-N9-Tkv">
|
||||
<rect key="frame" x="49" y="73" width="192" height="17"/>
|
||||
<autoresizingMask key="autoresizingMask" flexibleMaxX="YES" flexibleMinY="YES"/>
|
||||
<textFieldCell key="cell" scrollable="YES" lineBreakMode="clipping" sendsActionOnEndEditing="YES" alignment="left" title="GFW List URL:" id="dg0-gS-z5V">
|
||||
<font key="font" metaFont="system"/>
|
||||
<color key="textColor" name="labelColor" catalog="System" colorSpace="catalog"/>
|
||||
<color key="backgroundColor" name="controlColor" catalog="System" colorSpace="catalog"/>
|
||||
</textFieldCell>
|
||||
</textField>
|
||||
<textField horizontalHuggingPriority="251" verticalHuggingPriority="750" fixedFrame="YES" translatesAutoresizingMaskIntoConstraints="NO" id="6EM-r3-Ahv">
|
||||
<rect key="frame" x="27" y="141" width="201" height="17"/>
|
||||
<autoresizingMask key="autoresizingMask" flexibleMaxX="YES" flexibleMinY="YES"/>
|
||||
<textFieldCell key="cell" scrollable="YES" lineBreakMode="clipping" sendsActionOnEndEditing="YES" alignment="right" title="Local Kcptun Listen Port:" id="lsO-IF-yJ9">
|
||||
<font key="font" metaFont="system"/>
|
||||
<color key="textColor" name="labelColor" catalog="System" colorSpace="catalog"/>
|
||||
<color key="backgroundColor" name="controlColor" catalog="System" colorSpace="catalog"/>
|
||||
</textFieldCell>
|
||||
</textField>
|
||||
<textField horizontalHuggingPriority="251" verticalHuggingPriority="750" fixedFrame="YES" translatesAutoresizingMaskIntoConstraints="NO" id="RxZ-l7-doS">
|
||||
<rect key="frame" x="27" y="174" width="201" height="17"/>
|
||||
<autoresizingMask key="autoresizingMask" flexibleMaxX="YES" flexibleMinY="YES"/>
|
||||
<textFieldCell key="cell" scrollable="YES" lineBreakMode="clipping" sendsActionOnEndEditing="YES" alignment="right" title="Local Kcptun Listen Address:" id="DZS-7O-reK">
|
||||
<font key="font" metaFont="system"/>
|
||||
<color key="textColor" name="labelColor" catalog="System" colorSpace="catalog"/>
|
||||
<color key="backgroundColor" name="controlColor" catalog="System" colorSpace="catalog"/>
|
||||
</textFieldCell>
|
||||
</textField>
|
||||
<textField verticalHuggingPriority="750" fixedFrame="YES" translatesAutoresizingMaskIntoConstraints="NO" id="j6w-ss-DoL">
|
||||
<rect key="frame" x="234" y="171" width="163" height="22"/>
|
||||
<autoresizingMask key="autoresizingMask" flexibleMaxX="YES" flexibleMinY="YES"/>
|
||||
<textFieldCell key="cell" scrollable="YES" lineBreakMode="clipping" selectable="YES" editable="YES" sendsActionOnEndEditing="YES" state="on" borderStyle="bezel" drawsBackground="YES" id="rSB-FH-keB">
|
||||
<font key="font" metaFont="system"/>
|
||||
<color key="textColor" name="textColor" catalog="System" colorSpace="catalog"/>
|
||||
<color key="backgroundColor" name="textBackgroundColor" catalog="System" colorSpace="catalog"/>
|
||||
</textFieldCell>
|
||||
<connections>
|
||||
<binding destination="pR1-Bo-AWz" name="value" keyPath="values.Kcptun.LocalHost" id="VG4-u1-Ofk">
|
||||
<dictionary key="options">
|
||||
<bool key="NSContinuouslyUpdatesValue" value="YES"/>
|
||||
</dictionary>
|
||||
</binding>
|
||||
</connections>
|
||||
</textField>
|
||||
<textField verticalHuggingPriority="750" fixedFrame="YES" translatesAutoresizingMaskIntoConstraints="NO" id="5XI-ff-D9c">
|
||||
<rect key="frame" x="234" y="139" width="60" height="22"/>
|
||||
<autoresizingMask key="autoresizingMask" flexibleMaxX="YES" flexibleMinY="YES"/>
|
||||
<textFieldCell key="cell" scrollable="YES" lineBreakMode="clipping" selectable="YES" editable="YES" sendsActionOnEndEditing="YES" state="on" borderStyle="bezel" alignment="right" drawsBackground="YES" id="aI6-Jb-z17">
|
||||
<font key="font" metaFont="system"/>
|
||||
<color key="textColor" name="textColor" catalog="System" colorSpace="catalog"/>
|
||||
<color key="backgroundColor" name="textBackgroundColor" catalog="System" colorSpace="catalog"/>
|
||||
</textFieldCell>
|
||||
<connections>
|
||||
<binding destination="pR1-Bo-AWz" name="value" keyPath="values.Kcptun.LocalPort" id="RD2-Ch-hEH">
|
||||
<dictionary key="options">
|
||||
<bool key="NSContinuouslyUpdatesValue" value="YES"/>
|
||||
</dictionary>
|
||||
</binding>
|
||||
<outlet property="formatter" destination="uE9-0u-CJW" id="o0Q-8F-IUh"/>
|
||||
</connections>
|
||||
</textField>
|
||||
<textField verticalHuggingPriority="750" fixedFrame="YES" allowsCharacterPickerTouchBarItem="NO" translatesAutoresizingMaskIntoConstraints="NO" id="GWE-Qq-VNc">
|
||||
<rect key="frame" x="234" y="107" width="60" height="22"/>
|
||||
<autoresizingMask key="autoresizingMask" flexibleMaxX="YES" flexibleMinY="YES"/>
|
||||
<textFieldCell key="cell" scrollable="YES" lineBreakMode="clipping" selectable="YES" editable="YES" sendsActionOnEndEditing="YES" state="on" borderStyle="bezel" alignment="right" drawsBackground="YES" id="RDJ-yB-jFl">
|
||||
<font key="font" metaFont="system"/>
|
||||
<color key="textColor" name="textColor" catalog="System" colorSpace="catalog"/>
|
||||
<color key="backgroundColor" name="textBackgroundColor" catalog="System" colorSpace="catalog"/>
|
||||
</textFieldCell>
|
||||
<connections>
|
||||
<binding destination="pR1-Bo-AWz" name="value" keyPath="values.Kcptun.Conn" id="Zpb-zx-Js3">
|
||||
<dictionary key="options">
|
||||
<bool key="NSContinuouslyUpdatesValue" value="YES"/>
|
||||
</dictionary>
|
||||
</binding>
|
||||
<outlet property="formatter" destination="csm-xs-6ky" id="lFa-Y8-Wnv"/>
|
||||
</connections>
|
||||
</textField>
|
||||
<textField horizontalHuggingPriority="251" verticalHuggingPriority="750" fixedFrame="YES" allowsCharacterPickerTouchBarItem="NO" translatesAutoresizingMaskIntoConstraints="NO" id="wiv-S7-leb">
|
||||
<rect key="frame" x="52" y="110" width="176" height="17"/>
|
||||
<autoresizingMask key="autoresizingMask" flexibleMaxX="YES" flexibleMinY="YES"/>
|
||||
<textFieldCell key="cell" scrollable="YES" lineBreakMode="clipping" sendsActionOnEndEditing="YES" title="Num of Kcptun connections:" id="hTG-Za-OhM">
|
||||
<font key="font" metaFont="system"/>
|
||||
<color key="textColor" name="labelColor" catalog="System" colorSpace="catalog"/>
|
||||
<color key="backgroundColor" name="controlColor" catalog="System" colorSpace="catalog"/>
|
||||
</textFieldCell>
|
||||
</textField>
|
||||
<textField verticalHuggingPriority="750" horizontalCompressionResistancePriority="250" fixedFrame="YES" translatesAutoresizingMaskIntoConstraints="NO" id="6MD-Ry-R5P">
|
||||
<rect key="frame" x="48" y="20" width="378" height="45"/>
|
||||
<autoresizingMask key="autoresizingMask" flexibleMaxX="YES" flexibleMinY="YES"/>
|
||||
<textFieldCell key="cell" selectable="YES" editable="YES" sendsActionOnEndEditing="YES" state="on" borderStyle="bezel" drawsBackground="YES" id="fS7-It-ERD">
|
||||
<font key="font" metaFont="system"/>
|
||||
<color key="textColor" name="textColor" catalog="System" colorSpace="catalog"/>
|
||||
<color key="backgroundColor" name="textBackgroundColor" catalog="System" colorSpace="catalog"/>
|
||||
</textFieldCell>
|
||||
<connections>
|
||||
<binding destination="pR1-Bo-AWz" name="value" keyPath="values.GFWListURL" id="49j-JU-amO">
|
||||
<dictionary key="options">
|
||||
<bool key="NSContinuouslyUpdatesValue" value="YES"/>
|
||||
</dictionary>
|
||||
</binding>
|
||||
</connections>
|
||||
</textField>
|
||||
</subviews>
|
||||
</view>
|
||||
<connections>
|
||||
<outlet property="delegate" destination="-2" id="0bl-1N-AYu"/>
|
||||
</connections>
|
||||
<point key="canvasLocation" x="346" y="327.5"/>
|
||||
</window>
|
||||
<numberFormatter formatterBehavior="default10_4" usesGroupingSeparator="NO" groupingSize="0" minimumIntegerDigits="0" maximumIntegerDigits="42" id="uE9-0u-CJW" userLabel="Port Number Formatter">
|
||||
<real key="minimum" value="128"/>
|
||||
<real key="maximum" value="65535"/>
|
||||
</numberFormatter>
|
||||
<numberFormatter formatterBehavior="default10_4" usesGroupingSeparator="NO" groupingSize="0" minimumIntegerDigits="0" maximumIntegerDigits="42" id="YkP-l0-oah" userLabel="Timeout Number Formatter">
|
||||
<real key="minimum" value="10"/>
|
||||
<real key="maximum" value="600"/>
|
||||
</numberFormatter>
|
||||
<userDefaultsController representsSharedInstance="YES" id="pR1-Bo-AWz"/>
|
||||
<numberFormatter formatterBehavior="default10_4" usesGroupingSeparator="NO" groupingSize="0" minimumIntegerDigits="0" maximumIntegerDigits="42" id="csm-xs-6ky">
|
||||
<real key="minimum" value="1"/>
|
||||
<real key="maximum" value="16"/>
|
||||
</numberFormatter>
|
||||
</objects>
|
||||
</document>
|
@ -1,123 +0,0 @@
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<document type="com.apple.InterfaceBuilder3.Cocoa.XIB" version="3.0" toolsVersion="11762" systemVersion="16D32" targetRuntime="MacOSX.Cocoa" propertyAccessControl="none" useAutolayout="YES" customObjectInstantitationMethod="direct">
|
||||
<dependencies>
|
||||
<deployment identifier="macosx"/>
|
||||
<plugIn identifier="com.apple.InterfaceBuilder.CocoaPlugin" version="11762"/>
|
||||
<capability name="documents saved in the Xcode 8 format" minToolsVersion="8.0"/>
|
||||
</dependencies>
|
||||
<objects>
|
||||
<customObject id="-2" userLabel="File's Owner" customClass="HTTPPreferencesWindowController" customModule="ShadowsocksX_NG" customModuleProvider="target">
|
||||
<connections>
|
||||
<outlet property="address" destination="vsw-6L-eh3" id="YNa-u9-iPl"/>
|
||||
<outlet property="port" destination="lD1-xm-Qy3" id="paP-xD-EgP"/>
|
||||
</connections>
|
||||
</customObject>
|
||||
<customObject id="-1" userLabel="First Responder" customClass="FirstResponder"/>
|
||||
<customObject id="-3" userLabel="Application" customClass="NSObject"/>
|
||||
<window title="HTTP Proxy Preferences" allowsToolTipsWhenApplicationIsInactive="NO" autorecalculatesKeyViewLoop="NO" oneShot="NO" releasedWhenClosed="NO" showsToolbarButton="NO" frameAutosaveName="" animationBehavior="default" id="vS3-DL-Nq3">
|
||||
<windowStyleMask key="styleMask" titled="YES" closable="YES" miniaturizable="YES"/>
|
||||
<rect key="contentRect" x="109" y="131" width="253" height="190"/>
|
||||
<rect key="screenRect" x="0.0" y="0.0" width="1920" height="1057"/>
|
||||
<view key="contentView" id="Qef-Mj-9z1">
|
||||
<rect key="frame" x="0.0" y="0.0" width="253" height="190"/>
|
||||
<autoresizingMask key="autoresizingMask"/>
|
||||
<subviews>
|
||||
<button translatesAutoresizingMaskIntoConstraints="NO" id="hgn-81-fsH">
|
||||
<rect key="frame" x="18" y="154" width="138" height="18"/>
|
||||
<buttonCell key="cell" type="check" title="HTTP Proxy Enable" bezelStyle="regularSquare" imagePosition="left" state="on" inset="2" id="dqU-MG-Sum">
|
||||
<behavior key="behavior" changeContents="YES" doesNotDimImage="YES" lightByContents="YES"/>
|
||||
<font key="font" metaFont="system"/>
|
||||
</buttonCell>
|
||||
<connections>
|
||||
<binding destination="Adn-6l-wm4" name="value" keyPath="values.LocalHTTPOn" id="Oey-LL-A84"/>
|
||||
</connections>
|
||||
</button>
|
||||
<button translatesAutoresizingMaskIntoConstraints="NO" id="P4f-0N-7JI">
|
||||
<rect key="frame" x="18" y="126" width="141" height="18"/>
|
||||
<buttonCell key="cell" type="check" title="Follow Global Mode" bezelStyle="regularSquare" imagePosition="left" state="on" inset="2" id="ofk-Pc-c8f">
|
||||
<behavior key="behavior" changeContents="YES" doesNotDimImage="YES" lightByContents="YES"/>
|
||||
<font key="font" metaFont="system"/>
|
||||
</buttonCell>
|
||||
<connections>
|
||||
<binding destination="Adn-6l-wm4" name="value" keyPath="values.LocalHTTP.FollowGlobal" id="mwB-AA-WgF"/>
|
||||
</connections>
|
||||
</button>
|
||||
<textField horizontalHuggingPriority="251" verticalHuggingPriority="750" translatesAutoresizingMaskIntoConstraints="NO" id="CKF-K9-m8X">
|
||||
<rect key="frame" x="18" y="103" width="217" height="17"/>
|
||||
<textFieldCell key="cell" scrollable="YES" lineBreakMode="clipping" sendsActionOnEndEditing="YES" title="HTTP Proxy Listen Address:" id="qd0-kc-ttB">
|
||||
<font key="font" metaFont="system"/>
|
||||
<color key="textColor" name="labelColor" catalog="System" colorSpace="catalog"/>
|
||||
<color key="backgroundColor" name="controlColor" catalog="System" colorSpace="catalog"/>
|
||||
</textFieldCell>
|
||||
</textField>
|
||||
<textField horizontalHuggingPriority="251" verticalHuggingPriority="750" translatesAutoresizingMaskIntoConstraints="NO" id="Ecd-cS-zUI">
|
||||
<rect key="frame" x="18" y="50" width="217" height="17"/>
|
||||
<textFieldCell key="cell" scrollable="YES" lineBreakMode="clipping" sendsActionOnEndEditing="YES" title="HTTP Proxy Listen Port:" id="2Sd-yn-gdY">
|
||||
<font key="font" metaFont="system"/>
|
||||
<color key="textColor" name="labelColor" catalog="System" colorSpace="catalog"/>
|
||||
<color key="backgroundColor" name="controlColor" catalog="System" colorSpace="catalog"/>
|
||||
</textFieldCell>
|
||||
</textField>
|
||||
<textField verticalHuggingPriority="750" translatesAutoresizingMaskIntoConstraints="NO" id="vsw-6L-eh3">
|
||||
<rect key="frame" x="20" y="73" width="213" height="22"/>
|
||||
<textFieldCell key="cell" scrollable="YES" lineBreakMode="clipping" selectable="YES" editable="YES" sendsActionOnEndEditing="YES" state="on" borderStyle="bezel" drawsBackground="YES" id="chf-Id-e5F">
|
||||
<font key="font" metaFont="system"/>
|
||||
<color key="textColor" name="textColor" catalog="System" colorSpace="catalog"/>
|
||||
<color key="backgroundColor" name="textBackgroundColor" catalog="System" colorSpace="catalog"/>
|
||||
</textFieldCell>
|
||||
<connections>
|
||||
<binding destination="Adn-6l-wm4" name="value" keyPath="values.LocalHTTP.ListenAddress" id="TLb-4n-tsg">
|
||||
<dictionary key="options">
|
||||
<bool key="NSContinuouslyUpdatesValue" value="YES"/>
|
||||
</dictionary>
|
||||
</binding>
|
||||
</connections>
|
||||
</textField>
|
||||
<textField verticalHuggingPriority="750" translatesAutoresizingMaskIntoConstraints="NO" id="lD1-xm-Qy3">
|
||||
<rect key="frame" x="20" y="20" width="213" height="22"/>
|
||||
<textFieldCell key="cell" scrollable="YES" lineBreakMode="clipping" selectable="YES" editable="YES" sendsActionOnEndEditing="YES" state="on" borderStyle="bezel" drawsBackground="YES" id="KR0-Ey-wq8">
|
||||
<font key="font" metaFont="system"/>
|
||||
<color key="textColor" name="textColor" catalog="System" colorSpace="catalog"/>
|
||||
<color key="backgroundColor" name="textBackgroundColor" catalog="System" colorSpace="catalog"/>
|
||||
</textFieldCell>
|
||||
<connections>
|
||||
<binding destination="Adn-6l-wm4" name="value" keyPath="values.LocalHTTP.ListenPort" id="bVc-jE-7Ve">
|
||||
<dictionary key="options">
|
||||
<bool key="NSContinuouslyUpdatesValue" value="YES"/>
|
||||
</dictionary>
|
||||
</binding>
|
||||
<outlet property="formatter" destination="ji3-e7-HNW" id="xWV-vJ-7eq"/>
|
||||
</connections>
|
||||
</textField>
|
||||
</subviews>
|
||||
<constraints>
|
||||
<constraint firstItem="CKF-K9-m8X" firstAttribute="top" secondItem="P4f-0N-7JI" secondAttribute="bottom" constant="8" symbolic="YES" id="3JQ-SJ-TSN"/>
|
||||
<constraint firstItem="Ecd-cS-zUI" firstAttribute="trailing" secondItem="lD1-xm-Qy3" secondAttribute="trailing" id="7gU-3r-116"/>
|
||||
<constraint firstItem="hgn-81-fsH" firstAttribute="leading" secondItem="P4f-0N-7JI" secondAttribute="leading" id="9a5-Oj-c36"/>
|
||||
<constraint firstItem="P4f-0N-7JI" firstAttribute="leading" secondItem="CKF-K9-m8X" secondAttribute="leading" id="FNT-X2-Wjy"/>
|
||||
<constraint firstItem="hgn-81-fsH" firstAttribute="top" secondItem="Qef-Mj-9z1" secondAttribute="top" constant="20" symbolic="YES" id="G6a-3j-ZVI"/>
|
||||
<constraint firstItem="vsw-6L-eh3" firstAttribute="trailing" secondItem="Ecd-cS-zUI" secondAttribute="trailing" id="Imt-lq-XHl"/>
|
||||
<constraint firstItem="CKF-K9-m8X" firstAttribute="trailing" secondItem="vsw-6L-eh3" secondAttribute="trailing" id="V0q-XV-Mui"/>
|
||||
<constraint firstAttribute="trailing" secondItem="CKF-K9-m8X" secondAttribute="trailing" constant="20" symbolic="YES" id="WhC-Dm-ETJ"/>
|
||||
<constraint firstItem="hgn-81-fsH" firstAttribute="leading" secondItem="Qef-Mj-9z1" secondAttribute="leading" constant="20" symbolic="YES" id="XKp-Ug-dvt"/>
|
||||
<constraint firstItem="vsw-6L-eh3" firstAttribute="leading" secondItem="Ecd-cS-zUI" secondAttribute="leading" id="bep-WS-ThG"/>
|
||||
<constraint firstItem="lD1-xm-Qy3" firstAttribute="top" secondItem="Ecd-cS-zUI" secondAttribute="bottom" constant="8" symbolic="YES" id="fap-29-XS4"/>
|
||||
<constraint firstAttribute="bottom" secondItem="lD1-xm-Qy3" secondAttribute="bottom" constant="20" symbolic="YES" id="nDF-aL-c9J"/>
|
||||
<constraint firstItem="CKF-K9-m8X" firstAttribute="leading" secondItem="vsw-6L-eh3" secondAttribute="leading" id="o6R-dQ-3gq"/>
|
||||
<constraint firstItem="Ecd-cS-zUI" firstAttribute="leading" secondItem="lD1-xm-Qy3" secondAttribute="leading" id="oWo-gR-cua"/>
|
||||
<constraint firstItem="vsw-6L-eh3" firstAttribute="top" secondItem="CKF-K9-m8X" secondAttribute="bottom" constant="8" symbolic="YES" id="q8d-OA-Ea2"/>
|
||||
<constraint firstItem="Ecd-cS-zUI" firstAttribute="top" secondItem="vsw-6L-eh3" secondAttribute="bottom" constant="6" id="zdB-fb-Nth"/>
|
||||
</constraints>
|
||||
</view>
|
||||
<connections>
|
||||
<outlet property="delegate" destination="-2" id="mD3-X9-VEN"/>
|
||||
</connections>
|
||||
<point key="canvasLocation" x="2.5" y="106"/>
|
||||
</window>
|
||||
<userDefaultsController representsSharedInstance="YES" id="Adn-6l-wm4"/>
|
||||
<numberFormatter formatterBehavior="default10_4" usesGroupingSeparator="NO" groupingSize="0" minimumIntegerDigits="0" maximumIntegerDigits="42" id="ji3-e7-HNW" userLabel="Port Number Formatter">
|
||||
<real key="minimum" value="128"/>
|
||||
<real key="maximum" value="65535"/>
|
||||
</numberFormatter>
|
||||
</objects>
|
||||
</document>
|
@ -22,7 +22,6 @@
|
||||
<outlet property="hudWindow" destination="QWV-F6-ac1" id="K6D-a4-oqE"/>
|
||||
<outlet property="importBunchJsonFileItem" destination="T9g-gy-gvv" id="vua-jg-YWe"/>
|
||||
<outlet property="isNameTextField" destination="rUN-Nq-HDb" id="ayK-aM-rSa"/>
|
||||
<outlet property="lanchAtLoginMenuItem" destination="eUq-p7-ICK" id="q3D-7x-0db"/>
|
||||
<outlet property="manualModeMenuItem" destination="8PR-gs-c5N" id="9qz-mU-5kt"/>
|
||||
<outlet property="panelView" destination="rai-SH-9tZ" id="5aU-ld-rWb"/>
|
||||
<outlet property="runningStatusMenuItem" destination="fzk-mE-CEV" id="Vwm-Rg-Ykn"/>
|
||||
@ -31,7 +30,6 @@
|
||||
<outlet property="serversPreferencesMenuItem" destination="M5r-E7-44f" id="voe-SX-k6a"/>
|
||||
<outlet property="showBunchJsonExampleFileItem" destination="pdy-JE-50Q" id="xcZ-ep-mON"/>
|
||||
<outlet property="showQRCodeMenuItem" destination="R6A-96-Zcb" id="XHz-pz-nCz"/>
|
||||
<outlet property="showRunningModeMenuItem" destination="CCV-hX-fVA" id="AU2-hH-w8F"/>
|
||||
<outlet property="statusMenu" destination="Hob-KD-bx9" id="clA-ZW-0pT"/>
|
||||
<outlet property="toggleRunningMenuItem" destination="GSu-Tf-StS" id="XHw-pU-nCa"/>
|
||||
</connections>
|
||||
@ -100,13 +98,6 @@
|
||||
</items>
|
||||
</menu>
|
||||
</menuItem>
|
||||
<menuItem isSeparatorItem="YES" id="vwY-hQ-ZIz"/>
|
||||
<menuItem title="Copy HTTP Proxy Shell Export Line" id="lg6-To-GZA">
|
||||
<modifierMask key="keyEquivalentModifierMask"/>
|
||||
<connections>
|
||||
<action selector="copyExportCommand:" target="Voe-Tx-rLC" id="2U4-3M-sAK"/>
|
||||
</connections>
|
||||
</menuItem>
|
||||
<menuItem title="Scan QR Code From Screen ..." id="Qe6-bF-paT">
|
||||
<modifierMask key="keyEquivalentModifierMask"/>
|
||||
<connections>
|
||||
@ -119,63 +110,29 @@
|
||||
<action selector="showQRCodeForCurrentServer:" target="Voe-Tx-rLC" id="t45-Zk-cai"/>
|
||||
</connections>
|
||||
</menuItem>
|
||||
<menuItem isSeparatorItem="YES" id="u7F-RD-aTA"/>
|
||||
<menuItem title="Preferences" id="iVn-LD-Ynd">
|
||||
<menuItem isSeparatorItem="YES" id="vwY-hQ-ZIz"/>
|
||||
<menuItem title="Preferences ..." keyEquivalent="," id="4CS-qD-zW5">
|
||||
<connections>
|
||||
<action selector="showAllInOnePreferences:" target="Voe-Tx-rLC" id="2of-nZ-atc"/>
|
||||
</connections>
|
||||
</menuItem>
|
||||
<menuItem title="Copy HTTP Proxy Shell Export Line" id="lg6-To-GZA">
|
||||
<modifierMask key="keyEquivalentModifierMask"/>
|
||||
<menu key="submenu" title="Preferences" id="kXL-sZ-jT9">
|
||||
<items>
|
||||
<menuItem title="Update PAC from GFW List" id="TFc-Ec-duM">
|
||||
<modifierMask key="keyEquivalentModifierMask"/>
|
||||
<connections>
|
||||
<action selector="updateGFWList:" target="Voe-Tx-rLC" id="Ztt-PS-F3T"/>
|
||||
</connections>
|
||||
</menuItem>
|
||||
<menuItem title="Edit User Rules For PAC..." id="rms-p0-CvB">
|
||||
<modifierMask key="keyEquivalentModifierMask"/>
|
||||
<connections>
|
||||
<action selector="editUserRulesForPAC:" target="Voe-Tx-rLC" id="ZtK-2d-Pcl"/>
|
||||
</connections>
|
||||
</menuItem>
|
||||
<menuItem isSeparatorItem="YES" id="bMX-qn-Qwi"/>
|
||||
<menuItem title="Advanced Preferences ..." id="bZ3-fy-34d">
|
||||
<modifierMask key="keyEquivalentModifierMask"/>
|
||||
<connections>
|
||||
<action selector="editAdvPreferences:" target="Voe-Tx-rLC" id="mEF-XS-HJE"/>
|
||||
</connections>
|
||||
</menuItem>
|
||||
<menuItem title="HTTP Proxy Preferences ..." id="uEp-Gz-cu0">
|
||||
<modifierMask key="keyEquivalentModifierMask"/>
|
||||
<connections>
|
||||
<action selector="editHTTPPreferences:" target="Voe-Tx-rLC" id="tkC-e3-PH9"/>
|
||||
</connections>
|
||||
</menuItem>
|
||||
<menuItem title="Advanced PAC Proxy Preferences ..." id="sbx-yz-3lO">
|
||||
<modifierMask key="keyEquivalentModifierMask"/>
|
||||
<connections>
|
||||
<action selector="editProxyPreferences:" target="Voe-Tx-rLC" id="Jji-Ea-Sy8"/>
|
||||
</connections>
|
||||
</menuItem>
|
||||
<menuItem title="Shortcuts Preferences ..." id="waZ-9G-2Xw">
|
||||
<modifierMask key="keyEquivalentModifierMask"/>
|
||||
<connections>
|
||||
<action selector="editShortcutsPreferences:" target="Voe-Tx-rLC" id="dMl-t6-50N"/>
|
||||
</connections>
|
||||
</menuItem>
|
||||
<menuItem isSeparatorItem="YES" id="ZrT-7B-OmN"/>
|
||||
<menuItem title="Launch At Login" id="eUq-p7-ICK">
|
||||
<modifierMask key="keyEquivalentModifierMask"/>
|
||||
<connections>
|
||||
<action selector="toggleLaunghAtLoginWithSender:" target="Voe-Tx-rLC" id="eFB-1Q-AOT"/>
|
||||
</connections>
|
||||
</menuItem>
|
||||
<menuItem title="Show Running Mode In Status Bar" id="CCV-hX-fVA">
|
||||
<modifierMask key="keyEquivalentModifierMask"/>
|
||||
<connections>
|
||||
<action selector="showRunningMode:" target="Voe-Tx-rLC" id="PxO-ut-PEx"/>
|
||||
</connections>
|
||||
</menuItem>
|
||||
</items>
|
||||
</menu>
|
||||
<connections>
|
||||
<action selector="copyExportCommand:" target="Voe-Tx-rLC" id="2U4-3M-sAK"/>
|
||||
</connections>
|
||||
</menuItem>
|
||||
<menuItem title="Update PAC from GFW List" id="TFc-Ec-duM">
|
||||
<modifierMask key="keyEquivalentModifierMask"/>
|
||||
<connections>
|
||||
<action selector="updateGFWList:" target="Voe-Tx-rLC" id="Ztt-PS-F3T"/>
|
||||
</connections>
|
||||
</menuItem>
|
||||
<menuItem title="Edit User Rules For PAC..." id="rms-p0-CvB">
|
||||
<modifierMask key="keyEquivalentModifierMask"/>
|
||||
<connections>
|
||||
<action selector="editUserRulesForPAC:" target="Voe-Tx-rLC" id="ZtK-2d-Pcl"/>
|
||||
</connections>
|
||||
</menuItem>
|
||||
<menuItem isSeparatorItem="YES" id="DTJ-NF-Wxr"/>
|
||||
<menuItem title="Show Logs..." id="Jfy-sf-Fhl">
|
||||
|
@ -1,139 +0,0 @@
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<document type="com.apple.InterfaceBuilder3.Cocoa.XIB" version="3.0" toolsVersion="11762" systemVersion="16D32" targetRuntime="MacOSX.Cocoa" propertyAccessControl="none" useAutolayout="YES" customObjectInstantitationMethod="direct">
|
||||
<dependencies>
|
||||
<deployment identifier="macosx"/>
|
||||
<plugIn identifier="com.apple.InterfaceBuilder.CocoaPlugin" version="11762"/>
|
||||
<capability name="documents saved in the Xcode 8 format" minToolsVersion="8.0"/>
|
||||
</dependencies>
|
||||
<objects>
|
||||
<customObject id="-2" userLabel="File's Owner" customClass="ProxyPreferencesController" customModule="ShadowsocksX_NG" customModuleProvider="target">
|
||||
<connections>
|
||||
<outlet property="autoConfigCheckBox" destination="al4-wo-BVS" id="y3x-oN-Wn7"/>
|
||||
<outlet property="tableView" destination="tdp-Lr-L64" id="yJ0-tP-gVw"/>
|
||||
<outlet property="window" destination="F0z-JX-Cv5" id="gIp-Ho-8D9"/>
|
||||
</connections>
|
||||
</customObject>
|
||||
<customObject id="-1" userLabel="First Responder" customClass="FirstResponder"/>
|
||||
<customObject id="-3" userLabel="Application" customClass="NSObject"/>
|
||||
<window title="Advanced Proxy Preferences" allowsToolTipsWhenApplicationIsInactive="NO" autorecalculatesKeyViewLoop="NO" oneShot="NO" releasedWhenClosed="NO" animationBehavior="default" id="F0z-JX-Cv5">
|
||||
<windowStyleMask key="styleMask" titled="YES" closable="YES" miniaturizable="YES" resizable="YES"/>
|
||||
<rect key="contentRect" x="503" y="308" width="298" height="311"/>
|
||||
<rect key="screenRect" x="0.0" y="0.0" width="1680" height="1027"/>
|
||||
<view key="contentView" id="se5-gp-TjO">
|
||||
<rect key="frame" x="0.0" y="0.0" width="298" height="311"/>
|
||||
<autoresizingMask key="autoresizingMask"/>
|
||||
<subviews>
|
||||
<button translatesAutoresizingMaskIntoConstraints="NO" id="al4-wo-BVS">
|
||||
<rect key="frame" x="18" y="275" width="262" height="18"/>
|
||||
<buttonCell key="cell" type="check" title="Auto Configure" bezelStyle="regularSquare" imagePosition="left" state="on" inset="2" id="FLv-D9-CRw">
|
||||
<behavior key="behavior" changeContents="YES" doesNotDimImage="YES" lightByContents="YES"/>
|
||||
<font key="font" metaFont="system"/>
|
||||
</buttonCell>
|
||||
<connections>
|
||||
<binding destination="-2" name="value" keyPath="autoConfigureNetworkServices" id="SgV-RH-wUe"/>
|
||||
</connections>
|
||||
</button>
|
||||
<scrollView autohidesScrollers="YES" horizontalLineScroll="19" horizontalPageScroll="10" verticalLineScroll="19" verticalPageScroll="10" usesPredominantAxisScrolling="NO" translatesAutoresizingMaskIntoConstraints="NO" id="657-dv-Val">
|
||||
<rect key="frame" x="20" y="61" width="258" height="199"/>
|
||||
<clipView key="contentView" id="i6C-d3-Rpb">
|
||||
<rect key="frame" x="1" y="1" width="256" height="197"/>
|
||||
<autoresizingMask key="autoresizingMask" widthSizable="YES" heightSizable="YES"/>
|
||||
<subviews>
|
||||
<tableView verticalHuggingPriority="750" allowsExpansionToolTips="YES" columnAutoresizingStyle="lastColumnOnly" columnSelection="YES" multipleSelection="NO" autosaveColumns="NO" id="tdp-Lr-L64">
|
||||
<rect key="frame" x="0.0" y="0.0" width="256" height="197"/>
|
||||
<autoresizingMask key="autoresizingMask"/>
|
||||
<size key="intercellSpacing" width="3" height="2"/>
|
||||
<color key="backgroundColor" name="controlBackgroundColor" catalog="System" colorSpace="catalog"/>
|
||||
<color key="gridColor" name="gridColor" catalog="System" colorSpace="catalog"/>
|
||||
<tableColumns>
|
||||
<tableColumn width="253" minWidth="40" maxWidth="1000" id="26S-Kb-zSc">
|
||||
<tableHeaderCell key="headerCell" lineBreakMode="truncatingTail" borderStyle="border">
|
||||
<font key="font" metaFont="smallSystem"/>
|
||||
<color key="textColor" name="headerTextColor" catalog="System" colorSpace="catalog"/>
|
||||
<color key="backgroundColor" name="headerColor" catalog="System" colorSpace="catalog"/>
|
||||
</tableHeaderCell>
|
||||
<buttonCell key="dataCell" type="check" title="Check" bezelStyle="regularSquare" imagePosition="left" inset="2" id="ucF-02-bm8">
|
||||
<behavior key="behavior" changeContents="YES" doesNotDimImage="YES" lightByContents="YES"/>
|
||||
<font key="font" metaFont="system"/>
|
||||
</buttonCell>
|
||||
<tableColumnResizingMask key="resizingMask" resizeWithTable="YES" userResizable="YES"/>
|
||||
<connections>
|
||||
<binding destination="-2" name="enabled" keyPath="autoConfigureNetworkServices" id="XkV-FH-93a">
|
||||
<dictionary key="options">
|
||||
<string key="NSValueTransformerName">NSNegateBoolean</string>
|
||||
</dictionary>
|
||||
</binding>
|
||||
</connections>
|
||||
</tableColumn>
|
||||
</tableColumns>
|
||||
<connections>
|
||||
<outlet property="dataSource" destination="-2" id="e18-9E-A4F"/>
|
||||
<outlet property="delegate" destination="-2" id="8UX-DB-agU"/>
|
||||
</connections>
|
||||
</tableView>
|
||||
</subviews>
|
||||
</clipView>
|
||||
<scroller key="horizontalScroller" hidden="YES" verticalHuggingPriority="750" horizontal="YES" id="3sC-hI-IvB">
|
||||
<rect key="frame" x="-7" y="-14" width="0.0" height="15"/>
|
||||
<autoresizingMask key="autoresizingMask"/>
|
||||
</scroller>
|
||||
<scroller key="verticalScroller" hidden="YES" verticalHuggingPriority="750" horizontal="NO" id="6OR-N8-MXx">
|
||||
<rect key="frame" x="-14" y="-7" width="15" height="0.0"/>
|
||||
<autoresizingMask key="autoresizingMask"/>
|
||||
</scroller>
|
||||
</scrollView>
|
||||
<button verticalHuggingPriority="750" translatesAutoresizingMaskIntoConstraints="NO" id="ulk-V7-E4w">
|
||||
<rect key="frame" x="203" y="13" width="81" height="32"/>
|
||||
<constraints>
|
||||
<constraint firstAttribute="width" constant="69" id="pKr-lK-BZO"/>
|
||||
</constraints>
|
||||
<buttonCell key="cell" type="push" title="OK" bezelStyle="rounded" alignment="center" borderStyle="border" imageScaling="proportionallyDown" inset="2" id="rWE-M6-TvV">
|
||||
<behavior key="behavior" pushIn="YES" lightByBackground="YES" lightByGray="YES"/>
|
||||
<font key="font" metaFont="system"/>
|
||||
<string key="keyEquivalent" base64-UTF8="YES">
|
||||
DQ
|
||||
</string>
|
||||
</buttonCell>
|
||||
<connections>
|
||||
<action selector="ok:" target="-2" id="GTx-sb-ino"/>
|
||||
</connections>
|
||||
</button>
|
||||
<button verticalHuggingPriority="750" translatesAutoresizingMaskIntoConstraints="NO" id="NVO-zo-7QI">
|
||||
<rect key="frame" x="122" y="13" width="81" height="32"/>
|
||||
<constraints>
|
||||
<constraint firstAttribute="width" constant="69" id="tMt-LA-r5K"/>
|
||||
</constraints>
|
||||
<buttonCell key="cell" type="push" title="Cancel" bezelStyle="rounded" alignment="center" borderStyle="border" imageScaling="proportionallyDown" inset="2" id="lsQ-1C-OhG">
|
||||
<behavior key="behavior" pushIn="YES" lightByBackground="YES" lightByGray="YES"/>
|
||||
<font key="font" metaFont="system"/>
|
||||
<string key="keyEquivalent" base64-UTF8="YES">
|
||||
Gw
|
||||
</string>
|
||||
</buttonCell>
|
||||
<connections>
|
||||
<action selector="cancel:" target="-2" id="bId-aB-i6V"/>
|
||||
</connections>
|
||||
</button>
|
||||
</subviews>
|
||||
<constraints>
|
||||
<constraint firstItem="657-dv-Val" firstAttribute="trailing" secondItem="ulk-V7-E4w" secondAttribute="trailing" id="CY9-DO-bdj"/>
|
||||
<constraint firstItem="NVO-zo-7QI" firstAttribute="baseline" secondItem="ulk-V7-E4w" secondAttribute="baseline" id="Eyr-b9-ZtL"/>
|
||||
<constraint firstAttribute="bottom" secondItem="NVO-zo-7QI" secondAttribute="bottom" constant="20" symbolic="YES" id="FlW-Sa-FEZ"/>
|
||||
<constraint firstItem="NVO-zo-7QI" firstAttribute="top" secondItem="657-dv-Val" secondAttribute="bottom" constant="20" symbolic="YES" id="Rmy-NH-TYr"/>
|
||||
<constraint firstItem="al4-wo-BVS" firstAttribute="leading" secondItem="se5-gp-TjO" secondAttribute="leading" constant="20" symbolic="YES" id="VgE-Fh-JP4"/>
|
||||
<constraint firstItem="657-dv-Val" firstAttribute="top" secondItem="al4-wo-BVS" secondAttribute="bottom" constant="17" id="YZs-QN-ABC"/>
|
||||
<constraint firstItem="ulk-V7-E4w" firstAttribute="leading" secondItem="NVO-zo-7QI" secondAttribute="trailing" constant="12" symbolic="YES" id="YdW-u1-0yB"/>
|
||||
<constraint firstItem="al4-wo-BVS" firstAttribute="leading" secondItem="657-dv-Val" secondAttribute="leading" id="de4-mH-svX"/>
|
||||
<constraint firstItem="al4-wo-BVS" firstAttribute="trailing" secondItem="657-dv-Val" secondAttribute="trailing" id="fnP-5p-dPB"/>
|
||||
<constraint firstAttribute="trailing" secondItem="al4-wo-BVS" secondAttribute="trailing" constant="20" symbolic="YES" id="nxt-Hr-6YP"/>
|
||||
<constraint firstItem="al4-wo-BVS" firstAttribute="top" secondItem="se5-gp-TjO" secondAttribute="top" constant="20" symbolic="YES" id="tBQ-Gd-Hhr"/>
|
||||
</constraints>
|
||||
</view>
|
||||
<connections>
|
||||
<outlet property="delegate" destination="-2" id="0bl-1N-AYu"/>
|
||||
</connections>
|
||||
<point key="canvasLocation" x="360" y="335.5"/>
|
||||
</window>
|
||||
<userDefaultsController representsSharedInstance="YES" id="vMm-BK-U3M"/>
|
||||
</objects>
|
||||
</document>
|
@ -1,30 +0,0 @@
|
||||
//
|
||||
// HTTPPreferencesWindowController.swift
|
||||
// ShadowsocksX-NG
|
||||
//
|
||||
// Created by 王晨 on 2016/10/7.
|
||||
// Copyright © 2016年 qiuyuzhou. All rights reserved.
|
||||
//
|
||||
|
||||
import Cocoa
|
||||
|
||||
class HTTPPreferencesWindowController: NSWindowController, NSWindowDelegate {
|
||||
|
||||
@IBOutlet weak var address: NSTextField!
|
||||
@IBOutlet weak var port: NSTextField!
|
||||
|
||||
override func windowDidLoad() {
|
||||
super.windowDidLoad()
|
||||
|
||||
// Implement this method to handle any initialization after your window controller's window has been loaded from its nib file.
|
||||
self.window?.delegate = self
|
||||
}
|
||||
|
||||
//------------------------------------------------------------
|
||||
// NSWindowDelegate
|
||||
func windowWillClose(_ notification: Notification) {
|
||||
NotificationCenter.default
|
||||
.post(name: Notification.Name(rawValue: NOTIFY_HTTP_CONF_CHANGED), object: nil)
|
||||
}
|
||||
|
||||
}
|
@ -27,5 +27,6 @@
|
||||
|
||||
@property(assign) BOOL launchAtLogin;
|
||||
|
||||
+ (instancetype) shared;
|
||||
|
||||
@end
|
||||
|
@ -44,15 +44,26 @@
|
||||
{
|
||||
self = [super init];
|
||||
if (self) {
|
||||
_enabled = [[NSUserDefaults standardUserDefaults] boolForKey: @"LaunchAtLogin"];
|
||||
_enabled = NO;
|
||||
BOOL enabled = [[NSUserDefaults standardUserDefaults] boolForKey: @"LaunchAtLogin"];
|
||||
[self setLaunchAtLogin:enabled];
|
||||
}
|
||||
return self;
|
||||
}
|
||||
|
||||
|
||||
- (void) dealloc
|
||||
{
|
||||
}
|
||||
|
||||
+ (instancetype) shared {
|
||||
static LaunchAtLoginController* ctrl = nil;
|
||||
static dispatch_once_t onceToken;
|
||||
dispatch_once(&onceToken, ^{
|
||||
ctrl = [[self alloc]init];
|
||||
});
|
||||
return ctrl;
|
||||
}
|
||||
|
||||
- (void) setLaunchAtLogin: (BOOL) enabled
|
||||
{
|
||||
if (SMLoginItemSetEnabled(
|
||||
@ -61,6 +72,10 @@
|
||||
_enabled = enabled;
|
||||
NSUserDefaults* defaults = [NSUserDefaults standardUserDefaults];
|
||||
[defaults setBool: enabled forKey: @"LaunchAtLogin"];
|
||||
|
||||
NSLog(@"Call SMLoginItemSetEnabled with [%hhd] success", enabled);
|
||||
} else {
|
||||
NSLog(@"Call SMLoginItemSetEnabled with [%hhd] failed", enabled);
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -11,5 +11,16 @@ import Foundation
|
||||
let NOTIFY_SERVER_PROFILES_CHANGED = "NOTIFY_SERVER_PROFILES_CHANGED"
|
||||
let NOTIFY_ADV_PROXY_CONF_CHANGED = "NOTIFY_ADV_PROXY_CONF_CHANGED"
|
||||
let NOTIFY_ADV_CONF_CHANGED = "NOTIFY_ADV_CONF_CHANGED"
|
||||
let NOTIFY_HTTP_CONF_CHANGED = "NOTIFY_HTTP_CONF_CHANGED"
|
||||
let NOTIFY_INVALIDE_QR = "NOTIFY_INVALIDE_QR"
|
||||
|
||||
|
||||
let NOTIFY_CONF_CHANGED = Notification.Name(rawValue: "NOTIFY_CONF_CHANGED")
|
||||
|
||||
//let NOTIFY_SS_CONF_CHANGED = Notification.Name(rawValue: "NOTIFY_SS_CONF_CHANGED")
|
||||
let NOTIFY_HTTP_CONF_CHANGED = Notification.Name(rawValue: "NOTIFY_HTTP_CONF_CHANGED")
|
||||
//let NOTIFY_KCPTUN_CONF_CHANGED = Notification.Name(rawValue: "NOTIFY_KCPTUN_CONF_CHANGED")
|
||||
|
||||
let NOTIFY_TOGGLE_RUNNING_SHORTCUT = Notification.Name(rawValue: "NOTIFY_TOGGLE_RUNNING_SHORTCUT")
|
||||
let NOTIFY_SWITCH_PROXY_MODE_SHORTCUT = Notification.Name(rawValue: "NOTIFY_SWITCH_PROXY_MODE_SHORTCUT")
|
||||
|
||||
let NOTIFY_FOUND_SS_URL = Notification.Name(rawValue: "NOTIFY_FOUND_SS_URL")
|
||||
|
34
ShadowsocksX-NG/PreferencesWinController.swift
Normal file
34
ShadowsocksX-NG/PreferencesWinController.swift
Normal file
@ -0,0 +1,34 @@
|
||||
//
|
||||
// PreferencesWinController.swift
|
||||
// ShadowsocksX-NG
|
||||
//
|
||||
// Created by 邱宇舟 on 2017/3/11.
|
||||
// Copyright © 2017年 qiuyuzhou. All rights reserved.
|
||||
//
|
||||
|
||||
import Cocoa
|
||||
import RxCocoa
|
||||
import RxSwift
|
||||
|
||||
class PreferencesWinController: NSWindowController {
|
||||
|
||||
@IBOutlet weak var toolbar: NSToolbar!
|
||||
@IBOutlet weak var tabView: NSTabView!
|
||||
|
||||
override func windowDidLoad() {
|
||||
super.windowDidLoad()
|
||||
|
||||
// Implement this method to handle any initialization after your window controller's window has been loaded from its nib file.
|
||||
toolbar.selectedItemIdentifier = "general"
|
||||
}
|
||||
|
||||
func windowWillClose(_ notification: Notification) {
|
||||
NotificationCenter.default
|
||||
.post(name: NOTIFY_CONF_CHANGED, object: nil)
|
||||
}
|
||||
|
||||
@IBAction func toolbarAction(sender: NSToolbarItem) {
|
||||
tabView.selectTabViewItem(withIdentifier: sender.itemIdentifier)
|
||||
}
|
||||
|
||||
}
|
697
ShadowsocksX-NG/PreferencesWinController.xib
Normal file
697
ShadowsocksX-NG/PreferencesWinController.xib
Normal file
@ -0,0 +1,697 @@
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<document type="com.apple.InterfaceBuilder3.Cocoa.XIB" version="3.0" toolsVersion="11762" systemVersion="16D32" targetRuntime="MacOSX.Cocoa" propertyAccessControl="none" useAutolayout="YES" customObjectInstantitationMethod="direct">
|
||||
<dependencies>
|
||||
<deployment identifier="macosx"/>
|
||||
<plugIn identifier="com.apple.InterfaceBuilder.CocoaPlugin" version="11762"/>
|
||||
<capability name="documents saved in the Xcode 8 format" minToolsVersion="8.0"/>
|
||||
</dependencies>
|
||||
<objects>
|
||||
<customObject id="-2" userLabel="File's Owner" customClass="PreferencesWinController" customModule="ShadowsocksX_NG" customModuleProvider="target">
|
||||
<connections>
|
||||
<outlet property="tabView" destination="h22-uy-K1x" id="yH1-8m-Qpe"/>
|
||||
<outlet property="toolbar" destination="D9u-IW-4jN" id="Q34-fm-M45"/>
|
||||
<outlet property="window" destination="F0z-JX-Cv5" id="gIp-Ho-8D9"/>
|
||||
</connections>
|
||||
</customObject>
|
||||
<customObject id="-1" userLabel="First Responder" customClass="FirstResponder"/>
|
||||
<customObject id="-3" userLabel="Application" customClass="NSObject"/>
|
||||
<window title="Preferences" allowsToolTipsWhenApplicationIsInactive="NO" autorecalculatesKeyViewLoop="NO" oneShot="NO" releasedWhenClosed="NO" animationBehavior="default" id="F0z-JX-Cv5">
|
||||
<windowStyleMask key="styleMask" titled="YES" closable="YES" resizable="YES"/>
|
||||
<windowPositionMask key="initialPositionMask" topStrut="YES" bottomStrut="YES"/>
|
||||
<rect key="contentRect" x="609" y="533" width="480" height="270"/>
|
||||
<rect key="screenRect" x="0.0" y="0.0" width="1680" height="1027"/>
|
||||
<view key="contentView" wantsLayer="YES" id="se5-gp-TjO">
|
||||
<rect key="frame" x="0.0" y="0.0" width="480" height="270"/>
|
||||
<autoresizingMask key="autoresizingMask"/>
|
||||
<subviews>
|
||||
<tabView type="noTabsNoBorder" translatesAutoresizingMaskIntoConstraints="NO" id="h22-uy-K1x">
|
||||
<rect key="frame" x="0.0" y="0.0" width="480" height="270"/>
|
||||
<font key="font" metaFont="system"/>
|
||||
<tabViewItems>
|
||||
<tabViewItem label="General" identifier="general" id="xbG-eW-Prj">
|
||||
<view key="view" id="78E-rb-Ecu">
|
||||
<rect key="frame" x="0.0" y="0.0" width="480" height="270"/>
|
||||
<autoresizingMask key="autoresizingMask" widthSizable="YES" heightSizable="YES"/>
|
||||
<subviews>
|
||||
<button translatesAutoresizingMaskIntoConstraints="NO" id="Q6E-ur-aIL">
|
||||
<rect key="frame" x="18" y="234" width="120" height="18"/>
|
||||
<buttonCell key="cell" type="check" title="Launch At Login" bezelStyle="regularSquare" imagePosition="left" state="on" inset="2" id="XJx-j4-bBr">
|
||||
<behavior key="behavior" changeContents="YES" doesNotDimImage="YES" lightByContents="YES"/>
|
||||
<font key="font" metaFont="system"/>
|
||||
</buttonCell>
|
||||
<connections>
|
||||
<binding destination="YAC-3k-qMR" name="value" keyPath="launchAtLogin" id="lF3-G5-F0w"/>
|
||||
</connections>
|
||||
</button>
|
||||
<button translatesAutoresizingMaskIntoConstraints="NO" id="oI8-ye-kyt">
|
||||
<rect key="frame" x="18" y="204" width="227" height="18"/>
|
||||
<buttonCell key="cell" type="check" title="Show Running Mode In Status Bar" bezelStyle="regularSquare" imagePosition="left" state="on" inset="2" id="wXO-Qz-yDg">
|
||||
<behavior key="behavior" changeContents="YES" doesNotDimImage="YES" lightByContents="YES"/>
|
||||
<font key="font" metaFont="system"/>
|
||||
</buttonCell>
|
||||
<connections>
|
||||
<binding destination="uQz-5y-ZL2" name="value" keyPath="values.ShowRunningModeOnStatusBar" id="Ba7-pB-dlD"/>
|
||||
</connections>
|
||||
</button>
|
||||
<textField horizontalHuggingPriority="251" verticalHuggingPriority="750" translatesAutoresizingMaskIntoConstraints="NO" id="Jbe-9l-xF4">
|
||||
<rect key="frame" x="18" y="165" width="192" height="17"/>
|
||||
<constraints>
|
||||
<constraint firstAttribute="width" constant="188" id="O19-ow-J2E"/>
|
||||
</constraints>
|
||||
<textFieldCell key="cell" scrollable="YES" lineBreakMode="clipping" sendsActionOnEndEditing="YES" alignment="left" title="GFW List URL:" id="v7a-wf-aEm">
|
||||
<font key="font" metaFont="system"/>
|
||||
<color key="textColor" name="labelColor" catalog="System" colorSpace="catalog"/>
|
||||
<color key="backgroundColor" name="controlColor" catalog="System" colorSpace="catalog"/>
|
||||
</textFieldCell>
|
||||
</textField>
|
||||
<textField verticalHuggingPriority="750" horizontalCompressionResistancePriority="250" translatesAutoresizingMaskIntoConstraints="NO" id="71I-66-7Vm">
|
||||
<rect key="frame" x="20" y="112" width="440" height="45"/>
|
||||
<constraints>
|
||||
<constraint firstAttribute="height" constant="45" id="h4c-V0-L4X"/>
|
||||
</constraints>
|
||||
<textFieldCell key="cell" selectable="YES" editable="YES" sendsActionOnEndEditing="YES" state="on" borderStyle="bezel" alignment="left" drawsBackground="YES" id="YqN-0f-ODA">
|
||||
<font key="font" metaFont="system"/>
|
||||
<color key="textColor" name="textColor" catalog="System" colorSpace="catalog"/>
|
||||
<color key="backgroundColor" name="textBackgroundColor" catalog="System" colorSpace="catalog"/>
|
||||
</textFieldCell>
|
||||
<connections>
|
||||
<binding destination="uQz-5y-ZL2" name="value" keyPath="values.GFWListURL" id="Rqt-XM-aCE">
|
||||
<dictionary key="options">
|
||||
<bool key="NSContinuouslyUpdatesValue" value="YES"/>
|
||||
</dictionary>
|
||||
</binding>
|
||||
</connections>
|
||||
</textField>
|
||||
</subviews>
|
||||
<constraints>
|
||||
<constraint firstItem="71I-66-7Vm" firstAttribute="top" secondItem="Jbe-9l-xF4" secondAttribute="bottom" constant="8" symbolic="YES" id="2WE-UP-2z6"/>
|
||||
<constraint firstItem="Jbe-9l-xF4" firstAttribute="leading" secondItem="71I-66-7Vm" secondAttribute="leading" id="BiR-FL-V4Z"/>
|
||||
<constraint firstItem="oI8-ye-kyt" firstAttribute="top" secondItem="Q6E-ur-aIL" secondAttribute="bottom" constant="16" id="L2Q-NE-joq"/>
|
||||
<constraint firstItem="Q6E-ur-aIL" firstAttribute="leading" secondItem="78E-rb-Ecu" secondAttribute="leading" constant="20" symbolic="YES" id="VBW-pa-frq"/>
|
||||
<constraint firstItem="71I-66-7Vm" firstAttribute="centerY" secondItem="78E-rb-Ecu" secondAttribute="centerY" id="WNa-6p-XbG"/>
|
||||
<constraint firstItem="Jbe-9l-xF4" firstAttribute="leading" secondItem="oI8-ye-kyt" secondAttribute="leading" id="aVD-J5-1ii"/>
|
||||
<constraint firstAttribute="trailing" secondItem="71I-66-7Vm" secondAttribute="trailing" constant="20" symbolic="YES" id="cvT-wO-98l"/>
|
||||
<constraint firstItem="Q6E-ur-aIL" firstAttribute="leading" secondItem="oI8-ye-kyt" secondAttribute="leading" id="dIj-cv-xuB"/>
|
||||
<constraint firstItem="Q6E-ur-aIL" firstAttribute="top" secondItem="78E-rb-Ecu" secondAttribute="top" constant="20" symbolic="YES" id="dYm-8k-t7L"/>
|
||||
</constraints>
|
||||
</view>
|
||||
</tabViewItem>
|
||||
<tabViewItem label="Servers" identifier="servers" id="Dsu-Ba-zYR">
|
||||
<view key="view" id="87v-B0-0YY">
|
||||
<rect key="frame" x="0.0" y="0.0" width="480" height="270"/>
|
||||
<autoresizingMask key="autoresizingMask" widthSizable="YES" heightSizable="YES"/>
|
||||
</view>
|
||||
</tabViewItem>
|
||||
<tabViewItem label="Advance" identifier="adv" id="ksf-9b-qoz">
|
||||
<view key="view" id="Pc1-f7-0zA">
|
||||
<rect key="frame" x="0.0" y="0.0" width="480" height="270"/>
|
||||
<autoresizingMask key="autoresizingMask" widthSizable="YES" heightSizable="YES"/>
|
||||
<subviews>
|
||||
<textField horizontalHuggingPriority="251" verticalHuggingPriority="750" translatesAutoresizingMaskIntoConstraints="NO" id="r8z-mM-M0X">
|
||||
<rect key="frame" x="35" y="198" width="201" height="17"/>
|
||||
<textFieldCell key="cell" scrollable="YES" lineBreakMode="clipping" sendsActionOnEndEditing="YES" alignment="right" title="Local Socks5 Listen Port:" id="8fk-fw-Tsx">
|
||||
<font key="font" metaFont="system"/>
|
||||
<color key="textColor" name="labelColor" catalog="System" colorSpace="catalog"/>
|
||||
<color key="backgroundColor" name="controlColor" catalog="System" colorSpace="catalog"/>
|
||||
</textFieldCell>
|
||||
</textField>
|
||||
<textField horizontalHuggingPriority="251" verticalHuggingPriority="750" translatesAutoresizingMaskIntoConstraints="NO" id="c8B-qf-UNK">
|
||||
<rect key="frame" x="35" y="231" width="201" height="17"/>
|
||||
<textFieldCell key="cell" scrollable="YES" lineBreakMode="clipping" sendsActionOnEndEditing="YES" alignment="right" title="Local Socks5 Listen Address:" id="jkc-e3-4O0">
|
||||
<font key="font" metaFont="system"/>
|
||||
<color key="textColor" name="labelColor" catalog="System" colorSpace="catalog"/>
|
||||
<color key="backgroundColor" name="controlColor" catalog="System" colorSpace="catalog"/>
|
||||
</textFieldCell>
|
||||
</textField>
|
||||
<textField verticalHuggingPriority="750" translatesAutoresizingMaskIntoConstraints="NO" id="cd8-PU-OwG">
|
||||
<rect key="frame" x="242" y="228" width="163" height="22"/>
|
||||
<textFieldCell key="cell" scrollable="YES" lineBreakMode="clipping" selectable="YES" editable="YES" sendsActionOnEndEditing="YES" state="on" borderStyle="bezel" drawsBackground="YES" id="LBl-2M-X7O">
|
||||
<font key="font" metaFont="system"/>
|
||||
<color key="textColor" name="textColor" catalog="System" colorSpace="catalog"/>
|
||||
<color key="backgroundColor" name="textBackgroundColor" catalog="System" colorSpace="catalog"/>
|
||||
</textFieldCell>
|
||||
<connections>
|
||||
<binding destination="uQz-5y-ZL2" name="value" keyPath="values.LocalSocks5.ListenAddress" id="UR8-Hk-Nyh">
|
||||
<dictionary key="options">
|
||||
<bool key="NSContinuouslyUpdatesValue" value="YES"/>
|
||||
</dictionary>
|
||||
</binding>
|
||||
</connections>
|
||||
</textField>
|
||||
<textField horizontalHuggingPriority="251" verticalHuggingPriority="750" translatesAutoresizingMaskIntoConstraints="NO" id="MvY-R0-1FU">
|
||||
<rect key="frame" x="35" y="134" width="201" height="17"/>
|
||||
<textFieldCell key="cell" scrollable="YES" lineBreakMode="clipping" sendsActionOnEndEditing="YES" alignment="right" title="Timeout:" id="sQ9-bj-V0I">
|
||||
<font key="font" metaFont="system"/>
|
||||
<color key="textColor" name="labelColor" catalog="System" colorSpace="catalog"/>
|
||||
<color key="backgroundColor" name="controlColor" catalog="System" colorSpace="catalog"/>
|
||||
</textFieldCell>
|
||||
</textField>
|
||||
<textField verticalHuggingPriority="750" translatesAutoresizingMaskIntoConstraints="NO" id="Zfl-10-Wdk">
|
||||
<rect key="frame" x="242" y="132" width="60" height="22"/>
|
||||
<textFieldCell key="cell" scrollable="YES" lineBreakMode="clipping" selectable="YES" editable="YES" sendsActionOnEndEditing="YES" state="on" borderStyle="bezel" alignment="right" drawsBackground="YES" id="Ity-ir-Fyi">
|
||||
<font key="font" metaFont="system"/>
|
||||
<color key="textColor" name="textColor" catalog="System" colorSpace="catalog"/>
|
||||
<color key="backgroundColor" name="textBackgroundColor" catalog="System" colorSpace="catalog"/>
|
||||
</textFieldCell>
|
||||
<connections>
|
||||
<binding destination="uQz-5y-ZL2" name="value" keyPath="values.LocalSocks5.Timeout" id="gut-fs-P9y">
|
||||
<dictionary key="options">
|
||||
<bool key="NSContinuouslyUpdatesValue" value="YES"/>
|
||||
</dictionary>
|
||||
</binding>
|
||||
<outlet property="formatter" destination="2LX-ic-DJh" id="xUL-JA-BJu"/>
|
||||
</connections>
|
||||
</textField>
|
||||
<button translatesAutoresizingMaskIntoConstraints="NO" id="tGd-pe-2xJ">
|
||||
<rect key="frame" x="240" y="108" width="222" height="18"/>
|
||||
<buttonCell key="cell" type="check" title="Enable Udp Replay" bezelStyle="regularSquare" imagePosition="left" state="on" inset="2" id="R3v-iN-zu8">
|
||||
<behavior key="behavior" changeContents="YES" doesNotDimImage="YES" lightByContents="YES"/>
|
||||
<font key="font" metaFont="system"/>
|
||||
</buttonCell>
|
||||
<connections>
|
||||
<binding destination="uQz-5y-ZL2" name="value" keyPath="values.LocalSocks5.EnableUDPRelay" id="aYQ-xT-BcZ"/>
|
||||
</connections>
|
||||
</button>
|
||||
<textField verticalHuggingPriority="750" translatesAutoresizingMaskIntoConstraints="NO" id="2rw-0u-LXJ">
|
||||
<rect key="frame" x="242" y="196" width="60" height="22"/>
|
||||
<constraints>
|
||||
<constraint firstAttribute="width" constant="60" id="FWr-dm-ysF"/>
|
||||
</constraints>
|
||||
<textFieldCell key="cell" scrollable="YES" lineBreakMode="clipping" selectable="YES" editable="YES" sendsActionOnEndEditing="YES" state="on" borderStyle="bezel" alignment="right" drawsBackground="YES" id="MV1-4D-sap">
|
||||
<font key="font" metaFont="system"/>
|
||||
<color key="textColor" name="textColor" catalog="System" colorSpace="catalog"/>
|
||||
<color key="backgroundColor" name="textBackgroundColor" catalog="System" colorSpace="catalog"/>
|
||||
</textFieldCell>
|
||||
<connections>
|
||||
<binding destination="uQz-5y-ZL2" name="value" keyPath="values.LocalSocks5.ListenPort" id="m5T-YP-Pyp">
|
||||
<dictionary key="options">
|
||||
<bool key="NSContinuouslyUpdatesValue" value="YES"/>
|
||||
</dictionary>
|
||||
</binding>
|
||||
<outlet property="formatter" destination="C7t-aU-bub" id="ANT-yN-RZL"/>
|
||||
</connections>
|
||||
</textField>
|
||||
<textField horizontalHuggingPriority="251" verticalHuggingPriority="750" translatesAutoresizingMaskIntoConstraints="NO" id="a60-LH-adV">
|
||||
<rect key="frame" x="308" y="134" width="99" height="17"/>
|
||||
<constraints>
|
||||
<constraint firstAttribute="width" constant="95" id="eAo-vP-NxC"/>
|
||||
</constraints>
|
||||
<textFieldCell key="cell" scrollable="YES" lineBreakMode="clipping" sendsActionOnEndEditing="YES" title="Seconds" id="4R2-UO-qs7">
|
||||
<font key="font" metaFont="system"/>
|
||||
<color key="textColor" name="labelColor" catalog="System" colorSpace="catalog"/>
|
||||
<color key="backgroundColor" name="controlColor" catalog="System" colorSpace="catalog"/>
|
||||
</textFieldCell>
|
||||
</textField>
|
||||
<button translatesAutoresizingMaskIntoConstraints="NO" id="RcT-mn-xqK">
|
||||
<rect key="frame" x="240" y="88" width="222" height="18"/>
|
||||
<buttonCell key="cell" type="check" title="Enable Verbose Mode" bezelStyle="regularSquare" imagePosition="left" state="on" inset="2" id="cIS-Wb-Rzg">
|
||||
<behavior key="behavior" changeContents="YES" doesNotDimImage="YES" lightByContents="YES"/>
|
||||
<font key="font" metaFont="system"/>
|
||||
</buttonCell>
|
||||
<connections>
|
||||
<binding destination="uQz-5y-ZL2" name="value" keyPath="values.LocalSocks5.EnableVerboseMode" id="iOb-fx-G7F"/>
|
||||
</connections>
|
||||
</button>
|
||||
<textField horizontalHuggingPriority="251" verticalHuggingPriority="750" translatesAutoresizingMaskIntoConstraints="NO" id="RYj-h6-uAT">
|
||||
<rect key="frame" x="98" y="166" width="138" height="17"/>
|
||||
<textFieldCell key="cell" scrollable="YES" lineBreakMode="clipping" sendsActionOnEndEditing="YES" alignment="right" title="Local PAC Listen Port:" id="IMQ-c4-gmc">
|
||||
<font key="font" metaFont="system"/>
|
||||
<color key="textColor" name="labelColor" catalog="System" colorSpace="catalog"/>
|
||||
<color key="backgroundColor" name="controlColor" catalog="System" colorSpace="catalog"/>
|
||||
</textFieldCell>
|
||||
</textField>
|
||||
<textField verticalHuggingPriority="750" translatesAutoresizingMaskIntoConstraints="NO" id="KXG-O0-ake">
|
||||
<rect key="frame" x="242" y="164" width="60" height="22"/>
|
||||
<textFieldCell key="cell" scrollable="YES" lineBreakMode="clipping" selectable="YES" editable="YES" sendsActionOnEndEditing="YES" state="on" borderStyle="bezel" alignment="right" drawsBackground="YES" id="T9o-Og-neF">
|
||||
<font key="font" metaFont="system"/>
|
||||
<color key="textColor" name="textColor" catalog="System" colorSpace="catalog"/>
|
||||
<color key="backgroundColor" name="textBackgroundColor" catalog="System" colorSpace="catalog"/>
|
||||
</textFieldCell>
|
||||
<connections>
|
||||
<binding destination="uQz-5y-ZL2" name="value" keyPath="values.PacServer.ListenPort" id="EkJ-YG-WZk">
|
||||
<dictionary key="options">
|
||||
<bool key="NSContinuouslyUpdatesValue" value="YES"/>
|
||||
</dictionary>
|
||||
</binding>
|
||||
<outlet property="formatter" destination="C7t-aU-bub" id="3M6-FE-SDQ"/>
|
||||
</connections>
|
||||
</textField>
|
||||
</subviews>
|
||||
<constraints>
|
||||
<constraint firstItem="r8z-mM-M0X" firstAttribute="centerY" secondItem="2rw-0u-LXJ" secondAttribute="centerY" id="5fA-ZQ-ZjQ"/>
|
||||
<constraint firstItem="r8z-mM-M0X" firstAttribute="leading" secondItem="MvY-R0-1FU" secondAttribute="leading" id="6eA-0g-irI"/>
|
||||
<constraint firstItem="KXG-O0-ake" firstAttribute="leading" secondItem="RYj-h6-uAT" secondAttribute="trailing" constant="8" symbolic="YES" id="81I-2P-HK4"/>
|
||||
<constraint firstItem="2rw-0u-LXJ" firstAttribute="leading" secondItem="KXG-O0-ake" secondAttribute="leading" id="BmQ-43-oEu"/>
|
||||
<constraint firstItem="tGd-pe-2xJ" firstAttribute="top" secondItem="Zfl-10-Wdk" secondAttribute="bottom" constant="8" symbolic="YES" id="D9d-1I-YcC"/>
|
||||
<constraint firstItem="RYj-h6-uAT" firstAttribute="centerY" secondItem="KXG-O0-ake" secondAttribute="centerY" id="Dgd-fs-WV1"/>
|
||||
<constraint firstItem="2rw-0u-LXJ" firstAttribute="trailing" secondItem="KXG-O0-ake" secondAttribute="trailing" id="Dlo-y8-pDH"/>
|
||||
<constraint firstItem="Zfl-10-Wdk" firstAttribute="leading" secondItem="tGd-pe-2xJ" secondAttribute="leading" id="ERU-7y-65C"/>
|
||||
<constraint firstAttribute="trailing" secondItem="tGd-pe-2xJ" secondAttribute="trailing" constant="20" symbolic="YES" id="Hu7-bS-L8S"/>
|
||||
<constraint firstItem="KXG-O0-ake" firstAttribute="leading" secondItem="Zfl-10-Wdk" secondAttribute="leading" id="JAW-8x-8Ec"/>
|
||||
<constraint firstItem="cd8-PU-OwG" firstAttribute="top" secondItem="Pc1-f7-0zA" secondAttribute="top" constant="20" symbolic="YES" id="Kgn-0j-CLQ"/>
|
||||
<constraint firstItem="c8B-qf-UNK" firstAttribute="baseline" secondItem="cd8-PU-OwG" secondAttribute="baseline" id="MKo-Cq-dg7"/>
|
||||
<constraint firstItem="c8B-qf-UNK" firstAttribute="leading" secondItem="Pc1-f7-0zA" secondAttribute="leading" constant="37" id="O7u-jq-IpO"/>
|
||||
<constraint firstItem="Zfl-10-Wdk" firstAttribute="leading" secondItem="MvY-R0-1FU" secondAttribute="trailing" constant="8" symbolic="YES" id="OMl-E5-RNK"/>
|
||||
<constraint firstItem="cd8-PU-OwG" firstAttribute="trailing" secondItem="a60-LH-adV" secondAttribute="trailing" id="PVl-Og-tdF"/>
|
||||
<constraint firstItem="a60-LH-adV" firstAttribute="leading" secondItem="Zfl-10-Wdk" secondAttribute="trailing" constant="8" symbolic="YES" id="W19-Vm-mO0"/>
|
||||
<constraint firstItem="2rw-0u-LXJ" firstAttribute="leading" secondItem="r8z-mM-M0X" secondAttribute="trailing" constant="8" symbolic="YES" id="Ysf-HF-2KD"/>
|
||||
<constraint firstItem="tGd-pe-2xJ" firstAttribute="trailing" secondItem="RcT-mn-xqK" secondAttribute="trailing" id="agb-Xy-AfZ"/>
|
||||
<constraint firstItem="2rw-0u-LXJ" firstAttribute="top" secondItem="cd8-PU-OwG" secondAttribute="bottom" constant="10" symbolic="YES" id="asF-SN-6qK"/>
|
||||
<constraint firstItem="Zfl-10-Wdk" firstAttribute="centerY" secondItem="a60-LH-adV" secondAttribute="centerY" id="cqe-kg-5MV"/>
|
||||
<constraint firstItem="cd8-PU-OwG" firstAttribute="leading" secondItem="c8B-qf-UNK" secondAttribute="trailing" constant="8" symbolic="YES" id="eAj-w3-62X"/>
|
||||
<constraint firstItem="MvY-R0-1FU" firstAttribute="baseline" secondItem="a60-LH-adV" secondAttribute="baseline" id="eUT-gJ-nfA"/>
|
||||
<constraint firstItem="Zfl-10-Wdk" firstAttribute="top" secondItem="KXG-O0-ake" secondAttribute="bottom" constant="10" symbolic="YES" id="mgU-8h-vo1"/>
|
||||
<constraint firstItem="KXG-O0-ake" firstAttribute="top" secondItem="2rw-0u-LXJ" secondAttribute="bottom" constant="10" symbolic="YES" id="nQG-MA-bW1"/>
|
||||
<constraint firstItem="tGd-pe-2xJ" firstAttribute="leading" secondItem="RcT-mn-xqK" secondAttribute="leading" id="oCa-3p-Nbm"/>
|
||||
<constraint firstAttribute="trailing" secondItem="cd8-PU-OwG" secondAttribute="trailing" constant="75" id="oTW-Py-JGm"/>
|
||||
<constraint firstItem="RcT-mn-xqK" firstAttribute="top" secondItem="tGd-pe-2xJ" secondAttribute="bottom" constant="6" symbolic="YES" id="qWE-ve-msF"/>
|
||||
<constraint firstItem="cd8-PU-OwG" firstAttribute="leading" secondItem="2rw-0u-LXJ" secondAttribute="leading" id="rRF-Mo-I8o"/>
|
||||
<constraint firstItem="KXG-O0-ake" firstAttribute="trailing" secondItem="Zfl-10-Wdk" secondAttribute="trailing" id="s8J-cx-cKI"/>
|
||||
<constraint firstItem="c8B-qf-UNK" firstAttribute="leading" secondItem="r8z-mM-M0X" secondAttribute="leading" id="tTG-qx-4ET"/>
|
||||
</constraints>
|
||||
</view>
|
||||
</tabViewItem>
|
||||
<tabViewItem label="HTTP" identifier="http" id="F5Q-Ce-JJN">
|
||||
<view key="view" id="kK3-29-KeI">
|
||||
<rect key="frame" x="0.0" y="0.0" width="480" height="270"/>
|
||||
<autoresizingMask key="autoresizingMask" widthSizable="YES" heightSizable="YES"/>
|
||||
<subviews>
|
||||
<textField horizontalHuggingPriority="251" verticalHuggingPriority="750" translatesAutoresizingMaskIntoConstraints="NO" id="XI2-x3-9ie">
|
||||
<rect key="frame" x="18" y="230" width="217" height="17"/>
|
||||
<textFieldCell key="cell" scrollable="YES" lineBreakMode="clipping" sendsActionOnEndEditing="YES" alignment="right" title="HTTP Proxy Listen Address:" id="6W4-TY-Bw5">
|
||||
<font key="font" metaFont="system"/>
|
||||
<color key="textColor" name="labelColor" catalog="System" colorSpace="catalog"/>
|
||||
<color key="backgroundColor" name="controlColor" catalog="System" colorSpace="catalog"/>
|
||||
</textFieldCell>
|
||||
</textField>
|
||||
<textField horizontalHuggingPriority="251" verticalHuggingPriority="750" translatesAutoresizingMaskIntoConstraints="NO" id="URa-Z3-BgW">
|
||||
<rect key="frame" x="18" y="198" width="217" height="17"/>
|
||||
<textFieldCell key="cell" scrollable="YES" lineBreakMode="clipping" sendsActionOnEndEditing="YES" alignment="right" title="HTTP Proxy Listen Port:" id="Ww9-j9-WYR">
|
||||
<font key="font" metaFont="system"/>
|
||||
<color key="textColor" name="labelColor" catalog="System" colorSpace="catalog"/>
|
||||
<color key="backgroundColor" name="controlColor" catalog="System" colorSpace="catalog"/>
|
||||
</textFieldCell>
|
||||
</textField>
|
||||
<textField verticalHuggingPriority="750" translatesAutoresizingMaskIntoConstraints="NO" id="A8G-1x-YxA">
|
||||
<rect key="frame" x="247" y="228" width="213" height="22"/>
|
||||
<textFieldCell key="cell" scrollable="YES" lineBreakMode="clipping" selectable="YES" editable="YES" sendsActionOnEndEditing="YES" state="on" borderStyle="bezel" drawsBackground="YES" id="p6k-oG-17u">
|
||||
<font key="font" metaFont="system"/>
|
||||
<color key="textColor" name="textColor" catalog="System" colorSpace="catalog"/>
|
||||
<color key="backgroundColor" name="textBackgroundColor" catalog="System" colorSpace="catalog"/>
|
||||
</textFieldCell>
|
||||
<connections>
|
||||
<binding destination="uQz-5y-ZL2" name="value" keyPath="values.LocalHTTP.ListenAddress" id="OWW-xe-Axa">
|
||||
<dictionary key="options">
|
||||
<bool key="NSContinuouslyUpdatesValue" value="YES"/>
|
||||
</dictionary>
|
||||
</binding>
|
||||
</connections>
|
||||
</textField>
|
||||
<textField verticalHuggingPriority="750" translatesAutoresizingMaskIntoConstraints="NO" id="OoG-C4-oji">
|
||||
<rect key="frame" x="247" y="196" width="70" height="22"/>
|
||||
<textFieldCell key="cell" scrollable="YES" lineBreakMode="clipping" selectable="YES" editable="YES" sendsActionOnEndEditing="YES" state="on" borderStyle="bezel" alignment="right" drawsBackground="YES" id="0bX-LS-7QW">
|
||||
<font key="font" metaFont="system"/>
|
||||
<color key="textColor" name="textColor" catalog="System" colorSpace="catalog"/>
|
||||
<color key="backgroundColor" name="textBackgroundColor" catalog="System" colorSpace="catalog"/>
|
||||
</textFieldCell>
|
||||
<connections>
|
||||
<binding destination="uQz-5y-ZL2" name="value" keyPath="values.LocalHTTP.ListenPort" id="ehW-40-ivo">
|
||||
<dictionary key="options">
|
||||
<bool key="NSContinuouslyUpdatesValue" value="YES"/>
|
||||
</dictionary>
|
||||
</binding>
|
||||
<outlet property="formatter" destination="C7t-aU-bub" id="I35-3e-hTk"/>
|
||||
</connections>
|
||||
</textField>
|
||||
<button translatesAutoresizingMaskIntoConstraints="NO" id="xWf-Bw-9V9">
|
||||
<rect key="frame" x="245" y="172" width="138" height="18"/>
|
||||
<constraints>
|
||||
<constraint firstAttribute="width" constant="134" id="Wbt-ig-Mcv"/>
|
||||
</constraints>
|
||||
<buttonCell key="cell" type="check" title="HTTP Proxy Enable" bezelStyle="regularSquare" imagePosition="left" state="on" inset="2" id="jr6-x7-WJD">
|
||||
<behavior key="behavior" changeContents="YES" doesNotDimImage="YES" lightByContents="YES"/>
|
||||
<font key="font" metaFont="system"/>
|
||||
</buttonCell>
|
||||
<connections>
|
||||
<binding destination="uQz-5y-ZL2" name="value" keyPath="values.LocalHTTPOn" id="Be3-2x-hs4"/>
|
||||
</connections>
|
||||
</button>
|
||||
<button translatesAutoresizingMaskIntoConstraints="NO" id="xki-Xv-wgd">
|
||||
<rect key="frame" x="245" y="146" width="141" height="18"/>
|
||||
<buttonCell key="cell" type="check" title="Follow Global Mode" bezelStyle="regularSquare" imagePosition="left" state="on" inset="2" id="hqM-ym-1oZ">
|
||||
<behavior key="behavior" changeContents="YES" doesNotDimImage="YES" lightByContents="YES"/>
|
||||
<font key="font" metaFont="system"/>
|
||||
</buttonCell>
|
||||
<connections>
|
||||
<binding destination="uQz-5y-ZL2" name="value" keyPath="values.LocalHTTP.FollowGlobal" id="lhA-r0-vBt"/>
|
||||
</connections>
|
||||
</button>
|
||||
</subviews>
|
||||
<constraints>
|
||||
<constraint firstItem="A8G-1x-YxA" firstAttribute="top" secondItem="kK3-29-KeI" secondAttribute="top" constant="20" symbolic="YES" id="02x-RO-tGC"/>
|
||||
<constraint firstItem="URa-Z3-BgW" firstAttribute="centerY" secondItem="OoG-C4-oji" secondAttribute="centerY" id="0uL-he-BqO"/>
|
||||
<constraint firstItem="XI2-x3-9ie" firstAttribute="leading" secondItem="URa-Z3-BgW" secondAttribute="leading" id="34E-fy-3Lj"/>
|
||||
<constraint firstItem="xWf-Bw-9V9" firstAttribute="leading" secondItem="xki-Xv-wgd" secondAttribute="leading" id="3dK-Hu-pL1"/>
|
||||
<constraint firstAttribute="trailing" secondItem="xWf-Bw-9V9" secondAttribute="trailing" constant="99" id="FRw-X4-zTm"/>
|
||||
<constraint firstItem="OoG-C4-oji" firstAttribute="leading" secondItem="xWf-Bw-9V9" secondAttribute="leading" id="Kmn-zZ-K3R"/>
|
||||
<constraint firstItem="XI2-x3-9ie" firstAttribute="leading" secondItem="kK3-29-KeI" secondAttribute="leading" constant="20" symbolic="YES" id="LgM-ig-Rik"/>
|
||||
<constraint firstItem="A8G-1x-YxA" firstAttribute="leading" secondItem="XI2-x3-9ie" secondAttribute="trailing" constant="14" id="NLO-Id-IsN"/>
|
||||
<constraint firstItem="xWf-Bw-9V9" firstAttribute="top" secondItem="OoG-C4-oji" secondAttribute="bottom" constant="8" symbolic="YES" id="ORb-2x-au5"/>
|
||||
<constraint firstAttribute="trailing" secondItem="A8G-1x-YxA" secondAttribute="trailing" constant="20" symbolic="YES" id="OUP-Ip-QJc"/>
|
||||
<constraint firstItem="A8G-1x-YxA" firstAttribute="leading" secondItem="OoG-C4-oji" secondAttribute="leading" id="SdK-j6-hDp"/>
|
||||
<constraint firstItem="OoG-C4-oji" firstAttribute="top" secondItem="A8G-1x-YxA" secondAttribute="bottom" constant="10" symbolic="YES" id="U3H-rt-7Xd"/>
|
||||
<constraint firstItem="XI2-x3-9ie" firstAttribute="trailing" secondItem="URa-Z3-BgW" secondAttribute="trailing" id="aDF-tw-Xjq"/>
|
||||
<constraint firstItem="XI2-x3-9ie" firstAttribute="centerY" secondItem="A8G-1x-YxA" secondAttribute="centerY" id="bc0-WT-4zf"/>
|
||||
<constraint firstItem="xki-Xv-wgd" firstAttribute="top" secondItem="xWf-Bw-9V9" secondAttribute="bottom" constant="12" id="g8b-LP-IHH"/>
|
||||
<constraint firstItem="A8G-1x-YxA" firstAttribute="trailing" secondItem="OoG-C4-oji" secondAttribute="trailing" constant="143" id="mSz-1z-FKy"/>
|
||||
</constraints>
|
||||
</view>
|
||||
</tabViewItem>
|
||||
<tabViewItem label="Kcptun" identifier="kcptun" id="n2m-5k-0Ws">
|
||||
<view key="view" id="gw2-in-3dl">
|
||||
<rect key="frame" x="0.0" y="0.0" width="480" height="270"/>
|
||||
<autoresizingMask key="autoresizingMask" widthSizable="YES" heightSizable="YES"/>
|
||||
<subviews>
|
||||
<textField horizontalHuggingPriority="251" verticalHuggingPriority="750" translatesAutoresizingMaskIntoConstraints="NO" id="Dyc-qt-SSc">
|
||||
<rect key="frame" x="18" y="198" width="223" height="17"/>
|
||||
<textFieldCell key="cell" scrollable="YES" lineBreakMode="clipping" sendsActionOnEndEditing="YES" alignment="right" title="Local Kcptun Listen Port:" id="pdk-mh-FAj">
|
||||
<font key="font" metaFont="system"/>
|
||||
<color key="textColor" name="labelColor" catalog="System" colorSpace="catalog"/>
|
||||
<color key="backgroundColor" name="controlColor" catalog="System" colorSpace="catalog"/>
|
||||
</textFieldCell>
|
||||
</textField>
|
||||
<textField horizontalHuggingPriority="251" verticalHuggingPriority="750" translatesAutoresizingMaskIntoConstraints="NO" id="xK4-Po-1CN">
|
||||
<rect key="frame" x="18" y="231" width="223" height="17"/>
|
||||
<textFieldCell key="cell" scrollable="YES" lineBreakMode="clipping" sendsActionOnEndEditing="YES" alignment="right" title="Local Kcptun Listen Address:" id="ejW-7L-9bP">
|
||||
<font key="font" metaFont="system"/>
|
||||
<color key="textColor" name="labelColor" catalog="System" colorSpace="catalog"/>
|
||||
<color key="backgroundColor" name="controlColor" catalog="System" colorSpace="catalog"/>
|
||||
</textFieldCell>
|
||||
</textField>
|
||||
<textField verticalHuggingPriority="750" translatesAutoresizingMaskIntoConstraints="NO" id="jK6-0O-O8H">
|
||||
<rect key="frame" x="247" y="228" width="163" height="22"/>
|
||||
<constraints>
|
||||
<constraint firstAttribute="width" constant="163" id="nae-H0-Mxk"/>
|
||||
</constraints>
|
||||
<textFieldCell key="cell" scrollable="YES" lineBreakMode="clipping" selectable="YES" editable="YES" sendsActionOnEndEditing="YES" state="on" borderStyle="bezel" drawsBackground="YES" id="pD7-87-JCB">
|
||||
<font key="font" metaFont="system"/>
|
||||
<color key="textColor" name="textColor" catalog="System" colorSpace="catalog"/>
|
||||
<color key="backgroundColor" name="textBackgroundColor" catalog="System" colorSpace="catalog"/>
|
||||
</textFieldCell>
|
||||
<connections>
|
||||
<binding destination="uQz-5y-ZL2" name="value" keyPath="values.Kcptun.LocalHost" id="q8c-ct-vnN"/>
|
||||
</connections>
|
||||
</textField>
|
||||
<textField verticalHuggingPriority="750" translatesAutoresizingMaskIntoConstraints="NO" id="sfN-cK-7R8">
|
||||
<rect key="frame" x="247" y="196" width="60" height="22"/>
|
||||
<constraints>
|
||||
<constraint firstAttribute="width" constant="60" id="0nA-C5-ILL"/>
|
||||
</constraints>
|
||||
<textFieldCell key="cell" scrollable="YES" lineBreakMode="clipping" selectable="YES" editable="YES" sendsActionOnEndEditing="YES" state="on" borderStyle="bezel" alignment="right" drawsBackground="YES" id="HXm-3x-Tre">
|
||||
<font key="font" metaFont="system"/>
|
||||
<color key="textColor" name="textColor" catalog="System" colorSpace="catalog"/>
|
||||
<color key="backgroundColor" name="textBackgroundColor" catalog="System" colorSpace="catalog"/>
|
||||
</textFieldCell>
|
||||
<connections>
|
||||
<binding destination="uQz-5y-ZL2" name="value" keyPath="values.Kcptun.LocalPort" id="wFe-W7-zZK"/>
|
||||
<outlet property="formatter" destination="C7t-aU-bub" id="iNv-bX-XNl"/>
|
||||
</connections>
|
||||
</textField>
|
||||
<textField verticalHuggingPriority="750" allowsCharacterPickerTouchBarItem="NO" translatesAutoresizingMaskIntoConstraints="NO" id="Gjd-0g-WMg">
|
||||
<rect key="frame" x="247" y="164" width="60" height="22"/>
|
||||
<textFieldCell key="cell" scrollable="YES" lineBreakMode="clipping" selectable="YES" editable="YES" sendsActionOnEndEditing="YES" state="on" borderStyle="bezel" alignment="right" drawsBackground="YES" id="wRJ-eh-wsG">
|
||||
<font key="font" metaFont="system"/>
|
||||
<color key="textColor" name="textColor" catalog="System" colorSpace="catalog"/>
|
||||
<color key="backgroundColor" name="textBackgroundColor" catalog="System" colorSpace="catalog"/>
|
||||
</textFieldCell>
|
||||
<connections>
|
||||
<binding destination="uQz-5y-ZL2" name="value" keyPath="values.Kcptun.Conn" id="1BX-t0-d3c"/>
|
||||
<outlet property="formatter" destination="1En-Ey-GAr" id="j7y-xH-T4M"/>
|
||||
</connections>
|
||||
</textField>
|
||||
<textField horizontalHuggingPriority="251" verticalHuggingPriority="750" allowsCharacterPickerTouchBarItem="NO" translatesAutoresizingMaskIntoConstraints="NO" id="AlK-Cr-J8p">
|
||||
<rect key="frame" x="18" y="167" width="223" height="17"/>
|
||||
<textFieldCell key="cell" scrollable="YES" lineBreakMode="clipping" sendsActionOnEndEditing="YES" alignment="right" title="Num of Kcptun connections:" id="FSi-9j-QBe">
|
||||
<font key="font" metaFont="system"/>
|
||||
<color key="textColor" name="labelColor" catalog="System" colorSpace="catalog"/>
|
||||
<color key="backgroundColor" name="controlColor" catalog="System" colorSpace="catalog"/>
|
||||
</textFieldCell>
|
||||
</textField>
|
||||
</subviews>
|
||||
<constraints>
|
||||
<constraint firstItem="Gjd-0g-WMg" firstAttribute="leading" secondItem="AlK-Cr-J8p" secondAttribute="trailing" constant="8" symbolic="YES" id="1Ik-7U-fOC"/>
|
||||
<constraint firstItem="sfN-cK-7R8" firstAttribute="leading" secondItem="Dyc-qt-SSc" secondAttribute="trailing" constant="8" symbolic="YES" id="4Cq-Xv-Iw0"/>
|
||||
<constraint firstItem="sfN-cK-7R8" firstAttribute="trailing" secondItem="Gjd-0g-WMg" secondAttribute="trailing" id="4Ih-25-Jcr"/>
|
||||
<constraint firstItem="xK4-Po-1CN" firstAttribute="leading" secondItem="gw2-in-3dl" secondAttribute="leading" constant="20" symbolic="YES" id="EVQ-0K-ba0"/>
|
||||
<constraint firstItem="sfN-cK-7R8" firstAttribute="leading" secondItem="Gjd-0g-WMg" secondAttribute="leading" id="FgI-RP-3qN"/>
|
||||
<constraint firstItem="jK6-0O-O8H" firstAttribute="leading" secondItem="xK4-Po-1CN" secondAttribute="trailing" constant="8" symbolic="YES" id="bpQ-Rc-mZA"/>
|
||||
<constraint firstItem="Gjd-0g-WMg" firstAttribute="top" secondItem="sfN-cK-7R8" secondAttribute="bottom" constant="10" symbolic="YES" id="dhe-rt-i5y"/>
|
||||
<constraint firstItem="AlK-Cr-J8p" firstAttribute="baseline" secondItem="Gjd-0g-WMg" secondAttribute="baseline" id="gLR-wc-8Ty"/>
|
||||
<constraint firstItem="jK6-0O-O8H" firstAttribute="top" secondItem="gw2-in-3dl" secondAttribute="top" constant="20" symbolic="YES" id="nQz-hC-lsV"/>
|
||||
<constraint firstItem="xK4-Po-1CN" firstAttribute="baseline" secondItem="jK6-0O-O8H" secondAttribute="baseline" id="nVi-Hx-fA6"/>
|
||||
<constraint firstItem="xK4-Po-1CN" firstAttribute="leading" secondItem="Dyc-qt-SSc" secondAttribute="leading" id="nox-TS-dVW"/>
|
||||
<constraint firstAttribute="trailing" secondItem="jK6-0O-O8H" secondAttribute="trailing" constant="70" id="pHp-9M-UVn"/>
|
||||
<constraint firstItem="Dyc-qt-SSc" firstAttribute="leading" secondItem="AlK-Cr-J8p" secondAttribute="leading" id="q3V-cG-Lmq"/>
|
||||
<constraint firstItem="sfN-cK-7R8" firstAttribute="top" secondItem="jK6-0O-O8H" secondAttribute="bottom" constant="10" symbolic="YES" id="uTV-uK-wqG"/>
|
||||
<constraint firstItem="Dyc-qt-SSc" firstAttribute="centerY" secondItem="sfN-cK-7R8" secondAttribute="centerY" id="wti-lk-lbk"/>
|
||||
<constraint firstItem="jK6-0O-O8H" firstAttribute="leading" secondItem="sfN-cK-7R8" secondAttribute="leading" id="x37-sl-y3z"/>
|
||||
</constraints>
|
||||
</view>
|
||||
</tabViewItem>
|
||||
<tabViewItem label="Interfaces" identifier="interfaces" id="eDR-CZ-P4p">
|
||||
<view key="view" id="Ati-LQ-RB7">
|
||||
<rect key="frame" x="0.0" y="0.0" width="480" height="270"/>
|
||||
<autoresizingMask key="autoresizingMask" widthSizable="YES" heightSizable="YES"/>
|
||||
<subviews>
|
||||
<button translatesAutoresizingMaskIntoConstraints="NO" id="x9X-2w-cOy">
|
||||
<rect key="frame" x="18" y="234" width="262" height="18"/>
|
||||
<buttonCell key="cell" type="check" title="Auto Configure" bezelStyle="regularSquare" imagePosition="left" state="on" inset="2" id="bu3-s5-bYM">
|
||||
<behavior key="behavior" changeContents="YES" doesNotDimImage="YES" lightByContents="YES"/>
|
||||
<font key="font" metaFont="system"/>
|
||||
</buttonCell>
|
||||
<connections>
|
||||
<binding destination="uQz-5y-ZL2" name="value" keyPath="values.AutoConfigureNetworkServices" id="lqW-ja-MOj"/>
|
||||
</connections>
|
||||
</button>
|
||||
<scrollView autohidesScrollers="YES" horizontalLineScroll="19" horizontalPageScroll="10" verticalLineScroll="19" verticalPageScroll="10" usesPredominantAxisScrolling="NO" translatesAutoresizingMaskIntoConstraints="NO" id="dGc-zC-AYJ">
|
||||
<rect key="frame" x="20" y="20" width="258" height="199"/>
|
||||
<clipView key="contentView" id="9Wy-0J-wQ8">
|
||||
<rect key="frame" x="1" y="1" width="256" height="197"/>
|
||||
<autoresizingMask key="autoresizingMask" widthSizable="YES" heightSizable="YES"/>
|
||||
<subviews>
|
||||
<tableView verticalHuggingPriority="750" allowsExpansionToolTips="YES" columnAutoresizingStyle="lastColumnOnly" columnSelection="YES" multipleSelection="NO" autosaveColumns="NO" id="Vp3-dp-iqv">
|
||||
<rect key="frame" x="0.0" y="0.0" width="256" height="197"/>
|
||||
<autoresizingMask key="autoresizingMask"/>
|
||||
<size key="intercellSpacing" width="3" height="2"/>
|
||||
<color key="backgroundColor" name="controlBackgroundColor" catalog="System" colorSpace="catalog"/>
|
||||
<color key="gridColor" name="gridColor" catalog="System" colorSpace="catalog"/>
|
||||
<tableColumns>
|
||||
<tableColumn width="253" minWidth="40" maxWidth="1000" id="4CL-dk-HUu">
|
||||
<tableHeaderCell key="headerCell" lineBreakMode="truncatingTail" borderStyle="border">
|
||||
<font key="font" metaFont="smallSystem"/>
|
||||
<color key="textColor" name="headerTextColor" catalog="System" colorSpace="catalog"/>
|
||||
<color key="backgroundColor" name="headerColor" catalog="System" colorSpace="catalog"/>
|
||||
</tableHeaderCell>
|
||||
<buttonCell key="dataCell" type="check" title="Check" bezelStyle="regularSquare" imagePosition="left" inset="2" id="8Ku-VV-ZaY">
|
||||
<behavior key="behavior" changeContents="YES" doesNotDimImage="YES" lightByContents="YES"/>
|
||||
<font key="font" metaFont="system"/>
|
||||
</buttonCell>
|
||||
<tableColumnResizingMask key="resizingMask" resizeWithTable="YES" userResizable="YES"/>
|
||||
</tableColumn>
|
||||
</tableColumns>
|
||||
<connections>
|
||||
<binding destination="uQz-5y-ZL2" name="enabled" keyPath="values.AutoConfigureNetworkServices" id="h72-DX-clT">
|
||||
<dictionary key="options">
|
||||
<string key="NSValueTransformerName">NSNegateBoolean</string>
|
||||
</dictionary>
|
||||
</binding>
|
||||
<outlet property="dataSource" destination="2Fn-b8-1pQ" id="Ri8-L6-adR"/>
|
||||
<outlet property="delegate" destination="2Fn-b8-1pQ" id="w7K-z3-I2P"/>
|
||||
</connections>
|
||||
</tableView>
|
||||
</subviews>
|
||||
</clipView>
|
||||
<scroller key="horizontalScroller" hidden="YES" verticalHuggingPriority="750" horizontal="YES" id="FHm-ib-d94">
|
||||
<rect key="frame" x="-7" y="-14" width="0.0" height="15"/>
|
||||
<autoresizingMask key="autoresizingMask"/>
|
||||
</scroller>
|
||||
<scroller key="verticalScroller" hidden="YES" verticalHuggingPriority="750" horizontal="NO" id="sEE-Wn-Fcs">
|
||||
<rect key="frame" x="94" y="1" width="15" height="0.0"/>
|
||||
<autoresizingMask key="autoresizingMask"/>
|
||||
</scroller>
|
||||
</scrollView>
|
||||
<textField horizontalHuggingPriority="251" verticalHuggingPriority="750" allowsCharacterPickerTouchBarItem="NO" translatesAutoresizingMaskIntoConstraints="NO" id="fMc-SG-EDy">
|
||||
<rect key="frame" x="294" y="124" width="168" height="127"/>
|
||||
<constraints>
|
||||
<constraint firstAttribute="height" constant="127" id="7RX-Tv-NgE"/>
|
||||
<constraint firstAttribute="width" constant="164" id="w3F-1W-4Xf"/>
|
||||
</constraints>
|
||||
<textFieldCell key="cell" sendsActionOnEndEditing="YES" title="Proxy mode of which network interfaces would be controlled." id="t0I-6n-gnu">
|
||||
<font key="font" metaFont="system"/>
|
||||
<color key="textColor" name="labelColor" catalog="System" colorSpace="catalog"/>
|
||||
<color key="backgroundColor" name="controlColor" catalog="System" colorSpace="catalog"/>
|
||||
</textFieldCell>
|
||||
</textField>
|
||||
</subviews>
|
||||
<constraints>
|
||||
<constraint firstAttribute="bottom" secondItem="dGc-zC-AYJ" secondAttribute="bottom" constant="20" symbolic="YES" id="08z-SE-Kyo"/>
|
||||
<constraint firstItem="fMc-SG-EDy" firstAttribute="leading" secondItem="x9X-2w-cOy" secondAttribute="trailing" constant="18" id="HF3-TE-DEP"/>
|
||||
<constraint firstAttribute="trailing" secondItem="fMc-SG-EDy" secondAttribute="trailing" constant="20" symbolic="YES" id="LHq-gI-4f5"/>
|
||||
<constraint firstItem="x9X-2w-cOy" firstAttribute="top" secondItem="Ati-LQ-RB7" secondAttribute="top" constant="20" symbolic="YES" id="MjV-4U-Uvd"/>
|
||||
<constraint firstItem="x9X-2w-cOy" firstAttribute="leading" secondItem="dGc-zC-AYJ" secondAttribute="leading" id="Prz-C0-ZQW"/>
|
||||
<constraint firstItem="x9X-2w-cOy" firstAttribute="leading" secondItem="Ati-LQ-RB7" secondAttribute="leading" constant="20" symbolic="YES" id="W2K-E3-S0k"/>
|
||||
<constraint firstItem="fMc-SG-EDy" firstAttribute="top" secondItem="Ati-LQ-RB7" secondAttribute="top" constant="19" id="bzT-Yv-aYZ"/>
|
||||
<constraint firstItem="dGc-zC-AYJ" firstAttribute="top" secondItem="x9X-2w-cOy" secondAttribute="bottom" constant="17" id="jcx-J7-sYt"/>
|
||||
<constraint firstItem="x9X-2w-cOy" firstAttribute="trailing" secondItem="dGc-zC-AYJ" secondAttribute="trailing" id="lPR-ex-Jc9"/>
|
||||
</constraints>
|
||||
</view>
|
||||
</tabViewItem>
|
||||
<tabViewItem label="Shortcuts" identifier="shortcuts" id="gpA-k4-fiw">
|
||||
<view key="view" id="B6N-zy-SRg">
|
||||
<rect key="frame" x="0.0" y="0.0" width="480" height="270"/>
|
||||
<autoresizingMask key="autoresizingMask" widthSizable="YES" heightSizable="YES"/>
|
||||
<subviews>
|
||||
<customView translatesAutoresizingMaskIntoConstraints="NO" id="3eT-fn-moA" customClass="MASShortcutView">
|
||||
<rect key="frame" x="240" y="204" width="163" height="19"/>
|
||||
<userDefinedRuntimeAttributes>
|
||||
<userDefinedRuntimeAttribute type="string" keyPath="associatedUserDefaultsKey" value="SwitchProxyMode"/>
|
||||
</userDefinedRuntimeAttributes>
|
||||
</customView>
|
||||
<customView translatesAutoresizingMaskIntoConstraints="NO" id="pbX-DJ-7mU" customClass="MASShortcutView">
|
||||
<rect key="frame" x="240" y="231" width="163" height="19"/>
|
||||
<userDefinedRuntimeAttributes>
|
||||
<userDefinedRuntimeAttribute type="string" keyPath="associatedUserDefaultsKey" value="ToggleRunning"/>
|
||||
</userDefinedRuntimeAttributes>
|
||||
</customView>
|
||||
<textField horizontalHuggingPriority="251" verticalHuggingPriority="750" allowsCharacterPickerTouchBarItem="NO" translatesAutoresizingMaskIntoConstraints="NO" id="q90-qj-BXy">
|
||||
<rect key="frame" x="76" y="205" width="158" height="17"/>
|
||||
<textFieldCell key="cell" scrollable="YES" lineBreakMode="clipping" sendsActionOnEndEditing="YES" alignment="right" title="Switch mode:" id="BaL-cn-m8v">
|
||||
<font key="font" metaFont="system"/>
|
||||
<color key="textColor" name="labelColor" catalog="System" colorSpace="catalog"/>
|
||||
<color key="backgroundColor" name="controlColor" catalog="System" colorSpace="catalog"/>
|
||||
</textFieldCell>
|
||||
</textField>
|
||||
<textField horizontalHuggingPriority="251" verticalHuggingPriority="750" allowsCharacterPickerTouchBarItem="NO" translatesAutoresizingMaskIntoConstraints="NO" id="hbS-Ox-rTR">
|
||||
<rect key="frame" x="76" y="233" width="158" height="17"/>
|
||||
<constraints>
|
||||
<constraint firstAttribute="width" constant="154" id="Cfg-ba-QCN"/>
|
||||
</constraints>
|
||||
<textFieldCell key="cell" scrollable="YES" lineBreakMode="clipping" sendsActionOnEndEditing="YES" alignment="right" title="Toggle On/Off:" id="95S-ma-8Q7">
|
||||
<font key="font" metaFont="system"/>
|
||||
<color key="textColor" name="labelColor" catalog="System" colorSpace="catalog"/>
|
||||
<color key="backgroundColor" name="controlColor" catalog="System" colorSpace="catalog"/>
|
||||
</textFieldCell>
|
||||
</textField>
|
||||
</subviews>
|
||||
<constraints>
|
||||
<constraint firstItem="pbX-DJ-7mU" firstAttribute="trailing" secondItem="3eT-fn-moA" secondAttribute="trailing" id="2ju-jN-JWT"/>
|
||||
<constraint firstItem="q90-qj-BXy" firstAttribute="top" secondItem="hbS-Ox-rTR" secondAttribute="bottom" constant="11" id="8B1-rf-lUm"/>
|
||||
<constraint firstItem="hbS-Ox-rTR" firstAttribute="top" secondItem="B6N-zy-SRg" secondAttribute="top" constant="20" symbolic="YES" id="GwV-Dx-31a"/>
|
||||
<constraint firstItem="3eT-fn-moA" firstAttribute="top" secondItem="B6N-zy-SRg" secondAttribute="top" constant="47" id="I65-QH-LP2"/>
|
||||
<constraint firstItem="3eT-fn-moA" firstAttribute="top" secondItem="pbX-DJ-7mU" secondAttribute="bottom" constant="8" symbolic="YES" id="b5q-tC-PRf"/>
|
||||
<constraint firstItem="hbS-Ox-rTR" firstAttribute="leading" secondItem="q90-qj-BXy" secondAttribute="leading" id="edI-pM-3gs"/>
|
||||
<constraint firstAttribute="trailing" secondItem="pbX-DJ-7mU" secondAttribute="trailing" constant="77" id="iNX-Gy-TNd"/>
|
||||
<constraint firstItem="pbX-DJ-7mU" firstAttribute="leading" secondItem="3eT-fn-moA" secondAttribute="leading" id="mPI-lq-sbb"/>
|
||||
<constraint firstItem="hbS-Ox-rTR" firstAttribute="top" secondItem="pbX-DJ-7mU" secondAttribute="top" id="qYH-iZ-1GR"/>
|
||||
<constraint firstItem="q90-qj-BXy" firstAttribute="centerY" secondItem="3eT-fn-moA" secondAttribute="centerY" id="xJ8-08-8Fu"/>
|
||||
<constraint firstItem="3eT-fn-moA" firstAttribute="leading" secondItem="q90-qj-BXy" secondAttribute="trailing" constant="8" symbolic="YES" id="xK5-Lh-wlE"/>
|
||||
<constraint firstItem="pbX-DJ-7mU" firstAttribute="leading" secondItem="hbS-Ox-rTR" secondAttribute="trailing" constant="8" symbolic="YES" id="xcI-TM-JBb"/>
|
||||
<constraint firstItem="hbS-Ox-rTR" firstAttribute="leading" secondItem="B6N-zy-SRg" secondAttribute="leading" constant="78" id="ykb-e3-DvG"/>
|
||||
</constraints>
|
||||
</view>
|
||||
</tabViewItem>
|
||||
</tabViewItems>
|
||||
</tabView>
|
||||
</subviews>
|
||||
<constraints>
|
||||
<constraint firstItem="h22-uy-K1x" firstAttribute="leading" secondItem="se5-gp-TjO" secondAttribute="leading" id="0QH-tN-yRQ"/>
|
||||
<constraint firstAttribute="bottom" secondItem="h22-uy-K1x" secondAttribute="bottom" id="gl3-hq-ori"/>
|
||||
<constraint firstAttribute="trailing" secondItem="h22-uy-K1x" secondAttribute="trailing" id="xuy-k3-WXX"/>
|
||||
<constraint firstItem="h22-uy-K1x" firstAttribute="top" secondItem="se5-gp-TjO" secondAttribute="top" id="yaf-oE-t8j"/>
|
||||
</constraints>
|
||||
</view>
|
||||
<toolbar key="toolbar" implicitIdentifier="8C4EF182-55FF-4325-A88F-2B007115CF4C" autosavesConfiguration="NO" allowsUserCustomization="NO" displayMode="iconAndLabel" sizeMode="regular" id="D9u-IW-4jN">
|
||||
<allowedToolbarItems>
|
||||
<toolbarItem implicitItemIdentifier="0F065718-7F7B-4558-84B0-7A74B8F8AF88" explicitItemIdentifier="general" label="General" paletteLabel="General" tag="-1" image="NSPreferencesGeneral" selectable="YES" id="Mp8-cF-kQ7">
|
||||
<connections>
|
||||
<action selector="toolbarActionWithSender:" target="-2" id="dFv-Bx-jbl"/>
|
||||
</connections>
|
||||
</toolbarItem>
|
||||
<toolbarItem implicitItemIdentifier="NSToolbarSpaceItem" id="hn4-gj-wF1"/>
|
||||
<toolbarItem implicitItemIdentifier="NSToolbarFlexibleSpaceItem" id="hy4-IW-j13"/>
|
||||
<toolbarItem implicitItemIdentifier="9C0ECA12-7B4E-4726-BBF8-2778E4A47812" explicitItemIdentifier="servers" label="Servers" paletteLabel="Servers" tag="-1" image="virtual-server-icon-3" selectable="YES" id="8Nu-gG-5rY">
|
||||
<connections>
|
||||
<action selector="toolbarActionWithSender:" target="-2" id="vgX-Ex-tTg"/>
|
||||
</connections>
|
||||
</toolbarItem>
|
||||
<toolbarItem implicitItemIdentifier="20667A16-FBAB-459E-9094-87ABC9B66795" explicitItemIdentifier="adv" label="Advanced" paletteLabel="Advanced" tag="-1" image="NSAdvanced" selectable="YES" id="kuN-wm-bl5">
|
||||
<connections>
|
||||
<action selector="toolbarActionWithSender:" target="-2" id="W2m-K9-R3F"/>
|
||||
</connections>
|
||||
</toolbarItem>
|
||||
<toolbarItem implicitItemIdentifier="606CACB6-02E1-4472-B422-0D19BE6A4D7C" explicitItemIdentifier="kcptun" label="Kcptun" paletteLabel="Kcptun" tag="-1" image="kcptun_1" selectable="YES" id="CIc-BO-xjN">
|
||||
<connections>
|
||||
<action selector="toolbarActionWithSender:" target="-2" id="aAq-xr-Teq"/>
|
||||
</connections>
|
||||
</toolbarItem>
|
||||
<toolbarItem implicitItemIdentifier="6CA73D5D-9BB2-495A-8658-D0A96900A764" explicitItemIdentifier="http" label="HTTP" paletteLabel="HTTP" tag="-1" image="http" selectable="YES" id="D0F-6S-Ztu">
|
||||
<connections>
|
||||
<action selector="toolbarActionWithSender:" target="-2" id="tnS-2P-ws4"/>
|
||||
</connections>
|
||||
</toolbarItem>
|
||||
<toolbarItem implicitItemIdentifier="E4909835-8791-41EE-919B-0DC2AECD6F26" explicitItemIdentifier="interfaces" label="Interfaces" paletteLabel="Interfaces" tag="-1" image="NSNetwork" selectable="YES" id="Bdm-pj-Ckd">
|
||||
<connections>
|
||||
<action selector="toolbarActionWithSender:" target="-2" id="X6O-F1-Axw"/>
|
||||
</connections>
|
||||
</toolbarItem>
|
||||
<toolbarItem implicitItemIdentifier="D89D546C-0FED-46F9-AB50-6D504E105419" explicitItemIdentifier="shortcuts" label="Shortcuts" paletteLabel="Shortcuts" tag="-1" image="command-512" selectable="YES" id="kzb-T5-CPp">
|
||||
<connections>
|
||||
<action selector="toolbarActionWithSender:" target="-2" id="02b-iE-ZWw"/>
|
||||
</connections>
|
||||
</toolbarItem>
|
||||
</allowedToolbarItems>
|
||||
<defaultToolbarItems>
|
||||
<toolbarItem reference="Mp8-cF-kQ7"/>
|
||||
<toolbarItem reference="kuN-wm-bl5"/>
|
||||
<toolbarItem reference="D0F-6S-Ztu"/>
|
||||
<toolbarItem reference="CIc-BO-xjN"/>
|
||||
<toolbarItem reference="Bdm-pj-Ckd"/>
|
||||
<toolbarItem reference="kzb-T5-CPp"/>
|
||||
<toolbarItem reference="hy4-IW-j13"/>
|
||||
</defaultToolbarItems>
|
||||
</toolbar>
|
||||
<connections>
|
||||
<outlet property="delegate" destination="-2" id="0bl-1N-AYu"/>
|
||||
</connections>
|
||||
</window>
|
||||
<userDefaultsController representsSharedInstance="YES" id="uQz-5y-ZL2"/>
|
||||
<numberFormatter formatterBehavior="default10_4" usesGroupingSeparator="NO" groupingSize="0" minimumIntegerDigits="0" maximumIntegerDigits="42" id="C7t-aU-bub" userLabel="Port Number Formatter">
|
||||
<real key="minimum" value="128"/>
|
||||
<real key="maximum" value="65535"/>
|
||||
</numberFormatter>
|
||||
<numberFormatter formatterBehavior="default10_4" usesGroupingSeparator="NO" groupingSize="0" minimumIntegerDigits="0" maximumIntegerDigits="42" id="2LX-ic-DJh" userLabel="Timeout Number Formatter">
|
||||
<real key="minimum" value="10"/>
|
||||
<real key="maximum" value="600"/>
|
||||
</numberFormatter>
|
||||
<numberFormatter formatterBehavior="default10_4" usesGroupingSeparator="NO" groupingSize="0" minimumIntegerDigits="0" maximumIntegerDigits="42" id="1En-Ey-GAr" userLabel="Num of Kcptun Conn Formatter">
|
||||
<real key="minimum" value="1"/>
|
||||
<real key="maximum" value="16"/>
|
||||
</numberFormatter>
|
||||
<customObject id="YAC-3k-qMR" customClass="LaunchAtLoginController"/>
|
||||
<customObject id="2Fn-b8-1pQ" customClass="ProxyInterfacesViewCtrl" customModule="ShadowsocksX_NG" customModuleProvider="target">
|
||||
<connections>
|
||||
<outlet property="tableView" destination="Vp3-dp-iqv" id="e8T-To-sCx"/>
|
||||
<outlet property="view" destination="Ati-LQ-RB7" id="KcW-Hq-Jmh"/>
|
||||
</connections>
|
||||
</customObject>
|
||||
</objects>
|
||||
<resources>
|
||||
<image name="NSAdvanced" width="32" height="32"/>
|
||||
<image name="NSNetwork" width="32" height="32"/>
|
||||
<image name="NSPreferencesGeneral" width="32" height="32"/>
|
||||
<image name="command-512" width="512" height="512"/>
|
||||
<image name="http" width="512" height="512"/>
|
||||
<image name="kcptun_1" width="136" height="136"/>
|
||||
<image name="virtual-server-icon-3" width="682.10528564453125" height="682.10528564453125"/>
|
||||
</resources>
|
||||
</document>
|
@ -1,31 +1,27 @@
|
||||
//
|
||||
// ProxyPreferencesController.swift
|
||||
// ProxyInterfacesTableViewCtrl.swift
|
||||
// ShadowsocksX-NG
|
||||
//
|
||||
// Created by 邱宇舟 on 16/6/29.
|
||||
// Copyright © 2016年 qiuyuzhou. All rights reserved.
|
||||
// Created by 邱宇舟 on 2017/3/17.
|
||||
// Copyright © 2017年 qiuyuzhou. All rights reserved.
|
||||
//
|
||||
|
||||
import Cocoa
|
||||
import RxCocoa
|
||||
import RxSwift
|
||||
|
||||
class ProxyPreferencesController: NSWindowController, NSTableViewDataSource, NSTableViewDelegate {
|
||||
class ProxyInterfacesViewCtrl: NSViewController, NSTableViewDataSource, NSTableViewDelegate {
|
||||
|
||||
var networkServices: NSArray!
|
||||
var selectedNetworkServices: NSMutableSet!
|
||||
|
||||
var autoConfigureNetworkServices: Bool = true
|
||||
@IBOutlet weak var tableView: NSTableView!
|
||||
@IBOutlet weak var autoConfigCheckBox: NSButton!
|
||||
|
||||
@IBOutlet var autoConfigCheckBox: NSButton!
|
||||
|
||||
@IBOutlet var tableView: NSTableView!
|
||||
|
||||
override func windowDidLoad() {
|
||||
super.windowDidLoad()
|
||||
|
||||
// Implement this method to handle any initialization after your window controller's window has been loaded from its nib file.
|
||||
let defaults = UserDefaults.standard
|
||||
self.setValue(defaults.bool(forKey: "AutoConfigureNetworkServices"), forKey: "autoConfigureNetworkServices")
|
||||
override func viewDidLoad() {
|
||||
super.viewDidLoad()
|
||||
|
||||
let defaults = UserDefaults.standard
|
||||
if let services = defaults.array(forKey: "Proxy4NetworkServices") {
|
||||
selectedNetworkServices = NSMutableSet(array: services)
|
||||
} else {
|
||||
@ -35,26 +31,7 @@ class ProxyPreferencesController: NSWindowController, NSTableViewDataSource, NST
|
||||
networkServices = ProxyConfTool.networkServicesList() as NSArray!
|
||||
tableView.reloadData()
|
||||
}
|
||||
|
||||
@IBAction func ok(_ sender: NSObject){
|
||||
ProxyConfHelper.disableProxy()
|
||||
|
||||
let defaults = UserDefaults.standard
|
||||
defaults.setValue(selectedNetworkServices.allObjects, forKeyPath: "Proxy4NetworkServices")
|
||||
defaults.set(autoConfigureNetworkServices, forKey: "AutoConfigureNetworkServices")
|
||||
|
||||
defaults.synchronize()
|
||||
|
||||
window?.performClose(self)
|
||||
|
||||
NotificationCenter.default
|
||||
.post(name: Notification.Name(rawValue: NOTIFY_ADV_PROXY_CONF_CHANGED), object: nil)
|
||||
}
|
||||
|
||||
@IBAction func cancel(_ sender: NSObject){
|
||||
window?.performClose(self)
|
||||
}
|
||||
|
||||
|
||||
//--------------------------------------------------
|
||||
// For NSTableViewDataSource
|
||||
func numberOfRows(in tableView: NSTableView) -> Int {
|
@ -6,7 +6,6 @@
|
||||
|
||||
#import "LaunchAtLoginController.h"
|
||||
#import "SWBQRCodeWindowController.h"
|
||||
#import "ShortcutsPreferencesWindowController.h"
|
||||
#import "ShortcutsController.h"
|
||||
#import "Utils.h"
|
||||
#import "ProxyConfHelper.h"
|
||||
|
@ -10,20 +10,18 @@
|
||||
|
||||
#import <MASShortcut/Shortcut.h>
|
||||
|
||||
#import "ShortcutsPreferencesWindowController.h"
|
||||
|
||||
|
||||
@implementation ShortcutsController
|
||||
|
||||
+ (void)bindShortcuts {
|
||||
MASShortcutBinder* binder = [MASShortcutBinder sharedBinder];
|
||||
[binder
|
||||
bindShortcutWithDefaultsKey:kGlobalShortcutToggleRunning
|
||||
bindShortcutWithDefaultsKey: @"ToggleRunning"
|
||||
toAction:^{
|
||||
[[NSNotificationCenter defaultCenter] postNotificationName: @"NOTIFY_TOGGLE_RUNNING" object: nil];
|
||||
}];
|
||||
[binder
|
||||
bindShortcutWithDefaultsKey:kGlobalShortcutSwitchProxyMode
|
||||
bindShortcutWithDefaultsKey: @"SwitchProxyMode"
|
||||
toAction:^{
|
||||
[[NSNotificationCenter defaultCenter] postNotificationName: @"NOTIFY_SWITCH_PROXY_MODE" object: nil];
|
||||
}];
|
||||
|
@ -1,22 +0,0 @@
|
||||
//
|
||||
// ShortcutsPreferencesWindowController.h
|
||||
// ShadowsocksX-NG
|
||||
//
|
||||
// Created by 邱宇舟 on 2017/3/10.
|
||||
// Copyright © 2017年 qiuyuzhou. All rights reserved.
|
||||
//
|
||||
|
||||
#import <Cocoa/Cocoa.h>
|
||||
#import <MASShortcut/Shortcut.h>
|
||||
|
||||
|
||||
static NSString *const kGlobalShortcutToggleRunning = @"ToggleRunning";
|
||||
static NSString *const kGlobalShortcutSwitchProxyMode= @"SwitchProxyMode";
|
||||
|
||||
|
||||
@interface ShortcutsPreferencesWindowController : NSWindowController
|
||||
|
||||
@property(nonatomic, weak) IBOutlet MASShortcutView* toggleRunningShortcutCtrl;
|
||||
@property(nonatomic, weak) IBOutlet MASShortcutView* switchModeShortcutCtrl;
|
||||
|
||||
@end
|
@ -1,26 +0,0 @@
|
||||
//
|
||||
// ShortcutsPreferencesWindowController.m
|
||||
// ShadowsocksX-NG
|
||||
//
|
||||
// Created by 邱宇舟 on 2017/3/10.
|
||||
// Copyright © 2017年 qiuyuzhou. All rights reserved.
|
||||
//
|
||||
|
||||
#import "ShortcutsPreferencesWindowController.h"
|
||||
|
||||
|
||||
@interface ShortcutsPreferencesWindowController ()
|
||||
|
||||
@end
|
||||
|
||||
@implementation ShortcutsPreferencesWindowController
|
||||
|
||||
- (void)windowDidLoad {
|
||||
[super windowDidLoad];
|
||||
|
||||
// Implement this method to handle any initialization after your window controller's window has been loaded from its nib file.
|
||||
self.toggleRunningShortcutCtrl.associatedUserDefaultsKey = kGlobalShortcutToggleRunning;
|
||||
self.switchModeShortcutCtrl.associatedUserDefaultsKey = kGlobalShortcutSwitchProxyMode;
|
||||
}
|
||||
|
||||
@end
|
@ -1,75 +0,0 @@
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<document type="com.apple.InterfaceBuilder3.Cocoa.XIB" version="3.0" toolsVersion="11762" systemVersion="16D32" targetRuntime="MacOSX.Cocoa" propertyAccessControl="none" useAutolayout="YES" customObjectInstantitationMethod="direct">
|
||||
<dependencies>
|
||||
<deployment identifier="macosx"/>
|
||||
<plugIn identifier="com.apple.InterfaceBuilder.CocoaPlugin" version="11762"/>
|
||||
<capability name="documents saved in the Xcode 8 format" minToolsVersion="8.0"/>
|
||||
</dependencies>
|
||||
<objects>
|
||||
<customObject id="-2" userLabel="File's Owner" customClass="ShortcutsPreferencesWindowController" customModule="ShadowsocksX_NG" customModuleProvider="target">
|
||||
<connections>
|
||||
<outlet property="switchModeShortcutCtrl" destination="nZn-Ee-h8z" id="2iw-P1-htd"/>
|
||||
<outlet property="toggleRunningShortcutCtrl" destination="zcO-rg-gXN" id="5dF-Ls-4DH"/>
|
||||
<outlet property="window" destination="F0z-JX-Cv5" id="gIp-Ho-8D9"/>
|
||||
</connections>
|
||||
</customObject>
|
||||
<customObject id="-1" userLabel="First Responder" customClass="FirstResponder"/>
|
||||
<customObject id="-3" userLabel="Application" customClass="NSObject"/>
|
||||
<window title="Shortcuts Preferences" allowsToolTipsWhenApplicationIsInactive="NO" autorecalculatesKeyViewLoop="NO" oneShot="NO" releasedWhenClosed="NO" animationBehavior="default" id="F0z-JX-Cv5">
|
||||
<windowStyleMask key="styleMask" titled="YES" closable="YES"/>
|
||||
<windowPositionMask key="initialPositionMask" topStrut="YES" bottomStrut="YES"/>
|
||||
<rect key="contentRect" x="526" y="581" width="365" height="86"/>
|
||||
<rect key="screenRect" x="0.0" y="0.0" width="1440" height="877"/>
|
||||
<view key="contentView" wantsLayer="YES" id="se5-gp-TjO">
|
||||
<rect key="frame" x="0.0" y="0.0" width="365" height="86"/>
|
||||
<autoresizingMask key="autoresizingMask"/>
|
||||
<subviews>
|
||||
<customView translatesAutoresizingMaskIntoConstraints="NO" id="nZn-Ee-h8z" customClass="MASShortcutView">
|
||||
<rect key="frame" x="182" y="20" width="163" height="19"/>
|
||||
</customView>
|
||||
<customView translatesAutoresizingMaskIntoConstraints="NO" id="zcO-rg-gXN" customClass="MASShortcutView">
|
||||
<rect key="frame" x="182" y="47" width="163" height="19"/>
|
||||
</customView>
|
||||
<textField horizontalHuggingPriority="251" verticalHuggingPriority="750" allowsCharacterPickerTouchBarItem="NO" translatesAutoresizingMaskIntoConstraints="NO" id="Bme-MP-1H3">
|
||||
<rect key="frame" x="18" y="21" width="158" height="17"/>
|
||||
<textFieldCell key="cell" scrollable="YES" lineBreakMode="clipping" sendsActionOnEndEditing="YES" alignment="right" title="Switch mode:" id="MJQ-KA-SGa">
|
||||
<font key="font" metaFont="system"/>
|
||||
<color key="textColor" name="labelColor" catalog="System" colorSpace="catalog"/>
|
||||
<color key="backgroundColor" name="controlColor" catalog="System" colorSpace="catalog"/>
|
||||
</textFieldCell>
|
||||
</textField>
|
||||
<textField horizontalHuggingPriority="251" verticalHuggingPriority="750" allowsCharacterPickerTouchBarItem="NO" translatesAutoresizingMaskIntoConstraints="NO" id="b8A-hd-VRY">
|
||||
<rect key="frame" x="18" y="49" width="158" height="17"/>
|
||||
<constraints>
|
||||
<constraint firstAttribute="width" constant="154" id="O8A-ky-ag4"/>
|
||||
</constraints>
|
||||
<textFieldCell key="cell" scrollable="YES" lineBreakMode="clipping" sendsActionOnEndEditing="YES" alignment="right" title="Toggle On/Off:" id="7OS-YI-YRe">
|
||||
<font key="font" metaFont="system"/>
|
||||
<color key="textColor" name="labelColor" catalog="System" colorSpace="catalog"/>
|
||||
<color key="backgroundColor" name="controlColor" catalog="System" colorSpace="catalog"/>
|
||||
</textFieldCell>
|
||||
</textField>
|
||||
</subviews>
|
||||
<constraints>
|
||||
<constraint firstItem="nZn-Ee-h8z" firstAttribute="leading" secondItem="Bme-MP-1H3" secondAttribute="trailing" constant="8" symbolic="YES" id="58f-cT-PLi"/>
|
||||
<constraint firstItem="Bme-MP-1H3" firstAttribute="centerY" secondItem="nZn-Ee-h8z" secondAttribute="centerY" id="5WG-IQ-8Wm"/>
|
||||
<constraint firstAttribute="trailing" secondItem="zcO-rg-gXN" secondAttribute="trailing" constant="20" symbolic="YES" id="7nF-aU-3ON"/>
|
||||
<constraint firstAttribute="bottom" secondItem="nZn-Ee-h8z" secondAttribute="bottom" constant="20" symbolic="YES" id="8IS-fc-KM9"/>
|
||||
<constraint firstItem="zcO-rg-gXN" firstAttribute="leading" secondItem="b8A-hd-VRY" secondAttribute="trailing" constant="8" symbolic="YES" id="JZG-83-he7"/>
|
||||
<constraint firstItem="nZn-Ee-h8z" firstAttribute="top" secondItem="zcO-rg-gXN" secondAttribute="bottom" constant="8" symbolic="YES" id="Mw8-bt-BB0"/>
|
||||
<constraint firstItem="Bme-MP-1H3" firstAttribute="top" secondItem="b8A-hd-VRY" secondAttribute="bottom" constant="11" id="cgI-f5-9dC"/>
|
||||
<constraint firstItem="b8A-hd-VRY" firstAttribute="top" secondItem="se5-gp-TjO" secondAttribute="top" constant="20" symbolic="YES" id="cge-69-H4S"/>
|
||||
<constraint firstItem="b8A-hd-VRY" firstAttribute="top" secondItem="zcO-rg-gXN" secondAttribute="top" id="qUk-wA-oid"/>
|
||||
<constraint firstItem="zcO-rg-gXN" firstAttribute="trailing" secondItem="nZn-Ee-h8z" secondAttribute="trailing" id="qUp-IB-sst"/>
|
||||
<constraint firstItem="b8A-hd-VRY" firstAttribute="leading" secondItem="se5-gp-TjO" secondAttribute="leading" constant="20" symbolic="YES" id="ugI-XY-drL"/>
|
||||
<constraint firstItem="b8A-hd-VRY" firstAttribute="leading" secondItem="Bme-MP-1H3" secondAttribute="leading" id="usZ-yb-Sy2"/>
|
||||
<constraint firstItem="zcO-rg-gXN" firstAttribute="leading" secondItem="nZn-Ee-h8z" secondAttribute="leading" id="v2G-eN-Shm"/>
|
||||
</constraints>
|
||||
</view>
|
||||
<connections>
|
||||
<outlet property="delegate" destination="-2" id="0bl-1N-AYu"/>
|
||||
</connections>
|
||||
<point key="canvasLocation" x="74.5" y="54"/>
|
||||
</window>
|
||||
</objects>
|
||||
</document>
|
BIN
ShadowsocksX-NG/command-512.png
Normal file
BIN
ShadowsocksX-NG/command-512.png
Normal file
Binary file not shown.
After Width: | Height: | Size: 24 KiB |
BIN
ShadowsocksX-NG/http.png
Normal file
BIN
ShadowsocksX-NG/http.png
Normal file
Binary file not shown.
After Width: | Height: | Size: 19 KiB |
BIN
ShadowsocksX-NG/kcptun_1.png
Normal file
BIN
ShadowsocksX-NG/kcptun_1.png
Normal file
Binary file not shown.
After Width: | Height: | Size: 10 KiB |
BIN
ShadowsocksX-NG/virtual-server-icon-3.png
Normal file
BIN
ShadowsocksX-NG/virtual-server-icon-3.png
Normal file
Binary file not shown.
After Width: | Height: | Size: 61 KiB |
@ -1,39 +0,0 @@
|
||||
|
||||
/* Class = "NSButtonCell"; title = "启用 Udp Relay"; ObjectID = "1C3-4s-Apd"; */
|
||||
"1C3-4s-Apd.title" = "启用 Udp Relay";
|
||||
|
||||
/* Class = "NSTextFieldCell"; title = "Don't change these preferences if you have no idea what are they."; ObjectID = "8wL-qv-5nD"; */
|
||||
"8wL-qv-5nD.title" = "如果你不明白这些选项是什么,请不要修改";
|
||||
|
||||
/* Class = "NSWindow"; title = "高级设置"; ObjectID = "F0z-JX-Cv5"; */
|
||||
"F0z-JX-Cv5.title" = "高级设置";
|
||||
|
||||
/* Class = "NSTextFieldCell"; title = "Seconds"; ObjectID = "Gd3-Fm-sWh"; */
|
||||
"Gd3-Fm-sWh.title" = "秒";
|
||||
|
||||
/* Class = "NSBox"; title = "Box"; ObjectID = "ayu-Tb-kmf"; */
|
||||
"ayu-Tb-kmf.title" = "Box";
|
||||
|
||||
/* Class = "NSTextFieldCell"; title = "本地 Socks5 监听地址:"; ObjectID = "cwr-n0-zwn"; */
|
||||
"cwr-n0-zwn.title" = "本地 Socks5 监听地址:";
|
||||
|
||||
/* Class = "NSTextFieldCell"; title = "GFW List URL:"; ObjectID = "dg0-gS-z5V"; */
|
||||
"dg0-gS-z5V.title" = "GFW LIST URL:";
|
||||
|
||||
/* Class = "NSTextFieldCell"; title = "Timeout:"; ObjectID = "i4l-2S-gOQ"; */
|
||||
"i4l-2S-gOQ.title" = "超时:";
|
||||
|
||||
/* Class = "NSTextFieldCell"; title = "本地 Socks5 监听端口:"; ObjectID = "qRs-ow-vVB"; */
|
||||
"qRs-ow-vVB.title" = "本地 Socks5 监听端口:";
|
||||
|
||||
/* Class = "NSTextFieldCell"; title = "Local PAC Listen Address:"; ObjectID = "dvL-Ic-Wae"; */
|
||||
"dvL-Ic-Wae.title" = "本地 PAC 监听地址:";
|
||||
|
||||
/* Class = "NSTextFieldCell"; title = "Local PAC Listen Port:"; ObjectID = "PSg-XK-qhl"; */
|
||||
"PSg-XK-qhl.title" = "本地 PAC 监听端口:";
|
||||
|
||||
/* Class = "NSTextFieldCell"; title = "White List URL:"; ObjectID = "aif-uV-Lxk"; */
|
||||
"aif-uV-Lxk.title" = "白名单列表 URL:";
|
||||
|
||||
/* Class = "NSTextFieldCell"; title = "White IP List URL:"; ObjectID = "qhu-d1-qgq"; */
|
||||
"qhu-d1-qgq.title" = "白名单IP列表 URL:";
|
@ -1,18 +0,0 @@
|
||||
|
||||
/* Class = "NSTextFieldCell"; title = "HTTP Proxy Listen Port:"; ObjectID = "2Sd-yn-gdY"; */
|
||||
"2Sd-yn-gdY.title" = "HTTP 代理 监听端口:";
|
||||
|
||||
/* Class = "NSButtonCell"; title = "HTTP Proxy Enable"; ObjectID = "dqU-MG-Sum"; */
|
||||
"dqU-MG-Sum.title" = "HTTP 代理 开启";
|
||||
|
||||
/* Class = "NSTextFieldCell"; title = "HTTP Proxy Listen Address:"; ObjectID = "qd0-kc-ttB"; */
|
||||
"qd0-kc-ttB.title" = "HTTP 代理 监听地址:";
|
||||
|
||||
/* Class = "NSWindow"; title = "HTTP Proxy Preferences"; ObjectID = "vS3-DL-Nq3"; */
|
||||
"vS3-DL-Nq3.title" = "HTTP 代理 设置";
|
||||
|
||||
/* Class = "NSButtonCell"; title = "Follow Global Mode"; ObjectID = "ofk-Pc-c8f"; */
|
||||
"ofk-Pc-c8f.title" = "跟随全局模式";
|
||||
|
||||
/* Class = "NSButton"; title = "Copy Shell Export Command"; ObjectID = "ySG-BC-5r0"; */
|
||||
"ySG-BC-5r0.title" = "复制终端 Export 命令";
|
@ -1,13 +0,0 @@
|
||||
|
||||
/* Class = "NSWindow"; title = "Advanced Proxy Preferences"; ObjectID = "F0z-JX-Cv5"; */
|
||||
"F0z-JX-Cv5.title" = "高级代理设置";
|
||||
|
||||
/* Class = "NSButtonCell"; title = "Auto Configure"; ObjectID = "FLv-D9-CRw"; */
|
||||
"FLv-D9-CRw.title" = "自动设置";
|
||||
|
||||
/* Class = "NSButtonCell"; title = "Cancel"; ObjectID = "lsQ-1C-OhG"; */
|
||||
"lsQ-1C-OhG.title" = "取消";
|
||||
|
||||
/* Class = "NSButtonCell"; title = "OK"; ObjectID = "rWE-M6-TvV"; */
|
||||
"rWE-M6-TvV.title" = "确定";
|
||||
|
Reference in New Issue
Block a user