adium/adium
Clone
Summary
Browse
Changes
Graph
Fix libjson-glib manually.
adium-1.5.10.2
2016-03-09, Thijs Alkemade
a23057ce854d
Fix libjson-glib manually.
/*
* Adium is the legal property of its developers, whose names are listed in the copyright file included
* with this source distribution.
*
* This program is free software; you can redistribute it and/or modify it under the terms of the GNU
* General Public License as published by the Free Software Foundation; either version 2 of the License,
* or (at your option) any later version.
*
* This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even
* the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General
* Public License for more details.
*
* You should have received a copy of the GNU General Public License along with this program; if not,
* write to the Free Software Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
*/
#import "ESPurpleRequestWindowController.h"
#import <AdiumLibpurple/SLPurpleCocoaAdapter.h>
#define MULTILINE_WINDOW_NIB @"PurpleMultilineRequestWindow"
#define SINGLELINE_WINDOW_NIB @"PurpleSinglelineRequestWindow"
@interface
ESPurpleRequestWindowController
()
-
(
void
)
showWindowWithDict
:
(
NSDictionary
*
)
infoDict
multiline
:
(
BOOL
)
multiline
;
-
(
NSDictionary
*
)
translatedInfoDict:
(
NSDictionary
*
)
inDict
;
@end
@implementation
ESPurpleRequestWindowController
+
(
ESPurpleRequestWindowController
*
)
showInputWindowWithDict:
(
NSDictionary
*
)
infoDict
{
ESPurpleRequestWindowController
*
requestWindowController
;
BOOL
multiline
=
[[
infoDict
objectForKey
:
@"Multiline"
]
boolValue
];
if
((
requestWindowController
=
[[
self
alloc
]
initWithWindowNibName
:
(
multiline
?
MULTILINE_WINDOW_NIB
:
SINGLELINE_WINDOW_NIB
)
withDict
:
infoDict
multiline
:
multiline
]))
{
[
requestWindowController
showWindow
:
nil
];
[[
requestWindowController
window
]
makeKeyAndOrderFront
:
nil
];
}
return
requestWindowController
;
}
//Init
-
(
id
)
initWithWindowNibName:
(
NSString
*
)
windowNibName
withDict:
(
NSDictionary
*
)
infoDict
multiline:
(
BOOL
)
multiline
{
if
((
self
=
[
super
initWithWindowNibName
:
windowNibName
]))
{
[
self
showWindowWithDict
:
[
self
translatedInfoDict
:
infoDict
]
multiline
:
multiline
];
}
return
self
;
}
-
(
void
)
showWindowWithDict:
(
NSDictionary
*
)
infoDict
multiline:
(
BOOL
)
multiline
{
NSRect
windowFrame
;
NSWindow
*
window
;
NSInteger
heightChange
=
0
;
//Ensure the window is loaded
window
=
[
self
window
];
windowFrame
=
[
window
frame
];
//If masked, replace our textField_input with a secure one
if
([[
infoDict
objectForKey
:
@"Masked"
]
boolValue
])
{
NSRect
inputFrame
=
[
textField_input
frame
];
NSSecureTextField
*
secureTextField
=
[[[
NSSecureTextField
alloc
]
initWithFrame
:
inputFrame
]
autorelease
];
[[
textField_input
superview
]
addSubview
:
secureTextField
];
[
secureTextField
setNeedsDisplay
:
YES
];
[
textField_input
removeFromSuperview
];
textField_input
=
secureTextField
;
}
//Buttons
{
//Use the supplied OK text, then shift the button left so that the right side remains in the old location in the window
NSString
*
okText
=
[
infoDict
objectForKey
:
@"OK Text"
];
[
button_okay
setTitle
:
(
okText
?
okText
:
AILocalizedString
(
@"OK"
,
nil
))];
//Use the supplied Cancel text, then shift the button left
NSString
*
cancelText
=
[
infoDict
objectForKey
:
@"Cancel Text"
];
[
button_cancel
setTitle
:
(
cancelText
?
cancelText
:
AILocalizedString
(
@"Cancel"
,
nil
))];
}
//Window Title
{
NSString
*
title
=
[
infoDict
objectForKey
:
@"Title"
];
[[
self
window
]
setTitle
:
(
title
?
title
:
@""
)];
}
//Primary text field
{
NSScrollView
*
scrollView_primary
=
[
textView_primary
enclosingScrollView
];
NSString
*
primary
=
[
infoDict
objectForKey
:
@"Primary Text"
];
NSRect
primaryFrame
=
[
scrollView_primary
frame
];
[
textView_primary
setVerticallyResizable
:
YES
];
[
textView_primary
setHorizontallyResizable
:
NO
];
[
textView_primary
setDrawsBackground
:
NO
];
[
textView_primary
setTextContainerInset
:
NSZeroSize
];
[
scrollView_primary
setDrawsBackground
:
NO
];
[
textView_primary
setString
:
(
primary
?
primary
:
@""
)];
//Resize the window frame to fit the error title
[
textView_primary
sizeToFit
];
heightChange
=
[
textView_primary
frame
].
size
.
height
-
[
scrollView_primary
documentVisibleRect
].
size
.
height
;
primaryFrame
.
size
.
height
+=
heightChange
;
primaryFrame
.
origin
.
y
-=
heightChange
;
[
scrollView_primary
setFrame
:
primaryFrame
];
windowFrame
.
size
.
height
+=
heightChange
;
windowFrame
.
origin
.
y
-=
heightChange
;
//Resize the window to fit the message
//[window setFrame:windowFrame display:YES animate:NO];
}
//Secondary text field
{
NSString
*
secondary
=
[
infoDict
objectForKey
:
@"Secondary Text"
];
NSRect
originalFrame
=
[
scrollView_secondary
frame
];
originalFrame
.
origin
.
y
-=
heightChange
;
[
scrollView_secondary
setFrame
:
originalFrame
];
[
textView_secondary
setVerticallyResizable
:
YES
];
[
textView_secondary
setHorizontallyResizable
:
NO
];
[
textView_secondary
setDrawsBackground
:
NO
];
[
textView_secondary
setTextContainerInset
:
NSZeroSize
];
[
scrollView_secondary
setDrawsBackground
:
NO
];
[
textView_secondary
setString
:
(
secondary
?
secondary
:
@""
)];
//Resize the window frame to fit the error title
[
textView_secondary
sizeToFit
];
heightChange
=
[
textView_secondary
frame
].
size
.
height
-
[
scrollView_secondary
documentVisibleRect
].
size
.
height
;
windowFrame
.
size
.
height
+=
heightChange
;
windowFrame
.
origin
.
y
-=
heightChange
;
}
//Resize the window to fit the message
[
window
setFrame
:
windowFrame
display
:
YES
animate
:
NO
];
//Default value
{
NSString
*
defaultValue
=
[
infoDict
objectForKey
:
@"Default Value"
];
[
textField_input
setStringValue
:
(
defaultValue
?
defaultValue
:
@""
)];
[
textField_input
selectText
:
nil
];
}
okayCallbackValue
=
[[
infoDict
objectForKey
:
@"OK Callback"
]
retain
];
cancelCallbackValue
=
[[
infoDict
objectForKey
:
@"Cancel Callback"
]
retain
];
userDataValue
=
[[
infoDict
objectForKey
:
@"userData"
]
retain
];
[
self
showWindow
:
nil
];
}
-
(
void
)
doRequestInputCbValue:
(
NSValue
*
)
inCallBackValue
withUserDataValue
:(
NSValue
*
)
inUserDataValue
inputString
:(
NSString
*
)
inString
{
PurpleRequestInputCb
callBack
=
[
inCallBackValue
pointerValue
];
if
(
callBack
)
{
callBack
([
inUserDataValue
pointerValue
],[
inString
UTF8String
]);
}
}
-
(
IBAction
)
pressedButton:
(
id
)
sender
{
if
(
sender
==
button_okay
)
{
[
self
doRequestInputCbValue
:
okayCallbackValue
withUserDataValue
:
userDataValue
inputString
:[[[
textField_input
stringValue
]
copy
]
autorelease
]];
[
cancelCallbackValue
release
];
cancelCallbackValue
=
nil
;
[[
self
window
]
close
];
}
else
if
(
sender
==
button_cancel
)
{
[[
self
window
]
performClose
:
nil
];
}
}
-
(
void
)
dealloc
{
[
okayCallbackValue
release
];
okayCallbackValue
=
nil
;
[
cancelCallbackValue
release
];
cancelCallbackValue
=
nil
;
[
userDataValue
release
];
userDataValue
=
nil
;
[
super
dealloc
];
}
-
(
void
)
doWindowWillClose
{
if
(
cancelCallbackValue
)
{
[
self
doRequestInputCbValue
:
cancelCallbackValue
withUserDataValue
:
userDataValue
inputString
:[[[
textField_input
stringValue
]
copy
]
autorelease
]];
}
}
/*!
* @brief Translate the strings in the info dictionary
*
* The following declarations let genstrings know about what translations we want
* AILocalizedString(@"Set your friendly name.","Title for the MSN display name setting dialogue box")
* AILocalizedString(@"This is the name that other MSN buddies will see you as.", "Description for the MSN display name setting dialogue.")
* AILocalizedString(@"Set your home phone number.", "Title for the dialogue prompting for your home phone number")
* AILocalizedString(@"Set your work phone number.", "Title for the dialogue prompting for your work phone number")
* AILocalizedString(@"Set your mobile phone number.", "Title for the dialogue prompting for your mobile phone number")
*/
-
(
NSDictionary
*
)
translatedInfoDict:
(
NSDictionary
*
)
inDict
{
NSMutableDictionary
*
translatedDict
=
[
inDict
mutableCopy
];
NSString
*
primary
=
[
inDict
objectForKey
:
@"Primary Text"
];
NSString
*
secondary
=
[
inDict
objectForKey
:
@"Secondary Text"
];
NSString
*
okText
=
[
inDict
objectForKey
:
@"OK Text"
];
NSString
*
cancelText
=
[
inDict
objectForKey
:
@"Cancel Text"
];
NSBundle
*
thisBundle
=
[
NSBundle
bundleForClass
:
[
self
class
]];
//Replace each string with a translated version if possible
[
translatedDict
setObject
:
[
thisBundle
localizedStringForKey
:
primary
value
:
primary
table
:
nil
]
forKey
:
@"Primary Text"
];
[
translatedDict
setObject
:
[
thisBundle
localizedStringForKey
:
secondary
value
:
secondary
table
:
nil
]
forKey
:
@"Secondary Text"
];
[
translatedDict
setObject
:
[
thisBundle
localizedStringForKey
:
okText
value
:
okText
table
:
nil
]
forKey
:
@"OK Text"
];
[
translatedDict
setObject
:
[
thisBundle
localizedStringForKey
:
cancelText
value
:
cancelText
table
:
nil
]
forKey
:
@"Cancel Text"
];
return
[
translatedDict
autorelease
];
}
@end