adium/adium
Clone
Summary
Browse
Changes
Graph
Add a short delay to the contentAdded event, to ensure it's run after the content has been appended.
JSXtras
2013-04-16, Thijs Alkemade
30446d4b7b9f
Add a short delay to the contentAdded event, to ensure it's run after the content has been appended.
/*
* 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 "AIListThemeWindowController.h"
#import "AISCLViewPlugin.h"
#import "AITextColorPreviewView.h"
#import <AIUtilities/AIColorAdditions.h>
#import <AIUtilities/AIMenuAdditions.h>
#import <AIUtilities/AIPopUpButtonAdditions.h>
#import <Adium/AIAbstractListController.h>
#import <Adium/AIListOutlineView.h>
@interface
AIListThemeWindowController
()
-
(
void
)
configureControls
;
-
(
void
)
configureControlDimming
;
-
(
void
)
updateSliderValues
;
-
(
void
)
configureBackgroundColoring
;
-
(
NSMenu
*
)
displayImageStyleMenu
;
-
(
void
)
sheetDidEnd:
(
NSWindow
*
)
sheet
returnCode:
(
NSInteger
)
returnCode
contextInfo:
(
void
*
)
contextInfo
;
@end
@implementation
AIListThemeWindowController
-
(
void
)
showOnWindow:
(
id
)
parentWindow
{
if
(
parentWindow
)
{
[
NSApp
beginSheet
:
self
.
window
modalForWindow
:
parentWindow
modalDelegate
:
self
didEndSelector
:
@selector
(
sheetDidEnd
:
returnCode
:
contextInfo
:
)
contextInfo
:
nil
];
}
else
{
[
self
showWindow
:
nil
];
}
}
-
(
id
)
initWithName:
(
NSString
*
)
inName
notifyingTarget:
(
id
)
inTarget
{
if
((
self
=
[
super
initWithWindowNibName
:
@"ListThemeSheet"
]))
{
NSParameterAssert
(
inTarget
&&
[
inTarget
respondsToSelector
:
@selector
(
listThemeEditorWillCloseWithChanges
:
forThemeNamed
:
)]);
target
=
inTarget
;
themeName
=
[
inName
retain
];
}
return
self
;
}
-
(
void
)
dealloc
{
[
themeName
release
];
[
super
dealloc
];
}
#pragma mark Window Methods
-
(
void
)
windowDidLoad
{
// Allow alpha in our color pickers
[[
NSColorPanel
sharedColorPanel
]
setShowsAlpha
:
YES
];
[
self
configureControls
];
[
textField_themeName
setStringValue
:
(
themeName
?
themeName
:
@""
)];
}
// Called as the sheet closes, dismisses the sheet
-
(
void
)
sheetDidEnd:
(
NSWindow
*
)
sheet
returnCode:
(
NSInteger
)
returnCode
contextInfo:
(
void
*
)
contextInfo
{
[
sheet
orderOut
:
nil
];
[[
NSColorPanel
sharedColorPanel
]
close
];
// No longer allow alpha in our color pickers
[[
NSColorPanel
sharedColorPanel
]
setShowsAlpha
:
NO
];
[
self
autorelease
];
}
-
(
void
)
windowWillClose:
(
id
)
sender
{
[
super
windowWillClose
:
sender
];
[
self
autorelease
];
}
// Cancel
-
(
IBAction
)
cancel:
(
id
)
sender
{
[
target
listThemeEditorWillCloseWithChanges
:
NO
forThemeNamed
:
themeName
];
[
self
closeWindow
:
sender
];
}
-
(
IBAction
)
okay:
(
id
)
sender
{
[
target
listThemeEditorWillCloseWithChanges
:
YES
forThemeNamed
:
themeName
];
[
self
closeWindow
:
sender
];
}
#pragma mark Window Methods
-
(
void
)
configureControls
{
NSDictionary
*
prefDict
=
[
adium
.
preferenceController
preferencesForGroup
:
PREF_GROUP_LIST_THEME
];
// Colors
[
colorWell_away
setColor
:
[[
prefDict
objectForKey
:
KEY_AWAY_COLOR
]
representedColor
]];
[
colorWell_idle
setColor
:
[[
prefDict
objectForKey
:
KEY_IDLE_COLOR
]
representedColor
]];
[
colorWell_signedOff
setColor
:
[[
prefDict
objectForKey
:
KEY_SIGNED_OFF_COLOR
]
representedColor
]];
[
colorWell_signedOn
setColor
:
[[
prefDict
objectForKey
:
KEY_SIGNED_ON_COLOR
]
representedColor
]];
[
colorWell_typing
setColor
:
[[
prefDict
objectForKey
:
KEY_TYPING_COLOR
]
representedColor
]];
[
colorWell_unviewedContent
setColor
:
[[
prefDict
objectForKey
:
KEY_UNVIEWED_COLOR
]
representedColor
]];
[
colorWell_online
setColor
:
[[
prefDict
objectForKey
:
KEY_ONLINE_COLOR
]
representedColor
]];
[
colorWell_idleAndAway
setColor
:
[[
prefDict
objectForKey
:
KEY_IDLE_AWAY_COLOR
]
representedColor
]];
[
colorWell_offline
setColor
:
[[
prefDict
objectForKey
:
KEY_OFFLINE_COLOR
]
representedColor
]];
[
colorWell_awayLabel
setColor
:
[[
prefDict
objectForKey
:
KEY_LABEL_AWAY_COLOR
]
representedColor
]];
[
colorWell_idleLabel
setColor
:
[[
prefDict
objectForKey
:
KEY_LABEL_IDLE_COLOR
]
representedColor
]];
[
colorWell_signedOffLabel
setColor
:
[[
prefDict
objectForKey
:
KEY_LABEL_SIGNED_OFF_COLOR
]
representedColor
]];
[
colorWell_signedOnLabel
setColor
:
[[
prefDict
objectForKey
:
KEY_LABEL_SIGNED_ON_COLOR
]
representedColor
]];
[
colorWell_typingLabel
setColor
:
[[
prefDict
objectForKey
:
KEY_LABEL_TYPING_COLOR
]
representedColor
]];
[
colorWell_unviewedContentLabel
setColor
:
[[
prefDict
objectForKey
:
KEY_LABEL_UNVIEWED_COLOR
]
representedColor
]];
[
colorWell_onlineLabel
setColor
:
[[
prefDict
objectForKey
:
KEY_LABEL_ONLINE_COLOR
]
representedColor
]];
[
colorWell_idleAndAwayLabel
setColor
:
[[
prefDict
objectForKey
:
KEY_LABEL_IDLE_AWAY_COLOR
]
representedColor
]];
[
colorWell_offlineLabel
setColor
:
[[
prefDict
objectForKey
:
KEY_LABEL_OFFLINE_COLOR
]
representedColor
]];
[
checkBox_signedOff
setState
:
[[
prefDict
objectForKey
:
KEY_SIGNED_OFF_ENABLED
]
boolValue
]];
[
checkBox_signedOn
setState
:
[[
prefDict
objectForKey
:
KEY_SIGNED_ON_ENABLED
]
boolValue
]];
[
checkBox_away
setState
:
[[
prefDict
objectForKey
:
KEY_AWAY_ENABLED
]
boolValue
]];
[
checkBox_idle
setState
:
[[
prefDict
objectForKey
:
KEY_IDLE_ENABLED
]
boolValue
]];
[
checkBox_typing
setState
:
[[
prefDict
objectForKey
:
KEY_TYPING_ENABLED
]
boolValue
]];
[
checkBox_unviewedContent
setState
:
[[
prefDict
objectForKey
:
KEY_UNVIEWED_ENABLED
]
boolValue
]];
[
checkBox_online
setState
:
[[
prefDict
objectForKey
:
KEY_ONLINE_ENABLED
]
boolValue
]];
[
checkBox_idleAndAway
setState
:
[[
prefDict
objectForKey
:
KEY_IDLE_AWAY_ENABLED
]
boolValue
]];
[
checkBox_offline
setState
:
[[
prefDict
objectForKey
:
KEY_OFFLINE_ENABLED
]
boolValue
]];
// Groups
[
colorWell_groupText
setColor
:
[[
prefDict
objectForKey
:
KEY_LIST_THEME_GROUP_TEXT_COLOR
]
representedColor
]];
[
colorWell_groupBackground
setColor
:
[[
prefDict
objectForKey
:
KEY_LIST_THEME_GROUP_BACKGROUND
]
representedColor
]];
[
colorWell_groupBackgroundGradient
setColor
:
[[
prefDict
objectForKey
:
KEY_LIST_THEME_GROUP_BACKGROUND_GRADIENT
]
representedColor
]];
[
colorWell_groupShadow
setColor
:
[[
prefDict
objectForKey
:
KEY_LIST_THEME_GROUP_SHADOW_COLOR
]
representedColor
]];
[
checkBox_groupGradient
setState
:
[[
prefDict
objectForKey
:
KEY_LIST_THEME_GROUP_GRADIENT
]
boolValue
]];
[
checkBox_groupShadow
setState
:
[[
prefDict
objectForKey
:
KEY_LIST_THEME_GROUP_SHADOW
]
boolValue
]];
//
[
colorWell_statusText
setColor
:
[[
prefDict
objectForKey
:
KEY_LIST_THEME_CONTACT_STATUS_COLOR
]
representedColor
]];
// Background Image
[
checkBox_useBackgroundImage
setState
:
[[
prefDict
objectForKey
:
KEY_LIST_THEME_BACKGROUND_IMAGE_ENABLED
]
boolValue
]];
[
checkBox_useBackgroundImage
setToolTip
:
AILocalizedString
(
@"Background images are only applicable to normal and borderless window styles"
,
nil
)];
NSString
*
backgroundImagePath
=
[[
prefDict
objectForKey
:
KEY_LIST_THEME_BACKGROUND_IMAGE_PATH
]
lastPathComponent
];
if
(
backgroundImagePath
)
{
[
textField_backgroundImagePath
setStringValue
:
backgroundImagePath
];
}
//
[
colorWell_background
setColor
:
[[
prefDict
objectForKey
:
KEY_LIST_THEME_BACKGROUND_COLOR
]
representedColor
]];
// Not all themes have highlight colours
NSColor
*
color
=
[[
prefDict
objectForKey
:
KEY_LIST_THEME_HIGHLIGHT_COLOR
]
representedColor
];
if
(
color
)
{
[
colorWell_customHighlight
setColor
:
color
];
}
[
colorWell_grid
setColor
:
[[
prefDict
objectForKey
:
KEY_LIST_THEME_GRID_COLOR
]
representedColor
]];
[
slider_backgroundFade
setDoubleValue
:
[[
prefDict
objectForKey
:
KEY_LIST_THEME_BACKGROUND_FADE
]
doubleValue
]];
// Not all themes have the draw-custom-highlight setting
NSNumber
*
number
=
[
prefDict
objectForKey
:
KEY_LIST_THEME_HIGHLIGHT_ENABLED
];
[
checkBox_drawCustomHighlight
setState
:
number
?
[
number
boolValue
]
:
NSOffState
];
[
checkBox_drawGrid
setState
:
[[
prefDict
objectForKey
:
KEY_LIST_THEME_GRID_ENABLED
]
boolValue
]];
[
checkBox_backgroundAsStatus
setState
:
[[
prefDict
objectForKey
:
KEY_LIST_THEME_BACKGROUND_AS_STATUS
]
boolValue
]];
[
checkBox_backgroundAsEvents
setState
:
[[
prefDict
objectForKey
:
KEY_LIST_THEME_BACKGROUND_AS_EVENTS
]
boolValue
]];
[
checkBox_fadeOfflineImages
setState
:
[[
prefDict
objectForKey
:
KEY_LIST_THEME_FADE_OFFLINE_IMAGES
]
boolValue
]];
[
popUp_displayImageStyle
setMenu
:
[
self
displayImageStyleMenu
]];
[
popUp_displayImageStyle
selectItemWithTag
:
[[
prefDict
objectForKey
:
KEY_LIST_THEME_BACKGROUND_IMAGE_STYLE
]
integerValue
]];
[
self
updateSliderValues
];
[
self
configureControlDimming
];
[
self
configureBackgroundColoring
];
}
-
(
void
)
preferenceChanged:
(
id
)
sender
{
if
(
sender
==
colorWell_away
)
{
[
adium
.
preferenceController
setPreference
:
[[
sender
color
]
stringRepresentation
]
forKey
:
KEY_AWAY_COLOR
group
:
PREF_GROUP_LIST_THEME
];
[
preview_away
setNeedsDisplay
:
YES
];
}
else
if
(
sender
==
colorWell_idle
)
{
[
adium
.
preferenceController
setPreference
:
[[
sender
color
]
stringRepresentation
]
forKey
:
KEY_IDLE_COLOR
group
:
PREF_GROUP_LIST_THEME
];
[
preview_idle
setNeedsDisplay
:
YES
];
}
else
if
(
sender
==
colorWell_signedOff
)
{
[
adium
.
preferenceController
setPreference
:
[[
sender
color
]
stringRepresentation
]
forKey
:
KEY_SIGNED_OFF_COLOR
group
:
PREF_GROUP_LIST_THEME
];
[
preview_signedOff
setNeedsDisplay
:
YES
];
}
else
if
(
sender
==
colorWell_signedOn
)
{
[
adium
.
preferenceController
setPreference
:
[[
sender
color
]
stringRepresentation
]
forKey
:
KEY_SIGNED_ON_COLOR
group
:
PREF_GROUP_LIST_THEME
];
[
preview_signedOn
setNeedsDisplay
:
YES
];
}
else
if
(
sender
==
colorWell_typing
)
{
[
adium
.
preferenceController
setPreference
:
[[
sender
color
]
stringRepresentation
]
forKey
:
KEY_TYPING_COLOR
group
:
PREF_GROUP_LIST_THEME
];
[
preview_typing
setNeedsDisplay
:
YES
];
}
else
if
(
sender
==
colorWell_unviewedContent
)
{
[
adium
.
preferenceController
setPreference
:
[[
sender
color
]
stringRepresentation
]
forKey
:
KEY_UNVIEWED_COLOR
group
:
PREF_GROUP_LIST_THEME
];
[
preview_unviewedContent
setNeedsDisplay
:
YES
];
}
else
if
(
sender
==
colorWell_online
)
{
[
adium
.
preferenceController
setPreference
:
[[
sender
color
]
stringRepresentation
]
forKey
:
KEY_ONLINE_COLOR
group
:
PREF_GROUP_LIST_THEME
];
[
preview_online
setNeedsDisplay
:
YES
];
}
else
if
(
sender
==
colorWell_idleAndAway
)
{
[
adium
.
preferenceController
setPreference
:
[[
sender
color
]
stringRepresentation
]
forKey
:
KEY_IDLE_AWAY_COLOR
group
:
PREF_GROUP_LIST_THEME
];
[
preview_idleAndAway
setNeedsDisplay
:
YES
];
}
else
if
(
sender
==
colorWell_offline
)
{
[
adium
.
preferenceController
setPreference
:
[[
sender
color
]
stringRepresentation
]
forKey
:
KEY_OFFLINE_COLOR
group
:
PREF_GROUP_LIST_THEME
];
[
preview_offline
setNeedsDisplay
:
YES
];
}
else
if
(
sender
==
colorWell_signedOffLabel
)
{
[
adium
.
preferenceController
setPreference
:
[[
sender
color
]
stringRepresentation
]
forKey
:
KEY_LABEL_SIGNED_OFF_COLOR
group
:
PREF_GROUP_LIST_THEME
];
[
preview_signedOff
setNeedsDisplay
:
YES
];
}
else
if
(
sender
==
colorWell_signedOnLabel
)
{
[
adium
.
preferenceController
setPreference
:
[[
sender
color
]
stringRepresentation
]
forKey
:
KEY_LABEL_SIGNED_ON_COLOR
group
:
PREF_GROUP_LIST_THEME
];
[
preview_signedOn
setNeedsDisplay
:
YES
];
}
else
if
(
sender
==
colorWell_awayLabel
)
{
[
adium
.
preferenceController
setPreference
:
[[
sender
color
]
stringRepresentation
]
forKey
:
KEY_LABEL_AWAY_COLOR
group
:
PREF_GROUP_LIST_THEME
];
[
preview_away
setNeedsDisplay
:
YES
];
}
else
if
(
sender
==
colorWell_idleLabel
)
{
[
adium
.
preferenceController
setPreference
:
[[
sender
color
]
stringRepresentation
]
forKey
:
KEY_LABEL_IDLE_COLOR
group
:
PREF_GROUP_LIST_THEME
];
[
preview_idle
setNeedsDisplay
:
YES
];
}
else
if
(
sender
==
colorWell_typingLabel
)
{
[
adium
.
preferenceController
setPreference
:
[[
sender
color
]
stringRepresentation
]
forKey
:
KEY_LABEL_TYPING_COLOR
group
:
PREF_GROUP_LIST_THEME
];
[
preview_typing
setNeedsDisplay
:
YES
];
}
else
if
(
sender
==
colorWell_unviewedContentLabel
)
{
[
adium
.
preferenceController
setPreference
:
[[
sender
color
]
stringRepresentation
]
forKey
:
KEY_LABEL_UNVIEWED_COLOR
group
:
PREF_GROUP_LIST_THEME
];
[
preview_unviewedContent
setNeedsDisplay
:
YES
];
}
else
if
(
sender
==
colorWell_onlineLabel
)
{
[
adium
.
preferenceController
setPreference
:
[[
sender
color
]
stringRepresentation
]
forKey
:
KEY_LABEL_ONLINE_COLOR
group
:
PREF_GROUP_LIST_THEME
];
[
preview_online
setNeedsDisplay
:
YES
];
}
else
if
(
sender
==
colorWell_idleAndAwayLabel
)
{
[
adium
.
preferenceController
setPreference
:
[[
sender
color
]
stringRepresentation
]
forKey
:
KEY_LABEL_IDLE_AWAY_COLOR
group
:
PREF_GROUP_LIST_THEME
];
[
preview_idleAndAway
setNeedsDisplay
:
YES
];
}
else
if
(
sender
==
colorWell_offlineLabel
)
{
[
adium
.
preferenceController
setPreference
:
[[
sender
color
]
stringRepresentation
]
forKey
:
KEY_LABEL_OFFLINE_COLOR
group
:
PREF_GROUP_LIST_THEME
];
[
preview_offline
setNeedsDisplay
:
YES
];
}
else
if
(
sender
==
checkBox_signedOff
)
{
[
adium
.
preferenceController
setPreference
:
[
NSNumber
numberWithBool
:
[
sender
state
]]
forKey
:
KEY_SIGNED_OFF_ENABLED
group
:
PREF_GROUP_LIST_THEME
];
}
else
if
(
sender
==
checkBox_signedOn
)
{
[
adium
.
preferenceController
setPreference
:
[
NSNumber
numberWithBool
:
[
sender
state
]]
forKey
:
KEY_SIGNED_ON_ENABLED
group
:
PREF_GROUP_LIST_THEME
];
}
else
if
(
sender
==
checkBox_away
)
{
[
adium
.
preferenceController
setPreference
:
[
NSNumber
numberWithBool
:
[
sender
state
]]
forKey
:
KEY_AWAY_ENABLED
group
:
PREF_GROUP_LIST_THEME
];
}
else
if
(
sender
==
checkBox_idle
)
{
[
adium
.
preferenceController
setPreference
:
[
NSNumber
numberWithBool
:
[
sender
state
]]
forKey
:
KEY_IDLE_ENABLED
group
:
PREF_GROUP_LIST_THEME
];
}
else
if
(
sender
==
checkBox_typing
)
{
[
adium
.
preferenceController
setPreference
:
[
NSNumber
numberWithBool
:
[
sender
state
]]
forKey
:
KEY_TYPING_ENABLED
group
:
PREF_GROUP_LIST_THEME
];
}
else
if
(
sender
==
checkBox_unviewedContent
)
{
[
adium
.
preferenceController
setPreference
:
[
NSNumber
numberWithBool
:
[
sender
state
]]
forKey
:
KEY_UNVIEWED_ENABLED
group
:
PREF_GROUP_LIST_THEME
];
}
else
if
(
sender
==
checkBox_online
)
{
[
adium
.
preferenceController
setPreference
:
[
NSNumber
numberWithBool
:
[
sender
state
]]
forKey
:
KEY_ONLINE_ENABLED
group
:
PREF_GROUP_LIST_THEME
];
}
else
if
(
sender
==
checkBox_idleAndAway
)
{
[
adium
.
preferenceController
setPreference
:
[
NSNumber
numberWithBool
:
[
sender
state
]]
forKey
:
KEY_IDLE_AWAY_ENABLED
group
:
PREF_GROUP_LIST_THEME
];
}
else
if
(
sender
==
checkBox_offline
)
{
[
adium
.
preferenceController
setPreference
:
[
NSNumber
numberWithBool
:
[
sender
state
]]
forKey
:
KEY_OFFLINE_ENABLED
group
:
PREF_GROUP_LIST_THEME
];
}
else
if
(
sender
==
checkBox_useBackgroundImage
)
{
[
adium
.
preferenceController
setPreference
:
[
NSNumber
numberWithBool
:
[
sender
state
]]
forKey
:
KEY_LIST_THEME_BACKGROUND_IMAGE_ENABLED
group
:
PREF_GROUP_LIST_THEME
];
}
else
if
(
sender
==
checkBox_drawCustomHighlight
)
{
[
adium
.
preferenceController
setPreference
:
[
NSNumber
numberWithBool
:
[
sender
state
]]
forKey
:
KEY_LIST_THEME_HIGHLIGHT_ENABLED
group
:
PREF_GROUP_LIST_THEME
];
}
else
if
(
sender
==
checkBox_drawGrid
)
{
[
adium
.
preferenceController
setPreference
:
[
NSNumber
numberWithBool
:
[
sender
state
]]
forKey
:
KEY_LIST_THEME_GRID_ENABLED
group
:
PREF_GROUP_LIST_THEME
];
}
else
if
(
sender
==
colorWell_background
)
{
[
adium
.
preferenceController
setPreference
:
[[
sender
color
]
stringRepresentation
]
forKey
:
KEY_LIST_THEME_BACKGROUND_COLOR
group
:
PREF_GROUP_LIST_THEME
];
[
preview_background
setNeedsDisplay
:
YES
];
[
preview_group
setNeedsDisplay
:
YES
];
}
else
if
(
sender
==
colorWell_customHighlight
)
{
[
adium
.
preferenceController
setPreference
:
[[
sender
color
]
stringRepresentation
]
forKey
:
KEY_LIST_THEME_HIGHLIGHT_COLOR
group
:
PREF_GROUP_LIST_THEME
];
[
preview_customHighlight
setNeedsDisplay
:
YES
];
}
else
if
(
sender
==
colorWell_grid
)
{
[
adium
.
preferenceController
setPreference
:
[[
sender
color
]
stringRepresentation
]
forKey
:
KEY_LIST_THEME_GRID_COLOR
group
:
PREF_GROUP_LIST_THEME
];
[
preview_grid
setNeedsDisplay
:
YES
];
}
else
if
(
sender
==
slider_backgroundFade
)
{
[
adium
.
preferenceController
setPreference
:
[
NSNumber
numberWithDouble
:
[
sender
doubleValue
]]
forKey
:
KEY_LIST_THEME_BACKGROUND_FADE
group
:
PREF_GROUP_LIST_THEME
];
[
self
updateSliderValues
];
}
else
if
(
sender
==
colorWell_groupText
)
{
[
adium
.
preferenceController
setPreference
:
[[
sender
color
]
stringRepresentation
]
forKey
:
KEY_LIST_THEME_GROUP_TEXT_COLOR
group
:
PREF_GROUP_LIST_THEME
];
[
preview_group
setNeedsDisplay
:
YES
];
}
else
if
(
sender
==
colorWell_groupBackground
)
{
[
adium
.
preferenceController
setPreference
:
[[
sender
color
]
stringRepresentation
]
forKey
:
KEY_LIST_THEME_GROUP_BACKGROUND
group
:
PREF_GROUP_LIST_THEME
];
[
preview_group
setNeedsDisplay
:
YES
];
}
else
if
(
sender
==
colorWell_groupBackgroundGradient
)
{
[
adium
.
preferenceController
setPreference
:
[[
sender
color
]
stringRepresentation
]
forKey
:
KEY_LIST_THEME_GROUP_BACKGROUND_GRADIENT
group
:
PREF_GROUP_LIST_THEME
];
[
preview_group
setNeedsDisplay
:
YES
];
}
else
if
(
sender
==
colorWell_groupShadow
)
{
[
adium
.
preferenceController
setPreference
:
[[
sender
color
]
stringRepresentation
]
forKey
:
KEY_LIST_THEME_GROUP_SHADOW_COLOR
group
:
PREF_GROUP_LIST_THEME
];
[
preview_group
setNeedsDisplay
:
YES
];
}
else
if
(
sender
==
checkBox_backgroundAsStatus
)
{
[
adium
.
preferenceController
setPreference
:
[
NSNumber
numberWithBool
:
[
sender
state
]]
forKey
:
KEY_LIST_THEME_BACKGROUND_AS_STATUS
group
:
PREF_GROUP_LIST_THEME
];
[
self
configureBackgroundColoring
];
}
else
if
(
sender
==
checkBox_backgroundAsEvents
)
{
[
adium
.
preferenceController
setPreference
:
[
NSNumber
numberWithBool
:
[
sender
state
]]
forKey
:
KEY_LIST_THEME_BACKGROUND_AS_EVENTS
group
:
PREF_GROUP_LIST_THEME
];
[
self
configureBackgroundColoring
];
}
else
if
(
sender
==
colorWell_statusText
)
{
[
adium
.
preferenceController
setPreference
:
[[
sender
color
]
stringRepresentation
]
forKey
:
KEY_LIST_THEME_CONTACT_STATUS_COLOR
group
:
PREF_GROUP_LIST_THEME
];
}
else
if
(
sender
==
checkBox_fadeOfflineImages
)
{
[
adium
.
preferenceController
setPreference
:
[
NSNumber
numberWithBool
:
[
sender
state
]]
forKey
:
KEY_LIST_THEME_FADE_OFFLINE_IMAGES
group
:
PREF_GROUP_LIST_THEME
];
}
else
if
(
sender
==
checkBox_groupGradient
)
{
[
adium
.
preferenceController
setPreference
:
[
NSNumber
numberWithBool
:
[
sender
state
]]
forKey
:
KEY_LIST_THEME_GROUP_GRADIENT
group
:
PREF_GROUP_LIST_THEME
];
[
preview_group
setNeedsDisplay
:
YES
];
}
else
if
(
sender
==
checkBox_groupShadow
)
{
[
adium
.
preferenceController
setPreference
:
[
NSNumber
numberWithBool
:
[
sender
state
]]
forKey
:
KEY_LIST_THEME_GROUP_SHADOW
group
:
PREF_GROUP_LIST_THEME
];
[
preview_group
setNeedsDisplay
:
YES
];
}
else
if
(
sender
==
popUp_displayImageStyle
)
{
[
adium
.
preferenceController
setPreference
:
[
NSNumber
numberWithInteger
:
[[
sender
selectedItem
]
tag
]]
forKey
:
KEY_LIST_THEME_BACKGROUND_IMAGE_STYLE
group
:
PREF_GROUP_LIST_THEME
];
}
[
self
configureControlDimming
];
}
// Prompt for an image to use
-
(
IBAction
)
selectBackgroundImage:
(
id
)
sender
{
NSOpenPanel
*
openPanel
=
[
NSOpenPanel
openPanel
];
[
openPanel
setTitle
:
@"Background Image"
];
[
openPanel
setAllowedFileTypes
:
[
NSImage
imageFileTypes
]];
if
([
openPanel
runModal
]
==
NSOKButton
)
{
NSString
*
filename
=
[[
openPanel
URL
]
path
];
[
adium
.
preferenceController
setPreference
:
filename
forKey
:
KEY_LIST_THEME_BACKGROUND_IMAGE_PATH
group
:
PREF_GROUP_LIST_THEME
];
if
(
filename
)
{
[
textField_backgroundImagePath
setStringValue
:
filename
];
}
}
}
-
(
void
)
updateSliderValues
{
[
textField_backgroundFade
setStringValue
:
[
NSString
stringWithFormat
:
@"%ld%%"
,
(
NSInteger
)([
slider_backgroundFade
doubleValue
]
*
100.0
)]];
}
// Configure control dimming
-
(
void
)
configureControlDimming
{
NSInteger
backStatus
=
[
checkBox_backgroundAsStatus
state
];
NSInteger
backEvent
=
[
checkBox_backgroundAsEvents
state
];
// Enable/Disable status color wells
[
colorWell_away
setEnabled
:
[
checkBox_away
state
]];
[
colorWell_awayLabel
setEnabled
:
([
checkBox_away
state
]
&&
backStatus
)];
[
colorWell_idle
setEnabled
:
[
checkBox_idle
state
]];
[
colorWell_idleLabel
setEnabled
:
([
checkBox_idle
state
]
&&
backStatus
)];
[
colorWell_online
setEnabled
:
[
checkBox_online
state
]];
[
colorWell_onlineLabel
setEnabled
:
([
checkBox_online
state
]
&&
backStatus
)];
[
colorWell_idleAndAway
setEnabled
:
[
checkBox_idleAndAway
state
]];
[
colorWell_idleAndAwayLabel
setEnabled
:
([
checkBox_idleAndAway
state
]
&&
backStatus
)];
[
colorWell_offline
setEnabled
:
[
checkBox_offline
state
]];
[
colorWell_offlineLabel
setEnabled
:
([
checkBox_offline
state
]
&&
backStatus
)];
// Enable/Disable event color wells
[
colorWell_signedOff
setEnabled
:
[
checkBox_signedOff
state
]];
[
colorWell_signedOffLabel
setEnabled
:
([
checkBox_signedOff
state
]
&&
backEvent
)];
[
colorWell_signedOn
setEnabled
:
[
checkBox_signedOn
state
]];
[
colorWell_signedOnLabel
setEnabled
:
([
checkBox_signedOn
state
]
&&
backEvent
)];
[
colorWell_typing
setEnabled
:
[
checkBox_typing
state
]];
[
colorWell_typingLabel
setEnabled
:
([
checkBox_typing
state
]
&&
backEvent
)];
[
colorWell_unviewedContent
setEnabled
:
[
checkBox_unviewedContent
state
]];
[
colorWell_unviewedContentLabel
setEnabled
:
([
checkBox_unviewedContent
state
]
&&
backEvent
)];
// Background image
[
button_setBackgroundImage
setEnabled
:
[
checkBox_useBackgroundImage
state
]];
[
textField_backgroundImagePath
setEnabled
:
[
checkBox_useBackgroundImage
state
]];
[
popUp_displayImageStyle
setEnabled
:
[
checkBox_useBackgroundImage
state
]];
}
// Update the previews for our background coloring toggles
-
(
void
)
configureBackgroundColoring
{
NSColor
*
color
;
// Status
color
=
([
checkBox_backgroundAsStatus
state
]
?
nil
:
[
colorWell_background
color
]);
[
preview_away
setBackColorOverride
:
color
];
[
preview_idle
setBackColorOverride
:
color
];
[
preview_online
setBackColorOverride
:
color
];
[
preview_idleAndAway
setBackColorOverride
:
color
];
[
preview_offline
setBackColorOverride
:
color
];
// Events
color
=
([
checkBox_backgroundAsEvents
state
]
?
nil
:
[
colorWell_background
color
]);
[
preview_signedOff
setBackColorOverride
:
color
];
[
preview_signedOn
setBackColorOverride
:
color
];
[
preview_typing
setBackColorOverride
:
color
];
[
preview_unviewedContent
setBackColorOverride
:
color
];
// Redisplay
[
preview_away
setNeedsDisplay
:
YES
];
[
preview_idle
setNeedsDisplay
:
YES
];
[
preview_online
setNeedsDisplay
:
YES
];
[
preview_idleAndAway
setNeedsDisplay
:
YES
];
[
preview_offline
setNeedsDisplay
:
YES
];
[
preview_signedOff
setNeedsDisplay
:
YES
];
[
preview_signedOn
setNeedsDisplay
:
YES
];
[
preview_typing
setNeedsDisplay
:
YES
];
[
preview_unviewedContent
setNeedsDisplay
:
YES
];
}
-
(
NSMenu
*
)
displayImageStyleMenu
{
NSMenu
*
displayImageStyleMenu
=
[[[
NSMenu
allocWithZone
:
[
NSMenu
menuZone
]]
init
]
autorelease
];
NSMenuItem
*
menuItem
;
menuItem
=
[[[
NSMenuItem
allocWithZone
:
[
NSMenu
menuZone
]]
initWithTitle
:
AILocalizedString
(
@"Normal"
,
nil
)
target
:
nil
action
:
nil
keyEquivalent
:
@""
]
autorelease
];
[
menuItem
setTag
:
AINormalBackground
];
[
displayImageStyleMenu
addItem
:
menuItem
];
menuItem
=
[[[
NSMenuItem
allocWithZone
:
[
NSMenu
menuZone
]]
initWithTitle
:
AILocalizedString
(
@"Tile"
,
nil
)
target
:
nil
action
:
nil
keyEquivalent
:
@""
]
autorelease
];
[
menuItem
setTag
:
AITileBackground
];
[
displayImageStyleMenu
addItem
:
menuItem
];
menuItem
=
[[[
NSMenuItem
allocWithZone
:
[
NSMenu
menuZone
]]
initWithTitle
:
AILocalizedString
(
@"Fill"
,
nil
)
target
:
nil
action
:
nil
keyEquivalent
:
@""
]
autorelease
];
[
menuItem
setTag
:
AIFillProportionatelyBackground
];
[
displayImageStyleMenu
addItem
:
menuItem
];
menuItem
=
[[[
NSMenuItem
allocWithZone
:
[
NSMenu
menuZone
]]
initWithTitle
:
AILocalizedString
(
@"Stretch to fill"
,
nil
)
target
:
nil
action
:
nil
keyEquivalent
:
@""
]
autorelease
];
[
menuItem
setTag
:
AIFillStretchBackground
];
[
displayImageStyleMenu
addItem
:
menuItem
];
return
displayImageStyleMenu
;
}
@end