+ use quantity boxes in fillet/chamfer dialog
This commit is contained in:
parent
e3aba10762
commit
92c2b18350
|
@ -66,6 +66,7 @@
|
|||
#include <Gui/Application.h>
|
||||
#include <Gui/BitmapFactory.h>
|
||||
#include <Gui/Command.h>
|
||||
#include <Gui/QuantitySpinBox.h>
|
||||
#include <Gui/WaitCursor.h>
|
||||
#include <Gui/Selection.h>
|
||||
#include <Gui/SelectionFilter.h>
|
||||
|
@ -75,6 +76,8 @@
|
|||
|
||||
using namespace PartGui;
|
||||
|
||||
Q_DECLARE_METATYPE(Base::Quantity)
|
||||
|
||||
FilletRadiusDelegate::FilletRadiusDelegate(QObject *parent) : QItemDelegate(parent)
|
||||
{
|
||||
}
|
||||
|
@ -85,8 +88,8 @@ QWidget *FilletRadiusDelegate::createEditor(QWidget *parent, const QStyleOptionV
|
|||
if (index.column() < 1)
|
||||
return 0;
|
||||
|
||||
QDoubleSpinBox *editor = new QDoubleSpinBox(parent);
|
||||
editor->setDecimals(Base::UnitsApi::getDecimals());
|
||||
Gui::QuantitySpinBox *editor = new Gui::QuantitySpinBox(parent);
|
||||
editor->setUnit(Base::Unit::Length);
|
||||
editor->setMinimum(0.0);
|
||||
editor->setMaximum(INT_MAX);
|
||||
editor->setSingleStep(0.1);
|
||||
|
@ -96,22 +99,23 @@ QWidget *FilletRadiusDelegate::createEditor(QWidget *parent, const QStyleOptionV
|
|||
|
||||
void FilletRadiusDelegate::setEditorData(QWidget *editor, const QModelIndex &index) const
|
||||
{
|
||||
double value = index.model()->data(index, Qt::EditRole).toDouble();
|
||||
Base::Quantity value = index.model()->data(index, Qt::EditRole).value<Base::Quantity>();
|
||||
|
||||
QDoubleSpinBox *spinBox = static_cast<QDoubleSpinBox*>(editor);
|
||||
Gui::QuantitySpinBox *spinBox = static_cast<Gui::QuantitySpinBox*>(editor);
|
||||
spinBox->setValue(value);
|
||||
}
|
||||
|
||||
void FilletRadiusDelegate::setModelData(QWidget *editor, QAbstractItemModel *model,
|
||||
const QModelIndex &index) const
|
||||
{
|
||||
QDoubleSpinBox *spinBox = static_cast<QDoubleSpinBox*>(editor);
|
||||
Gui::QuantitySpinBox *spinBox = static_cast<Gui::QuantitySpinBox*>(editor);
|
||||
spinBox->interpretText();
|
||||
//double value = spinBox->value();
|
||||
//QString value = QString::fromLatin1("%1").arg(spinBox->value(),0,'f',2);
|
||||
QString value = QLocale::system().toString(spinBox->value(),'f',Base::UnitsApi::getDecimals());
|
||||
//QString value = QLocale::system().toString(spinBox->value().getValue(),'f',Base::UnitsApi::getDecimals());
|
||||
Base::Quantity value = spinBox->value();
|
||||
|
||||
model->setData(index, value, Qt::EditRole);
|
||||
model->setData(index, QVariant::fromValue<Base::Quantity>(value), Qt::EditRole);
|
||||
}
|
||||
|
||||
void FilletRadiusDelegate::updateEditorGeometry(QWidget *editor, const QStyleOptionViewItem &option,
|
||||
|
@ -149,6 +153,17 @@ bool FilletRadiusModel::setData (const QModelIndex & index, const QVariant & val
|
|||
return ok;
|
||||
}
|
||||
|
||||
QVariant FilletRadiusModel::data(const QModelIndex& index, int role) const
|
||||
{
|
||||
QVariant value = QStandardItemModel::data(index, role);
|
||||
if (role == Qt::DisplayRole && index.column() >= 1) {
|
||||
Base::Quantity q = value.value<Base::Quantity>();
|
||||
QString str = q.getUserString();
|
||||
return str;
|
||||
}
|
||||
return value;
|
||||
}
|
||||
|
||||
// --------------------------------------------------------------
|
||||
|
||||
namespace PartGui {
|
||||
|
@ -207,8 +222,8 @@ DlgFilletEdges::DlgFilletEdges(FilletType type, Part::FilletBase* fillet, QWidge
|
|||
ui->setupUi(this);
|
||||
ui->filletStartRadius->setMaximum(INT_MAX);
|
||||
ui->filletEndRadius->setMaximum(INT_MAX);
|
||||
ui->filletStartRadius->setDecimals(Base::UnitsApi::getDecimals());
|
||||
ui->filletEndRadius->setDecimals(Base::UnitsApi::getDecimals());
|
||||
ui->filletStartRadius->setUnit(Base::Unit::Length);
|
||||
ui->filletEndRadius->setUnit(Base::Unit::Length);
|
||||
|
||||
d->object = 0;
|
||||
d->selection = new EdgeFaceSelection(d->object);
|
||||
|
@ -557,8 +572,10 @@ void DlgFilletEdges::setupFillet(const std::vector<App::DocumentObject*>& objs)
|
|||
if (it != d->edge_ids.end()) {
|
||||
int index = it - d->edge_ids.begin();
|
||||
model->setData(model->index(index, 0), Qt::Checked, Qt::CheckStateRole);
|
||||
model->setData(model->index(index, 1), QVariant(QLocale::system().toString(et->radius1,'f',Base::UnitsApi::getDecimals())));
|
||||
model->setData(model->index(index, 2), QVariant(QLocale::system().toString(et->radius2,'f',Base::UnitsApi::getDecimals())));
|
||||
//model->setData(model->index(index, 1), QVariant(QLocale::system().toString(et->radius1,'f',Base::UnitsApi::getDecimals())));
|
||||
//model->setData(model->index(index, 2), QVariant(QLocale::system().toString(et->radius2,'f',Base::UnitsApi::getDecimals())));
|
||||
model->setData(model->index(index, 1), QVariant::fromValue<Base::Quantity>(Base::Quantity(et->radius1, Base::Unit::Length)));
|
||||
model->setData(model->index(index, 2), QVariant::fromValue<Base::Quantity>(Base::Quantity(et->radius2, Base::Unit::Length)));
|
||||
|
||||
startRadius = et->radius1;
|
||||
endRadius = et->radius2;
|
||||
|
@ -675,8 +692,10 @@ void DlgFilletEdges::on_shapeObject_activated(int index)
|
|||
for (std::vector<int>::iterator it = d->edge_ids.begin(); it != d->edge_ids.end(); ++it) {
|
||||
model->setData(model->index(index, 0), QVariant(tr("Edge%1").arg(*it)));
|
||||
model->setData(model->index(index, 0), QVariant(*it), Qt::UserRole);
|
||||
model->setData(model->index(index, 1), QVariant(QLocale::system().toString(1.0,'f',Base::UnitsApi::getDecimals())));
|
||||
model->setData(model->index(index, 2), QVariant(QLocale::system().toString(1.0,'f',Base::UnitsApi::getDecimals())));
|
||||
//model->setData(model->index(index, 1), QVariant(QLocale::system().toString(1.0,'f',Base::UnitsApi::getDecimals())));
|
||||
//model->setData(model->index(index, 2), QVariant(QLocale::system().toString(1.0,'f',Base::UnitsApi::getDecimals())));
|
||||
model->setData(model->index(index, 1), QVariant::fromValue<Base::Quantity>(Base::Quantity(1.0,Base::Unit::Length)));
|
||||
model->setData(model->index(index, 2), QVariant::fromValue<Base::Quantity>(Base::Quantity(1.0,Base::Unit::Length)));
|
||||
std::stringstream element;
|
||||
element << "Edge" << *it;
|
||||
if (Gui::Selection().isSelected(part, element.str().c_str()))
|
||||
|
@ -770,32 +789,30 @@ void DlgFilletEdges::on_filletType_activated(int index)
|
|||
ui->treeView->resizeColumnToContents(2);
|
||||
}
|
||||
|
||||
void DlgFilletEdges::on_filletStartRadius_valueChanged(double radius)
|
||||
void DlgFilletEdges::on_filletStartRadius_valueChanged(const Base::Quantity& radius)
|
||||
{
|
||||
QAbstractItemModel* model = ui->treeView->model();
|
||||
QString text = QLocale::system().toString(radius,'f',Base::UnitsApi::getDecimals());
|
||||
for (int i=0; i<model->rowCount(); ++i) {
|
||||
QVariant value = model->index(i,0).data(Qt::CheckStateRole);
|
||||
Qt::CheckState checkState = static_cast<Qt::CheckState>(value.toInt());
|
||||
|
||||
// is item checked
|
||||
if (checkState & Qt::Checked) {
|
||||
model->setData(model->index(i, 1), QVariant(text));
|
||||
model->setData(model->index(i, 1), QVariant::fromValue<Base::Quantity>(radius));
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
void DlgFilletEdges::on_filletEndRadius_valueChanged(double radius)
|
||||
void DlgFilletEdges::on_filletEndRadius_valueChanged(const Base::Quantity& radius)
|
||||
{
|
||||
QAbstractItemModel* model = ui->treeView->model();
|
||||
QString text = QLocale::system().toString(radius,'f',Base::UnitsApi::getDecimals());
|
||||
for (int i=0; i<model->rowCount(); ++i) {
|
||||
QVariant value = model->index(i,0).data(Qt::CheckStateRole);
|
||||
Qt::CheckState checkState = static_cast<Qt::CheckState>(value.toInt());
|
||||
|
||||
// is item checked
|
||||
if (checkState & Qt::Checked) {
|
||||
model->setData(model->index(i, 2), QVariant(text));
|
||||
model->setData(model->index(i, 2), QVariant::fromValue<Base::Quantity>(radius));
|
||||
}
|
||||
}
|
||||
}
|
||||
|
@ -846,13 +863,15 @@ bool DlgFilletEdges::accept()
|
|||
if (checkState & Qt::Checked) {
|
||||
// the index value of the edge
|
||||
int id = model->index(i,0).data(Qt::UserRole).toInt();
|
||||
double r1 = model->index(i,1).data().toDouble();
|
||||
double r2 = r1;
|
||||
Base::Quantity r1 = model->index(i,1).data(Qt::EditRole).value<Base::Quantity>();
|
||||
Base::Quantity r2 = r1;
|
||||
if (end_radius)
|
||||
r2 = model->index(i,2).data().toDouble();
|
||||
r2 = model->index(i,2).data(Qt::EditRole).value<Base::Quantity>();
|
||||
code += QString::fromLatin1(
|
||||
"__fillets__.append((%1,%2,%3))\n")
|
||||
.arg(id).arg(r1,0,'f',Base::UnitsApi::getDecimals()).arg(r2,0,'f',Base::UnitsApi::getDecimals());
|
||||
.arg(id)
|
||||
.arg(r1.getValue(),0,'f',Base::UnitsApi::getDecimals())
|
||||
.arg(r2.getValue(),0,'f',Base::UnitsApi::getDecimals());
|
||||
todo = true;
|
||||
}
|
||||
}
|
||||
|
|
|
@ -67,6 +67,7 @@ public:
|
|||
Qt::ItemFlags flags (const QModelIndex & index) const;
|
||||
bool setData (const QModelIndex & index, const QVariant & value,
|
||||
int role = Qt::EditRole);
|
||||
QVariant data(const QModelIndex&, int role = Qt::DisplayRole) const;
|
||||
void updateCheckStates();
|
||||
|
||||
Q_SIGNALS:
|
||||
|
@ -104,8 +105,8 @@ private Q_SLOTS:
|
|||
void on_selectAllButton_clicked();
|
||||
void on_selectNoneButton_clicked();
|
||||
void on_filletType_activated(int);
|
||||
void on_filletStartRadius_valueChanged(double);
|
||||
void on_filletEndRadius_valueChanged(double);
|
||||
void on_filletStartRadius_valueChanged(const Base::Quantity&);
|
||||
void on_filletEndRadius_valueChanged(const Base::Quantity&);
|
||||
void toggleCheckState(const QModelIndex&);
|
||||
void onHighlightEdges();
|
||||
|
||||
|
|
|
@ -98,7 +98,10 @@
|
|||
</widget>
|
||||
</item>
|
||||
<item>
|
||||
<widget class="QDoubleSpinBox" name="filletStartRadius">
|
||||
<widget class="Gui::QuantitySpinBox" name="filletStartRadius">
|
||||
<property name="unit" stdset="0">
|
||||
<string notr="true">mm</string>
|
||||
</property>
|
||||
<property name="singleStep">
|
||||
<double>0.100000000000000</double>
|
||||
</property>
|
||||
|
@ -108,7 +111,10 @@
|
|||
</widget>
|
||||
</item>
|
||||
<item>
|
||||
<widget class="QDoubleSpinBox" name="filletEndRadius">
|
||||
<widget class="Gui::QuantitySpinBox" name="filletEndRadius">
|
||||
<property name="unit" stdset="0">
|
||||
<string notr="true">mm</string>
|
||||
</property>
|
||||
<property name="singleStep">
|
||||
<double>0.100000000000000</double>
|
||||
</property>
|
||||
|
@ -177,6 +183,13 @@
|
|||
</item>
|
||||
</layout>
|
||||
</widget>
|
||||
<customwidgets>
|
||||
<customwidget>
|
||||
<class>Gui::QuantitySpinBox</class>
|
||||
<extends>QWidget</extends>
|
||||
<header>Gui/QuantitySpinBox.h</header>
|
||||
</customwidget>
|
||||
</customwidgets>
|
||||
<tabstops>
|
||||
<tabstop>shapeObject</tabstop>
|
||||
<tabstop>filletType</tabstop>
|
||||
|
|
Loading…
Reference in New Issue
Block a user