1
/***************************************************************************
2
* Copyright (C) 2003 by Stephen Allewell *
3
* stephen@mirramar.fsnet.co.uk *
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
***************************************************************************/
11
#include <qcombobox.h>
16
#include <qpushbutton.h>
17
#include <kapplication.h>
20
#include "calibratedialog.h"
21
#include "schememanager.h"
22
#include "flossscheme.h"
23
#include "flosslistboxitem.h"
25
CalibrateDialog::CalibrateDialog(QWidget *parent)
26
: CalibrateDlg(parent,"CalibrateDlg",true),
28
m_sample(new QPixmap(100,100))
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()));
42
CalibrateDialog::~CalibrateDialog()
47
void CalibrateDialog::accept()
51
QMap<QString,ChangedColors>::Iterator it;
52
for (it = m_calibratedColors.begin() ; it != m_calibratedColors.end() ; ++it)
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());
64
void CalibrateDialog::contextHelp()
66
kapp->invokeHelp("CalibrateDialog");
69
void CalibrateDialog::schemeChanged(int)
75
void CalibrateDialog::selectionChanged(QListBoxItem *item)
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];
82
m_sampleColor = m_item->floss->color;
84
updateName(m_calibratedColors[m_scheme].contains(m_item->floss->name));
87
void CalibrateDialog::redChanged(int r)
89
m_sampleColor.setRgb(r,m_sampleColor.green(),m_sampleColor.blue());
94
void CalibrateDialog::greenChanged(int g)
96
m_sampleColor.setRgb(m_sampleColor.red(),g,m_sampleColor.blue());
101
void CalibrateDialog::blueChanged(int b)
103
m_sampleColor.setRgb(m_sampleColor.red(),m_sampleColor.green(),b);
108
void CalibrateDialog::resetColor()
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);
115
m_item->setCalibrated(false);
118
void CalibrateDialog::fillSchemeList()
120
SchemeList->insertStringList(((KXStitchApplication *)kapp)->schemes());
123
void CalibrateDialog::fillColorList()
126
m_scheme = SchemeList->currentText();
127
FlossScheme *scheme = ((KXStitchApplication *)kapp)->scheme(m_scheme);
128
QPtrListIterator<Floss> it = scheme->flossIterator();
130
for ( ; (f = it.current()) ; ++it)
131
new FlossListBoxItem(ColorList, f);
132
selectionChanged(ColorList->item(0));
135
void CalibrateDialog::updateSample()
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());
145
void CalibrateDialog::updateName(bool m)
147
SelectedColorName->setText(QString("%1-%2%3").arg(m_item->floss->name).arg(m_item->floss->description).arg((m)?i18n(" (Modified)"):""));
150
void CalibrateDialog::commitColor()
152
if (m_item->floss->color != m_sampleColor)
154
m_calibratedColors[m_scheme][m_item->floss->name] = m_sampleColor;
155
m_item->setCalibrated(true);