Root/
Source at commit 1322 created 12 years 7 months ago. By meklort, Add doxygen to utils folder | |
---|---|
1 | /******************************************************************************␊ |
2 | *␊ |
3 | * ␊ |
4 | *␊ |
5 | * Copyright (C) 1997-2011 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 | ␊ |
255 |