Orb/Doxygen/addon/doxywizard/inputstring.cpp
changeset 0 42188c7ea2d9
equal deleted inserted replaced
-1:000000000000 0:42188c7ea2d9
       
     1 /******************************************************************************
       
     2  *
       
     3  * 
       
     4  *
       
     5  * Copyright (C) 1997-2007 by Dimitri van Heesch.
       
     6  *
       
     7  * Permission to use, copy, modify, and distribute this software and its
       
     8  * documentation under the terms of the GNU General Public License is hereby 
       
     9  * granted. No representations are made about the suitability of this software 
       
    10  * for any purpose. It is provided "as is" without express or implied warranty.
       
    11  * See the GNU General Public License for more details.
       
    12  *
       
    13  */
       
    14 
       
    15 #include "inputstring.h"
       
    16 #include "helplabel.h"
       
    17 #include "doxywizard.h"
       
    18 #include "config.h"
       
    19 
       
    20 #include <QtGui>
       
    21 
       
    22 InputString::InputString( QGridLayout *layout,int &row,
       
    23                           const QString & id, const QString &s, 
       
    24                           StringMode m, const QString &docs,
       
    25                           const QString &absPath )
       
    26   : m_default(s), m_sm(m), m_index(0), m_docs(docs), m_id(id),
       
    27     m_absPath(absPath==QString::fromAscii("1"))
       
    28 {
       
    29   m_lab = new HelpLabel(id);
       
    30   if (m==StringFixed)
       
    31   {
       
    32     layout->addWidget( m_lab, row, 0 );
       
    33     m_com = new QComboBox; 
       
    34     layout->addWidget( m_com, row, 1, 1, 3, Qt::AlignLeft );
       
    35     m_le=0;
       
    36     m_br=0;
       
    37     row++;
       
    38   }
       
    39   else
       
    40   {
       
    41     layout->addWidget( m_lab, row, 0 );
       
    42     m_le = new QLineEdit;
       
    43     m_le->setText( s );
       
    44     //layout->setColumnMinimumWidth(2,150);
       
    45     if (m==StringFile || m==StringDir)
       
    46     {
       
    47       layout->addWidget( m_le, row, 1 );
       
    48       m_br = new QToolBar;
       
    49       m_br->setIconSize(QSize(24,24));
       
    50       if (m==StringFile) 
       
    51       {
       
    52         QAction *file = m_br->addAction(QIcon(QString::fromAscii(":/images/file.png")),QString(),this,SLOT(browse()));
       
    53         file->setToolTip(tr("Browse to a file"));
       
    54       }
       
    55       else 
       
    56       {
       
    57         QAction *dir = m_br->addAction(QIcon(QString::fromAscii(":/images/folder.png")),QString(),this,SLOT(browse()));
       
    58         dir->setToolTip(tr("Browse to a folder"));
       
    59       }
       
    60       layout->addWidget( m_br,row,2 );
       
    61     }
       
    62     else
       
    63     {
       
    64       layout->addWidget( m_le, row, 1, 1, 2 );
       
    65       m_br=0;
       
    66     }
       
    67     m_com=0;
       
    68     row++;
       
    69   }
       
    70 
       
    71   if (m_le)  connect( m_le,   SIGNAL(textChanged(const QString&)), 
       
    72                       this,   SLOT(setValue(const QString&)) );
       
    73   if (m_com) connect( m_com,  SIGNAL(activated(const QString &)), 
       
    74                       this,   SLOT(setValue(const QString &)) );
       
    75   m_str = s+QChar::fromAscii('!'); // force update
       
    76   setValue(s);
       
    77   connect( m_lab, SIGNAL(enter()), SLOT(help()) );
       
    78   connect( m_lab, SIGNAL(reset()), SLOT(reset()) );
       
    79 }
       
    80 
       
    81 void InputString::help()
       
    82 {
       
    83   showHelp(this);
       
    84 }
       
    85 
       
    86 
       
    87 InputString::~InputString()
       
    88 {
       
    89 }
       
    90 
       
    91 
       
    92 void InputString::setValue(const QString &s)
       
    93 {
       
    94   if (m_str!=s)
       
    95   {
       
    96     m_str = s;
       
    97     m_value = m_str;
       
    98     if (m_str==m_default)
       
    99     {
       
   100       m_lab->setText(QString::fromAscii("<qt>")+m_id+QString::fromAscii("</qt"));
       
   101     }
       
   102     else
       
   103     {
       
   104       m_lab->setText(QString::fromAscii("<qt><font color='red'>")+m_id+QString::fromAscii("</font></qt>"));
       
   105     }
       
   106     if (m_le && m_le->text()!=m_str) m_le->setText( m_str );
       
   107     emit changed();
       
   108   }
       
   109 }
       
   110 
       
   111 void InputString::setEnabled(bool state)
       
   112 {
       
   113   m_lab->setEnabled(state);
       
   114   if (m_le)  m_le->setEnabled(state);
       
   115   if (m_br)  m_br->setEnabled(state);
       
   116   if (m_com) m_com->setEnabled(state);
       
   117 }
       
   118 
       
   119 void InputString::browse()
       
   120 {
       
   121   QString path = QFileInfo(MainWindow::instance().configFileName()).path();
       
   122   if (m_sm==StringFile)
       
   123   {
       
   124     QString fileName = QFileDialog::getOpenFileName(&MainWindow::instance(),
       
   125         tr("Select file"),path);
       
   126     if (!fileName.isNull()) 
       
   127     {
       
   128       QDir dir(path);
       
   129       if (!MainWindow::instance().configFileName().isEmpty() && dir.exists())
       
   130       {
       
   131         fileName = m_absPath ? fileName : dir.relativeFilePath(fileName);
       
   132       }
       
   133       setValue(fileName);
       
   134     }
       
   135   }
       
   136   else // sm==StringDir
       
   137   {
       
   138     QString dirName = QFileDialog::getExistingDirectory(&MainWindow::instance(),
       
   139         tr("Select directory"),path);
       
   140     if (!dirName.isNull())
       
   141     {
       
   142       QDir dir(path);
       
   143       if (!MainWindow::instance().configFileName().isEmpty() && dir.exists())
       
   144       {
       
   145         dirName = m_absPath ? dirName : dir.relativeFilePath(dirName);
       
   146       }
       
   147       setValue(dirName);
       
   148     }
       
   149   }
       
   150 }
       
   151 
       
   152 void InputString::clear()
       
   153 {
       
   154   setValue(QString());
       
   155 }
       
   156 
       
   157 void InputString::addValue(QString s)
       
   158 {
       
   159   if (m_sm==StringFixed)
       
   160   {
       
   161     m_values.append(s);
       
   162     m_com->addItem(s);
       
   163   }
       
   164 }
       
   165 
       
   166 void InputString::setDefault()
       
   167 {
       
   168   int index = m_values.indexOf(m_str);
       
   169   if (index!=-1 && m_com) m_com->setCurrentIndex(index);
       
   170 }
       
   171 
       
   172 QVariant &InputString::value() 
       
   173 {
       
   174   return m_value;
       
   175 }
       
   176 
       
   177 void InputString::update()
       
   178 {
       
   179   setValue(m_value.toString().trimmed());
       
   180   setDefault();
       
   181 }
       
   182 
       
   183 void InputString::reset()
       
   184 {
       
   185   setValue(m_default);
       
   186   setDefault();
       
   187 }
       
   188 
       
   189 void InputString::writeValue(QTextStream &t,QTextCodec *codec)
       
   190 {
       
   191   writeStringValue(t,codec,m_str);
       
   192 }
       
   193