47#include "textureProperties.hh"
52#include "ImageStorage.hh"
54#include "QChartsPlot.hh"
58texturePropertiesWidget::texturePropertiesWidget(QWidget *parent)
63 connect(buttonBox, SIGNAL( clicked(QAbstractButton*) ),
this , SLOT ( slotButtonBoxClicked(QAbstractButton*) ) );
64 connect(textureList, SIGNAL(itemClicked(QTreeWidgetItem*,
int)),
this, SLOT(textureChanged(QTreeWidgetItem*,
int)) );
65 connect(textureList, SIGNAL(itemPressed(QTreeWidgetItem*,
int)),
this, SLOT(textureAboutToChange(QTreeWidgetItem*,
int)) );
68 connect(repeatBox, SIGNAL( clicked() ),
this , SLOT ( slotPropertiesChanged() ) );
69 connect(clampBox, SIGNAL( clicked() ),
this , SLOT ( slotPropertiesChanged() ) );
70 connect(centerBox, SIGNAL( clicked() ),
this , SLOT ( slotPropertiesChanged() ) );
71 connect(absBox, SIGNAL( clicked() ),
this , SLOT ( slotPropertiesChanged() ) );
72 connect(scaleBox, SIGNAL( clicked() ),
this , SLOT ( slotPropertiesChanged() ) );
74 connect(max_val, SIGNAL( valueChanged(
double) ),
this , SLOT ( slotPropertiesChanged(
double) ) );
75 connect(clamp_min, SIGNAL( valueChanged(
double) ),
this , SLOT ( slotPropertiesChanged(
double) ) );
76 connect(clamp_max, SIGNAL( valueChanged(
double) ),
this , SLOT ( slotPropertiesChanged(
double) ) );
78 connect(changeImageButton, SIGNAL( clicked() ),
this, SLOT( slotChangeImage() ) );
83 QGridLayout* layout =
new QGridLayout( originalData);
86 plot_->setMinimumHeight(200);
88 layout->addWidget(plot_, 0, 0);
92void texturePropertiesWidget::show(
TextureData* _texData,
int _id, QString _name){
99 QTreeWidgetItem* activeItem = 0;
101 for (
unsigned int i=0; i < texData_->
textures().size(); i++) {
102 if ( ! texData_->
textures()[i].hidden() ) {
103 if ( texData_->
textures()[i].type() != MULTITEXTURE ) {
105 QTreeWidgetItem* item = 0;
107 if ( !texData_->
textures()[i].visibleName().isEmpty() )
108 item =
new QTreeWidgetItem((QTreeWidget*)0, QStringList( texData_->
textures()[i].visibleName() ) );
110 item =
new QTreeWidgetItem((QTreeWidget*)0, QStringList( texData_->
textures()[i].name() ) );
112 textureList->addTopLevelItem( item );
114 if (texData_->
textures()[i].enabled())
118 QTreeWidgetItem* parent = 0;
119 if ( !texData_->
textures()[i].visibleName().isEmpty() )
120 parent =
new QTreeWidgetItem((QTreeWidget*)0, QStringList( texData_->
textures()[i].visibleName() ) );
122 parent =
new QTreeWidgetItem((QTreeWidget*)0, QStringList( texData_->
textures()[i].name() ) );
124 textureList->addTopLevelItem( parent ) ;
125 for (
int j = 0 ; j < texData_->
textures()[i].multiTextureList.size() ; ++j )
126 textureList->addTopLevelItem(
new QTreeWidgetItem(parent, QStringList(texData_->
textures()[i].multiTextureList[j] )) );
128 if (texData_->
textures()[i].enabled())
134 if ( textureList->invisibleRootItem()->childCount() == 0 ) {
135 QMessageBox msgBox(
this);
136 msgBox.setText(
"Cannot show Properties. No Textures available!");
142 textureLabel->setText(
"<B>Global Textures</B>");
144 textureLabel->setText(
"<B>Textures for object '" + _name +
"'</B>");
146 propChanged_ =
false;
148 if (activeItem == 0){
150 textureList->setCurrentItem( textureList->topLevelItem(0) );
151 textureChanged( textureList->topLevelItem(0), 0 );
154 textureList->setCurrentItem( activeItem );
155 textureChanged( activeItem, 0 );
161void texturePropertiesWidget::textureAboutToChange(QTreeWidgetItem* _item,
int _column){
164 QMessageBox msgBox(
this);
165 msgBox.setText(
"The properties of the current texture have been changed.");
166 msgBox.setInformativeText(
"Do you want to apply these changes?");
167 msgBox.setStandardButtons(QMessageBox::Apply | QMessageBox::Discard );
168 msgBox.setDefaultButton(QMessageBox::Apply);
169 int ret = msgBox.exec();
171 if (ret == QMessageBox::Apply){
173 for (
int i=0; i < buttonBox->buttons().count(); i++)
174 if ( buttonBox->standardButton( buttonBox->buttons()[i] ) == QDialogButtonBox::Apply )
175 slotButtonBoxClicked( buttonBox->buttons()[i] );
177 textureList->setCurrentItem( _item );
178 textureChanged( _item,_column );
181 propChanged_ =
false;
183 textureList->setCurrentItem( _item );
184 textureChanged( _item,_column );
189void texturePropertiesWidget::textureChanged(QTreeWidgetItem* _item,
int _column){
195 textureList->setCurrentItem( curItem_ );
208 textureName_ = _item->text(_column);
248 repeatBox->setChecked(texture.
parameters.repeat);
249 clampBox->setChecked(texture.
parameters.clamp);
250 centerBox->setChecked(texture.
parameters.center);
253 max_val->setValue( texture.
parameters.repeatMax );
254 clamp_min->setValue( texture.
parameters.clampMin );
255 clamp_max->setValue( texture.
parameters.clampMax );
257 switch (texture.type()) {
259 typeLabel->setText(
"Type: MultiTexture");
260 indexLabel->setEnabled(
true);
261 indexBox->setEnabled(
true);
263 indexBox->addItem(
"TODO");
266 typeLabel->setText(
"Type: HalfedgeBased");
267 indexLabel->setEnabled(
false);
268 indexBox->setEnabled(
false);
272 typeLabel->setText(
"Type: VertexBased");
273 indexLabel->setEnabled(
false);
274 indexBox->setEnabled(
false);
278 typeLabel->setText(
"Type: Environment Map");
279 indexLabel->setEnabled(
false);
280 indexBox->setEnabled(
false);
284 typeLabel->setText(
"Type: Unset");
285 indexLabel->setEnabled(
false);
286 indexBox->setEnabled(
false);
293 imageLabel->setPixmap(QPixmap::fromImage( imageStore().getImage(texture.textureImageId(),&ok) ));
296 std::cerr<< imageStore().error().toStdString();
299 imageLabel->setScaledContents(
true);
301 if ( texture.filename().startsWith(
"/") )
302 fileLabel->setText(
"File: " + texture.filename() );
304 fileLabel->setText(
"File: " + OpenFlipper::Options::textureDirStr() + QDir::separator() + texture.filename() );
306 currentImage_ = texture.filename();
309 if ( texture.dimension() == 1 && id_ != -1) {
311 std::vector< double > coords;
313 emit getCoordinates1D(textureName_, id_, coords);
315 if ( ! coords.empty() ){
318 image_ = imageStore().getImage(texture.textureImageId(),&ok);
320 std::cerr << imageStore().error().toStdString();
325 plot_->
setParameters(repeatBox->isChecked(), max_val->value(),
326 clampBox->isChecked(), clamp_min->value(), clamp_max->value(),
327 centerBox->isChecked(),
329 scaleBox->isChecked());
331 plot_->setImage( &image_ );
338 propChanged_ =
false;
339 curItem_ = textureList->currentItem();
343void texturePropertiesWidget::slotChangeImage()
346 QString fileName = QFileDialog::getOpenFileName(
this,
348 OpenFlipper::Options::currentTextureDirStr(),
349 tr(
"Images (*.png *.xpm *.jpg *.tga *.tif *.tiff *.bmp);;All Files (*.*)"));
351 if (QFile(fileName).exists()) {
352 QFileInfo fileInfo(fileName);
353 OpenFlipper::Options::currentTextureDir(fileInfo.absolutePath());
355 imageLabel->setPixmap(fileName);
356 imageLabel->setScaledContents(
true);
358 fileLabel->setText(
"File: " + fileName);
360 currentImage_ = fileName;
362 #if QT_VERSION < QT_VERSION_CHECK(5, 15, 0)
363 image_ = imageLabel->pixmap()->toImage();
365 image_ = imageLabel->pixmap(Qt::ReturnByValue).toImage();
368 plot_->setImage(&image_);
376void texturePropertiesWidget::slotButtonBoxClicked(QAbstractButton* _button){
378 QDialogButtonBox::StandardButton btn = buttonBox->standardButton(_button);
380 if ( btn == QDialogButtonBox::Apply || btn == QDialogButtonBox::Ok){
383 bool changed =
false;
387 if ( texture.
parameters.repeat != repeatBox->isChecked() ){
388 texture.
parameters.repeat=repeatBox->isChecked();
391 if ( texture.
parameters.clamp != clampBox->isChecked() ){
392 texture.
parameters.clamp=clampBox->isChecked();
395 if ( texture.
parameters.center != centerBox->isChecked() ){
396 texture.
parameters.center=centerBox->isChecked();
399 if ( texture.
parameters.abs != absBox->isChecked() ){
403 if ( texture.
parameters.scale != scaleBox->isChecked() ){
404 texture.
parameters.scale=scaleBox->isChecked();
408 if ( texture.
parameters.repeatMax != max_val->value() ){
409 texture.
parameters.repeatMax = max_val->value();
413 if ( texture.
parameters.clampMin != clamp_min->value() ){
414 texture.
parameters.clampMin = clamp_min->value();
418 if ( texture.
parameters.clampMax != clamp_max->value() ){
419 texture.
parameters.clampMax = clamp_max->value();
423 if ( texture.filename() != currentImage_ ){
425 texture.filename( currentImage_ );
428 int newImageId = imageStore().addImageFile(currentImage_);
429 texture.textureImageId( newImageId );
430 texData_->addManagedImageId( newImageId );
436 emit applyProperties(texData_, textureName_, id_ );
438 propChanged_ =
false;
441 if ( btn == QDialogButtonBox::Apply )
447void texturePropertiesWidget::slotPropertiesChanged(
double ){
450 plot_->
setParameters(repeatBox->isChecked(), max_val->value(),
451 clampBox->isChecked(), clamp_min->value(), clamp_max->value(),
452 centerBox->isChecked(),
454 scaleBox->isChecked());
void setFunction(const std::vector< double > &_values)
set the function to plot
void setParameters(const TexParameters &_parameters)
Set all parameters as one block.
Texture & texture(QString _textureName)
Get the texture object.
std::vector< Texture > & textures()
Get reference to the texture vector.
bool textureExists(QString _textureName)
Check if a texture exists.
TexParameters parameters
Parameters of the texture.