src/main/java/xelfi/design/components/xawt/XMenuBar.java
author Jaroslav Tulach <jaroslav.tulach@xelfi.cz>
Tue, 17 Jan 2017 21:08:47 +0100
changeset 6 947ce1156833
parent 0 189280700bc7
permissions -rw-r--r--
Renaming setName to setDesignName and setSize to setDesignSize to avoid clash with added methods of java.awt.Component that return void
jaroslav@0
     1
/**
jaroslav@0
     2
* Xelfi
jaroslav@0
     3
*/
jaroslav@0
     4
jaroslav@0
     5
package xelfi.design.components.xawt;
jaroslav@0
     6
jaroslav@0
     7
import java.awt.*;
jaroslav@0
     8
import java.io.*;
jaroslav@0
     9
import xelfi.design.components.*;
jaroslav@0
    10
import xelfi.design.components.property.*;
jaroslav@0
    11
import xelfi.design.util.XFDesignConstants;
jaroslav@0
    12
import xelfi.design.forms.XelfiDesignForm;
jaroslav@0
    13
import xelfi.util.XelfiPath;
jaroslav@0
    14
import xelfi.util.Debug;
jaroslav@0
    15
import xelfi.top.*;
jaroslav@0
    16
import xelfi.design.inspector.*;
jaroslav@0
    17
  
jaroslav@0
    18
/**
jaroslav@0
    19
 * Xelfi non-visual component representing main menu folder - menu bar.
jaroslav@0
    20
 * 
jaroslav@0
    21
 * @version		1.22  25 Feb 1997
jaroslav@0
    22
 * @author		Dafe, Ian Formanek
jaroslav@0
    23
 */
jaroslav@0
    24
public class XMenuBar extends MenuBar implements XelfiDesignComponent {
jaroslav@0
    25
jaroslav@0
    26
  // count of properties
jaroslav@0
    27
  private static final int      propertyCount = 1;
jaroslav@0
    28
jaroslav@0
    29
  // menu icon
jaroslav@0
    30
  private Image                 icon;
jaroslav@0
    31
  private String		            name = "";
jaroslav@0
    32
	// parent font property	
jaroslav@0
    33
	private boolean			          parentFont;
jaroslav@0
    34
  // parent form reference
jaroslav@0
    35
  private XelfiDesignForm       parentForm;
jaroslav@0
    36
	// flag for first setting of form parent
jaroslav@0
    37
	private boolean								firstParent;
jaroslav@0
    38
	// initial menu items - we must hold references because we
jaroslav@0
    39
	// must ensure they will have good form parents.
jaroslav@0
    40
  private XMenuFolder 					initMenu;
jaroslav@0
    41
	private XMenuItem 						initItem;
jaroslav@0
    42
jaroslav@0
    43
	/**
jaroslav@0
    44
	 * Constructs XMenuBar object with no parentForm set.
jaroslav@0
    45
 	*/
jaroslav@0
    46
  public XMenuBar () {
jaroslav@0
    47
    this(null);
jaroslav@0
    48
  }
jaroslav@0
    49
jaroslav@0
    50
	/**
jaroslav@0
    51
	 * Constructs XMenuBar object with parentForm as specified.
jaroslav@0
    52
	*/
jaroslav@0
    53
	public XMenuBar (XelfiDesignForm form) {
jaroslav@0
    54
    firstParent = true;
jaroslav@0
    55
    initMenu = new XMenuFolder("Empty");
jaroslav@0
    56
    initItem = new XMenuItem("Item");
jaroslav@0
    57
    initMenu.add(initItem);
jaroslav@0
    58
    add(initMenu);
jaroslav@0
    59
    setParentForm(form);
jaroslav@0
    60
    loadIcon();
jaroslav@0
    61
	}
jaroslav@0
    62
jaroslav@0
    63
  public void setParentForm(XelfiDesignForm form) {
jaroslav@0
    64
    parentForm = form;
jaroslav@0
    65
		if ((parentForm!=null) && (firstParent)) {
jaroslav@0
    66
			Debug.debug(Debug.MENU, "setting MenuBar parent "+parentForm);
jaroslav@0
    67
			initMenu.setParentForm(parentForm);
jaroslav@0
    68
			initItem.setParentForm(parentForm);
jaroslav@0
    69
			parentForm.setComponentName(initMenu, "");
jaroslav@0
    70
			parentForm.setComponentName(initItem, "");
jaroslav@0
    71
			firstParent = false;
jaroslav@0
    72
		}
jaroslav@0
    73
  }
jaroslav@0
    74
jaroslav@0
    75
  public XelfiDesignForm getParentForm () {
jaroslav@0
    76
    return parentForm;
jaroslav@0
    77
  }
jaroslav@0
    78
jaroslav@0
    79
	public int getPropertyCount () { 
jaroslav@0
    80
		return propertyCount;
jaroslav@0
    81
	}
jaroslav@0
    82
	
jaroslav@0
    83
	public Object getProperty (int index) 
jaroslav@0
    84
      throws XFPropertyIndexOutOfBoundsException {
jaroslav@0
    85
    switch (index) {
jaroslav@0
    86
      case 0: return this;
jaroslav@0
    87
/*      case 1: return getFont();
jaroslav@0
    88
      case 2: return parentFont==true ? Boolean.TRUE : Boolean.FALSE; */
jaroslav@0
    89
      default:	throw new XFPropertyIndexOutOfBoundsException();
jaroslav@0
    90
		}
jaroslav@0
    91
	}
jaroslav@0
    92
			
jaroslav@0
    93
	public String[] getPropertyNames () { 
jaroslav@0
    94
		String list[] = new String[propertyCount];
jaroslav@0
    95
     list[0] = new String("Menu");
jaroslav@0
    96
/*		list[1] = new String("Font");
jaroslav@0
    97
		list[2] = new String("ParentFont"); */
jaroslav@0
    98
		return list;
jaroslav@0
    99
	}
jaroslav@0
   100
		
jaroslav@0
   101
	public String getPropertyString (int index)
jaroslav@0
   102
		throws XFPropertyIndexOutOfBoundsException { 
jaroslav@0
   103
    switch (index) {
jaroslav@0
   104
        case 0: return "[Items]";
jaroslav@0
   105
/*			case 1: return XFontPropertyType.viewString(getProperty(index));
jaroslav@0
   106
			case 2: return XBooleanPropertyType.viewString(getProperty(index)); */
jaroslav@0
   107
			default: throw new XFPropertyIndexOutOfBoundsException();
jaroslav@0
   108
		}
jaroslav@0
   109
	}
jaroslav@0
   110
jaroslav@0
   111
	public int getPropertyViewerType (int index) 
jaroslav@0
   112
		throws XFPropertyIndexOutOfBoundsException {
jaroslav@0
   113
		switch (index) {
jaroslav@0
   114
      case 0: return XFDesignConstants.PVT_SPECIAL;
jaroslav@0
   115
/*      case 1: return XFDesignConstants.PVT_SPECIAL;
jaroslav@0
   116
      case 2: return XFDesignConstants.PVT_CHECK; */
jaroslav@0
   117
			default: throw new XFPropertyIndexOutOfBoundsException();
jaroslav@0
   118
		}
jaroslav@0
   119
	}
jaroslav@0
   120
jaroslav@0
   121
	public String[] getPropertyValueNames (int index)
jaroslav@0
   122
		throws XFPropertyIndexOutOfBoundsException {
jaroslav@0
   123
		switch (index) {
jaroslav@0
   124
			default: throw new XFPropertyIndexOutOfBoundsException();
jaroslav@0
   125
		}
jaroslav@0
   126
	}
jaroslav@0
   127
jaroslav@0
   128
	public Object[] getPropertyValueValues (int index)
jaroslav@0
   129
		throws XFPropertyIndexOutOfBoundsException {
jaroslav@0
   130
		switch (index) {
jaroslav@0
   131
			default: throw new XFPropertyIndexOutOfBoundsException();
jaroslav@0
   132
		}
jaroslav@0
   133
	}
jaroslav@0
   134
jaroslav@0
   135
	public String[] getPropertyValuesArray (int index) 
jaroslav@0
   136
		throws XFPropertyIndexOutOfBoundsException {
jaroslav@0
   137
		switch (index) {
jaroslav@0
   138
			default: throw new XFPropertyIndexOutOfBoundsException();
jaroslav@0
   139
		}
jaroslav@0
   140
	}
jaroslav@0
   141
jaroslav@0
   142
	public int setProperty (int index, Object value) 
jaroslav@0
   143
		throws XFPropertyIndexOutOfBoundsException,
jaroslav@0
   144
						XFPropertyBadValueTypeException 
jaroslav@0
   145
	{ 
jaroslav@0
   146
//		int ret = XFDesignConstants.RSP_OK;
jaroslav@0
   147
 		throw new XFPropertyIndexOutOfBoundsException();
jaroslav@0
   148
//		return ret;
jaroslav@0
   149
	}
jaroslav@0
   150
			
jaroslav@0
   151
	public void specialPropertyInput (Frame parent, int index) 
jaroslav@0
   152
		throws XFPropertyIndexOutOfBoundsException, 
jaroslav@0
   153
						XFPropertyNoSpecialInputException { 
jaroslav@0
   154
    if ((index < 0) || (index >= propertyCount))
jaroslav@0
   155
      throw new XFPropertyIndexOutOfBoundsException();
jaroslav@0
   156
    switch (index) {
jaroslav@0
   157
      case 0: invokeME(); // invoke menu editor
jaroslav@0
   158
        break;
jaroslav@0
   159
/*      case 1: XFontPropertyType.invokeSpecialInput(parent, this, index);
jaroslav@0
   160
        break; */
jaroslav@0
   161
      default: throw new XFPropertyNoSpecialInputException();
jaroslav@0
   162
		}
jaroslav@0
   163
	}
jaroslav@0
   164
jaroslav@0
   165
	public Image getIcon () {
jaroslav@0
   166
		return icon;
jaroslav@0
   167
	}
jaroslav@0
   168
jaroslav@0
   169
	private void loadIcon() {
jaroslav@0
   170
		String sep = new String(System.getProperty("file.separator"));
jaroslav@0
   171
		StringBuffer s = new StringBuffer(XelfiPath.get() + sep + 
jaroslav@0
   172
			"design" + sep + "components" + sep + "xawt" + sep + "menubar.gif");
jaroslav@0
   173
		icon = Toolkit.getDefaultToolkit().getImage(new String(s));
jaroslav@0
   174
	}
jaroslav@0
   175
jaroslav@0
   176
	public int getEventCount() {
jaroslav@0
   177
		return 0;
jaroslav@0
   178
	}
jaroslav@0
   179
jaroslav@0
   180
	public String[] getEventNames() {
jaroslav@0
   181
		return null;
jaroslav@0
   182
	}
jaroslav@0
   183
jaroslav@0
   184
	public String getEvent(int index)
jaroslav@0
   185
		throws XFPropertyIndexOutOfBoundsException {
jaroslav@0
   186
		switch (index) {
jaroslav@0
   187
			default: throw new XFPropertyIndexOutOfBoundsException();
jaroslav@0
   188
		}
jaroslav@0
   189
	}		
jaroslav@0
   190
		
jaroslav@0
   191
	public void setEvent(int index, String value)
jaroslav@0
   192
		throws XFPropertyIndexOutOfBoundsException {
jaroslav@0
   193
		switch (index) {
jaroslav@0
   194
			default: throw new XFPropertyIndexOutOfBoundsException();
jaroslav@0
   195
		}
jaroslav@0
   196
	}		
jaroslav@0
   197
jaroslav@0
   198
	public String getName () { 
jaroslav@0
   199
		return name;
jaroslav@0
   200
	}
jaroslav@0
   201
jaroslav@6
   202
	public int setDesignName (String aName) { 
jaroslav@0
   203
		name = aName;
jaroslav@0
   204
		return XFDesignConstants.RSP_OK;
jaroslav@0
   205
	}
jaroslav@0
   206
jaroslav@0
   207
	public String getClassName () { return "MenuBar"; }
jaroslav@0
   208
	
jaroslav@0
   209
	public String generateEventCondition(int index) throws XFPropertyIndexOutOfBoundsException {
jaroslav@0
   210
		throw new XFPropertyIndexOutOfBoundsException();
jaroslav@0
   211
  }
jaroslav@0
   212
  
jaroslav@0
   213
	public String[] neededImports() {
jaroslav@0
   214
		String list[] = new String[1];
jaroslav@0
   215
		list[0] = "java.awt.MenuBar";
jaroslav@0
   216
		return list;
jaroslav@0
   217
	}
jaroslav@0
   218
jaroslav@0
   219
	public String generateCode (int what) { 
jaroslav@0
   220
		String gen = "";
jaroslav@0
   221
		switch (what) {
jaroslav@0
   222
			case XFDesignConstants.GEN_VARIABLE: 
jaroslav@0
   223
				gen = getClassName()+" "+ name + ";\n";
jaroslav@0
   224
				for (int i=0; i<countMenus(); i++)
jaroslav@0
   225
					gen = gen+((XelfiDesignComponent)getMenu(i)).generateCode(XFDesignConstants.GEN_VARIABLE);
jaroslav@0
   226
				break;
jaroslav@0
   227
			case XFDesignConstants.GEN_INIT: 
jaroslav@0
   228
				gen = name + " = new " + getClassName() + "();\n";
jaroslav@0
   229
				for (int i=0; i<countMenus(); i++)
jaroslav@0
   230
					gen = gen+((XelfiDesignComponent)getMenu(i)).generateCode(XFDesignConstants.GEN_INIT);
jaroslav@0
   231
				break;
jaroslav@0
   232
		}
jaroslav@0
   233
		return gen;
jaroslav@0
   234
	}
jaroslav@0
   235
jaroslav@0
   236
	public void loadFromStream (DataInput stream) 
jaroslav@0
   237
		throws IOException {
jaroslav@0
   238
		remove(0); // removes the initialised "Empty" menu
jaroslav@0
   239
		name = stream.readUTF();		
jaroslav@0
   240
//		setFont(XFontPropertyType.loadFromStream(stream));
jaroslav@0
   241
//		parentFont = XBooleanPropertyType.loadBFromStream(stream);
jaroslav@0
   242
		int count = stream.readInt();
jaroslav@0
   243
		for (int i=0; i<count; i++) {
jaroslav@0
   244
			XMenuFolder xmn = new XMenuFolder();
jaroslav@0
   245
			xmn.setParentForm(parentForm);
jaroslav@0
   246
			xmn.loadFromStream(stream);
jaroslav@0
   247
			add(xmn);
jaroslav@0
   248
		}
jaroslav@0
   249
	}
jaroslav@0
   250
	
jaroslav@0
   251
	public void saveToStream (DataOutput stream)
jaroslav@0
   252
		throws IOException {
jaroslav@0
   253
		stream.writeUTF(name);
jaroslav@0
   254
//		XFontPropertyType.saveToStream(getFont(), stream);
jaroslav@0
   255
//		XBooleanPropertyType.saveToStream(parentFont, stream);
jaroslav@0
   256
		int count = countMenus();
jaroslav@0
   257
		stream.writeInt(count);
jaroslav@0
   258
		for (int i=0; i<count; i++) {
jaroslav@0
   259
			XMenuFolder xmn = (XMenuFolder)getMenu(i);
jaroslav@0
   260
			xmn.saveToStream(stream);
jaroslav@0
   261
		}
jaroslav@0
   262
	}
jaroslav@0
   263
jaroslav@0
   264
	public boolean parentUpdate () {
jaroslav@0
   265
		return false;
jaroslav@0
   266
	}
jaroslav@0
   267
jaroslav@0
   268
	public void setSelection(int aSelection) {
jaroslav@0
   269
	}
jaroslav@0
   270
jaroslav@0
   271
	public int getSelection() {
jaroslav@0
   272
		return XFDesignConstants.SEL_UNSELECT;
jaroslav@0
   273
	}
jaroslav@0
   274
jaroslav@0
   275
  /**
jaroslav@0
   276
   * Private method that invokes Menu Editor.
jaroslav@0
   277
  */
jaroslav@0
   278
  private void invokeME () {
jaroslav@0
   279
    // get the reference to ME
jaroslav@0
   280
    XelfiMenuEditor me = TopLevel.getMenuEditor();
jaroslav@0
   281
    if (me==null) {
jaroslav@0
   282
      // strange - toplevel should not be null
jaroslav@0
   283
			Debug.debug(Debug.MENU, "!! Menu Editor reference is null - can't show ME");
jaroslav@0
   284
      return;
jaroslav@0
   285
    }
jaroslav@0
   286
    if (me.getMenu()!=this) {
jaroslav@0
   287
      // set ourself into ME
jaroslav@0
   288
      me.setMenu(this);
jaroslav@0
   289
			// set our parent form as target for visually created menu
jaroslav@0
   290
			if (parentForm instanceof Frame)
jaroslav@0
   291
				me.setTarget((Frame)parentForm);
jaroslav@0
   292
			else
jaroslav@0
   293
				Debug.debug(Debug.MENU, "Error: parentForm of the Menubar is not a Frame");
jaroslav@0
   294
    }
jaroslav@0
   295
		// show or focus Menu Editor
jaroslav@0
   296
    if (!((Component)me).isVisible()) {
jaroslav@0
   297
      ((Component)me).show();
jaroslav@0
   298
    } else {
jaroslav@0
   299
      ((Component)me).requestFocus();
jaroslav@0
   300
		}
jaroslav@0
   301
  }
jaroslav@0
   302
jaroslav@0
   303
	/**
jaroslav@0
   304
	 * Refreshes content of menu editor.
jaroslav@0
   305
	*/
jaroslav@0
   306
	private void refreshME () {
jaroslav@0
   307
    // get the reference to ME
jaroslav@0
   308
    XelfiMenuEditor me = TopLevel.getMenuEditor();
jaroslav@0
   309
    if (me==null) return;
jaroslav@0
   310
		me.refresh();
jaroslav@0
   311
	}
jaroslav@0
   312
jaroslav@0
   313
}