浏览代码

New class Fb2SaveDialog

Kandrashin Denis 13 年之前
父节点
当前提交
752a5d709a
共有 4 个文件被更改,包括 107 次插入1 次删除
  1. 1 1
      source/fb2app.cpp
  2. 75 0
      source/fb2save.cpp
  3. 28 0
      source/fb2save.hpp
  4. 3 0
      source/fb2view.cpp

+ 1 - 1
source/fb2app.cpp

@@ -22,7 +22,7 @@ void Fb2Application::handleMessage(QtMsgType type, const char *msg)
         abort();
         abort();
     }
     }
     */
     */
-    emit logMessage(msg);
+    emit logMessage( QString::fromUtf8(msg));
 }
 }
 
 
 static void fb2MessageHandler(QtMsgType type, const char *msg)
 static void fb2MessageHandler(QtMsgType type, const char *msg)

+ 75 - 0
source/fb2save.cpp

@@ -6,12 +6,87 @@
 #include "fb2utils.h"
 #include "fb2utils.h"
 
 
 #include <QAbstractNetworkCache>
 #include <QAbstractNetworkCache>
+#include <QComboBox>
+#include <QFileDialog>
+#include <QGridLayout>
+#include <QLabel>
+#include <QList>
 #include <QNetworkReply>
 #include <QNetworkReply>
 #include <QNetworkRequest>
 #include <QNetworkRequest>
 #include <QScopedPointer>
 #include <QScopedPointer>
+#include <QTextCodec>
 #include <QWebFrame>
 #include <QWebFrame>
 #include <QWebPage>
 #include <QWebPage>
 
 
+//---------------------------------------------------------------------------
+//  Fb2SaveDialog
+//---------------------------------------------------------------------------
+
+Fb2SaveDialog::Fb2SaveDialog(QWidget *parent, Qt::WindowFlags f)
+    : QFileDialog(parent, f)
+{
+    init();
+}
+
+Fb2SaveDialog::Fb2SaveDialog(QWidget *parent, const QString &caption, const QString &directory, const QString &filter)
+    : QFileDialog(parent, caption, directory, filter)
+{
+    init();
+}
+
+void Fb2SaveDialog::init()
+{
+    QMap<QString, QString> codecMap;
+    foreach (int mib, QTextCodec::availableMibs()) {
+        QTextCodec *codec = QTextCodec::codecForMib(mib);
+
+        QString sortKey = codec->name().toUpper();
+        int rank;
+
+        if (sortKey.startsWith("UTF-8")) {
+            rank = 1;
+        } else if (sortKey.startsWith("KOI8")) {
+            rank = 2;
+        } else if (sortKey.startsWith("WINDOWS")) {
+            rank = 3;
+        } else {
+            rank = 4;
+        }
+        sortKey.prepend(QChar('0' + rank));
+        codecMap.insert(sortKey, codec->name());
+    }
+
+    setAcceptMode(AcceptSave);
+    setConfirmOverwrite(true);
+    setDefaultSuffix("fb2");
+
+    QStringList filters;
+    filters << tr("Fiction book files (*.fb2)");
+    filters << tr("Any files (*.*)");
+    setNameFilters(filters);
+
+    QGridLayout *layout = (QGridLayout*) this->layout();
+    int row = layout->rowCount();
+
+    combo = new QComboBox(this);
+    foreach (QString codec, codecMap) {
+        combo->addItem(codec);
+    }
+    combo->setCurrentIndex(0);
+
+    label = new QLabel(this);
+    label->setText(tr("&Encoding"));
+    label->setBuddy(combo);
+
+    layout->addWidget(label, row, 0);
+    layout->addWidget(combo, row, 1);
+}
+
+QString Fb2SaveDialog::codec() const
+{
+    return combo->currentText();
+}
+
 //---------------------------------------------------------------------------
 //---------------------------------------------------------------------------
 //  Fb2HtmlHandler
 //  Fb2HtmlHandler
 //---------------------------------------------------------------------------
 //---------------------------------------------------------------------------

+ 28 - 0
source/fb2save.hpp

@@ -5,13 +5,41 @@
 #include "fb2temp.hpp"
 #include "fb2temp.hpp"
 
 
 #include <QByteArray>
 #include <QByteArray>
+#include <QFileDialog>
 #include <QStringList>
 #include <QStringList>
 #include <QXmlStreamWriter>
 #include <QXmlStreamWriter>
 
 
+QT_BEGIN_NAMESPACE
+class QComboBox;
+class QLabel;
+QT_END_NAMESPACE
+
 #include "fb2temp.hpp"
 #include "fb2temp.hpp"
 
 
 class Fb2WebView;
 class Fb2WebView;
 
 
+class Fb2SaveDialog : public QFileDialog
+{
+    Q_OBJECT
+
+public:
+    explicit Fb2SaveDialog(QWidget *parent, Qt::WindowFlags f);
+
+    explicit Fb2SaveDialog(QWidget *parent = 0,
+                         const QString &caption = QString(),
+                         const QString &directory = QString(),
+                         const QString &filter = QString());
+
+    QString codec() const;
+
+private:
+    void init();
+
+private:
+    QComboBox * combo;
+    QLabel * label;
+};
+
 class Fb2HtmlHandler : public QObject, public Fb2XmlHandler
 class Fb2HtmlHandler : public QObject, public Fb2XmlHandler
 {
 {
     Q_OBJECT
     Q_OBJECT

+ 3 - 0
source/fb2view.cpp

@@ -297,8 +297,11 @@ void Fb2WebView::insertNote()
     dlg.exec();
     dlg.exec();
 }
 }
 
 
+
 void Fb2WebView::insertLink()
 void Fb2WebView::insertLink()
 {
 {
+    Fb2SaveDialog dlg;
+    dlg.exec();
 }
 }
 
 
 void Fb2WebView::execCommand(const QString &cmd, const QString &arg)
 void Fb2WebView::execCommand(const QString &cmd, const QString &arg)