KIO
kencodingfiledialog.cpp
Go to the documentation of this file.
00001 // -*- c++ -*- 00002 /* This file is part of the KDE libraries 00003 Copyright (C) 2003 Joseph Wenninger <jowenn@kde.org> 00004 2003 Andras Mantia <amantia@freemail.hu> 00005 00006 This library is free software; you can redistribute it and/or 00007 modify it under the terms of the GNU Library General Public 00008 License as published by the Free Software Foundation; either 00009 version 2 of the License, or (at your option) any later version. 00010 00011 This library is distributed in the hope that it will be useful, 00012 but WITHOUT ANY WARRANTY; without even the implied warranty of 00013 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU 00014 Library General Public License for more details. 00015 00016 You should have received a copy of the GNU Library General Public License 00017 along with this library; see the file COPYING.LIB. If not, write to 00018 the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, 00019 Boston, MA 02110-1301, USA. 00020 */ 00021 00022 #include "kencodingfiledialog.h" 00023 00024 #include <config-kfile.h> 00025 00026 #include <kabstractfilewidget.h> 00027 #include <kcombobox.h> 00028 #include <kglobal.h> 00029 #include <klocale.h> 00030 #include <kcharsets.h> 00031 #include <QtCore/QTextCodec> 00032 #include <krecentdocument.h> 00033 00034 struct KEncodingFileDialogPrivate 00035 { 00036 KComboBox *encoding; 00037 }; 00038 00039 KEncodingFileDialog::KEncodingFileDialog(const QString& startDir, const QString& encoding , const QString& filter, 00040 const QString& caption, KFileDialog::OperationMode type, QWidget *parent) 00041 : KFileDialog(startDir,filter,parent), d(new KEncodingFileDialogPrivate) 00042 { 00043 setCaption(caption); 00044 //ops->clearHistory(); 00045 00046 setOperationMode( type ); 00047 00048 d->encoding = new KComboBox(this); 00049 fileWidget()->setCustomWidget(i18n("Encoding:"), d->encoding); 00050 00051 d->encoding->clear (); 00052 QString sEncoding = encoding; 00053 QString systemEncoding = QLatin1String(KGlobal::locale()->encoding()); 00054 if (sEncoding.isEmpty() || sEncoding == "System") 00055 sEncoding = systemEncoding; 00056 00057 const QStringList encodings (KGlobal::charsets()->availableEncodingNames()); 00058 int insert = 0, system = 0; 00059 bool foundRequested=false; 00060 foreach (const QString& encoding, encodings) 00061 { 00062 bool found = false; 00063 QTextCodec *codecForEnc = KGlobal::charsets()->codecForName(encoding, found); 00064 00065 if (found) 00066 { 00067 d->encoding->addItem (encoding); 00068 if ( (codecForEnc->name() == sEncoding) || (encoding == sEncoding) ) 00069 { 00070 d->encoding->setCurrentIndex(insert); 00071 foundRequested=true; 00072 } 00073 00074 if ( (codecForEnc->name() == systemEncoding) || (encoding == systemEncoding) ) 00075 system=insert; 00076 insert++; 00077 } 00078 } 00079 00080 if ( !foundRequested ) 00081 d->encoding->setCurrentIndex(system); 00082 00083 } 00084 00085 KEncodingFileDialog::~KEncodingFileDialog() 00086 { 00087 delete d; 00088 } 00089 00090 00091 QString KEncodingFileDialog::selectedEncoding() const 00092 { 00093 if (d->encoding) 00094 return d->encoding->currentText(); 00095 else 00096 return QString(); 00097 } 00098 00099 00100 KEncodingFileDialog::Result KEncodingFileDialog::getOpenFileNameAndEncoding(const QString& encoding, 00101 const QString& startDir, 00102 const QString& filter, 00103 QWidget *parent, const QString& caption) 00104 { 00105 KEncodingFileDialog dlg(startDir, encoding, filter, 00106 caption.isNull() ? i18n("Open") : caption, 00107 Opening, parent); 00108 00109 dlg.setMode( KFile::File | KFile::LocalOnly ); 00110 dlg.exec(); 00111 00112 Result res; 00113 res.fileNames<<dlg.selectedFile(); 00114 res.encoding=dlg.selectedEncoding(); 00115 return res; 00116 } 00117 00118 KEncodingFileDialog::Result KEncodingFileDialog::getOpenFileNamesAndEncoding(const QString& encoding, 00119 const QString& startDir, 00120 const QString& filter, 00121 QWidget *parent, 00122 const QString& caption) 00123 { 00124 KEncodingFileDialog dlg(startDir, encoding, filter, caption.isNull() ? i18n("Open") : caption, 00125 Opening, parent); 00126 dlg.setMode(KFile::Files | KFile::LocalOnly); 00127 dlg.exec(); 00128 00129 Result res; 00130 res.fileNames=dlg.selectedFiles(); 00131 res.encoding=dlg.selectedEncoding(); 00132 return res; 00133 } 00134 00135 KEncodingFileDialog::Result KEncodingFileDialog::getOpenUrlAndEncoding(const QString& encoding, const QString& startDir, 00136 const QString& filter, QWidget *parent, const QString& caption) 00137 { 00138 KEncodingFileDialog dlg(startDir, encoding, filter, 00139 caption.isNull() ? i18n("Open") : caption, 00140 Opening, parent); 00141 00142 dlg.setMode( KFile::File ); 00143 dlg.exec(); 00144 00145 Result res; 00146 res.URLs<<dlg.selectedUrl(); 00147 res.encoding=dlg.selectedEncoding(); 00148 return res; 00149 } 00150 00151 KEncodingFileDialog::Result KEncodingFileDialog::getOpenUrlsAndEncoding(const QString& encoding, const QString& startDir, 00152 const QString& filter, 00153 QWidget *parent, 00154 const QString& caption) 00155 { 00156 KEncodingFileDialog dlg(startDir, encoding, filter, 00157 caption.isNull() ? i18n("Open") : caption, 00158 Opening, parent); 00159 00160 dlg.setMode(KFile::Files); 00161 dlg.exec(); 00162 00163 Result res; 00164 res.URLs=dlg.selectedUrls(); 00165 res.encoding=dlg.selectedEncoding(); 00166 return res; 00167 } 00168 00169 00170 KEncodingFileDialog::Result KEncodingFileDialog::getSaveFileNameAndEncoding(const QString& encoding, 00171 const QString& dir, 00172 const QString& filter, 00173 QWidget *parent, 00174 const QString& caption) 00175 { 00176 KEncodingFileDialog dlg(dir, encoding, filter, 00177 caption.isNull() ? i18n("Save As") : caption, 00178 Saving, parent); 00179 dlg.setMode(KFile::File); 00180 dlg.exec(); 00181 00182 QString filename = dlg.selectedFile(); 00183 if (!filename.isEmpty()) 00184 KRecentDocument::add(filename); 00185 00186 Result res; 00187 res.fileNames<<filename; 00188 res.encoding=dlg.selectedEncoding(); 00189 return res; 00190 } 00191 00192 00193 KEncodingFileDialog::Result KEncodingFileDialog::getSaveUrlAndEncoding(const QString& encoding, 00194 const QString& dir, const QString& filter, 00195 QWidget *parent, const QString& caption) 00196 { 00197 KEncodingFileDialog dlg(dir, encoding, filter, 00198 caption.isNull() ? i18n("Save As") : caption, 00199 Saving, parent); 00200 dlg.setMode(KFile::File); 00201 00202 Result res; 00203 if (dlg.exec() == QDialog::Accepted) { 00204 KUrl url = dlg.selectedUrl(); 00205 if (url.isValid()) 00206 KRecentDocument::add( url ); 00207 res.URLs<<url; 00208 res.encoding=dlg.selectedEncoding(); 00209 } 00210 return res; 00211 } 00212 00213 #include "kencodingfiledialog.moc"
KDE 4.7 API Reference