/**
 *                                                                            
 *  Copyright (c) 2011, 2016 - Loetz GmbH&Co.KG (69115 Heidelberg, Germany) 
 *                                                                            
 *  All rights reserved. This program and the accompanying materials           
 *  are made available under the terms of the Eclipse Public License v1.0       
 *  which accompanies this distribution, and is available at                  
 *  http://www.eclipse.org/legal/epl-v10.html                                 
 *                                                                            
 *  Contributors:                                                      
 * 	   Christophe Loetz (Loetz GmbH&Co.KG) - initial implementation
 * 
 */ 
package org.eclipse.osbp.authentication.account.actions noCommandProvider {
	
	command newItem describedBy "create new item" keyBinding "CTRL ALT N" dialogAction New

	command saveItem describedBy "save item" keyBinding "CTRL ALT S" dialogAction Save

	command deleteItem describedBy "delete item" keyBinding "CTRL ALT D" dialogAction Delete

	command cancelItem describedBy "undo changes" keyBinding "CTRL ALT Z" dialogAction Cancel

	command saveAndNew describedBy "save and new" keyBinding "CTRL ALT A" dialogAction SaveAndNew

	command saveAsNew describedBy "save as" keyBinding "CTRL ALT F" dialogAction SaveAsNew

	command databaseInfo describedBy "database info" keyBinding "CTRL ALT I" userinterfaceAction Info

	toolbar Dialog describedBy "Toolbar for Dialogs" items {
		item newItem command newItem icon "dsnew"
		item saveItem command saveItem icon "dssave"
		item deleteItem command deleteItem icon "dsdelete"
		item cancelItem command cancelItem icon "dscancel"
		item saveAndNew command saveAndNew icon "dssaveandnew"
		item saveAsNew command saveAsNew icon "dssaveasnew"
		item databaseInfo command databaseInfo icon "dbinfo"
	} 
}