2 * This file is part of NeighborNote
3 * Copyright 2013 Yuki Takahashi
5 * This file may be licensed under the terms of of the
6 * GNU General Public License Version 2 (the ``GPL'').
8 * Software distributed under the License is distributed
9 * on an ``AS IS'' basis, WITHOUT WARRANTY OF ANY KIND, either
10 * express or implied. See the GPL for the specific language
11 * governing rights and limitations.
13 * You should have received a copy of the GPL along with this
14 * program. If not, go to http://www.gnu.org/licenses/gpl.html
15 * or write to the Free Software Foundation, Inc.,
16 * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
21 package cx.fbn.nevernote.gui;
23 import java.text.SimpleDateFormat;
25 import com.evernote.edam.type.Note;
26 import com.trolltech.qt.core.QEvent;
27 import com.trolltech.qt.core.QFile;
28 import com.trolltech.qt.core.QRectF;
29 import com.trolltech.qt.core.Qt;
30 import com.trolltech.qt.gui.QColor;
31 import com.trolltech.qt.gui.QFont;
32 import com.trolltech.qt.gui.QImage;
33 import com.trolltech.qt.gui.QMouseEvent;
34 import com.trolltech.qt.gui.QPaintEvent;
35 import com.trolltech.qt.gui.QPainter;
36 import com.trolltech.qt.gui.QPalette;
37 import com.trolltech.qt.gui.QPen;
38 import com.trolltech.qt.gui.QTextOption;
39 import com.trolltech.qt.gui.QWidget;
41 import cx.fbn.nevernote.Global;
42 import cx.fbn.nevernote.sql.DatabaseConnection;
44 public class RensoNoteListItem extends QWidget{
45 private final DatabaseConnection conn;
46 private final String noteGuid;
47 private final String noteTitle;
48 private final int relationPoints;
49 private final String noteCreated;
50 private final String tagNames;
51 private final String noteContent;
52 private final RensoNoteList parent;
53 private final boolean isStared;
54 private final int allPointSum;
55 private final QPalette palette;
57 private final String iconPath = new String("classpath:cx/fbn/nevernote/icons/");
59 public RensoNoteListItem(Note note, int relationPoints, boolean isStared, int allPointSum, DatabaseConnection c, RensoNoteList parent){
63 this.isStared = isStared;
64 this.allPointSum = allPointSum;
65 this.noteGuid = new String(note.getGuid());
67 this.noteTitle = new String(note.getTitle());
68 this.relationPoints = relationPoints;
69 SimpleDateFormat simple = new SimpleDateFormat("yyyy/MM/dd");
70 this.noteCreated = new StringBuilder(simple.format(note.getCreated())).toString();
72 StringBuilder sb = new StringBuilder();
74 for (int i = 0; i < note.getTagNames().size(); i++) {
75 sb.append(note.getTagNames().get(i));
76 if(i + 1 < note.getTagNames().size()){
77 sb.append(Global.tagDelimeter + " ");
81 this.tagNames = new String(sb);
83 // this.noteContent = new String(note.getContent());
84 this.noteContent = Global.extractPlainText(conn.getNoteTable().getNoteContentNoUTFConversion(note.getGuid()));
85 palette = new QPalette();
86 palette.setColor(QPalette.ColorRole.Window, new QColor(255, 255, 255));
87 this.setPalette(palette);
88 this.setAutoFillBackground(true);
89 this.setBackgroundRole(QPalette.ColorRole.Window);
93 protected void paintEvent(QPaintEvent event){
94 QPainter painter = new QPainter(this);
97 painter.setPen(QColor.lightGray);
98 painter.drawLine(0, rect().height() - 1, rect().width() - 1, rect().height() - 1);
102 QFont relationFont = new QFont();
103 relationFont.setPixelSize(25);
104 relationFont.setBold(true);
105 QFont titleFont = new QFont();
106 titleFont.setPixelSize(15);
107 titleFont.setBold(true);
108 QFont normalFont = new QFont();
109 normalFont.setPixelSize(12);
112 painter.setPen(QColor.black);
113 painter.setFont(titleFont);
114 painter.drawText(85, 3, size().width() - 85, 20, Qt.AlignmentFlag.AlignLeft.value(), noteTitle);
116 painter.setFont(normalFont);
117 painter.setPen(new QColor(60, 65, 255));
118 painter.drawText(85, 23, 75, 17, Qt.AlignmentFlag.AlignLeft.value(), noteCreated);
120 painter.setPen(QColor.black);
121 painter.drawText(165, 23, size().width() - 165, 17, Qt.AlignmentFlag.AlignLeft.value(), tagNames);
123 QPen tmpPen = painter.pen();
124 painter.setPen(new QColor(100, 100, 100));
125 QTextOption option = new QTextOption();
126 option.setAlignment(Qt.AlignmentFlag.AlignLeft);
127 option.setUseDesignMetrics(true);
128 painter.drawText(new QRectF(85, 40, width() - 85, 45), noteContent, option);
129 painter.setPen(tmpPen);
132 double ratio = (double)relationPoints / allPointSum;
133 QColor relationColor;
135 relationColor = new QColor(255, 0, 0);
136 } else if (ratio >= 0.5) {
137 relationColor = new QColor(255, 100, 0);
139 relationColor = new QColor(255, 200, 0);
141 painter.setFont(relationFont);
142 tmpPen = painter.pen();
143 painter.setPen(this.palette().color(QPalette.ColorRole.Window));
144 painter.drawText(size().width() - 70, size().height() - 33, 67, 33, Qt.AlignmentFlag.AlignRight.value(), String.valueOf((int)(ratio * 100)) + "%");
145 painter.drawText(size().width() - 70, size().height() - 33, 73, 33, Qt.AlignmentFlag.AlignRight.value(), String.valueOf((int)(ratio * 100)) + "%");
146 painter.drawText(70, size().height() - 36, size().width() - 70, 36, Qt.AlignmentFlag.AlignRight.value(), String.valueOf((int)(ratio * 100)) + "%");
147 painter.drawText(70, size().height() - 30, size().width() - 70, 30, Qt.AlignmentFlag.AlignRight.value(), String.valueOf((int)(ratio * 100)) + "%");
148 painter.setPen(relationColor);
149 painter.drawText(70, size().height() - 33, size().width() - 70, 33, Qt.AlignmentFlag.AlignRight.value(), String.valueOf((int)(ratio * 100)) + "%");
150 painter.setPen(tmpPen);
153 String thumbnailName = Global.getFileManager().getResDirPath("thumbnail-" + noteGuid + ".png");
154 QFile thumbnail = new QFile(thumbnailName);
155 if (!thumbnail.exists()) {
157 img.loadFromData(conn.getNoteTable().getThumbnail(noteGuid));
159 img = new QImage(thumbnailName);
161 painter.drawImage(2, 4, img, 0, 0, 80, rect().height() - 10);
162 painter.setPen(QColor.lightGray);
163 painter.drawRect(2, 4, 80, rect().height() - 10);
167 QImage starImage = new QImage(iconPath+"star.png");
168 starImage = starImage.scaled(30, 30, Qt.AspectRatioMode.IgnoreAspectRatio, Qt.TransformationMode.SmoothTransformation);
169 painter.drawImage(0, 0, starImage, 0, 0, starImage.width(), starImage.height());
176 protected void enterEvent(QEvent e){
177 if (!parent.isContextMenuVisible()) {
178 palette.setColor(QPalette.ColorRole.Window, new QColor(225, 235, 255));
179 this.setPalette(palette);
184 protected void leaveEvent(QEvent e){
185 if (!parent.isContextMenuVisible()) {
186 setDefaultBackground();
191 protected void mousePressEvent(QMouseEvent e) {
193 palette.setColor(QPalette.ColorRole.Window, new QColor(165, 175, 255));
194 this.setPalette(palette);
196 super.mousePressEvent(e);
199 public void setDefaultBackground() {
200 palette.setColor(QPalette.ColorRole.Window, new QColor(255, 255, 255));
201 this.setPalette(palette);