Permalink
Browse files

Allow user to set status in a basic way

  • Loading branch information...
1 parent ae6d937 commit 6e0fe8ed3f8f51be198b60f1aaee0ed0b7f199b8 @benlangfeld committed Nov 1, 2010
Showing with 134 additions and 12 deletions.
  1. +15 −10 Controllers/AccountsController.j
  2. +92 −0 Controllers/SetStatusController.j
  3. +26 −2 Models/Account.j
  4. +1 −0 Resources/SetStatus.cib
@@ -342,18 +342,23 @@ AccountWasDeletedNotification = @"AccountWasDeletedNotification";
- (@action)rosterDidReceiveDoubleClick:(id)aSender
{
- var contact = [self selectedItem],
- chatWindow;
-
- if ([chatWindows objectForKey:contact])
- chatWindow = [chatWindows objectForKey:contact];
- else
+ if ([[self selectedItem] isKindOfClass:[TNStropheContact class]])
{
- chatWindow = [[ChatWindowController alloc] initWithContact:contact];
- [chatWindows setObject:chatWindow forKey:contact];
+ var contact = [self selectedItem],
+ chatWindow;
+
+ if ([chatWindows objectForKey:contact])
+ chatWindow = [chatWindows objectForKey:contact];
+ else
+ {
+ chatWindow = [[ChatWindowController alloc] initWithContact:contact];
+ [chatWindows setObject:chatWindow forKey:contact];
+ }
+
+ [chatWindow showWindow:self];
}
-
- [chatWindow showWindow:self];
+ else if ([[self selectedItem] isKindOfClass:[Account class]])
+ [[[self selectedItem] setStatusController] showWindow:self];
}
@@ -0,0 +1,92 @@
+/*
+ * SetStatusController.j
+ * CappuccinoTalk
+ *
+ * Copyright (C) 2010 Ben Langfeld <ben@langfeld.me>
+ *
+ * This program is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU Lesser General Public License as
+ * published by the Free Software Foundation, either version 3 of the
+ * License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public License
+ * along with this program. If not, see <http://www.gnu.org/licenses/>.
+ */
+
+@import <AppKit/CPWindowController.j>
+
+@import "AccountsController.j"
+@import "../Models/Account.j"
+
+@implementation SetStatusController : CPWindowController
+{
+ @outlet CPButton setButton;
+ @outlet CPPopUpButton showPicker;
+ @outlet CPTextField statusField;
+ Account account;
+}
+
+- (id)initWithAccount:(Account)anAccount
+{
+ if (self = [super initWithWindowCibName:@"SetStatus"])
+ {
+ account = anAccount;
+ }
+ return self;
+}
+
+- (void)awakeFromCib
+{
+ // This is called when the cib is done loading.
+ // You can implement this method on any object instantiated from a Cib.
+ // It's a useful hook for setting up current UI values, and other things.
+ [super awakeFromCib];
+ [[self window] setDefaultButton:setButton];
+
+ [statusField setValue:[CPColor grayColor] forThemeAttribute:"text-color" inState:CPTextFieldStatePlaceholder];
+
+ [showPicker removeAllItems];
+
+ var onlineItem = [CPMenuItem new],
+ awayItem = [CPMenuItem new],
+ busyItem = [CPMenuItem new],
+ dndItem = [CPMenuItem new];
+
+ [onlineItem setTag:TNStropheContactStatusOnline];
+ [awayItem setTag:TNStropheContactStatusAway];
+ [busyItem setTag:TNStropheContactStatusBusy];
+ [dndItem setTag:TNStropheContactStatusDND];
+
+ [onlineItem setTitle:@"Online"];
+ [awayItem setTitle:@"Away"];
+ [busyItem setTitle:@"Busy"];
+ [dndItem setTitle:@"Do Not Disturb"];
+
+ [showPicker addItem:onlineItem];
+ [showPicker addItem:awayItem];
+ [showPicker addItem:busyItem];
+ [showPicker addItem:dndItem];
+
+ // [showPicker selectItemWithTag:];
+ // [statusField setObjectValue:[account XMPPStatus]];
+
+ [statusField becomeFirstResponder];
+}
+
+- (@action)submit:(id)aSender
+{
+ [account setStatus:[statusField objectValue] ofType:[[showPicker selectedItem] tag]];
+ [self close];
+}
+
+- (@action)cancel:(id)aSender
+{
+ [self close];
+}
+
+@end
View
@@ -21,6 +21,8 @@
@import <AppKit/CPWindowController.j>
@import <StropheCappuccino/StropheCappuccino.j>
+@import "../Controllers/SetStatusController.j"
+
BOSHService = [[CPBundle mainBundle] objectForInfoDictionaryKey:@"XMPPBOSHService"];
ConnectionStatusConnected = @"Connected";
@@ -29,8 +31,10 @@ ConnectionStatusDisconnected = @"Disconnected";
@implementation Account : TNStropheConnection
{
- TNStropheRoster roster @accessors;
- BOOL enabled @accessors(property=isEnabled);
+ TNStropheRoster roster @accessors;
+ BOOL enabled @accessors(property=isEnabled);
+
+ CPWindowController setStatusController;
CPWindowController editAccountController;
}
@@ -153,4 +157,24 @@ ConnectionStatusDisconnected = @"Disconnected";
object:nil];
}
+- (SetStatusController)setStatusController
+{
+ if (!setStatusController)
+ setStatusController = [[SetStatusController alloc] initWithAccount:self];
+
+ return setStatusController;
+}
+
+- (void)setStatus:(CPString)aStatus ofType:(CPString)aType
+{
+ var stanza = [TNStropheStanza presence];
+ [stanza addChildWithName:@"show"];
+ [stanza addTextNode:aType];
+ [stanza up];
+ [stanza up];
+ [stanza addChildWithName:@"status"];
+ [stanza addTextNode:aStatus];
+ [self send:stanza];
+}
+
@end
View
@@ -0,0 +1 @@
+280NPLIST;1.0;D;K;4;$topD;K;18;CPCibObjectDataKeyD;K;6;CP$UIDd;1;2E;E;K;8;$objectsA;S;5;$nullD;K;10;$classnameS;16;_CPCibObjectDataK;8;$classesA;S;16;_CPCibObjectDataS;8;CPObjectE;E;D;K;6;$classD;K;6;CP$UIDd;1;1E;K;28;_CPCibObjectDataNamesKeysKeyD;K;6;CP$UIDd;1;4E;K;30;_CPCibObjectDataNamesValuesKeyD;K;6;CP$UIDd;1;5E;K;30;_CPCibObjectDataClassesKeysKeyD;K;6;CP$UIDd;1;6E;K;32;_CPCibObjectDataClassesValuesKeyD;K;6;CP$UIDd;1;7E;K;30;_CPCibObjectDataConnectionsKeyD;K;6;CP$UIDd;1;8E;K;28;_CPCibObjectDataFrameworkKeyD;K;6;CP$UIDd;1;9E;K;26;_CPCibObjectDataNextOidKeyD;K;6;CP$UIDd;2;10E;K;30;_CPCibObjectDataObjectsKeysKeyD;K;6;CP$UIDd;2;11E;K;32;_CPCibObjectDataObjectsValuesKeyD;K;6;CP$UIDd;2;12E;K;26;_CPCibObjectDataOidKeysKeyD;K;6;CP$UIDd;2;13E;K;28;_CPCibObjectDataOidValuesKeyD;K;6;CP$UIDd;2;14E;K;28;_CPCibObjectDataFileOwnerKeyD;K;6;CP$UIDd;2;16E;K;33;_CPCibObjectDataVisibleWindowsKeyD;K;6;CP$UIDd;2;18E;E;D;K;10;$classnameS;7;CPArrayK;8;$classesA;S;7;CPArrayS;8;CPObjectE;E;D;K;6;$classD;K;6;CP$UIDd;1;3E;K;10;CP.objectsA;D;K;6;CP$UIDd;2;16E;D;K;6;CP$UIDd;2;19E;D;K;6;CP$UIDd;2;21E;D;K;6;CP$UIDd;2;23E;D;K;6;CP$UIDd;2;25E;D;K;6;CP$UIDd;2;27E;D;K;6;CP$UIDd;2;29E;D;K;6;CP$UIDd;2;30E;E;E;D;K;6;$classD;K;6;CP$UIDd;1;3E;K;10;CP.objectsA;D;K;6;CP$UIDd;2;31E;D;K;6;CP$UIDd;2;32E;D;K;6;CP$UIDd;2;33E;D;K;6;CP$UIDd;2;34E;D;K;6;CP$UIDd;2;35E;D;K;6;CP$UIDd;2;36E;D;K;6;CP$UIDd;2;37E;D;K;6;CP$UIDd;2;37E;E;E;D;K;6;$classD;K;6;CP$UIDd;1;3E;K;10;CP.objectsA;E;E;D;K;6;$classD;K;6;CP$UIDd;1;3E;K;10;CP.objectsA;E;E;D;K;6;$classD;K;6;CP$UIDd;1;3E;K;10;CP.objectsA;D;K;6;CP$UIDd;2;39E;D;K;6;CP$UIDd;2;40E;D;K;6;CP$UIDd;2;41E;D;K;6;CP$UIDd;2;42E;D;K;6;CP$UIDd;2;44E;D;K;6;CP$UIDd;2;45E;E;E;S;16;IBCocoaFrameworkd;3;461D;K;6;$classD;K;6;CP$UIDd;1;3E;K;10;CP.objectsA;D;K;6;CP$UIDd;2;19E;D;K;6;CP$UIDd;2;21E;D;K;6;CP$UIDd;2;23E;D;K;6;CP$UIDd;2;25E;D;K;6;CP$UIDd;2;27E;D;K;6;CP$UIDd;2;29E;D;K;6;CP$UIDd;2;30E;E;E;D;K;6;$classD;K;6;CP$UIDd;1;3E;K;10;CP.objectsA;D;K;6;CP$UIDd;2;16E;D;K;6;CP$UIDd;2;16E;D;K;6;CP$UIDd;2;21E;D;K;6;CP$UIDd;2;23E;D;K;6;CP$UIDd;2;23E;D;K;6;CP$UIDd;2;23E;D;K;6;CP$UIDd;2;23E;E;E;D;K;6;$classD;K;6;CP$UIDd;1;3E;K;10;CP.objectsA;E;E;D;K;6;$classD;K;6;CP$UIDd;1;3E;K;10;CP.objectsA;E;E;D;K;10;$classnameS;18;_CPCibCustomObjectK;8;$classesA;S;18;_CPCibCustomObjectS;8;CPObjectE;E;D;K;6;$classD;K;6;CP$UIDd;2;15E;K;27;_CPCibCustomObjectClassNameD;K;6;CP$UIDd;2;46E;E;D;K;10;$classnameS;5;CPSetK;8;$classesA;S;5;CPSetS;8;CPObjectE;E;D;K;6;$classD;K;6;CP$UIDd;2;17E;K;15;CPSetObjectsKeyD;K;6;CP$UIDd;2;47E;E;D;K;6;$classD;K;6;CP$UIDd;2;15E;K;27;_CPCibCustomObjectClassNameD;K;6;CP$UIDd;2;48E;E;D;K;10;$classnameS;20;_CPCibWindowTemplateK;8;$classesA;S;20;_CPCibWindowTemplateS;8;CPObjectE;E;D;K;6;$classD;K;6;CP$UIDd;2;20E;K;30;_CPCibWindowTemplateMaxSizeKeyD;K;6;CP$UIDd;2;49E;K;32;_CPCibWindowTemplateViewClassKeyD;K;6;CP$UIDd;1;0E;K;34;_CPCibWindowTemplateWindowClassKeyD;K;6;CP$UIDd;2;50E;K;33;_CPCibWindowTemplateWindowRectKeyD;K;6;CP$UIDd;2;51E;K;30;_CPCibWindowTempatStyleMaskKeyD;K;6;CP$UIDd;2;52E;K;34;_CPCibWindowTemplateWindowTitleKeyD;K;6;CP$UIDd;2;53E;K;33;_CPCibWindowTemplateWindowViewKeyD;K;6;CP$UIDd;2;23E;E;D;K;10;$classnameS;6;CPViewK;8;$classesA;S;6;CPViewS;11;CPResponderS;8;CPObjectE;E;D;K;6;$classD;K;6;CP$UIDd;2;22E;K;27;CPResponderNextResponderKeyD;K;6;CP$UIDd;2;54E;K;14;CPViewFrameKeyD;K;6;CP$UIDd;2;55E;K;15;CPViewBoundsKeyD;K;6;CP$UIDd;2;56E;K;15;CPViewWindowKeyD;K;6;CP$UIDd;2;57E;K;17;CPViewSubviewsKeyD;K;6;CP$UIDd;2;58E;K;18;CPViewSuperviewKeyD;K;6;CP$UIDd;2;54E;K;22;CPViewAutoresizingMaskD;K;6;CP$UIDd;2;59E;K;19;CPViewThemeStateKeyD;K;6;CP$UIDd;2;60E;E;D;K;10;$classnameS;11;CPTextFieldK;8;$classesA;S;11;CPTextFieldS;9;CPControlS;6;CPViewS;11;CPResponderS;8;CPObjectE;E;D;K;6;$classD;K;6;CP$UIDd;2;24E;K;27;CPResponderNextResponderKeyD;K;6;CP$UIDd;2;23E;K;14;CPViewFrameKeyD;K;6;CP$UIDd;2;61E;K;15;CPViewBoundsKeyD;K;6;CP$UIDd;2;62E;K;15;CPViewWindowKeyD;K;6;CP$UIDd;2;57E;K;18;CPViewSuperviewKeyD;K;6;CP$UIDd;2;23E;K;22;CPViewAutoresizingMaskD;K;6;CP$UIDd;2;63E;K;19;CPViewThemeStateKeyD;K;6;CP$UIDd;2;64E;K;12;$atext-colorD;K;6;CP$UIDd;2;66E;K;17;$aline-break-modeD;K;6;CP$UIDd;2;63E;K;11;$aalignmentD;K;6;CP$UIDd;2;67E;K;17;CPControlValueKeyD;K;6;CP$UIDd;2;68E;K;24;CPControlSendActionOnKeyD;K;6;CP$UIDd;2;69E;K;24;CPTextFieldIsEditableKeyD;K;6;CP$UIDd;2;70E;K;26;CPTextFieldIsSelectableKeyD;K;6;CP$UIDd;2;70E;K;29;CPTextFieldDrawsBackgroundKeyD;K;6;CP$UIDd;2;70E;K;29;CPTextFieldBackgroundColorKeyD;K;6;CP$UIDd;2;71E;K;31;CPTextFieldPlaceholderStringKeyD;K;6;CP$UIDd;2;72E;E;D;K;10;$classnameS;13;CPPopUpButtonK;8;$classesA;S;13;CPPopUpButtonS;8;CPButtonS;9;CPControlS;6;CPViewS;11;CPResponderS;8;CPObjectE;E;D;K;6;$classD;K;6;CP$UIDd;2;26E;K;27;CPResponderNextResponderKeyD;K;6;CP$UIDd;2;23E;K;14;CPViewFrameKeyD;K;6;CP$UIDd;2;73E;K;15;CPViewBoundsKeyD;K;6;CP$UIDd;2;74E;K;15;CPViewWindowKeyD;K;6;CP$UIDd;2;57E;K;18;CPViewSuperviewKeyD;K;6;CP$UIDd;2;23E;K;22;CPViewAutoresizingMaskD;K;6;CP$UIDd;2;63E;K;19;CPViewThemeStateKeyD;K;6;CP$UIDd;2;75E;K;17;$aline-break-modeD;K;6;CP$UIDd;2;67E;K;11;$aalignmentD;K;6;CP$UIDd;2;76E;K;24;CPControlSendActionOnKeyD;K;6;CP$UIDd;2;67E;K;16;CPButtonImageKeyD;K;6;CP$UIDd;1;0E;K;25;CPButtonAlternateImageKeyD;K;6;CP$UIDd;1;0E;K;16;CPButtonTitleKeyD;K;6;CP$UIDd;2;68E;K;25;CPButtonAlternateTitleKeyD;K;6;CP$UIDd;1;0E;K;32;CPButtonImageDimsWhenDisabledKeyD;K;6;CP$UIDd;2;77E;K;28;CPButtonKeyEquivalentMaskKeyD;K;6;CP$UIDd;1;0E;K;20;CPPopUpButtonMenuKeyD;K;6;CP$UIDd;2;79E;K;29;CPPopUpButtonSelectedIndexKeyD;K;6;CP$UIDd;2;80E;E;D;K;10;$classnameS;8;CPButtonK;8;$classesA;S;8;CPButtonS;9;CPControlS;6;CPViewS;11;CPResponderS;8;CPObjectE;E;D;K;6;$classD;K;6;CP$UIDd;2;28E;K;27;CPResponderNextResponderKeyD;K;6;CP$UIDd;2;23E;K;14;CPViewFrameKeyD;K;6;CP$UIDd;2;81E;K;15;CPViewBoundsKeyD;K;6;CP$UIDd;2;82E;K;15;CPViewWindowKeyD;K;6;CP$UIDd;2;57E;K;18;CPViewSuperviewKeyD;K;6;CP$UIDd;2;23E;K;22;CPViewAutoresizingMaskD;K;6;CP$UIDd;2;83E;K;19;CPViewThemeStateKeyD;K;6;CP$UIDd;2;75E;K;17;$aline-break-modeD;K;6;CP$UIDd;2;76E;K;11;$aalignmentD;K;6;CP$UIDd;2;63E;K;17;CPControlValueKeyD;K;6;CP$UIDd;2;76E;K;24;CPControlSendActionOnKeyD;K;6;CP$UIDd;2;67E;K;16;CPButtonImageKeyD;K;6;CP$UIDd;1;0E;K;25;CPButtonAlternateImageKeyD;K;6;CP$UIDd;1;0E;K;16;CPButtonTitleKeyD;K;6;CP$UIDd;2;84E;K;25;CPButtonAlternateTitleKeyD;K;6;CP$UIDd;1;0E;K;32;CPButtonImageDimsWhenDisabledKeyD;K;6;CP$UIDd;2;77E;K;28;CPButtonKeyEquivalentMaskKeyD;K;6;CP$UIDd;2;76E;E;D;K;6;$classD;K;6;CP$UIDd;2;28E;K;27;CPResponderNextResponderKeyD;K;6;CP$UIDd;2;23E;K;14;CPViewFrameKeyD;K;6;CP$UIDd;2;85E;K;15;CPViewBoundsKeyD;K;6;CP$UIDd;2;82E;K;15;CPViewWindowKeyD;K;6;CP$UIDd;2;57E;K;18;CPViewSuperviewKeyD;K;6;CP$UIDd;2;23E;K;22;CPViewAutoresizingMaskD;K;6;CP$UIDd;2;86E;K;19;CPViewThemeStateKeyD;K;6;CP$UIDd;2;75E;K;17;$aline-break-modeD;K;6;CP$UIDd;2;76E;K;11;$aalignmentD;K;6;CP$UIDd;2;63E;K;17;CPControlValueKeyD;K;6;CP$UIDd;2;76E;K;24;CPControlSendActionOnKeyD;K;6;CP$UIDd;2;67E;K;16;CPButtonImageKeyD;K;6;CP$UIDd;1;0E;K;25;CPButtonAlternateImageKeyD;K;6;CP$UIDd;1;0E;K;16;CPButtonTitleKeyD;K;6;CP$UIDd;2;87E;K;25;CPButtonAlternateTitleKeyD;K;6;CP$UIDd;1;0E;K;32;CPButtonImageDimsWhenDisabledKeyD;K;6;CP$UIDd;2;77E;K;28;CPButtonKeyEquivalentMaskKeyD;K;6;CP$UIDd;2;76E;E;S;12;File's OwnerS;11;ApplicationS;6;WindowS;4;ViewS;10;Text fieldS;13;Pop up buttonS;6;ButtonD;K;10;$classnameS;20;CPCibOutletConnectorK;8;$classesA;S;20;CPCibOutletConnectorS;14;CPCibConnectorS;8;CPObjectE;E;D;K;6;$classD;K;6;CP$UIDd;2;38E;K;24;_CPCibConnectorSourceKeyD;K;6;CP$UIDd;2;16E;K;29;_CPCibConnectorDestinationKeyD;K;6;CP$UIDd;2;30E;K;23;_CPCibConnectorLabelKeyD;K;6;CP$UIDd;2;88E;E;D;K;6;$classD;K;6;CP$UIDd;2;38E;K;24;_CPCibConnectorSourceKeyD;K;6;CP$UIDd;2;16E;K;29;_CPCibConnectorDestinationKeyD;K;6;CP$UIDd;2;25E;K;23;_CPCibConnectorLabelKeyD;K;6;CP$UIDd;2;89E;E;D;K;6;$classD;K;6;CP$UIDd;2;38E;K;24;_CPCibConnectorSourceKeyD;K;6;CP$UIDd;2;16E;K;29;_CPCibConnectorDestinationKeyD;K;6;CP$UIDd;2;27E;K;23;_CPCibConnectorLabelKeyD;K;6;CP$UIDd;2;90E;E;D;K;6;$classD;K;6;CP$UIDd;2;38E;K;24;_CPCibConnectorSourceKeyD;K;6;CP$UIDd;2;16E;K;29;_CPCibConnectorDestinationKeyD;K;6;CP$UIDd;2;21E;K;23;_CPCibConnectorLabelKeyD;K;6;CP$UIDd;2;91E;E;D;K;10;$classnameS;21;CPCibControlConnectorK;8;$classesA;S;21;CPCibControlConnectorS;14;CPCibConnectorS;8;CPObjectE;E;D;K;6;$classD;K;6;CP$UIDd;2;43E;K;24;_CPCibConnectorSourceKeyD;K;6;CP$UIDd;2;30E;K;29;_CPCibConnectorDestinationKeyD;K;6;CP$UIDd;2;16E;K;23;_CPCibConnectorLabelKeyD;K;6;CP$UIDd;2;92E;E;D;K;6;$classD;K;6;CP$UIDd;2;43E;K;24;_CPCibConnectorSourceKeyD;K;6;CP$UIDd;2;29E;K;29;_CPCibConnectorDestinationKeyD;K;6;CP$UIDd;2;16E;K;23;_CPCibConnectorLabelKeyD;K;6;CP$UIDd;2;93E;E;S;19;SetStatusControllerD;K;6;$classD;K;6;CP$UIDd;1;3E;K;10;CP.objectsA;D;K;6;CP$UIDd;2;94E;E;E;S;13;CPApplicationS;26;{3.40282e+38, 3.40282e+38}S;8;CPWindowS;24;{{430, 355}, {344, 108}}d;1;7S;15;Set Your StatusS;5;$nullS;21;{{0, 26}, {344, 108}}S;20;{{0, 0}, {344, 108}}S;5;$nullD;K;6;$classD;K;6;CP$UIDd;1;3E;K;10;CP.objectsA;D;K;6;CP$UIDd;2;25E;D;K;6;CP$UIDd;2;27E;D;K;6;CP$UIDd;2;29E;D;K;6;CP$UIDd;2;30E;E;E;d;2;18S;6;normalS;22;{{163, 12}, {169, 30}}S;19;{{0, 0}, {169, 30}}d;1;2S;19;bezeled+placeholderD;K;10;$classnameS;7;CPColorK;8;$classesA;S;7;CPColorS;8;CPObjectE;E;D;K;6;$classD;K;6;CP$UIDd;2;65E;K;20;CPColorComponentsKeyD;K;6;CP$UIDd;2;95E;E;d;1;4S;0;d;4;3072T;D;K;6;$classD;K;6;CP$UIDd;2;65E;K;20;CPColorComponentsKeyD;K;6;CP$UIDd;2;96E;E;S;11;Your StatusS;21;{{16, 16}, {145, 24}}S;19;{{0, 0}, {145, 24}}S;8;borderedd;1;0F;D;K;10;$classnameS;6;CPMenuK;8;$classesA;S;6;CPMenuS;8;CPObjectE;E;D;K;6;$classD;K;6;CP$UIDd;2;78E;K;14;CPMenuTitleKeyD;K;6;CP$UIDd;2;97E;K;14;CPMenuItemsKeyD;K;6;CP$UIDd;2;98E;E;d;1;3S;20;{{16, 66}, {98, 24}}S;18;{{0, 0}, {98, 24}}d;2;12S;6;CancelS;21;{{230, 66}, {98, 24}}d;1;9S;3;SetS;9;setButtonS;11;statusFieldS;10;showPickerS;6;windowS;7;submit:S;7;cancel:D;K;6;$classD;K;6;CP$UIDd;2;20E;K;30;_CPCibWindowTemplateMaxSizeKeyD;K;6;CP$UIDd;2;49E;K;32;_CPCibWindowTemplateViewClassKeyD;K;6;CP$UIDd;1;0E;K;34;_CPCibWindowTemplateWindowClassKeyD;K;6;CP$UIDd;2;50E;K;33;_CPCibWindowTemplateWindowRectKeyD;K;6;CP$UIDd;2;99E;K;30;_CPCibWindowTempatStyleMaskKeyD;K;6;CP$UIDd;2;52E;K;34;_CPCibWindowTemplateWindowTitleKeyD;K;6;CP$UIDd;2;33E;K;33;_CPCibWindowTemplateWindowViewKeyD;K;6;CP$UIDd;3;100E;E;D;K;6;$classD;K;6;CP$UIDd;1;3E;K;10;CP.objectsA;D;K;6;CP$UIDd;2;76E;D;K;6;CP$UIDd;2;76E;D;K;6;CP$UIDd;2;76E;D;K;6;CP$UIDd;3;101E;E;E;D;K;6;$classD;K;6;CP$UIDd;1;3E;K;10;CP.objectsA;D;K;6;CP$UIDd;3;101E;D;K;6;CP$UIDd;3;101E;D;K;6;CP$UIDd;3;101E;D;K;6;CP$UIDd;3;101E;E;E;S;10;OtherViewsD;K;6;$classD;K;6;CP$UIDd;1;3E;K;10;CP.objectsA;D;K;6;CP$UIDd;3;103E;D;K;6;CP$UIDd;3;104E;D;K;6;CP$UIDd;3;105E;D;K;6;CP$UIDd;3;106E;E;E;S;22;{{-59, 5}, {480, 360}}D;K;6;$classD;K;6;CP$UIDd;2;22E;K;14;CPViewFrameKeyD;K;6;CP$UIDd;3;107E;K;15;CPViewBoundsKeyD;K;6;CP$UIDd;3;108E;K;22;CPViewAutoresizingMaskD;K;6;CP$UIDd;2;59E;K;19;CPViewThemeStateKeyD;K;6;CP$UIDd;2;60E;E;d;1;1D;K;10;$classnameS;10;CPMenuItemK;8;$classesA;S;10;CPMenuItemS;8;CPObjectE;E;D;K;6;$classD;K;6;CP$UIDd;3;102E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;109E;K;19;CPMenuItemTargetKeyD;K;6;CP$UIDd;2;27E;K;19;CPMenuItemActionKeyD;K;6;CP$UIDd;3;110E;K;21;CPMenuItemIsHiddenKeyD;K;6;CP$UIDd;1;0E;K;16;CPMenuItemTagKeyD;K;6;CP$UIDd;1;0E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;2;79E;K;38;CPMenuItemKeyEquivalentModifierMaskKeyD;K;6;CP$UIDd;3;111E;E;D;K;6;$classD;K;6;CP$UIDd;3;102E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;112E;K;19;CPMenuItemTargetKeyD;K;6;CP$UIDd;2;27E;K;19;CPMenuItemActionKeyD;K;6;CP$UIDd;3;110E;K;21;CPMenuItemIsHiddenKeyD;K;6;CP$UIDd;1;0E;K;16;CPMenuItemTagKeyD;K;6;CP$UIDd;1;0E;K;18;CPMenuItemStateKeyD;K;6;CP$UIDd;1;0E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;2;79E;K;38;CPMenuItemKeyEquivalentModifierMaskKeyD;K;6;CP$UIDd;3;111E;E;D;K;6;$classD;K;6;CP$UIDd;3;102E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;113E;K;19;CPMenuItemTargetKeyD;K;6;CP$UIDd;2;27E;K;19;CPMenuItemActionKeyD;K;6;CP$UIDd;3;110E;K;21;CPMenuItemIsHiddenKeyD;K;6;CP$UIDd;1;0E;K;16;CPMenuItemTagKeyD;K;6;CP$UIDd;1;0E;K;18;CPMenuItemStateKeyD;K;6;CP$UIDd;1;0E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;2;79E;K;38;CPMenuItemKeyEquivalentModifierMaskKeyD;K;6;CP$UIDd;3;111E;E;D;K;6;$classD;K;6;CP$UIDd;3;102E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;2;68E;K;19;CPMenuItemTargetKeyD;K;6;CP$UIDd;2;27E;K;19;CPMenuItemActionKeyD;K;6;CP$UIDd;3;110E;K;21;CPMenuItemIsHiddenKeyD;K;6;CP$UIDd;1;0E;K;18;CPMenuItemStateKeyD;K;6;CP$UIDd;3;101E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;2;79E;K;38;CPMenuItemKeyEquivalentModifierMaskKeyD;K;6;CP$UIDd;3;111E;E;S;21;{{0, 26}, {480, 360}}S;20;{{0, 0}, {480, 360}}S;6;Item 1S;17;_popUpItemAction:d;7;1048576S;6;Item 2S;6;Item 3E;K;9;$archiverS;15;CPKeyedArchiverK;8;$versionS;6;100000E;

0 comments on commit 6e0fe8e

Please sign in to comment.