const ldraw::element_ref* Selection::getUniqueRef() const { if (!tsset_) return 0L; if (tsset_->count() == 1) return CAST_AS_CONST_REF(model_->elements()[*tsset_->begin()]); return 0L; }
CommandTransform::CommandTransform(bool inverse, const ldraw::matrix &matrix, const QSet<int> &selection, ldraw::model *model) : CommandBase(selection, model) { setText(i18n("Transform")); inverse_ = inverse; matrix_ = matrix; for (QSet<int>::ConstIterator it = selection.constBegin(); it != selection.constEnd(); ++it) { if (model->elements()[*it]->get_type() == ldraw::type_ref) oldmatrices_[*it] = CAST_AS_CONST_REF(model->elements()[*it])->get_matrix(); } }
const ldraw::element_ref* Selection::getLastRef() const { if (tsset_) { if (tsset_->count() == 1) { int ptr = *tsset_->begin(); const ldraw::element_base *eb = model_->elements()[ptr]; if (eb->get_type() == ldraw::type_ref) return CAST_AS_CONST_REF(eb); } else if (tsset_->count() == 0) { return 0L; } else { for (ldraw::model::reverse_iterator it = model_->elements().rbegin(); it != model_->elements().rend(); ++it) { if ((*it)->get_type() == ldraw::type_ref) return CAST_AS_CONST_REF(*it); } } } return 0L; }
CommandTransform::CommandTransform(const QSet<int> &selection, ldraw::model *model, Editor::RotationPivot pivotMode, const ldraw::vector &pivot) : CommandBase(selection, model) { setText(QObject::tr("Transform")); pivotMode_ = pivotMode; pivot_ = pivot; for (QSet<int>::ConstIterator it = selection.constBegin(); it != selection.constEnd(); ++it) { if (model->elements()[*it]->get_type() == ldraw::type_ref) oldmatrices_[*it] = CAST_AS_CONST_REF(model->elements()[*it])->get_matrix(); } }
CommandTransform::CommandTransform(const QSet<int> &selection, ldraw::model *model, Editor::RotationPivot pivot) : CommandBase(selection, model) { setText(i18n("Transform")); pivot_ = pivot; bool center = false; if (pivot_ == Editor::PivotCenter) center = true; CommandSelectionFilter csf(this); pivotpoint_ = PivotExtension::queryPivot(model_, center, &csf); for (QSet<int>::ConstIterator it = selection.constBegin(); it != selection.constEnd(); ++it) { if (model->elements()[*it]->get_type() == ldraw::type_ref) oldmatrices_[*it] = CAST_AS_CONST_REF(model->elements()[*it])->get_matrix(); } }
QVariant ContentsModel::data(const QModelIndex &index, int role) const { ldraw::element_base *b = model_->elements()[index.row()]; if (role == Qt::DisplayRole) { switch (index.column()) { case ColumnIndex: return QVariant(QString::number(index.row())); case ColumnObjectType: switch (b->get_type()) { case ldraw::type_comment: return i18n("Comment"); case ldraw::type_state: return i18n("Meta"); case ldraw::type_print: return i18n("Print"); case ldraw::type_ref: { const ldraw::element_ref *cref = CAST_AS_CONST_REF(b); if (!cref->get_model()) return i18n("Unresolved"); else if (cref->get_model()->modeltype() == ldraw::model::submodel) return i18n("Submodel"); else if (cref->get_model()->modeltype() == ldraw::model::external_file) return i18n("File"); else return i18n("Part"); } case ldraw::type_line: return i18n("Line"); case ldraw::type_triangle: return i18n("Triangle"); case ldraw::type_quadrilateral: return i18n("Quadrilateral"); case ldraw::type_condline: return i18n("Conditional Line"); case ldraw::type_bfc: return i18n("BFC Control"); default: return QVariant(); } case ColumnPosition: if (b->get_type() == ldraw::type_ref) { const ldraw::matrix &matrix = CAST_AS_CONST_REF(b)->get_matrix(); return i18n("%1, %2, %3", matrix.value(0, 3), matrix.value(1, 3), matrix.value(2, 3)); } else { return i18n("-"); } case ColumnData: switch (b->get_type()) { case ldraw::type_comment: { const ldraw::element_comment *e = CAST_AS_CONST_COMMENT(b); return e->get_comment().c_str(); } case ldraw::type_state: { const ldraw::element_state *e = CAST_AS_CONST_STATE(b); switch (e->get_state()) { case ldraw::element_state::state_step: return i18n("Step"); case ldraw::element_state::state_pause: return i18n("Pause"); case ldraw::element_state::state_clear: return i18n("Clear"); case ldraw::element_state::state_save: return i18n("Pause"); default: return QVariant(); } } case ldraw::type_print: { const ldraw::element_print *e = CAST_AS_CONST_PRINT(b); return e->get_string().c_str(); } case ldraw::type_ref: { const ldraw::element_ref *e = CAST_AS_CONST_REF(b); return i18n("%1 (%2)", e->filename().c_str(), e->get_model() ? e->get_model()->desc().c_str() : i18n("Unlinked")); } case ldraw::type_line: { const ldraw::element_line *e = CAST_AS_CONST_LINE(b); return i18n("(%1, %2, %3) - (%4, %5, %6)", e->pos1().x(), e->pos1().y(), e->pos1().z(), e->pos2().x(), e->pos2().y(), e->pos2().z()); } case ldraw::type_triangle: { const ldraw::element_triangle *e = CAST_AS_CONST_TRIANGLE(b); return i18n("(%1, %2, %3) - (%4, %5, %6) - (%7, %8, %9)", e->pos1().x(), e->pos1().y(), e->pos1().z(), e->pos2().x(), e->pos2().y(), e->pos2().z(), e->pos3().x(), e->pos3().y(), e->pos3().z()); } case ldraw::type_quadrilateral: { const ldraw::element_quadrilateral *e = CAST_AS_CONST_QUADRILATERAL(b); return i18n("(%1, %2, %3) - (%4, %5, %6)", e->pos1().x(), e->pos1().y(), e->pos1().z(), e->pos2().x(), e->pos2().y(), e->pos2().z()) + i18n(" - (%1, %2, %3) - (%4, %5, %6)", e->pos3().x(), e->pos3().y(), e->pos3().z(), e->pos4().x(), e->pos4().y(), e->pos4().z()); } case ldraw::type_condline: { const ldraw::element_condline *e = CAST_AS_CONST_CONDLINE(b); return i18n("Line: (%1, %2, %3) - (%4, %5, %6)", e->pos1().x(), e->pos1().y(), e->pos1().z(), e->pos2().x(), e->pos2().y(), e->pos2().z()) + i18n(", Guide: (%1, %2, %3) - (%4, %5, %6)", e->pos3().x(), e->pos3().y(), e->pos3().z(), e->pos4().x(), e->pos4().y(), e->pos4().z()); } case ldraw::type_bfc: { ldraw::element_bfc::command c = CAST_AS_BFC(b)->get_command(); if (c == ldraw::element_bfc::noclip) return i18n("No Clip"); else if (c == ldraw::element_bfc::invertnext) return i18n("Invert Next"); return QString("%1%2").arg(i18n(c & ldraw::element_bfc::clip ? "Clip, " : "")).arg(i18n(c & ldraw::element_bfc::cw ? "Clockwise" : "Counter-Clockwise")); } default: return QVariant(); } default: return QVariant(); } } else if (role == Qt::BackgroundRole) { switch (b->get_type()) { case ldraw::type_comment: if (Application::self()->config()->listCommentColorize()) return QBrush(Application::self()->config()->listCommentColor()); else return QVariant(); case ldraw::type_state: case ldraw::type_print: if (Application::self()->config()->listMetaColorize()) return QBrush(Application::self()->config()->listMetaColor()); else return QVariant(); case ldraw::type_ref: if (Application::self()->config()->listRefColorize()) { const ldraw::element_ref *e = CAST_AS_CONST_REF(b); if (!e->get_model()) return QBrush(Application::self()->config()->listUnresolvedColor()); else if (e->get_model()->is_submodel_of(model_->parent())) return QBrush(Application::self()->config()->listSubmodelColor()); else return QBrush(Application::self()->config()->listPartColor()); } else { return QVariant(); } case ldraw::type_line: case ldraw::type_triangle: case ldraw::type_quadrilateral: case ldraw::type_condline: if (Application::self()->config()->listPrimitiveColorize()) return QBrush(Application::self()->config()->listPrimitiveColor()); else return QVariant(); default: return QVariant(); } } else if (role == Qt::TextAlignmentRole) { if (index.column() == ColumnIndex || index.column() == ColumnObjectType) return Qt::AlignHCenter; } else if (role == Qt::DecorationRole) { if (index.column() == ColumnData && model_->elements()[index.row()]->capabilities() & ldraw::capability_color) { const ldraw::color &c = dynamic_cast<const ldraw::element_colored_base *>(model_->elements()[index.row()])->get_color(); return ColorManager::colorPixmap(c); } } else if (role == Qt::CheckStateRole) { if (index.column() == ColumnCheck) { if (model_->elements()[index.row()]->line_type() == 0) return QVariant(); else if (checkTable_->find(index.row())) return Qt::Checked; else return Qt::Unchecked; } } return QVariant(); }