qgscomposerlegendwidget.cpp

qgscomposerlegendwidget.cpp font dialog - John Tull, 2009-08-05 08:36 PM

Download (9.93 KB)

 
1
/***************************************************************************
2
                         qgscomposerlegendwidget.cpp
3
                         ---------------------------
4
    begin                : July 2008
5
    copyright            : (C) 2008 by Marco Hugentobler
6
    email                : marco dot hugentobler at karto dot baug dot ethz dot ch
7
 ***************************************************************************/
8

    
9
/***************************************************************************
10
 *                                                                         *
11
 *   This program is free software; you can redistribute it and/or modify  *
12
 *   it under the terms of the GNU General Public License as published by  *
13
 *   the Free Software Foundation; either version 2 of the License, or     *
14
 *   (at your option) any later version.                                   *
15
 *                                                                         *
16
 ***************************************************************************/
17

    
18
#include "qgscomposerlegendwidget.h"
19
#include "qgscomposerlegend.h"
20
#include "qgscomposerlegenditemdialog.h"
21
#include "qgscomposeritemwidget.h"
22
#include <QFontDialog>
23

    
24
QgsComposerLegendWidget::QgsComposerLegendWidget( QgsComposerLegend* legend ): mLegend( legend )
25
{
26
  setupUi( this );
27

    
28
  //add widget for item properties
29
  QgsComposerItemWidget* itemPropertiesWidget = new QgsComposerItemWidget( this, legend );
30
  gridLayout->addWidget( itemPropertiesWidget, 2, 0, 1, 1 );
31

    
32
  if ( legend )
33
  {
34
    mItemTreeView->setModel( legend->model() );
35
  }
36

    
37
  setGuiElements();
38
}
39

    
40
QgsComposerLegendWidget::QgsComposerLegendWidget(): mLegend( 0 )
41
{
42
  setupUi( this );
43
}
44

    
45
QgsComposerLegendWidget::~QgsComposerLegendWidget()
46
{
47

    
48
}
49

    
50
void QgsComposerLegendWidget::setGuiElements()
51
{
52
  if ( !mLegend )
53
  {
54
    return;
55
  }
56

    
57
  blockSignals( true );
58
  mTitleLineEdit->setText( mLegend->title() );
59
  mSymbolWidthSpinBox->setValue( mLegend->symbolWidth() );
60
  mSymbolHeightSpinBox->setValue( mLegend->symbolHeight() );
61
  mLayerSpaceSpinBox->setValue( mLegend->layerSpace() );
62
  mSymbolSpaceSpinBox->setValue( mLegend->symbolSpace() );
63
  mIconLabelSpaceSpinBox->setValue( mLegend->iconLabelSpace() );
64
  mBoxSpaceSpinBox->setValue( mLegend->boxSpace() );
65

    
66
  blockSignals( false );
67
}
68

    
69

    
70
void QgsComposerLegendWidget::on_mTitleLineEdit_textChanged( const QString& text )
71
{
72
  if ( mLegend )
73
  {
74
    mLegend->setTitle( text );
75
    mLegend->adjustBoxSize();
76
    mLegend->update();
77
  }
78
}
79

    
80
void QgsComposerLegendWidget::on_mSymbolWidthSpinBox_valueChanged( double d )
81
{
82
  if ( mLegend )
83
  {
84
    mLegend->setSymbolWidth( d );
85
    mLegend->adjustBoxSize();
86
    mLegend->update();
87
  }
88
}
89

    
90
void QgsComposerLegendWidget::on_mSymbolHeightSpinBox_valueChanged( double d )
91
{
92
  if ( mLegend )
93
  {
94
    mLegend->setSymbolHeight( d );
95
    mLegend->adjustBoxSize();
96
    mLegend->update();
97
  }
98
}
99

    
100
void QgsComposerLegendWidget::on_mLayerSpaceSpinBox_valueChanged( double d )
101
{
102
  if ( mLegend )
103
  {
104
    mLegend->setLayerSpace( d );
105
    mLegend->adjustBoxSize();
106
    mLegend->update();
107
  }
108
}
109

    
110
void QgsComposerLegendWidget::on_mSymbolSpaceSpinBox_valueChanged( double d )
111
{
112
  if ( mLegend )
113
  {
114
    mLegend->setSymbolSpace( d );
115
    mLegend->adjustBoxSize();
116
    mLegend->update();
117
  }
118
}
119

    
120
void QgsComposerLegendWidget::on_mIconLabelSpaceSpinBox_valueChanged( double d )
121
{
122
  if ( mLegend )
123
  {
124
    mLegend->setIconLabelSpace( d );
125
    mLegend->adjustBoxSize();
126
    mLegend->update();
127
  }
128
}
129

    
130
void QgsComposerLegendWidget::on_mTitleFontButton_clicked()
131
{
132
  if ( mLegend )
133
  {
134
    bool ok;
135
    #if defined(Q_WS_MAC) && QT_VERSION >= 0x040500 && !defined(__LP64__) 
136
      // Native Mac dialog works only for 64 bit Cocoa (observed in Qt 4.5.2, probably a Qt bug) 
137
      QFont newFont = QFontDialog::getFont( &ok, mLegend->titleFont(), this, QString(), QFontDialog::DontUseNativeDialog );
138
    #else
139
      QFont newFont = QFontDialog::getFont( &ok, mLegend->titleFont() );
140
    #endif
141
    if ( ok )
142
    {
143
      mLegend->setTitleFont( newFont );
144
      mLegend->adjustBoxSize();
145
      mLegend->update();
146
    }
147
  }
148
}
149

    
150
void QgsComposerLegendWidget::on_mLayerFontButton_clicked()
151
{
152
  if ( mLegend )
153
  {
154
    bool ok;
155
    #if defined(Q_WS_MAC) && QT_VERSION >= 0x040500 && !defined(__LP64__) 
156
      // Native Mac dialog works only for 64 bit Cocoa (observed in Qt 4.5.2, probably a Qt bug) 
157
      QFont newFont = QFontDialog::getFont( &ok, mLegend->layerFont(), this, QString(), QFontDialog::DontUseNativeDialog );
158
    #else
159
      QFont newFont = QFontDialog::getFont( &ok, mLegend->layerFont() );
160
    #endif
161
    if ( ok )
162
    {
163
      mLegend->setLayerFont( newFont );
164
      mLegend->adjustBoxSize();
165
      mLegend->update();
166
    }
167
  }
168
}
169

    
170
void QgsComposerLegendWidget::on_mItemFontButton_clicked()
171
{
172
  if ( mLegend )
173
  {
174
    bool ok;
175
    #if defined(Q_WS_MAC) && QT_VERSION >= 0x040500 && !defined(__LP64__) 
176
      // Native Mac dialog works only for 64 bit Cocoa (observed in Qt 4.5.2, probably a Qt bug) 
177
      QFont newFont = QFontDialog::getFont( &ok, mLegend->itemFont(), this, QString(), QFontDialog::DontUseNativeDialog );
178
    #else
179
      QFont newFont = QFontDialog::getFont( &ok, mLegend->itemFont() );
180
        #endif
181
    if ( ok )
182
    {
183
      mLegend->setItemFont( newFont );
184
      mLegend->adjustBoxSize();
185
      mLegend->update();
186
    }
187
  }
188
}
189

    
190

    
191
void QgsComposerLegendWidget::on_mBoxSpaceSpinBox_valueChanged( double d )
192
{
193
  if ( mLegend )
194
  {
195
    mLegend->setBoxSpace( d );
196
    mLegend->adjustBoxSize();
197
    mLegend->update();
198
  }
199
}
200

    
201
void QgsComposerLegendWidget::on_mMoveDownPushButton_clicked()
202
{
203
  QStandardItemModel* itemModel = dynamic_cast<QStandardItemModel*>( mItemTreeView->model() );
204
  if ( !itemModel )
205
  {
206
    return;
207
  }
208

    
209
  QModelIndex currentIndex = mItemTreeView->currentIndex();
210
  if ( !currentIndex.isValid() )
211
  {
212
    return;
213
  }
214

    
215
  //is there an older sibling?
216
  int row = currentIndex.row();
217
  QModelIndex youngerSibling = currentIndex.sibling( row + 1, 0 );
218

    
219
  if ( !youngerSibling.isValid() )
220
  {
221
    return;
222
  }
223

    
224
  QModelIndex parentIndex = currentIndex.parent();
225
  QList<QStandardItem*> itemToMove;
226
  QList<QStandardItem*> youngerSiblingItem;
227

    
228
  if ( !parentIndex.isValid() ) //move toplevel (layer) item
229
  {
230
    youngerSiblingItem = itemModel->takeRow( row + 1 );
231
    itemToMove = itemModel->takeRow( row );
232
    itemModel->insertRow( row, youngerSiblingItem );
233
    itemModel->insertRow( row + 1, itemToMove );
234
  }
235
  else //move child (classification) item
236
  {
237
    QStandardItem* parentItem = itemModel->itemFromIndex( parentIndex );
238
    youngerSiblingItem = parentItem->takeRow( row + 1 );
239
    itemToMove = parentItem->takeRow( row );
240
    parentItem->insertRow( row, youngerSiblingItem );
241
    parentItem->insertRow( row + 1, itemToMove );
242
  }
243

    
244
  mItemTreeView->setCurrentIndex( itemModel->indexFromItem( itemToMove.at( 0 ) ) );
245
  if ( mLegend )
246
  {
247
    mLegend->update();
248
  }
249
}
250

    
251
void QgsComposerLegendWidget::on_mMoveUpPushButton_clicked()
252
{
253
  QStandardItemModel* itemModel = dynamic_cast<QStandardItemModel*>( mItemTreeView->model() );
254
  if ( !itemModel )
255
  {
256
    return;
257
  }
258

    
259
  QModelIndex currentIndex = mItemTreeView->currentIndex();
260
  if ( !currentIndex.isValid() )
261
  {
262
    return;
263
  }
264

    
265
  //is there an older sibling?
266
  int row = currentIndex.row();
267
  QModelIndex olderSibling = currentIndex.sibling( row - 1, 0 );
268

    
269
  if ( !olderSibling.isValid() )
270
  {
271
    return;
272
  }
273

    
274
  QModelIndex parentIndex = currentIndex.parent();
275
  QList<QStandardItem*> itemToMove;
276
  QList<QStandardItem*> olderSiblingItem;
277

    
278
  if ( !parentIndex.isValid() ) //move toplevel item
279
  {
280
    itemToMove = itemModel->takeRow( row );
281
    olderSiblingItem = itemModel->takeRow( row - 1 );
282
    itemModel->insertRow( row - 1, itemToMove );
283
    itemModel->insertRow( row, olderSiblingItem );
284

    
285
  }
286
  else //move classification items
287
  {
288
    QStandardItem* parentItem = itemModel->itemFromIndex( parentIndex );
289
    itemToMove = parentItem->takeRow( row );
290
    olderSiblingItem = parentItem->takeRow( row - 1 );
291
    parentItem->insertRow( row - 1, itemToMove );
292
    parentItem->insertRow( row, olderSiblingItem );
293
  }
294

    
295
  mItemTreeView->setCurrentIndex( itemModel->indexFromItem( itemToMove.at( 0 ) ) );
296
  if ( mLegend )
297
  {
298
    mLegend->update();
299
  }
300
}
301

    
302
void QgsComposerLegendWidget::on_mRemovePushButton_clicked()
303
{
304
  QStandardItemModel* itemModel = dynamic_cast<QStandardItemModel*>( mItemTreeView->model() );
305
  if ( !itemModel )
306
  {
307
    return;
308
  }
309

    
310
  QModelIndex currentIndex = mItemTreeView->currentIndex();
311
  if ( !currentIndex.isValid() )
312
  {
313
    return;
314
  }
315

    
316
  QModelIndex parentIndex = currentIndex.parent();
317

    
318
  itemModel->removeRow( currentIndex.row(), parentIndex );
319
  if ( mLegend )
320
  {
321
    mLegend->adjustBoxSize();
322
    mLegend->update();
323
  }
324
}
325

    
326
void QgsComposerLegendWidget::on_mEditPushButton_clicked()
327
{
328
  QStandardItemModel* itemModel = dynamic_cast<QStandardItemModel*>( mItemTreeView->model() );
329
  if ( !itemModel )
330
  {
331
    return;
332
  }
333

    
334
  //get current item
335
  QModelIndex currentIndex = mItemTreeView->currentIndex();
336
  if ( !currentIndex.isValid() )
337
  {
338
    return;
339
  }
340

    
341
  QStandardItem* currentItem = itemModel->itemFromIndex( currentIndex );
342
  if ( !currentItem )
343
  {
344
    return;
345
  }
346

    
347
  QgsComposerLegendItemDialog itemDialog( currentItem );
348
  if ( itemDialog.exec() == QDialog::Accepted )
349
  {
350
    currentItem->setText( itemDialog.itemText() );
351
  }
352
  if ( mLegend )
353
  {
354
    mLegend->adjustBoxSize();
355
    mLegend->update();
356
  }
357
}
358

    
359
void QgsComposerLegendWidget::on_mUpdatePushButton_clicked()
360
{
361
  //get current item
362
  QStandardItemModel* itemModel = dynamic_cast<QStandardItemModel*>( mItemTreeView->model() );
363
  if ( !itemModel )
364
  {
365
    return;
366
  }
367

    
368
  //get current item
369
  QModelIndex currentIndex = mItemTreeView->currentIndex();
370
  if ( !currentIndex.isValid() )
371
  {
372
    return;
373
  }
374

    
375
  QStandardItem* currentItem = itemModel->itemFromIndex( currentIndex );
376
  if ( !currentItem )
377
  {
378
    return;
379
  }
380

    
381
  if ( mLegend->model() )
382
  {
383
    mLegend->model()->updateItem( currentItem );
384
  }
385
  mLegend->update();
386
  mLegend->adjustBoxSize();
387
}
388

    
389
void QgsComposerLegendWidget::on_mUpdateAllPushButton_clicked()
390
{
391
  if ( mLegend )
392
  {
393
    mLegend->updateLegend();
394
  }
395
}