/*******************************************************************************
* 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 com.dawg6.gwt.client.widgets.SimpleCaptionPanel;
import com.dawg6.web.dhcalc.shared.calculator.SpecialItemType;
import com.google.gwt.event.dom.client.ChangeEvent;
import com.google.gwt.event.dom.client.ChangeHandler;
import com.google.gwt.user.client.ui.Anchor;
import com.google.gwt.user.client.ui.Button;
import com.google.gwt.user.client.ui.Composite;
import com.google.gwt.user.client.ui.FlexTable;
import com.google.gwt.user.client.ui.Label;
import com.google.gwt.user.client.ui.SimpleCheckBox;
public class PlayerBuffPanel extends Composite {
private final SimpleCheckBox wolf;
private final DoubleSpinner wolfUptime;
private final Button calcWolfButton;
private final SimpleCheckBox bbv;
private final DoubleSpinner bbvUptime;
private final SimpleCheckBox massConfusion;
private final DoubleSpinner massConfusionUptime;
private final SimpleCheckBox innerSanctuary;
private final DoubleSpinner innerSanctuaryUptime;
private final SimpleCheckBox conviction;
private final SimpleCheckBox cripplingWave;
private final DoubleSpinner cripplingWaveUptime;
private final DoubleSpinner convictionPassiveUptime;
private final SimpleCheckBox piranhas;
private final DoubleSpinner piranhasUptime;
private final SimpleCheckBox overawe;
private final DoubleSpinner convictionActiveUptime;
protected boolean disableListeners = false;
private final SimpleCheckBox valor;
private final SimpleCheckBox retribution;
private final DoubleSpinner retributionUptime;
private final DoubleSpinner valorActiveUptime;
private final DoubleSpinner valorPassiveUptime;
private final SimpleCheckBox slamDance;
private final SimpleCheckBox timeWarp;
private final SimpleCheckBox stretchTime;
private final NumberSpinner timeWarpUptime;
private final NumberSpinner stretchTimeUptime;
private final SimpleCheckBox oculus;
private final NumberSpinner oculusPercent;
private final NumberSpinner oculusUptime;
public PlayerBuffPanel() {
disableListeners = true;
SimpleCaptionPanel cptnpnlNewPanel = new SimpleCaptionPanel("Other Player Buffs");
initWidget(cptnpnlNewPanel);
FlexTable flexTable = new FlexTable();
cptnpnlNewPanel.setContentWidget(flexTable);
int row = 0;
Anchor anchor = new Anchor("Companion/Wolf (from other DH):");
anchor.setWordWrap(false);
flexTable.setWidget(row, 0, anchor);
anchor.setTarget("_blank");
anchor.setHref("http://us.battle.net/d3/en/class/demon-hunter/active/companion#c");
wolf = new SimpleCheckBox();
flexTable.setWidget(row, 1, wolf);
Label lblNewLabel = new Label("% Uptime:");
lblNewLabel.setWordWrap(false);
flexTable.setWidget(row, 2, lblNewLabel);
wolfUptime = new DoubleSpinner();
wolfUptime.setVisibleLength(5);
wolfUptime.setValue(33.33);
flexTable.setWidget(row, 3, wolfUptime);
wolfUptime.setTitle("% of time that another player's Wolf will be active");
calcWolfButton = new Button("Calculate");
calcWolfButton.setTitle("Calculate Wolf uptime based on your effective Cooldown Reduction");
flexTable.setWidget(row, 4, calcWolfButton);
row++;
Anchor anchor_1 = new Anchor("Big Bad Voodoo:");
anchor_1.setWordWrap(false);
anchor_1.setTarget("_blank");
anchor_1.setHref("http://us.battle.net/d3/en/class/witch-doctor/active/big-bad-voodoo");
flexTable.setWidget(row, 0, anchor_1);
bbv = new SimpleCheckBox();
flexTable.setWidget(row, 1, bbv);
Label label = new Label("% Uptime:");
label.setWordWrap(false);
flexTable.setWidget(row, 2, label);
bbvUptime = new DoubleSpinner();
bbvUptime.setValue(17.67);
bbvUptime.setVisibleLength(5);
flexTable.setWidget(row, 3, bbvUptime);
Anchor anchor_10 = new Anchor("Slam Dance:");
anchor_10.setWordWrap(false);
anchor_10.setTarget("_blank");
anchor_10.setHref("http://us.battle.net/d3/en/class/witch-doctor/active/big-bad-voodoo#a+");
flexTable.setWidget(row, 4, anchor_10);
slamDance = new SimpleCheckBox();
flexTable.setWidget(row, 5, slamDance);
slamDance.setTitle("Check this box if the Witch Doctor is using the Slam Dance rune");
row++;
Anchor anchor_1a = new Anchor("Slow Time/Stretch Time:");
anchor_1a.setWordWrap(false);
anchor_1a.setTarget("_blank");
anchor_1a.setHref("http://us.battle.net/d3/en/class/wizard/active/slow-time#e+");
flexTable.setWidget(row, 0, anchor_1a);
stretchTime = new SimpleCheckBox();
flexTable.setWidget(row, 1, stretchTime);
Label labela = new Label("% Uptime:");
labela.setWordWrap(false);
flexTable.setWidget(row, 2, labela);
stretchTimeUptime = new NumberSpinner();
stretchTimeUptime.setValue(0);
stretchTimeUptime.setVisibleLength(5);
flexTable.setWidget(row, 3, stretchTimeUptime);
row++;
Anchor anchor_1b = new Anchor("Slow Time/Time Warp:");
anchor_1b.setWordWrap(false);
anchor_1b.setTarget("_blank");
anchor_1b.setHref("http://us.battle.net/d3/en/class/wizard/active/slow-time#a+");
flexTable.setWidget(row, 0, anchor_1b);
timeWarp = new SimpleCheckBox();
flexTable.setWidget(row, 1, timeWarp);
Label labelb = new Label("% Uptime:");
labelb.setWordWrap(false);
flexTable.setWidget(row, 2, labelb);
timeWarpUptime = new NumberSpinner();
timeWarpUptime.setValue(0);
timeWarpUptime.setVisibleLength(5);
flexTable.setWidget(row, 3, timeWarpUptime);
row++;
Anchor anchor_2 = new Anchor("Mass Confusion/Paranoia:");
anchor_2.setWordWrap(false);
anchor_2.setTarget("_blank");
anchor_2.setHref("http://us.battle.net/d3/en/class/witch-doctor/active/mass-confusion#a+");
flexTable.setWidget(row, 0, anchor_2);
massConfusion = new SimpleCheckBox();
flexTable.setWidget(row, 1, massConfusion);
Label label_1 = new Label("% Uptime:");
label_1.setWordWrap(false);
flexTable.setWidget(row, 2, label_1);
massConfusionUptime = new DoubleSpinner();
massConfusionUptime.setVisibleLength(5);
flexTable.setWidget(row, 3, massConfusionUptime);
row++;
Anchor anchor_6 = new Anchor("Piranhas:");
anchor_6.setWordWrap(false);
anchor_6.setTarget("_blank");
anchor_6.setHref("http://us.battle.net/d3/en/class/witch-doctor/active/piranhas");
flexTable.setWidget(row, 0, anchor_6);
piranhas = new SimpleCheckBox();
flexTable.setWidget(row, 1, piranhas);
Label label_5 = new Label("% Uptime:");
label_5.setWordWrap(false);
flexTable.setWidget(row, 2, label_5);
piranhasUptime = new DoubleSpinner();
piranhasUptime.setVisibleLength(5);
flexTable.setWidget(row, 3, piranhasUptime);
row++;
Anchor anchor_8 = new Anchor("Laws of Valor:");
anchor_8.setWordWrap(false);
anchor_8.setTarget("_blank");
anchor_8.setHref("http://us.battle.net/d3/en/class/crusader/active/laws-of-valor");
flexTable.setWidget(row, 0, anchor_8);
valor = new SimpleCheckBox();
flexTable.setWidget(row, 1, valor);
Label label_4 = new Label("% Active:");
label_4.setWordWrap(false);
flexTable.setWidget(row, 2, label_4);
valorActiveUptime = new DoubleSpinner();
valorActiveUptime.setVisibleLength(5);
flexTable.setWidget(row, 3, valorActiveUptime);
valorActiveUptime.setTitle("Percent of the time that Laws of Valor's Active buff (only) applies");
row++;
Label label_4a = new Label("% Passive:");
label_4a.setWordWrap(false);
flexTable.setWidget(row, 2, label_4a);
valorPassiveUptime = new DoubleSpinner();
valorPassiveUptime.setVisibleLength(5);
flexTable.setWidget(row, 3, valorPassiveUptime);
valorPassiveUptime.setTitle("Percent of the time that Laws of Valor's Passive buff (only) applies");
row++;
Anchor anchor_3 = new Anchor("Inner Sanctuary/Forbidden Palace:");
anchor_3.setWordWrap(false);
anchor_3.setTarget("_blank");
anchor_3.setHref("http://us.battle.net/d3/en/class/monk/active/inner-sanctuary#e+");
flexTable.setWidget(row, 0, anchor_3);
innerSanctuary = new SimpleCheckBox();
flexTable.setWidget(row, 1, innerSanctuary);
Label label_2 = new Label("% Uptime:");
label_2.setWordWrap(false);
flexTable.setWidget(row, 2, label_2);
innerSanctuaryUptime = new DoubleSpinner();
innerSanctuaryUptime.setVisibleLength(5);
flexTable.setWidget(row, 3, innerSanctuaryUptime);
row++;
Anchor anchor_4 = new Anchor("Crippling Wave/Breaking Wave:");
anchor_4.setWordWrap(false);
anchor_4.setTarget("_blank");
anchor_4.setHref("http://us.battle.net/d3/en/class/monk/active/crippling-wave#e+");
flexTable.setWidget(row, 0, anchor_4);
cripplingWave = new SimpleCheckBox();
flexTable.setWidget(row, 1, cripplingWave);
Label label_3 = new Label("% Uptime:");
label_3.setWordWrap(false);
flexTable.setWidget(row, 2, label_3);
cripplingWaveUptime = new DoubleSpinner();
cripplingWaveUptime.setVisibleLength(5);
flexTable.setWidget(row, 3, cripplingWaveUptime);
row++;
Anchor anchor_9 = new Anchor("Mantra of Retribution/Transgression:");
anchor_9.setWordWrap(false);
anchor_9.setTarget("_blank");
anchor_9.setHref("http://us.battle.net/d3/en/class/monk/active/mantra-of-retribution#b+");
flexTable.setWidget(row, 0, anchor_9);
retribution = new SimpleCheckBox();
flexTable.setWidget(row, 1, retribution);
Label label_6 = new Label("% Uptime:");
label_6.setWordWrap(false);
flexTable.setWidget(row, 2, label_6);
retributionUptime = new DoubleSpinner();
retributionUptime.setVisibleLength(5);
flexTable.setWidget(row, 3, retributionUptime);
row++;
Anchor anchor_5 = new Anchor("Mantra of Conviction:");
anchor_5.setWordWrap(false);
anchor_5.setTarget("_blank");
anchor_5.setHref("http://us.battle.net/d3/en/class/monk/active/mantra-of-conviction");
flexTable.setWidget(row, 0, anchor_5);
conviction = new SimpleCheckBox();
flexTable.setWidget(row, 1, conviction);
Label lblPassiveUptime = new Label("% Passive:");
lblPassiveUptime.setWordWrap(false);
flexTable.setWidget(row, 2, lblPassiveUptime);
convictionPassiveUptime = new DoubleSpinner();
convictionPassiveUptime.setVisibleLength(5);
convictionPassiveUptime.setTitle("Percent of time that Mantra of Conviction's passive bonus [only] applies");
flexTable.setWidget(row, 3, convictionPassiveUptime);
Anchor anchor_7 = new Anchor("Overawe:");
anchor_7.setWordWrap(false);
anchor_7.setTarget("_blank");
anchor_7.setHref("http://us.battle.net/d3/en/class/monk/active/mantra-of-conviction#a");
flexTable.setWidget(row, 4, anchor_7);
overawe = new SimpleCheckBox();
overawe.setTitle("Check this box if the monk is using the Overawe rune.");
flexTable.setWidget(row, 5, overawe);
row++;
Label lblActiveUptime = new Label("% Active:");
lblActiveUptime.setWordWrap(false);
flexTable.setWidget(row, 2, lblActiveUptime);
convictionActiveUptime = new DoubleSpinner();
convictionActiveUptime.setTitle("Percent of time that Matra of Conviction's active bonus [only] applies");
convictionActiveUptime.setVisibleLength(5);
flexTable.setWidget(row, 3, convictionActiveUptime);
row++;
Anchor anchor_11 = new Anchor(SpecialItemType.OCULUS.getName() + ":");
anchor_11.setHref(SpecialItemType.OCULUS.getUrl());
anchor_11.setTarget("_blank");
flexTable.setWidget(row, 0, anchor_11);
oculus = new SimpleCheckBox();
flexTable.setWidget(row, 1, oculus);
Label label1 = new Label("% Damage:", false);
flexTable.setWidget(row, 2, label1);
oculusPercent = new NumberSpinner();
oculusPercent.setMin(70);
oculusPercent.setMax(85);
oculusPercent.setVisibleLength(4);
oculusPercent.setTitle("Damage Increased by Percent");
flexTable.setWidget(row, 3, oculusPercent);
row++;
Label label2 = new Label("% Uptime:", false);
flexTable.setWidget(row, 2, label2);
oculusUptime = new NumberSpinner();
oculusUptime.setMin(0);
oculusUptime.setMax(100);
oculusUptime.setVisibleLength(4);
oculusUptime.setTitle("Percent of time you are receiving other Player's Oculus buff");
flexTable.setWidget(row, 3, oculusUptime);
row++;
wolfUptime.setMax(100.0);
bbvUptime.setMax(100.0);
massConfusionUptime.setMax(100.0);
piranhasUptime.setMax(100.0);
cripplingWaveUptime.setMax(100.0);
innerSanctuaryUptime.setMax(100.0);
convictionPassiveUptime.setMax(100.0);
convictionActiveUptime.setMax(100.0);
valorActiveUptime.setMax(100.0);
valorPassiveUptime.setMax(100.0);
retributionUptime.setMax(100.0);
stretchTimeUptime.setMax(100);
timeWarpUptime.setMax(100);
convictionPassiveUptime.addChangeHandler(new ChangeHandler(){
@Override
public void onChange(ChangeEvent event) {
if (!disableListeners) {
disableListeners = true;
double a = convictionPassiveUptime.getValue();
double b = convictionActiveUptime.getValue();
convictionActiveUptime.setValue(Math.min(100.0 - a, b));
disableListeners = false;
}
}});
convictionActiveUptime.addChangeHandler(new ChangeHandler(){
@Override
public void onChange(ChangeEvent event) {
if (!disableListeners) {
disableListeners = true;
double a = convictionPassiveUptime.getValue();
double b = convictionActiveUptime.getValue();
convictionPassiveUptime.setValue(Math.min(100.0 - b, a));
disableListeners = false;
}
}});
valorPassiveUptime.addChangeHandler(new ChangeHandler(){
@Override
public void onChange(ChangeEvent event) {
if (!disableListeners) {
disableListeners = true;
double a = valorPassiveUptime.getValue();
double b = valorActiveUptime.getValue();
valorActiveUptime.setValue(Math.min(100.0 - a, b));
disableListeners = false;
}
}});
valorActiveUptime.addChangeHandler(new ChangeHandler(){
@Override
public void onChange(ChangeEvent event) {
if (!disableListeners) {
disableListeners = true;
double a = valorPassiveUptime.getValue();
double b = valorActiveUptime.getValue();
valorPassiveUptime.setValue(Math.min(100.0 - b, a));
disableListeners = false;
}
}});
disableListeners = false;
}
public SimpleCheckBox getWolf() {
return wolf;
}
public DoubleSpinner getWolfUptime() {
return wolfUptime;
}
public Button getCalcWolfButton() {
return calcWolfButton;
}
public SimpleCheckBox getBbv() {
return bbv;
}
public DoubleSpinner getBbvUptime() {
return bbvUptime;
}
public SimpleCheckBox getMassConfusion() {
return massConfusion;
}
public DoubleSpinner getMassConfusionUptime() {
return massConfusionUptime;
}
public SimpleCheckBox getInnerSanctuary() {
return innerSanctuary;
}
public DoubleSpinner getInnerSanctuaryUptime() {
return innerSanctuaryUptime;
}
public SimpleCheckBox getConviction() {
return conviction;
}
public SimpleCheckBox getCripplingWave() {
return cripplingWave;
}
public DoubleSpinner getCripplingWaveUptime() {
return cripplingWaveUptime;
}
public DoubleSpinner getConvictionPassiveUptime() {
return convictionPassiveUptime;
}
public SimpleCheckBox getPiranhas() {
return piranhas;
}
public DoubleSpinner getPiranhasUptime() {
return piranhasUptime;
}
public SimpleCheckBox getOverawe() {
return overawe;
}
public DoubleSpinner getConvictionActiveUptime() {
return convictionActiveUptime;
}
public SimpleCheckBox getValor() {
return valor;
}
public SimpleCheckBox getRetribution() {
return retribution;
}
public DoubleSpinner getRetributionUptime() {
return retributionUptime;
}
public SimpleCheckBox getSlamDance() {
return slamDance;
}
public SimpleCheckBox getTimeWarp() {
return timeWarp;
}
public SimpleCheckBox getStretchTime() {
return stretchTime;
}
public NumberSpinner getTimeWarpUptime() {
return timeWarpUptime;
}
public NumberSpinner getStretchTimeUptime() {
return stretchTimeUptime;
}
public DoubleSpinner getValorActiveUptime() {
return valorActiveUptime;
}
public DoubleSpinner getValorPassiveUptime() {
return valorPassiveUptime;
}
public SimpleCheckBox getOculus() {
return oculus;
}
public NumberSpinner getOculusPercent() {
return oculusPercent;
}
public NumberSpinner getOculusUptime() {
return oculusUptime;
}
}