3 // Part of the Architektonas Project
4 // Originally part of QCad Community Edition by Andrew Mustun
5 // Extensively rewritten and refactored by James L. Hammons
6 // (C) 2010 Underground Software
8 // JLH = James L. Hammons <jlhamm@acm.org>
11 // --- ---------- -----------------------------------------------------------
12 // JLH 05/10/2010 Added this text. :-)
15 #include "qg_filedialog.h"
17 #include "qg_graphicview.h"
19 #include "rs_system.h"
23 * Shows a dialog for choosing a file name. Saving the file is up to
26 * @param type Will contain the file type that was chosen by the user.
27 * Can be NULL to be ignored.
29 * @return File name with path and extension to determine the file type
30 * or an empty string if the dialog was cancelled.
32 QString QG_FileDialog::getSaveFileName(QWidget * parent, RS2::FormatType * type)
34 // read default settings:
35 settings.beginGroup("Paths");
36 QString defDir = settings.value("/Save", RS_SYSTEM->getHomeDir()).toString();
37 QString defFilter = settings.value("/SaveFilter", "Drawing Exchange DXF 2000 (*.dxf)").toString();
38 //QString defFilter = "Drawing Exchange (*.dxf)";
41 // prepare file save as dialog:
42 // Q3FileDialog * fileDlg = new Q3FileDialog(parent, "Save as", true);
43 QFileDialog * fileDlg = new QFileDialog(parent, "Save as");
49 filters.append("Drawing Exchange DXF 2000 (*.dxf)");
50 filters.append("Drawing Exchange DXF R12 (*.dxf)");
51 filters.append("Font (*.cxf)");
52 fileDlg->setFilters(filters);
53 // fileDlg->setMode(Q3FileDialog::AnyFile);
54 fileDlg->setFileMode(QFileDialog::AnyFile);
55 // fileDlg->setCaption(QObject::tr("Save Drawing As"));
56 fileDlg->setWindowTitle(QObject::tr("Save Drawing As"));
57 // fileDlg->setDir(defDir);
58 fileDlg->setDirectory(defDir);
59 // fileDlg->setSelectedFilter(defFilter);
60 fileDlg->selectFilter(defFilter);
66 if (fileDlg->exec() == QDialog::Accepted)
68 // fn = fileDlg->selectedFile();
69 QStringList files = fileDlg->selectedFiles();
74 // fn = QDir::convertSeparators(QFileInfo(fn).absFilePath());
75 fn = QDir::convertSeparators(QFileInfo(fn).absoluteFilePath());
78 // append default extension:
79 // if (QFileInfo(fn).fileName().find('.') == -1)
80 if (QFileInfo(fn).fileName().indexOf('.') == -1)
82 if (fileDlg->selectedFilter() == "Font (*.cxf)")
91 if (fileDlg->selectedFilter() == "Font (*.cxf)")
92 *type = RS2::FormatCXF;
93 else if (fileDlg->selectedFilter() == "Drawing Exchange DXF R12 (*.dxf)")
94 *type = RS2::FormatDXF12;
96 *type = RS2::FormatDXF;
100 if (QFileInfo(fn).exists())
102 int choice = QMessageBox::warning(parent, QObject::tr("Save Drawing As"),
103 QObject::tr("%1 already exists.\nWould you like to replace it?").arg(fn),
104 QObject::tr("Yes"), QObject::tr("No"), QObject::tr("Cancel"), 0, 1);
132 // store new default settings:
135 settings.beginGroup("Paths");
136 // RS_SETTINGS->writeEntry("/Save", QFileInfo(fn).dirPath(true));
137 settings.setValue("Save", QFileInfo(fn).absolutePath());
138 //RS_SETTINGS->writeEntry("/SaveFilter", fileDlg->selectedFilter());
148 * Shows a dialog for choosing a file name. Opening the file is up to
151 * @return File name with path and extension to determine the file type
152 * or an empty string if the dialog was cancelled.
154 QString QG_FileDialog::getOpenFileName(QWidget * parent, RS2::FormatType * type)
156 RS_DEBUG->print("QG_FileDialog::getOpenFileName");
158 // read default settings:
159 settings.beginGroup("/Paths");
160 QString defDir = settings.value("/Open", RS_SYSTEM->getHomeDir()).toString();
161 //QString defFilter = RS_SETTINGS->readEntry("/OpenFilter",
162 // "Drawing Exchange (*.dxf *.DXF)");
163 QString defFilter = "Drawing Exchange (*.dxf *.DXF)";
166 RS_DEBUG->print("defDir: %s", defDir.toLatin1().data());
167 RS_DEBUG->print("defFilter: %s", defFilter.toLatin1().data());
169 QString fDxf(QObject::tr("Drawing Exchange %1").arg("(*.dxf *.DXF)"));
170 QString fDxf1(QObject::tr("QCad 1.x file %1").arg("(*.dxf *.DXF)"));
171 QString fCxf(QObject::tr("Font %1").arg("(*.cxf)"));
173 RS_DEBUG->print("fDxf: %s", fDxf.toLatin1().data());
174 RS_DEBUG->print("fDxf1: %s", fDxf1.toLatin1().data());
175 RS_DEBUG->print("fCxf: %s", fCxf.toLatin1().data());
180 // Q3FileDialog* fileDlg = new Q3FileDialog(parent, "File Dialog", true);
181 QFileDialog * fileDlg = new QFileDialog(parent);
184 // filters.append(fDxf);
185 // filters.append(fDxf1);
186 // filters.append(fCxf);
187 filters << fDxf << fDxf1 << fCxf;
189 // fileDlg->setFilters(filters);
190 fileDlg->setNameFilters(filters);
191 // fileDlg->setMode(Q3FileDialog::ExistingFile);
192 // fileDlg->setMode(QFileDialog::ExistingFile);
193 fileDlg->setFileMode(QFileDialog::ExistingFile);
194 // fileDlg->setCaption(QObject::tr("Open Drawing"));
195 fileDlg->setWindowTitle(QObject::tr("Open Drawing"));
196 // fileDlg->setDir(defDir);
197 fileDlg->setDirectory(defDir);
198 // fileDlg->setSelectedFilter(defFilter);
199 // fileDlg->selectFilter(defFilter);
200 fileDlg->selectNameFilter(defFilter);
203 Drawing * gr = new Drawing;
204 QG_GraphicView * prev = new QG_GraphicView(parent);
205 prev->setContainer(gr);
206 prev->setBorders(1, 1, 1, 1);
207 #warning "!!! QG_FileDialog: Commented out Qt3 previews !!!"
208 // fileDlg->setContentsPreviewEnabled(true);
209 // fileDlg->setContentsPreview(prev, prev);
213 if (fileDlg->exec() == QDialog::Accepted)
215 // fn = fileDlg->selectedFile();
216 QStringList files = fileDlg->selectedFiles();
218 if (!files.isEmpty())
221 // fn = QDir::convertSeparators(QFileInfo(fn).absFilePath());
222 fn = QDir::convertSeparators(QFileInfo(fn).absoluteFilePath());
224 //printf("FileDialog: selectedNameFilter = %s\n", fileDlg->selectedNameFilter().toAscii().data());
227 // if (fileDlg->selectedFilter() == fDxf1)
228 if (fileDlg->selectedNameFilter() == fDxf1)
229 *type = RS2::FormatDXF1;
230 // else if (fileDlg->selectedFilter() == fDxf)
231 else if (fileDlg->selectedNameFilter() == fDxf)
232 *type = RS2::FormatDXF;
233 // else if (fileDlg->selectedFilter() == fCxf)
234 else if (fileDlg->selectedNameFilter() == fCxf)
235 *type = RS2::FormatCXF;
241 // store new default settings:
244 settings.beginGroup("Paths");
245 // RS_SETTINGS->writeEntry("/Open", QFileInfo(fn).dirPath(true));
246 settings.setValue("Open", QFileInfo(fn).absolutePath());
247 // RS_SETTINGS->writeEntry("/OpenFilter", fileDlg->selectedFilter());
248 settings.setValue("OpenFilter", fileDlg->selectedNameFilter());
252 RS_DEBUG->print("QG_FileDialog::getOpenFileName: fileName: %s", fn.toLatin1().data());
253 RS_DEBUG->print("QG_FileDialog::getOpenFileName: OK");