/*************************************************************************** * Copyright (c) 2017 WandererFan * * * * This file is part of the FreeCAD CAx development system. * * * * This library is free software; you can redistribute it and/or * * modify it under the terms of the GNU Library General Public * * License as published by the Free Software Foundation; either * * version 2 of the License, or (at your option) any later version. * * * * This library 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 Library General Public License for more details. * * * * You should have received a copy of the GNU Library General Public * * License along with this library; see the file COPYING.LIB. If not, * * write to the Free Software Foundation, Inc., 59 Temple Place, * * Suite 330, Boston, MA 02111-1307, USA * * * ***************************************************************************/ #include "PreCompiled.h" #ifndef _PreComp_ #include #endif // #ifndef _PreComp_ #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include "ViewProviderGeomHatch.h" #include "TaskGeomHatch.h" #include using namespace Gui; using namespace TechDraw; using namespace TechDrawGui; TaskGeomHatch::TaskGeomHatch(TechDraw::DrawGeomHatch* inHatch,TechDrawGui::ViewProviderGeomHatch* inVp,bool mode) : ui(new Ui_TaskGeomHatch), m_hatch(inHatch), m_Vp(inVp), m_createMode(mode) { ui->setupUi(this); connect(ui->fcFile, SIGNAL(fileNameSelected( const QString & )), this, SLOT(onFileChanged(void))); m_source = m_hatch->Source.getValue(); getParameters(); initUi(); } TaskGeomHatch::~TaskGeomHatch() { delete ui; } void TaskGeomHatch::initUi() { ui->fcFile->setFileName(QString::fromUtf8(m_file.data(), m_file.size())); std::vector names = PATLineSpec::getPatternList(m_file); QStringList qsNames = listToQ(names); ui->cbName->addItems(qsNames); int nameIndex = ui->cbName->findText(QString::fromUtf8(m_name.data(),m_name.size())); if (nameIndex > -1) { ui->cbName->setCurrentIndex(nameIndex); } else { Base::Console().Warning("Warning - Pattern name not found in current PAT File\n"); } ui->sbScale->setValue(m_scale); ui->sbWeight->setValue(m_weight); ui->ccColor->setColor(m_color.asValue()); } //move values from screen to DocObjs void TaskGeomHatch::updateValues() { m_file = (ui->fcFile->fileName()).toUtf8().constData(); m_hatch->FilePattern.setValue(m_file); QString cText = ui->cbName->currentText(); m_name = cText.toUtf8().constData(); m_hatch->NamePattern.setValue(m_name); m_scale = ui->sbScale->value(); m_hatch->ScalePattern.setValue(m_scale); m_color.setValue(ui->ccColor->color()); m_Vp->ColorPattern.setValue(m_color); m_weight = ui->sbWeight->value(); m_Vp->WeightPattern.setValue(m_weight); } QStringList TaskGeomHatch::listToQ(std::vector in) { QStringList result; for (auto& s: in) { QString qs = QString::fromUtf8(s.data(), s.size()); result.append(qs); } return result; } void TaskGeomHatch::onFileChanged(void) { m_file = ui->fcFile->fileName().toUtf8().constData(); std::vector names = PATLineSpec::getPatternList(m_file); QStringList qsNames = listToQ(names); ui->cbName->clear(); ui->cbName->addItems(qsNames); } bool TaskGeomHatch::accept() { updateValues(); Gui::Command::doCommand(Gui::Command::Gui,"Gui.ActiveDocument.resetEdit()"); m_source->touch(); m_source->getDocument()->recompute(); //TODO: this is only here to get graphics to update. // sb "redraw graphics" since m_source geom has not changed. return true; } bool TaskGeomHatch::reject() { if (getCreateMode()) { std::string HatchName = m_hatch->getNameInDocument(); Gui::Command::doCommand(Gui::Command::Gui,"App.activeDocument().removeObject('%s')",HatchName.c_str()); Gui::Command::doCommand(Gui::Command::Gui,"Gui.ActiveDocument.resetEdit()"); m_source->touch(); m_source->getDocument()->recompute(); } else { m_hatch->FilePattern.setValue(m_origFile); m_hatch->NamePattern.setValue(m_origName); m_hatch->ScalePattern.setValue(m_origScale); m_Vp->ColorPattern.setValue(m_origColor); m_Vp->WeightPattern.setValue(m_origWeight); } return false; } void TaskGeomHatch::getParameters() { m_file = m_hatch->FilePattern.getValue(); m_name = m_hatch->NamePattern.getValue(); m_scale = m_hatch->ScalePattern.getValue(); m_color = m_Vp->ColorPattern.getValue(); m_weight = m_Vp->WeightPattern.getValue(); if (!getCreateMode()) { m_origFile = m_hatch->FilePattern.getValue(); m_origName = m_hatch->NamePattern.getValue(); m_origScale = m_hatch->ScalePattern.getValue(); m_origColor = m_Vp->ColorPattern.getValue(); m_origWeight = m_Vp->WeightPattern.getValue(); } } void TaskGeomHatch::changeEvent(QEvent *e) { if (e->type() == QEvent::LanguageChange) { ui->retranslateUi(this); } } ///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// TaskDlgGeomHatch::TaskDlgGeomHatch(TechDraw::DrawGeomHatch* inHatch, TechDrawGui::ViewProviderGeomHatch* inVp, bool mode) : TaskDialog(), viewProvider(nullptr) { widget = new TaskGeomHatch(inHatch,inVp, mode); taskbox = new Gui::TaskView::TaskBox(Gui::BitmapFactory().pixmap("TechDraw_Tree_View"), widget->windowTitle(), true, 0); taskbox->groupLayout()->addWidget(widget); Content.push_back(taskbox); } TaskDlgGeomHatch::~TaskDlgGeomHatch() { } void TaskDlgGeomHatch::setCreateMode(bool b) { widget->setCreateMode(b); } void TaskDlgGeomHatch::update() { //widget->updateTask(); } //==== calls from the TaskView =============================================================== void TaskDlgGeomHatch::open() { } void TaskDlgGeomHatch::clicked(int i) { Q_UNUSED(i); } bool TaskDlgGeomHatch::accept() { widget->accept(); return true; } bool TaskDlgGeomHatch::reject() { widget->reject(); return true; } #include