File indexing completed on 2024-06-02 04:35:05
0001 /*************************************************************************** 0002 * * 0003 * copyright : (C) 2008 The University of Toronto * 0004 * netterfield@astro.utoronto.ca * 0005 * * 0006 * This program is free software; you can redistribute it and/or modify * 0007 * it under the terms of the GNU General Public License as published by * 0008 * the Free Software Foundation; either version 2 of the License, or * 0009 * (at your option) any later version. * 0010 * * 0011 ***************************************************************************/ 0012 0013 #include "labelitemdialog.h" 0014 0015 #include "labeldimensionstab.h" 0016 0017 #include "labelitem.h" 0018 #include "labelpropertiestab.h" 0019 #include "dialogpage.h" 0020 #include "application.h" 0021 #include "objectstore.h" 0022 #include "mainwindow.h" 0023 #include "document.h" 0024 #include "dialogdefaults.h" 0025 0026 namespace Kst { 0027 0028 LabelItemDialog::LabelItemDialog(LabelItem *item, QWidget *parent) 0029 : ViewItemDialog(item, parent), _labelItem(item) { 0030 0031 _propertiesTab = new LabelPropertiesTab(this); 0032 DialogPage *propertiesPage = new DialogPage(this); 0033 propertiesPage->setPageTitle(tr("Properties")); 0034 propertiesPage->addDialogTab(_propertiesTab); 0035 addDialogPage(propertiesPage); 0036 selectDialogPage(propertiesPage); 0037 connect(_propertiesTab, SIGNAL(apply()), this, SLOT(propertiesChanged())); 0038 0039 setupProperties(); 0040 _saveAsDefault->show(); 0041 0042 _labelDimensionsTab = new LabelDimensionsTab(item, this); 0043 0044 DialogPage *labelDimensionsPage = new DialogPage(this); 0045 labelDimensionsPage->setPageTitle(tr("Size/Position")); 0046 labelDimensionsPage->addDialogTab(_labelDimensionsTab); 0047 addDialogPage(labelDimensionsPage); 0048 selectDialogPage(labelDimensionsPage); 0049 0050 connect(_labelDimensionsTab, SIGNAL(apply()), this, SLOT(dimensionsChanged())); 0051 0052 setupDimensions(); 0053 0054 connect(_labelDimensionsTab, SIGNAL(tabModified()), this, SLOT(modified())); 0055 connect(_saveAsDefault, SIGNAL(clicked()), this, SLOT(modified())); 0056 0057 } 0058 0059 0060 LabelItemDialog::~LabelItemDialog() { 0061 } 0062 0063 0064 void LabelItemDialog::setupProperties() { 0065 _propertiesTab->setLabelText(_labelItem->labelText()); 0066 _propertiesTab->setLabelScale(_labelItem->labelScale()); 0067 _propertiesTab->setLabelColor(_labelItem->labelColor()); 0068 _propertiesTab->setLabelFont(_labelItem->labelFont()); 0069 } 0070 0071 0072 void LabelItemDialog::propertiesChanged() { 0073 _labelItem->setLabelText(_propertiesTab->labelText()); 0074 _labelItem->setLabelScale(_propertiesTab->labelScale()); 0075 _labelItem->setLabelColor(_propertiesTab->labelColor()); 0076 _labelItem->setLabelFont(_propertiesTab->labelFont()); 0077 //saveDimensions(_labelItem); 0078 if (_saveAsDefault->isChecked()) { 0079 _labelItem->saveAsDialogDefaults(); 0080 } 0081 kstApp->mainWindow()->document()->setChanged(true); 0082 _labelItem->update(); 0083 } 0084 0085 0086 void LabelItemDialog::setupDimensions() { 0087 _labelDimensionsTab->enableSingleEditOptions(true); 0088 _labelDimensionsTab->setupDimensions(); 0089 } 0090 0091 void LabelItemDialog::saveDimensions(ViewItem *viewitem) { 0092 Q_ASSERT(viewitem); 0093 0094 LabelItem *item = qobject_cast<LabelItem*>(viewitem); 0095 Q_ASSERT(item); 0096 0097 QPointF xy(_labelDimensionsTab->x(),_labelDimensionsTab->y()); 0098 qreal theta = _labelDimensionsTab->rotation(); 0099 bool fix_left = _labelDimensionsTab->fixLeft(); 0100 0101 if (_labelDimensionsTab->lockPosToData() && item->dataPosLockable()) { 0102 QRectF dr = item->dataRelativeRect(); 0103 if (fix_left) { 0104 dr.moveTopLeft(xy); 0105 item->setFixLeft(true); 0106 } else { 0107 dr.moveBottomRight(xy); 0108 item->setFixLeft(false); 0109 } 0110 item->setDataRelativeRect(dr); 0111 0112 bool lockPosToData = _labelDimensionsTab->lockPosToDataDirty() ? _labelDimensionsTab->lockPosToData() : item->lockPosToData(); 0113 item->setLockPosToData(lockPosToData); 0114 0115 item->applyDataLockedDimensions(); 0116 0117 } else { 0118 QRectF parentRect = item->parentRect(); 0119 qreal parentWidth = parentRect.width(); 0120 qreal parentHeight = parentRect.height(); 0121 qreal parentX = parentRect.x(); 0122 qreal parentY = parentRect.y(); 0123 bool lockPosToData = _labelDimensionsTab->lockPosToDataDirty() ? _labelDimensionsTab->lockPosToData() : item->lockPosToData(); 0124 item->setLockPosToData(lockPosToData); 0125 qreal width = item->rect().width(); 0126 qreal height = item->rect().height(); 0127 0128 item->setPos(parentX + xy.x()*parentWidth, parentY + xy.y()*parentHeight); 0129 if (fix_left) { 0130 item->setViewRect(0,-height, width, height); 0131 item->setFixLeft(true); 0132 } else { 0133 item->setViewRect(-width,-height, width, height); 0134 item->setFixLeft(false); 0135 } 0136 } 0137 QTransform transform; 0138 transform.rotate(theta); 0139 item->setTransform(transform); 0140 item->updateRelativeSize(true); 0141 0142 if (_saveAsDefault->isChecked()) { 0143 dialogDefaults().setValue(item->staticDefaultsGroupName()+"/fixLeft",_labelDimensionsTab->fixLeft()); 0144 } 0145 } 0146 } 0147 0148 // vim: ts=2 sw=2 et