From fd71b4a22e981961da8d6c3de5faaf514429e733 Mon Sep 17 00:00:00 2001 From: Jonathan White Date: Thu, 22 Feb 2018 23:19:26 -0500 Subject: [PATCH] Convert from unicode to image based paperclip --- .../application/16x16/actions/paperclip.png | Bin 0 -> 352 bytes .../application/22x22/actions/paperclip.png | Bin 0 -> 421 bytes .../application/32x32/actions/paperclip.png | Bin 0 -> 559 bytes share/icons/svg/paperclip.svgz | Bin 0 -> 1326 bytes src/gui/entry/EntryModel.cpp | 34 ++++++++---------- src/gui/entry/EntryModel.h | 5 ++- src/gui/entry/EntryView.cpp | 4 +++ 7 files changed, 23 insertions(+), 20 deletions(-) create mode 100644 share/icons/application/16x16/actions/paperclip.png create mode 100644 share/icons/application/22x22/actions/paperclip.png create mode 100644 share/icons/application/32x32/actions/paperclip.png create mode 100644 share/icons/svg/paperclip.svgz diff --git a/share/icons/application/16x16/actions/paperclip.png b/share/icons/application/16x16/actions/paperclip.png new file mode 100644 index 0000000000000000000000000000000000000000..cd61805ef0f07bfcd9b726683cec2fa616001d8f GIT binary patch literal 352 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!61|;P_|4#%`EX7WqAsj$Z!;#Vf2?- z*&xiwU%2=ykRe&(8c`CQpH@mmtT}V`<;yxP|;ma7sn8b z-l>-jy__8d*dDykZ0c2VG+3LEm@DNN_<>=Y+(9Gu4O6Cstt=9>-gttO#a}?$w!us+ zYvb<+g6a3G|D843{QtkPv9))Pw#{SK>#Tl)$$K912=95c!Q~!Lk@$_{wPsd_%GW*P zH*2~hFu(T)bF_r(pA!sq1$t)}o%+b6{`!cc!n#kDJ$u^@8a#3rz0wq?u{B`ve|=02?- zt02r6a&uJ@kRe&(8c`CQpH@mmtT}V`<;yx0|TRyr;B5V zMeow9`}J5IMUHs%U>zMpb=cW&cK=)1OuQo%1;-blv3JhX&&{r8oXBpXZSy5gu_!(5|rWYDmRQ zvx`R}9>_j6d0MdMk>#Dox*zm528iG3@2`&&t}Q({fz|VYddJ&@rCK{!tER+9i5)Rp z)wG$xMsNR-3*6UZn{TUn1}zUeGUaH~-KNRf{%;EplS%2XcJZ4%jOM~qVFi06Z MUHx3vIVCg!0JOxa=l}o! literal 0 HcmV?d00001 diff --git a/share/icons/application/32x32/actions/paperclip.png b/share/icons/application/32x32/actions/paperclip.png new file mode 100644 index 0000000000000000000000000000000000000000..cb57d13783baeaf0a42cb9cc096d52aa801f858d GIT binary patch literal 559 zcmV+~0?_@5P)v7R zEG+CT(xpi{3$YN1r4R%a0(K&TU}K|IY$QbxqF@k9AvueE$H}s1Zr0f#;s?ja&3p5{ zZ)V;syDe!rfm^tM0ldXMtR~i}g>(3fcIo#WmzoyehmRrn5ED3sd2C`su{(|7dWb)- zh~0_U?K*{b^_h1zc&Q@xDENGn21bIvRK(VUk2h(c72K{PlEXj>cH=4zG-==rW_rXf zVi`C4DKt>izyqAdP(|!$@WFlx)$M^JI27~Cv7~;fYam-w=4iq{GSkE@Xl_a1WF3BWE_ZIK{TV3xRda;WDmZL2>47yi)8=BN)PCMTeI^ xQa7=P{V4^Lo?5?P64w-GzJ(8Xf|b-lKLIK$S)&2gUKIcU002ovPDHLkV1h^c@B{z= literal 0 HcmV?d00001 diff --git a/share/icons/svg/paperclip.svgz b/share/icons/svg/paperclip.svgz new file mode 100644 index 0000000000000000000000000000000000000000..f82480bca157b52e725c1c7e997df2f270d87214 GIT binary patch literal 1326 zcmV+}1=0E+iwFP!000000F74Lj@vd6ea}}A%1et%6fe3Owu81ofdYLf+5~+uP-rEt zt*k5xqP({E>pMg0vfg!z3P^S|*E2JRl-Hjw$A&zs-qgC?c$_kisJ7Hq-R?Ku*Dt>W znMce}v{ljQR&Bgid!M!+*5-Ntfe-@0tyxv&#ybo{w+h4V)HhW3`>-lQ)u^Lt2NQD2 zLvL{}7x%JP#ZW)1QXh}HH8!#}A7455)#L1aKA-7XS|^_8dB{X4L;xOvxwb=b32s9H zX`Hm4T^r@NagX6x8TbU#drlQ?yk>`1#A{*%&Zd4b`hOb^Bz>qEk0j zC#9P}aa5)&N@c=HZ{rWD-XDgICv#@s>uTfuR$Nv8H@EMv);KC^b^b|THXb94KoprG z&vi8%mP7z-WeaY+u2)9&&#vIq!>ZCHf&w#O>C2|>D9q-?p%@{q=JJf@f(r6oTuPO( z$|r*HG+I!2n z<<1<6UhV1PGh)@8hF=JZE^&eFYmCO^JPOOd3cC$brG5 zT0h|a2i>T?Xt7()M$5hj4&T$C>Pp=+%zH(6bD_IdpjV~O8&AA7p6eD2!FYUlF5ZQY z9@A0fzSO()s%242*;C)ctsgXaG2PxzW3RX%bH7__3mzWu&a(FH zda=Qbrc;3A-guWQ>byybBSZzvHlLO1*x}7)KWCEN($-d+96N35!QGyDOc~Fz)E6n6 z6Y0K&wu;fkXSZcBlS~C)v=i(`mrppT$D%Rr6o&85&34@t!@G z)DDE^zCh4e!nT@##tJc(U#1qg9Nabl^&u;pI)eeb&Uh-YNdy~X2ABy%WK#+!<2u;9 z3$d&rozS~92wdcZ@=BW4mOq#<_i99+B&n(R5b9{&SpGWEHUu%YFVz0Xc;)nd9E5 zkiNZ!Mg`IhNWvU6OGWqzK*jtHYh9RQ-I0tWLMcP`q&e^cqzryLP^1bNIktk-ixbB^ z99v}fhLePM98U}mPP8n?N#X9`B;+_Gj7;n?;R3mm*9;nX-3x kBK!zx;Txs<0It60VmS2*KP&E}Kkv8y09 #include #include +#include #include "core/DatabaseIcons.h" #include "core/Entry.h" #include "core/Global.h" #include "core/Group.h" #include "core/Metadata.h" +#include "core/FilePath.h" // String being displayed when hiding content const QString EntryModel::HiddenContentDisplay(QString("\u25cf").repeated(6)); @@ -35,15 +37,17 @@ const QString EntryModel::HiddenContentDisplay(QString("\u25cf").repeated(6)); // Format used to display dates const Qt::DateFormat EntryModel::DateFormat = Qt::DefaultLocaleShortDate; -// Paperclip symbol -const QString EntryModel::PaperClipDisplay("\U0001f4ce"); - EntryModel::EntryModel(QObject* parent) : QAbstractTableModel(parent) , m_group(nullptr) , m_hideUsernames(false) , m_hidePasswords(true) + , m_paperClipPixmap(FilePath::instance()->icon("actions", "paperclip").pixmap(16)) + , m_paperClipPixmapCentered(24, 16) { + m_paperClipPixmapCentered.fill(Qt::transparent); + QPainter painter(&m_paperClipPixmapCentered); + painter.drawPixmap(8, 0, m_paperClipPixmap); } Entry* EntryModel::entryFromIndex(const QModelIndex& index) const @@ -205,9 +209,6 @@ QVariant EntryModel::data(const QModelIndex& index, int role) const case Accessed: result = entry->timeInfo().lastAccessTime().toLocalTime().toString(EntryModel::DateFormat); return result; - case Paperclip: - result = entry->attachments()->keys().isEmpty() ? QString() : EntryModel::PaperClipDisplay; - return result; case Attachments: // Display comma-separated list of attachments QList attachments = entry->attachments()->keys(); @@ -238,7 +239,7 @@ QVariant EntryModel::data(const QModelIndex& index, int role) const case Paperclip: // Display entries with attachments above those without when // sorting ascendingly (and vice versa when sorting descendingly) - return entry->attachments()->keys().isEmpty() ? 1 : 0; + return entry->attachments()->isEmpty() ? 1 : 0; default: // For all other columns, simply use data provided by Qt::Display- // Role for sorting @@ -257,6 +258,10 @@ QVariant EntryModel::data(const QModelIndex& index, int role) const } else { return entry->iconScaledPixmap(); } + case Paperclip: + if (!entry->attachments()->isEmpty()) { + return m_paperClipPixmapCentered; + } } } else if (role == Qt::FontRole) { QFont font; @@ -279,12 +284,6 @@ QVariant EntryModel::data(const QModelIndex& index, int role) const if (index.column() == Paperclip) { return Qt::AlignCenter; } - } else if (role == Qt::SizeHintRole) { - if (index.column() == Paperclip) { - QFont font; - QFontMetrics fm(font); - return fm.width(PaperClipDisplay) / 2; - } } return QVariant(); @@ -316,15 +315,12 @@ QVariant EntryModel::headerData(int section, Qt::Orientation orientation, int ro return tr("Modified"); case Accessed: return tr("Accessed"); - case Paperclip: - return EntryModel::PaperClipDisplay; case Attachments: return tr("Attachments"); } - } else if (role == Qt::TextAlignmentRole) { - switch (section) { - case Paperclip: - return Qt::AlignCenter; + } else if (role == Qt::DecorationRole) { + if (section == Paperclip) { + return m_paperClipPixmap; } } diff --git a/src/gui/entry/EntryModel.h b/src/gui/entry/EntryModel.h index 7c668a5f6..a2323c642 100644 --- a/src/gui/entry/EntryModel.h +++ b/src/gui/entry/EntryModel.h @@ -19,6 +19,7 @@ #define KEEPASSX_ENTRYMODEL_H #include +#include class Entry; class Group; @@ -95,9 +96,11 @@ private: bool m_hideUsernames; bool m_hidePasswords; + QPixmap m_paperClipPixmap; + QPixmap m_paperClipPixmapCentered; + static const QString HiddenContentDisplay; static const Qt::DateFormat DateFormat; - static const QString PaperClipDisplay; }; #endif // KEEPASSX_ENTRYMODEL_H diff --git a/src/gui/entry/EntryView.cpp b/src/gui/entry/EntryView.cpp index 67169d27f..dbbdd144a 100644 --- a/src/gui/entry/EntryView.cpp +++ b/src/gui/entry/EntryView.cpp @@ -72,6 +72,10 @@ EntryView::EntryView(QWidget* parent) m_columnActions->setExclusive(false); for (int columnIndex = 1; columnIndex < header()->count(); ++columnIndex) { QString caption = m_model->headerData(columnIndex, Qt::Horizontal, Qt::DisplayRole).toString(); + if (columnIndex == EntryModel::Paperclip) { + caption = tr("Attachments (icon)"); + } + QAction* action = m_headerMenu->addAction(caption); action->setCheckable(true); action->setData(columnIndex);