Import initialization from the menubar app

This commit is contained in:
Frank Denis
2012-07-31 22:45:20 -07:00
parent 66e8e84187
commit 6c86b8e676
3 changed files with 280 additions and 213 deletions
+13 -10
View File
@@ -11,11 +11,11 @@
#define kDNSCRYPT_PACKAGE_VERSION @"0.12"
#define KDNSCRYPT_CONFIG_UPDATER_LABEL @"com.opendns.osx.DNSCryptConfigUpdater"
#define KDNSCRYPT_PROXY_LABEL @"com.opendns.osx.DNSCryptProxy"
#define kDNSCRYPT_PREFPANE_SUPPORT_DIR @"DNSCrypt Prefpane"
#define kDNSCRYPT_PREFPANE_FILE @"PrefPane.plist"
#define kDNSCRYPT_PREFPANE_APP_PATH @"/Library/PreferencePanes/DNSCrypt.prefPane"
#define kDNSCRYPT_USR_BASE_DIR kDNSCRYPT_PREFPANE_APP_PATH @"/Contents/Resources/usr"
#define kDNSCRIPT_SCRIPTS_BASE_DIR kDNSCRYPT_USR_BASE_DIR @"/scripts"
#define kDNSCRYPT_VAR_BASE_DIR @"/Library/Application Support/DNSCrypt"
#define kDNSCRYPT_CONTROL_DIR kDNSCRYPT_VAR_BASE_DIR @"/control"
#define kOPENDNS_URL @"http://www.opendns.com"
@@ -31,10 +31,10 @@ typedef enum {
AuthorizationRef auth;
}
@property (weak) IBOutlet NSButton *enableDNSCryptButton;
@property (weak) IBOutlet NSButton *enableOpenDNSButton;
@property (weak) IBOutlet NSButton *dnscryptButton;
@property (weak) IBOutlet NSButton *opendnsButton;
@property (weak) IBOutlet NSButton *familyShieldButton;
@property (weak) IBOutlet NSButton *enableInsecureDNSButton;
@property (weak) IBOutlet NSButton *fallbackButton;
@property (weak) IBOutlet NSTextField *currentResolverTextField;
@property (weak) IBOutlet NSImageView *statusImageView;
@@ -46,8 +46,11 @@ typedef enum {
- (void) mainViewDidLoad;
- (IBAction)enableOpenDNSButtonPressed:(NSButton *)sender;
- (IBAction)enableDNSCryptButtonPressed:(NSButton *)sender;
- (IBAction)dnscryptButtonPressed:(NSButton *)sender;
- (IBAction)opendnsButtonPressed:(NSButton *)sender;
- (IBAction)familyShieldButtonPressed:(NSButton *)sender;
- (IBAction)fallbackButtonPressed:(NSButton *)sender;
- (IBAction)openDNSLinkPushed:(NSButton *)sender;
@end
+105 -54
View File
@@ -9,18 +9,18 @@
#import "DNSCrypt.h"
@implementation DNSCrypt
@synthesize previewNotesWebView;
@synthesize releaseNotesWebView;
@synthesize feedbackWebView;
@synthesize aboutWebView;
@synthesize previewNotesWebView = _previewNotesWebView;
@synthesize releaseNotesWebView = _releaseNotesWebView;
@synthesize feedbackWebView = _feedbackWebView;
@synthesize aboutWebView = _aboutWebView;
@synthesize enableDNSCryptButton;
@synthesize enableOpenDNSButton;
@synthesize enableInsecureDNSButton;
@synthesize familyShieldButton;
@synthesize statusImageView;
@synthesize statusText;
@synthesize currentResolverTextField;
@synthesize dnscryptButton = _dnscryptButton;
@synthesize opendnsButton = _opendnsButton;
@synthesize fallbackButton = _fallbackButton;
@synthesize familyShieldButton = _familyShieldButton;
@synthesize statusImageView = _statusImageView;
@synthesize statusText = _statusText;
@synthesize currentResolverTextField = _currentResolverTextField;
DNSConfigurationState currentState = kDNS_CONFIGURATION_UNKNOWN;
@@ -44,26 +44,76 @@ DNSConfigurationState currentState = kDNS_CONFIGURATION_UNKNOWN;
return result;
}
- (void) initState
{
NSString *res;
_dnscryptButton.state = 0;
_familyShieldButton.state = 0;
_opendnsButton.state = 0;
_fallbackButton.state = 0;
res = [self fromCommand: @"/bin/ksh" withArguments: [NSArray arrayWithObjects: @"-c", @"cd '" kDNSCRIPT_SCRIPTS_BASE_DIR @"' && exec ./get-dnscrypt-status.sh", nil]];
NSLog(@"%@", res);
if ([res isEqualToString: @"yes"]) {
[_dnscryptButton setState: 1];
}
res = [self fromCommand: @"/bin/ksh" withArguments: [NSArray arrayWithObjects: @"-c", @"cd '" kDNSCRIPT_SCRIPTS_BASE_DIR @"' && exec ./get-familyshield-status.sh", nil]];
NSLog(@"%@", res);
if ([res isEqualToString: @"yes"]) {
[_familyShieldButton setState: 1];
}
res = [self fromCommand: @"/bin/ksh" withArguments: [NSArray arrayWithObjects: @"-c", @"cd '" kDNSCRIPT_SCRIPTS_BASE_DIR @"' && exec ./get-insecure-opendns-status.sh", nil]];
NSLog(@"%@", res);
if ([res isEqualToString: @"yes"]) {
[_opendnsButton setState: 1];
}
res = [self fromCommand: @"/bin/ksh" withArguments: [NSArray arrayWithObjects: @"-c", @"cd '" kDNSCRIPT_SCRIPTS_BASE_DIR @"' && exec ./get-fallback-status.sh", nil]];
NSLog(@"%@", res);
if ([res isEqualToString: @"yes"]) {
[_fallbackButton setState: 1];
}
}
- (IBAction)dnscryptButtonPressed:(NSButton *)sender
{
}
- (IBAction)opendnsButtonPressed:(NSButton *)sender
{
}
- (IBAction)familyShieldButtonPressed:(NSButton *)sender
{
}
- (IBAction)fallbackButtonPressed:(NSButton *)sender
{
}
- (void) initializeCheckBoxesWithState: (DNSConfigurationState) currentState
{
switch (currentState) {
case kDNS_CONFIGURATION_OPENDNS:
enableOpenDNSButton.state = NSOnState;
enableDNSCryptButton.state = NSOffState;
_opendnsButton.state = NSOnState;
_dnscryptButton.state = NSOffState;
break;
case kDNS_CONFIGURATION_LOCALHOST:
enableOpenDNSButton.state = NSOnState;
enableDNSCryptButton.state = NSOnState;
_opendnsButton.state = NSOnState;
_dnscryptButton.state = NSOnState;
break;
default:
enableOpenDNSButton.state = NSOffState;
enableDNSCryptButton.state = NSOffState;
_opendnsButton.state = NSOffState;
_dnscryptButton.state = NSOffState;
}
enableInsecureDNSButton.state = NSOnState;
_fallbackButton.state = NSOnState;
}
- (BOOL) updateStatusWithCurrentConfig
@@ -87,26 +137,26 @@ DNSConfigurationState currentState = kDNS_CONFIGURATION_UNKNOWN;
[resolversString appendFormat: @"%s%@", (resolversString.length > 0 ? "\n" : ""), resolver];
}
currentState = kDNS_CONFIGURATION_VANILLA;
currentResolverTextField.stringValue = resolversString;
_currentResolverTextField.stringValue = resolversString;
}
NSBundle *bundle = [NSBundle bundleWithIdentifier: @"com.opendns.osx.DNSCrypt"];
switch (currentState) {
case kDNS_CONFIGURATION_UNKNOWN:
statusText.stringValue = NSLocalizedString(@"No network", @"Status");
statusImageView.image = [[[NSImage alloc] initWithContentsOfFile: [bundle pathForImageResource: @"shield_red.png"]] autorelease];
_statusText.stringValue = NSLocalizedString(@"No network", @"Status");
_statusImageView.image = [[[NSImage alloc] initWithContentsOfFile: [bundle pathForImageResource: @"shield_red.png"]] autorelease];
break;
case kDNS_CONFIGURATION_VANILLA:
statusText.stringValue = NSLocalizedString(@"Unprotected", @"Status");
statusImageView.image = [[[NSImage alloc] initWithContentsOfFile: [bundle pathForImageResource: @"shield_red.png"]] autorelease];
_statusText.stringValue = NSLocalizedString(@"Unprotected", @"Status");
_statusImageView.image = [[[NSImage alloc] initWithContentsOfFile: [bundle pathForImageResource: @"shield_red.png"]] autorelease];
break;
case kDNS_CONFIGURATION_OPENDNS:
statusText.stringValue = NSLocalizedString(@"Unencrypted", @"Status");
statusImageView.image = [[[NSImage alloc] initWithContentsOfFile: [bundle pathForImageResource: @"shield_yellow.png"]] autorelease];
_statusText.stringValue = NSLocalizedString(@"Unencrypted", @"Status");
_statusImageView.image = [[[NSImage alloc] initWithContentsOfFile: [bundle pathForImageResource: @"shield_yellow.png"]] autorelease];
break;
case kDNS_CONFIGURATION_LOCALHOST:
statusText.stringValue = NSLocalizedString(@"Protected", @"Status");
statusImageView.image = [[[NSImage alloc] initWithContentsOfFile: [bundle pathForImageResource: @"shield_green.png"]] autorelease];
_statusText.stringValue = NSLocalizedString(@"Protected", @"Status");
_statusImageView.image = [[[NSImage alloc] initWithContentsOfFile: [bundle pathForImageResource: @"shield_green.png"]] autorelease];
break;
default:
return FALSE;
@@ -118,9 +168,9 @@ DNSConfigurationState currentState = kDNS_CONFIGURATION_UNKNOWN;
- (void) showSpinners {
NSBundle *bundle = [NSBundle bundleWithIdentifier: kBUNDLE_IDENTIFIER];
statusText.stringValue = @"";
statusImageView.image = [[[NSImage alloc] initWithContentsOfFile: [bundle pathForImageResource: @"ajax-loader.gif"]] autorelease];
currentResolverTextField.stringValue = @"";
_statusText.stringValue = @"";
_statusImageView.image = [[[NSImage alloc] initWithContentsOfFile: [bundle pathForImageResource: @"ajax-loader.gif"]] autorelease];
_currentResolverTextField.stringValue = @"";
}
- (void) periodicallyUpdateStatusWithCurrentConfig {
@@ -132,8 +182,10 @@ DNSConfigurationState currentState = kDNS_CONFIGURATION_UNKNOWN;
- (void) mainViewDidLoad
{
currentState = kDNS_CONFIGURATION_UNKNOWN;
[_previewNotesWebView setDrawsBackground:false];
[self initState];
[self periodicallyUpdateStatusWithCurrentConfig];
[previewNotesWebView setDrawsBackground:false];
NSString *version = kDNSCRYPT_PACKAGE_VERSION;
NSString *softwareBlurbFormat = NSLocalizedString(@"This software (v: %@) encrypts DNS packets between your computer and OpenDNS. This prevents man-in-the-middle attacks and snooping of DNS traffic by ISPs or others.", @"Description of what the package does - %@ is replaced by the version number");
@@ -153,26 +205,25 @@ DNSConfigurationState currentState = kDNS_CONFIGURATION_UNKNOWN;
[htmlString appendFormat: @"<li>%@</li>", describeFallback];
[htmlString appendString: @"</ul>"];
[htmlString appendString: @"</body></html>"];
[[previewNotesWebView mainFrame] loadHTMLString:htmlString baseURL:[NSURL URLWithString:@"file:///"]];
[[_previewNotesWebView mainFrame] loadHTMLString:htmlString baseURL:[NSURL URLWithString:@"file:///"]];
[feedbackWebView setDrawsBackground:false];
[feedbackWebView setShouldUpdateWhileOffscreen:true];
[feedbackWebView setUIDelegate:self];
[_feedbackWebView setDrawsBackground:false];
[_feedbackWebView setShouldUpdateWhileOffscreen:true];
[_feedbackWebView setUIDelegate:self];
NSString *feedbackURLText = @"http://dnscrypt.opendns.com/feedback.php";
[[feedbackWebView mainFrame] loadRequest:[NSURLRequest requestWithURL:[NSURL URLWithString:feedbackURLText]]];
[[_feedbackWebView mainFrame] loadRequest:[NSURLRequest requestWithURL:[NSURL URLWithString:feedbackURLText]]];
[releaseNotesWebView setDrawsBackground:false];
[releaseNotesWebView setShouldUpdateWhileOffscreen:true];
[releaseNotesWebView setUIDelegate:self];
[_releaseNotesWebView setDrawsBackground:false];
[_releaseNotesWebView setShouldUpdateWhileOffscreen:true];
[_releaseNotesWebView setUIDelegate:self];
NSString *releaseNotesURLText = @"http://dnscrypt.opendns.com/releasenotes.php";
[[releaseNotesWebView mainFrame] loadRequest:[NSURLRequest requestWithURL:[NSURL URLWithString:releaseNotesURLText]]];
[[_releaseNotesWebView mainFrame] loadRequest:[NSURLRequest requestWithURL:[NSURL URLWithString:releaseNotesURLText]]];
[aboutWebView setDrawsBackground:false];
[aboutWebView setShouldUpdateWhileOffscreen:true];
[aboutWebView setUIDelegate:self];
[_aboutWebView setDrawsBackground:false];
[_aboutWebView setShouldUpdateWhileOffscreen:true];
[_aboutWebView setUIDelegate:self];
NSString *aboutURLText = @"http://dnscrypt.opendns.com/about.php";
[[aboutWebView mainFrame] loadRequest:[NSURLRequest requestWithURL:[NSURL URLWithString:aboutURLText]]];
[[_aboutWebView mainFrame] loadRequest:[NSURLRequest requestWithURL:[NSURL URLWithString:aboutURLText]]];
}
- (NSArray *)webView:(WebView *)sender contextMenuItemsForElement:(NSDictionary *)element
@@ -186,8 +237,8 @@ DNSConfigurationState currentState = kDNS_CONFIGURATION_UNKNOWN;
{
[NSObject cancelPreviousPerformRequestsWithTarget: self selector: @selector(resetCheckBoxesHaveBeenInitialized) object: nil];
[self performSelector: @selector(resetCheckBoxesHaveBeenInitialized) withObject: self afterDelay:kCHECKBOXES_FREEZE_DELAY];
if (enableDNSCryptButton.state == NSOffState) {
if (enableOpenDNSButton.state == NSOffState) {
if (_dnscryptButton.state == NSOffState) {
if (_opendnsButton.state == NSOffState) {
currentState = kDNS_CONFIGURATION_VANILLA;
} else {
currentState = kDNS_CONFIGURATION_OPENDNS;
@@ -200,24 +251,24 @@ DNSConfigurationState currentState = kDNS_CONFIGURATION_UNKNOWN;
return TRUE;
}
- (IBAction)enableOpenDNSButtonPressed:(NSButton *)sender
- (IBAction)xenableOpenDNSButtonPressed:(NSButton *)sender
{
if (sender.state == NSOffState && enableDNSCryptButton.state != NSOffState) {
enableDNSCryptButton.state = NSOffState;
if (sender.state == NSOffState && _dnscryptButton.state != NSOffState) {
_dnscryptButton.state = NSOffState;
}
[self updateConfig];
}
- (IBAction)enableDNSCryptButtonPressed:(NSButton *)sender
- (IBAction)xenableDNSCryptButtonPressed:(NSButton *)sender
{
if (sender.state == NSOnState && enableOpenDNSButton.state != NSOnState) {
enableOpenDNSButton.state = NSOnState;
if (sender.state == NSOnState && _opendnsButton.state != NSOnState) {
_opendnsButton.state = NSOnState;
} else if (sender.state == NSOffState) {
}
[self updateConfig];
}
- (IBAction)enableInsecureDNSButtonPressed:(NSButton *)sender
- (IBAction)xenableInsecureDNSButtonPressed:(NSButton *)sender
{
if (sender.state == NSOnState) {
} else {
@@ -65,7 +65,6 @@
<string key="NSFrame">{{13, 10}, {563, 359}}</string>
<reference key="NSSuperview" ref="1037298196"/>
<reference key="NSWindow"/>
<reference key="NSNextKeyView" ref="1025762247"/>
<string key="NSReuseIdentifierKey">_NS:461</string>
<array class="NSMutableArray" key="NSTabViewItems">
<object class="NSTabViewItem" id="19707695">
@@ -74,42 +73,6 @@
<reference key="NSNextResponder" ref="821865429"/>
<int key="NSvFlags">256</int>
<array class="NSMutableArray" key="NSSubviews">
<object class="NSButton" id="300098131">
<reference key="NSNextResponder" ref="1025762247"/>
<int key="NSvFlags">268</int>
<string key="NSFrame">{{15, 212}, {245, 24}}</string>
<reference key="NSSuperview" ref="1025762247"/>
<reference key="NSWindow"/>
<reference key="NSNextKeyView" ref="894789954"/>
<string key="NSReuseIdentifierKey">_NS:239</string>
<bool key="NSEnabled">YES</bool>
<object class="NSButtonCell" key="NSCell" id="555340075">
<int key="NSCellFlags">67108864</int>
<int key="NSCellFlags2">0</int>
<string key="NSContents">Enable OpenDNS</string>
<object class="NSFont" key="NSSupport" id="176030688">
<string key="NSName">LucidaGrande-Bold</string>
<double key="NSSize">14</double>
<int key="NSfFlags">16</int>
</object>
<string key="NSCellIdentifier">_NS:239</string>
<reference key="NSControlView" ref="300098131"/>
<int key="NSButtonFlags">1211912448</int>
<int key="NSButtonFlags2">2</int>
<object class="NSCustomResource" key="NSNormalImage" id="268975194">
<string key="NSClassName">NSImage</string>
<string key="NSResourceName">NSSwitch</string>
</object>
<object class="NSButtonImageSource" key="NSAlternateImage" id="875688652">
<string key="NSImageName">NSSwitch</string>
</object>
<string key="NSAlternateContents"/>
<string key="NSKeyEquivalent"/>
<int key="NSPeriodicDelay">200</int>
<int key="NSPeriodicInterval">25</int>
</object>
<bool key="NSAllowsLogicalLayoutDirection">NO</bool>
</object>
<object class="NSButton" id="894789954">
<reference key="NSNextResponder" ref="1025762247"/>
<int key="NSvFlags">268</int>
@@ -123,13 +86,22 @@
<int key="NSCellFlags">67108864</int>
<int key="NSCellFlags2">0</int>
<string key="NSContents">Enable DNSCrypt</string>
<reference key="NSSupport" ref="176030688"/>
<object class="NSFont" key="NSSupport" id="176030688">
<string key="NSName">LucidaGrande-Bold</string>
<double key="NSSize">14</double>
<int key="NSfFlags">16</int>
</object>
<string key="NSCellIdentifier">_NS:239</string>
<reference key="NSControlView" ref="894789954"/>
<int key="NSButtonFlags">1211912448</int>
<int key="NSButtonFlags2">2</int>
<reference key="NSNormalImage" ref="268975194"/>
<reference key="NSAlternateImage" ref="875688652"/>
<object class="NSCustomResource" key="NSNormalImage" id="220837555">
<string key="NSClassName">NSImage</string>
<string key="NSResourceName">NSSwitch</string>
</object>
<object class="NSButtonImageSource" key="NSAlternateImage" id="875688652">
<string key="NSImageName">NSSwitch</string>
</object>
<string key="NSAlternateContents"/>
<string key="NSKeyEquivalent"/>
<int key="NSPeriodicDelay">200</int>
@@ -137,29 +109,25 @@
</object>
<bool key="NSAllowsLogicalLayoutDirection">NO</bool>
</object>
<object class="NSButton" id="384170040">
<object class="NSButton" id="300098131">
<reference key="NSNextResponder" ref="1025762247"/>
<int key="NSvFlags">268</int>
<string key="NSFrame">{{15, 133}, {204, 22}}</string>
<string key="NSFrame">{{15, 212}, {245, 24}}</string>
<reference key="NSSuperview" ref="1025762247"/>
<reference key="NSWindow"/>
<reference key="NSNextKeyView"/>
<reference key="NSNextKeyView" ref="894789954"/>
<string key="NSReuseIdentifierKey">_NS:239</string>
<bool key="NSEnabled">YES</bool>
<object class="NSButtonCell" key="NSCell" id="805275804">
<object class="NSButtonCell" key="NSCell" id="555340075">
<int key="NSCellFlags">67108864</int>
<int key="NSCellFlags2">0</int>
<string key="NSContents">Fallback to insecure DNS</string>
<object class="NSFont" key="NSSupport" id="1059912458">
<string key="NSName">LucidaGrande</string>
<double key="NSSize">14</double>
<int key="NSfFlags">16</int>
</object>
<string key="NSContents">Enable OpenDNS</string>
<reference key="NSSupport" ref="176030688"/>
<string key="NSCellIdentifier">_NS:239</string>
<reference key="NSControlView" ref="384170040"/>
<reference key="NSControlView" ref="300098131"/>
<int key="NSButtonFlags">1211912448</int>
<int key="NSButtonFlags2">2</int>
<reference key="NSNormalImage" ref="268975194"/>
<reference key="NSNormalImage" ref="220837555"/>
<reference key="NSAlternateImage" ref="875688652"/>
<string key="NSAlternateContents"/>
<string key="NSKeyEquivalent"/>
@@ -181,12 +149,42 @@
<int key="NSCellFlags">67108864</int>
<int key="NSCellFlags2">0</int>
<string key="NSContents">Enable Familyshield</string>
<reference key="NSSupport" ref="1059912458"/>
<object class="NSFont" key="NSSupport" id="1059912458">
<string key="NSName">LucidaGrande</string>
<double key="NSSize">14</double>
<int key="NSfFlags">16</int>
</object>
<string key="NSCellIdentifier">_NS:239</string>
<reference key="NSControlView" ref="410495287"/>
<int key="NSButtonFlags">1211912448</int>
<int key="NSButtonFlags2">2</int>
<reference key="NSNormalImage" ref="268975194"/>
<reference key="NSNormalImage" ref="220837555"/>
<reference key="NSAlternateImage" ref="875688652"/>
<string key="NSAlternateContents"/>
<string key="NSKeyEquivalent"/>
<int key="NSPeriodicDelay">200</int>
<int key="NSPeriodicInterval">25</int>
</object>
<bool key="NSAllowsLogicalLayoutDirection">NO</bool>
</object>
<object class="NSButton" id="384170040">
<reference key="NSNextResponder" ref="1025762247"/>
<int key="NSvFlags">268</int>
<string key="NSFrame">{{15, 133}, {204, 22}}</string>
<reference key="NSSuperview" ref="1025762247"/>
<reference key="NSWindow"/>
<string key="NSReuseIdentifierKey">_NS:239</string>
<bool key="NSEnabled">YES</bool>
<object class="NSButtonCell" key="NSCell" id="805275804">
<int key="NSCellFlags">67108864</int>
<int key="NSCellFlags2">0</int>
<string key="NSContents">Fallback to insecure DNS</string>
<reference key="NSSupport" ref="1059912458"/>
<string key="NSCellIdentifier">_NS:239</string>
<reference key="NSControlView" ref="384170040"/>
<int key="NSButtonFlags">1211912448</int>
<int key="NSButtonFlags2">2</int>
<reference key="NSNormalImage" ref="220837555"/>
<reference key="NSAlternateImage" ref="875688652"/>
<string key="NSAlternateContents"/>
<string key="NSKeyEquivalent"/>
@@ -698,38 +696,6 @@
</object>
<int key="connectionID">26</int>
</object>
<object class="IBConnectionRecord">
<object class="IBOutletConnection" key="connection">
<string key="label">enableInsecureDNSButton</string>
<reference key="source" ref="294453543"/>
<reference key="destination" ref="384170040"/>
</object>
<int key="connectionID">301</int>
</object>
<object class="IBConnectionRecord">
<object class="IBActionConnection" key="connection">
<string key="label">enableInsecureDNSButtonPressed:</string>
<reference key="source" ref="294453543"/>
<reference key="destination" ref="384170040"/>
</object>
<int key="connectionID">293</int>
</object>
<object class="IBConnectionRecord">
<object class="IBOutletConnection" key="connection">
<string key="label">useHTTPSButton</string>
<reference key="source" ref="294453543"/>
<reference key="destination" ref="410495287"/>
</object>
<int key="connectionID">308</int>
</object>
<object class="IBConnectionRecord">
<object class="IBActionConnection" key="connection">
<string key="label">enableHTTPSButtonPressed:</string>
<reference key="source" ref="294453543"/>
<reference key="destination" ref="410495287"/>
</object>
<int key="connectionID">309</int>
</object>
<object class="IBConnectionRecord">
<object class="IBOutletConnection" key="connection">
<string key="label">statusText</string>
@@ -738,22 +704,6 @@
</object>
<int key="connectionID">304</int>
</object>
<object class="IBConnectionRecord">
<object class="IBOutletConnection" key="connection">
<string key="label">enableDNSCryptButton</string>
<reference key="source" ref="294453543"/>
<reference key="destination" ref="894789954"/>
</object>
<int key="connectionID">300</int>
</object>
<object class="IBConnectionRecord">
<object class="IBActionConnection" key="connection">
<string key="label">enableDNSCryptButtonPressed:</string>
<reference key="source" ref="294453543"/>
<reference key="destination" ref="894789954"/>
</object>
<int key="connectionID">292</int>
</object>
<object class="IBConnectionRecord">
<object class="IBOutletConnection" key="connection">
<string key="label">currentResolverTextField</string>
@@ -762,22 +712,6 @@
</object>
<int key="connectionID">296</int>
</object>
<object class="IBConnectionRecord">
<object class="IBOutletConnection" key="connection">
<string key="label">enableOpenDNSButton</string>
<reference key="source" ref="294453543"/>
<reference key="destination" ref="300098131"/>
</object>
<int key="connectionID">294</int>
</object>
<object class="IBConnectionRecord">
<object class="IBActionConnection" key="connection">
<string key="label">enableOpenDNSButtonPressed:</string>
<reference key="source" ref="294453543"/>
<reference key="destination" ref="300098131"/>
</object>
<int key="connectionID">291</int>
</object>
<object class="IBConnectionRecord">
<object class="IBOutletConnection" key="connection">
<string key="label">statusImageView</string>
@@ -826,6 +760,70 @@
</object>
<int key="connectionID">359</int>
</object>
<object class="IBConnectionRecord">
<object class="IBOutletConnection" key="connection">
<string key="label">dnscryptButton</string>
<reference key="source" ref="294453543"/>
<reference key="destination" ref="894789954"/>
</object>
<int key="connectionID">363</int>
</object>
<object class="IBConnectionRecord">
<object class="IBOutletConnection" key="connection">
<string key="label">opendnsButton</string>
<reference key="source" ref="294453543"/>
<reference key="destination" ref="300098131"/>
</object>
<int key="connectionID">364</int>
</object>
<object class="IBConnectionRecord">
<object class="IBOutletConnection" key="connection">
<string key="label">fallbackButton</string>
<reference key="source" ref="294453543"/>
<reference key="destination" ref="384170040"/>
</object>
<int key="connectionID">365</int>
</object>
<object class="IBConnectionRecord">
<object class="IBOutletConnection" key="connection">
<string key="label">familyShieldButton</string>
<reference key="source" ref="294453543"/>
<reference key="destination" ref="410495287"/>
</object>
<int key="connectionID">366</int>
</object>
<object class="IBConnectionRecord">
<object class="IBActionConnection" key="connection">
<string key="label">dnscryptButtonPressed:</string>
<reference key="source" ref="294453543"/>
<reference key="destination" ref="894789954"/>
</object>
<int key="connectionID">368</int>
</object>
<object class="IBConnectionRecord">
<object class="IBActionConnection" key="connection">
<string key="label">opendnsButtonPressed:</string>
<reference key="source" ref="294453543"/>
<reference key="destination" ref="300098131"/>
</object>
<int key="connectionID">369</int>
</object>
<object class="IBConnectionRecord">
<object class="IBActionConnection" key="connection">
<string key="label">familyShieldButtonPressed:</string>
<reference key="source" ref="294453543"/>
<reference key="destination" ref="410495287"/>
</object>
<int key="connectionID">371</int>
</object>
<object class="IBConnectionRecord">
<object class="IBActionConnection" key="connection">
<string key="label">fallbackButtonPressed:</string>
<reference key="source" ref="294453543"/>
<reference key="destination" ref="384170040"/>
</object>
<int key="connectionID">372</int>
</object>
</array>
<object class="IBMutableOrderedSet" key="objectRecords">
<array key="orderedObjects">
@@ -905,12 +903,12 @@
<reference ref="908408940"/>
<reference ref="193986403"/>
<reference ref="429164099"/>
<reference ref="300098131"/>
<reference ref="894789954"/>
<reference ref="384170040"/>
<reference ref="410495287"/>
<reference ref="487940586"/>
<reference ref="240318099"/>
<reference ref="300098131"/>
<reference ref="410495287"/>
<reference ref="496861916"/>
</array>
<reference key="parent" ref="19707695"/>
@@ -1236,7 +1234,7 @@
<nil key="activeLocalization"/>
<dictionary class="NSMutableDictionary" key="localizations"/>
<nil key="sourceID"/>
<int key="maxID">362</int>
<int key="maxID">372</int>
</object>
<object class="IBClassDescriber" key="IBDocument.Classes">
<array class="NSMutableArray" key="referencedPartialClassDescriptions">
@@ -1244,46 +1242,61 @@
<string key="className">DNSCrypt</string>
<string key="superclassName">NSPreferencePane</string>
<dictionary class="NSMutableDictionary" key="actions">
<string key="enableDNSCryptButtonPressed:">NSButton</string>
<string key="enableHTTPSButtonPressed:">NSButton</string>
<string key="enableInsecureDNSButtonPressed:">NSButton</string>
<string key="enableOpenDNSButtonPressed:">NSButton</string>
<string key="dnscryptButtonPressed:">NSButton</string>
<string key="fallbackButtonPressed:">NSButton</string>
<string key="familyShieldButtonPressed:">NSButton</string>
<string key="openDNSLinkPushed:">NSButton</string>
<string key="opendnsButtonPressed:">NSButton</string>
<string key="xenableDNSCryptButtonPressed:">NSButton</string>
<string key="xenableInsecureDNSButtonPressed:">NSButton</string>
<string key="xenableOpenDNSButtonPressed:">NSButton</string>
</dictionary>
<dictionary class="NSMutableDictionary" key="actionInfosByName">
<object class="IBActionInfo" key="enableDNSCryptButtonPressed:">
<string key="name">enableDNSCryptButtonPressed:</string>
<object class="IBActionInfo" key="dnscryptButtonPressed:">
<string key="name">dnscryptButtonPressed:</string>
<string key="candidateClassName">NSButton</string>
</object>
<object class="IBActionInfo" key="enableHTTPSButtonPressed:">
<string key="name">enableHTTPSButtonPressed:</string>
<object class="IBActionInfo" key="fallbackButtonPressed:">
<string key="name">fallbackButtonPressed:</string>
<string key="candidateClassName">NSButton</string>
</object>
<object class="IBActionInfo" key="enableInsecureDNSButtonPressed:">
<string key="name">enableInsecureDNSButtonPressed:</string>
<string key="candidateClassName">NSButton</string>
</object>
<object class="IBActionInfo" key="enableOpenDNSButtonPressed:">
<string key="name">enableOpenDNSButtonPressed:</string>
<object class="IBActionInfo" key="familyShieldButtonPressed:">
<string key="name">familyShieldButtonPressed:</string>
<string key="candidateClassName">NSButton</string>
</object>
<object class="IBActionInfo" key="openDNSLinkPushed:">
<string key="name">openDNSLinkPushed:</string>
<string key="candidateClassName">NSButton</string>
</object>
<object class="IBActionInfo" key="opendnsButtonPressed:">
<string key="name">opendnsButtonPressed:</string>
<string key="candidateClassName">NSButton</string>
</object>
<object class="IBActionInfo" key="xenableDNSCryptButtonPressed:">
<string key="name">xenableDNSCryptButtonPressed:</string>
<string key="candidateClassName">NSButton</string>
</object>
<object class="IBActionInfo" key="xenableInsecureDNSButtonPressed:">
<string key="name">xenableInsecureDNSButtonPressed:</string>
<string key="candidateClassName">NSButton</string>
</object>
<object class="IBActionInfo" key="xenableOpenDNSButtonPressed:">
<string key="name">xenableOpenDNSButtonPressed:</string>
<string key="candidateClassName">NSButton</string>
</object>
</dictionary>
<dictionary class="NSMutableDictionary" key="outlets">
<string key="aboutWebView">WebView</string>
<string key="currentResolverTextField">NSTextField</string>
<string key="enableDNSCryptButton">NSButton</string>
<string key="enableInsecureDNSButton">NSButton</string>
<string key="enableOpenDNSButton">NSButton</string>
<string key="dnscryptButton">NSButton</string>
<string key="fallbackButton">NSButton</string>
<string key="familyShieldButton">NSButton</string>
<string key="feedbackWebView">WebView</string>
<string key="opendnsButton">NSButton</string>
<string key="previewNotesWebView">WebView</string>
<string key="releaseNotesWebView">WebView</string>
<string key="statusImageView">NSImageView</string>
<string key="statusText">NSTextField</string>
<string key="useHTTPSButton">NSButton</string>
</dictionary>
<dictionary class="NSMutableDictionary" key="toOneOutletInfosByName">
<object class="IBToOneOutletInfo" key="aboutWebView">
@@ -1294,22 +1307,26 @@
<string key="name">currentResolverTextField</string>
<string key="candidateClassName">NSTextField</string>
</object>
<object class="IBToOneOutletInfo" key="enableDNSCryptButton">
<string key="name">enableDNSCryptButton</string>
<object class="IBToOneOutletInfo" key="dnscryptButton">
<string key="name">dnscryptButton</string>
<string key="candidateClassName">NSButton</string>
</object>
<object class="IBToOneOutletInfo" key="enableInsecureDNSButton">
<string key="name">enableInsecureDNSButton</string>
<object class="IBToOneOutletInfo" key="fallbackButton">
<string key="name">fallbackButton</string>
<string key="candidateClassName">NSButton</string>
</object>
<object class="IBToOneOutletInfo" key="enableOpenDNSButton">
<string key="name">enableOpenDNSButton</string>
<object class="IBToOneOutletInfo" key="familyShieldButton">
<string key="name">familyShieldButton</string>
<string key="candidateClassName">NSButton</string>
</object>
<object class="IBToOneOutletInfo" key="feedbackWebView">
<string key="name">feedbackWebView</string>
<string key="candidateClassName">WebView</string>
</object>
<object class="IBToOneOutletInfo" key="opendnsButton">
<string key="name">opendnsButton</string>
<string key="candidateClassName">NSButton</string>
</object>
<object class="IBToOneOutletInfo" key="previewNotesWebView">
<string key="name">previewNotesWebView</string>
<string key="candidateClassName">WebView</string>
@@ -1326,10 +1343,6 @@
<string key="name">statusText</string>
<string key="candidateClassName">NSTextField</string>
</object>
<object class="IBToOneOutletInfo" key="useHTTPSButton">
<string key="name">useHTTPSButton</string>
<string key="candidateClassName">NSButton</string>
</object>
</dictionary>
<object class="IBClassDescriptionSource" key="sourceIdentifier">
<string key="majorKey">IBProjectSource</string>