/* * Licensed Materials - Property of Perforce Software, Inc. * © Copyright Perforce Software, Inc. 2014, 2021 * © Copyright IBM Corp. 2009, 2014 * © Copyright ILOG 1996, 2009 * All Rights Reserved. * * Note to U.S. Government Users Restricted Rights: * The Software and Documentation were developed at private expense and * are "Commercial Items" as that term is defined at 48 CFR 2.101, * consisting of "Commercial Computer Software" and * "Commercial Computer Software Documentation", as such terms are * used in 48 CFR 12.212 or 48 CFR 227.7202-1 through 227.7202-4, * as applicable. */ import ilog.views.gantt.IlvGanttChart; import ilog.views.gantt.IlvGanttModel; import ilog.views.gantt.IlvHierarchyChart; import ilog.views.gantt.model.IlvDefaultGanttModel; import ilog.views.gantt.scale.*; import ilog.views.util.IlvProductUtil; import java.awt.BorderLayout; import java.awt.Color; import java.awt.Font; import java.util.Calendar; import javax.swing.JFrame; import javax.swing.JPanel; import javax.swing.SwingUtilities; /** * Simple Gantt Example sample. */ public class CustomVisibilityGantt extends JPanel { public IlvHierarchyChart chart; public CustomVisibilityGantt(JFrame frame) { // Prepare the JPanel's appearance setLayout(new BorderLayout()); IlvGanttChart chart = new IlvGanttChart(); // Create a new time scale with adjustable visibility IlvTimeScale timescale = createAdjustableTimeScale(); chart.setTimeScale(timescale); // Bind the Gantt Chart to the Data Model IlvGanttModel model = new IlvDefaultGanttModel(); chart.setGanttModel(model); add(BorderLayout.CENTER, chart); } /** * Creates an adjustable timescale which is controlled by a * visibility policy deciding on the number of visible rows based * on the zoom level. */ private IlvTimeScale createAdjustableTimeScale() { // 1. Create the timescale. IlvTimeScale timescale = new IlvTimeScale(); // 2. Create the needed rows. // A customized quarter row IlvQuarterTimeScaleRow quarterRow = new IlvQuarterTimeScaleRow(); quarterRow.setTextColor(new Color( 50, 205, 50)); quarterRow.setTextFont(new Font("default", Font.PLAIN, 14)); quarterRow.setTextPosition(IlvBasicTimeScaleRow.CENTER); // A customized month row IlvMonthTimeScaleRow monthRow = new IlvMonthTimeScaleRow(); monthRow.setTextColor(Color.blue); monthRow.setTextFont(new Font("Serif", Font.ITALIC, 16)); monthRow.setFormatString("MMMM"); monthRow.setTextPosition(IlvBasicTimeScaleRow.CENTER); // A customized day row IlvDayTimeScaleRow dayRow = new IlvDayTimeScaleRow(); dayRow.setTextColor(new Color(72, 209, 204)); dayRow.setTextFont(new Font("SansSerif", Font.BOLD, 18)); // A customized half day row. IlvHalfDayTimeScaleRow halfDayRow = new IlvHalfDayTimeScaleRow(); halfDayRow.setTextColor(Color.red); halfDayRow.setTextFont(new Font("Monospaced", Font.PLAIN, 14)); // 3. Add the rows to the time scale timescale.addRow(quarterRow); timescale.addRow(monthRow); timescale.addRow(dayRow); timescale.addRow(halfDayRow); // 4. Create the visibility policy IlvBasicTimeScaleVisibilityPolicy visibilityPolicy = new IlvBasicTimeScaleVisibilityPolicy(); // 5. Create the list of visibility conditions. Each visibility // condition is characterized by a predicate and the list of visible // rows when this predicate is true. // First visibility condition is to have the 4 rows visible when at // least 4 characters can be seen for the month. // Create the predicate IlvTimeWidthVisibilityPredicate cond1 = new IlvTimeWidthVisibilityPredicate( Calendar.DAY_OF_MONTH, IlvTimeWidthVisibilityPredicate.CHARACTER, 4); cond1.setFont(new Font("SansSerif", Font.BOLD, 18)); // Create the first visibility condition with the predicate IlvVisibleTimeScaleRows visCond1 = new IlvVisibleTimeScaleRows(cond1); // Add the visible rows. visCond1.addRow(quarterRow); visCond1.addRow(monthRow); visCond1.addRow(dayRow); visCond1.addRow(halfDayRow); // Second visibility condition is to have the quarter, month and day // rows visible when at least 3 characters can be seen for the day. // Create the predicate IlvTimeWidthVisibilityPredicate cond2 = new IlvTimeWidthVisibilityPredicate( Calendar.DAY_OF_MONTH, IlvTimeWidthVisibilityPredicate.CHARACTER, 3); // Create the second visibility condition with the predicate IlvVisibleTimeScaleRows visCond2 = new IlvVisibleTimeScaleRows(cond2); // Add the visible rows. visCond2.addRow(quarterRow); visCond2.addRow(monthRow); visCond2.addRow(dayRow); // Third visibility condition is to have the quarter, month and a // short day rows visible when at least 1 character can be seen for // the day. // Create the predicate IlvTimeWidthVisibilityPredicate cond3 = new IlvTimeWidthVisibilityPredicate( Calendar.DAY_OF_MONTH, IlvTimeWidthVisibilityPredicate.CHARACTER, 1); // Create the third visibility condition with the predicate IlvVisibleTimeScaleRows visCond3 = new IlvVisibleTimeScaleRows(cond3); // Create a short day row IlvDayTimeScaleRow shortDayRow = new IlvDayTimeScaleRow(); shortDayRow.setTextColor(Color.cyan); shortDayRow.setTextFont(new Font("SansSerif", Font.BOLD, 18)); shortDayRow.setFormatString("dd"); // Add the visible rows. visCond3.addRow(quarterRow); visCond3.addRow(monthRow); visCond3.addRow(shortDayRow); // Fourth visibility condition is to have the quarter and month // rows visible when at least 4 characters can be seen for // the month. // Create the predicate IlvTimeWidthVisibilityPredicate cond4 = new IlvTimeWidthVisibilityPredicate( Calendar.MONTH, IlvTimeWidthVisibilityPredicate.CHARACTER, 4); cond4.setFont(new Font("Serif", Font.ITALIC, 16)); // Create the fourth visibility condition with the predicate IlvVisibleTimeScaleRows visCond4 = new IlvVisibleTimeScaleRows(cond4); // Add the visible rows. visCond4.addRow(quarterRow); visCond4.addRow(monthRow); // Fifth visibility condition is to have the quarter and a short // month rows visible when at least 1 character can be seen for // the month. // Create the predicate IlvTimeWidthVisibilityPredicate cond5 = new IlvTimeWidthVisibilityPredicate( Calendar.MONTH, IlvTimeWidthVisibilityPredicate.CHARACTER, 1); cond5.setFont(new Font("Serif", Font.ITALIC, 16)); // Create the fifth visibility condition with the predicate IlvVisibleTimeScaleRows visCond5 = new IlvVisibleTimeScaleRows(cond5); // Create a short month row IlvMonthTimeScaleRow shortMonthRow = new IlvMonthTimeScaleRow(); shortMonthRow.setTextColor(Color.blue); shortMonthRow.setTextFont(new Font("Serif", Font.ITALIC, 16)); shortMonthRow.setFormatString("MM"); // Add the visible rows. visCond5.addRow(quarterRow); visCond5.addRow(shortMonthRow); // 6. Add these visibility conditions to the visibility policy visibilityPolicy.addVisibleTimeScaleRows(visCond1); visibilityPolicy.addVisibleTimeScaleRows(visCond2); visibilityPolicy.addVisibleTimeScaleRows(visCond3); visibilityPolicy.addVisibleTimeScaleRows(visCond4); visibilityPolicy.addVisibleTimeScaleRows(visCond5); // 7. Set the visibility on the time scale timescale.setVisibilityPolicy(visibilityPolicy); return timescale; } public static void main(String[] args) { // This sample uses JViews Gantt features. When deploying an // application that includes this code, you need to be in possession // of a Perforce JViews Gantt Deployment license. IlvProductUtil.DeploymentLicenseRequired( IlvProductUtil.JViews_Gantt_Deployment); SwingUtilities.invokeLater(new Runnable() { Override public void run() { JFrame frame = new JFrame(); frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); frame.setBounds(10, 400, 700, 400); CustomVisibilityGantt example = new CustomVisibilityGantt(frame); frame.getContentPane().add(example); frame.setVisible(true); } }); } }