/*
GanttProject is an opensource project management tool. License: GPL3
Copyright (C) 2004-2011 GanttProject Team
This program is free software; you can redistribute it and/or
modify it under the terms of the GNU General Public License
as published by the Free Software Foundation; either version 3
of the License, or (at your option) any later version.
This program is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
GNU General Public License for more details.
You should have received a copy of the GNU General Public License
along with this program; if not, write to the Free Software
Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
*/
package net.sourceforge.ganttproject.chart;
import java.awt.Color;
import java.awt.Font;
import java.util.Map;
import java.util.Map.Entry;
import com.google.common.base.Function;
import com.google.common.base.Joiner;
import com.google.common.collect.Iterables;
import com.google.common.collect.Maps;
import biz.ganttproject.core.chart.render.AlphaRenderingOption;
import biz.ganttproject.core.option.ChangeValueEvent;
import biz.ganttproject.core.option.EnumerationOption;
import biz.ganttproject.core.option.GPAbstractOption;
import biz.ganttproject.core.option.ListOption;
import net.sourceforge.ganttproject.font.Fonts;
import net.sourceforge.ganttproject.gui.UIConfiguration;
/**
* @author bard
*/
public class ChartUIConfiguration {
private final Font mySpanningRowTextFont;
private final Color mySpanningHeaderBackgroundColor;
private final Color myHeaderBorderColor;
private final Color myHorizontalGutterColor1 = new Color(0.807f, 0.807f, 0.807f);
private final Color myHorizontalGutterColor2 = Color.white;
private final Color myBottomUnitGridColor;
private final Color myWorkingTimeBackgroundColor;
private final Color myHolidayTimeBackgroundColor;
private final Color myPublicHolidayTimeBackgroundColor;
private int myRowHeight;
private UIConfiguration myProjectConfig;
private int myHeaderHeight = 44;
private int myYOffset = 0;
private final int myMargin = 4;
private Font myBaseFont = Fonts.DEFAULT_CHART_FONT;
private int myBaseFontSize;
private ChartPropertiesOption myChartStylesOption;
private static class ChartPropertiesOption extends GPAbstractOption<Map.Entry<String, String>> implements ListOption<Map.Entry<String, String>> {
private static final Function<Entry<String, String>, String> ENTRY_TO_KEY_VALUE = new Function<Entry<String, String>, String>() {
@Override
public String apply(Entry<String, String> entry) {
return String.format("%s = %s", entry.getKey(), entry.getValue());
}
};
private Map<String, String> myMap = Maps.newHashMap();
public ChartPropertiesOption() {
super("chart.styles");
setHasUi(false);
}
@Override
public String getPersistentValue() {
return "\n" + Joiner.on('\n').join(Iterables.transform(getValues(), ENTRY_TO_KEY_VALUE)) + "\n";
}
@Override
public void loadPersistentValue(String value) {
myMap.clear();
for (String line : value.split("\n")) {
String[] keyValue = line.split("=");
if (keyValue.length < 2) {
continue;
}
myMap.put(keyValue[0].trim(), keyValue[1].trim());
}
fireChangeValueEvent(new ChangeValueEvent(getID(), null, null, this));
}
@Override
public void setValues(Iterable<Entry<String, String>> values) {
for (Entry<String, String> e : values) {
myMap.put(e.getKey(), e.getValue());
}
}
@Override
public Iterable<Entry<String, String>> getValues() {
return myMap.entrySet();
}
@Override
public void setValueIndex(int idx) {
throw new UnsupportedOperationException();
}
@Override
public void addValue(Entry<String, String> value) {
throw new UnsupportedOperationException();
}
@Override
public void updateValue(Entry<String, String> oldValue, Entry<String, String> newValue) {
throw new UnsupportedOperationException();
}
@Override
public void removeValueIndex(int idx) {
throw new UnsupportedOperationException();
}
@Override
public EnumerationOption asEnumerationOption() {
throw new UnsupportedOperationException();
}
}
ChartUIConfiguration(UIConfiguration projectConfig) {
mySpanningRowTextFont = Fonts.TOP_UNIT_FONT;
mySpanningHeaderBackgroundColor = new Color(0.93f, 0.93f, 0.93f);
myHeaderBorderColor = new Color(0.482f, 0.482f, 0.482f);
myWorkingTimeBackgroundColor = Color.WHITE;
myHolidayTimeBackgroundColor = new Color(0.9f, 0.9f, 0.9f);
myPublicHolidayTimeBackgroundColor = new Color(240, 220, 240);
// myHeaderBorderColor = new Color(0f, 1f, 0f);
myBottomUnitGridColor = new Color(0.482f, 0.482f, 0.482f);
myProjectConfig = projectConfig;
myChartStylesOption = new ChartPropertiesOption();
}
ListOption<Map.Entry<String, String>> getChartStylesOption() {
return myChartStylesOption;
}
Font getSpanningHeaderFont() {
return mySpanningRowTextFont;
}
public int getHeaderHeight() {
return myHeaderHeight;
}
public void setHeaderHeight(int headerHeight) {
myHeaderHeight = headerHeight;
}
public int getSpanningHeaderHeight() {
return myHeaderHeight / 2;
}
public Color getSpanningHeaderBackgroundColor() {
return mySpanningHeaderBackgroundColor;
}
public Color getHeaderBorderColor() {
return myHeaderBorderColor;
}
public Color getHorizontalGutterColor1() {
return myHorizontalGutterColor1;
}
public Color getHorizontalGutterColor2() {
return myHorizontalGutterColor2;
}
public Color getBottomUnitGridColor() {
return myBottomUnitGridColor;
}
public Color getWorkingTimeBackgroundColor() {
return myWorkingTimeBackgroundColor;
}
public Color getHolidayTimeBackgroundColor() {
return myHolidayTimeBackgroundColor;
}
public Color getPublicHolidayTimeBackgroundColor() {
return myPublicHolidayTimeBackgroundColor;
}
public int getRowHeight() {
return myRowHeight;
}
public void setRowHeight(int rowHeight) {
myRowHeight = rowHeight;
}
public Color getWeekEndColor() {
return myProjectConfig.getWeekEndColor();
}
public boolean isRedlineOn() {
return myProjectConfig.isRedlineOn();
}
public Font getChartFont() {
return myBaseFont;
}
public Color getResourceNormalLoadColor() {
return myProjectConfig.getResourceColor();
}
public Color getResourceOverloadColor() {
return myProjectConfig.getResourceOverloadColor();
}
public Color getResourceUnderLoadColor() {
return myProjectConfig.getResourceUnderloadColor();
}
public Color getPreviousTaskColor() {
return myProjectConfig.getPreviousTaskColor();
}
public Color getEarlierPreviousTaskColor() {
return myProjectConfig.getEarlierPreviousTaskColor();
}
public Color getLaterPreviousTaskColor() {
return myProjectConfig.getLaterPreviousTaskColor();
}
public boolean isCriticalPathOn() {
return myProjectConfig.isCriticalPathOn();
}
public Color getDayOffColor() {
return myProjectConfig.getDayOffColor();
}
public int getYOffSet() {
return myYOffset;
}
public void setYOffSet(int offset) {
myYOffset = offset;
}
public int getMargin() {
return myMargin;
}
public AlphaRenderingOption getWeekendAlphaValue() {
return myProjectConfig.getWeekendAlphaRenderingOption();
}
public ChartUIConfiguration createCopy() {
ChartUIConfiguration copy = new ChartUIConfiguration(myProjectConfig);
copy.setHeaderHeight(getHeaderHeight());
copy.setRowHeight(getRowHeight());
copy.setYOffSet(getYOffSet());
return copy;
}
public void setBaseFont(Font baseChartFont, int fontSize) {
myBaseFont = baseChartFont;
myBaseFontSize = fontSize;
}
public int getBaseFontSize() {
return myBaseFontSize;
}
}