Work on msg viewing.

This commit is contained in:
Martin Rotter 2016-04-01 11:53:32 +02:00
parent 328f29cc5d
commit 8f62904a34
16 changed files with 99 additions and 64 deletions

@ -1 +1 @@
Subproject commit 176715f7b3229289e2fb0dffb000c436664a26ff
Subproject commit 9ac6aeabaae34afe02602f51dae7fc181aff49dd

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

View File

@ -6,8 +6,5 @@
<email>rotter.martinos@gmail.com</email>
</author>
<style></style>
<markup_wrapper>PGh0bWw+DQogIDxoZWFkPg0KICAgIDxzdHlsZT4gICANCiAgICAgIGJvZHkgeyAgICAgDQogICAgICAgIG1hcmdpbjogMHB4Ow0KICAgICAgICBwYWRkaW5nOiAwcHg7DQogICAgICB9DQogICAgDQogICAgICBwcmUgew0KICAgICAgICB3aGl0ZS1zcGFjZTogcHJlLXdyYXA7DQogICAgICB9DQoNCiAgICAgIC5oZWFkZXJ0ZXh0IHsNCiAgICAgICAgZm9udC1zaXplOiAyMHB4Ow0KICAgICAgICBtYXJnaW4tYm90dG9tOiAxMHB4Ow0KICAgICAgfQ0KDQogICAgICAuaGVhZGVyIHsNCiAgICAgICAgZm9udC1zaXplOiAxN3B4Ow0KICAgICAgICBiYWNrZ3JvdW5kOiAtd2Via2l0LWdyYWRpZW50KGxpbmVhciwgbGVmdCB0b3AsIGxlZnQgYm90dG9tLCBjb2xvci1zdG9wKDAlLHJnYmEoODQsIDEzMiwgNTMsIDEpKSwgY29sb3Itc3RvcCgxMDAlLHJnYmEoODQsIDE0MCwgNTMsIDEpKSk7DQogICAgICAgIHBhZGRpbmc6IDZweDsNCiAgICAgICAgbWFyZ2luOiAwcHggYXV0bzsNCiAgICAgICAgY29sb3I6IHdoaXRlOw0KICAgICAgICBib3JkZXI6IDAuNXB4IHNvbGlkIGJsYWNrOw0KICAgICAgfQ0KDQogICAgICAuaGVhZGVyIGEgew0KICAgICAgICBjb2xvcjogd2hpdGU7DQogICAgICB9DQogICAgICANCiAgICAgIC5oZWFkZXIgLmVuY2xvc3VyZSB7DQogICAgICAgIGNvbG9yOiBibGFjazsNCiAgICAgIH0NCg0KICAgICAgLmNvbnRlbnQgew0KICAgICAgICBib3JkZXItdG9wOiAxcHggc29saWQgZ3JheTsNCiAgICAgICAgZm9udC1zaXplOiAxNnB4Ow0KICAgICAgICBtYXJnaW46IDBweCBhdXRvOw0KICAgICAgICBwYWRkaW5nOiA2cHg7DQogICAgICAgIHBhZGRpbmctdG9wOiAxMnB4Ow0KICAgICAgfQ0KICAgICAgDQogICAgICAuY29udGFpbmVyIHsNCiAgICAgICAgYm9yZGVyOiAxcHggc29saWQgZ3JheTsNCiAgICAgICAgLXdlYmtpdC1ib3JkZXItcmFkaXVzOiAycHg7DQogICAgICAgIG1hcmdpbjogMTBweDsNCiAgICAgICAgLXdlYmtpdC1ib3gtc2hhZG93OiAycHggMnB4IDhweCAwcHggcmdiYSg1MCwgNTAsIDUwLCAwLjYyKTsNCiAgICAgIH0NCiAgICA8L3N0eWxlPg0KICAgIDx0aXRsZT4NCiAgICAgICUxDQogICAgPC90aXRsZT4NCiAgPC9oZWFkPg0KICA8Ym9keT4NCiAgICAlMg0KICA8L2JvZHk+DQo8L2h0bWw+</markup_wrapper>
<markup>PGRpdiBjbGFzcz0iY29udGFpbmVyIj4NCiAgICAgIDxkaXYgY2xhc3M9ImhlYWRlciI+DQogICAgICAgIDxkaXYgY2xhc3M9ImhlYWRlcnRleHQiPg0KICAgICAgICAgICUxDQogICAgICAgIDwvZGl2Pg0KICAgICAgICAlMiAoJTUpDQogICAgICAgIDxicj4NCiAgICAgICAgPGEgaHJlZj0iJTMiPiUzPC9hPg0KICAgICAgICAlNg0KICAgICAgPC9kaXY+DQogICAgICA8ZGl2IGNsYXNzPSJjb250ZW50Ij4NCiAgICAgICAgJTQgDQogICAgICA8L2Rpdj4NCiAgICA8L2Rpdj4=</markup>
<markup_enclosure>PGEgY2xhc3M9ImVuY2xvc3VyZSIgaHJlZj0iJTMiPiUzPC9hPg==</markup_enclosure>
<data>LyoNCiAqIEluc3BpcmVkIGJ5IFF1aXRlUlNTICJncmVlbiIgc2tpbi4NCiAqIENvcHlyaWdodCAoQykgPD0gMjAxMyBieSBRdWl0ZVJTUyB0ZWFtDQogKiBDb3B5cmlnaHQgKEMpIDIwMTQgYnkgTWFydGluIFJvdHRlciA8cm90dGVyLm1hcnRpbm9zQGdtYWlsLmNvbT4NCiAqLw0KICANClFUcmVlVmlldzo6YnJhbmNoOmhhcy1zaWJsaW5nczohYWRqb2lucy1pdGVtICB7DQogIGJvcmRlci1pbWFnZTogdXJsKHFzcy9kdW1teS5wbmcpIDA7DQp9DQoNClFUcmVlVmlldzo6YnJhbmNoOmhhcy1zaWJsaW5nczphZGpvaW5zLWl0ZW0gew0KICBib3JkZXItaW1hZ2U6IHVybChxc3MvZHVtbXkucG5nKSAwOw0KfQ0KDQpRVHJlZVZpZXc6OmJyYW5jaDohaGFzLWNoaWxkcmVuOiFoYXMtc2libGluZ3M6YWRqb2lucy1pdGVtICB7DQogIGJvcmRlci1pbWFnZTogdXJsKHFzcy9kdW1teS5wbmcpIDA7DQp9DQoNClFUcmVlVmlldzo6YnJhbmNoOmhhcy1jaGlsZHJlbjohaGFzLXNpYmxpbmdzOmNsb3NlZCwNClFUcmVlVmlldzo6YnJhbmNoOmNsb3NlZDpoYXMtY2hpbGRyZW46aGFzLXNpYmxpbmdzICB7DQogIGJvcmRlci1pbWFnZTogbm9uZTsNCiAgaW1hZ2U6IHVybChxc3MvYnJhbmNoLWNsb3NlZC5wbmcpOw0KfQ0KDQpRVHJlZVZpZXc6OmJyYW5jaDpvcGVuOmhhcy1jaGlsZHJlbjohaGFzLXNpYmxpbmdzLA0KUVRyZWVWaWV3OjpicmFuY2g6b3BlbjpoYXMtY2hpbGRyZW46aGFzLXNpYmxpbmdzICB7DQogIGJvcmRlci1pbWFnZTogbm9uZTsNCiAgaW1hZ2U6IHVybChxc3MvYnJhbmNoLW9wZW4ucG5nKTsNCn0NCg0KUVRyZWVWaWV3OjppdGVtIHsNCiAgcGFkZGluZzogMXB4IDFweCAxcHggMXB4Ow0KfSANCg0KUVRyZWVWaWV3W2hpZGVUcmVlPSJ0cnVlIl06OmJyYW5jaDohaGFzLWNobGlkcmVuOmhhc1NpYmxpbmdzIHsNCiAgYm9yZGVyLWltYWdlOiBub25lOw0KICBpbWFnZTogbm9uZTsNCn0NCg0KUVN0YXR1c0Jhcjo6aXRlbSB7DQogIGJvcmRlcjogbm9uZTsNCn0NCg0KV2ViQnJvd3NlciBRUHJvZ3Jlc3NCYXIgew0KICBib3JkZXI6IDFweCBzb2xpZCAjQTVBNUE1Ow0KICB0ZXh0LWFsaWduOiBjZW50ZXI7DQogIGJvcmRlci1sZWZ0OiBub25lOw0KICBib3JkZXItcmlnaHQ6IG5vbmU7DQogIGJhY2tncm91bmQ6IHFsaW5lYXJncmFkaWVudCh4MTowLCB5MTowLCB4MjowLCB5MjoxLCBzdG9wOjAgI2Y0ZjRmNCwgc3RvcDowLjQgI0VDRUNFQyBzdG9wOjAuNSAjREVERURFLCBzdG9wOjEgI2Y0ZjRmNCk7DQp9DQoNCldlYkJyb3dzZXIgUVByb2dyZXNzQmFyOjpjaHVuayB7DQogIGJhY2tncm91bmQ6IHFsaW5lYXJncmFkaWVudCh4MTowLCB5MTowLCB4MjowLCB5MjoxLCBzdG9wOjAgIzkwRTg5MCwgc3RvcDowLjQgIzdDRDA3Qywgc3RvcDowLjUgIzYwQzA2MCwgc3RvcDoxICM2MEQwNjApOw0KICB3aWR0aDogMXB4Ow0KfQ0KDQpRTWVudUJhciB7DQogIGJhY2tncm91bmQ6IHFsaW5lYXJncmFkaWVudCh4MTowLCB5MTowLCB4MjowLCB5MjoxLCBzdG9wOjAgI2UwZWVlMCwgc3RvcDowLjQgI2Q4ZWVkOCwgc3RvcDowLjUgI2NjZWVjYywgc3RvcDoxICNlMGVlZTApOw0KICBjb2xvcjogIzAwMDAwMDsNCiAgcGFkZGluZzogMXB4Ow0KfQ0KDQpRTWVudUJhcjo6aXRlbSB7DQogIHBhZGRpbmc6IDNweCA2cHg7DQogIGJhY2tncm91bmQ6IHRyYW5zcGFyZW50Ow0KfQ0KDQpRTWVudUJhcjo6aXRlbTpzZWxlY3RlZCB7DQogIGJvcmRlcjogMXB4IHNvbGlkICM4NGNjODQ7DQogIGJhY2tncm91bmQ6IHFsaW5lYXJncmFkaWVudCh4MTowLCB5MTowLCB4MjowLCB5MjoxLCBzdG9wOjAgI2U5ZmZlOSwgc3RvcDowLjQgI2UxZWVlMSwgc3RvcDowLjUgI2Q5ZWVkOSwgc3RvcDoxICNlOWZmZTkpOw0KfQ0KDQpRTWVudUJhcjo6aXRlbTpwcmVzc2VkIHsNCiAgYm9yZGVyOiAxcHggc29saWQgIzM0YWEzNDsNCiAgYm9yZGVyLWJvdHRvbTogbm9uZTsNCiAgYmFja2dyb3VuZDogcWxpbmVhcmdyYWRpZW50KHgxOjAsIHkxOjAsIHgyOjAsIHkyOjEsIHN0b3A6MCAjN2FjYzdhLCBzdG9wOjAuNCAjNzBjODcwLCBzdG9wOjAuNSAjNjBjNDYwLCBzdG9wOjEgIzdhY2M3YSk7DQogIGNvbG9yOiB3aGl0ZTsNCn0=</data>
</skin>

File diff suppressed because one or more lines are too long

View File

@ -6,8 +6,5 @@
<email>rotter.martinos@gmail.com</email>
</author>
<style/>
<markup_wrapper>PGh0bWw+DQogIDxoZWFkPg0KICAgIDxzdHlsZT4NCiAgICAgIGJvZHkgew0KICAgICAgICBtYXJnaW46IDBweDsNCiAgICAgICAgcGFkZGluZzogMHB4Ow0KICAgICAgfQ0KICAgIA0KICAgICAgcHJlIHsNCiAgICAgICAgd2hpdGUtc3BhY2U6IHByZS13cmFwOw0KICAgICAgfQ0KDQogICAgICAuaGVhZGVydGV4dCB7DQogICAgICAgIGZvbnQtc2l6ZTogMjBweDsNCiAgICAgICAgbWFyZ2luLWJvdHRvbTogMTBweDsNCiAgICAgIH0NCg0KICAgICAgLmhlYWRlciB7DQogICAgICAgIGZvbnQtc2l6ZTogMTdweDsNCiAgICAgICAgYmFja2dyb3VuZDogLXdlYmtpdC1ncmFkaWVudChsaW5lYXIsIGxlZnQgdG9wLCBsZWZ0IGJvdHRvbSwgY29sb3Itc3RvcCgwJSxyZ2JhKDk5LDEzNSwyMjksMSkpLCBjb2xvci1zdG9wKDEwMCUscmdiYSg2NCwxMDksMjM2LDEpKSk7DQogICAgICAgIHBhZGRpbmc6IDZweDsNCiAgICAgICAgbWFyZ2luOiAwcHggYXV0bzsNCiAgICAgICAgY29sb3I6IHdoaXRlOw0KICAgICAgICBib3JkZXI6IDAuNXB4IHNvbGlkIGJsYWNrOw0KICAgICAgfQ0KDQogICAgICAuaGVhZGVyIGEgew0KICAgICAgICB0ZXh0LWRlY29yYXRpb246IG5vbmU7DQogICAgICAgIGNvbG9yOiB3aGl0ZTsNCiAgICAgICAgd29yZC13cmFwOiBicmVhay13b3JkOw0KICAgICAgfQ0KICAgICAgDQogICAgICAuaGVhZGVyIC5lbmNsb3N1cmUgew0KICAgICAgICB0ZXh0LWRlY29yYXRpb246IG5vbmU7DQogICAgICAgIGNvbG9yOiBibGFjazsNCiAgICAgICAgd29yZC13cmFwOiBicmVhay13b3JkOw0KICAgICAgfQ0KICAgICAgDQogICAgICAuZW5jbG9zdXJlOmhvdmVyLCAuaGVhZGVyIGE6aG92ZXIgew0KICAgICAgICB0ZXh0LWRlY29yYXRpb246IHVuZGVybGluZTsNCiAgICAgIH0NCg0KICAgICAgLmNvbnRlbnQgew0KICAgICAgICBib3JkZXItdG9wOiAxcHggc29saWQgZ3JheTsNCiAgICAgICAgZm9udC1zaXplOiAxNnB4Ow0KICAgICAgICBtYXJnaW46IDBweCBhdXRvOw0KICAgICAgICBwYWRkaW5nOiA2cHg7DQogICAgICAgIHBhZGRpbmctdG9wOiAxMnB4Ow0KICAgICAgfQ0KICAgICAgDQogICAgICAuY29udGFpbmVyIHsNCiAgICAgICAgYm9yZGVyOiAxcHggc29saWQgZ3JheTsNCiAgICAgICAgLXdlYmtpdC1ib3JkZXItcmFkaXVzOiAycHg7DQogICAgICAgIG1hcmdpbjogMTBweDsNCiAgICAgICAgLXdlYmtpdC1ib3gtc2hhZG93OiAycHggMnB4IDE2cHggMHB4IHJnYmEoNTAsIDUwLCA1MCwgMC42Mik7DQogICAgICB9DQogICAgPC9zdHlsZT4NCiAgICA8dGl0bGU+DQogICAgICAlMQ0KICAgIDwvdGl0bGU+DQogIDwvaGVhZD4NCiAgPGJvZHk+DQogICAgJTINCiAgPC9ib2R5Pg0KPC9odG1sPg==</markup_wrapper>
<markup>PGRpdiBjbGFzcz0iY29udGFpbmVyIj4NCiAgICAgIDxkaXYgY2xhc3M9ImhlYWRlciI+DQogICAgICAgIDxkaXYgY2xhc3M9ImhlYWRlcnRleHQiPg0KICAgICAgICAgICUxDQogICAgICAgIDwvZGl2Pg0KICAgICAgICAlMiAoJTUpDQogICAgICAgIDxicj4NCiAgICAgICAgPGEgaHJlZj0iJTMiPiUzPC9hPg0KICAgICAgICAlNg0KICAgICAgPC9kaXY+DQogICAgICA8ZGl2IGNsYXNzPSJjb250ZW50Ij4NCiAgICAgICAgJTQgDQogICAgICA8L2Rpdj4NCiAgICA8L2Rpdj4=</markup>
<markup_enclosure>PGEgY2xhc3M9ImVuY2xvc3VyZSIgaHJlZj0iJTMiPiUzPC9hPg==</markup_enclosure>
<data>UVRyZWVWaWV3OjpicmFuY2g6aGFzLXNpYmxpbmdzOiFhZGpvaW5zLWl0ZW0gIHsNCiAgYm9yZGVyLWltYWdlOiB1cmwocXNzL2R1bW15LnBuZykgMDsNCn0NCg0KUVRyZWVWaWV3OjpicmFuY2g6aGFzLXNpYmxpbmdzOmFkam9pbnMtaXRlbSB7DQogIGJvcmRlci1pbWFnZTogdXJsKHFzcy9kdW1teS5wbmcpIDA7DQp9DQoNClFUcmVlVmlldzo6YnJhbmNoOiFoYXMtY2hpbGRyZW46IWhhcy1zaWJsaW5nczphZGpvaW5zLWl0ZW0gIHsNCiAgYm9yZGVyLWltYWdlOiB1cmwocXNzL2R1bW15LnBuZykgMDsNCn0NCg0KUVRyZWVWaWV3OjpicmFuY2g6aGFzLWNoaWxkcmVuOiFoYXMtc2libGluZ3M6Y2xvc2VkLA0KUVRyZWVWaWV3OjpicmFuY2g6Y2xvc2VkOmhhcy1jaGlsZHJlbjpoYXMtc2libGluZ3MgIHsNCiAgYm9yZGVyLWltYWdlOiBub25lOw0KICBpbWFnZTogdXJsKHFzcy9icmFuY2gtY2xvc2VkLnBuZyk7DQp9DQoNClFUcmVlVmlldzo6YnJhbmNoOm9wZW46aGFzLWNoaWxkcmVuOiFoYXMtc2libGluZ3MsDQpRVHJlZVZpZXc6OmJyYW5jaDpvcGVuOmhhcy1jaGlsZHJlbjpoYXMtc2libGluZ3MgIHsNCiAgYm9yZGVyLWltYWdlOiBub25lOw0KICBpbWFnZTogdXJsKHFzcy9icmFuY2gtb3Blbi5wbmcpOw0KfQ0KDQpRVHJlZVZpZXc6Oml0ZW0gew0KICBwYWRkaW5nOiAxcHggMXB4IDFweCAxcHg7DQp9IA0KDQpRVHJlZVZpZXdbaGlkZVRyZWU9InRydWUiXTo6YnJhbmNoOiFoYXMtY2hsaWRyZW46aGFzU2libGluZ3Mgew0KICBib3JkZXItaW1hZ2U6IG5vbmU7DQogIGltYWdlOiBub25lOw0KfQ0KDQpRU3RhdHVzQmFyOjppdGVtIHsNCiAgYm9yZGVyOiBub25lOw0KfQ==</data>
</skin>

View File

@ -3,8 +3,8 @@
Main:
▪ Internal web browser and message preview window now use component based on Chromium/Blink (QtWebEngine). Note that new QtWebEngine lacks some features and those were thus removed from RSS Guard, including Adblock, mouse gestures and some other features. Note that I was force to switch to this component because old Qt WebKit component will be removed from Qt.
▪ RSS Guard now uses only Qt 5.6 or higher.
▪ Internal web browser was REMOVED. This is because old Qt WebKit web component will be removed from Qt and new Qt component for web viewing is based on Chromium, which is fucking joke. Some people hate Chromium because of many (technocal, philosophical, etical) reasons. Moreover, it lacks some useful features and is memory hungry. It is also very buggy in Qt now. Therefore now internal web browser is gone. Message preview component now uses much lighter solution and still can display certain HTML subset. RSS Guard was tweaked to be more friendly to external web browser. Double-clicking any message results in it being opened via external web browser.
▪ RSS Guard now depends only Qt 5.6 or higher.
Added:
@ -16,13 +16,11 @@ Added:
Fixed:
▪ Download manager now correctly displays download progress/info.
▪ When user selects "Save as..." for some file from internal web browser, file selection dialog is always shown. (bug #174)
▪ Better detection of MySQL server status. (bug #169)
▪ Ordering of messages is now done on SQL server (stands for both MySQL and SQLite). (bug #172)
▪ Now title of the RSS/ATOM message is taken into account when deciding message "uniqueness". (bug #171)
▪ MySQL scripts improved. (bug #170)
▪ Fixed little problem with feed list hiding. (bug #163)
▪ Web browser search context menu item now trims the searched string. (bug #168)
Changed:

View File

@ -240,9 +240,9 @@ void FeedMessageViewer::createConnections() {
// Message changers.
connect(m_messagesView, SIGNAL(currentMessageRemoved()), m_messagesBrowser, SLOT(clear()));
connect(m_messagesView, SIGNAL(currentMessageChanged(Message)), m_messagesBrowser, SLOT(loadMessage(Message)));
connect(m_messagesView, SIGNAL(currentMessageChanged(Message,RootItem*)), m_messagesBrowser, SLOT(loadMessage(Message,RootItem*)));
connect(m_messagesView, SIGNAL(currentMessageRemoved()), this, SLOT(updateMessageButtonsAvailability()));
connect(m_messagesView, SIGNAL(currentMessageChanged(Message)), this, SLOT(updateMessageButtonsAvailability()));
connect(m_messagesView, SIGNAL(currentMessageChanged(Message,RootItem*)), this, SLOT(updateMessageButtonsAvailability()));
connect(m_feedsView, SIGNAL(itemSelected(RootItem*)), this, SLOT(updateFeedButtonsAvailability()));
connect(qApp->feedUpdateLock(), SIGNAL(locked()), this, SLOT(updateFeedButtonsAvailability()));
@ -253,16 +253,14 @@ void FeedMessageViewer::createConnections() {
// State of many messages is changed, then we need
// to reload selections.
connect(m_feedsView->sourceModel(), SIGNAL(reloadMessageListRequested(bool)), m_messagesView, SLOT(reloadSelections(bool)));
connect(m_feedsView->sourceModel(), SIGNAL(reloadMessageListRequested(bool)),
m_messagesView, SLOT(reloadSelections(bool)));
connect(m_feedsView->sourceModel(), SIGNAL(feedsUpdateFinished()), this, SLOT(onFeedsUpdateFinished()));
connect(m_feedsView->sourceModel(), SIGNAL(feedsUpdateStarted()), this, SLOT(onFeedsUpdateStarted()));
// Message openers.
connect(m_messagesView, SIGNAL(openLinkMiniBrowser(QString)), m_messagesBrowser, SLOT(navigateToUrl(QString)));
connect(m_messagesView, SIGNAL(openMessagesInNewspaperView(QList<Message>)),
form_main->m_ui->m_tabWidget, SLOT(addBrowserWithMessages(QList<Message>)));
connect(m_messagesView, SIGNAL(openLinkNewTab(QString)),
form_main->m_ui->m_tabWidget, SLOT(addLinkedBrowser(QString)));
connect(m_feedsView, SIGNAL(openMessagesInNewspaperView(QList<Message>)),
form_main->m_ui->m_tabWidget, SLOT(addBrowserWithMessages(QList<Message>)));

View File

@ -23,6 +23,7 @@
#include "gui/dialogs/formmain.h"
#include <QScrollBar>
#include <QToolBar>
MessagePreviewer::MessagePreviewer(QWidget *parent) : QWidget(parent),
@ -49,12 +50,29 @@ MessagePreviewer::MessagePreviewer(QWidget *parent) : QWidget(parent),
}
});
m_toolBar = new QToolBar(this);
m_toolBar->setOrientation(Qt::Vertical);
m_ui->m_layout->addWidget(m_toolBar, 0, 0, -1, 1);
connect(m_actionMarkRead = m_toolBar->addAction(qApp->icons()->fromTheme("mail-mark-read"), tr("Mark message as read")),
&QAction::triggered,
this,
&MessagePreviewer::markMessageAsRead);
connect(m_actionMarkUnread = m_toolBar->addAction(qApp->icons()->fromTheme("mail-mark-unread"), tr("Mark message as unread")),
&QAction::triggered,
this,
&MessagePreviewer::markMessageAsUnread);
connect(m_actionSwitchImportance = m_toolBar->addAction(qApp->icons()->fromTheme("mail-mark-favorite"), tr("Switch message importance")),
&QAction::triggered,
this,
&MessagePreviewer::switchMessageImportance);
m_actionSwitchImportance->setCheckable(true);
clear();
}
MessagePreviewer::~MessagePreviewer() {
delete m_ui;
}
void MessagePreviewer::clear() {
@ -64,19 +82,40 @@ void MessagePreviewer::clear() {
hide();
}
void MessagePreviewer::loadMessage(const Message &message) {
void MessagePreviewer::loadMessage(const Message &message, RootItem *root) {
m_message = message;
m_root = root;
m_actionMarkRead->setEnabled(!message.m_isRead);
m_actionMarkUnread->setEnabled(message.m_isRead);
m_actionSwitchImportance->setChecked(message.m_isImportant);
if (!m_root.isNull()) {
m_ui->m_lblTitle->setText(message.m_title);
m_ui->m_txtMessage->setHtml(prepareHtmlForMessage(message));
show();
m_ui->m_txtMessage->verticalScrollBar()->triggerAction(QScrollBar::SliderToMinimum);
}
}
void MessagePreviewer::markMessageAsRead() {
}
void MessagePreviewer::markMessageAsUnread() {
}
void MessagePreviewer::switchMessageImportance(bool checked) {
}
QString MessagePreviewer::prepareHtmlForMessage(const Message &message) {
QString html = QString("<p><a href=\"%1\">%1</a><p/>").arg(message.m_url);
QString html = QString("<p>[url] <a href=\"%1\">%1</a></p>").arg(message.m_url);
foreach (const Enclosure &enc, message.m_enclosures) {
html += QString("<p>[%2] <a href=\"%1\">%1</a><p/>").arg(enc.m_url, enc.m_mimeType);
html += QString("<p>[%2] <a href=\"%1\">%1</a></p>").arg(enc.m_url, enc.m_mimeType);
}
if (!message.m_enclosures.isEmpty()) {

View File

@ -23,12 +23,17 @@
#include "ui_messagepreviewer.h"
#include "core/message.h"
#include "services/abstract/rootitem.h"
#include <QPointer>
namespace Ui {
class MessagePreviewer;
}
class QToolBar;
class MessagePreviewer : public QWidget {
Q_OBJECT
@ -38,12 +43,24 @@ class MessagePreviewer : public QWidget {
public slots:
void clear();
void loadMessage(const Message &message);
void loadMessage(const Message &message, RootItem *root);
private slots:
void markMessageAsRead();
void markMessageAsUnread();
void switchMessageImportance(bool checked);
private:
QString prepareHtmlForMessage(const Message &message);
Ui::MessagePreviewer *m_ui;
QToolBar *m_toolBar;
QScopedPointer<Ui::MessagePreviewer> m_ui;
Message m_message;
QPointer<RootItem> m_root;
QAction *m_actionMarkRead;
QAction *m_actionMarkUnread;
QAction *m_actionSwitchImportance;
};
#endif // MESSAGEPREVIEWER_H

View File

@ -16,8 +16,17 @@
<property name="autoFillBackground">
<bool>true</bool>
</property>
<layout class="QVBoxLayout" name="verticalLayout">
<item>
<layout class="QGridLayout" name="m_layout">
<property name="leftMargin">
<number>0</number>
</property>
<property name="topMargin">
<number>0</number>
</property>
<property name="bottomMargin">
<number>0</number>
</property>
<item row="0" column="1">
<widget class="QLabel" name="m_lblTitle">
<property name="font">
<font>
@ -28,7 +37,7 @@
<bool>true</bool>
</property>
<property name="text">
<string>avas</string>
<string/>
</property>
<property name="alignment">
<set>Qt::AlignCenter</set>
@ -36,9 +45,15 @@
<property name="wordWrap">
<bool>true</bool>
</property>
<property name="margin">
<number>0</number>
</property>
<property name="textInteractionFlags">
<set>Qt::TextSelectableByKeyboard|Qt::TextSelectableByMouse</set>
</property>
</widget>
</item>
<item>
<item row="1" column="1">
<widget class="QTextBrowser" name="m_txtMessage">
<property name="autoFillBackground">
<bool>true</bool>
@ -49,6 +64,9 @@
<property name="frameShadow">
<enum>QFrame::Plain</enum>
</property>
<property name="tabChangesFocus">
<bool>true</bool>
</property>
<property name="openLinks">
<bool>false</bool>
</property>

View File

@ -203,7 +203,7 @@ void MessagesView::selectionChanged(const QItemSelection &selected, const QItemS
m_sourceModel->setMessageRead(mapped_current_index.row(), RootItem::Read);
}
emit currentMessageChanged(message);
emit currentMessageChanged(message, m_sourceModel->loadedItem());
}
else {
emit currentMessageRemoved();

View File

@ -95,7 +95,7 @@ class MessagesView : public QTreeView {
void openMessagesInNewspaperView(const QList<Message> &messages);
// Notify others about message selections.
void currentMessageChanged(const Message &message);
void currentMessageChanged(const Message &message, RootItem *root);
void currentMessageRemoved();
private:

View File

@ -135,19 +135,6 @@ Skin SkinFactory::skinInfo(const QString &skin_name, bool *ok) const {
// Obtain version.
skin.m_version = skin_node.attributes().namedItem(QSL("version")).toAttr().value();
// Obtain layout markup wrapper.
skin.m_layoutMarkupWrapper = skin_node.namedItem(QSL("markup_wrapper")).toElement().text();
skin.m_layoutMarkupWrapper = QByteArray::fromBase64(skin.m_layoutMarkupWrapper.toLocal8Bit());
// Obtain layout markup.
skin.m_layoutMarkup = skin_node.namedItem(QSL("markup")).toElement().text();
skin.m_layoutMarkup = QByteArray::fromBase64(skin.m_layoutMarkup.toLocal8Bit());
// Obtain enclosure hyperlink wrapper.
skin.m_enclosureMarkup = skin_node.namedItem(QSL("markup_enclosure")).toElement().text();
skin.m_enclosureMarkup = QByteArray::fromBase64(skin.m_enclosureMarkup.toLocal8Bit());
// Obtain other information.
skin.m_baseName = QString(skin_name).replace(QDir::separator(), '/');
@ -157,8 +144,7 @@ Skin SkinFactory::skinInfo(const QString &skin_name, bool *ok) const {
if (ok != NULL) {
*ok = !skin.m_author.isEmpty() && !skin.m_version.isEmpty() &&
!skin.m_baseName.isEmpty() && !skin.m_email.isEmpty() &&
!skin.m_layoutMarkup.isEmpty();
!skin.m_baseName.isEmpty() && !skin.m_email.isEmpty();
}
return skin;

View File

@ -32,9 +32,6 @@ struct Skin {
QString m_email;
QString m_version;
QString m_rawData;
QString m_layoutMarkupWrapper;
QString m_layoutMarkup;
QString m_enclosureMarkup;
};
Q_DECLARE_METATYPE(Skin)