From: David H. <pro...@ma...> - 2010-04-16 01:25:19
|
On 2010-04-15, at 6:23 PM, David BON wrote: > Sorry for that! > > Though, I pay attention yesterday to which David it was... > > I apologize to both. > > <grumble> > To much Davids on this list! Pot. Kettle. Black. :-) > </grumble> > > Thanks for the source. > > David B. > > Le 16 avr. 10 à 01:16, David Holt a écrit : > >> >> On 2010-04-15, at 6:01 PM, David BON wrote: >> >>> Thanks. >>> >>> I see in the list that a great job has been down but I still doesn't >>> use svn (up to know I was more in a discover phase of the whole >>> thing) so I can't download this modern look to see how you've done. >> >> You've got the wrong David. It is David LeBer's work in ERModernLook. I'll zip and send the source to you, if it is not already at mdimension. >> >> David >> >>> I'll do it very soon... >>> >>> Now, here are my modifications to the framework: >>> >>> In ERXModernnavigationMenuItem.html : >>> >>> I've replaced: >>> ... >>> <webobject name="ListItemTag"> >>> <webobject name="IsNotDisabledConditional"> >>> <webobject name="HasActionConditional"> >>> <webobject name="MenuItemHyperlink"> >>> <webobject name="DisplayNameString"></webobject> >>> </webobject> >>> </webobject> >>> ... >>> by >>> >>> <webobject name="ListItemTag"> >>> <webobject name="IsNotDisabledConditional"> >>> <webobject name="HasMenuIcon"> >>> <webobject name="MenuIcon"></webobject> >>> </webobject> >>> <webobject name="HasActionConditional"> >>> <webobject name="MenuItemHyperlink"> >>> <webobject name="DisplayNameString"></webobject> >>> </webobject> >>> </webobject> >>> >>> >>> In the wod, I've added: >>> HasMenuIcon: WOConditional { >>> condition = hasMenuIcon; >>> } >>> >>> MenuIcon: WOImageButton { >>> filename = "Images/transparent.gif"; >>> framework = "app"; >>> class = menuIconCSSClass; >>> action = openCloseSubMenus; >>> } >>> >>> In the .java, I've added: >>> protected Boolean _isOpen; >>> protected Boolean _hasMenuIcon; >>> >>> in public void reset() I've added >>> _isOpen = null; >>> _hasMenuIcon = null; >>> >>> >>> I've modified public boolean isDisabled() >>> from >>> ... >>> _isDisabled = navigationState().isDisabled() || ! >>> meetsDisplayConditions()) ? Boolean.TRUE : Boolean.FALSE; >>> ... >>> >>> to >>> _isDisabled = navigationState().isDisabled() || ! >>> meetsDisplayConditions() || ERXValueUtilities.booleanValue >>> (navigationItem().isDisabled()) ? Boolean.TRUE : Boolean.FALSE; >>> >>> and I've added: >>> public WOComponent openCloseSubMenus() { >>> /** If the item that has this icon is defined to manage the >>> open/close state >>> * if it has children: Disabled/Enabled the children when >>> the parent item (this) is Closed/Open >>> * In any case switch the state to later reflect the >>> change on the Icon. See menuIconCSSClass() >>> * Else execute the action defined for the selected item >>> */ >>> if (navigationItem().handleCSSOpenClosed()) { >>> if ((children() != null) && (children().count() > 0)) { >>> for (Enumeration e = children().objectEnumerator(); >>> e.hasMoreElements();) { >>> String childName = ((ERXNavigationItem)e.nextElement()).name(); >>> ERXNavigationItem item = ERXNavigationManager.manager >>> ().navigationItemForName(childName); >>> if (item != null) { >>> if (isOpen()) { >>> item.setIsDisabled(Boolean.TRUE); >>> } else { >>> item.setIsDisabled(Boolean.FALSE); >>> } >>> } else { >>> log.warn("Unable to find navigation item for: " + childName); >>> } >>> } >>> } >>> navigationItem().setIsOpen(!isOpen()); >>> } else { >>> return menuItemSelected(); >>> } >>> return null; >>> } >>> >>> public String menuIconCSSClass() { >>> String cssClass; >>> if (navigationItem().handleCSSOpenClosed()) { >>> if (isOpen()) { >>> cssClass = navigationItem().menuIconCSSClassOpen(); >>> } else { >>> cssClass = navigationItem().menuIconCSSClassClosed(); >>> } >>> } else { >>> cssClass = navigationItem().menuIconCSSClass(); >>> } >>> return cssClass; >>> } >>> >>> public boolean isOpen() { >>> if (_isOpen == null) >>> _isOpen = ERXValueUtilities.booleanValue(resolveValue >>> (navigationItem().isOpen())) ? >>> Boolean.TRUE : Boolean.FALSE; >>> return _isOpen.booleanValue(); >>> } >>> >>> public void setIsOpen(boolean newIsOpen) { _isOpen = newIsOpen; } >>> >>> public boolean hasMenuIcon() { >>> if (_hasMenuIcon == null) >>> _hasMenuIcon = ERXValueUtilities.booleanValue(resolveValue >>> (navigationItem().hasMenuIcon())) ? >>> Boolean.TRUE : Boolean.FALSE; >>> return _hasMenuIcon.booleanValue(); >>> } >>> >>> >>> In NavigationMenu.plist file I've defined the new bindings isOpen, >>> hasMenuICon, menuIconCSSClassClosed and menuIconCSSClassOpen, >>> menuIconCSSClass and isDisabled: >>> Example (as shown on the picture of my former mail): >>> { >>> name = "search"; >>> children = ("newsearch", "filterset"); >>> isOpen = "false"; >>> hasMenuIcon = "true"; >>> menuIconCSSClassClosed = "Icon img_right_arrow"; >>> menuIconCSSClassOpen = "Icon img_down_arrow"; >>> }, >>> { >>> name = "newsearchgoods"; >>> action = session.toNewSearch; >>> isDisabled = "true"; >>> hasMenuIcon = "true"; >>> menuIconCSSClass = "Icon img_add"; >>> }, >>> >>> >>> >>> In ERXNavigationItem.java, I've added the following lines of code: >>> protected String _hasMenuIcon; >>> protected String _menuIconCSSClass; >>> protected String _menuIconCSSClassOpen; >>> protected String _menuIconCSSClassClosed; >>> protected Boolean _handleCSSOpenClosed; >>> protected String _isOpen; >>> protected String _isDisabled; >>> >>> in public ERXNavigationItem(NSDictionary values) I've added: >>> >>> _isOpen=(String)values.valueForKey("isOpen"); >>> _isDisabled=(String)values.valueForKey("isDisabled"); >>> _hasMenuIcon=(String)values.valueForKey("hasMenuIcon"); >>> _menuIconCSSClass=(String)values.valueForKey >>> ("menuIconCSSClass"); >>> _menuIconCSSClassOpen=(String)values.valueForKey >>> ("menuIconCSSClassOpen"); >>> _menuIconCSSClassClosed=(String)values.valueForKey >>> ("menuIconCSSClassClosed"); >>> _handleCSSOpenClosed = ((_menuIconCSSClassOpen != null) >>> && (_menuIconCSSClassClosed != null)); >>> >>> and I've added: >>> public String menuIconCSSClass() { >>> return _menuIconCSSClass; >>> } >>> >>> public String menuIconCSSClassOpen() { >>> return _menuIconCSSClassOpen; >>> } >>> >>> public String menuIconCSSClassClosed() { >>> return _menuIconCSSClassClosed; >>> } >>> >>> public String isOpen() { >>> return _isOpen; >>> } >>> >>> public Boolean handleCSSOpenClosed() { >>> return _handleCSSOpenClosed; >>> } >>> >>> public void setIsOpen(boolean newIsOpen) { _isOpen = newIsOpen ? >>> "true" :"false" ;} >>> >>> public String isDisabled() { >>> return _isDisabled; >>> } >>> public void setIsDisabled(boolean newIsDisabled) { _isDisabled = >>> newIsDisabled ? "true":"false"; } >>> >>> public String hasMenuIcon() { >>> return _hasMenuIcon; >>> } >>> >>> In ERNavigationState.java, I've added: >>> protected boolean _isOpen; >>> >>> public boolean isOpen() { return _isOpen;} >>> >>> public void setIsOpen(boolean newIsOpen) { _isOpen = newIsOpen;} >>> >>> >>> And here the CSS Class used in my example: >>> .Icon { >>> float:left; >>> height:16px; >>> margin:8px; >>> width:16px; >>> } >>> >>> .img_right_arrow { >>> background:url("../Images/right_arrow.png") no-repeat scroll 0 0 >>> transparent; >>> } >>> >>> .img_down_arrow { >>> background:url("../Images/down_arrow.png") no-repeat scroll 0 0 >>> transparent; >>> } >>> >>> .img_add { >>> background:url("../Images/add.png") no-repeat scroll 0 0 transparent; >>> } >>> >>> >>> That's it! >>> >>> (No dynamic loading of submenus yet :-( ) >>> >>> All comments welcome. >>> >>> Regards. >>> >>> David B. >>> >>> >>> Le 16 avr. 10 à 00:13, David Holt a écrit : >>> >>>> Hi David, >>>> >>>> I'd be happy to take a look at what you've done. As you know I've >>>> been digging in the Navigation code as well. >>>> >>>> David >>>> >>>> >>>> On 2010-04-15, at 5:06 PM, David BON wrote: >>>> >>>>> Hi list. >>>>> >>>>> I'm currently try to setting up the following kind of menu using >>>>> ERXModernNavigationMenu. >>>>> >>>>> >>>>> Its a side menu on the left of my pages (the content itself >>>>> depends on the context). >>>>> >>>>> The idea is to define all appearance features through an external >>>>> CSS file allow the use of different skins. >>>>> >>>>> For that, the menu icons are set using a background-image on a >>>>> transparent.gif image. They are clickable as are the related >>>>> menus, with the same action. >>>>> >>>>> The right arrow icon indicate that there _could_ be other subitems >>>>> into the related menus. When clicking on it, it opens and display >>>>> the submenus (if any) with a down arrow icon indicating the >>>>> opening state (see second picture). Menu 1, SEARCH and SELECTIONS >>>>> aren't clickable. >>>>> >>>>> The whole application shall be localizable (hence the little flags >>>>> at the bottom). And when changing the language, the state must be >>>>> persistence (the selected item shall remain the same). >>>>> >>>>> The search section and the selections section shall be filled >>>>> dynamically using 2 tables in the database (that stores different >>>>> filtering sets and different selections saved by the user). >>>>> (Except for the choice "new search" that will allow the creation >>>>> of a new filtering set that could be save or not to the DB). >>>>> >>>>> >>>>> <Menu01.png> >>>>> >>>>> <Menu02.png> >>>>> >>>>> >>>>> I wonder if someone has already achieve some similar work using >>>>> the ERXModernNavigation without any "private" improvement to this >>>>> framework... And if so, how? >>>>> >>>>> Now, I already get all this working correctly (except the addition >>>>> of the dynamic submenus that I still need to address) by modifying >>>>> a local copy of the following wonder parts: >>>>> ERXModernNavigationMenuItem (java, html and wod), >>>>> ERXNavigationItem.java, ERXNavigationState.java (and probably will >>>>> need to modify ERXNavigationManager.java to add the dynamic >>>>> addition of submenus). >>>>> >>>>> I'm not sure that the way I do it is the best neither that it will >>>>> suite everyone needs. >>>>> >>>>> I would be pleased to share this work with the community and like >>>>> to discuss it with any volunteer. I also would like to get more >>>>> information on the general concepts behind the definition of every >>>>> part of this framework to be sure to not break any implicit rule. >>>>> I would also be pleased to update the wiki with all new usefull >>>>> explanation or information. >>>>> >>>>> I shall underline that this is my first webobjects application and >>>>> I don't get even the beginning of the whole picture... >>>>> >>>>> Regards. >>>>> >>>>> David B. >>>>> >>>>> --------------------------------------------------------------------- >>>>> --------- >>>>> Download Intel® Parallel Studio Eval >>>>> Try the new software tools for yourself. Speed compiling, find bugs >>>>> proactively, and fine-tune applications for parallel performance. >>>>> See why Intel Parallel Studio got high marks during beta. >>>>> http://p.sf.net/sfu/intel-sw- >>>>> dev_______________________________________________ >>>>> Wonder-disc mailing list >>>>> Won...@li... >>>>> https://lists.sourceforge.net/lists/listinfo/wonder-disc >>>> >>> >>> >>> ------------------------------------------------------------------------------ >>> Download Intel® Parallel Studio Eval >>> Try the new software tools for yourself. Speed compiling, find bugs >>> proactively, and fine-tune applications for parallel performance. >>> See why Intel Parallel Studio got high marks during beta. >>> http://p.sf.net/sfu/intel-sw-dev >>> _______________________________________________ >>> Wonder-disc mailing list >>> Won...@li... >>> https://lists.sourceforge.net/lists/listinfo/wonder-disc >> > |