~ubuntu-branches/debian/sid/kxstitch/sid

« back to all changes in this revision

Viewing changes to kxstitch/calibratedialog.cpp

  • Committer: Bazaar Package Importer
  • Author(s): eric pareja
  • Date: 2005-02-19 12:37:22 UTC
  • Revision ID: james.westby@ubuntu.com-20050219123722-kt3ru1nqvllietee
Tags: upstream-0.6
ImportĀ upstreamĀ versionĀ 0.6

Show diffs side-by-side

added added

removed removed

Lines of Context:
 
1
/***************************************************************************
 
2
 *   Copyright (C) 2003 by Stephen Allewell                                *
 
3
 *   stephen@mirramar.fsnet.co.uk                                          *
 
4
 *                                                                         *
 
5
 *   This program is free software; you can redistribute it and/or modify  *
 
6
 *   it under the terms of the GNU General Public License as published by  *
 
7
 *   the Free Software Foundation; either version 2 of the License, or     *
 
8
 *   (at your option) any later version.                                   *
 
9
 ***************************************************************************/
 
10
 
 
11
#include <qcombobox.h>
 
12
#include <qlistbox.h>
 
13
#include <qlabel.h>
 
14
#include <qslider.h>
 
15
#include <qspinbox.h>
 
16
#include <qpushbutton.h>
 
17
#include <kapplication.h>
 
18
#include <klocale.h>
 
19
#include "kxstitch.h"
 
20
#include "calibratedialog.h"
 
21
#include "schememanager.h"
 
22
#include "flossscheme.h"
 
23
#include "flosslistboxitem.h"
 
24
 
 
25
CalibrateDialog::CalibrateDialog(QWidget *parent)
 
26
  : CalibrateDlg(parent,"CalibrateDlg",true),
 
27
    m_item(0),
 
28
    m_sample(new QPixmap(100,100))
 
29
{
 
30
  fillSchemeList();
 
31
  fillColorList();
 
32
 
 
33
  connect(SchemeList,SIGNAL(activated(int)),this,SLOT(schemeChanged(int)));
 
34
  connect(ColorList,SIGNAL(selectionChanged(QListBoxItem *)),this,SLOT(selectionChanged(QListBoxItem *)));
 
35
  connect(RedSlider,SIGNAL(valueChanged(int)),this,SLOT(redChanged(int)));
 
36
  connect(GreenSlider,SIGNAL(valueChanged(int)),this,SLOT(greenChanged(int)));
 
37
  connect(BlueSlider,SIGNAL(valueChanged(int)),this,SLOT(blueChanged(int)));
 
38
  connect(ResetColor,SIGNAL(clicked()),this,SLOT(resetColor()));
 
39
  connect(HelpButton,SIGNAL(clicked()),this,SLOT(contextHelp()));
 
40
}
 
41
 
 
42
CalibrateDialog::~CalibrateDialog()
 
43
{
 
44
  delete m_sample;
 
45
}
 
46
 
 
47
void CalibrateDialog::accept()
 
48
{
 
49
  commitColor();
 
50
 
 
51
  QMap<QString,ChangedColors>::Iterator it;
 
52
  for (it = m_calibratedColors.begin() ; it != m_calibratedColors.end() ; ++it)
 
53
  {
 
54
    FlossScheme *scheme = ((KXStitchApplication *)kapp)->scheme(it.key());
 
55
    QPtrListIterator<Floss> itFloss = scheme->flossIterator();
 
56
    for (Floss *f = 0 ; (f = itFloss.current()) ; ++itFloss)
 
57
      if (it.data().contains(f->name))
 
58
        f->color = it.data()[f->name];
 
59
    ((KXStitchApplication *)kapp)->writeScheme(it.key());
 
60
  }
 
61
  QDialog::accept();
 
62
}
 
63
 
 
64
void CalibrateDialog::contextHelp()
 
65
{
 
66
  kapp->invokeHelp("CalibrateDialog");
 
67
}
 
68
 
 
69
void CalibrateDialog::schemeChanged(int)
 
70
{
 
71
  commitColor();
 
72
  fillColorList();
 
73
}
 
74
 
 
75
void CalibrateDialog::selectionChanged(QListBoxItem *item)
 
76
{
 
77
  if (m_item) commitColor();
 
78
  m_item = (FlossListBoxItem *)item;
 
79
  if (m_calibratedColors[m_scheme].contains(m_item->floss->name))
 
80
    m_sampleColor = m_calibratedColors[m_scheme][m_item->floss->name];
 
81
  else
 
82
    m_sampleColor = m_item->floss->color;
 
83
  updateSample();
 
84
  updateName(m_calibratedColors[m_scheme].contains(m_item->floss->name));
 
85
}
 
86
 
 
87
void CalibrateDialog::redChanged(int r)
 
88
{
 
89
  m_sampleColor.setRgb(r,m_sampleColor.green(),m_sampleColor.blue());
 
90
  updateSample();
 
91
  updateName(true);
 
92
}
 
93
 
 
94
void CalibrateDialog::greenChanged(int g)
 
95
{
 
96
  m_sampleColor.setRgb(m_sampleColor.red(),g,m_sampleColor.blue());
 
97
  updateSample();
 
98
  updateName(true);
 
99
}
 
100
 
 
101
void CalibrateDialog::blueChanged(int b)
 
102
{
 
103
  m_sampleColor.setRgb(m_sampleColor.red(),m_sampleColor.green(),b);
 
104
  updateSample();
 
105
  updateName(true);
 
106
}
 
107
 
 
108
void CalibrateDialog::resetColor()
 
109
{
 
110
  m_sampleColor = m_item->floss->color;
 
111
  if (m_calibratedColors[m_scheme].contains(m_item->floss->name))
 
112
    m_calibratedColors[m_scheme].remove(m_item->floss->name);
 
113
  updateSample();
 
114
  updateName(false);
 
115
  m_item->setCalibrated(false);
 
116
}
 
117
 
 
118
void CalibrateDialog::fillSchemeList()
 
119
{
 
120
  SchemeList->insertStringList(((KXStitchApplication *)kapp)->schemes());
 
121
}
 
122
 
 
123
void CalibrateDialog::fillColorList()
 
124
{
 
125
  ColorList->clear();
 
126
  m_scheme = SchemeList->currentText();
 
127
  FlossScheme *scheme = ((KXStitchApplication *)kapp)->scheme(m_scheme);
 
128
  QPtrListIterator<Floss> it = scheme->flossIterator();
 
129
  Floss *f;
 
130
  for ( ; (f = it.current()) ; ++it)
 
131
    new FlossListBoxItem(ColorList, f);
 
132
  selectionChanged(ColorList->item(0));
 
133
}
 
134
 
 
135
void CalibrateDialog::updateSample()
 
136
{
 
137
  m_sample->resize(ExampleColor->size());
 
138
  m_sample->fill(m_sampleColor);
 
139
  ExampleColor->setPixmap(*m_sample);
 
140
  RedSlider->setValue(m_sampleColor.red());
 
141
  GreenSlider->setValue(m_sampleColor.green());
 
142
  BlueSlider->setValue(m_sampleColor.blue());
 
143
}
 
144
 
 
145
void CalibrateDialog::updateName(bool m)
 
146
{
 
147
  SelectedColorName->setText(QString("%1-%2%3").arg(m_item->floss->name).arg(m_item->floss->description).arg((m)?i18n(" (Modified)"):""));
 
148
}
 
149
 
 
150
void CalibrateDialog::commitColor()
 
151
{
 
152
  if (m_item->floss->color != m_sampleColor)
 
153
  {
 
154
    m_calibratedColors[m_scheme][m_item->floss->name] = m_sampleColor;
 
155
    m_item->setCalibrated(true);
 
156
  }
 
157
}