1 /******************************************************************************
5 * Copyright (C) 1997-2015 by Dimitri van Heesch.
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.
15 #include "inputstrlist.h"
16 #include "helplabel.h"
17 #include "doxywizard.h"
21 #include <QGridLayout>
23 #include <QListWidget>
25 #include <QFileDialog>
26 #include <QTextStream>
29 InputStrList::InputStrList( QGridLayout *layout,int &row,
31 const QStringList &sl, ListMode lm,
33 : m_default(sl), m_strList(sl), m_docs(docs), m_id(id)
35 m_lab = new HelpLabel( id );
40 QToolBar *toolBar = new QToolBar;
41 toolBar->setIconSize(QSize(24,24));
42 m_add = toolBar->addAction(QIcon(QString::fromLatin1(":/images/add.png")),QString(),
43 this,SLOT(addString()));
44 m_add->setToolTip(tr("Add item"));
45 m_del = toolBar->addAction(QIcon(QString::fromLatin1(":/images/del.png")),QString(),
46 this,SLOT(delString()));
47 m_del->setToolTip(tr("Delete selected item"));
48 m_upd = toolBar->addAction(QIcon(QString::fromLatin1(":/images/refresh.png")),QString(),
49 this,SLOT(updateString()));
50 m_upd->setToolTip(tr("Update selected item"));
52 m_lb = new QListWidget;
53 //m_lb->setMinimumSize(400,100);
54 foreach (QString s, m_strList) m_lb->addItem(s);
62 m_brFile = toolBar->addAction(QIcon(QString::fromLatin1(":/images/file.png")),QString(),
63 this,SLOT(browseFiles()));
64 m_brFile->setToolTip(tr("Browse to a file"));
68 m_brDir = toolBar->addAction(QIcon(QString::fromLatin1(":/images/folder.png")),QString(),
69 this,SLOT(browseDir()));
70 m_brDir->setToolTip(tr("Browse to a folder"));
73 QHBoxLayout *rowLayout = new QHBoxLayout;
74 rowLayout->addWidget( m_le );
75 rowLayout->addWidget( toolBar );
76 layout->addWidget( m_lab, row,0 );
77 layout->addLayout( rowLayout, row,1,1,2 );
78 layout->addWidget( m_lb, row+1,1,1,2 );
83 connect(m_le, SIGNAL(returnPressed()),
84 this, SLOT(addString()) );
85 connect(m_lb, SIGNAL(currentTextChanged(const QString &)),
86 this, SLOT(selectText(const QString &)));
87 connect( m_lab, SIGNAL(enter()), SLOT(help()) );
88 connect( m_lab, SIGNAL(reset()), SLOT(reset()) );
91 void InputStrList::help()
97 void InputStrList::addString()
99 if (!m_le->text().isEmpty())
101 m_lb->addItem(m_le->text());
102 m_strList.append(m_le->text());
110 void InputStrList::delString()
112 if (m_lb->currentRow()!=-1)
114 int itemIndex = m_lb->currentRow();
115 delete m_lb->currentItem();
116 m_strList.removeAt(itemIndex);
123 void InputStrList::updateString()
125 if (m_lb->currentRow()!=-1 && !m_le->text().isEmpty())
127 m_lb->currentItem()->setText(m_le->text());
128 m_strList.insert(m_lb->currentRow(),m_le->text());
129 m_strList.removeAt(m_lb->currentRow()+1);
136 void InputStrList::selectText(const QString &s)
141 void InputStrList::setEnabled(bool state)
143 m_lab->setEnabled(state);
144 m_le->setEnabled(state);
145 m_add->setEnabled(state);
146 m_del->setEnabled(state);
147 m_upd->setEnabled(state);
148 m_lb->setEnabled(state);
149 if (m_brFile) m_brFile->setEnabled(state);
150 if (m_brDir) m_brDir->setEnabled(state);
154 void InputStrList::browseFiles()
156 QString path = QFileInfo(MainWindow::instance().configFileName()).path();
157 QStringList fileNames = QFileDialog::getOpenFileNames();
159 if (!fileNames.isEmpty())
161 QStringList::Iterator it;
162 for ( it= fileNames.begin(); it != fileNames.end(); ++it )
166 if (!MainWindow::instance().configFileName().isEmpty() && dir.exists())
168 fileName = dir.relativeFilePath(*it);
170 if (fileName.isEmpty())
174 m_lb->addItem(fileName);
175 m_strList.append(fileName);
180 m_le->setText(m_strList[0]);
184 void InputStrList::browseDir()
186 QString path = QFileInfo(MainWindow::instance().configFileName()).path();
187 QString dirName = QFileDialog::getExistingDirectory();
189 if (!dirName.isNull())
192 if (!MainWindow::instance().configFileName().isEmpty() && dir.exists())
194 dirName = dir.relativeFilePath(dirName);
196 if (dirName.isEmpty())
198 dirName=QString::fromLatin1(".");
200 m_lb->addItem(dirName);
201 m_strList.append(dirName);
205 m_le->setText(dirName);
209 void InputStrList::setValue(const QStringList &sl)
214 for (int i=0;i<m_strList.size();i++)
216 m_lb->addItem(m_strList[i].trimmed());
221 QVariant &InputStrList::value()
226 void InputStrList::update()
228 setValue(m_value.toStringList());
231 void InputStrList::updateDefault()
233 if (m_strList==m_default || !m_lab->isEnabled())
235 m_lab->setText(QString::fromLatin1("<qt>")+m_id+QString::fromLatin1("</qt"));
239 m_lab->setText(QString::fromLatin1("<qt><font color='red'>")+m_id+QString::fromLatin1("</font></qt>"));
243 void InputStrList::reset()
248 void InputStrList::writeValue(QTextStream &t,QTextCodec *codec)
251 foreach (QString s, m_strList)
259 writeStringValue(t,codec,s);
263 bool InputStrList::isEmpty()
265 foreach (QString s, m_strList)
267 if (!s.isEmpty()) return false;