Orb/Doxygen/addon/doxywizard/inputstrlist.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 "inputstrlist.h"
       
    16 #include "helplabel.h"
       
    17 #include "doxywizard.h"
       
    18 #include "config.h"
       
    19 
       
    20 #include <QtGui>
       
    21 
       
    22 InputStrList::InputStrList( QGridLayout *layout,int &row,
       
    23                             const QString & id, 
       
    24                             const QStringList &sl, ListMode lm,
       
    25                             const QString & docs)
       
    26   : m_default(sl), m_strList(sl), m_docs(docs), m_id(id)
       
    27 {
       
    28   m_lab = new HelpLabel( id );
       
    29 
       
    30   m_le  = new QLineEdit;
       
    31   m_le->clear();
       
    32 
       
    33   QToolBar *toolBar = new QToolBar;
       
    34   toolBar->setIconSize(QSize(24,24));
       
    35   m_add = toolBar->addAction(QIcon(QString::fromAscii(":/images/add.png")),QString(),
       
    36                              this,SLOT(addString()));
       
    37   m_add->setToolTip(tr("Add item"));
       
    38   m_del = toolBar->addAction(QIcon(QString::fromAscii(":/images/del.png")),QString(),
       
    39                              this,SLOT(delString()));
       
    40   m_del->setToolTip(tr("Delete selected item"));
       
    41   m_upd = toolBar->addAction(QIcon(QString::fromAscii(":/images/refresh.png")),QString(),
       
    42                              this,SLOT(updateString()));
       
    43   m_upd->setToolTip(tr("Update selected item"));
       
    44 
       
    45   m_lb  = new QListWidget;
       
    46   //m_lb->setMinimumSize(400,100);
       
    47   foreach (QString s, m_strList) m_lb->addItem(s);
       
    48   
       
    49   m_brFile=0;
       
    50   m_brDir=0;
       
    51   if (lm!=ListString)
       
    52   {
       
    53     if (lm&ListFile)
       
    54     {
       
    55       m_brFile = toolBar->addAction(QIcon(QString::fromAscii(":/images/file.png")),QString(),
       
    56                                     this,SLOT(browseFiles()));
       
    57       m_brFile->setToolTip(tr("Browse to a file"));
       
    58     } 
       
    59     if (lm&ListDir)
       
    60     {
       
    61       m_brDir = toolBar->addAction(QIcon(QString::fromAscii(":/images/folder.png")),QString(),
       
    62                                    this,SLOT(browseDir()));
       
    63       m_brDir->setToolTip(tr("Browse to a folder"));
       
    64     }
       
    65   }
       
    66   QHBoxLayout *rowLayout = new QHBoxLayout;
       
    67   rowLayout->addWidget( m_le );
       
    68   rowLayout->addWidget( toolBar );
       
    69   layout->addWidget( m_lab,      row,0 );
       
    70   layout->addLayout( rowLayout,  row,1,1,2 );
       
    71   layout->addWidget( m_lb,       row+1,1,1,2 );
       
    72   row+=2;
       
    73 
       
    74   m_value = m_strList;
       
    75 
       
    76   connect(m_le,   SIGNAL(returnPressed()), 
       
    77           this, SLOT(addString()) );
       
    78   connect(m_lb,   SIGNAL(currentTextChanged(const QString &)), 
       
    79           this, SLOT(selectText(const QString &)));
       
    80   connect( m_lab, SIGNAL(enter()), SLOT(help()) );
       
    81   connect( m_lab, SIGNAL(reset()), SLOT(reset()) );
       
    82 }
       
    83 
       
    84 void InputStrList::help()
       
    85 {
       
    86   showHelp(this);
       
    87 }
       
    88 
       
    89 
       
    90 void InputStrList::addString()
       
    91 {
       
    92   if (!m_le->text().isEmpty())
       
    93   {
       
    94     m_lb->addItem(m_le->text());
       
    95     m_strList.append(m_le->text());
       
    96     m_value = m_strList;
       
    97     updateDefault();
       
    98     emit changed();
       
    99     m_le->clear();
       
   100   }
       
   101 }
       
   102 
       
   103 void InputStrList::delString()
       
   104 {
       
   105   if (m_lb->currentRow()!=-1)
       
   106   {
       
   107     int itemIndex = m_lb->currentRow();
       
   108     delete m_lb->currentItem();
       
   109     m_strList.removeAt(itemIndex);
       
   110     m_value = m_strList;
       
   111     updateDefault();
       
   112     emit changed();
       
   113   }
       
   114 }
       
   115 
       
   116 void InputStrList::updateString()
       
   117 {
       
   118   if (m_lb->currentRow()!=-1 && !m_le->text().isEmpty())
       
   119   {
       
   120     m_lb->currentItem()->setText(m_le->text());
       
   121     m_strList.insert(m_lb->currentRow(),m_le->text());
       
   122     m_strList.removeAt(m_lb->currentRow()+1);
       
   123     m_value = m_strList;
       
   124     updateDefault();
       
   125     emit changed();
       
   126   }
       
   127 }
       
   128 
       
   129 void InputStrList::selectText(const QString &s)
       
   130 {
       
   131   m_le->setText(s);
       
   132 }
       
   133 
       
   134 void InputStrList::setEnabled(bool state)
       
   135 {
       
   136   m_lab->setEnabled(state);
       
   137   m_le->setEnabled(state);
       
   138   m_add->setEnabled(state);
       
   139   m_del->setEnabled(state);
       
   140   m_upd->setEnabled(state);
       
   141   m_lb->setEnabled(state);
       
   142   if (m_brFile) m_brFile->setEnabled(state);
       
   143   if (m_brDir)  m_brDir->setEnabled(state);
       
   144 }
       
   145 
       
   146 void InputStrList::browseFiles()
       
   147 {
       
   148   QString path = QFileInfo(MainWindow::instance().configFileName()).path();
       
   149   QStringList fileNames = QFileDialog::getOpenFileNames();	
       
   150 
       
   151   if (!fileNames.isEmpty()) 
       
   152   {
       
   153     QStringList::Iterator it;
       
   154     for ( it= fileNames.begin(); it != fileNames.end(); ++it )
       
   155     {
       
   156       QString fileName;
       
   157       QDir dir(path);
       
   158       if (!MainWindow::instance().configFileName().isEmpty() && dir.exists())
       
   159       {
       
   160         fileName = dir.relativeFilePath(*it);
       
   161       }
       
   162       if (fileName.isEmpty())
       
   163       {
       
   164         fileName = *it;
       
   165       }
       
   166       m_lb->addItem(fileName);
       
   167       m_strList.append(fileName);
       
   168       m_value = m_strList;
       
   169       updateDefault();
       
   170       emit changed();
       
   171     }
       
   172     m_le->setText(m_strList[0]);
       
   173   }
       
   174 }
       
   175 
       
   176 void InputStrList::browseDir()
       
   177 {	
       
   178   QString path = QFileInfo(MainWindow::instance().configFileName()).path();
       
   179   QString dirName = QFileDialog::getExistingDirectory();	
       
   180 
       
   181   if (!dirName.isNull()) 
       
   182   {
       
   183     QDir dir(path);
       
   184     if (!MainWindow::instance().configFileName().isEmpty() && dir.exists())
       
   185     {
       
   186       dirName = dir.relativeFilePath(dirName);
       
   187     }
       
   188     if (dirName.isEmpty())
       
   189     {
       
   190       dirName=QString::fromAscii(".");
       
   191     }
       
   192     m_lb->addItem(dirName);
       
   193     m_strList.append(dirName);
       
   194     m_value = m_strList;
       
   195     updateDefault();
       
   196     emit changed();
       
   197     m_le->setText(dirName);
       
   198   }
       
   199 }
       
   200 
       
   201 void InputStrList::setValue(const QStringList &sl)
       
   202 {
       
   203   m_le->clear();
       
   204   m_lb->clear();
       
   205   m_strList = sl;
       
   206   for (int i=0;i<m_strList.size();i++)
       
   207   {
       
   208     m_lb->addItem(m_strList[i].trimmed());
       
   209   }
       
   210   updateDefault();
       
   211 }
       
   212 
       
   213 QVariant &InputStrList::value()
       
   214 {
       
   215   return m_value;
       
   216 }
       
   217 
       
   218 void InputStrList::update()
       
   219 {
       
   220   setValue(m_value.toStringList());
       
   221 }
       
   222 
       
   223 void InputStrList::updateDefault()
       
   224 {
       
   225   if (m_strList==m_default)
       
   226   {
       
   227     m_lab->setText(QString::fromAscii("<qt>")+m_id+QString::fromAscii("</qt"));
       
   228   }
       
   229   else
       
   230   {
       
   231     m_lab->setText(QString::fromAscii("<qt><font color='red'>")+m_id+QString::fromAscii("</font></qt>"));
       
   232   }
       
   233 }
       
   234 
       
   235 void InputStrList::reset()
       
   236 {
       
   237   setValue(m_default);
       
   238 }
       
   239 
       
   240 void InputStrList::writeValue(QTextStream &t,QTextCodec *codec)
       
   241 {
       
   242   bool first=TRUE;
       
   243   foreach (QString s, m_strList) 
       
   244   {
       
   245     if (!first) 
       
   246     {
       
   247       t << " \\" << endl;
       
   248       t << "                         ";
       
   249     }
       
   250     first=FALSE;
       
   251     writeStringValue(t,codec,s);
       
   252   }
       
   253 }
       
   254