nuclear@1: #include nuclear@1: #include "rollwidget.h" nuclear@1: #include nuclear@1: #include nuclear@1: #include nuclear@1: #include nuclear@1: nuclear@1: static struct { nuclear@1: const char *name; nuclear@1: int sides; nuclear@1: } dice_types[] = { nuclear@1: { "d4", 4 }, nuclear@1: { "d6", 6 }, nuclear@1: { "d8", 8 }, nuclear@1: { "d10", 10 }, nuclear@1: { "d12", 12 }, nuclear@1: { "d20", 20 }, nuclear@1: { "d100", 100 }, nuclear@1: { 0, 0 } nuclear@1: }; nuclear@1: nuclear@1: RollWidget::RollWidget(QWidget *parent) : nuclear@1: QWidget(parent) nuclear@1: { nuclear@1: dice = 0; nuclear@1: nuclear@1: QHBoxLayout *hbox = new QHBoxLayout(this); nuclear@1: nuclear@1: cmb_type = new QComboBox; nuclear@1: for(int i=0; dice_types[i].name; i++) { nuclear@1: char buf[64]; nuclear@1: sprintf(buf, ":/data/dice/%s.png", dice_types[i].name); nuclear@1: cmb_type->addItem(QIcon(buf), dice_types[i].name); nuclear@1: } nuclear@1: hbox->addWidget(cmb_type); nuclear@1: nuclear@1: QPushButton *bn_roll = new QPushButton("roll"); nuclear@1: hbox->addWidget(bn_roll); nuclear@1: connect(bn_roll, SIGNAL(clicked()), this, SLOT(roll())); nuclear@1: nuclear@1: tx_res = new QLineEdit; nuclear@1: tx_res->setReadOnly(true); nuclear@1: hbox->addWidget(tx_res); nuclear@1: nuclear@1: QPushButton *bn_rm = new QPushButton("remove"); nuclear@1: hbox->addWidget(bn_rm); nuclear@1: } nuclear@1: nuclear@1: void RollWidget::set_roll(Roll *roll) nuclear@1: { nuclear@1: dice = roll; nuclear@1: } nuclear@1: nuclear@1: Roll *RollWidget::get_roll() const nuclear@1: { nuclear@1: return dice; nuclear@1: } nuclear@1: nuclear@1: nuclear@1: void RollWidget::roll() nuclear@1: { nuclear@1: if(!dice) return; nuclear@1: nuclear@1: int sel = cmb_type->currentIndex(); nuclear@1: dice->set_sides(dice_types[sel].sides); nuclear@1: int value = dice->roll(); nuclear@1: nuclear@1: QString text; nuclear@1: text.setNum(value); nuclear@1: tx_res->setText(text); nuclear@1: nuclear@1: emit value_changed(value); nuclear@1: }