/*******************************************************************************
* Copyright (c) 2014, 2015 Scott Clarke (scott@dawg6.com).
*
* This file is part of Dawg6's Demon Hunter DPS Calculator.
*
* Dawg6's Demon Hunter DPS Calculator 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.
*
* Dawg6's Demon Hunter DPS Calculator 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, see <http://www.gnu.org/licenses/>.
*******************************************************************************/
package com.dawg6.web.dhcalc.client;
import java.util.Map;
import java.util.TreeMap;
import com.dawg6.gwt.client.widgets.SimpleCaptionPanel;
import com.dawg6.web.dhcalc.shared.calculator.GemLevel;
import com.dawg6.web.dhcalc.shared.calculator.Slot;
import com.dawg6.web.dhcalc.shared.calculator.Util;
import com.google.gwt.user.client.ui.Composite;
import com.google.gwt.user.client.ui.FlexTable;
import com.google.gwt.user.client.ui.HasVerticalAlignment;
import com.google.gwt.user.client.ui.HorizontalPanel;
import com.google.gwt.user.client.ui.Label;
import com.google.gwt.user.client.ui.ListBox;
public class RCRPanel extends Composite {
private final NumberSpinner shoulders;
private final NumberSpinner gloves;
private final NumberSpinner amulet;
private final NumberSpinner ring1;
private final NumberSpinner ring2;
private final NumberSpinner belt;
private final NumberSpinner weapon;
private final NumberSpinner quiver;
private final Label effRCR;
private final ListBox topaz;
public RCRPanel() {
SimpleCaptionPanel cptnpnlResourceReduction = new SimpleCaptionPanel(
"Resource Cost Reduction");
initWidget(cptnpnlResourceReduction);
FlexTable flexTable = new FlexTable();
flexTable.setCellPadding(2);
cptnpnlResourceReduction.setContentWidget(flexTable);
int row = 0;
Label lblNewLabel = new Label("Helm (Topaz):");
lblNewLabel.setStyleName("boldText");
lblNewLabel.setWordWrap(false);
flexTable.setWidget(row, 0, lblNewLabel);
topaz = new ListBox();
flexTable.setWidget(row, 1, topaz);
row++;
Label lblShoulders = new Label("Shoulders (%):");
lblShoulders.setWordWrap(false);
lblShoulders.setStyleName("boldText");
flexTable.setWidget(row, 0, lblShoulders);
shoulders = new NumberSpinner();
shoulders.setVisibleLength(4);
flexTable.setWidget(row, 1, shoulders);
row++;
Label lblGloves = new Label("Gloves (%):");
lblGloves.setWordWrap(false);
lblGloves.setStyleName("boldText");
flexTable.setWidget(row, 0, lblGloves);
gloves = new NumberSpinner();
gloves.setVisibleLength(4);
flexTable.setWidget(row, 1, gloves);
row++;
Label lblAmulet = new Label("Amulet (%):");
lblAmulet.setWordWrap(false);
lblAmulet.setStyleName("boldText");
flexTable.setWidget(row, 0, lblAmulet);
amulet = new NumberSpinner();
amulet.setVisibleLength(4);
flexTable.setWidget(row, 1, amulet);
row++;
Label lblRing = new Label("Ring 1 (%):");
lblRing.setWordWrap(false);
lblRing.setStyleName("boldText");
flexTable.setWidget(row, 0, lblRing);
ring1 = new NumberSpinner();
ring1.setVisibleLength(4);
flexTable.setWidget(row, 1, ring1);
row++;
Label lblRing_1 = new Label("Ring 2 (%):");
lblRing_1.setWordWrap(false);
lblRing_1.setStyleName("boldText");
flexTable.setWidget(row, 0, lblRing_1);
ring2 = new NumberSpinner();
ring2.setVisibleLength(4);
flexTable.setWidget(row, 1, ring2);
row++;
Label lblBelt = new Label("Belt (%):");
lblBelt.setWordWrap(false);
lblBelt.setStyleName("boldText");
flexTable.setWidget(row, 0, lblBelt);
belt = new NumberSpinner();
belt.setVisibleLength(4);
flexTable.setWidget(row, 1, belt);
row++;
Label lblWeapon = new Label("Main Hand (%):");
lblWeapon.setWordWrap(false);
lblWeapon.setStyleName("boldText");
flexTable.setWidget(row, 0, lblWeapon);
weapon = new NumberSpinner();
weapon.setVisibleLength(4);
flexTable.setWidget(row, 1, weapon);
row++;
Label lblQuiver = new Label("Off Hand(%):");
lblQuiver.setWordWrap(false);
lblQuiver.setStyleName("boldText");
flexTable.setWidget(row, 0, lblQuiver);
quiver = new NumberSpinner();
quiver.setVisibleLength(4);
flexTable.setWidget(row, 1, quiver);
row++;
HorizontalPanel horizontalPanel = new HorizontalPanel();
horizontalPanel.setVerticalAlignment(HasVerticalAlignment.ALIGN_MIDDLE);
horizontalPanel.setSpacing(5);
flexTable.setWidget(row, 0, horizontalPanel);
row++;
for (GemLevel l : GemLevel.values()) {
this.topaz.addItem(l.getDisplayName(), l.name());
}
topaz.setSelectedIndex(0);
this.shoulders.setMax(10);
this.gloves.setMax(10);
this.ring1.setMax(10);
this.ring2.setMax(10);
this.belt.setMax(10);
this.weapon.setMax(60); // yang's 50% + 10%
this.quiver.setMax(10);
this.amulet.setMax(10);
Label l10 = new Label("Effective RCR:");
l10.addStyleName("boldText");
l10.setWordWrap(false);
flexTable.setWidget(10, 0, l10);
this.effRCR = new Label("0.0%");
this.effRCR.addStyleName("boldText");
flexTable.setWidget(10, 1, effRCR);
}
public NumberSpinner getShoulders() {
return shoulders;
}
public NumberSpinner getGloves() {
return gloves;
}
public NumberSpinner getAmulet() {
return amulet;
}
public NumberSpinner getRing1() {
return ring1;
}
public NumberSpinner getRing2() {
return ring2;
}
public NumberSpinner getBelt() {
return belt;
}
public NumberSpinner getWeapon() {
return weapon;
}
public NumberSpinner getQuiver() {
return quiver;
}
public Map<String, Integer> getData() {
Map<String, Integer> map = new TreeMap<String, Integer>();
map.put(Slot.Shoulders.name(), shoulders.getValue());
map.put(Slot.Hands.name(), gloves.getValue());
map.put(Slot.Necklace.name(), amulet.getValue());
map.put(Slot.Ring1.name(), ring1.getValue());
map.put(Slot.Ring2.name(), ring2.getValue());
map.put(Slot.Waist.name(), belt.getValue());
map.put(Slot.MainHand.name(), weapon.getValue());
map.put(Slot.OffHand.name(), quiver.getValue());
return map;
}
public void setEffectiveRcr(double rcr) {
this.effRCR.setText(Util.format(Math.round(rcr * 10000.0) / 100.0) + "%");
}
public ListBox getTopaz() {
return topaz;
}
public GemLevel getSelectedTopaz() {
int i = this.topaz.getSelectedIndex();
String value = this.topaz.getValue(i);
return GemLevel.valueOf(value);
}
public void setTopaz(GemLevel topaz) {
for (int i = 0; i < this.topaz.getItemCount(); i++) {
String value = this.topaz.getValue(i);
if (value.equals(topaz.name())) {
this.topaz.setSelectedIndex(i);
return;
}
}
this.topaz.setSelectedIndex(0);
}
}