00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021
00022 #include "kencodingfiledialog.h"
00023
00024 #include <config-kfile.h>
00025
00026 #include <kabstractfilewidget.h>
00027 #include <kcombobox.h>
00028 #include <ktoolbar.h>
00029 #include <kglobal.h>
00030 #include <klocale.h>
00031 #include <kcharsets.h>
00032 #include <QtCore/QTextCodec>
00033 #include <krecentdocument.h>
00034
00035 struct KEncodingFileDialogPrivate
00036 {
00037 KComboBox *encoding;
00038 };
00039
00040 KEncodingFileDialog::KEncodingFileDialog(const QString& startDir, const QString& encoding , const QString& filter,
00041 const QString& caption, KFileDialog::OperationMode type, QWidget *parent)
00042 : KFileDialog(startDir,filter,parent), d(new KEncodingFileDialogPrivate)
00043 {
00044 setCaption(caption);
00045
00046
00047 setOperationMode( type );
00048
00049 d->encoding = new KComboBox(this);
00050 fileWidget()->setCustomWidget(i18n("Encoding:"), d->encoding);
00051
00052 d->encoding->clear ();
00053 QString sEncoding = encoding;
00054 QString systemEncoding = QLatin1String(KGlobal::locale()->encoding());
00055 if (sEncoding.isEmpty() || sEncoding == "System")
00056 sEncoding = systemEncoding;
00057
00058 const QStringList encodings (KGlobal::charsets()->availableEncodingNames());
00059 int insert = 0, system = 0;
00060 bool foundRequested=false;
00061 foreach (const QString& encoding, encodings)
00062 {
00063 bool found = false;
00064 QTextCodec *codecForEnc = KGlobal::charsets()->codecForName(encoding, found);
00065
00066 if (found)
00067 {
00068 d->encoding->addItem (encoding);
00069 if ( (codecForEnc->name() == sEncoding) || (encoding == sEncoding) )
00070 {
00071 d->encoding->setCurrentIndex(insert);
00072 foundRequested=true;
00073 }
00074
00075 if ( (codecForEnc->name() == systemEncoding) || (encoding == systemEncoding) )
00076 system=insert;
00077 insert++;
00078 }
00079 }
00080
00081 if ( !foundRequested )
00082 d->encoding->setCurrentIndex(system);
00083
00084 }
00085
00086 KEncodingFileDialog::~KEncodingFileDialog()
00087 {
00088 delete d;
00089 }
00090
00091
00092 QString KEncodingFileDialog::selectedEncoding() const
00093 {
00094 if (d->encoding)
00095 return d->encoding->currentText();
00096 else
00097 return QString();
00098 }
00099
00100
00101 KEncodingFileDialog::Result KEncodingFileDialog::getOpenFileNameAndEncoding(const QString& encoding,
00102 const QString& startDir,
00103 const QString& filter,
00104 QWidget *parent, const QString& caption)
00105 {
00106 KEncodingFileDialog dlg(startDir, encoding, filter,
00107 caption.isNull() ? i18n("Open") : caption,
00108 Opening, parent);
00109
00110 dlg.setMode( KFile::File | KFile::LocalOnly );
00111 dlg.exec();
00112
00113 Result res;
00114 res.fileNames<<dlg.selectedFile();
00115 res.encoding=dlg.selectedEncoding();
00116 return res;
00117 }
00118
00119 KEncodingFileDialog::Result KEncodingFileDialog::getOpenFileNamesAndEncoding(const QString& encoding,
00120 const QString& startDir,
00121 const QString& filter,
00122 QWidget *parent,
00123 const QString& caption)
00124 {
00125 KEncodingFileDialog dlg(startDir, encoding, filter, caption.isNull() ? i18n("Open") : caption,
00126 Opening, parent);
00127 dlg.setMode(KFile::Files | KFile::LocalOnly);
00128 dlg.exec();
00129
00130 Result res;
00131 res.fileNames=dlg.selectedFiles();
00132 res.encoding=dlg.selectedEncoding();
00133 return res;
00134 }
00135
00136 KEncodingFileDialog::Result KEncodingFileDialog::getOpenUrlAndEncoding(const QString& encoding, const QString& startDir,
00137 const QString& filter, QWidget *parent, const QString& caption)
00138 {
00139 KEncodingFileDialog dlg(startDir, encoding, filter,
00140 caption.isNull() ? i18n("Open") : caption,
00141 Opening, parent);
00142
00143 dlg.setMode( KFile::File );
00144 dlg.exec();
00145
00146 Result res;
00147 res.URLs<<dlg.selectedUrl();
00148 res.encoding=dlg.selectedEncoding();
00149 return res;
00150 }
00151
00152 KEncodingFileDialog::Result KEncodingFileDialog::getOpenUrlsAndEncoding(const QString& encoding, const QString& startDir,
00153 const QString& filter,
00154 QWidget *parent,
00155 const QString& caption)
00156 {
00157 KEncodingFileDialog dlg(startDir, encoding, filter,
00158 caption.isNull() ? i18n("Open") : caption,
00159 Opening, parent);
00160
00161 dlg.setMode(KFile::Files);
00162 dlg.exec();
00163
00164 Result res;
00165 res.URLs=dlg.selectedUrls();
00166 res.encoding=dlg.selectedEncoding();
00167 return res;
00168 }
00169
00170
00171 KEncodingFileDialog::Result KEncodingFileDialog::getSaveFileNameAndEncoding(const QString& encoding,
00172 const QString& dir,
00173 const QString& filter,
00174 QWidget *parent,
00175 const QString& caption)
00176 {
00177 bool specialDir = dir.at(0) == ':';
00178 KEncodingFileDialog dlg(specialDir?dir:QString(), encoding, filter,
00179 caption.isNull() ? i18n("Save As") : caption,
00180 Saving, parent);
00181 dlg.setMode(KFile::File);
00182
00183 if ( !specialDir )
00184 dlg.setSelection( dir );
00185 dlg.exec();
00186
00187 QString filename = dlg.selectedFile();
00188 if (!filename.isEmpty())
00189 KRecentDocument::add(filename);
00190
00191 Result res;
00192 res.fileNames<<filename;
00193 res.encoding=dlg.selectedEncoding();
00194 return res;
00195 }
00196
00197
00198 KEncodingFileDialog::Result KEncodingFileDialog::getSaveUrlAndEncoding(const QString& encoding,
00199 const QString& dir, const QString& filter,
00200 QWidget *parent, const QString& caption)
00201 {
00202 bool specialDir = !dir.isEmpty() && dir.at(0) == ':';
00203 KEncodingFileDialog dlg(specialDir?dir:QString(), encoding, filter,
00204 caption.isNull() ? i18n("Save As") : caption,
00205 Saving, parent);
00206 dlg.setMode(KFile::File);
00207 if ( !specialDir )
00208 dlg.setSelection( dir );
00209
00210 Result res;
00211 if (dlg.exec() == QDialog::Accepted) {
00212 KUrl url = dlg.selectedUrl();
00213 if (url.isValid())
00214 KRecentDocument::add( url );
00215 res.URLs<<url;
00216 res.encoding=dlg.selectedEncoding();
00217 }
00218 return res;
00219 }
00220
00221 #include "kencodingfiledialog.moc"