inputbool.cpp 2.53 KB
Newer Older
1 2
/******************************************************************************
 *
3
 * 
4
 *
Dimitri van Heesch's avatar
Dimitri van Heesch committed
5
 * Copyright (C) 1997-2014 by Dimitri van Heesch.
6 7 8 9 10 11 12 13 14 15
 *
 * Permission to use, copy, modify, and distribute this software and its
 * documentation under the terms of the GNU General Public License is hereby 
 * granted. No representations are made about the suitability of this software 
 * for any purpose. It is provided "as is" without express or implied warranty.
 * See the GNU General Public License for more details.
 *
 */

#include "inputbool.h"
16 17
#include "helplabel.h"
#include <QtGui>
18

19 20 21 22
InputBool::InputBool( QGridLayout *layout, int &row, 
                      const QString &id, bool checked,
                      const QString &docs )
  : m_default(checked), m_docs(docs), m_id(id)
23
{
24 25 26 27 28 29 30 31 32 33 34 35
  m_lab = new HelpLabel(id);
  m_cb = new QCheckBox;
  layout->addWidget(m_lab,row, 0);
  layout->addWidget(m_cb,row, 1);
  m_enabled = true;
  m_state=!checked; // force update
  setValue(checked);
  connect( m_cb, SIGNAL(toggled(bool)), SLOT(setValue(bool)) );
  connect( m_lab, SIGNAL(enter()), SLOT(help()) );
  connect( m_lab, SIGNAL(reset()), SLOT(reset()) );
  row++;
}
36

37 38 39 40
void InputBool::help()
{
  showHelp(this);
}
41

42 43 44 45
void InputBool::setEnabled(bool b)
{ 
  m_enabled = b;
  m_cb->setEnabled(b); 
46 47
  m_lab->setEnabled(b); 
  updateDefault();
48
  updateDependencies();
49 50
}

51
void InputBool::updateDependencies()
52
{
53 54 55 56
  for (int i=0;i<m_dependencies.count();i++)
  {
    m_dependencies[i]->setEnabled(m_enabled && m_state);
  }
57 58
}

59
void InputBool::setValue( bool s )
60
{
61
  if (m_state!=s) 
62
  {
63 64 65 66 67
    m_state=s;
    updateDefault();
    updateDependencies();
    m_cb->setChecked( s );
    m_value = m_state;
68 69
    emit changed();
  }
70 71 72 73
}

void InputBool::updateDefault()
{
74
  if (m_state==m_default || !m_lab->isEnabled())
75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110
  {
    m_lab->setText(QString::fromAscii("<qt>")+m_id+QString::fromAscii("</qt"));
  }
  else
  {
    m_lab->setText(QString::fromAscii("<qt><font color='red'>")+m_id+QString::fromAscii("</font></qt>"));
  }
}

QVariant &InputBool::value()
{
  return m_value;
}

void InputBool::update()
{
  QString v = m_value.toString().toLower();
  m_state = (v==QString::fromAscii("yes")  || 
             v==QString::fromAscii("true") || 
             v==QString::fromAscii("1"));
  m_cb->setChecked( m_state );
  updateDefault();
  updateDependencies();
}

void InputBool::reset()
{
  setValue(m_default);
}

void InputBool::writeValue(QTextStream &t,QTextCodec *codec)
{
  if (m_state) 
    t << codec->fromUnicode(QString::fromAscii("YES")); 
  else 
    t << codec->fromUnicode(QString::fromAscii("NO"));
111 112
}