1 /***************************************************************************
2 * *
3 * copyright : (C) 2008 The University of Toronto *
4 * netterfield@astro.utoronto.ca *
5 * *
6 * This program is free software; you can redistribute it and/or modify *
7 * it under the terms of the GNU General Public License as published by *
8 * the Free Software Foundation; either version 2 of the License, or *
9 * (at your option) any later version. *
10 * *
11 ***************************************************************************/
12
13 #include "legenditemdialog.h"
14
15 #include "legendtab.h"
16 #include "dialogpage.h"
17 #include "application.h"
18 #include "objectstore.h"
19 #include "mainwindow.h"
20 #include "document.h"
21
22 #include "curve.h"
23 #include "curvedialog.h"
24 #include "plotrenderitem.h"
25 #include "plotitem.h"
26 #include "image.h"
27 #include "imagedialog.h"
28
29 namespace Kst {
30
LegendItemDialog(LegendItem * item,QWidget * parent)31 LegendItemDialog::LegendItemDialog(LegendItem *item, QWidget *parent)
32 : ViewItemDialog(item, parent), _legendItem(item) {
33
34 _store = kstApp->mainWindow()->document()->objectStore();
35
36 _legendTab = new LegendTab(this);
37 connect(_legendTab, SIGNAL(apply()), this, SLOT(legendChanged()));
38
39 DialogPage *page = new DialogPage(this);
40 page->setPageTitle(tr("Legend"));
41 page->addDialogTab(_legendTab);
42 addDialogPage(page);
43
44 setupLegend();
45
46 setSupportsMultipleEdit(true);
47
48 QList<LegendItem *> legends = ViewItem::getItems<LegendItem>();
49
50 clearMultipleEditOptions();
51 foreach(LegendItem* legend, legends) {
52 addMultipleEditOption(legend->Name(), legend->descriptionTip(), legend->shortName());
53 }
54
55 _saveAsDefault->show();
56 connect(this, SIGNAL(editMultipleMode()), this, SLOT(editMultiple()));
57 connect(this, SIGNAL(editSingleMode()), this, SLOT(editSingle()));
58 connect(this, SIGNAL(apply()), this, SLOT(slotApply()));
59 }
60
61
~LegendItemDialog()62 LegendItemDialog::~LegendItemDialog() {
63 }
64
slotApply()65 void LegendItemDialog::slotApply() {
66 //FIXME: it is not clear that slotApply must be executed last.
67 // experimentally, it seems to be...
68 if (_saveAsDefault->isChecked()) {
69 _legendItem->saveAsDialogDefaults();
70 }
71 }
72
73
setupLegend()74 void LegendItemDialog::setupLegend() {
75 QStringList displayedRelations;
76 QStringList availableRelations;
77 QStringList allRelations;
78 QStringList displayedRelationTips;
79 QStringList availableRelationTips;
80 QStringList allRelationTips;
81
82 CurveList curves = _store->getObjects<Curve>();
83 ImageList images = _store->getObjects<Image>();
84
85 if (_legendItem->relations().isEmpty()) {
86 foreach (RelationPtr relation, _legendItem->plot()->renderItem(PlotRenderItem::Cartesian)->relationList()) {
87 displayedRelations.append(relation->Name());
88 displayedRelationTips.append(relation->descriptionTip());
89 }
90 } else {
91 foreach (RelationPtr relation, _legendItem->relations()) {
92 displayedRelations.append(relation->Name());
93 displayedRelationTips.append(relation->descriptionTip());
94 }
95 }
96
97 foreach (CurvePtr curve, curves) {
98 allRelations.append(curve->Name());
99 allRelationTips.append(curve->descriptionTip());
100 if (!displayedRelations.contains(curve->Name())) {
101 availableRelations.append(curve->Name());
102 availableRelationTips.append(curve->descriptionTip());
103 }
104 }
105
106 foreach (ImagePtr image, images) {
107 allRelations.append(image->Name());
108 allRelationTips.append(image->descriptionTip());
109 if (!displayedRelations.contains(image->Name())) {
110 availableRelations.append(image->Name());
111 availableRelationTips.append(image->descriptionTip());
112 }
113 }
114
115 _legendTab->setDisplayedRelations(displayedRelations, displayedRelationTips);
116 _legendTab->setAvailableRelations(availableRelations, availableRelationTips);
117
118 _legendTab->setFont(_legendItem->font());
119 _legendTab->setFontScale(_legendItem->fontScale());
120 _legendTab->setTitle(_legendItem->title());
121 _legendTab->setAutoContents(_legendItem->autoContents());
122 _legendTab->setVerticalDisplay(_legendItem->verticalDisplay());
123 _legendTab->setColor(_legendItem->legendColor());
124
125 }
126
editMultiple()127 void LegendItemDialog::editMultiple() {
128 _legendTab->clearTabValues();
129 _legendTab->setSingle(false);
130 }
131
editSingle()132 void LegendItemDialog::editSingle() {
133 _legendTab->setSingle(true);
134 setupLegend();
135 }
136
legendChanged()137 void LegendItemDialog::legendChanged() {
138 if (editMode() == Multiple) {
139 foreach(ViewItem* item, selectedMultipleEditObjects()) {
140 LegendItem* legendItem = (LegendItem*)item;
141 saveLegend(legendItem, false);
142 }
143 } else {
144 saveLegend(_legendItem, true);
145 }
146 }
147
saveLegend(LegendItem * legendItem,bool save_relations)148 void LegendItemDialog::saveLegend(LegendItem *legendItem, bool save_relations) {
149 legendItem->setLegendFont(_legendTab->font(legendItem->font()));
150 legendItem->setFontScale(_legendTab->fontScale());
151 legendItem->setTitle(_legendTab->title());
152 legendItem->setAutoContents(_legendTab->autoContents());
153 legendItem->setVerticalDisplay(_legendTab->verticalDisplay());
154 legendItem->setLegendColor(_legendTab->legendColor());
155
156 QStringList displayedRelations = _legendTab->displayedRelations();
157
158 if (save_relations) {
159 RelationList newRelations;
160 foreach (const QString &relationName, displayedRelations) {
161 if (RelationPtr relation = kst_cast<Relation>(_store->retrieveObject(relationName))) {
162 newRelations.append(relation);
163 }
164 }
165 legendItem->setRelations(newRelations);
166 }
167 legendItem->update();
168 }
169
170 }
171
172 // vim: ts=2 sw=2 et
173