void RecipeWidget::setRecipe(Recipe *recipe) { _recipe = recipe; RecipeModel *recipeModel = new RecipeModel(this); recipeModel->setRecipe(recipe); ui->tblCalculated->setModel(recipeModel); RecipeIngredientModel *ingredientModel = new RecipeIngredientModel(this); ingredientModel->setRecipe(recipe); ui->trvIngredients->setModel(ingredientModel); ui->trvIngredients->setItemDelegateForColumn(1, new RecipeIngredientDelegate(this)); connect(_recipe, SIGNAL(dataChanged()), this, SLOT(recipeChanged())); refreshText(); }
View::View(QWidget *parent, Recipe *recipe) : QWidget(parent), recipe_(recipe), grainmodel_(0), hopmodel_(0), miscmodel_(0), notepage_(0) { ui.setupUi(this); // get current font information QFont bold(font()); bold.setBold(true); QFontMetrics fm(font()); unsigned mh = (unsigned)(fm.lineSpacing() * 1.5); unsigned mw = fm.width('M'); // additional setup ui.ogreclabel->setFont(bold); ui.ogrec->setFont(bold); ui.ibureclabel->setFont(bold); ui.iburec->setFont(bold); ui.srmreclabel->setFont(bold); ui.srmrec->setFont(bold); ui.abvlabel->setFont(bold); ui.abv->setFont(bold); ui.abwlabel->setFont(bold); ui.abw->setFont(bold); ui.fglabel->setFont(bold); ui.fg->setFont(bold); // grain page QWidget *widget = new QWidget(); grainpage.setupUi(widget); ui.ingredients->addTab(widget, tr("&Grains")); grainmodel_ = new GrainModel(this, recipe_->grains()); grainpage.view->setModel(grainmodel_); QItemDelegate *delegate = new GrainDelegate(this); grainpage.view->setItemDelegate(delegate); grainpage.view->verticalHeader()->setDefaultSectionSize(mh); grainpage.view->verticalHeader()->hide(); grainpage.view->horizontalHeader()->setClickable(true); grainpage.view->horizontalHeader()->setHighlightSections(false); grainpage.view->setColumnWidth(GrainModel::NAME, 20*mw); grainpage.view->setColumnWidth(GrainModel::WEIGHT, 8*mw); grainpage.view->setColumnWidth(GrainModel::EXTRACT, 8*mw); grainpage.view->setColumnWidth(GrainModel::COLOR, 8*mw); grainpage.view->setColumnWidth(GrainModel::TYPE, 8*mw); grainpage.view->setColumnWidth(GrainModel::USE, 8*mw); // hop page widget = new QWidget(); hoppage.setupUi(widget); ui.ingredients->addTab(widget, tr("&Hops")); hopmodel_ = new HopModel(this, recipe_->hops()); hoppage.view->setModel(hopmodel_); delegate = new HopDelegate(this); hoppage.view->setItemDelegate(delegate); hoppage.view->verticalHeader()->setDefaultSectionSize(mh); hoppage.view->verticalHeader()->hide(); hoppage.view->horizontalHeader()->setClickable(true); hoppage.view->horizontalHeader()->setHighlightSections(false); hoppage.view->setColumnWidth(HopModel::NAME, 20*mw); hoppage.view->setColumnWidth(HopModel::WEIGHT, 8*mw); hoppage.view->setColumnWidth(HopModel::ALPHA, 8*mw); hoppage.view->setColumnWidth(HopModel::TIME, 8*mw); hoppage.view->setColumnWidth(HopModel::TYPE, 8*mw); // misc page widget = new QWidget(); miscpage.setupUi(widget); ui.ingredients->addTab(widget, tr("&Miscellaneous")); miscmodel_ = new MiscModel(this, recipe_->miscs()); miscpage.view->setModel(miscmodel_); delegate = new MiscDelegate(this); miscpage.view->setItemDelegate(delegate); miscpage.view->verticalHeader()->setDefaultSectionSize(mh); miscpage.view->verticalHeader()->hide(); miscpage.view->horizontalHeader()->setClickable(true); miscpage.view->horizontalHeader()->setHighlightSections(false); miscpage.view->setColumnWidth(MiscModel::NAME, 20*mw); miscpage.view->setColumnWidth(MiscModel::QUANTITY, 8*mw); miscpage.view->setColumnWidth(MiscModel::TYPE, 8*mw); miscpage.view->horizontalHeader()->setStretchLastSection(true); // note page notepage_ = new NotePage(0, recipe_); ui.ingredients->addTab(notepage_, tr("&Notes")); // set icons QIcon icon = QIcon(":/icons/22x22/list-add.png"); icon.addFile(":/icons/16x16/list-add.png"); grainpage.addbutton->setIcon(icon); hoppage.addbutton->setIcon(icon); miscpage.addbutton->setIcon(icon); icon = QIcon(":/icons/22x22/list-remove.png"); icon.addFile(":/icons/16x16/list-remove.png"); grainpage.removebutton->setIcon(icon); hoppage.removebutton->setIcon(icon); miscpage.removebutton->setIcon(icon); // widget connections connect(grainmodel_, SIGNAL(modified()), this, SLOT(modelModified())); connect(grainpage.addbutton, SIGNAL(clicked()), grainpage.view, SLOT(addIngredient())); connect(grainpage.removebutton, SIGNAL(clicked()), grainpage.view, SLOT(removeIngredient())); connect(hopmodel_, SIGNAL(modified()), this, SLOT(modelModified())); connect(hoppage.addbutton, SIGNAL(clicked()), hoppage.view, SLOT(addIngredient())); connect(hoppage.removebutton, SIGNAL(clicked()), hoppage.view, SLOT(removeIngredient())); connect(miscmodel_, SIGNAL(modified()), this, SLOT(modelModified())); connect(miscpage.addbutton, SIGNAL(clicked()), miscpage.view, SLOT(addIngredient())); connect(miscpage.removebutton, SIGNAL(clicked()), miscpage.view, SLOT(removeIngredient())); connect(ui.titleedit, SIGNAL(textChanged(const QString &)), this, SLOT(setTitle(const QString &))); connect(ui.stylecombo, SIGNAL(activated(const QString &)), this, SLOT(setStyle(const QString &))); connect(ui.breweredit, SIGNAL(textChanged(const QString &)), this, SLOT(setBrewer(const QString &))); connect(ui.sizespin, SIGNAL(valueChanged(double)), this, SLOT(setSize(double))); connect(recipe_, SIGNAL(recipeChanged()), this, SLOT(flush())); connect(recipe_, SIGNAL(recipeModified()), this, SLOT(refresh())); // start with new view flush(); }