added profile "inline" menus as a way of extending the user profile display

This commit is contained in:
Eric J. Bowersox 2003-05-23 08:06:52 +00:00
parent 470b7cc47e
commit f933e4f88c
16 changed files with 610 additions and 76 deletions

View File

@ -571,3 +571,8 @@ INSERT INTO menuitems (menuid, sequence, itemtype, text, linktype, link) VALUES
(1, 1, 'TEXT', 'About Venice', 'FRAME', 'about-venice.html'); (1, 1, 'TEXT', 'About Venice', 'FRAME', 'about-venice.html');
UPDATE menuitems SET enable = 0 WHERE menuid = 1 AND sequence = 0; UPDATE menuitems SET enable = 0 WHERE menuid = 1 AND sequence = 0;
# Create the user profile menu.
INSERT INTO menus (menuid, menu_nsid, menu_name, title, subtitle)
VALUES (2, 11, 'user.profile.menu', '', NULL);
INSERT INTO menuitems (menuid, sequence, itemtype, text, linktype, link) VALUES
(2, 0, 'TEXT', 'Profile', 'SERVLET', 'profile.js.vs?tgt=${target}');

View File

@ -11,7 +11,7 @@
* *
* The Initial Developer of the Original Code is Eric J. Bowersox <erbo@silcom.com>, * The Initial Developer of the Original Code is Eric J. Bowersox <erbo@silcom.com>,
* for Silverwrist Design Studios. Portions created by Eric J. Bowersox are * for Silverwrist Design Studios. Portions created by Eric J. Bowersox are
* Copyright (C) 2002 Eric J. Bowersox/Silverwrist Design Studios. All Rights Reserved. * Copyright (C) 2002-03 Eric J. Bowersox/Silverwrist Design Studios. All Rights Reserved.
* *
* Contributor(s): * Contributor(s):
*/ */
@ -164,6 +164,8 @@ class DialogImpl implements Dialog
private String m_error_message = null; private String m_error_message = null;
private Map m_default_render_params; private Map m_default_render_params;
private HashMap m_render_params; private HashMap m_render_params;
private Object m_upper_content = null;
private Object m_lower_content = null;
/*-------------------------------------------------------------------------------- /*--------------------------------------------------------------------------------
* Constructors * Constructors
@ -384,6 +386,10 @@ class DialogImpl implements Dialog
// Get the content header and render it. // Get the content header and render it.
control.renderSubObject(m_plaf.getContentHeader(m_title,m_subtitle)); control.renderSubObject(m_plaf.getContentHeader(m_title,m_subtitle));
// Render the "upper content" object, if any.
if (m_upper_content!=null)
control.renderSubObject(m_upper_content);
// Write the error message. // Write the error message.
if (m_error_message!=null) if (m_error_message!=null)
wr.write("<p align=\"center\" class=\"content\" style=\"color: red; font-weight: bold;\">\n" wr.write("<p align=\"center\" class=\"content\" style=\"color: red; font-weight: bold;\">\n"
@ -453,6 +459,10 @@ class DialogImpl implements Dialog
wr.write("</div></form>\n"); wr.write("</div></form>\n");
// Render the "lower content" object, if any.
if (m_lower_content!=null)
control.renderSubObject(m_lower_content);
} // end render } // end render
public void reset() public void reset()
@ -640,4 +650,16 @@ class DialogImpl implements Dialog
} // end setRenderParam } // end setRenderParam
public synchronized void setUpperContentObject(Object o)
{
m_upper_content = o;
} // end setUpperContentObject
public synchronized void setLowerContentObject(Object o)
{
m_lower_content = o;
} // end setLowerContentObject
} // end class DialogImpl } // end class DialogImpl

View File

@ -27,7 +27,7 @@ import com.silverwrist.dynamo.iface.*;
import com.silverwrist.dynamo.util.*; import com.silverwrist.dynamo.util.*;
public class DialogManager public class DialogManager
implements NamedObject, ComponentInitialize, ComponentShutdown, DialogFactoryConfig, DialogLoader implements NamedObject, ComponentInitialize, ComponentShutdown, DialogFactoryConfig, DialogLoader, TextRenderer
{ {
/*-------------------------------------------------------------------------------- /*--------------------------------------------------------------------------------
* Internal class implementing the dialog item factory * Internal class implementing the dialog item factory
@ -83,6 +83,7 @@ public class DialogManager
private Hashtable m_factory_data = new Hashtable(); private Hashtable m_factory_data = new Hashtable();
private ComponentShutdown m_shut_init; private ComponentShutdown m_shut_init;
private ComponentShutdown m_shut_runtime; private ComponentShutdown m_shut_runtime;
private ComponentShutdown m_shut_render;
/*-------------------------------------------------------------------------------- /*--------------------------------------------------------------------------------
* Constructor * Constructor
@ -190,6 +191,10 @@ public class DialogManager
ssp = new SingletonServiceProvider("DialogManager",DialogLoader.class,(DialogLoader)this); ssp = new SingletonServiceProvider("DialogManager",DialogLoader.class,(DialogLoader)this);
m_shut_runtime = hooker.hookRuntimeServiceProvider(ssp); m_shut_runtime = hooker.hookRuntimeServiceProvider(ssp);
// Register this object as a renderer for dialogs.
RendererRegistration rr = (RendererRegistration)(services.queryService(RendererRegistration.class));
m_shut_render = rr.registerRenderer(Dialog.class,this);
} // end initialize } // end initialize
/*-------------------------------------------------------------------------------- /*--------------------------------------------------------------------------------
@ -199,6 +204,8 @@ public class DialogManager
public void shutdown() public void shutdown()
{ {
m_shut_render.shutdown();
m_shut_render = null;
m_shut_runtime.shutdown(); m_shut_runtime.shutdown();
m_shut_runtime = null; m_shut_runtime = null;
m_shut_init.shutdown(); m_shut_init.shutdown();
@ -297,4 +304,15 @@ public class DialogManager
} // end loadDialogResource } // end loadDialogResource
/*--------------------------------------------------------------------------------
* Implementations from interface TextRenderer
*--------------------------------------------------------------------------------
*/
public void render(Object obj, TextRenderControl control) throws IOException, RenderingException
{
((Dialog)obj).render(control);
} // end render
} // end class DialogManager } // end class DialogManager

View File

@ -11,7 +11,7 @@
* *
* The Initial Developer of the Original Code is Eric J. Bowersox <erbo@silcom.com>, * The Initial Developer of the Original Code is Eric J. Bowersox <erbo@silcom.com>,
* for Silverwrist Design Studios. Portions created by Eric J. Bowersox are * for Silverwrist Design Studios. Portions created by Eric J. Bowersox are
* Copyright (C) 2002 Eric J. Bowersox/Silverwrist Design Studios. All Rights Reserved. * Copyright (C) 2002-03 Eric J. Bowersox/Silverwrist Design Studios. All Rights Reserved.
* *
* Contributor(s): * Contributor(s):
*/ */
@ -61,4 +61,8 @@ public interface Dialog extends Cloneable, NamedObject
public void setRenderParam(String name, String value); public void setRenderParam(String name, String value);
public void setUpperContentObject(Object o);
public void setLowerContentObject(Object o);
} // end interface Dialog } // end interface Dialog

View File

@ -77,6 +77,12 @@ public class LibraryCast
} // end booleanObject } // end booleanObject
public final int[] newIntArray(int size)
{
return new int[size];
} // end newIntArray
public final ChainParameterInput queryChainParameterInput(Object obj) public final ChainParameterInput queryChainParameterInput(Object obj)
{ {
return (ChainParameterInput)query(obj,ChainParameterInput.class); return (ChainParameterInput)query(obj,ChainParameterInput.class);

View File

@ -31,6 +31,8 @@ public class FrameDialog implements FramedContent, SelfRenderable
private Dialog m_dialog; private Dialog m_dialog;
private String m_menu_sel = null; private String m_menu_sel = null;
private String m_qid = null; private String m_qid = null;
private Object m_content_above = null;
private Object m_content_below = null;
/*-------------------------------------------------------------------------------- /*--------------------------------------------------------------------------------
* Constructors * Constructors
@ -50,6 +52,23 @@ public class FrameDialog implements FramedContent, SelfRenderable
} // end constructor } // end constructor
public FrameDialog(Dialog dialog, Object above, Object below)
{
m_dialog = dialog;
m_content_above = above;
m_content_below = below;
} // end constructor
public FrameDialog(Dialog dialog, String menu_sel, Object above, Object below)
{
m_dialog = dialog;
m_menu_sel = menu_sel;
m_content_above = above;
m_content_below = below;
} // end constructor
/*-------------------------------------------------------------------------------- /*--------------------------------------------------------------------------------
* Implementations from interface FramedContent * Implementations from interface FramedContent
*-------------------------------------------------------------------------------- *--------------------------------------------------------------------------------
@ -85,7 +104,12 @@ public class FrameDialog implements FramedContent, SelfRenderable
public void render(SelfRenderControl control) throws IOException, RenderingException public void render(SelfRenderControl control) throws IOException, RenderingException
{ {
m_dialog.render(control.getTextRender()); TextRenderControl ctl = control.getTextRender();
if (m_content_above!=null)
ctl.renderSubObject(m_content_above);
m_dialog.render(ctl);
if (m_content_below!=null)
ctl.renderSubObject(m_content_below);
} // end render } // end render
@ -106,4 +130,28 @@ public class FrameDialog implements FramedContent, SelfRenderable
} // end setPageQID } // end setPageQID
public Object getContentAbove()
{
return m_content_above;
} // end getContentAbove
public void setContentAbove(Object obj)
{
m_content_above = obj;
} // end setContentAbove
public Object getContentBelow()
{
return m_content_below;
} // end getContentBelow
public void setContentBelow(Object obj)
{
m_content_below = obj;
} // end setContentBelow
} // end class FrameDialog } // end class FrameDialog

View File

@ -28,4 +28,7 @@ public interface MenuProvider
public MenuRenderObject getLeftMenu(DynamoUser caller, String namespace, String name, int[] acl_ids) public MenuRenderObject getLeftMenu(DynamoUser caller, String namespace, String name, int[] acl_ids)
throws DatabaseException; throws DatabaseException;
public MenuRenderObject getInlineMenu(DynamoUser caller, String namespace, String name, int[] acl_ids)
throws DatabaseException;
} // end interface MenuProvider } // end interface MenuProvider

View File

@ -19,6 +19,10 @@ package com.silverwrist.venice.iface;
public interface MenuRenderObject public interface MenuRenderObject
{ {
public int getItemCount();
public void setVariable(String name, String value); public void setVariable(String name, String value);
public void setSelectedIndex(int index);
} // end interface MenuRenderObject } // end interface MenuRenderObject

View File

@ -0,0 +1,285 @@
/*
* The contents of this file are subject to the Mozilla Public License Version 1.1
* (the "License"); you may not use this file except in compliance with the License.
* You may obtain a copy of the License at <http://www.mozilla.org/MPL/>.
*
* Software distributed under the License is distributed on an "AS IS" basis, WITHOUT
* WARRANTY OF ANY KIND, either express or implied. See the License for the specific
* language governing rights and limitations under the License.
*
* The Original Code is the Venice Web Communities System.
*
* The Initial Developer of the Original Code is Eric J. Bowersox <erbo@silcom.com>,
* for Silverwrist Design Studios. Portions created by Eric J. Bowersox are
* Copyright (C) 2003 Eric J. Bowersox/Silverwrist Design Studios. All Rights Reserved.
*
* Contributor(s):
*/
package com.silverwrist.venice.menu;
import java.io.*;
import java.util.*;
import com.silverwrist.util.*;
import com.silverwrist.dynamo.except.*;
import com.silverwrist.dynamo.iface.*;
import com.silverwrist.dynamo.security.SecurityReferenceMonitor;
import com.silverwrist.venice.iface.*;
class InlineMenuRendering implements MenuRenderObject, SelfRenderable
{
/*--------------------------------------------------------------------------------
* Attributes
*--------------------------------------------------------------------------------
*/
private MenuDefinition m_menudef;
private boolean[] m_showitem;
private HashMap m_local_vars;
private int m_selected_index = -1;
/*--------------------------------------------------------------------------------
* Constructor
*--------------------------------------------------------------------------------
*/
InlineMenuRendering(DynamoUser caller, MenuDefinition def, SecurityReferenceMonitor srm, int[] acl_ids)
throws DatabaseException
{
m_menudef = def;
int count = def.getItemCount();
m_showitem = new boolean[count];
for (int i=0; i<count; i++)
{ // get the "show item" flags
MenuItemDefinition item = def.getItem(i);
m_showitem[i] = item.itemAppears(caller,srm,acl_ids);
} // end for
m_local_vars = new HashMap(def.getVarDefaults());
} // end constructor
/*--------------------------------------------------------------------------------
* Internal operations
*--------------------------------------------------------------------------------
*/
private final void renderTextItem(TextRenderControl control, MenuItemDefinition item, boolean selected)
throws IOException, RenderingException
{
PrintWriter wr = control.getWriter();
wr.write("<li");
if (selected)
wr.write(" class=\"down\"");
wr.write('>');
if (selected)
wr.write("<b>");
else if (item.isEnabled() && (item.getLink()!=null))
{ // write the link
URLRewriter rewriter = (URLRewriter)(control.queryService(URLRewriter.class));
wr.write("<a href=\""
+ rewriter.rewriteURL(item.getLinkType(),
StringUtils.replaceAllVariables(item.getLink(),m_local_vars)) + "\"");
String s = item.getTarget();
if (s!=null)
wr.write(" target=\"" + s + "\"");
s = item.getTitle();
if (s!=null)
wr.write(" title=\"" + s + "\"");
s = item.getOnClick();
if (s!=null)
wr.write(" onClick=\"" + s + "\"");
wr.write('>');
} // end if
else // just disable the text
wr.write("<span style=\"color: silver;\">");
wr.write(StringUtils.encodeHTML(StringUtils.replaceAllVariables(item.getText(),m_local_vars)));
if (selected)
wr.write("</b>");
else if (item.isEnabled())
wr.write("</a>");
else
wr.write("</span>");
wr.write("</li>\n");
} // end renderTextItem
private final void renderHeaderItem(TextRenderControl control, MenuItemDefinition item, boolean selected)
throws IOException, RenderingException
{
PrintWriter wr = control.getWriter();
wr.write("<li");
if (selected)
wr.write(" class=\"down\"");
wr.write("><b>");
if (!selected)
{ // write the sequence beginning
if (item.isEnabled() && (item.getLink()!=null))
{ // write the link
URLRewriter rewriter = (URLRewriter)(control.queryService(URLRewriter.class));
wr.write("<a href=\""
+ rewriter.rewriteURL(item.getLinkType(),
StringUtils.replaceAllVariables(item.getLink(),m_local_vars)) + "\"");
String s = item.getTarget();
if (s!=null)
wr.write(" target=\"" + s + "\"");
s = item.getTitle();
if (s!=null)
wr.write(" title=\"" + s + "\"");
s = item.getOnClick();
if (s!=null)
wr.write(" onClick=\"" + s + "\"");
wr.write('>');
} // end if
else // just disable the text
wr.write("<span style=\"color: silver;\">");
} // end if
wr.write(StringUtils.encodeHTML(StringUtils.replaceAllVariables(item.getText(),m_local_vars)));
if (!selected)
{ // write the sequence end
if (item.isEnabled())
wr.write("</a>");
else
wr.write("</span>");
} // end if
wr.write("</b></li>\n");
} // end renderHeaderItem
private final void renderImageItem(TextRenderControl control, MenuItemDefinition item, boolean selected)
throws IOException, RenderingException
{
URLRewriter rewriter = (URLRewriter)(control.queryService(URLRewriter.class));
String s;
PrintWriter wr = control.getWriter();
wr.write("<li");
if (selected)
wr.write(" class=\"down\"");
wr.write('>');
if (!selected)
{ // write the opening sequence
if (item.isEnabled() && (item.getLink()!=null))
{ // write the link
wr.write("<a href=\""
+ rewriter.rewriteURL(item.getLinkType(),
StringUtils.replaceAllVariables(item.getLink(),m_local_vars)) + "\"");
s = item.getTarget();
if (s!=null)
wr.write(" target=\"" + s + "\"");
s = item.getTitle();
if (s!=null)
wr.write(" title=\"" + s + "\"");
s = item.getOnClick();
if (s!=null)
wr.write(" onClick=\"" + s + "\"");
wr.write('>');
} // end if
else // just disable the text
wr.write("<span style=\"color: silver;\">");
} // end if
String[] data = StringUtils.split(item.getText(),",",4);
wr.write("<img src=\"" + rewriter.rewriteURL(data[2],StringUtils.replaceAllVariables(data[3],m_local_vars))
+ "\"");
s = item.getTitle();
if (s==null)
wr.write(" alt=\"\"");
else
wr.write(" alt=\"" + s + "\" title=\"" + s + "\"");
wr.write(" width=\"" + data[0] + "\" height=\"" + data[1] + "\" border=\"0\" />");
if (!selected)
{ // write the closing sequence
if (item.isEnabled())
wr.write("</a>");
else
wr.write("</span>");
} // end if
wr.write("</li>\n");
} // end renderImageItem
private final void renderSeparatorItem(TextRenderControl control, MenuItemDefinition item)
throws IOException, RenderingException
{
PrintWriter wr = control.getWriter();
wr.write("<li class=\"separator\">&nbsp;&nbsp;</li>");
} // end renderSeparatorItem
/*--------------------------------------------------------------------------------
* Implementations from interface MenuRenderObject
*--------------------------------------------------------------------------------
*/
public int getItemCount()
{
return m_menudef.getItemCount();
} // end getItemCount
public void setVariable(String name, String value)
{
if (m_menudef.isVariable(name))
m_local_vars.put(name,value);
} // end setVariable
public void setSelectedIndex(int index)
{
m_selected_index = index;
} // end setSelectedIndex
/*--------------------------------------------------------------------------------
* Implementations from interface SelfRenderable
*--------------------------------------------------------------------------------
*/
public void render(SelfRenderControl control) throws IOException, RenderingException
{
TextRenderControl tctrl = control.getTextRender();
PrintWriter wr = tctrl.getWriter();
wr.write("<div class=\"imenu\"><ul>\n");
if (StringUtils.isNotEmpty(m_menudef.getTitle()))
{ // write the title and subtitle
wr.write("<li class=\"separator\"><b>" + StringUtils.encodeHTML(m_menudef.getTitle()) + "</b>");
if (m_menudef.getSubtitle()!=null)
wr.write("&nbsp;" + StringUtils.encodeHTML(m_menudef.getSubtitle()));
wr.write(":</li>\n");
} // end if
for (int i=0; i<m_showitem.length; i++)
{ // render each menu item in turn
MenuItemDefinition item = m_menudef.getItem(i);
if (m_showitem[i] && item.itemDefined(m_local_vars))
{ // render this item
String s = item.getItemType();
if (s.equalsIgnoreCase("TEXT"))
renderTextItem(tctrl,item,(i==m_selected_index));
else if (s.equalsIgnoreCase("HEADER"))
renderHeaderItem(tctrl,item,(i==m_selected_index));
else if (s.equalsIgnoreCase("IMAGE"))
renderImageItem(tctrl,item,(i==m_selected_index));
else if (s.equalsIgnoreCase("SEPARATOR"))
renderSeparatorItem(tctrl,item);
} // end if
} // end for
wr.write("</ul></div>\n");
} // end render
} // end class InlineMenuRendering

View File

@ -35,6 +35,7 @@ class LeftMenuRendering implements MenuRenderObject, SelfRenderable
private MenuDefinition m_menudef; private MenuDefinition m_menudef;
private boolean[] m_showitem; private boolean[] m_showitem;
private HashMap m_local_vars; private HashMap m_local_vars;
private int m_selected_index = -1;
/*-------------------------------------------------------------------------------- /*--------------------------------------------------------------------------------
* Constructor * Constructor
@ -63,13 +64,15 @@ class LeftMenuRendering implements MenuRenderObject, SelfRenderable
*-------------------------------------------------------------------------------- *--------------------------------------------------------------------------------
*/ */
private final void renderTextItem(TextRenderControl control, MenuItemDefinition item) private final void renderTextItem(TextRenderControl control, MenuItemDefinition item, boolean selected)
throws IOException, RenderingException throws IOException, RenderingException
{ {
PrintWriter wr = control.getWriter(); PrintWriter wr = control.getWriter();
for (int i=0; i<item.getIndentLevel(); i++) for (int i=0; i<item.getIndentLevel(); i++)
wr.write("&nbsp;"); wr.write("&nbsp;");
if (item.isEnabled() && (item.getLink()!=null)) if (selected)
wr.write("<b>");
else if (item.isEnabled() && (item.getLink()!=null))
{ // write the link { // write the link
URLRewriter rewriter = (URLRewriter)(control.queryService(URLRewriter.class)); URLRewriter rewriter = (URLRewriter)(control.queryService(URLRewriter.class));
wr.write("<a href=\"" wr.write("<a href=\""
@ -90,7 +93,9 @@ class LeftMenuRendering implements MenuRenderObject, SelfRenderable
else // just disable the text else // just disable the text
wr.write("<span style=\"color: silver;\">"); wr.write("<span style=\"color: silver;\">");
wr.write(StringUtils.encodeHTML(StringUtils.replaceAllVariables(item.getText(),m_local_vars))); wr.write(StringUtils.encodeHTML(StringUtils.replaceAllVariables(item.getText(),m_local_vars)));
if (item.isEnabled()) if (selected)
wr.write("</b>");
else if (item.isEnabled())
wr.write("</a>"); wr.write("</a>");
else else
wr.write("</span>"); wr.write("</span>");
@ -98,43 +103,53 @@ class LeftMenuRendering implements MenuRenderObject, SelfRenderable
} // end renderTextItem } // end renderTextItem
private final void renderHeaderItem(TextRenderControl control, MenuItemDefinition item) private final void renderHeaderItem(TextRenderControl control, MenuItemDefinition item, boolean selected)
throws IOException, RenderingException throws IOException, RenderingException
{ {
PrintWriter wr = control.getWriter(); PrintWriter wr = control.getWriter();
for (int i=0; i<item.getIndentLevel(); i++) for (int i=0; i<item.getIndentLevel(); i++)
wr.write("&nbsp;"); wr.write("&nbsp;");
wr.write("<b>"); wr.write("<b>");
if (item.isEnabled() && (item.getLink()!=null)) if (!selected)
{ // write the link { // write the opening sequence
URLRewriter rewriter = (URLRewriter)(control.queryService(URLRewriter.class)); if (item.isEnabled() && (item.getLink()!=null))
wr.write("<a href=\"" { // write the link
+ rewriter.rewriteURL(item.getLinkType(), URLRewriter rewriter = (URLRewriter)(control.queryService(URLRewriter.class));
StringUtils.replaceAllVariables(item.getLink(),m_local_vars)) + "\""); wr.write("<a href=\""
String s = item.getTarget(); + rewriter.rewriteURL(item.getLinkType(),
if (s!=null) StringUtils.replaceAllVariables(item.getLink(),m_local_vars)) + "\"");
wr.write(" target=\"" + s + "\""); String s = item.getTarget();
s = item.getTitle(); if (s!=null)
if (s!=null) wr.write(" target=\"" + s + "\"");
wr.write(" title=\"" + s + "\""); s = item.getTitle();
s = item.getOnClick(); if (s!=null)
if (s!=null) wr.write(" title=\"" + s + "\"");
wr.write(" onClick=\"" + s + "\""); s = item.getOnClick();
wr.write("class=\"frameleft\" >"); if (s!=null)
wr.write(" onClick=\"" + s + "\"");
wr.write("class=\"frameleft\" >");
} // end if
else // just disable the text
wr.write("<span style=\"color: silver;\">");
} // end if } // end if
else // just disable the text
wr.write("<span style=\"color: silver;\">");
wr.write(StringUtils.encodeHTML(StringUtils.replaceAllVariables(item.getText(),m_local_vars))); wr.write(StringUtils.encodeHTML(StringUtils.replaceAllVariables(item.getText(),m_local_vars)));
if (item.isEnabled()) if (!selected)
wr.write("</a>"); { // write the closing sequence
else if (item.isEnabled())
wr.write("</span>"); wr.write("</a>");
else
wr.write("</span>");
} // end if
wr.write("</b><br />\n"); wr.write("</b><br />\n");
} // end renderHeaderItem } // end renderHeaderItem
private final void renderImageItem(TextRenderControl control, MenuItemDefinition item) private final void renderImageItem(TextRenderControl control, MenuItemDefinition item, boolean selected)
throws IOException, RenderingException throws IOException, RenderingException
{ {
URLRewriter rewriter = (URLRewriter)(control.queryService(URLRewriter.class)); URLRewriter rewriter = (URLRewriter)(control.queryService(URLRewriter.class));
@ -142,25 +157,30 @@ class LeftMenuRendering implements MenuRenderObject, SelfRenderable
PrintWriter wr = control.getWriter(); PrintWriter wr = control.getWriter();
for (int i=0; i<item.getIndentLevel(); i++) for (int i=0; i<item.getIndentLevel(); i++)
wr.write("&nbsp;"); wr.write("&nbsp;");
if (item.isEnabled() && (item.getLink()!=null)) if (!selected)
{ // write the link { // write the opening sequence
wr.write("<a href=\"" if (item.isEnabled() && (item.getLink()!=null))
+ rewriter.rewriteURL(item.getLinkType(), { // write the link
StringUtils.replaceAllVariables(item.getLink(),m_local_vars)) + "\""); wr.write("<a href=\""
s = item.getTarget(); + rewriter.rewriteURL(item.getLinkType(),
if (s!=null) StringUtils.replaceAllVariables(item.getLink(),m_local_vars)) + "\"");
wr.write(" target=\"" + s + "\""); s = item.getTarget();
s = item.getTitle(); if (s!=null)
if (s!=null) wr.write(" target=\"" + s + "\"");
wr.write(" title=\"" + s + "\""); s = item.getTitle();
s = item.getOnClick(); if (s!=null)
if (s!=null) wr.write(" title=\"" + s + "\"");
wr.write(" onClick=\"" + s + "\""); s = item.getOnClick();
wr.write(" class=\"frameleft\">"); if (s!=null)
wr.write(" onClick=\"" + s + "\"");
wr.write(" class=\"frameleft\">");
} // end if
else // just disable the text
wr.write("<span style=\"color: silver;\">");
} // end if } // end if
else // just disable the text
wr.write("<span style=\"color: silver;\">");
String[] data = StringUtils.split(item.getText(),",",4); String[] data = StringUtils.split(item.getText(),",",4);
wr.write("<img src=\"" + rewriter.rewriteURL(data[2],StringUtils.replaceAllVariables(data[3],m_local_vars)) wr.write("<img src=\"" + rewriter.rewriteURL(data[2],StringUtils.replaceAllVariables(data[3],m_local_vars))
+ "\""); + "\"");
@ -170,10 +190,15 @@ class LeftMenuRendering implements MenuRenderObject, SelfRenderable
else else
wr.write(" alt=\"" + s + "\" title=\"" + s + "\""); wr.write(" alt=\"" + s + "\" title=\"" + s + "\"");
wr.write(" width=\"" + data[0] + "\" height=\"" + data[1] + "\" border=\"0\" />"); wr.write(" width=\"" + data[0] + "\" height=\"" + data[1] + "\" border=\"0\" />");
if (item.isEnabled()) if (!selected)
wr.write("</a>"); { // write the closing sequence
else if (item.isEnabled())
wr.write("</span>"); wr.write("</a>");
else
wr.write("</span>");
} // end if
wr.write("<br />\n"); wr.write("<br />\n");
} // end renderImageItem } // end renderImageItem
@ -191,6 +216,12 @@ class LeftMenuRendering implements MenuRenderObject, SelfRenderable
*-------------------------------------------------------------------------------- *--------------------------------------------------------------------------------
*/ */
public int getItemCount()
{
return m_menudef.getItemCount();
} // end getItemCount
public void setVariable(String name, String value) public void setVariable(String name, String value)
{ {
if (m_menudef.isVariable(name)) if (m_menudef.isVariable(name))
@ -198,6 +229,12 @@ class LeftMenuRendering implements MenuRenderObject, SelfRenderable
} // end setVariable } // end setVariable
public void setSelectedIndex(int index)
{
m_selected_index = index;
} // end setSelectedIndex
/*-------------------------------------------------------------------------------- /*--------------------------------------------------------------------------------
* Implementations from interface SelfRenderable * Implementations from interface SelfRenderable
*-------------------------------------------------------------------------------- *--------------------------------------------------------------------------------
@ -222,12 +259,12 @@ class LeftMenuRendering implements MenuRenderObject, SelfRenderable
{ // render this item { // render this item
String s = item.getItemType(); String s = item.getItemType();
if (s.equalsIgnoreCase("TEXT")) if (s.equalsIgnoreCase("TEXT"))
renderTextItem(tctrl,item); renderTextItem(tctrl,item,(m_selected_index==i));
if (s.equalsIgnoreCase("HEADER")) else if (s.equalsIgnoreCase("HEADER"))
renderHeaderItem(tctrl,item); renderHeaderItem(tctrl,item,(m_selected_index==i));
if (s.equalsIgnoreCase("IMAGE")) else if (s.equalsIgnoreCase("IMAGE"))
renderImageItem(tctrl,item); renderImageItem(tctrl,item,(m_selected_index==i));
if (s.equalsIgnoreCase("SEPARATOR")) else if (s.equalsIgnoreCase("SEPARATOR"))
renderSeparatorItem(tctrl,item); renderSeparatorItem(tctrl,item);
} // end if } // end if

View File

@ -185,4 +185,20 @@ public class MenuManager implements NamedObject, ComponentInitialize, ComponentS
} // end getLeftMenu } // end getLeftMenu
public MenuRenderObject getInlineMenu(DynamoUser caller, String namespace, String name, int[] acl_ids)
throws DatabaseException
{
QualifiedNameKey key = new QualifiedNameKey(namespace,name);
MenuDefinition mdef = (MenuDefinition)(m_menudef_cache.get(key));
if (mdef==null)
{ // get it and add it to the cache
mdef = m_ops.getMenu(namespace,name);
m_menudef_cache.put(key,mdef);
} // end if
return new InlineMenuRendering(caller,mdef,m_srm,acl_ids);
} // end getInlineMenu
} // end class MenuManager } // end class MenuManager

View File

@ -38,6 +38,7 @@ class StandardMenuRendering implements MenuRenderObject, SelfRenderable, FramedC
private boolean[] m_showitem; private boolean[] m_showitem;
private HashMap m_local_vars; private HashMap m_local_vars;
private ContentBlock m_bullet = null; private ContentBlock m_bullet = null;
private int m_selected_index = -1;
/*-------------------------------------------------------------------------------- /*--------------------------------------------------------------------------------
* Constructor * Constructor
@ -66,7 +67,7 @@ class StandardMenuRendering implements MenuRenderObject, SelfRenderable, FramedC
*-------------------------------------------------------------------------------- *--------------------------------------------------------------------------------
*/ */
private final void renderTextItem(TextRenderControl control, MenuItemDefinition item) private final void renderTextItem(TextRenderControl control, MenuItemDefinition item, boolean selected)
throws IOException, RenderingException throws IOException, RenderingException
{ {
PrintWriter wr = control.getWriter(); PrintWriter wr = control.getWriter();
@ -74,7 +75,9 @@ class StandardMenuRendering implements MenuRenderObject, SelfRenderable, FramedC
wr.write("&nbsp;&nbsp;&nbsp;&nbsp;"); wr.write("&nbsp;&nbsp;&nbsp;&nbsp;");
control.renderSubObject(m_bullet); control.renderSubObject(m_bullet);
wr.write("&nbsp;"); wr.write("&nbsp;");
if (item.isEnabled() && (item.getLink()!=null)) if (selected)
wr.write("<span class=\"selectedItem\">");
else if (item.isEnabled() && (item.getLink()!=null))
{ // write the link { // write the link
URLRewriter rewriter = (URLRewriter)(control.queryService(URLRewriter.class)); URLRewriter rewriter = (URLRewriter)(control.queryService(URLRewriter.class));
wr.write("<a href=\"" wr.write("<a href=\""
@ -95,7 +98,9 @@ class StandardMenuRendering implements MenuRenderObject, SelfRenderable, FramedC
else // just disable the text else // just disable the text
wr.write("<span style=\"color: silver;\">"); wr.write("<span style=\"color: silver;\">");
wr.write(StringUtils.encodeHTML(StringUtils.replaceAllVariables(item.getText(),m_local_vars))); wr.write(StringUtils.encodeHTML(StringUtils.replaceAllVariables(item.getText(),m_local_vars)));
if (item.isEnabled()) if (selected)
wr.write("</span>");
else if (item.isEnabled())
wr.write("</a>"); wr.write("</a>");
else else
wr.write("</span>"); wr.write("</span>");
@ -103,14 +108,16 @@ class StandardMenuRendering implements MenuRenderObject, SelfRenderable, FramedC
} // end renderTextItem } // end renderTextItem
private final void renderHeaderItem(TextRenderControl control, MenuItemDefinition item) private final void renderHeaderItem(TextRenderControl control, MenuItemDefinition item, boolean selected)
throws IOException, RenderingException throws IOException, RenderingException
{ {
PrintWriter wr = control.getWriter(); PrintWriter wr = control.getWriter();
for (int i=0; i<item.getIndentLevel(); i++) for (int i=0; i<item.getIndentLevel(); i++)
wr.write("&nbsp;&nbsp;&nbsp;&nbsp;"); wr.write("&nbsp;&nbsp;&nbsp;&nbsp;");
wr.write("<span style=\"font-weight: bold; text-decoration: underline;\">"); wr.write("<span style=\"font-weight: bold; text-decoration: underline;\">");
if (item.isEnabled() && (item.getLink()!=null)) if (selected)
wr.write("<span class=\"selectedItem\">");
else if (item.isEnabled() && (item.getLink()!=null))
{ // write the link { // write the link
URLRewriter rewriter = (URLRewriter)(control.queryService(URLRewriter.class)); URLRewriter rewriter = (URLRewriter)(control.queryService(URLRewriter.class));
wr.write("<a href=\"" wr.write("<a href=\""
@ -131,7 +138,9 @@ class StandardMenuRendering implements MenuRenderObject, SelfRenderable, FramedC
else // just disable the text else // just disable the text
wr.write("<span style=\"color: silver;\">"); wr.write("<span style=\"color: silver;\">");
wr.write(StringUtils.encodeHTML(StringUtils.replaceAllVariables(item.getText(),m_local_vars))); wr.write(StringUtils.encodeHTML(StringUtils.replaceAllVariables(item.getText(),m_local_vars)));
if (item.isEnabled()) if (selected)
wr.write("</span>");
else if (item.isEnabled())
wr.write("</a>"); wr.write("</a>");
else else
wr.write("</span>"); wr.write("</span>");
@ -139,7 +148,7 @@ class StandardMenuRendering implements MenuRenderObject, SelfRenderable, FramedC
} // end renderHeaderItem } // end renderHeaderItem
private final void renderImageItem(TextRenderControl control, MenuItemDefinition item) private final void renderImageItem(TextRenderControl control, MenuItemDefinition item, boolean selected)
throws IOException, RenderingException throws IOException, RenderingException
{ {
URLRewriter rewriter = (URLRewriter)(control.queryService(URLRewriter.class)); URLRewriter rewriter = (URLRewriter)(control.queryService(URLRewriter.class));
@ -147,7 +156,9 @@ class StandardMenuRendering implements MenuRenderObject, SelfRenderable, FramedC
PrintWriter wr = control.getWriter(); PrintWriter wr = control.getWriter();
for (int i=0; i<item.getIndentLevel(); i++) for (int i=0; i<item.getIndentLevel(); i++)
wr.write("&nbsp;&nbsp;&nbsp;&nbsp;"); wr.write("&nbsp;&nbsp;&nbsp;&nbsp;");
if (item.isEnabled() && (item.getLink()!=null)) if (selected)
wr.write("<span class=\"selectedItem\">");
else if (item.isEnabled() && (item.getLink()!=null))
{ // write the link { // write the link
wr.write("<a href=\"" wr.write("<a href=\""
+ rewriter.rewriteURL(item.getLinkType(), + rewriter.rewriteURL(item.getLinkType(),
@ -175,7 +186,9 @@ class StandardMenuRendering implements MenuRenderObject, SelfRenderable, FramedC
else else
wr.write(" alt=\"" + s + "\" title=\"" + s + "\""); wr.write(" alt=\"" + s + "\" title=\"" + s + "\"");
wr.write(" width=\"" + data[0] + "\" height=\"" + data[1] + "\" border=\"0\" />"); wr.write(" width=\"" + data[0] + "\" height=\"" + data[1] + "\" border=\"0\" />");
if (item.isEnabled()) if (selected)
wr.write("</span>");
else if (item.isEnabled())
wr.write("</a>"); wr.write("</a>");
else else
wr.write("</span>"); wr.write("</span>");
@ -196,6 +209,12 @@ class StandardMenuRendering implements MenuRenderObject, SelfRenderable, FramedC
*-------------------------------------------------------------------------------- *--------------------------------------------------------------------------------
*/ */
public int getItemCount()
{
return m_menudef.getItemCount();
} // end getItemCount
public void setVariable(String name, String value) public void setVariable(String name, String value)
{ {
if (m_menudef.isVariable(name)) if (m_menudef.isVariable(name))
@ -203,6 +222,12 @@ class StandardMenuRendering implements MenuRenderObject, SelfRenderable, FramedC
} // end setVariable } // end setVariable
public void setSelectedIndex(int index)
{
m_selected_index = index;
} // end setSelectedIndex
/*-------------------------------------------------------------------------------- /*--------------------------------------------------------------------------------
* Implementations from interface SelfRenderable * Implementations from interface SelfRenderable
*-------------------------------------------------------------------------------- *--------------------------------------------------------------------------------
@ -248,12 +273,12 @@ class StandardMenuRendering implements MenuRenderObject, SelfRenderable, FramedC
{ // render this item { // render this item
s = item.getItemType(); s = item.getItemType();
if (s.equalsIgnoreCase("TEXT")) if (s.equalsIgnoreCase("TEXT"))
renderTextItem(tctl,item); renderTextItem(tctl,item,(m_selected_index==i));
if (s.equalsIgnoreCase("HEADER")) else if (s.equalsIgnoreCase("HEADER"))
renderHeaderItem(tctl,item); renderHeaderItem(tctl,item,(m_selected_index==i));
if (s.equalsIgnoreCase("IMAGE")) else if (s.equalsIgnoreCase("IMAGE"))
renderImageItem(tctl,item); renderImageItem(tctl,item,(m_selected_index==i));
if (s.equalsIgnoreCase("SEPARATOR")) else if (s.equalsIgnoreCase("SEPARATOR"))
renderSeparatorItem(tctl,item); renderSeparatorItem(tctl,item);
} // end if } // end if

View File

@ -11,7 +11,7 @@
* *
* The Initial Developer of the Original Code is Eric J. Bowersox <erbo@silcom.com>, * The Initial Developer of the Original Code is Eric J. Bowersox <erbo@silcom.com>,
* for Silverwrist Design Studios. Portions created by Eric J. Bowersox are * for Silverwrist Design Studios. Portions created by Eric J. Bowersox are
* Copyright (C) 2002 Eric J. Bowersox/Silverwrist Design Studios. All Rights Reserved. * Copyright (C) 2002-03 Eric J. Bowersox/Silverwrist Design Studios. All Rights Reserved.
* *
* Contributor(s): * Contributor(s):
*/ */
@ -92,6 +92,12 @@ public class LibraryVeniceCast
} // end queryContentBlockProvider } // end queryContentBlockProvider
public final MenuProvider queryMenuProvider(Object obj)
{
return (MenuProvider)query(obj,MenuProvider.class);
} // end queryMenuProvider
public final RenderImage queryRenderImage(Object obj) public final RenderImage queryRenderImage(Object obj)
{ {
return (RenderImage)query(obj,RenderImage.class); return (RenderImage)query(obj,RenderImage.class);

View File

@ -48,6 +48,18 @@ if (user.isAnonymous())
loader = cast.queryDialogLoader(req); loader = cast.queryDialogLoader(req);
dlg = loader.loadDialogResource("user_profile.dlg.xml"); dlg = loader.loadDialogResource("user_profile.dlg.xml");
// Load the profile menu.
mprov = vcast.queryMenuProvider(req_help.getRequestObject(Namespaces.DYNAMO_OBJECT_NAMESPACE,"venice-menus"));
menu = mprov.getInlineMenu(user,VeniceNamespaces.USER_PROFILE_NAMESPACE,"user.profile.menu",cast.newIntArray(0));
if (menu.getItemCount()>1)
{ // set up the menu properly
menu.setVariable("target",stringutils.encodeURL(target));
menu.setSelectedIndex(0);
} // end if
else // don't display the menu
menu = null;
if (req_help.isVerb("GET")) if (req_help.isVerb("GET"))
{ // Get the privacy settings and admin flags. { // Get the privacy settings and admin flags.
priv = cast.toOptionSet(user.getObject(VeniceNamespaces.USER_PROFILE_NAMESPACE,"privacy")); priv = cast.toOptionSet(user.getObject(VeniceNamespaces.USER_PROFILE_NAMESPACE,"privacy"));
@ -113,7 +125,7 @@ if (req_help.isVerb("GET"))
dlg.setRenderParam("rtgt",stringutils.encodeURL(target)); dlg.setRenderParam("rtgt",stringutils.encodeURL(target));
vlib.setLocation(req,target); vlib.setLocation(req,target);
vlib.setDisplayLogin(req,false); vlib.setDisplayLogin(req,false);
dynamo.scriptReturn(new FrameDialog(dlg)); dynamo.scriptReturn(new FrameDialog(dlg,menu,null));
} // end if } // end if
@ -164,7 +176,7 @@ catch (e)
dlg.setRenderParam("rtgt",stringutils.encodeURL(target)); dlg.setRenderParam("rtgt",stringutils.encodeURL(target));
vlib.setLocation(req,target); vlib.setLocation(req,target);
vlib.setDisplayLogin(req,false); vlib.setDisplayLogin(req,false);
dynamo.scriptReturn(new FrameDialog(dlg)); dynamo.scriptReturn(new FrameDialog(dlg,menu,null));
} // end catch } // end catch

View File

@ -93,3 +93,41 @@ html>body span.chdrsubtitle {
html>body td.errorhead, html>body td.errorbody { html>body td.errorhead, html>body td.errorbody {
font-size: medium; font-size: medium;
} }
## these are styles for inline menu lists
div.imenu {
padding: 5px;
border: 1px solid #000;
margin-bottom: 25px;
background-color: #6666cc;
}
div.imenu ul {
margin-left: 0;
padding-left: 0;
display: inline;
}
div.imenu ul li {
margin-left: 0;
margin-bottom: 0;
padding: 2px 15px 5px;
border: 1px solid #000;
list-style: none;
display: inline;
background-color: #9999ff;
}
div.imenu ul li.down {
border-bottom: 1px solid #fff;
list-style: none;
display: inline;
background-color: #ffffff;
}
div.imenu ul li.separator {
border: none;
list-style: none;
display: inline;
background-color: #6666cc;
}

View File

@ -97,3 +97,8 @@ td.errorbody {
text-align: center; text-align: center;
font-size: 15px; font-size: 15px;
} }
.selectedItem {
color: #3333aa;
font-weight: bold;
}