From dfead668759525cf0bd833cb873b694cbf05905d Mon Sep 17 00:00:00 2001
From: Andrea Diamantini <adjam7@gmail.com>
Date: Mon, 26 Apr 2010 16:46:56 +0200
Subject: Encodings management

---
 src/application.cpp |  4 +++-
 src/mainwindow.cpp  | 49 +++++++++++++++++++++++++++++++++++++++++++++++--
 src/mainwindow.h    |  7 ++++++-
 src/rekonq.kcfg     |  3 +++
 4 files changed, 59 insertions(+), 4 deletions(-)

(limited to 'src')

diff --git a/src/application.cpp b/src/application.cpp
index b28055f7..d2754ec1 100644
--- a/src/application.cpp
+++ b/src/application.cpp
@@ -411,9 +411,11 @@ void Application::updateConfiguration()
     else
         view->tabBar()->setSelectionBehaviorOnRemove(QTabBar::SelectRightTab);
     
-    // =========== Fonts ==============
+    // =========== Encodings & Fonts ==============
     QWebSettings *defaultSettings = QWebSettings::globalSettings();
 
+    defaultSettings->setDefaultTextEncoding( ReKonfig::defaultEncoding() );
+    
     int fnSize = ReKonfig::fontSize();
     int minFnSize = ReKonfig::minFontSize();
 
diff --git a/src/mainwindow.cpp b/src/mainwindow.cpp
index 03a6194a..6355e6d8 100644
--- a/src/mainwindow.cpp
+++ b/src/mainwindow.cpp
@@ -104,6 +104,7 @@ MainWindow::MainWindow()
     , m_bookmarksPanel(0)
     , m_webInspectorPanel(0)
     , m_historyBackMenu(0)
+    , m_encodingMenu( new KMenu(this) )
     , m_mainBar( new KToolBar( QString("MainToolBar"), this, Qt::TopToolBarArea, true, true, true) )
     , m_bmBar( new KToolBar( QString("BookmarkToolBar"), this, Qt::TopToolBarArea, true, false, true) )
     , m_popup( new KPassivePopup(this) )
@@ -161,6 +162,7 @@ MainWindow::~MainWindow()
     Application::bookmarkProvider()->removeToolBar(m_bmBar);
     Application::instance()->removeMainWindow(this);
     delete m_popup;
+    delete m_encodingMenu;
 }
 
 
@@ -396,6 +398,7 @@ void MainWindow::setupActions()
     actionCollection()->addAction( QLatin1String("detach_tab"), a);
     connect(a, SIGNAL(triggered(bool)), m_view->tabBar(), SLOT(detachTab()) );
     
+    
     // ----------------------- Bookmarks ToolBar Action --------------------------------------
     QAction *qa;
     
@@ -414,6 +417,14 @@ void MainWindow::setupActions()
     bmMenu->setIcon(KIcon("bookmarks"));
     bmMenu->setDelayed(false);
     actionCollection()->addAction(QLatin1String("bookmarksActionMenu"), bmMenu);
+
+    
+    // ---------------- Encodings -----------------------------------
+    a = new KAction( KIcon("character-set"), i18n("Set Encoding"), this);
+    actionCollection()->addAction( QLatin1String("encodings"), a);
+    a->setMenu(m_encodingMenu);
+    connect(m_encodingMenu, SIGNAL(aboutToShow()), this, SLOT( populateEncodingMenu() ) );
+    connect(m_encodingMenu, SIGNAL(triggered(QAction *)), this, SLOT( setEncoding(QAction *) ));
 }
 
 
@@ -482,6 +493,8 @@ void MainWindow::setupTools()
 
     toolsMenu->addSeparator();
 
+    toolsMenu->addAction(actionByName(QLatin1String("encodings")));
+    
     helpMenu()->setIcon(KIcon("help-browser"));
     toolsMenu->addAction(helpMenu()->menuAction());
     toolsMenu->addAction(actionByName(KStandardAction::name(KStandardAction::Preferences)));
@@ -1174,8 +1187,6 @@ void MainWindow::aboutToShowBackMenu()
     if(pivot >= 8)
         offset = pivot - 8; 
     
-
-
     for(int i = listCount - 1; i>=0; --i)
     {
         QWebHistoryItem item = historyList.at(i);
@@ -1202,3 +1213,37 @@ void MainWindow::openActionUrl(QAction *action)
 
     history->goToItem( history->itemAt(index) );
 }
+
+    
+void MainWindow::setEncoding(QAction *qa)
+{
+    QString currentCodec = qa->text().toLatin1();
+    currentCodec = currentCodec.remove('&');
+    kDebug() << currentCodec;
+    QWebSettings::globalSettings()->setDefaultTextEncoding( currentCodec );
+    ReKonfig::setDefaultEncoding(currentCodec);
+}
+
+
+void MainWindow::populateEncodingMenu()
+{
+    QList<QByteArray> byteCodecs = QTextCodec::availableCodecs();
+    QStringList codecs;
+    Q_FOREACH(const QByteArray &b, byteCodecs)
+    {
+        codecs << QString(b);
+    }
+    codecs.sort();
+    
+    QString currentCodec = ReKonfig::defaultEncoding();
+    kDebug() << "Current Codec: " << currentCodec;
+    
+    m_encodingMenu->clear();
+    Q_FOREACH(const QString &codec, codecs)
+    {
+        QAction *action = m_encodingMenu->addAction(codec);
+        action->setCheckable(true);
+        if (currentCodec == codec)
+            action->setChecked(true);
+    }
+}
\ No newline at end of file
diff --git a/src/mainwindow.h b/src/mainwindow.h
index 5c525e26..7129de80 100644
--- a/src/mainwindow.h
+++ b/src/mainwindow.h
@@ -157,6 +157,10 @@ private slots:
     void aboutToShowBackMenu();
     void openActionUrl(QAction *action);
 
+    // encodings
+    void setEncoding(QAction *);
+    void populateEncodingMenu();
+
 private:
     MainView *m_view;
     FindBar *m_findBar;
@@ -167,7 +171,8 @@ private:
 
     KAction *m_stopReloadAction;
     KMenu *m_historyBackMenu;
-
+    KMenu *m_encodingMenu;
+    
     KToolBar *m_mainBar;
     KToolBar *m_bmBar;
 
diff --git a/src/rekonq.kcfg b/src/rekonq.kcfg
index dd46624f..3658b324 100644
--- a/src/rekonq.kcfg
+++ b/src/rekonq.kcfg
@@ -29,6 +29,9 @@
     <entry name="recoverOnCrash" type="Int">
         <default>0</default>
     </entry>
+    <entry name="defaultEncoding" type="String">
+        <default>UTF-8</default>
+    </entry>
 </group>
 
 <!-- New Tab Page Settings -->
-- 
cgit v1.2.1