/*******************************************************************************
* Copyright (c) Emil Crumhorn - Hexapixel.com - emil.crumhorn@gmail.com
* 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:
* emil.crumhorn@gmail.com - initial API and implementation
* ziogiannigmail.com - Bug 464509 - Minute View Implementation
*******************************************************************************/
package org.eclipse.nebula.widgets.ganttchart;
import java.util.ArrayList;
import java.util.Calendar;
import java.util.List;
import java.util.Locale;
import java.util.Random;
import java.util.prefs.Preferences;
import org.eclipse.nebula.widgets.ganttchart.themes.ColorThemeGrayBlue;
import org.eclipse.nebula.widgets.ganttchart.themes.ColorThemeHighContrastBlack;
import org.eclipse.nebula.widgets.ganttchart.themes.ColorThemeSilver;
import org.eclipse.nebula.widgets.ganttchart.themes.ColorThemeWindowsBlue;
import org.eclipse.nebula.widgets.ganttchart.undoredo.UndoRedoListenerAdapter;
import org.eclipse.swt.SWT;
import org.eclipse.swt.custom.SashForm;
import org.eclipse.swt.custom.ScrolledComposite;
import org.eclipse.swt.custom.ViewForm;
import org.eclipse.swt.events.MouseEvent;
import org.eclipse.swt.events.SelectionAdapter;
import org.eclipse.swt.events.SelectionEvent;
import org.eclipse.swt.graphics.GC;
import org.eclipse.swt.graphics.Image;
import org.eclipse.swt.graphics.ImageData;
import org.eclipse.swt.graphics.ImageLoader;
import org.eclipse.swt.graphics.PaletteData;
import org.eclipse.swt.graphics.Point;
import org.eclipse.swt.graphics.RGB;
import org.eclipse.swt.graphics.Rectangle;
import org.eclipse.swt.layout.FillLayout;
import org.eclipse.swt.layout.GridData;
import org.eclipse.swt.layout.GridLayout;
import org.eclipse.swt.widgets.Button;
import org.eclipse.swt.widgets.Combo;
import org.eclipse.swt.widgets.Composite;
import org.eclipse.swt.widgets.Control;
import org.eclipse.swt.widgets.Display;
import org.eclipse.swt.widgets.Event;
import org.eclipse.swt.widgets.FileDialog;
import org.eclipse.swt.widgets.Group;
import org.eclipse.swt.widgets.Label;
import org.eclipse.swt.widgets.Listener;
import org.eclipse.swt.widgets.Menu;
import org.eclipse.swt.widgets.MenuItem;
import org.eclipse.swt.widgets.Monitor;
import org.eclipse.swt.widgets.Shell;
import org.eclipse.swt.widgets.Spinner;
import org.eclipse.swt.widgets.TabFolder;
import org.eclipse.swt.widgets.TabItem;
import org.eclipse.swt.widgets.Table;
import org.eclipse.swt.widgets.TableItem;
import org.eclipse.swt.widgets.Text;
public class GanttTester {
private GanttChart _ganttChart;
private GanttComposite _ganttComposite;
private final ViewForm _vfChart;
private Text _timerText;
private Button _bUseSections;
private Button _bUseSectionsRight;
private Button _bUseSectionsLeft;
private Button _bDrawHorizontalLines;
private Button _bIncreaseDates;
private Button _bCreate;
private Button _bCreatePlannedDates;
private Button _bShowHolidays;
private Button _bUndo;
private Button _bRedo;
private Button _bRandomEventLength;
private Button _bConnectEvents;
private Button _bRandomColors;
private Button _bRandomEventColors;
private Button _bDNDLimits;
private Button _bRandomPercentCompletes;
private Button _bGanttPhases;
private Button _bSpecialDateRange;
private Button _bRandomRowHeights;
private Button _bRandomEventVLoc;
private Button _bRandomEventTextHLocation;
private Button _bRandomEventTextVLocation;
private Button _bUseDDay;
private Button _bLockHeader;
private Button _bMoveOnlyLaterLinkedEvents;
private Button _bClear;
private Button _bRedraw;
private Button _bHeavyRedraw;
private Button _bSaveFull;
private Button _bRandomImage;
private Combo _vDNDCombo;
private Combo _eventCountCombo;
private Combo _themeCombo;
private Combo _scrollCombo;
private Combo _selCombo;
private Combo _localeCombo;
private Spinner _sMaxSections;
private Spinner _sConnectionCountNumber;
// advanced tab
private Button _bEnableAutoScroll;
private Button _bEventResizing;
private Button _bEventDND;
private Button _bAdjustForLetters;
private Combo _bConnectionLineStyle;
private Button _bShowArrows;
private Button _bShowBoldScopeText;
private Button _bShowGradientEventBars;
private Button _bShowOnlyDependenciesForSelectedItems;
private Button _bShowTooltips;
private Button _bShowAdvancedTooltips;
private Button _bEnableZooming;
private Button _bShowZoomLevelBox;
private Button _bAllowBlankAreaDragAndDropToMoveDates;
private Button _bAllowVerticalBlankDnd;
private Button _bFlipBlankAreaDragDirection;
private Button _bDrawSelectionMarkerAroundSelectedEvent;
private Button _bAllowCheckpointResizing;
private Button _bStartCalendarOnFirstDayOfWeek;
private Button _bDrawFullPercentageBar;
private Button _bDrawLockedDateMarks;
private Button _bShowDateTipsOnScrolling;
private Button _bZoomToMousePointerDateOnWheelZooming;
private Button _bScaleImageToDay;
private Button _bAllowArrowKeysToMoveChart;
private Button _bCreateSpecialRangesWithAllowNoEvents;
private Table _tEventLog;
private Listener _undoRedoListener;
private Preferences _prefs = Preferences.systemNodeForPackage(GanttTester.class);
private static final String KEY = "prefKey";
/**
* @param args
*/
public static void main(final String[] args) {
new GanttTester();
}
public GanttTester() {
final Display display = Display.getDefault(); //new Display();
final Monitor m = display.getMonitors()[0];
final Shell shell = new Shell(display);
shell.setText("GanttChart Test Application");
shell.setLayout(new FillLayout());
final SashForm sfVSplit = new SashForm(shell, SWT.VERTICAL);
final SashForm sfHSplit = new SashForm(sfVSplit, SWT.HORIZONTAL);
final ViewForm vfBottom = new ViewForm(sfVSplit, SWT.NONE);
_vfChart = new ViewForm(sfHSplit, SWT.NONE);
final ViewForm rightForm = new ViewForm(sfHSplit, SWT.NONE);
final ScrolledComposite sc = new ScrolledComposite(rightForm, SWT.V_SCROLL | SWT.H_SCROLL);
rightForm.setContent(sc);
sc.setExpandHorizontal(true);
sc.setExpandVertical(true);
sc.getVerticalBar().setPageIncrement(150);
final Composite rightComposite = new Composite(sc, SWT.NONE);
final GridLayout gl = new GridLayout();
gl.marginLeft = 0;
gl.marginTop = 0;
gl.horizontalSpacing = 0;
gl.verticalSpacing = 0;
gl.marginBottom = 0;
gl.marginHeight = 0;
gl.marginWidth = 0;
rightComposite.setLayout(gl);
sc.setContent(rightComposite);
rightComposite.addListener(SWT.Resize, new Listener() {
public void handleEvent(final Event event) {
sc.setMinSize(rightComposite.computeSize(SWT.DEFAULT, SWT.DEFAULT));
}
});
sfVSplit.setWeights(new int[] { 91, 9 });
sfHSplit.setWeights(new int[] { 70, 30 });
// top left side
_ganttChart = new GanttChart(_vfChart, SWT.MULTI);
_vfChart.setContent(_ganttChart);
_ganttComposite = _ganttChart.getGanttComposite();
final TabFolder tfRight = new TabFolder(rightComposite, SWT.BORDER);
final TabItem tiGeneral = new TabItem(tfRight, SWT.NONE);
tiGeneral.setText("Creation");
final TabItem tiAdvanced = new TabItem(tfRight, SWT.NONE);
tiAdvanced.setText("Advanced");
final TabItem tiEventLog = new TabItem(tfRight, SWT.NONE);
tiEventLog.setText("Event Log");
final Composite bottom = new Composite(rightComposite, SWT.NONE);
bottom.setLayout(new GridLayout());
createCreateButtons(bottom);
vfBottom.setContent(createBottom(vfBottom));
tiGeneral.setControl(createCreationTab(tfRight)); // NOPMD
tiAdvanced.setControl(createAdvancedTab(tfRight));
tiEventLog.setControl(createEventLogTab(tfRight));
shell.setMaximized(true);
// uncomment to put on right-hand-side monitor
shell.setLocation(new Point(m.getClientArea().x, 0));
sc.setMinSize(rightComposite.computeSize(SWT.DEFAULT, SWT.DEFAULT));
shell.open();
while (!shell.isDisposed()) {
if (!display.readAndDispatch()) {
display.sleep();
}
}
display.removeListener(SWT.KeyDown, _undoRedoListener);
shell.dispose();
}
private Composite createEventLogTab(final Composite parent) {
final ScrolledComposite sc = new ScrolledComposite(parent, SWT.V_SCROLL | SWT.H_SCROLL);
sc.setExpandHorizontal(true);
sc.setExpandVertical(true);
sc.getHorizontalBar().setPageIncrement(100);
sc.getVerticalBar().setPageIncrement(100);
final Composite comp = new Composite(sc, SWT.NONE);
sc.setContent(comp);
comp.setLayout(new GridLayout(1, true));
sc.addListener(SWT.Resize, new Listener() {
public void handleEvent(final Event event) {
sc.setMinSize(comp.computeSize(SWT.DEFAULT, SWT.DEFAULT));
}
});
final Group group = new Group(comp, SWT.NONE);
group.setText("Event Log");
group.setLayout(new FillLayout());
group.setLayoutData(new GridData(GridData.FILL_BOTH));
_tEventLog = new Table(group, SWT.BORDER | SWT.V_SCROLL | SWT.H_SCROLL | SWT.MULTI | SWT.FULL_SELECTION);
_tEventLog.setBackground(ColorCache.getWhite());
Menu m = new Menu(_tEventLog);
MenuItem mClear = new MenuItem(m, SWT.NONE);
mClear.setText("Clear Log");
mClear.addListener(SWT.Selection, new Listener() {
public void handleEvent(Event event) {
_tEventLog.removeAll();
}
});
_tEventLog.setMenu(m);
return sc;
}
private Composite createAdvancedTab(final Composite parent) {
final ScrolledComposite sc = new ScrolledComposite(parent, SWT.V_SCROLL | SWT.H_SCROLL);
sc.setExpandHorizontal(true);
sc.setExpandVertical(true);
sc.getHorizontalBar().setPageIncrement(100);
sc.getVerticalBar().setPageIncrement(100);
final Composite comp = new Composite(sc, SWT.NONE);
sc.setContent(comp);
comp.setLayout(new GridLayout(1, true));
sc.addListener(SWT.Resize, new Listener() {
public void handleEvent(final Event event) {
sc.setMinSize(comp.computeSize(SWT.DEFAULT, SWT.DEFAULT));
}
});
final Group group = new Group(comp, SWT.NONE);
group.setText("Advanced");
group.setLayout(new GridLayout(2, true));
group.setLayoutData(new GridData(GridData.FILL_HORIZONTAL));
GridData oneRow = new GridData(GridData.FILL_HORIZONTAL);
oneRow.horizontalSpan = 2;
oneRow.grabExcessHorizontalSpace = true;
_bEnableAutoScroll = new Button(group, SWT.CHECK);
_bEnableAutoScroll.setText("Enable Auto Scroll");
_bEnableAutoScroll.setToolTipText("Causes chart to auto scroll when using DND. On by default.");
_bEnableAutoScroll.setSelection(true);
_bEnableAutoScroll.setLayoutData(oneRow);
_bEnableAutoScroll.setData(KEY, "enableAutoScroll");
prefLoad(_bEnableAutoScroll);
prefHook(_bEnableAutoScroll);
_bEventResizing = new Button(group, SWT.CHECK);
_bEventResizing.setText("Allow Event Resizing");
_bEventResizing.setToolTipText("Allows for resizing of events. On by default.");
_bEventResizing.setSelection(true);
_bEventResizing.setLayoutData(oneRow);
_bEventResizing.setData(KEY, "bEventResizing");
prefLoad(_bEventResizing);
prefHook(_bEventResizing);
_bEventDND = new Button(group, SWT.CHECK);
_bEventDND.setText("Allow Event Drag n Drop (DND)");
_bEventDND.setToolTipText("Allows for dragging of events. On by default.");
_bEventDND.setSelection(true);
_bEventDND.setLayoutData(oneRow);
_bEventDND.setData(KEY, "bEventDND");
prefLoad(_bEventDND);
prefHook(_bEventDND);
_bAdjustForLetters = new Button(group, SWT.CHECK);
_bAdjustForLetters.setText("Adjust Spacing For Letters");
_bAdjustForLetters.setToolTipText("When letters are drawn anywhere in the header they are auto-adjusted to fit in nicely. On by default.");
_bAdjustForLetters.setSelection(true);
_bAdjustForLetters.setLayoutData(oneRow);
_bAdjustForLetters.setData(KEY, "bAdjustForLetters");
prefLoad(_bAdjustForLetters);
prefHook(_bAdjustForLetters);
final Label lConn = new Label(group, SWT.NONE);
lConn.setText("Connecting Line Style");
_bConnectionLineStyle = new Combo(group, SWT.READ_ONLY);
_bConnectionLineStyle.add("Right to Left");
_bConnectionLineStyle.add("Right to Top");
_bConnectionLineStyle.add("MS Project Style");
_bConnectionLineStyle.add("Birds Path");
_bConnectionLineStyle.select(2);
_bConnectionLineStyle.setData(KEY, "bConnectionLineStyle");
_bConnectionLineStyle.setToolTipText("How the connecting line is drawn. Default is MS Project Style");
prefLoad(_bConnectionLineStyle);
prefHook(_bConnectionLineStyle);
_bShowArrows = new Button(group, SWT.CHECK);
_bShowArrows.setText("Show Arrows");
_bShowArrows.setToolTipText("Arrowheads on/off. Default is on.");
_bShowArrows.setSelection(true);
_bShowArrows.setLayoutData(oneRow);
_bShowArrows.setData(KEY, "bShowArrows");
prefLoad(_bShowArrows);
prefHook(_bShowArrows);
_bShowBoldScopeText = new Button(group, SWT.CHECK);
_bShowBoldScopeText.setText("Show Bold Scope Text");
_bShowBoldScopeText.setToolTipText("Scope Text is Bold. Default is on.");
_bShowBoldScopeText.setSelection(true);
_bShowBoldScopeText.setLayoutData(oneRow);
_bShowBoldScopeText.setData(KEY, "bShowBoldScopeText");
prefLoad(_bShowBoldScopeText);
prefHook(_bShowBoldScopeText);
_bShowGradientEventBars = new Button(group, SWT.CHECK);
_bShowGradientEventBars.setText("Show Gradient Event Bars");
_bShowGradientEventBars.setToolTipText("Gradient Events On/Off. Default is on. (If off only 1 color is used)");
_bShowGradientEventBars.setSelection(true);
_bShowGradientEventBars.setLayoutData(oneRow);
_bShowGradientEventBars.setData(KEY, "bShowGradientEventBars");
prefLoad(_bShowGradientEventBars);
prefHook(_bShowGradientEventBars);
_bShowOnlyDependenciesForSelectedItems = new Button(group, SWT.CHECK);
_bShowOnlyDependenciesForSelectedItems.setText("Show Only Dependencies for Selected Items");
_bShowOnlyDependenciesForSelectedItems.setToolTipText("Shows only dependency arrows when items are selected and the selected event has connections/dependencies to other events. Default is off.");
_bShowOnlyDependenciesForSelectedItems.setSelection(false);
_bShowOnlyDependenciesForSelectedItems.setLayoutData(oneRow);
_bShowOnlyDependenciesForSelectedItems.setData(KEY, "bShowOnlyDependenciesForSelectedItems");
prefLoad(_bShowOnlyDependenciesForSelectedItems);
prefHook(_bShowOnlyDependenciesForSelectedItems);
_bShowTooltips = new Button(group, SWT.CHECK);
_bShowTooltips.setText("Show Tooltips");
_bShowTooltips.setToolTipText("Tooltips on/off. Default is on.");
_bShowTooltips.setSelection(true);
_bShowTooltips.setLayoutData(oneRow);
_bShowTooltips.setData(KEY, "bShowTooltips");
prefLoad(_bShowTooltips);
prefHook(_bShowTooltips);
_bShowAdvancedTooltips = new Button(group, SWT.CHECK);
_bShowAdvancedTooltips.setText("Use Advanced Tooltips");
_bShowAdvancedTooltips.setToolTipText("Advanced Tooltips on/off. Default is on.");
_bShowAdvancedTooltips.setSelection(true);
_bShowAdvancedTooltips.setLayoutData(oneRow);
_bShowAdvancedTooltips.setData(KEY, "bShowAdvancedTooltips");
prefLoad(_bShowAdvancedTooltips);
prefHook(_bShowAdvancedTooltips);
_bEnableZooming = new Button(group, SWT.CHECK);
_bEnableZooming.setText("Enable Zooming");
_bEnableZooming.setToolTipText("Whether chart can be zoomed / zoomed out. Default is on.");
_bEnableZooming.setSelection(true);
_bEnableZooming.setLayoutData(oneRow);
_bEnableZooming.setData(KEY, "bEnableZooming");
prefLoad(_bEnableZooming);
prefHook(_bEnableZooming);
_bShowZoomLevelBox = new Button(group, SWT.CHECK);
_bShowZoomLevelBox.setText("Show Zoom-Level Box When Zooming");
_bShowZoomLevelBox.setToolTipText("Box that shows what zoom level is currently being zoomed to on/off. Default is on.");
_bShowZoomLevelBox.setSelection(true);
_bShowZoomLevelBox.setLayoutData(oneRow);
_bShowZoomLevelBox.setData(KEY, "bShowZoomLevelBox");
prefLoad(_bShowZoomLevelBox);
prefHook(_bShowZoomLevelBox);
_bZoomToMousePointerDateOnWheelZooming = new Button(group, SWT.CHECK);
_bZoomToMousePointerDateOnWheelZooming.setText("Zoom In/Out To Mouse Pointer");
_bZoomToMousePointerDateOnWheelZooming.setToolTipText("When zooming the chart will try to keep the focus on the date where the mouse pointer is when the zoom happens. Default is on.");
_bZoomToMousePointerDateOnWheelZooming.setSelection(true);
_bZoomToMousePointerDateOnWheelZooming.setLayoutData(oneRow);
_bZoomToMousePointerDateOnWheelZooming.setData(KEY, "bZoomToMousePointerDateOnWheelZooming");
prefLoad(_bZoomToMousePointerDateOnWheelZooming);
prefHook(_bZoomToMousePointerDateOnWheelZooming);
_bAllowBlankAreaDragAndDropToMoveDates = new Button(group, SWT.CHECK);
_bAllowBlankAreaDragAndDropToMoveDates.setText("Allow Horizontal Blank Area DND to Move Chart");
_bAllowBlankAreaDragAndDropToMoveDates.setToolTipText("When you grab a blank area of the chart and drag it, the chart will move in the drag direction horizontally. Default is on.");
_bAllowBlankAreaDragAndDropToMoveDates.setSelection(true);
_bAllowBlankAreaDragAndDropToMoveDates.setLayoutData(oneRow);
_bAllowBlankAreaDragAndDropToMoveDates.setData(KEY, "bAllowBlankAreaDragAndDropToMoveDates");
prefLoad(_bAllowBlankAreaDragAndDropToMoveDates);
prefHook(_bAllowBlankAreaDragAndDropToMoveDates);
_bAllowVerticalBlankDnd = new Button(group, SWT.CHECK);
_bAllowVerticalBlankDnd.setText("Allow Vertical Blank Area DND to Move Chart)");
_bAllowVerticalBlankDnd.setToolTipText("When you grab a blank area of the chart and drag it, the chart will move in the drag direction vertically. Default is off.");
_bAllowVerticalBlankDnd.setSelection(false);
_bAllowVerticalBlankDnd.setLayoutData(oneRow);
_bAllowVerticalBlankDnd.setData(KEY, "bAllowVerticalBlankDnd");
prefLoad(_bAllowVerticalBlankDnd);
prefHook(_bAllowVerticalBlankDnd);
_bFlipBlankAreaDragDirection = new Button(group, SWT.CHECK);
_bFlipBlankAreaDragDirection.setText("Flip Blank Area DND Direction");
_bFlipBlankAreaDragDirection.setToolTipText("This will invert the X-axis of the direction the chart is scrolling when blank-area drag and dropping (natural to most people). Default is on.");
_bFlipBlankAreaDragDirection.setSelection(true);
_bFlipBlankAreaDragDirection.setLayoutData(oneRow);
_bFlipBlankAreaDragDirection.setData(KEY, "bFlipBlankAreaDragDirection");
prefLoad(_bFlipBlankAreaDragDirection);
prefHook(_bFlipBlankAreaDragDirection);
_bDrawSelectionMarkerAroundSelectedEvent = new Button(group, SWT.CHECK);
_bDrawSelectionMarkerAroundSelectedEvent.setText("Draw Selection Marker Around Selected Events");
_bDrawSelectionMarkerAroundSelectedEvent.setToolTipText("This will draw a selection marker (dotted line) around selected events. Default is on.");
_bDrawSelectionMarkerAroundSelectedEvent.setSelection(true);
_bDrawSelectionMarkerAroundSelectedEvent.setLayoutData(oneRow);
_bDrawSelectionMarkerAroundSelectedEvent.setData(KEY, "bDrawSelectionMarkerAroundSelectedEvent");
prefLoad(_bDrawSelectionMarkerAroundSelectedEvent);
prefHook(_bDrawSelectionMarkerAroundSelectedEvent);
_bAllowCheckpointResizing = new Button(group, SWT.CHECK);
_bAllowCheckpointResizing.setText("Allow Checkpoint Resizing");
_bAllowCheckpointResizing.setToolTipText("This will allow for resizing of events marked as checkpoints. Default is false.");
_bAllowCheckpointResizing.setSelection(false);
_bAllowCheckpointResizing.setLayoutData(oneRow);
_bAllowCheckpointResizing.setData(KEY, "bAllowCheckpointResizing");
prefLoad(_bAllowCheckpointResizing);
prefHook(_bAllowCheckpointResizing);
_bStartCalendarOnFirstDayOfWeek = new Button(group, SWT.CHECK);
_bStartCalendarOnFirstDayOfWeek.setText("Start Calendar on First Day of Week");
_bStartCalendarOnFirstDayOfWeek.setToolTipText("This will force calendar to start on the first day of the week of whatever the root calendar is. Default is false.");
_bStartCalendarOnFirstDayOfWeek.setSelection(false);
_bStartCalendarOnFirstDayOfWeek.setLayoutData(oneRow);
_bStartCalendarOnFirstDayOfWeek.setData(KEY, "bStartCalendarOnFirstDayOfWeek");
prefLoad(_bStartCalendarOnFirstDayOfWeek);
prefHook(_bStartCalendarOnFirstDayOfWeek);
_bDrawFullPercentageBar = new Button(group, SWT.CHECK);
_bDrawFullPercentageBar.setText("Draw Full Percentage Bar");
_bDrawFullPercentageBar.setToolTipText("Percentage bar is filled in beyond the percentage complete value (assuming it's less than 100%) to fill out the entire event. Default is on.");
_bDrawFullPercentageBar.setSelection(true);
_bDrawFullPercentageBar.setLayoutData(oneRow);
_bDrawFullPercentageBar.setData(KEY, "bDrawFullPercentageBar");
prefLoad(_bDrawFullPercentageBar);
prefHook(_bDrawFullPercentageBar);
_bDrawLockedDateMarks = new Button(group, SWT.CHECK);
_bDrawLockedDateMarks.setText("Draw Locked Date Marks");
_bDrawLockedDateMarks.setToolTipText("Whether locked date-range events (min / max dates) draw a bounding area or markers showing where the span starts/ends. Default is on.");
_bDrawLockedDateMarks.setSelection(true);
_bDrawLockedDateMarks.setLayoutData(oneRow);
_bDrawLockedDateMarks.setData(KEY, "bDrawLockedDateMarks");
prefLoad(_bDrawLockedDateMarks);
prefHook(_bDrawLockedDateMarks);
_bShowDateTipsOnScrolling = new Button(group, SWT.CHECK);
_bShowDateTipsOnScrolling.setText("Show Date Tips on Scrolling");
_bShowDateTipsOnScrolling.setToolTipText("Whether date tips (tooltips) are shown when scrolling around to indicate what dates the user is viewing. Default is on.");
_bShowDateTipsOnScrolling.setSelection(true);
_bShowDateTipsOnScrolling.setLayoutData(oneRow);
_bShowDateTipsOnScrolling.setData(KEY, "bShowDateTipsOnScrolling");
prefLoad(_bShowDateTipsOnScrolling);
prefHook(_bShowDateTipsOnScrolling);
_bScaleImageToDay = new Button(group, SWT.CHECK);
_bScaleImageToDay.setText("Scale Images To (Minimum) Width Of One Day");
_bScaleImageToDay.setToolTipText("Whether images should be scaled to the width of one day or if they can exceed one day. Default is on.");
_bScaleImageToDay.setSelection(true);
_bScaleImageToDay.setLayoutData(oneRow);
_bScaleImageToDay.setData(KEY, "bScaleImageToDay");
prefLoad(_bScaleImageToDay);
prefHook(_bScaleImageToDay);
_bAllowArrowKeysToMoveChart = new Button(group, SWT.CHECK);
_bAllowArrowKeysToMoveChart.setText("Allow Arrow Keys To Scroll Chart");
_bAllowArrowKeysToMoveChart.setToolTipText("Whether arrow keys can scroll the chart left/right/up/down (like navigating with scrollbars). Default is off.");
_bAllowArrowKeysToMoveChart.setSelection(false);
_bAllowArrowKeysToMoveChart.setLayoutData(oneRow);
_bAllowArrowKeysToMoveChart.setData(KEY, "bAllowArrowKeysToMoveChart");
prefLoad(_bAllowArrowKeysToMoveChart);
prefHook(_bAllowArrowKeysToMoveChart);
_bCreateSpecialRangesWithAllowNoEvents = new Button(group, SWT.CHECK);
_bCreateSpecialRangesWithAllowNoEvents.setText("Don't Allow Events on Special Date Ranges");
_bCreateSpecialRangesWithAllowNoEvents.setToolTipText("Whether special date ranges will not allow drag and drop or resizing over them. Default is off.");
_bCreateSpecialRangesWithAllowNoEvents.setSelection(false);
_bCreateSpecialRangesWithAllowNoEvents.setLayoutData(oneRow);
_bCreateSpecialRangesWithAllowNoEvents.setData(KEY, "bCreateSpecialRangesWithAllowNoEvents");
prefLoad(_bCreateSpecialRangesWithAllowNoEvents);
prefHook(_bCreateSpecialRangesWithAllowNoEvents);
return sc;
}
private Composite createCreationTab(final Composite parent) {
final ScrolledComposite sc = new ScrolledComposite(parent, SWT.V_SCROLL | SWT.H_SCROLL);
sc.setExpandHorizontal(true);
sc.setExpandVertical(true);
sc.getHorizontalBar().setPageIncrement(100);
sc.getVerticalBar().setPageIncrement(100);
final Composite comp = new Composite(sc, SWT.NONE);
sc.setContent(comp);
comp.setLayout(new GridLayout(1, true));
sc.addListener(SWT.Resize, new Listener() {
public void handleEvent(final Event event) {
sc.setMinSize(comp.computeSize(SWT.DEFAULT, SWT.DEFAULT));
}
});
final Group gGeneral = new Group(comp, SWT.NONE);
gGeneral.setText("General");
gGeneral.setLayout(new GridLayout(2, true));
gGeneral.setLayoutData(new GridData(GridData.FILL_HORIZONTAL));
final Label lEvents = new Label(gGeneral, SWT.NONE);
lEvents.setText("Number of Events");
_eventCountCombo = new Combo(gGeneral, SWT.NONE);
_eventCountCombo.add("2");
_eventCountCombo.add("10");
_eventCountCombo.add("20");
_eventCountCombo.add("50");
_eventCountCombo.add("100");
_eventCountCombo.add("300");
_eventCountCombo.add("600");
_eventCountCombo.add("1000");
_eventCountCombo.add("2000");
_eventCountCombo.add("3000");
_eventCountCombo.add("4000");
_eventCountCombo.add("5000");
_eventCountCombo.select(3);
_eventCountCombo.setToolTipText("Number of events to create");
_eventCountCombo.setLayoutData(new GridData(GridData.FILL_HORIZONTAL));
_eventCountCombo.setData(KEY, "eventCountCombo");
prefLoad(_eventCountCombo);
prefHook(_eventCountCombo);
final Label lTheme = new Label(gGeneral, SWT.NONE);
lTheme.setText("Color Theme");
_themeCombo = new Combo(gGeneral, SWT.READ_ONLY);
_themeCombo.add("Blue");
_themeCombo.add("Silver");
_themeCombo.add("Gray Blue");
_themeCombo.add("High Contrast (Black)");
_themeCombo.select(0);
_themeCombo.setData(KEY, "themeCombo");
prefLoad(_themeCombo);
prefHook(_themeCombo);
final Label lLocale = new Label(gGeneral, SWT.NONE);
lLocale.setText("Locale");
_localeCombo = new Combo(gGeneral, SWT.READ_ONLY);
Locale[] all = Locale.getAvailableLocales();
int sel = 0;
for (int i = 0; i < all.length; i++) {
_localeCombo.add(all[i].toString());
if (all[i].equals(Locale.getDefault())) {
sel = i;
}
}
_localeCombo.select(sel);
_localeCombo.setData(KEY, "localeCombo");
prefLoad(_localeCombo);
prefHook(_localeCombo);
final Group gLeft = new Group(comp, SWT.NONE);
gLeft.setLayout(new GridLayout(1, true));
gLeft.setText("Styles and Options");
gLeft.setLayoutData(new GridData(GridData.FILL_HORIZONTAL));
final Composite flagComp1 = new Composite(gLeft, SWT.NONE);
final GridLayout gl1 = new GridLayout(1, true);
gl1.marginWidth = 0;
flagComp1.setLayout(gl1);
_scrollCombo = new Combo(flagComp1, SWT.READ_ONLY);
_scrollCombo.add("No H Scrollbar (H_SCROLL_NONE)");
_scrollCombo.add("Fixed H Scrollbar (H_SCROLL_FIXED)");
_scrollCombo.add("Infinite H Scrollbar (H_SCROLL_INFINITE)");
_scrollCombo.select(1);
_scrollCombo.setData(KEY, "scrollCombo");
prefLoad(_scrollCombo);
prefHook(_scrollCombo);
_selCombo = new Combo(flagComp1, SWT.READ_ONLY);
_selCombo.add("Single select (SWT.SINGLE)");
_selCombo.add("Multi select (SWT.MULTI)");
_selCombo.select(1);
_selCombo.setData(KEY, "selCombo");
prefLoad(_selCombo);
prefHook(_selCombo);
_vDNDCombo = new Combo(flagComp1, SWT.READ_ONLY);
_vDNDCombo.add("Vertical DND - Off");
_vDNDCombo.add("Vertical DND - Any");
_vDNDCombo.add("Vertical DND - Between Sections Only");
_vDNDCombo.select(1);
_vDNDCombo.setData(KEY, "vDNDCombo");
prefLoad(_vDNDCombo);
prefHook(_vDNDCombo);
_bIncreaseDates = new Button(gLeft, SWT.CHECK);
_bIncreaseDates.setText("Increase Dates");
_bIncreaseDates.setSelection(true);
_bIncreaseDates.setToolTipText("Automatically increases the date for each subesquently created event");
_bIncreaseDates.setData(KEY, "bIncreaseDates");
prefLoad(_bIncreaseDates);
prefHook(_bIncreaseDates);
_bCreatePlannedDates = new Button(gLeft, SWT.CHECK);
_bCreatePlannedDates.setText("Create Planned Dates");
_bCreatePlannedDates.setSelection(true);
_bCreatePlannedDates.setToolTipText("Creates planned dates for each event");
_bCreatePlannedDates.setData(KEY, "bCreatePlannedDates");
prefLoad(_bCreatePlannedDates);
prefHook(_bCreatePlannedDates);
_bDrawHorizontalLines = new Button(gLeft, SWT.CHECK);
_bDrawHorizontalLines.setText("Draw Horizontal Event Divider Lines");
_bDrawHorizontalLines.setToolTipText("Draws horizontal lines between events at the location of the height of the row where the event lives");
_bDrawHorizontalLines.setData(KEY, "bDrawHorizontalLines");
prefLoad(_bDrawHorizontalLines);
prefHook(_bDrawHorizontalLines);
_bShowHolidays = new Button(gLeft, SWT.CHECK);
_bShowHolidays.setText("Show Holidays");
_bShowHolidays.setSelection(false);
_bShowHolidays.setToolTipText("Draw Holidays in Chart");
_bShowHolidays.setData(KEY, "bShowHolidays");
prefLoad(_bShowHolidays);
prefHook(_bShowHolidays);
final Group sections = new Group(gLeft, SWT.NONE);
sections.setText("Use GanttSections");
final GridLayout sectionLayout = new GridLayout(2, true);
sections.setLayout(sectionLayout);
_bUseSections = new Button(sections, SWT.CHECK);
_bUseSections.setText("Use GanttSections");
_bUseSections.setData(KEY, "bUseSections");
_bUseSections.setSelection(true);
prefLoad(_bUseSections);
prefHook(_bUseSections);
final GridData oneRow = new GridData();
oneRow.horizontalSpan = 2;
_bUseSections.setLayoutData(oneRow);
_bUseSectionsLeft = new Button(sections, SWT.RADIO);
_bUseSectionsLeft.setText("Left Side");
_bUseSectionsLeft.setToolTipText("Creates the section bar on the left");
_bUseSectionsLeft.setSelection(true);
_bUseSectionsLeft.setData(KEY, "bUseSectionsLeft");
prefLoad(_bUseSectionsLeft);
prefHook(_bUseSectionsLeft);
_bUseSectionsRight = new Button(sections, SWT.RADIO);
_bUseSectionsRight.setText("Right Side");
_bUseSectionsRight.setToolTipText("Creates the section bar on the right");
_bUseSectionsRight.setData(KEY, "bUseSectionsRight");
prefLoad(_bUseSectionsRight);
prefHook(_bUseSectionsRight);
final Label lMaxSections = new Label(gLeft, SWT.LEFT);
lMaxSections.setText("Max number of sections (0 = infinite)");
_sMaxSections = new Spinner(gLeft, SWT.BORDER);
_bRandomEventLength = new Button(gLeft, SWT.CHECK);
_bRandomEventLength.setText("Random event length (+2-10 days)");
_bRandomEventLength.setToolTipText("Makes events take a random length");
_bRandomEventLength.setData(KEY, "bRandomEventLength");
prefLoad(_bRandomEventLength);
prefHook(_bRandomEventLength);
_bConnectEvents = new Button(gLeft, SWT.CHECK);
_bConnectEvents.setText("Connect events");
_bConnectEvents.setSelection(true);
_bConnectEvents.setText("Connects events up to the number defined in the spinner below");
_bConnectEvents.setData(KEY, "bConnectEvents");
prefLoad(_bConnectEvents);
prefHook(_bConnectEvents);
_sConnectionCountNumber = new Spinner(gLeft, SWT.BORDER);
_sConnectionCountNumber.setSelection(50);
_sConnectionCountNumber.setMaximum(10000);
_sConnectionCountNumber.setToolTipText("Number of events that should be connected\n(Very large numbers is not suggested)");
_sConnectionCountNumber.setData(KEY, "sConnectionCountNumber");
prefLoad(_sConnectionCountNumber);
prefHook(_sConnectionCountNumber);
_bRandomColors = new Button(gLeft, SWT.CHECK);
_bRandomColors.setText("Random Connection Colors");
_bRandomColors.setToolTipText("Uses random colors for connecting events");
_bRandomColors.setData(KEY, "bRandomColors");
prefLoad(_bRandomColors);
prefHook(_bRandomColors);
_bRandomEventColors = new Button(gLeft, SWT.CHECK);
_bRandomEventColors.setText("Random Event Colors");
_bRandomEventColors.setToolTipText("Uses random colors for filling events");
_bRandomEventColors.setData(KEY, "bRandomEventColors");
prefLoad(_bRandomEventColors);
prefHook(_bRandomEventColors);
_bDNDLimits = new Button(gLeft, SWT.CHECK);
_bDNDLimits.setText("Random Date Range Limitations");
_bDNDLimits.setSelection(true);
_bDNDLimits.setToolTipText("Creates limits that dates cannot be resized/dragged beyond");
_bDNDLimits.setData(KEY, "bDNDLimits");
prefLoad(_bDNDLimits);
prefHook(_bDNDLimits);
_bRandomPercentCompletes = new Button(gLeft, SWT.CHECK);
_bRandomPercentCompletes.setText("Random Percent Completes");
_bRandomPercentCompletes.setToolTipText("Creates random percent completes from 0 to 100 on each event");
_bRandomPercentCompletes.setSelection(true);
_bRandomPercentCompletes.setData(KEY, "bRandomPercentCompletes");
prefLoad(_bRandomPercentCompletes);
prefHook(_bRandomPercentCompletes);
/* final Button bRandomEventHeights = new Button(gLeft, SWT.CHECK);
bRandomEventHeights.setText("Random Event Heights (eventHeight to 100)");
bRandomEventHeights.setToolTipText("Creates random event heights for each event between the range of [defaultEventHeight] to 100");
*/
_bGanttPhases = new Button(gLeft, SWT.CHECK);
_bGanttPhases.setText("Gantt Phases");
_bGanttPhases.setToolTipText("Creates some GanttPhase examples");
_bGanttPhases.setSelection(true);
_bGanttPhases.setData(KEY, "bGanttPhases");
prefLoad(_bGanttPhases);
prefHook(_bGanttPhases);
_bSpecialDateRange = new Button(gLeft, SWT.CHECK);
_bSpecialDateRange.setText("Special Date Range (random colors)");
_bSpecialDateRange.setToolTipText("Creates one Special Date Range as Example (with random colors)");
_bSpecialDateRange.setSelection(false);
_bSpecialDateRange.setData(KEY, "bSpecialDateRange");
prefLoad(_bSpecialDateRange);
prefHook(_bSpecialDateRange);
_bRandomImage = new Button(gLeft, SWT.CHECK);
_bRandomImage.setText("Random Images");
_bRandomImage.setToolTipText("Create some events with image");
_bRandomImage.setSelection(false);
_bRandomImage.setData(KEY, "bRandomImage");
prefLoad(_bRandomImage);
prefHook(_bRandomImage);
final Group internal = new Group(gLeft, SWT.CHECK);
internal.setLayout(new GridLayout(1, false));
_bRandomRowHeights = new Button(internal, SWT.CHECK);
_bRandomRowHeights.setText("Random Row Heights (rowHeight to 100)");
_bRandomRowHeights.setToolTipText("Creates random row heights for each event between the range of [defaultEventHeight] to 100");
_bRandomRowHeights.setData(KEY, "bRandomRowHeights");
prefLoad(_bRandomRowHeights);
prefHook(_bRandomRowHeights);
_bRandomEventVLoc = new Button(internal, SWT.CHECK);
_bRandomEventVLoc.setText("Random Event Vertical Location");
_bRandomEventVLoc.setToolTipText("Creates random location for each event one of (SWT.TOP, SWT.CENTER, SWT.BOTTOM)");
_bRandomEventVLoc.setEnabled(false);
_bRandomEventVLoc.setData(KEY, "bRandomEventVLoc");
prefLoad(_bRandomEventVLoc);
prefHook(_bRandomEventVLoc);
_bRandomEventTextHLocation = new Button(internal, SWT.CHECK);
_bRandomEventTextHLocation.setText("Random Event Horizontal Text Location");
_bRandomEventTextHLocation.setToolTipText("Creates random event Text location for each event one of (SWT.LEFT, SWT.CENTER, SWT.RIGHT)");
_bRandomEventTextHLocation.setEnabled(false);
_bRandomEventTextHLocation.setData(KEY, "bRandomEventTextHLocation");
prefLoad(_bRandomEventTextHLocation);
prefHook(_bRandomEventTextHLocation);
_bRandomEventTextVLocation = new Button(internal, SWT.CHECK);
_bRandomEventTextVLocation.setText("Random Event Vertical Text Location");
_bRandomEventTextVLocation.setToolTipText("Creates random event Text location for each event one of (SWT.TOP, SWT.CENTER, SWT.BOTTOM)");
_bRandomEventTextVLocation.setEnabled(false);
_bRandomEventTextVLocation.setData(KEY, "bRandomEventTextVLocation");
prefLoad(_bRandomEventTextVLocation);
prefHook(_bRandomEventTextVLocation);
_bRandomRowHeights.addListener(SWT.Selection, new Listener() {
public void handleEvent(final Event event) {
_bRandomEventVLoc.setEnabled(_bRandomRowHeights.getSelection());
_bRandomEventTextHLocation.setEnabled(_bRandomRowHeights.getSelection());
_bRandomEventTextVLocation.setEnabled(_bRandomRowHeights.getSelection());
}
});
_bUseDDay = new Button(gLeft, SWT.CHECK);
_bUseDDay.setText("D-Day chart");
_bUseDDay.setData(KEY, "bUseDDay");
prefLoad(_bUseDDay);
prefHook(_bUseDDay);
_bLockHeader = new Button(gLeft, SWT.CHECK);
_bLockHeader.setText("Lock Header");
_bLockHeader.setToolTipText("Locks the header so that it is always shown regardless of vertical scroll");
_bLockHeader.setData(KEY, "bLockHeader");
prefLoad(_bLockHeader);
prefHook(_bLockHeader);
_bMoveOnlyLaterLinkedEvents = new Button(gLeft, SWT.CHECK);
_bMoveOnlyLaterLinkedEvents.setSelection(true);
_bMoveOnlyLaterLinkedEvents.setText("Move/Resize Only 'Older' Linked Events");
_bMoveOnlyLaterLinkedEvents.setToolTipText("When moving/resizing linked events, this flag ensures that only older events than the ones being dragged are moved/resized");
_bMoveOnlyLaterLinkedEvents.setData(KEY, "bMoveOnlyLaterLinkedEvents");
prefLoad(_bMoveOnlyLaterLinkedEvents);
prefHook(_bMoveOnlyLaterLinkedEvents);
_bConnectEvents.addListener(SWT.Selection, new Listener() {
public void handleEvent(final Event event) {
_sConnectionCountNumber.setEnabled(_bConnectEvents.getSelection());
_bRandomColors.setEnabled(_bConnectEvents.getSelection());
}
});
Group timerGroup = new Group(comp, SWT.NONE);
timerGroup.setLayout(new GridLayout(1, true));
timerGroup.setLayoutData(new GridData(GridData.FILL_HORIZONTAL));
timerGroup.setText("Redraw Stats");
_timerText = new Text(timerGroup, SWT.BORDER | SWT.READ_ONLY);
_timerText.setBackground(Display.getDefault().getSystemColor(SWT.COLOR_LIST_BACKGROUND));
_timerText.setLayoutData(new GridData(GridData.FILL_HORIZONTAL));
_undoRedoListener = new Listener() {
public void handleEvent(final Event event) {
if ((event.stateMask & SWT.MOD1) != 0 && (event.keyCode == 'z' || event.keyCode == 'Z')) {
_ganttComposite.getUndoRedoManager().undo();
}
if ((event.stateMask & SWT.MOD1) != 0 && (event.keyCode == 'y' || event.keyCode == 'Y')) {
_ganttComposite.getUndoRedoManager().redo();
}
}
};
Display.getDefault().addFilter(SWT.KeyDown, _undoRedoListener);
return sc;
}
private void createButtonClicked() {
final long time1 = System.currentTimeMillis();
_ganttComposite.getVerticalBar().setPageIncrement(200);
_ganttComposite.getUndoRedoManager().clear();
int numberEvents = 0;
try {
numberEvents = Integer.parseInt(_eventCountCombo.getText());
} catch (NumberFormatException nfe) {
return;
}
// _ganttComposite.clearChart();
_ganttChart.dispose();
int flags = 0;
switch (_scrollCombo.getSelectionIndex()) {
case 0:
flags |= GanttFlags.H_SCROLL_NONE;
break;
case 1:
flags |= GanttFlags.H_SCROLL_FIXED_RANGE;
break;
case 2:
flags |= GanttFlags.H_SCROLL_INFINITE;
break;
default:
break;
}
switch (_selCombo.getSelectionIndex()) {
case 0:
flags |= SWT.SINGLE;
break;
case 1:
flags |= SWT.MULTI;
break;
default:
break;
}
IColorManager color = new ColorThemeWindowsBlue();
if (_themeCombo.getSelectionIndex() == 1) {
color = new ColorThemeSilver();
} else if (_themeCombo.getSelectionIndex() == 2) {
color = new ColorThemeGrayBlue();
} else if (_themeCombo.getSelectionIndex() == 3) {
color = new ColorThemeHighContrastBlack();
}
final ISettings toUse = new TestSettings();
_ganttChart = new GanttChart(_vfChart, flags, toUse, color);
_ganttComposite = _ganttChart.getGanttComposite();
_ganttComposite.getUndoRedoManager().addUndoRedoListener(new UndoRedoListenerAdapter() {
public void canRedoChanged(final boolean canRedo) {
_bRedo.setEnabled(canRedo);
}
public void canUndoChanged(final boolean canUndo) {
_bUndo.setEnabled(canUndo);
}
});
_vfChart.setContent(_ganttChart);
_ganttChart.addGanttEventListener(new IGanttEventListener() {
public void eventDoubleClicked(final GanttEvent event, final MouseEvent me) {
eventLog("Doubleclicked '" + event + "'");
final Shell shell = new Shell(Display.getDefault(), SWT.TITLE | SWT.CLOSE | SWT.MIN | SWT.ON_TOP | SWT.APPLICATION_MODAL);
shell.setLocation(Display.getDefault().getBounds().width * 1 / 5, Display.getDefault().getBounds().height * 1 / 3);
shell.setSize(350, 200);
final String dialogTitle = event.getName();
shell.setText(dialogTitle);
shell.open();
}
public void eventHeaderSelected(Calendar newlySelectedDate, List allSelectedDates) {
eventLog("Header date selected: " + newlySelectedDate.getTime() + ". Now a total of " + allSelectedDates.size() + " header date(s) selected.");
}
public void eventMovedToNewSection(GanttEvent event, GanttSection oldSection, GanttSection newSection) {
eventLog("Eveent'" + event + "' was moved from GanttSection '" + oldSection.getName() + "' to '" +newSection.getName() +"'");
}
public void eventPropertiesSelected(List events) {
eventLog("Properties was selected on '" + events + "'");
}
public void eventReordered(GanttEvent event) {
eventLog("Event '" + event + "' was reordered");
}
public void eventsDeleteRequest(List events, MouseEvent mouseEvent) {
eventLog("Events '" + events + "' were requested to be deleted");
for (int i = 0; i < events.size(); i++) {
((GanttEvent)events.get(i)).dispose();
}
}
public void eventSelected(GanttEvent event, List allSelectedEvents, MouseEvent mouseEvent) {
eventLog("Event '" + event + "' was selected. " + allSelectedEvents.size() + " event(s) are now selected in total.");
}
public void eventsMoved(List events, MouseEvent mouseEvent) {
eventLog("Events '" + events + "' were moved");
}
public void eventsMoveFinished(List events, MouseEvent mouseEvent) {
eventLog("Events '" + events + "' were finished moving");
}
public void eventsResized(List events, MouseEvent mouseEvent) {
eventLog("Events '" + events + "' were resized");
}
public void eventsResizeFinished(List events, MouseEvent mouseEvent) {
eventLog("Events '" + events + "' were finished resizing");
}
public void lastDraw(GC gc) {
}
public void phaseMoved(GanttPhase phase, MouseEvent mouseEvent) {
eventLog("Phase '" + phase.getTitle() + "' was moved");
}
public void phaseMoveFinished(GanttPhase phase, MouseEvent mouseEvent) {
eventLog("Phase '" + phase.getTitle() + "' finished moving");
}
public void phaseResized(GanttPhase phase, MouseEvent mouseEvent) {
eventLog("Phase '" + phase.getTitle() + "' was resized");
}
public void phaseResizeFinished(GanttPhase phase, MouseEvent mouseEvent) {
eventLog("Phase '" + phase.getTitle() + "' finished resizing");
}
public void zoomedIn(int newZoomLevel) {
eventLog("Zoomed in, zoom level is now: " + newZoomLevel);
}
public void zoomedOut(int newZoomLevel) {
eventLog("Zoomed out, zoom level is now: " + newZoomLevel);
}
public void zoomReset() {
eventLog("Zoomed level was reset");
}
public void eventsDroppedOrResizedOntoUnallowedDateRange(List events, GanttSpecialDateRange range) {
eventLog("Events '" + events + "' were dropped or resized over special range '" + range + "' that does not allow events on its dates");
}
});
final Random r = new Random();
GanttSection parent = null;
int sectionCount = 1;
int lastSectionEventCount = 0;
if (_bUseSections.getSelection() && (_bUseSectionsLeft.getSelection() || _bUseSectionsRight.getSelection())) {
parent = new GanttSection(_ganttChart, "Section " + sectionCount);
}
if (_bGanttPhases.getSelection()) {
Calendar phaseRoot = Calendar.getInstance();
if (_bUseDDay.getSelection()) {
phaseRoot = toUse.getDDayRootCalendar();
}
final Calendar x = (Calendar) phaseRoot.clone();
x.add(Calendar.DATE, 10);
new GanttPhase(_ganttChart, phaseRoot, x, "Testing");
x.add(Calendar.DATE, 10);
final Calendar x2 = (Calendar) phaseRoot.clone();
x2.add(Calendar.DATE, 30);
new GanttPhase(_ganttChart, x, x2, "Something Much Longer");
}
if (_bSpecialDateRange.getSelection()) {
Calendar start = Calendar.getInstance();
Calendar end = Calendar.getInstance();
if (_bUseDDay.getSelection()) {
start = (Calendar) toUse.getDDayRootCalendar().clone();
end = (Calendar) toUse.getDDayRootCalendar().clone();
}
end.add(Calendar.DATE, 50);
final GanttSpecialDateRange range = new GanttSpecialDateRange(_ganttChart, start, end);
range.setFrequency(_bUseDDay.getSelection() ? GanttSpecialDateRange.REPEAT_DDAY : GanttSpecialDateRange.REPEAT_WEEKLY);
if (_bUseDDay.getSelection()) {
range.setDDayRepeatInterval(10);
} else {
range.addRecurDay(Calendar.WEDNESDAY);
}
range.setRecurCount(50);
range.setBackgroundColorTop(ColorCache.getRandomColor());
range.setBackgroundColorBottom(ColorCache.getRandomColor());
if (_bCreateSpecialRangesWithAllowNoEvents.getSelection()) {
range.setAllowEventsOnDates(false);
}
}
for (int i = 0; i < numberEvents; i++) {
Calendar cal = Calendar.getInstance();
if (_bUseDDay.getSelection()) {
cal = (Calendar) toUse.getDDayRootCalendar().clone();
}
GanttEvent predEvent = null;
if (i != 0) {
predEvent = ((GanttEvent) _ganttComposite.getEvents().get(i - 1));
cal = predEvent.getActualEndDate();
}
final Calendar cStartDate = cal;
if (_bRandomEventLength.getSelection()) {
cStartDate.add(Calendar.DATE, r.nextInt(5));
}
final Calendar cEndDate = (Calendar) cStartDate.clone();
if (_bIncreaseDates.getSelection()) {
cEndDate.add(Calendar.DATE, _bRandomEventLength.getSelection() ? r.nextInt(10) + 1 : 1);
}
GanttEvent ganttEvent = null;
if (_bCreatePlannedDates.getSelection()) {
final Calendar plannedStart = (Calendar) cStartDate.clone();
plannedStart.add(Calendar.DATE, _bRandomEventLength.getSelection() ? -(r.nextInt(10) + 1) : -10);
final Calendar plannedEnd = (Calendar) cEndDate.clone();
plannedEnd.add(Calendar.DATE, _bRandomEventLength.getSelection() ? (r.nextInt(10) + 1) : 10);
ganttEvent = new GanttEvent(_ganttChart, null, "Event " + (i + 1), plannedStart, plannedEnd, cStartDate, cEndDate, 0);
} else {
ganttEvent = new GanttEvent(_ganttChart, null, "Event " + (i + 1), cStartDate, cEndDate, 0);
}
if (_bRandomPercentCompletes.getSelection()) {
ganttEvent.setPercentComplete(r.nextInt(100));
}
if (_bUseSections.getSelection() && (_bUseSectionsLeft.getSelection() || _bUseSectionsRight.getSelection())) {
boolean reachedMax = false;
if (_sMaxSections.getSelection() != 0) {
reachedMax = sectionCount >= _sMaxSections.getSelection();
}
if (lastSectionEventCount != 0 && !reachedMax) {
if (r.nextInt(2) == 1) {
sectionCount++;
parent = new GanttSection(_ganttChart, "Section " + sectionCount);
parent.addGanttEvent(ganttEvent);
lastSectionEventCount = 0;
} else {
parent.addGanttEvent(ganttEvent);
lastSectionEventCount++;
}
} else {
parent.addGanttEvent(ganttEvent);
lastSectionEventCount++;
}
}
if (_bRandomEventColors.getSelection()) {
ganttEvent.setStatusColor(ColorCache.getColor(r.nextInt(255), r.nextInt(255), r.nextInt(255)));
ganttEvent.setGradientStatusColor(ColorCache.getColor(r.nextInt(255), r.nextInt(255), r.nextInt(255)));
}
if (_bRandomRowHeights.getSelection()) {
int height = r.nextInt(100);
if (height < _ganttChart.getSettings().getEventHeight()) {
height = _ganttChart.getSettings().getEventHeight();
}
ganttEvent.setFixedRowHeight(height);
if (_bRandomEventTextHLocation.getSelection()) {
int loc = -1;
switch (r.nextInt(3)) {
case 0:
loc = SWT.LEFT;
break;
case 1:
loc = SWT.CENTER;
break;
case 2:
loc = SWT.RIGHT;
break;
default:
break;
}
ganttEvent.setHorizontalTextLocation(loc);
}
if (_bRandomEventTextVLocation.getSelection()) {
int loc = -1;
switch (r.nextInt(3)) {
case 0:
loc = SWT.TOP;
break;
case 1:
loc = SWT.CENTER;
break;
case 2:
loc = SWT.BOTTOM;
break;
default:
break;
}
ganttEvent.setVerticalTextLocation(loc);
}
if (_bRandomEventVLoc.getSelection()) {
int loc = -1;
switch (r.nextInt(3)) {
case 0:
loc = SWT.TOP;
break;
case 1:
loc = SWT.CENTER;
break;
case 2:
loc = SWT.BOTTOM;
break;
default:
break;
}
ganttEvent.setVerticalEventAlignment(loc);
}
}
if (_bRandomImage.getSelection() && r.nextInt(5) == 0) {
PaletteData palette = new PaletteData (new RGB [] {Display.getDefault().getSystemColor(SWT.COLOR_WHITE).getRGB(), Display.getDefault().getSystemColor(SWT.COLOR_BLUE).getRGB()});
ImageData sourceData = new ImageData (16, 16, 1, palette);
sourceData.transparentPixel = 0;
final Image image = new Image(Display.getDefault(), sourceData);
final Rectangle rect = image.getBounds();
GC gc = new GC(image);
gc.setAntialias(SWT.ON);
gc.setBackground(Display.getDefault().getSystemColor(SWT.COLOR_BLUE));
gc.fillOval(rect.x, rect.y, rect.width, rect.height);
gc.dispose();
ganttEvent.setImage(true);
ganttEvent.setPicture(image);
ganttEvent.setEndDate(ganttEvent.getStartDate());
}
if (_bDNDLimits.getSelection()) {
final Calendar noBefore = Calendar.getInstance();
noBefore.setTime(cStartDate.getTime());
noBefore.add(Calendar.DATE, -(r.nextInt(10) + 2));
if (r.nextInt(2) == 1) {
ganttEvent.setNoMoveBeforeDate(noBefore);
}
final Calendar noBeyond = Calendar.getInstance();
noBeyond.setTime(cEndDate.getTime());
noBeyond.add(Calendar.DATE, r.nextInt(10) + 2);
if (r.nextInt(2) == 1) {
ganttEvent.setNoMoveAfterDate(noBeyond);
}
}
if (_bConnectEvents.getSelection() && i < _sConnectionCountNumber.getSelection()) {
if (_bRandomColors.getSelection()) {
_ganttComposite.addConnection(predEvent, ganttEvent, ColorCache.getColor(r.nextInt(255), r.nextInt(255), r.nextInt(255)));
} else {
_ganttComposite.addConnection(predEvent, ganttEvent);
}
}
}
if(_bShowHolidays.getSelection()) {
Calendar start = Calendar.getInstance();
Calendar end = Calendar.getInstance();
for(int i = 0; i < _ganttComposite.getEvents().size(); i++) {
GanttEvent event = (GanttEvent) _ganttComposite.getEvents().get(i);
if(event.getActualStartDate().before(start)) {
start = event.getActualStartDate();
}
if(event.getActualEndDate().after(end)) {
end = event.getActualEndDate();
}
}
List<Holiday> holidays = new ArrayList<Holiday>();
Calendar day = Calendar.getInstance();
day.setTime(start.getTime());
int i = 1;
while(day.before(end)) {
day.add(Calendar.DATE, 5 + r.nextInt(5));
int dow = day.get(Calendar.DAY_OF_WEEK);
if (dow != Calendar.SATURDAY && dow != Calendar.SUNDAY) {
Calendar date = (Calendar) day.clone();
holidays.add(new Holiday(date, "Special free Day " + i++));
}
}
_ganttComposite.setHolidays(holidays.toArray(new Holiday[holidays.size()]));
}
final long time2 = System.currentTimeMillis();
_timerText.setText("Initial chart creation took " + (time2 - time1) + " ms");
eventLog("Initial chart creation took " + (time2 - time1) + " ms");
moveFocus();
Display.getDefault().asyncExec(new Runnable() {
public void run() {
if (_ganttChart.isDisposed()) { return; }
_ganttChart.getVerticalBar().setPageIncrement(350);
}
});
}
private void createCreateButtons(final Composite parent) {
final Group buttons = new Group(parent, SWT.NONE);
buttons.setText("Any changes to above requires a new 'Create'");
buttons.setLayout(new GridLayout(2, true));
final GridData buttonData = new GridData();
buttonData.grabExcessHorizontalSpace = true;
buttons.setLayoutData(buttonData);
_bCreate = new Button(buttons, SWT.PUSH);
_bCreate.setText("&Create");
_bCreate.setLayoutData(new GridData(GridData.FILL_HORIZONTAL));
_bCreate.setToolTipText("Creates a new chart");
_bClear = new Button(buttons, SWT.PUSH);
_bClear.setText("Clear");
_bClear.setLayoutData(new GridData(GridData.FILL_HORIZONTAL));
_bClear.setToolTipText("Clears all events from the chart");
_bRedraw = new Button(buttons, SWT.PUSH);
_bRedraw.setText("Normal Redraw");
_bRedraw.setLayoutData(new GridData(GridData.FILL_HORIZONTAL));
_bRedraw.setToolTipText("Forces a normal redraw which the chart does whenever something minor has changed");
_bHeavyRedraw = new Button(buttons, SWT.PUSH);
_bHeavyRedraw.setText("Heavy Redraw");
_bHeavyRedraw.setToolTipText("You should never have to use a heavy redraw. If you need to because of something not doing what it is supposed to it is most likely a bug\n\nAlso note that the results of using this may not be the same as when the chart calls this method itself");
_bHeavyRedraw.setLayoutData(new GridData(GridData.FILL_HORIZONTAL));
_bSaveFull = new Button(buttons, SWT.PUSH);
_bSaveFull.setText("Save Full Image");
_bSaveFull.setToolTipText("Saves an image of the chart, the entire chart, and nothing but the chart");
_bSaveFull.setLayoutData(new GridData(GridData.FILL_HORIZONTAL));
_bSaveFull.addListener(SWT.Selection, new Listener() {
public void handleEvent(final Event event) {
final Image full = _ganttComposite.getFullImage();
final FileDialog fd = new FileDialog(Display.getDefault().getActiveShell(), SWT.SAVE);
fd.setFilterExtensions(new String[] { ".jpg" });
fd.setFilterNames(new String[] { "JPG File" });
fd.setFileName("img.jpg");
final String path = fd.open();
if (path == null) { return; }
final ImageLoader imageLoader = new ImageLoader();
imageLoader.data = new ImageData[] { full.getImageData() };
imageLoader.save(path, SWT.IMAGE_JPEG);
}
});
_bHeavyRedraw.addListener(SWT.Selection, new Listener() {
public void handleEvent(final Event event) {
final long time1 = System.currentTimeMillis();
//long nano1 = System.nanoTime();
_ganttComposite.heavyRedraw();
final long time2 = System.currentTimeMillis();
//long nano2 = System.nanoTime();
_timerText.setText("Heavy redraw took " + (time2 - time1) + " ms");
eventLog("Heavy redraw took " + (time2 - time1) + " ms");
}
});
_bCreate.addSelectionListener(new SelectionAdapter() {
public void widgetSelected(final SelectionEvent e) {
createButtonClicked();
}
});
_bClear.addSelectionListener(new SelectionAdapter() {
public void widgetSelected(final SelectionEvent e) {
_ganttComposite.clearChart();
moveFocus();
}
});
_bRedraw.addSelectionListener(new SelectionAdapter() {
public void widgetSelected(final SelectionEvent e) {
final long time1 = System.currentTimeMillis();
//long nano1 = System.nanoTime();
_ganttComposite.refresh();
final long time2 = System.currentTimeMillis();
//long nano2 = System.nanoTime();
_timerText.setText("Redraw took " + (time2 - time1) + " ms");
eventLog("Redraw took " + (time2 - time1) + " ms");
moveFocus();
}
});
}
/**
* Hooks a control to have state saved automatically when it changes
*
* @param ctrl Control to state save
*/
private void prefHook(final Control ctrl) {
final Object obj = ctrl.getData(KEY);
if (obj == null) {
System.err.println("Control " + ctrl + " does not have a key set on it!"); // NOPMD
return;
}
final String keyName = obj.toString();
if (ctrl instanceof Spinner) {
((Spinner) ctrl).addListener(SWT.Selection, new Listener() {
public void handleEvent(Event event) {
_prefs.putInt(keyName, ((Spinner) ctrl).getSelection());
}
});
} else if (ctrl instanceof Button) {
((Button) ctrl).addListener(SWT.Selection, new Listener() {
public void handleEvent(Event event) {
_prefs.put(keyName, ((Button) ctrl).getSelection() ? "true" : "false");
}
});
} else if (ctrl instanceof Text) {
((Text) ctrl).addListener(SWT.Modify, new Listener() {
public void handleEvent(Event event) {
_prefs.put(keyName, ((Text) ctrl).getText());
}
});
} else if (ctrl instanceof Combo) {
((Combo) ctrl).addListener(SWT.Selection, new Listener() {
public void handleEvent(Event event) {
_prefs.putInt(keyName, ((Combo) ctrl).getSelectionIndex());
}
});
}
}
/**
* Loads a saved preference onto a control
*
* @param ctrl Control to load preference onto
*/
private void prefLoad(final Control ctrl) {
final Object obj = ctrl.getData(KEY);
if (obj == null) { return; }
final String keyName = obj.toString();
if (ctrl instanceof Spinner) {
int old = _prefs.getInt(keyName, -1);
if (old == -1) { return; }
((Spinner) ctrl).setSelection(old);
} else if (ctrl instanceof Button) {
String old = _prefs.get(keyName, null);
if (old == null) { return; }
((Button) ctrl).setSelection(Boolean.valueOf(old).booleanValue());
} else if (ctrl instanceof Text) {
String old = _prefs.get(keyName, null);
if (old == null) { return; }
((Text) ctrl).setText(old);
} else if (ctrl instanceof Combo) {
int old = _prefs.getInt(keyName, -1);
if (old == -1) { return; }
((Combo) ctrl).select(old);
}
}
public int getVerticalDNDStyle() {
switch (_vDNDCombo.getSelectionIndex()) {
case 0:
return VerticalDragModes.NO_VERTICAL_DRAG;
case 1:
return VerticalDragModes.ANY_VERTICAL_DRAG;
case 2:
return VerticalDragModes.CROSS_SECTION_VERTICAL_DRAG;
default:
break;
}
return VerticalDragModes.NO_VERTICAL_DRAG;
}
private Composite createBottom(final Composite parent) {
final ScrolledComposite sc = new ScrolledComposite(parent, SWT.V_SCROLL | SWT.H_SCROLL);
sc.setExpandHorizontal(true);
sc.setExpandVertical(true);
final Composite outer = new Composite(sc, SWT.NONE);
sc.setContent(outer);
outer.setLayout(new GridLayout(1, true));
sc.addListener(SWT.Resize, new Listener() {
public void handleEvent(final Event event) {
sc.setMinSize(outer.computeSize(SWT.DEFAULT, SWT.DEFAULT));
}
});
final Group comp = new Group(outer, SWT.NONE);
comp.setText("Gantt Chart Operations");
comp.setLayoutData(new GridData(GridData.FILL_BOTH));
comp.setLayout(new GridLayout(10, false));
final Button bJumpEarliest = new Button(comp, SWT.PUSH);
bJumpEarliest.setText("Jump to earliest event");
final Button bJumpLatest = new Button(comp, SWT.PUSH);
bJumpLatest.setText("Jump to latest event");
final Button bSelectFirstEvent = new Button(comp, SWT.PUSH);
bSelectFirstEvent.setText("Show first event");
final Button bSelectMidEvent = new Button(comp, SWT.PUSH);
bSelectMidEvent.setText("Show middle event");
final Button bSelectLastEvent = new Button(comp, SWT.PUSH);
bSelectLastEvent.setText("Show last event");
final Button bJumpToCurrentTimeLeft = new Button(comp, SWT.PUSH);
bJumpToCurrentTimeLeft.setText("Today [Left]");
final Button bJumpToCurrentTimeCenter = new Button(comp, SWT.PUSH);
bJumpToCurrentTimeCenter.setText("Today [Center]");
final Button bJumpToCurrentTimeRight = new Button(comp, SWT.PUSH);
bJumpToCurrentTimeRight.setText("Today [Right]");
final Button bMoveEventsLeft = new Button(comp, SWT.PUSH);
bMoveEventsLeft.setText("Move -1");
final Button bMoveEventsRight = new Button(comp, SWT.PUSH);
bMoveEventsRight.setText("Move +1");
final Button zIn = new Button(comp, SWT.PUSH);
final Button zOut = new Button(comp, SWT.PUSH);
zIn.setText("Zoom In");
zOut.setText("Zoom Out");
final Button bShowPlanned = new Button(comp, SWT.PUSH);
bShowPlanned.setText("Toggle Planned Dates");
final Button bShowDays = new Button(comp, SWT.PUSH);
bShowDays.setText("Toggle Dates On Events");
final Button bSetDate = new Button(comp, SWT.PUSH);
bSetDate.setText("Set Date Randomly (+-10)");
bSetDate.setToolTipText("Sets the date randomly to a date +-10 days from the leftmost date of the chart");
_bUndo = new Button(comp, SWT.PUSH);
_bUndo.setText("Undo (CTRL+z)");
_bUndo.setEnabled(false);
_bUndo.addListener(SWT.Selection, new Listener() {
public void handleEvent(final Event event) {
_ganttComposite.getUndoRedoManager().undo();
eventLog("Undo was pressed");
}
});
_bRedo = new Button(comp, SWT.PUSH);
_bRedo.setText("Redo (CTRL+y)");
_bRedo.setEnabled(false);
_bRedo.addListener(SWT.Selection, new Listener() {
public void handleEvent(final Event event) {
_ganttComposite.getUndoRedoManager().redo();
eventLog("Redo was pressed");
}
});
bMoveEventsLeft.addSelectionListener(new SelectionAdapter() {
public void widgetSelected(final SelectionEvent e) {
if (_ganttComposite.getCurrentView() == ISettings.VIEW_MINUTE){
moveAllEvents(Calendar.MINUTE, -1);
moveFocus();
}
else {
moveAllEvents(Calendar.DATE, -1);
moveFocus();
}
}
});
bMoveEventsRight.addSelectionListener(new SelectionAdapter() {
public void widgetSelected(final SelectionEvent e) {
if (_ganttComposite.getCurrentView() == ISettings.VIEW_MINUTE){
moveAllEvents(Calendar.MINUTE, 1);
moveFocus();
}
else {
moveAllEvents(Calendar.DATE, 1);
moveFocus();
}
}
});
bJumpEarliest.addSelectionListener(new SelectionAdapter() {
public void widgetSelected(final SelectionEvent e) {
_ganttComposite.jumpToEarliestEvent();
moveFocus();
}
});
bJumpLatest.addSelectionListener(new SelectionAdapter() {
public void widgetSelected(final SelectionEvent e) {
_ganttComposite.jumpToLatestEvent();
moveFocus();
}
});
bSelectFirstEvent.addSelectionListener(new SelectionAdapter() {
public void widgetSelected(final SelectionEvent e) {
if (_ganttComposite.getEvents().size() == 0) { return; }
_ganttComposite.setTopItem((GanttEvent) _ganttComposite.getEvents().get(0), SWT.CENTER);
moveFocus();
}
});
bSelectLastEvent.addSelectionListener(new SelectionAdapter() {
public void widgetSelected(final SelectionEvent e) {
if (_ganttComposite.getEvents().size() == 0) { return; }
_ganttComposite.setTopItem((GanttEvent) _ganttComposite.getEvents().get(_ganttComposite.getEvents().size() - 1), SWT.CENTER);
moveFocus();
}
});
bSelectMidEvent.addSelectionListener(new SelectionAdapter() {
public void widgetSelected(final SelectionEvent e) {
if (_ganttComposite.getEvents().size() < 2) { return; }
final GanttEvent ge = (GanttEvent) _ganttComposite.getEvents().get(_ganttComposite.getEvents().size() / 2);
_ganttComposite.setTopItem(ge, SWT.CENTER);
moveFocus();
}
});
bJumpToCurrentTimeLeft.addSelectionListener(new SelectionAdapter() {
public void widgetSelected(final SelectionEvent e) {
final Calendar currentDate = Calendar.getInstance();
_ganttComposite.setDate(currentDate, SWT.LEFT);
moveFocus();
}
});
bJumpToCurrentTimeCenter.addSelectionListener(new SelectionAdapter() {
public void widgetSelected(final SelectionEvent e) {
final Calendar currentDate = Calendar.getInstance();
_ganttComposite.setDate(currentDate, SWT.CENTER);
moveFocus();
}
});
bJumpToCurrentTimeRight.addSelectionListener(new SelectionAdapter() {
public void widgetSelected(final SelectionEvent e) {
final Calendar currentDate = Calendar.getInstance();
_ganttComposite.setDate(currentDate, SWT.RIGHT);
moveFocus();
}
});
zIn.addListener(SWT.Selection, new Listener() {
public void handleEvent(final Event event) {
_ganttComposite.zoomIn();
moveFocus();
}
});
zOut.addListener(SWT.Selection, new Listener() {
public void handleEvent(final Event event) {
_ganttComposite.zoomOut();
moveFocus();
}
});
bShowPlanned.addListener(SWT.Selection, new Listener() {
public void handleEvent(final Event event) {
_ganttComposite.setShowPlannedDates(!_ganttComposite.isShowingPlannedDates());
moveFocus();
}
});
bShowDays.addListener(SWT.Selection, new Listener() {
public void handleEvent(final Event event) {
_ganttComposite.setShowDaysOnEvents(!_ganttComposite.isShowingDaysOnEvents());
moveFocus();
}
});
bSetDate.addListener(SWT.Selection, new Listener() {
public void handleEvent(final Event event) {
final Calendar cal = _ganttComposite.getDate();
final Random r = new Random();
int add = r.nextInt(10) + 1;
if (r.nextInt(2) == 1) {
add = -add;
}
cal.add(Calendar.DATE, add);
_ganttComposite.setDate(cal);
moveFocus();
}
});
return sc;
}
private void moveAllEvents(final int calendarObj, final int amount) {
if (amount == 0) { return; }
final List events = _ganttComposite.getEvents();
for (int i = 0; i < events.size(); i++) {
final GanttEvent ge = (GanttEvent) events.get(i);
final Calendar start = ge.getActualStartDate();
final Calendar end = ge.getActualEndDate();
if (amount > 0) {
end.add(calendarObj, amount);
start.add(calendarObj, amount);
ge.setRevisedDates(start, end, SWT.RIGHT_TO_LEFT);
} else {
start.add(calendarObj, amount);
end.add(calendarObj, amount);
ge.setRevisedDates(start, end, SWT.LEFT_TO_RIGHT);
}
ge.update(false);
}
_ganttComposite.heavyRedraw();
}
private void moveFocus() {
_ganttComposite.setFocus();
}
private Locale getSelectedLocale() {
final Locale[] all = Locale.getAvailableLocales();
return all[_localeCombo.getSelectionIndex()];
}
private void eventLog(String txt) {
TableItem ti = new TableItem(_tEventLog, SWT.NONE, 0);
ti.setText(txt);
System.out.println(txt);
}
class TestSettings extends AbstractSettings {
public boolean lockHeaderOnVerticalScroll() {
return _bLockHeader.getSelection();
}
public boolean drawHeader() {
return true;
}
public int getSectionSide() {
return _bUseSectionsRight.getSelection() ? SWT.RIGHT : SWT.LEFT;
}
public boolean drawHorizontalLines() {
return _bDrawHorizontalLines.getSelection();
}
public int getVerticalEventDragging() {
return getVerticalDNDStyle();
}
public int getInitialView() {
if (_bUseDDay.getSelection()) { return ISettings.VIEW_D_DAY; }
return super.getInitialView();
}
public boolean moveLinkedEventsWhenEventsAreMoved() {
return true;
}
public boolean moveAndResizeOnlyDependentEventsThatAreLaterThanLinkedMoveEvent() {
return true;
}
public Locale getDefaultLocale() {
return getSelectedLocale();
}
public boolean enableAutoScroll() {
return _bEnableAutoScroll.getSelection();
}
public boolean enableResizing() {
return _bEventResizing.getSelection();
}
public boolean enableDragAndDrop() {
return _bEventDND.getSelection();
}
public boolean adjustForLetters() {
return _bAdjustForLetters.getSelection();
}
public int getArrowConnectionType() {
switch (_bConnectionLineStyle.getSelectionIndex()) {
case 0:
return ISettings.CONNECTION_ARROW_RIGHT_TO_LEFT;
case 1:
return ISettings.CONNECTION_ARROW_RIGHT_TO_TOP;
default:
case 2:
return ISettings.CONNECTION_MS_PROJECT_STYLE;
case 3:
return ISettings.CONNECTION_BIRDS_FLIGHT_PATH;
}
}
public boolean showArrows() {
return _bShowArrows.getSelection();
}
public boolean showBoldScopeText() {
return _bShowBoldScopeText.getSelection();
}
public boolean showToolTips() {
return _bShowTooltips.getSelection();
}
public boolean showGradientEventBars() {
return _bShowGradientEventBars.getSelection();
}
public boolean showOnlyDependenciesForSelectedItems() {
return _bShowOnlyDependenciesForSelectedItems.getSelection();
}
public boolean showZoomLevelBox() {
return _bShowZoomLevelBox.getSelection();
}
public boolean allowBlankAreaDragAndDropToMoveDates() {
return _bAllowBlankAreaDragAndDropToMoveDates.getSelection();
}
public boolean flipBlankAreaDragDirection() {
return _bFlipBlankAreaDragDirection.getSelection();
}
public boolean drawSelectionMarkerAroundSelectedEvent() {
return _bDrawSelectionMarkerAroundSelectedEvent.getSelection();
}
public boolean allowCheckpointResizing() {
return _bAllowCheckpointResizing.getSelection();
}
public boolean startCalendarOnFirstDayOfWeek() {
return _bStartCalendarOnFirstDayOfWeek.getSelection();
}
public boolean enableZooming() {
return _bEnableZooming.getSelection();
}
public boolean drawFullPercentageBar() {
return _bDrawFullPercentageBar.getSelection();
}
public boolean getUseAdvancedTooltips() {
return _bShowAdvancedTooltips.getSelection();
}
public boolean drawLockedDateMarks() {
return _bDrawLockedDateMarks.getSelection();
}
public boolean showDateTipsOnScrolling() {
return _bShowDateTipsOnScrolling.getSelection();
}
public boolean zoomToMousePointerDateOnWheelZooming() {
return _bZoomToMousePointerDateOnWheelZooming.getSelection();
}
public boolean allowBlankAreaVerticalDragAndDropToMoveChart() {
return _bAllowVerticalBlankDnd.getSelection();
}
public boolean scaleImageToDayWidth() {
return _bScaleImageToDay.getSelection();
}
public boolean allowArrowKeysToScrollChart() {
return _bAllowArrowKeysToMoveChart.getSelection();
}
@Override
public boolean showHolidayToolTips() {
return _bShowHolidays.getSelection();
}
}
}