adium 5539:003c1066675e: Merged adium-1.6 into default.
commits at adium.im
commits at adium.im
Wed Jun 5 22:15:43 UTC 2013
details: http://hg.adium.im/adium/rev/003c1066675e
revision: 5539:003c1066675e
branch: (none)
author: Thijs Alkemade <me at thijsalkema.de>
date: Thu Jun 06 00:14:38 2013 +0200
Merged adium-1.6 into default.
diffs (truncated from 6509 to 1000 lines):
diff -r b3f0ce37cbea -r 003c1066675e Adium.xcodeproj/project.pbxproj
--- a/Adium.xcodeproj/project.pbxproj Wed Jun 05 16:57:58 2013 -0400
+++ b/Adium.xcodeproj/project.pbxproj Thu Jun 06 00:14:38 2013 +0200
@@ -1332,6 +1332,14 @@
761D58801636C60100210B12 /* AINewMessageTableView.m in Sources */ = {isa = PBXBuildFile; fileRef = 761D587F1636C60100210B12 /* AINewMessageTableView.m */; };
761D58831636EDE100210B12 /* AINewMessageTextFieldCell.m in Sources */ = {isa = PBXBuildFile; fileRef = 761D58821636EDE100210B12 /* AINewMessageTextFieldCell.m */; };
761D58861636F94300210B12 /* AINewMessageSearchField.m in Sources */ = {isa = PBXBuildFile; fileRef = 761D58851636F94200210B12 /* AINewMessageSearchField.m */; };
+ 7652804C175FC0F500710EC8 /* RequestFieldBoolean.xib in Resources */ = {isa = PBXBuildFile; fileRef = 7652803F175FC0EB00710EC8 /* RequestFieldBoolean.xib */; };
+ 7652804D175FC0F500710EC8 /* RequestFieldChoice.xib in Resources */ = {isa = PBXBuildFile; fileRef = 76528040175FC0EB00710EC8 /* RequestFieldChoice.xib */; };
+ 7652804E175FC0F500710EC8 /* RequestFieldInteger.xib in Resources */ = {isa = PBXBuildFile; fileRef = 76528041175FC0EB00710EC8 /* RequestFieldInteger.xib */; };
+ 7652804F175FC0F500710EC8 /* RequestFieldList.xib in Resources */ = {isa = PBXBuildFile; fileRef = 76528042175FC0EB00710EC8 /* RequestFieldList.xib */; };
+ 76528050175FC0F500710EC8 /* RequestFieldString.xib in Resources */ = {isa = PBXBuildFile; fileRef = 76528043175FC0EB00710EC8 /* RequestFieldString.xib */; };
+ 76528054175FCEF700710EC8 /* RequestFieldMultilineString.xib in Resources */ = {isa = PBXBuildFile; fileRef = 76528052175FCEF700710EC8 /* RequestFieldMultilineString.xib */; };
+ 76528055175FCEF700710EC8 /* RequestFieldSecureString.xib in Resources */ = {isa = PBXBuildFile; fileRef = 76528053175FCEF700710EC8 /* RequestFieldSecureString.xib */; };
+ 7652805A175FD35B00710EC8 /* RequestFieldMultiList.xib in Resources */ = {isa = PBXBuildFile; fileRef = 76528059175FD35B00710EC8 /* RequestFieldMultiList.xib */; };
765F5DC51635934400C57904 /* AIRejoinGroupChatTopBar.xib in Resources */ = {isa = PBXBuildFile; fileRef = 765F5DC71635934400C57904 /* AIRejoinGroupChatTopBar.xib */; };
7664EAA5162E086A008CF995 /* libffi.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 7664EAA4162E086A008CF995 /* libffi.framework */; };
7664EAA6162E0874008CF995 /* libffi.framework in Copy Frameworks */ = {isa = PBXBuildFile; fileRef = 7664EAA4162E086A008CF995 /* libffi.framework */; };
@@ -4396,6 +4404,14 @@
761D58821636EDE100210B12 /* AINewMessageTextFieldCell.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; name = AINewMessageTextFieldCell.m; path = Source/AINewMessageTextFieldCell.m; sourceTree = "<group>"; };
761D58841636F94200210B12 /* AINewMessageSearchField.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = AINewMessageSearchField.h; path = Source/AINewMessageSearchField.h; sourceTree = "<group>"; };
761D58851636F94200210B12 /* AINewMessageSearchField.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; name = AINewMessageSearchField.m; path = Source/AINewMessageSearchField.m; sourceTree = "<group>"; };
+ 7652803F175FC0EB00710EC8 /* RequestFieldBoolean.xib */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = file.xib; name = RequestFieldBoolean.xib; path = "Plugins/Purple Service/Request UI/RequestFieldBoolean.xib"; sourceTree = "<group>"; };
+ 76528040175FC0EB00710EC8 /* RequestFieldChoice.xib */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = file.xib; name = RequestFieldChoice.xib; path = "Plugins/Purple Service/Request UI/RequestFieldChoice.xib"; sourceTree = "<group>"; };
+ 76528041175FC0EB00710EC8 /* RequestFieldInteger.xib */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = file.xib; name = RequestFieldInteger.xib; path = "Plugins/Purple Service/Request UI/RequestFieldInteger.xib"; sourceTree = "<group>"; };
+ 76528042175FC0EB00710EC8 /* RequestFieldList.xib */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = file.xib; name = RequestFieldList.xib; path = "Plugins/Purple Service/Request UI/RequestFieldList.xib"; sourceTree = "<group>"; };
+ 76528043175FC0EB00710EC8 /* RequestFieldString.xib */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = file.xib; name = RequestFieldString.xib; path = "Plugins/Purple Service/Request UI/RequestFieldString.xib"; sourceTree = "<group>"; };
+ 76528052175FCEF700710EC8 /* RequestFieldMultilineString.xib */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = file.xib; name = RequestFieldMultilineString.xib; path = "Plugins/Purple Service/Request UI/RequestFieldMultilineString.xib"; sourceTree = "<group>"; };
+ 76528053175FCEF700710EC8 /* RequestFieldSecureString.xib */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = file.xib; name = RequestFieldSecureString.xib; path = "Plugins/Purple Service/Request UI/RequestFieldSecureString.xib"; sourceTree = "<group>"; };
+ 76528059175FD35B00710EC8 /* RequestFieldMultiList.xib */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = file.xib; name = RequestFieldMultiList.xib; path = "Plugins/Purple Service/Request UI/RequestFieldMultiList.xib"; sourceTree = "<group>"; };
765F5DC61635934400C57904 /* en */ = {isa = PBXFileReference; lastKnownFileType = file.xib; name = en; path = en.lproj/AIRejoinGroupChatTopBar.xib; sourceTree = "<group>"; };
7664EAA4162E086A008CF995 /* libffi.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = libffi.framework; path = Frameworks/libffi.framework; sourceTree = "<group>"; };
766ABAB41306D1020049FFB7 /* AIUnreadMessagesTooltip.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = AIUnreadMessagesTooltip.h; path = Source/AIUnreadMessagesTooltip.h; sourceTree = "<group>"; };
@@ -6070,6 +6086,14 @@
34C2CF8F0633405C0018E5D2 /* Request UI */ = {
isa = PBXGroup;
children = (
+ 7652803F175FC0EB00710EC8 /* RequestFieldBoolean.xib */,
+ 76528040175FC0EB00710EC8 /* RequestFieldChoice.xib */,
+ 76528041175FC0EB00710EC8 /* RequestFieldInteger.xib */,
+ 76528059175FD35B00710EC8 /* RequestFieldMultiList.xib */,
+ 76528042175FC0EB00710EC8 /* RequestFieldList.xib */,
+ 76528043175FC0EB00710EC8 /* RequestFieldString.xib */,
+ 76528052175FCEF700710EC8 /* RequestFieldMultilineString.xib */,
+ 76528053175FCEF700710EC8 /* RequestFieldSecureString.xib */,
34AEE7E808E35A5800AE1C78 /* ESPurpleRequestAbstractWindowController.h */,
34AEE7E908E35A5800AE1C78 /* ESPurpleRequestAbstractWindowController.m */,
3499F4A706309AF60035B468 /* ESPurpleRequestWindowController.h */,
@@ -9626,6 +9650,14 @@
34D8153F13B663650022C8C4 /* AIFacebookXMPPOauthWebViewWindow.xib in Resources */,
5A22D6E214834F44004E15F7 /* AIFacebookXMPPAccountView.xib in Resources */,
769D634B17393CBE008B97BC /* AMPurpleJabberDiscoveryBrowser.xib in Resources */,
+ 7652804C175FC0F500710EC8 /* RequestFieldBoolean.xib in Resources */,
+ 7652804D175FC0F500710EC8 /* RequestFieldChoice.xib in Resources */,
+ 7652804E175FC0F500710EC8 /* RequestFieldInteger.xib in Resources */,
+ 7652804F175FC0F500710EC8 /* RequestFieldList.xib in Resources */,
+ 76528050175FC0F500710EC8 /* RequestFieldString.xib in Resources */,
+ 76528054175FCEF700710EC8 /* RequestFieldMultilineString.xib in Resources */,
+ 76528055175FCEF700710EC8 /* RequestFieldSecureString.xib in Resources */,
+ 7652805A175FD35B00710EC8 /* RequestFieldMultiList.xib in Resources */,
);
runOnlyForDeploymentPostprocessing = 0;
};
diff -r b3f0ce37cbea -r 003c1066675e Plugins/Purple Service/AMPurpleRequestFieldsController.h
--- a/Plugins/Purple Service/AMPurpleRequestFieldsController.h Wed Jun 05 16:57:58 2013 -0400
+++ b/Plugins/Purple Service/AMPurpleRequestFieldsController.h Thu Jun 06 00:14:38 2013 +0200
@@ -25,12 +25,21 @@
GCallback cancelcb;
void *userData;
PurpleRequestFields *fields;
- NSMutableDictionary *fieldobjects;
+ NSMutableArray *fieldobjects;
BOOL wasSubmitted;
- IBOutlet WebView *webview;
+ IBOutlet NSTextField *primaryTextField;
+ IBOutlet NSTextField *secondaryTextField;
+
+ IBOutlet NSButton *okButton;
+ IBOutlet NSButton *cancelButton;
+
+ IBOutlet NSView *contentView;
}
+- (IBAction)submit:(id)sender;
+- (IBAction)cancel:(id)sender;
+
- (id)initWithTitle:(NSString *)title
primaryText:(NSString *)primary
secondaryText:(NSString *)secondary
diff -r b3f0ce37cbea -r 003c1066675e Plugins/Purple Service/AMPurpleRequestFieldsController.m
--- a/Plugins/Purple Service/AMPurpleRequestFieldsController.m Wed Jun 05 16:57:58 2013 -0400
+++ b/Plugins/Purple Service/AMPurpleRequestFieldsController.m Thu Jun 06 00:14:38 2013 +0200
@@ -16,6 +16,7 @@
#import "AMPurpleRequestFieldsController.h"
#import <AIUtilities/AIImageAdditions.h>
+#import <AIUtilities/AIMenuAdditions.h>
#import <AIUtilities/AIStringAdditions.h>
@interface WebView ()
@@ -26,43 +27,70 @@
@interface AMPurpleRequestField : NSObject {
PurpleRequestField *field;
CBPurpleAccount *account;
+ IBOutlet NSView *view;
+ IBOutlet NSTextView *label;
+
+ NSInteger height;
}
- (id)initWithAccount:(CBPurpleAccount*)_account requestField:(PurpleRequestField*)_field;
-
-- (NSXMLElement*)xhtml;
-- (NSString*)key;
-
-- (void)applyValue:(NSString*)value;
+- (NSString *)nibName;
+- (NSView *)makeView;
+- (NSAttributedString *)label;
+- (void)submit;
@end
@interface AMPurpleRequestFieldString : AMPurpleRequestField {
+ IBOutlet NSTextField *textField;
}
+ at end
+ at interface AMPurpleRequestFieldSecureString : AMPurpleRequestField {
+ IBOutlet NSSecureTextField *maskedField;
+}
+ at end
+
+ at interface AMPurpleRequestFieldMultilineString : AMPurpleRequestField {
+ IBOutlet NSTextView *textView;
+}
@end
@interface AMPurpleRequestFieldInteger : AMPurpleRequestField {
+ IBOutlet NSTextField *textField;
}
@end
@interface AMPurpleRequestFieldBoolean : AMPurpleRequestField {
+ IBOutlet NSButton *checkBox;
}
@end
@interface AMPurpleRequestFieldChoice : AMPurpleRequestField {
+ IBOutlet NSPopUpButton *popUp;
}
@end
@interface AMPurpleRequestFieldList : AMPurpleRequestField {
+ IBOutlet NSPopUpButton *popUp;
}
@end
+ at interface AMPurpleRequestFieldMultiList : AMPurpleRequestField {
+ IBOutlet NSPopUpButton *popDown;
+}
+
+- (IBAction)didSelect:(id)sender;
+
+ at end
+
+
@interface AMPurpleRequestFieldLabel : AMPurpleRequestField {
+ IBOutlet NSTextView *labelview;
}
@end
@@ -83,259 +111,436 @@
if((self = [super init])) {
account = _account;
field = _field;
- }
+
+ [NSBundle loadNibNamed:[self nibName] owner:self];
+
+ height = view.frame.size.height;
+
+ NSInteger dh = height - label.frame.size.height;
+
+ [[label textStorage] setAttributedString:[self label]];
+
+ [label setHorizontallyResizable:FALSE];
+ [label setTextContainerInset:NSMakeSize(0, 0)];
+ [label sizeToFit];
+
+ if (height < label.frame.size.height + dh) {
+ height = label.frame.size.height + dh;
+ }
+ }
return self;
}
-- (NSXMLElement*)xhtml {
- NSXMLElement *result = [NSXMLNode elementWithName:@"div"];
-
- [result addAttribute:[NSXMLNode attributeWithName:@"class" stringValue:@"field"]];
-
- const char *labelstr = purple_request_field_get_label(field);
-
- if(labelstr) {
- NSXMLElement *label = [NSXMLNode elementWithName:@"label" stringValue:[NSString stringWithUTF8String:labelstr]];
- [label addAttribute:[NSXMLNode attributeWithName:@"for" stringValue:[self key]]];
-
- [result addChild:[NSXMLNode elementWithName:@"div"
- children:[NSArray arrayWithObject:label]
- attributes:[NSArray arrayWithObject:[NSXMLNode attributeWithName:@"class" stringValue:@"label"]]]];
- }
- return result;
+- (NSView *)makeView {
+ assert(FALSE);
}
-- (NSString*)key {
- return [NSString stringWithFormat:@"%p",self];
+- (NSString *)nibName {
+ return nil;
}
-- (void)applyValue:(NSString*)value {
- NSLog(@"Applied the value \"%@\" to an AMPurpleRequestField!", value);
+- (NSAttributedString *)label
+{
+ const char *labelstr = purple_request_field_get_label(field);
+
+ if (labelstr) {
+ NSString *labelString = [NSString stringWithUTF8String:labelstr];
+
+ char endsWith = [labelString lastCharacter];
+
+ if (endsWith == ':' || endsWith == ';' || endsWith == ',' || endsWith == '.' || endsWith == '?') {
+ labelString = [labelString substringToIndex:[labelString length] - 1];
+ }
+
+ labelString = [labelString stringByAppendingString:@":"];
+
+ NSMutableParagraphStyle *rightAlign = [[NSMutableParagraphStyle alloc] init];
+ [rightAlign setAlignment:NSRightTextAlignment];
+
+ NSAttributedString *labelText = [[NSAttributedString alloc] initWithString:labelString
+ attributes:@{
+ NSParagraphStyleAttributeName: rightAlign,
+ NSFontAttributeName: [NSFont systemFontOfSize:[NSFont systemFontSize]]
+ }];
+
+ return labelText;
+ }
+
+ return [[NSAttributedString alloc] initWithString:@""];
+}
+
+- (void)submit
+{
+
}
@end
@implementation AMPurpleRequestFieldString
-- (NSXMLElement*)xhtml {
- NSXMLElement *result = [super xhtml];
-
- const char *defaultvalue = purple_request_field_string_get_default_value(field);
- BOOL isMultiline = (purple_request_field_string_is_multiline(field) == TRUE) ? YES : NO;
- BOOL isEditable = (purple_request_field_string_is_editable(field) == TRUE) ? YES : NO;
- BOOL isMasked = (purple_request_field_string_is_masked(field) == TRUE) ? YES : NO;
- BOOL isVisible = (purple_request_field_is_visible(field) == TRUE) ? YES : NO;
-
- NSXMLElement *textinput;
-
- if(isMultiline) {
- textinput = [NSXMLNode elementWithName:@"textarea"];
- [textinput addAttribute:[NSXMLNode attributeWithName:@"rows" stringValue:@"5"]];
- [textinput addAttribute:[NSXMLNode attributeWithName:@"cols" stringValue:@"40"]];
- if(defaultvalue)
- [textinput setStringValue:[NSString stringWithUTF8String:defaultvalue]];
- } else {
- textinput = [NSXMLNode elementWithName:@"input"];
- if (isVisible)
- [textinput addAttribute:[NSXMLNode attributeWithName:@"type" stringValue:isMasked?@"password":@"text"]];
- else
- [textinput addAttribute:[NSXMLNode attributeWithName:@"type" stringValue:@"hidden"]];
- [textinput addAttribute:[NSXMLNode attributeWithName:@"size" stringValue:@"50"]];
- if(defaultvalue)
- [textinput addAttribute:[NSXMLNode attributeWithName:@"value" stringValue:[NSString stringWithUTF8String:defaultvalue]]];
- }
- [textinput addAttribute:[NSXMLNode attributeWithName:@"name" stringValue:[self key]]];
- if(!isEditable)
- [textinput addAttribute:[NSXMLNode attributeWithName:@"readonly" stringValue:@"readonly"]];
-
- if (isVisible)
- [result addChild:[NSXMLNode elementWithName:@"div"
- children:[NSArray arrayWithObject:textinput]
- attributes:[NSArray arrayWithObject:[NSXMLNode attributeWithName:@"class" stringValue:@"input"]]]];
- else
- return textinput;
-
- return result;
+- (NSString *)nibName
+{
+ return @"RequestFieldString";
}
-- (void)applyValue:(NSString*)value {
- purple_request_field_string_set_value(field, [value UTF8String]);
+- (NSView *)makeView
+{
+ AILogWithSignature(@"Appending this to the window");
+ NSString *defaultvalue = [NSString stringWithUTF8String:purple_request_field_string_get_default_value(field)];
+ BOOL isEditable = purple_request_field_string_is_editable(field);
+ BOOL isVisible = purple_request_field_is_visible(field);
+
+ if (!isVisible) return nil;
+
+ [textField setEditable:isEditable];
+ [textField setStringValue:defaultvalue];
+
+ return view;
+}
+
+- (void)submit
+{
+ BOOL isVisible = purple_request_field_is_visible(field);
+
+ if (!isVisible) {
+ purple_request_field_string_set_value(field, purple_request_field_string_get_default_value(field));
+ } else {
+ purple_request_field_string_set_value(field, [[textField stringValue] UTF8String]);
+ }
}
@end
+ at implementation AMPurpleRequestFieldSecureString
+
+- (NSString *)nibName
+{
+ return @"RequestFieldSecureString";
+}
+
+- (NSView *)makeView
+{
+ AILogWithSignature(@"Appending this to the window");
+ NSString *defaultvalue = [NSString stringWithUTF8String:purple_request_field_string_get_default_value(field)];
+ BOOL isEditable = purple_request_field_string_is_editable(field);
+ BOOL isVisible = purple_request_field_is_visible(field);
+
+ if (!isVisible) return nil;
+
+ [maskedField setEditable:isEditable];
+ [maskedField setStringValue:defaultvalue];
+
+ return view;
+}
+
+- (void)submit
+{
+ BOOL isVisible = purple_request_field_is_visible(field);
+
+ if (!isVisible) {
+ purple_request_field_string_set_value(field, purple_request_field_string_get_default_value(field));
+ } else {
+ purple_request_field_string_set_value(field, [[maskedField stringValue] UTF8String]);
+ }
+}
+
+ at end
+
+ at implementation AMPurpleRequestFieldMultilineString
+
+- (NSString *)nibName
+{
+ return @"RequestFieldMultilineString";
+}
+
+- (NSView *)makeView
+{
+ AILogWithSignature(@"Appending this to the window");
+ NSString *defaultvalue = [NSString stringWithUTF8String:purple_request_field_string_get_default_value(field)];
+ BOOL isEditable = purple_request_field_string_is_editable(field);
+ BOOL isVisible = purple_request_field_is_visible(field);
+
+ if (!isVisible) return nil;
+
+ [[textView enclosingScrollView] setHasVerticalScroller:TRUE];
+
+ [textView setEditable:isEditable];
+ [[textView textStorage] setAttributedString:[[NSAttributedString alloc] initWithString:defaultvalue]];
+
+ if (height < textView.frame.size.height + 15) {
+ height = textView.frame.size.height + 15;
+ }
+
+ [view setFrame:NSMakeRect(0, 0, view.frame.size.width, height)];
+
+ return view;
+}
+
+- (void)submit
+{
+ BOOL isVisible = purple_request_field_is_visible(field);
+
+ if (!isVisible) {
+ purple_request_field_string_set_value(field, purple_request_field_string_get_default_value(field));
+ } else {
+ purple_request_field_string_set_value(field, [[[textView textStorage] string] UTF8String]);
+ }
+}
+
+ at end
+
@implementation AMPurpleRequestFieldInteger
-- (NSXMLElement*)xhtml {
- NSXMLElement *result = [super xhtml];
-
- NSInteger defaultvalue = purple_request_field_int_get_default_value(field);
-
- NSXMLElement *textinput = [NSXMLNode elementWithName:@"input"];
- [textinput addAttribute:[NSXMLNode attributeWithName:@"type" stringValue:@"text"]];
- [textinput addAttribute:[NSXMLNode attributeWithName:@"value" stringValue:[NSString stringWithFormat:@"%ld",defaultvalue]]];
- [textinput addAttribute:[NSXMLNode attributeWithName:@"name" stringValue:[self key]]];
- // XXX add javascript to make sure this is integer-only
-
- [result addChild:[NSXMLNode elementWithName:@"div"
- children:[NSArray arrayWithObject:textinput]
- attributes:[NSArray arrayWithObject:[NSXMLNode attributeWithName:@"class" stringValue:@"input"]]]];
-
- return result;
+- (NSString *)nibName
+{
+ return @"RequestFieldInteger";
}
-- (void)applyValue:(NSString*)value {
- purple_request_field_int_set_value(field, [value intValue]);
+
+- (NSView *)makeView
+{
+ NSInteger defaultvalue = purple_request_field_int_get_default_value(field);
+
+ [textField setIntegerValue:defaultvalue];
+
+ return view;
+}
+
+- (void)submit
+{
+ purple_request_field_int_set_value(field, [textField intValue]);
}
@end
@implementation AMPurpleRequestFieldBoolean
-- (NSXMLElement*)xhtml {
- NSXMLElement *result = [super xhtml];
-
- BOOL defaultvalue = (purple_request_field_bool_get_default_value(field) == TRUE) ? YES : NO;
-
- NSXMLElement *checkbox = [NSXMLNode elementWithName:@"input"];
- [checkbox addAttribute:[NSXMLNode attributeWithName:@"type" stringValue:@"checkbox"]];
- [checkbox addAttribute:[NSXMLNode attributeWithName:@"value" stringValue:[self key]]];
- [checkbox addAttribute:[NSXMLNode attributeWithName:@"name" stringValue:[self key]]];
-
- if(defaultvalue)
- [checkbox addAttribute:[NSXMLNode attributeWithName:@"checked" stringValue:@"checked"]];
-
- [result addChild:[NSXMLNode elementWithName:@"div"
- children:[NSArray arrayWithObject:checkbox]
- attributes:[NSArray arrayWithObject:[NSXMLNode attributeWithName:@"class" stringValue:@"input"]]]];
-
- purple_request_field_bool_set_value(field, FALSE); // since we won't get an -applyValue: message when the checkbox isn't checked, assume false for now. This might be changed later.
- return result;
+- (NSString *)nibName
+{
+ return @"RequestFieldBoolean";
}
-- (void)applyValue:(NSString*)value {
- purple_request_field_bool_set_value(field, TRUE);
+- (NSView *)makeView
+{
+ BOOL defaultvalue = purple_request_field_bool_get_default_value(field);
+
+ [checkBox setState:defaultvalue];
+
+ return view;
+}
+
+- (void)submit
+{
+ purple_request_field_bool_set_value(field, [checkBox state] == NSOnState);
+}
+
+- (NSAttributedString *)label
+{
+
+ const char *labelstr = purple_request_field_get_label(field);
+
+ if (labelstr) {
+ NSString *labelString = [NSString stringWithUTF8String:labelstr];
+
+ char endsWith = [labelString lastCharacter];
+
+ if (endsWith == '.' || endsWith == '?') {
+ labelString = [labelString substringToIndex:[labelString length] - 1];
+ }
+
+ NSAttributedString *labelText = [[NSAttributedString alloc] initWithString:labelString
+ attributes:@{ NSFontAttributeName: [NSFont systemFontOfSize:[NSFont systemFontSize]] }];
+ return labelText;
+ }
+
+ return [[NSAttributedString alloc] initWithString:@""];
}
@end
@implementation AMPurpleRequestFieldChoice
-- (NSXMLElement*)xhtml {
- NSXMLElement *result = [super xhtml];
-
+- (NSString *)nibName
+{
+ return @"RequestFieldChoice";
+}
+
+
+- (NSView *)makeView
+{
GList *labels = purple_request_field_choice_get_labels(field);
- guint len = g_list_length(labels);
- NSInteger defaultvalue = purple_request_field_choice_get_default_value(field);
+ NSInteger defaultvalue = purple_request_field_choice_get_default_value(field);
- // Apple HIG: Don't use checkboxes for lists of more than 5 items, use a popupbutton instead
- if(len > 5) {
- NSXMLElement *popup = [NSXMLNode elementWithName:@"select"];
- [popup addAttribute:[NSXMLNode attributeWithName:@"name" stringValue:[self key]]];
- NSInteger i=0;
- GList *label;
- for(label = labels; label; label = g_list_next(label), ++i) {
- const char *labelstr = label->data;
- if(!labelstr)
- continue;
-
- NSXMLElement *option = [NSXMLNode elementWithName:@"option" stringValue:[NSString stringWithUTF8String:labelstr]];
- [option addAttribute:[NSXMLNode attributeWithName:@"value" stringValue:[NSString stringWithFormat:@"%lu",i]]];
- if(i == defaultvalue)
- [option addAttribute:[NSXMLNode attributeWithName:@"selected" stringValue:@"selected"]];
- [popup addChild:option];
- }
- [result addChild:[NSXMLNode elementWithName:@"div"
- children:[NSArray arrayWithObject:popup]
- attributes:[NSArray arrayWithObject:[NSXMLNode attributeWithName:@"class" stringValue:@"input"]]]];
- } else {
- NSInteger i=0;
- NSMutableArray *radios = [NSMutableArray array];
- GList *label;
- for(label = labels; label; label = g_list_next(label), ++i) {
- const char *labelstr = label->data;
- if(!labelstr)
- continue;
-
- NSXMLElement *radiobutton = [NSXMLNode elementWithName:@"input"];
- [radiobutton addAttribute:[NSXMLNode attributeWithName:@"type" stringValue:@"radio"]];
- [radiobutton addAttribute:[NSXMLNode attributeWithName:@"value" stringValue:[NSString stringWithFormat:@"%lu",i]]];
- [radiobutton addAttribute:[NSXMLNode attributeWithName:@"name" stringValue:[self key]]];
-
- if(i == defaultvalue)
- [radiobutton addAttribute:[NSXMLNode attributeWithName:@"checked" stringValue:@"checked"]];
-
- [radios addObject:radiobutton];
- [radios addObject:[NSXMLNode textWithStringValue:[NSString stringWithUTF8String:labelstr]]];
- }
- [result addChild:[NSXMLNode elementWithName:@"div"
- children:radios
- attributes:[NSArray arrayWithObject:[NSXMLNode attributeWithName:@"class" stringValue:@"input"]]]];
+ [view setFrame:NSMakeRect(0, 0, view.frame.size.width, height)];
+
+ [popUp removeAllItems];
+
+ for (; labels; labels = labels->next) {
+ [popUp addItemWithTitle:[NSString stringWithUTF8String:(char *)labels->data]];
}
- return result;
+ if (defaultvalue < [popUp numberOfItems]) {
+ [popUp selectItemAtIndex:defaultvalue];
+ }
+
+ return view;
}
-- (void)applyValue:(NSString*)value {
- purple_request_field_choice_set_value(field, [value intValue]);
+- (void)submit
+{
+ purple_request_field_choice_set_value(field, (int)[popUp indexOfItem:[popUp selectedItem]]);
}
@end
@implementation AMPurpleRequestFieldList
-- (NSXMLElement*)xhtml {
- NSXMLElement *result = [super xhtml];
+- (NSString *)nibName
+{
+ return @"RequestFieldList";
+}
+
+- (NSView *)makeView
+{
+ GList *items = purple_request_field_list_get_items(field);
+
+ [popUp removeAllItems];
- BOOL isMultiSelect = (purple_request_field_list_get_multi_select(field) == TRUE) ? YES : NO;
-
- NSXMLElement *list = [NSXMLNode elementWithName:@"select"];
- [list addAttribute:[NSXMLNode attributeWithName:@"name" stringValue:[self key]]];
+ NSInteger i;
- if(isMultiSelect)
- [list addAttribute:[NSXMLNode attributeWithName:@"multiple" stringValue:@"multiple"]];
-
- const GList *items = purple_request_field_list_get_items(field);
- guint len = g_list_length((GList*)items);
-
- // show all items up to 10
- [list addAttribute:[NSXMLNode attributeWithName:@"size" stringValue:[NSString stringWithFormat:@"%u",(len>10)?10:len]]];
-
- const GList *item;
- for(item = items; item; item = g_list_next(item)) {
- const char *labelstr = item->data;
- if(!labelstr)
- continue;
-
- NSXMLElement *option = [NSXMLNode elementWithName:@"option" stringValue:[NSString stringWithUTF8String:labelstr]];
- if(purple_request_field_list_is_selected(field, labelstr))
- [option addAttribute:[NSXMLNode attributeWithName:@"selected" stringValue:@"selected"]];
- [list addChild:option];
- }
- [result addChild:[NSXMLNode elementWithName:@"div"
- children:[NSArray arrayWithObject:list]
- attributes:[NSArray arrayWithObject:[NSXMLNode attributeWithName:@"class" stringValue:@"input"]]]];
-
+ for (i = 0; items; items = items->next, i++) {
+ NSString *item = [NSString stringWithUTF8String:items->data];
+ [popUp addItemWithTitle:item];
+ if (purple_request_field_list_is_selected(field, items->data)) {
+ [popUp selectItemAtIndex:i];
+ }
+ }
+
+ return view;
+}
+- (void)submit
+{
purple_request_field_list_clear_selected(field);
- return result;
+ GList *items = NULL;
+ const char *text;
+
+ text = [[[popUp selectedItem] title] UTF8String];
+ items = g_list_prepend(items, (gpointer)text);
+
+ purple_request_field_list_set_selected(field, items);
+
+ g_list_free(items);
}
-- (void)applyValue:(NSString*)value {
- purple_request_field_list_add_selected(field, [value UTF8String]);
+ at end
+
+ at implementation AMPurpleRequestFieldMultiList
+
+- (NSString *)nibName
+{
+ return @"RequestFieldMultiList";
+}
+
+- (NSView *)makeView
+{
+ GList *items = purple_request_field_list_get_items(field);
+ NSInteger i = 0;
+
+ [popDown removeAllItems];
+ [popDown addItemWithTitle:AILocalizedString(@"Select...", "Used in the request UI for popdown buttons")];
+
+ for (i = 0; items; items = items->next, i++) {
+ NSMenuItem *menuItem = [[NSMenuItem alloc] initWithTitle:[NSString stringWithUTF8String:items->data]
+ target:self
+ action:@selector(didSelect:)
+ keyEquivalent:@""];
+ if(purple_request_field_list_is_selected(field, items->data)) {
+ [menuItem setState:NSOnState];
+ }
+
+ [[popDown menu] addItem:menuItem];
+ }
+
+ return view;
+}
+
+- (IBAction)didSelect:(id)sender
+{
+ NSInteger state = [sender state];
+
+ if (state == NSOnState)
+ state = NSOffState;
+ else
+ state = NSOnState;
+
+ [sender setState:state];
+}
+
+- (void)submit
+{
+ purple_request_field_list_clear_selected(field);
+
+ BOOL skipped = FALSE;
+
+ GList *items = NULL;
+ const char *text;
+
+ for (NSMenuItem *item in [[popDown menu] itemArray]) {
+ if (!skipped) {
+ skipped = TRUE;
+ continue;
+ }
+
+ if ([item state] == NSOnState) {
+ text = [[item title] UTF8String];
+ items = g_list_prepend(items, (gpointer)text);
+ }
+ }
+
+ purple_request_field_list_set_selected(field, items);
+
+ g_list_free(items);
}
@end
@implementation AMPurpleRequestFieldLabel
-#if 0
-- (NSXMLNode*)xhtml {
- return [super xhtml];
+- (NSString *)nibName
+{
+ return @"RequestFieldLabel";
}
-#endif
+
+- (NSView *)makeView
+{
+ [[labelview textStorage] setAttributedString:self.label];
+ [labelview setFont:[NSFont systemFontOfSize:[NSFont systemFontSize]]];
+ [labelview setHorizontallyResizable:FALSE];
+ [labelview setTextContainerInset:NSMakeSize(0, 0)];
+ [labelview sizeToFit];
+
+ [view setFrame:NSMakeRect(0, 0, view.frame.size.width, height)];
+
+ return view;
+}
+
+// Do not append a :
+- (NSString *)label
+{
+
+ const char *labelstr = purple_request_field_get_label(field);
+
+ if (labelstr) {
+ NSString *labelString = [NSString stringWithUTF8String:labelstr];
+
+ return labelString;
+ }
+
+ return @"";
+}
@end
@@ -345,53 +550,6 @@
@implementation AMPurpleRequestFieldImage
-- (NSXMLElement*)xhtml {
- NSXMLElement *result = [super xhtml];
-
- //unsigned int scale_x = purple_request_field_image_get_scale_x(field);
- //unsigned int scale_y = purple_request_field_image_get_scale_y(field);
-
- //This could be base 64 encoded and embedded directly, but it seems like a heavy fix...
- NSData *data = [NSData dataWithBytes:purple_request_field_image_get_buffer(field)
- length:purple_request_field_image_get_size(field)];
-
- NSString *extension = [NSImage extensionForBitmapImageFileType:[NSImage fileTypeOfData:data]];
- if (!extension) {
- //We don't know what it is; try to make a png out of it
- NSImage *image = [[NSImage alloc] initWithData:data];
- NSData *imageTIFFData = [image TIFFRepresentation];
- NSBitmapImageRep *bitmapRep = [NSBitmapImageRep imageRepWithData:imageTIFFData];
-
- data = [bitmapRep representationUsingType:NSPNGFileType properties:nil];
- extension = @"png";
- }
-
- NSString *filename = [[[NSString stringWithFormat:@"TEMP-Image_%@",[self key]] stringByAppendingPathExtension:extension] safeFilenameString];
- NSString *imagePath = [[adium cachesPath] stringByAppendingPathComponent:filename];
-
- NSXMLElement *imageElement = [NSXMLNode elementWithName:@"image"];
-
- if ([data writeToFile:imagePath atomically:YES]) {
- [imageElement addAttribute:[NSXMLNode attributeWithName:@"src" stringValue:[[NSURL fileURLWithPath:imagePath] absoluteString]]];
- [imageElement addAttribute:[NSXMLNode attributeWithName:@"name" stringValue:[self key]]];
-
- [result addChild:[NSXMLNode elementWithName:@"div"
- children:[NSArray arrayWithObject:imageElement]
- attributes:[NSArray arrayWithObject:[NSXMLNode attributeWithName:@"class" stringValue:@"image"]]]];
- } else {
- AILogWithSignature(@"Failed to write image to %@",imagePath);
- }
-
- return result;
-}
-
-
- at end
-
-
- at interface AMPurpleRequestFieldsController ()
-- (void)loadForm:(NSXMLDocument*)doc;
-- (void)webviewWindowWillClose:(NSNotification *)notification;
@end
@implementation AMPurpleRequestFieldsController
@@ -415,152 +573,28 @@
cancelcb = _cancelcb;
userData = _userData;
- // generate XHTML
- NSXMLElement *root = [NSXMLNode elementWithName:@"html"];
- [root addNamespace:[NSXMLNode namespaceWithName:@"" stringValue:@"http://www.w3.org/1999/xhtml"]];
- NSXMLElement *head = [NSXMLNode elementWithName:@"head"];
- [root addChild:head];
-
- [head addChild:[NSXMLNode elementWithName:@"style" children:[NSArray arrayWithObject:
- [NSXMLNode textWithStringValue:
- @"body {"
- @" font-family:'Lucida Grande';"
- @" font-size: 13pt;"
- @"}"
- @"h1 {"
- @" display: none;"
- @"}"
- @"h2 {"
- @" font-size: 13pt;"
- @" font-weight: normal;"
- @"}"
- @"h3 {"
- @" font-size: 11pt;"
- @" font-weight: normal;"
- @"}"
- @"#formwrapper"
- @"{"
- @" position: fixed;"
- @" top: 0px;"
- @" left: 0;"
- @" bottom: 50px;"
- @" right: 0;"
- @" overflow: auto;"
- @"}"
- @"#form2"
- @"{"
- @" margin: 20px;"
- @" overflow: none;"
- @"}"
- @"#formtable"
- @"{"
- @" display: table;"
- @" margin: 0 auto;"
- @"}"
- @".field {"
- @" position: relative;"
- @" display: table-row;"
- @" font-size: 13pt;"
- @"}"
- @".label {"
- @" text-align: right;"
- @" display: table-cell;"
- @" width: 50%;"
- @" padding-right: .2em;"
- @" vertical-align: top;"
- @" font-size: 13pt;"
- @"}"
- @".label:after {"
- @" content: \":\";"
- @"}"
- @".input {"
- @" display: table-cell;"
- @" width: 50%;"
- @" padding-left: .2em;"
- @" vertical-align: top;"
- @"}"
- @"#cancel {"
- @" font-size: 13pt;"
- @" margin-right: 10px;"
- @"}"
- @"#submit {"
- @" font-size: 13pt;"
- @" margin-right: 20px;"
- @" margin-left: 10px;"
- @"}"
- @"#submitbuttons {"
- @" text-align: right;"
- @" position: absolute;"
- @" bottom: 0;"
- @" right: 0;"
- @" overflow: auto;"
- @" height: 45px;"
- @" width: 100%;"
- @" border-color: #000;"
- @" border-width: 1px 0 0 0;"
- @" border-style: solid;"
- @"}"
- ]] attributes:[NSArray arrayWithObject:
- [NSXMLNode attributeWithName:@"type" stringValue:@"text/css"]]]];
-
- NSXMLElement *titleelem = [NSXMLNode elementWithName:@"title" stringValue:title];
- [head addChild:titleelem];
-
- NSXMLElement *body = [NSXMLNode elementWithName:@"body"];
- [root addChild:body];
-
-
- NSXMLElement *formnode = [NSXMLNode elementWithName:@"form" children:nil attributes:[NSArray arrayWithObjects:
- [NSXMLNode attributeWithName:@"action" stringValue:@"http://www.adium.im/XMPP/form"],
- [NSXMLNode attributeWithName:@"method" stringValue:@"POST"],nil]];
- [body addChild:formnode];
+ [self showWindow:nil];
- NSXMLElement *formwrapper = [NSXMLNode elementWithName:@"div"];
- [formwrapper addAttribute:[NSXMLNode attributeWithName:@"id" stringValue:@"formwrapper"]];
- [formnode addChild:formwrapper];
- NSXMLElement *form2 = [NSXMLNode elementWithName:@"div"];
- [form2 addAttribute:[NSXMLNode attributeWithName:@"id" stringValue:@"form2"]];
- [formwrapper addChild:form2];
+ [primaryTextField setStringValue:primary ?: @""];
- formwrapper = form2;
-
- NSXMLElement *heading = [NSXMLNode elementWithName:@"h1" stringValue:title];
- [formwrapper addChild:heading];
-
- NSXMLElement *heading2 = [NSXMLNode elementWithName:@"h2" stringValue:primary];
- [formwrapper addChild:heading2];
-
- NSXMLElement *heading3 = [NSXMLNode elementWithName:@"h3" stringValue:secondary];
- [formwrapper addChild:heading3];
-
- NSXMLElement *formdiv = [NSXMLNode elementWithName:@"div"];
- [formdiv addAttribute:[NSXMLNode attributeWithName:@"id" stringValue:@"formtable"]];
- [formwrapper addChild:formdiv];
+ if (secondary && ![secondary isEqualToString:primary]) {
+ [secondaryTextField setStringValue:secondary];
+ } else {
+ [secondaryTextField setStringValue:@""];
+ }
// load field objects
- fieldobjects = [[NSMutableDictionary alloc] init];
+ fieldobjects = [[NSMutableArray alloc] init];
GList *gl = purple_request_fields_get_groups(fields);
GList *fl, *field_list;
PurpleRequestFieldGroup *group;
-
- NSXMLElement *fieldset;
More information about the commits
mailing list