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