diff options
author | Kandrashin Denis <mail@lintest.ru> | 2012-09-15 15:17:46 +0400 |
---|---|---|
committer | Kandrashin Denis <mail@lintest.ru> | 2012-09-15 15:17:46 +0400 |
commit | 95e15c351bdc5d90767a7afcd678af21bf51e075 (patch) | |
tree | e80fc8c58fed435362886b7cefd0994fdd5ddec8 | |
parent | 1da667dbcd36197c589eaac2d0f2313019e2e7c7 (diff) |
Modify text actions
-rw-r--r-- | 3rdparty/gnome/24x24/edit-clear.png | bin | 0 -> 1177 bytes | |||
-rw-r--r-- | source/fb2main.cpp | 36 | ||||
-rw-r--r-- | source/fb2main.hpp | 1 | ||||
-rw-r--r-- | source/fb2temp.cpp | 48 | ||||
-rw-r--r-- | source/fb2temp.hpp | 13 | ||||
-rw-r--r-- | source/fb2text.cpp | 26 | ||||
-rw-r--r-- | source/fb2text.hpp | 7 | ||||
-rw-r--r-- | source/ts/ru.qm | bin | 10144 -> 10295 bytes | |||
-rw-r--r-- | source/ts/ru.ts | 8 |
9 files changed, 80 insertions, 59 deletions
diff --git a/3rdparty/gnome/24x24/edit-clear.png b/3rdparty/gnome/24x24/edit-clear.png Binary files differnew file mode 100644 index 0000000..62d435d --- /dev/null +++ b/3rdparty/gnome/24x24/edit-clear.png diff --git a/source/fb2main.cpp b/source/fb2main.cpp index 0db62c7..981fa7d 100644 --- a/source/fb2main.cpp +++ b/source/fb2main.cpp @@ -378,7 +378,7 @@ void FbMainWindow::createActions() menuText = menu = menuBar()->addMenu(tr("Fo&rmat")); - actionClearFormat = act = new QAction(tr("Clear format"), this); + actionClearFormat = act = new QAction(FbIcon("edit-clear"), tr("Clear format"), this); menu->addAction(act); menu->addSeparator(); @@ -512,16 +512,21 @@ void FbMainWindow::createImgs() void FbMainWindow::selectionChanged() { - actionCut->setEnabled(textFrame->view()->CutEnabled()); - actionCopy->setEnabled(textFrame->view()->CopyEnabled()); - - actionTextBold->setChecked(textFrame->view()->BoldChecked()); - actionTextItalic->setChecked(textFrame->view()->ItalicChecked()); - actionTextStrike->setChecked(textFrame->view()->StrikeChecked()); - actionTextSub->setChecked(textFrame->view()->SubChecked()); - actionTextSup->setChecked(textFrame->view()->SupChecked()); + FbTextEdit *view = textFrame->view(); + actionCut->setEnabled(view->actionEnabled(QWebPage::Cut)); + actionCopy->setEnabled(view->actionEnabled(QWebPage::Copy)); + statusBar()->showMessage(view->page()->status()); +} - statusBar()->showMessage(textFrame->view()->page()->status()); +void FbMainWindow::formatChanged() +{ + FbTextEdit *view = textFrame->view(); + actionClearFormat->setEnabled(view->actionEnabled(QWebPage::RemoveFormat)); + actionTextBold->setChecked(view->actionChecked(QWebPage::ToggleBold)); + actionTextItalic->setChecked(view->actionChecked(QWebPage::ToggleItalic)); + actionTextStrike->setChecked(view->actionChecked(QWebPage::ToggleStrikethrough)); + actionTextSub->setChecked(view->actionChecked(QWebPage::ToggleSubscript)); + actionTextSup->setChecked(view->actionChecked(QWebPage::ToggleSuperscript)); } void FbMainWindow::canUndoChanged(bool canUndo) @@ -536,12 +541,12 @@ void FbMainWindow::canRedoChanged(bool canRedo) void FbMainWindow::undoChanged() { - actionUndo->setEnabled(textFrame->view()->UndoEnabled()); + actionUndo->setEnabled(textFrame->view()->actionEnabled(QWebPage::Undo)); } void FbMainWindow::redoChanged() { - actionRedo->setEnabled(textFrame->view()->RedoEnabled()); + actionRedo->setEnabled(textFrame->view()->actionEnabled(QWebPage::Redo)); } void FbMainWindow::createStatusBar() @@ -668,6 +673,13 @@ void FbMainWindow::createTextToolbar() connect(actionTextSub, SIGNAL(triggered()), textEdit->pageAction(QWebPage::ToggleSubscript), SIGNAL(triggered())); connect(actionTextSup, SIGNAL(triggered()), textEdit->pageAction(QWebPage::ToggleSuperscript), SIGNAL(triggered())); + connect(textEdit->pageAction(QWebPage::RemoveFormat), SIGNAL(changed()), SLOT(formatChanged())); + connect(textEdit->pageAction(QWebPage::ToggleBold), SIGNAL(changed()), SLOT(formatChanged())); + connect(textEdit->pageAction(QWebPage::ToggleItalic), SIGNAL(changed()), SLOT(formatChanged())); + connect(textEdit->pageAction(QWebPage::ToggleStrikethrough), SIGNAL(changed()), SLOT(formatChanged())); + connect(textEdit->pageAction(QWebPage::ToggleSubscript), SIGNAL(changed()), SLOT(formatChanged())); + connect(textEdit->pageAction(QWebPage::ToggleSuperscript), SIGNAL(changed()), SLOT(formatChanged())); + connect(actionFind, SIGNAL(triggered()), textEdit, SLOT(find())); connect(actionImage, SIGNAL(triggered()), textEdit, SLOT(insertImage())); connect(actionNote, SIGNAL(triggered()), textEdit, SLOT(insertNote())); diff --git a/source/fb2main.hpp b/source/fb2main.hpp index 077abc7..06b9ad1 100644 --- a/source/fb2main.hpp +++ b/source/fb2main.hpp @@ -70,6 +70,7 @@ private slots: void status(const QString &text); void clipboardDataChanged(); void selectionChanged(); + void formatChanged(); void undoChanged(); void redoChanged(); void openSettings(); diff --git a/source/fb2temp.cpp b/source/fb2temp.cpp index e1d1942..7e0c553 100644 --- a/source/fb2temp.cpp +++ b/source/fb2temp.cpp @@ -1,6 +1,7 @@ #include "fb2temp.hpp" #include <QAbstractListModel> +#include <QBuffer> #include <QCryptographicHash> #include <QFileInfo> #include <QImageReader> @@ -21,11 +22,14 @@ FbTemporaryFile::FbTemporaryFile(const QString &name) { } -qint64 FbTemporaryFile::write(const QByteArray &data) +qint64 FbTemporaryFile::write(QByteArray &data) { open(); if (m_hash.isEmpty()) m_hash = md5(data); m_size = QTemporaryFile::write(data); + QBuffer buffer(&data); + buffer.open(QIODevice::ReadOnly); + m_type = QImageReader::imageFormat(&buffer); close(); return m_size; } @@ -57,7 +61,7 @@ FbTemporaryList::~FbTemporaryList() while (it.hasNext()) delete it.next(); } -QString FbTemporaryList::add(const QString &path, const QByteArray &data) +QString FbTemporaryList::add(const QString &path, QByteArray &data) { QString hash = FbTemporaryFile::md5(data); QString name = this->name(hash); @@ -105,7 +109,7 @@ QByteArray FbTemporaryList::data(const QString &name) const return QByteArray(); } -const QString & FbTemporaryList::set(const QString &name, const QByteArray &data, const QString &hash) +const QString & FbTemporaryList::set(const QString &name, QByteArray &data, const QString &hash) { FbTemporaryFile * file = get(name); if (!file) append(file = new FbTemporaryFile(name)); @@ -210,20 +214,18 @@ QNetworkReply * FbNetworkAccessManager::imageRequest(Operation op, const QNetwor return new FbImageReply(op, request, data); } -QString FbNetworkAccessManager::name(int index) const +QVariant FbNetworkAccessManager::info(int row, int col) const { - if (0 <= index && index < count()) { - return m_files[index]->name(); - } - return QString(); -} - -int FbNetworkAccessManager::size(int index) const -{ - if (0 <= index && index < count()) { - return m_files[index]->size(); + if (0 <= row && row < count()) { + FbTemporaryFile *file = m_files[row]; + switch (col) { + case 0: return file->name(); + case 1: return file->type(); + case 2: return file->size(); + } + return m_files[row]->name(); } - return 0; + return QVariant(); } QByteArray FbNetworkAccessManager::data(int index) const @@ -252,7 +254,7 @@ FbListModel::FbListModel(FbNetworkAccessManager &files, QObject *parent) int FbListModel::columnCount(const QModelIndex &parent) const { Q_UNUSED(parent); - return 2; + return 3; } int FbListModel::rowCount(const QModelIndex &parent) const @@ -266,7 +268,8 @@ QVariant FbListModel::headerData(int section, Qt::Orientation orientation, int r if (orientation == Qt::Horizontal && role == Qt::DisplayRole) { switch (section) { case 0: return tr("File name"); - case 1: return tr("Size"); + case 1: return tr("Type"); + case 2: return tr("Size"); } } return QVariant(); @@ -277,15 +280,12 @@ QVariant FbListModel::data(const QModelIndex &index, int role) const if (index.isValid()) { switch (role) { case Qt::DisplayRole: { - switch (index.column()) { - case 0: return m_files.name(index.row()); - case 1: return m_files.size(index.row()); - } + return m_files.info(index.row(), index.column()); } break; case Qt::TextAlignmentRole: { switch (index.column()) { - case 0: return Qt::AlignLeft; - case 1: return Qt::AlignRight; + case 2: return Qt::AlignRight; + default: return Qt::AlignLeft; } } } @@ -362,4 +362,6 @@ void FbListWidget::loadFinished(bool ok) m_list->setModel(new FbListModel(*m_view.files(), this)); m_list->label()->clear(); m_list->reset(); + m_list->resizeColumnToContents(1); + m_list->resizeColumnToContents(2); } diff --git a/source/fb2temp.hpp b/source/fb2temp.hpp index 71aaae3..7e4d010 100644 --- a/source/fb2temp.hpp +++ b/source/fb2temp.hpp @@ -20,15 +20,17 @@ public: static QString md5(const QByteArray &data); public: explicit FbTemporaryFile(const QString &name); - inline qint64 write(const QByteArray &data); + inline qint64 write(QByteArray &data); void setHash(const QString &hash) { m_hash = hash; } const QString & hash() const { return m_hash; } const QString & name() const { return m_name; } + const QString & type() const { return m_type; } qint64 size() const { return m_size; } QByteArray data(); private: const QString m_name; QString m_hash; + QString m_type; qint64 m_size; }; @@ -38,10 +40,10 @@ public: explicit FbTemporaryList(); virtual ~FbTemporaryList(); - QString add(const QString &path, const QByteArray &data); + QString add(const QString &path, QByteArray &data); bool exists(const QString &name) const; FbTemporaryFile * get(const QString &name) const; - const QString & set(const QString &name, const QByteArray &data, const QString &hash = QString()); + const QString & set(const QString &name, QByteArray &data, const QString &hash = QString()); QString name(const QString &hash) const; QByteArray data(const QString &name) const; private: @@ -92,13 +94,12 @@ public slots: void data(QString name, QByteArray data); public: - QString add(const QString &path, const QByteArray &data) { return m_files.add(path, data); } + QString add(const QString &path, QByteArray &data) { return m_files.add(path, data); } bool exists(const QString &name) const { return m_files.exists(name); } FbTemporaryFile * get(const QString &name) const { return m_files.get(name); } int count() const { return m_files.count(); } QByteArray data(int index) const; - QString name(int index) const; - int size(int index) const; + QVariant info(int row, int col) const; protected: virtual QNetworkReply *createRequest(Operation op, const QNetworkRequest &request, QIODevice *outgoingData = 0); diff --git a/source/fb2text.cpp b/source/fb2text.cpp index 7eabb12..f936a09 100644 --- a/source/fb2text.cpp +++ b/source/fb2text.cpp @@ -375,6 +375,10 @@ void FbTextBase::addTools(QToolBar *tool) tool->addSeparator(); + act = pageAction(QWebPage::RemoveFormat); + act->setText(QObject::tr("Clear format")); + act->setIcon(FbIcon("edit-clear")); + act = pageAction(QWebPage::ToggleBold); act->setIcon(FbIcon("format-text-bold")); act->setText(QObject::tr("&Bold")); @@ -462,6 +466,8 @@ void FbTextEdit::contextMenu(const QPoint &pos) QMenu menu, *submenu; submenu = menu.addMenu(tr("Fo&rmat")); + submenu->addAction(pageAction(QWebPage::RemoveFormat)); + submenu->addSeparator(); submenu->addAction(pageAction(QWebPage::ToggleBold)); submenu->addAction(pageAction(QWebPage::ToggleItalic)); submenu->addAction(pageAction(QWebPage::ToggleStrikethrough)); @@ -581,24 +587,16 @@ void FbTextEdit::zoomReset() setZoomFactor(1); } -bool FbTextEdit::UndoEnabled() -{ - return pageAction(QWebPage::Undo)->isEnabled(); -} - -bool FbTextEdit::RedoEnabled() -{ - return pageAction(QWebPage::Redo)->isEnabled(); -} - -bool FbTextEdit::CutEnabled() +bool FbTextEdit::actionEnabled(QWebPage::WebAction action) { - return pageAction(QWebPage::Cut)->isEnabled(); + QAction *act = pageAction(action); + return act ? act->isEnabled() : false; } -bool FbTextEdit::CopyEnabled() +bool FbTextEdit::actionChecked(QWebPage::WebAction action) { - return pageAction(QWebPage::Copy)->isEnabled(); + QAction *act = pageAction(action); + return act ? act->isChecked() : false; } bool FbTextEdit::BoldChecked() diff --git a/source/fb2text.hpp b/source/fb2text.hpp index d57cfb0..54c573f 100644 --- a/source/fb2text.hpp +++ b/source/fb2text.hpp @@ -118,10 +118,9 @@ public: bool save(QByteArray *array); bool save(QString *string); - bool UndoEnabled(); - bool RedoEnabled(); - bool CutEnabled(); - bool CopyEnabled(); + bool actionEnabled(QWebPage::WebAction action); + bool actionChecked(QWebPage::WebAction action); + bool BoldChecked(); bool ItalicChecked(); bool StrikeChecked(); diff --git a/source/ts/ru.qm b/source/ts/ru.qm Binary files differindex 457c179..9c51aaf 100644 --- a/source/ts/ru.qm +++ b/source/ts/ru.qm diff --git a/source/ts/ru.ts b/source/ts/ru.ts index 36e6114..96c9f86 100644 --- a/source/ts/ru.ts +++ b/source/ts/ru.ts @@ -216,6 +216,10 @@ <source>Size</source> <translation>Размер</translation> </message> + <message> + <source>Type</source> + <translation>Тип</translation> + </message> </context> <context> <name>FbMainWindow</name> @@ -552,6 +556,10 @@ <source>Clear format</source> <translation>&Очистить формат</translation> </message> + <message> + <source>Paste (no style)</source> + <translation>Вставить простой текст</translation> + </message> </context> <context> <name>FbNodeDlg</name> |