Index: lams_common/src/flash/org/lamsfoundation/lams/common/style/ThemeManager.as =================================================================== diff -u -r8d4ee1f2a11e764d400d8103e4bef7daef1fce0b -rc009c15523cd89ddd42c34a98716593970069742 --- lams_common/src/flash/org/lamsfoundation/lams/common/style/ThemeManager.as (.../ThemeManager.as) (revision 8d4ee1f2a11e764d400d8103e4bef7daef1fce0b) +++ lams_common/src/flash/org/lamsfoundation/lams/common/style/ThemeManager.as (.../ThemeManager.as) (revision c009c15523cd89ddd42c34a98716593970069742) @@ -38,163 +38,313 @@ public var addEventListener:Function; public var removeEventListener:Function; - //Stores themes for the application - private var themes:Hashtable; - private var _selectedTheme:String; + //The current theme + private var _currentThemeName:String; + private var _theme:Theme; + //Constructor private function ThemeManager() { Debugger.log('constructor',Debugger.GEN,'constructor','org.lamsfoundation.lams.ThemeManager'); //Set up this class to use the Flash event delegation model EventDispatcher.initialize(this); - - //Create and populate themes array - themes = new Hashtable('Themes'); } /** * Load themes from the Server */ - public function loadThemes(){ - + public function loadTheme(theme:String){ //TODO DI 03/05/05 Stub for now but should query server to access themes - //Base style object for 'default' theme - var baseStyleObj = new mx.styles.CSSStyleDeclaration(); - baseStyleObj.setStyle('color', 0x333648); - baseStyleObj.setStyle('themeColor', 0x266DEE); - baseStyleObj.setStyle('borderStyle', 'inset'); + //Set the selected theme to the default theme initially + _currentThemeName = theme; + //Cookie or server? + //if(CookieMonster.cookieExists('dictionary.'+language)) { + //openFromDisk(theme); + //}else { + openFromServer(theme); + //} + } + + /** + * Opens Theme from server + */ + public function openFromServer(theme) { + //TODO DI 31/05/05 Stub for now until server holds theme data + //when server does implement this pseudo-code will be: + //comms.getRequest(url,callback) + //this will return a structure that will be passed into createFromData() + createThemeFromCode(theme); + } + + + /** + * TODO: THIS IS ONLY USED FOR TESTING WHILST SERVER DOES NOT SUPPORT STRUCTURE + * REMOVE WHEN NO LONGER REQUIRED + */ + public function createThemeFromCode(theme:String) { + switch (theme) { + case 'default' : + //Base style object for 'default' theme + var baseStyleObj = new mx.styles.CSSStyleDeclaration(); + baseStyleObj.setStyle('color', 0x333648); + baseStyleObj.setStyle('themeColor', 0x266DEE); + baseStyleObj.setStyle('borderStyle', 'inset'); + + //Create default theme + _theme = new Theme('default',baseStyleObj); - //Create default theme - var defaultTheme = new Theme('default',baseStyleObj); - - //----BUTTON------------------------------------------------ - //Style object - var buttonSO = new mx.styles.CSSStyleDeclaration(); - buttonSO.setStyle('fontFamily', '_sans'); - buttonSO.setStyle('fontSize', 10); - buttonSO.setStyle('color', 0x333648); - buttonSO.setStyle('themeColor', 0x266DEE); - buttonSO.setStyle('emphasizedStyleDeclaration', 0x266DEE); + //----BUTTON------------------------------------------------ + //Style object + var buttonSO = new mx.styles.CSSStyleDeclaration(); + buttonSO.setStyle('fontFamily', '_sans'); + buttonSO.setStyle('fontSize', 10); + buttonSO.setStyle('color', 0x333648); + buttonSO.setStyle('themeColor', 0x266DEE); + buttonSO.setStyle('emphasizedStyleDeclaration', 0x266DEE); + + //Visual Element + var buttonVisualElement = new VisualElement('button',buttonSO); + //add visual element to the default theme + _theme.addVisualElement(buttonVisualElement); + //---------------------------------------------------------- - //Visual Element - var buttonVisualElement = new VisualElement('button',buttonSO); - //add visual element to the default theme - defaultTheme.addVisualElement(buttonVisualElement); - //---------------------------------------------------------- - - //----LABEL------------------------------------------------- - //Style object - var labelSO = new mx.styles.CSSStyleDeclaration(); - labelSO.setStyle('fontFamily', '_sans'); - labelSO.setStyle('fontSize', 14); - labelSO.setStyle('color', 0x333648); - //Visual Element - var labelVisualElement = new VisualElement('label',labelSO); - //add visual element to the default theme - defaultTheme.addVisualElement(labelVisualElement); - //-------------------------------------------------------- + //----LABEL------------------------------------------------- + //Style object + var labelSO = new mx.styles.CSSStyleDeclaration(); + labelSO.setStyle('fontFamily', '_sans'); + labelSO.setStyle('fontSize', 14); + labelSO.setStyle('color', 0x333648); + //Visual Element + var labelVisualElement = new VisualElement('label',labelSO); + //add visual element to the default theme + _theme.addVisualElement(labelVisualElement); + //-------------------------------------------------------- + + //----LFWINDOW-------------------------------------------- + //Style object + var LFWindowSO = new mx.styles.CSSStyleDeclaration(); + LFWindowSO.setStyle('fontFamily', '_sans'); + LFWindowSO.setStyle('fontSize', 14); + LFWindowSO.setStyle('color', 0x333648); + LFWindowSO.setStyle('themeColor', 0x266DEE); + LFWindowSO.setStyle('borderStyle', 'inset'); + //Visual Element + var LFWindowVisualElement = new VisualElement('LFWindow',LFWindowSO); + //add visual element to the default theme + _theme.addVisualElement(LFWindowVisualElement); + //----------------------------------------------------- - //----LFWINDOW-------------------------------------------- - //Style object - var LFWindowSO = new mx.styles.CSSStyleDeclaration(); - LFWindowSO.setStyle('fontFamily', '_sans'); - LFWindowSO.setStyle('fontSize', 14); - LFWindowSO.setStyle('color', 0x333648); - LFWindowSO.setStyle('themeColor', 0x266DEE); - LFWindowSO.setStyle('borderStyle', 'inset'); - //Visual Element - var LFWindowVisualElement = new VisualElement('LFWindow',LFWindowSO); - //add visual element to the default theme - defaultTheme.addVisualElement(LFWindowVisualElement); - //----------------------------------------------------- - - //----TREE VIEW --------------------------------------- - //Style object - var treeviewSO = new mx.styles.CSSStyleDeclaration(); - treeviewSO.setStyle('fontFamily', '_sans'); - treeviewSO.setStyle('fontSize', 14); - treeviewSO.setStyle('color', 0x333648); - treeviewSO.setStyle('themeColor', 0x266DEE); - //treeviewSO.setStyle('rollOverColor', 0xC4C7D5); - treeviewSO.setStyle('openEasing', 'Elastic'); - //Visual Element - var treeviewVisualElement = new VisualElement('treeview',treeviewSO); - //add visual element to the default theme - defaultTheme.addVisualElement(treeviewVisualElement); - //------------------------------------------------------ + //----TREE VIEW --------------------------------------- + //Style object + var treeviewSO = new mx.styles.CSSStyleDeclaration(); + treeviewSO.setStyle('fontFamily', '_sans'); + treeviewSO.setStyle('fontSize', 14); + treeviewSO.setStyle('color', 0x333648); + treeviewSO.setStyle('themeColor', 0x266DEE); + //treeviewSO.setStyle('rollOverColor', 0xC4C7D5); + treeviewSO.setStyle('openEasing', 'Elastic'); + //Visual Element + var treeviewVisualElement = new VisualElement('treeview',treeviewSO); + //add visual element to the default theme + _theme.addVisualElement(treeviewVisualElement); + //------------------------------------------------------ + + //----DATA GRID------------------------------------------ + //Style object + var datagridSO = new mx.styles.CSSStyleDeclaration(); + datagridSO.setStyle('fontFamily', '_sans'); + datagridSO.setStyle('fontSize', 14); + datagridSO.setStyle('color', 0x333648); + datagridSO.setStyle('themeColor', 0x266DEE); + //datagridSO.setStyle('rollOverColor', 0xC4C7D5); + datagridSO.setStyle('openEasing', 'Elastic'); + //Visual Element + var datagridVisualElement = new VisualElement('datagrid',datagridSO); + //add visual element to the default theme + _theme.addVisualElement(datagridVisualElement); + //------------------------------------------------------ - //----DATA GRID------------------------------------------ - //Style object - var datagridSO = new mx.styles.CSSStyleDeclaration(); - datagridSO.setStyle('fontFamily', '_sans'); - datagridSO.setStyle('fontSize', 14); - datagridSO.setStyle('color', 0x333648); - datagridSO.setStyle('themeColor', 0x266DEE); - //datagridSO.setStyle('rollOverColor', 0xC4C7D5); - datagridSO.setStyle('openEasing', 'Elastic'); - //Visual Element - var datagridVisualElement = new VisualElement('datagrid',datagridSO); - //add visual element to the default theme - defaultTheme.addVisualElement(datagridVisualElement); - //------------------------------------------------------ - - - //----COMBO------------------------------------------ - //Style object - var comboSO = new mx.styles.CSSStyleDeclaration(); - comboSO.setStyle('fontFamily', '_sans'); - comboSO.setStyle('fontSize', 14); - comboSO.setStyle('color', 0x333648); - comboSO.setStyle('themeColor', 0x266DEE); - comboSO.setStyle('openEasing', Elastic.easeOut); - //Visual Element - var comboVisualElement = new VisualElement('combo',comboSO); - //add visual element to the default theme - defaultTheme.addVisualElement(comboVisualElement); - //------------------------------------------------------ - - //----LF MENU------------------------------------------- - //Style object - var lfMenuSO = new mx.styles.CSSStyleDeclaration(); - lfMenuSO.setStyle('fontFamily', '_sans'); - lfMenuSO.setStyle('fontSize', 14); - lfMenuSO.setStyle('color', 0x333648); - lfMenuSO.setStyle('themeColor', 0x266DEE); - lfMenuSO.setStyle('openEasing', Elastic.easeOut); - //Visual Element - var lfMenuVisualElement = new VisualElement('LFMenuBar',lfMenuSO); - //add visual element to the default theme - defaultTheme.addVisualElement(lfMenuVisualElement); - //------------------------------------------------------ - - //----LFBUTTON---------------------------------------------- - //NOTE:This style is used in conjunction with LFButtonSkin class. For usage, see common.style.LFButtonSkin.as - //Style object - var LFButtonSO = new mx.styles.CSSStyleDeclaration(); - LFButtonSO.setStyle('fontFamily', 'Tahoma'); - LFButtonSO.setStyle('fontSize', 10); - LFButtonSO.setStyle('color', 0xff0000); - LFButtonSO.setStyle('themeColor', 0xff0000); - LFButtonSO.setStyle('borderStyle', 'outset'); - //Custom LAMS styles - LFButtonSO.setStyle('up', 0xCCCCCC); - LFButtonSO.setStyle('over', 0xFAF270); - LFButtonSO.setStyle('down', 0xccff3c); - //Visual Element - var LFButtonVisualElement = new VisualElement('LFButton',LFButtonSO); - //add visual element to the default theme - defaultTheme.addVisualElement(LFButtonVisualElement); - //---------------------------------------------------------- - - - //Add the default Theme to the themes - themes.put(defaultTheme.name,defaultTheme); - //Set the selected theme to the default theme initially - _selectedTheme = 'default'; + //----COMBO------------------------------------------ + //Style object + var comboSO = new mx.styles.CSSStyleDeclaration(); + comboSO.setStyle('fontFamily', '_sans'); + comboSO.setStyle('fontSize', 14); + comboSO.setStyle('color', 0x333648); + comboSO.setStyle('themeColor', 0x266DEE); + comboSO.setStyle('openEasing', Elastic.easeOut); + //Visual Element + var comboVisualElement = new VisualElement('combo',comboSO); + //add visual element to the default theme + _theme.addVisualElement(comboVisualElement); + //------------------------------------------------------ + //----LF MENU------------------------------------------- + //Style object + var lfMenuSO = new mx.styles.CSSStyleDeclaration(); + lfMenuSO.setStyle('fontFamily', '_sans'); + lfMenuSO.setStyle('fontSize', 14); + lfMenuSO.setStyle('color', 0x333648); + lfMenuSO.setStyle('themeColor', 0x266DEE); + lfMenuSO.setStyle('openEasing', Elastic.easeOut); + //Visual Element + var lfMenuVisualElement = new VisualElement('LFMenuBar',lfMenuSO); + //add visual element to the default theme + _theme.addVisualElement(lfMenuVisualElement); + //------------------------------------------------------ + //----LFBUTTON---------------------------------------------- + //NOTE:This style is used in conjunction with LFButtonSkin class. For usage, see common.style.LFButtonSkin.as + //Style object + /* + var LFButtonSO = new mx.styles.CSSStyleDeclaration(); + LFButtonSO.setStyle('fontFamily', 'Tahoma'); + LFButtonSO.setStyle('fontSize', 10); + LFButtonSO.setStyle('color', 0xff0000); + LFButtonSO.setStyle('themeColor', 0xff0000); + LFButtonSO.setStyle('borderStyle', 'outset'); + //Custom LAMS styles + LFButtonSO.setStyle('up', 0xCCCCCC); + LFButtonSO.setStyle('over', 0xFAF270); + LFButtonSO.setStyle('down', 0xccff3c); + //Visual Element + var LFButtonVisualElement = new VisualElement('LFButton',LFButtonSO); + //add visual element to the default theme + _theme.addVisualElement(LFButtonVisualElement); + */ + //---------------------------------------------------------- + break; + case 'lime' : + //Base style object for 'default' theme + var baseStyleObj = new mx.styles.CSSStyleDeclaration(); + baseStyleObj.setStyle('color', 0x333648); + baseStyleObj.setStyle('themeColor', 0xBFFFBF); + baseStyleObj.setStyle('borderStyle', 'inset'); + + //Create default theme + _theme = new Theme('lime',baseStyleObj); + + //----BUTTON------------------------------------------------ + //Style object + var buttonSO = new mx.styles.CSSStyleDeclaration(); + buttonSO.setStyle('fontFamily', '_sans'); + buttonSO.setStyle('fontSize', 10); + buttonSO.setStyle('color', 0x333648); + buttonSO.setStyle('themeColor', 0xBFFFBF); + buttonSO.setStyle('emphasizedStyleDeclaration', 0x266DEE); + + //Visual Element + var buttonVisualElement = new VisualElement('button',buttonSO); + //add visual element to the default theme + _theme.addVisualElement(buttonVisualElement); + //---------------------------------------------------------- + + //----LABEL------------------------------------------------- + //Style object + var labelSO = new mx.styles.CSSStyleDeclaration(); + labelSO.setStyle('fontFamily', '_sans'); + labelSO.setStyle('fontSize', 14); + labelSO.setStyle('color', 0x007300); + //Visual Element + var labelVisualElement = new VisualElement('label',labelSO); + //add visual element to the default theme + _theme.addVisualElement(labelVisualElement); + //-------------------------------------------------------- + + //----LFWINDOW-------------------------------------------- + //Style object + var LFWindowSO = new mx.styles.CSSStyleDeclaration(); + LFWindowSO.setStyle('fontFamily', '_sans'); + LFWindowSO.setStyle('fontSize', 14); + LFWindowSO.setStyle('color', 0x333648); + LFWindowSO.setStyle('themeColor', 0x266DEE); + LFWindowSO.setStyle('borderStyle', 'inset'); + //Visual Element + var LFWindowVisualElement = new VisualElement('LFWindow',LFWindowSO); + //add visual element to the default theme + _theme.addVisualElement(LFWindowVisualElement); + //----------------------------------------------------- + + //----TREE VIEW --------------------------------------- + //Style object + var treeviewSO = new mx.styles.CSSStyleDeclaration(); + treeviewSO.setStyle('fontFamily', '_sans'); + treeviewSO.setStyle('fontSize', 14); + treeviewSO.setStyle('color', 0x333648); + treeviewSO.setStyle('themeColor', 0xBFFFBF); + //treeviewSO.setStyle('rollOverColor', 0xC4C7D5); + treeviewSO.setStyle('openEasing', 'Elastic'); + //Visual Element + var treeviewVisualElement = new VisualElement('treeview',treeviewSO); + //add visual element to the default theme + _theme.addVisualElement(treeviewVisualElement); + //------------------------------------------------------ + + //----DATA GRID------------------------------------------ + //Style object + var datagridSO = new mx.styles.CSSStyleDeclaration(); + datagridSO.setStyle('fontFamily', '_sans'); + datagridSO.setStyle('fontSize', 14); + datagridSO.setStyle('color', 0x333648); + datagridSO.setStyle('themeColor', 0x266DEE); + //datagridSO.setStyle('rollOverColor', 0xC4C7D5); + datagridSO.setStyle('openEasing', 'Elastic'); + //Visual Element + var datagridVisualElement = new VisualElement('datagrid',datagridSO); + //add visual element to the default theme + _theme.addVisualElement(datagridVisualElement); + //------------------------------------------------------ + + + //----COMBO------------------------------------------ + //Style object + var comboSO = new mx.styles.CSSStyleDeclaration(); + comboSO.setStyle('fontFamily', '_sans'); + comboSO.setStyle('fontSize', 14); + comboSO.setStyle('color', 0x333648); + comboSO.setStyle('themeColor', 0xBFFFBF); + comboSO.setStyle('openEasing', Elastic.easeOut); + //Visual Element + var comboVisualElement = new VisualElement('combo',comboSO); + //add visual element to the default theme + _theme.addVisualElement(comboVisualElement); + //------------------------------------------------------ + + //----LF MENU------------------------------------------- + //Style object + var lfMenuSO = new mx.styles.CSSStyleDeclaration(); + lfMenuSO.setStyle('fontFamily', '_sans'); + lfMenuSO.setStyle('fontSize', 14); + lfMenuSO.setStyle('color', 0x333648); + lfMenuSO.setStyle('themeColor', 0x266DEE); + lfMenuSO.setStyle('openEasing', Elastic.easeOut); + //Visual Element + var lfMenuVisualElement = new VisualElement('LFMenuBar',lfMenuSO); + //add visual element to the default theme + _theme.addVisualElement(lfMenuVisualElement); + //------------------------------------------------------ + + //----LFBUTTON---------------------------------------------- + //NOTE:This style is used in conjunction with LFButtonSkin class. For usage, see common.style.LFButtonSkin.as + //Style object + var LFButtonSO = new mx.styles.CSSStyleDeclaration(); + LFButtonSO.setStyle('fontFamily', 'Tahoma'); + LFButtonSO.setStyle('fontSize', 10); + LFButtonSO.setStyle('color', 0xff0000); + LFButtonSO.setStyle('themeColor', 0xff0000); + LFButtonSO.setStyle('borderStyle', 'outset'); + //Custom LAMS styles + LFButtonSO.setStyle('up', 0xCCCCCC); + LFButtonSO.setStyle('over', 0xFAF270); + LFButtonSO.setStyle('down', 0xccff3c); + //Visual Element + var LFButtonVisualElement = new VisualElement('LFButton',LFButtonSO); + //add visual element to the default theme + _theme.addVisualElement(LFButtonVisualElement); + //---------------------------------------------------------- + default: + } } /** @@ -215,84 +365,50 @@ trace('broadcast'); } - /** - * sets the current theme - */ - public function selectTheme(theme:String){ - _selectedTheme = theme; - } /** * Returns a style object with styles for the VisualElementId passed in */ public function getStyleObject(visualElementId:String):mx.styles.CSSStyleDeclaration{ //Get relevant style object from selected theme - //Get selected theme - var theme:Theme = themes.get(_selectedTheme); //Get the correct visual element //TODO DI 06/05/05 check for errors here with ID not found - var visualElement:VisualElement = theme.getVisualElement(visualElementId); + var visualElement:VisualElement = _theme.getVisualElement(visualElementId); //Construct style object by superimposing base style and visua //TODO DI 06/05/05 implement, for now just return style for visual element return visualElement.styleObject; } - /** - * Returns an object containing the serializable (data) parts of this class - * + * @returns an object containing the serializable (data) parts of this class */ public function toData():Object{ //Create the empty object for holding data var obj:Object = {}; - //Create array of visual elements. - obj.themes = []; - - //Store the selected theme - obj.selectedTheme = _selectedTheme; - - //Populate from visual elements hash table - var hashValues:Array = themes.values(); - for (var i=0;i