// rdintegeredit.cpp // // A widget for editing a list of integer values. // // (C) Copyright 2008,2016 Fred Gleason // // This program is free software; you can redistribute it and/or modify // it under the terms of the GNU Library General Public License // version 2 as published by the Free Software Foundation. // // 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., 675 Mass Ave, Cambridge, MA 02139, USA. // #include #include RDIntegerEdit::RDIntegerEdit(const QString &lbl,int low,int high, QWidget *parent) : QWidget(parent) { edit_low=low; edit_high=high; setCaption(tr("Set Value")); // // Generate Fonts // QFont label_font=QFont("Helvetica",12,QFont::Bold); label_font.setPixelSize(12); QFont button_font=QFont("Helvetica",10,QFont::Bold); button_font.setPixelSize(10); // // Values List // edit_values_box=new QListBox(this); // // Title Label // edit_label=new QLabel(edit_values_box,lbl,this); edit_label->setAlignment(AlignCenter); edit_label->setFont(label_font); // // Add Button // edit_add_button=new QPushButton(tr("Add"),this); edit_add_button->setFont(button_font); connect(edit_add_button,SIGNAL(clicked()),this,SLOT(addData())); // // Delete Button // edit_delete_button=new QPushButton(tr("Delete"),this); edit_delete_button->setFont(button_font); connect(edit_delete_button,SIGNAL(clicked()),this,SLOT(deleteData())); } QSize RDIntegerEdit::sizeHint() const { return QSize(300,100); } QSizePolicy RDIntegerEdit::sizePolicy() const { return QSizePolicy(QSizePolicy::Fixed,QSizePolicy::Fixed); } unsigned RDIntegerEdit::values(std::vector *v) const { v->clear(); for(int i=0;inumRows();i++) { v->push_back(edit_values_box->text(i).toInt()); } return v->size(); } void RDIntegerEdit::setValues(std::vector *v) { for(unsigned i=0;isize();i++) { edit_values_box->insertItem(QString().sprintf("%d",v->at(i))); } } void RDIntegerEdit::setGeometry(int x,int y,int w,int h) { QWidget::setGeometry(x,y,w,h); edit_label->setGeometry(0,0,width(),20); edit_values_box->setGeometry(0,20,width(),height()-60); edit_add_button->setGeometry(0,height()-35,width()/2-5,30); edit_delete_button->setGeometry(width()/2+5,height()-35,width()/2-5,30); } void RDIntegerEdit::addData() { int value=edit_low; int index=-1; RDIntegerDialog *ie= new RDIntegerDialog(&value,edit_label->text(),edit_low,edit_high,this); if(ie->exec()==0) { for(unsigned i=0;icount();i++) { if(edit_values_box->item(i)->text().toInt()item(i)->text().toInt()==value) { delete ie; return; } } edit_values_box->insertItem(QString().sprintf("%d",value),index+1); } delete ie; } void RDIntegerEdit::deleteData() { QListBoxItem *item=edit_values_box->selectedItem(); if(item==NULL) { return; } delete item; } QListBoxItem *RDIntegerEdit::GetItem(int value) { for(unsigned i=0;icount();i++) { if(edit_values_box->item(i)->text().toInt()==value) { return edit_values_box->item(i); } } return NULL; }