/*******************************************************************************
* Copyright (c) 2010, 2012 IBM Corporation, Gerhardt Informatics Kft. and others.
* 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:
* IBM Corporation - initial API and implementation
* Gerhardt Informatics Kft. - GEFGWT port
*******************************************************************************/
package org.eclipse.swt.widgets;
import org.eclipse.swt.SWT;
import org.eclipse.swt.SWTException;
/**
* Instances of this class represent the system task bar.
*
* <dl>
* <dt><b>Styles:</b></dt>
* <dd>(none)</dd>
* <dt><b>Events:</b></dt>
* <dd>(none)</dd>
* </dl>
*
* @see Display#getSystemTaskBar
* @see <a href="http://www.eclipse.org/swt/">Sample code and further
* information</a>
*
* @since 3.6
*
* @noextend This class is not intended to be subclassed by clients.
*/
public class TaskBar extends Widget {
int itemCount;
TaskItem[] items = new TaskItem[4];
TaskBar(Display display, int style) {
if (display == null)
display = Display.getCurrent();
if (display == null)
display = Display.getDefault();
if (!display.isValidThread()) {
error(SWT.ERROR_THREAD_INVALID_ACCESS);
}
this.display = display;
reskinWidget();
}
void createItem(TaskItem item, int index) {
if (index == -1)
index = itemCount;
if (!(0 <= index && index <= itemCount))
error(SWT.ERROR_INVALID_RANGE);
if (itemCount == items.length) {
TaskItem[] newItems = new TaskItem[items.length + 4];
System.arraycopy(items, 0, newItems, 0, items.length);
items = newItems;
}
System.arraycopy(items, index, items, index + 1, itemCount++ - index);
items[index] = item;
}
void createItems() {
}
void destroyItem(TaskItem item) {
int index = 0;
while (index < itemCount) {
if (items[index] == item)
break;
index++;
}
if (index == itemCount)
return;
System.arraycopy(items, index + 1, items, index, --itemCount - index);
items[itemCount] = null;
}
/**
* Returns the item at the given, zero-relative index in the receiver.
* Throws an exception if the index is out of range.
*
* @param index
* the index of the item to return
* @return the item at the given index
*
* @exception IllegalArgumentException
* <ul>
* <li>ERROR_INVALID_RANGE - if the index is not between 0
* and the number of elements in the list minus 1 (inclusive)
* </li>
* </ul>
* @exception SWTException
* <ul>
* <li>ERROR_WIDGET_DISPOSED - if the receiver has been
* disposed</li>
* <li>ERROR_THREAD_INVALID_ACCESS - if not called from the
* thread that created the receiver</li>
* </ul>
*/
public TaskItem getItem(int index) {
checkWidget();
createItems();
if (!(0 <= index && index < itemCount))
error(SWT.ERROR_INVALID_RANGE);
return items[index];
}
/**
* Returns the number of items contained in the receiver.
*
* @return the number of items
*
* @exception SWTException
* <ul>
* <li>ERROR_WIDGET_DISPOSED - if the receiver has been
* disposed</li>
* <li>ERROR_THREAD_INVALID_ACCESS - if not called from the
* thread that created the receiver</li>
* </ul>
*/
public int getItemCount() {
checkWidget();
createItems();
return itemCount;
}
/**
* Returns the <code>TaskItem</code> for the given <code>Shell</code> or the
* <code>TaskItem</code> for the application if the <code>Shell</code>
* parameter is <code>null</code>. If the requested item is not supported by
* the platform it returns <code>null</code>.
*
* @param shell
* the shell for which the task item is requested, or null to
* request the application item
* @return the task item for the given shell or the application
*
* @exception SWTException
* <ul>
* <li>ERROR_WIDGET_DISPOSED - if the receiver has been
* disposed</li>
* <li>ERROR_THREAD_INVALID_ACCESS - if not called from the
* thread that created the receiver</li>
* </ul>
*/
public TaskItem getItem(Shell shell) {
checkWidget();
return null;
}
/**
* Returns an array of <code>TaskItem</code>s which are the items in the
* receiver.
* <p>
* Note: This is not the actual structure used by the receiver to maintain
* its list of items, so modifying the array will not affect the receiver.
* </p>
*
* @return the items in the receiver
*
* @exception SWTException
* <ul>
* <li>ERROR_WIDGET_DISPOSED - if the receiver has been
* disposed</li>
* <li>ERROR_THREAD_INVALID_ACCESS - if not called from the
* thread that created the receiver</li>
* </ul>
*/
public TaskItem[] getItems() {
checkWidget();
createItems();
TaskItem[] result = new TaskItem[itemCount];
System.arraycopy(items, 0, result, 0, result.length);
return result;
}
void releaseChildren(boolean destroy) {
if (items != null) {
for (int i = 0; i < items.length; i++) {
TaskItem item = items[i];
if (item != null && !item.isDisposed()) {
item.release(false);
}
}
items = null;
}
super.releaseChildren(destroy);
}
void releaseParent() {
super.releaseParent();
}
void reskinChildren(int flags) {
if (items != null) {
for (int i = 0; i < items.length; i++) {
TaskItem item = items[i];
if (item != null)
item.reskin(flags);
}
}
super.reskinChildren(flags);
}
}