001: /* *************************************************************************
002:
003: Millstone(TM)
004: Open Sourced User Interface Library for
005: Internet Development with Java
006:
007: Millstone is a registered trademark of IT Mill Ltd
008: Copyright (C) 2000-2005 IT Mill Ltd
009:
010: *************************************************************************
011:
012: This library is free software; you can redistribute it and/or
013: modify it under the terms of the GNU Lesser General Public
014: license version 2.1 as published by the Free Software Foundation.
015:
016: This library is distributed in the hope that it will be useful,
017: but WITHOUT ANY WARRANTY; without even the implied warranty of
018: MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
019: Lesser General Public License for more details.
020:
021: You should have received a copy of the GNU Lesser General Public
022: License along with this library; if not, write to the Free Software
023: Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
024:
025: *************************************************************************
026:
027: For more information, contact:
028:
029: IT Mill Ltd phone: +358 2 4802 7180
030: Ruukinkatu 2-4 fax: +358 2 4802 7181
031: 20540, Turku email: info@itmill.com
032: Finland company www: www.itmill.com
033:
034: Primary source for MillStone information and releases: www.millstone.org
035:
036: ********************************************************************** */
037:
038: package org.millstone.examples.features;
039:
040: import org.millstone.base.terminal.Resource;
041: import org.millstone.base.terminal.ClassResource;
042: import org.millstone.base.ui.*;
043:
044: public class Feature extends CustomComponent {
045:
046: private TabSheet ts;
047:
048: private boolean initialized = false;
049:
050: private static Resource sampleIcon;
051:
052: /** Constuctor for the feature component */
053: public Feature() {
054: ts = new TabSheet();
055: setCompositionRoot(ts);
056: }
057:
058: /** Feature component initialization is lazily done when the
059: * feature is attached to application */
060: public void attach() {
061:
062: // Check if the feature is already initialized
063: if (initialized)
064: return;
065: initialized = true;
066:
067: // Optional description with image
068: String desc = getDescriptionXHTML();
069: String title = getTitle();
070: if (desc != null && title != null) {
071: GridLayout gl = new GridLayout(2, 1);
072: if (getImage() != null)
073: gl.addComponent(new Embedded("", new ClassResource(
074: getImage(), this .getApplication())));
075: gl.addComponent(new Label("<h2>" + title + "</h2>" + desc,
076: Label.CONTENT_XHTML));
077: ts.addTab(gl, "Description", null);
078: }
079:
080: // Demo
081: Component demo = getDemoComponent();
082: if (demo != null)
083: ts.addTab(demo, "Demo", null);
084:
085: // Example source
086: String example = getExampleSrc();
087: if (example != null) {
088: OrderedLayout l = new OrderedLayout();
089: l.addComponent(new Label("<h2>" + getTitle()
090: + " example</h2>", Label.CONTENT_XHTML));
091: l.addComponent(new Label(example,
092: Label.CONTENT_PREFORMATTED));
093: ts.addTab(l, "Code Sample", null);
094: }
095: }
096:
097: /** Get the desctiption of the feature as XHTML fragment */
098: protected String getDescriptionXHTML() {
099: return "<h2>Feature description is under construction</h2>";
100: }
101:
102: /** Get the title of the feature */
103: protected String getTitle() {
104: return this .getClass().getName();
105: }
106:
107: /** Get the name of the image file that will be put on description page */
108: protected String getImage() {
109: return null;
110: }
111:
112: /** Get the example application source code */
113: protected String getExampleSrc() {
114: return null;
115: }
116:
117: /** Get the feature demo component */
118: protected Component getDemoComponent() {
119: return null;
120: }
121:
122: /** Get sample icon resource */
123: protected Resource getSampleIcon() {
124: if (sampleIcon == null)
125: sampleIcon = new ClassResource("m.gif", this
126: .getApplication());
127: return sampleIcon;
128: }
129:
130: }
|