OSDN Git Service

Apache Luceneを使った日本語検索のために、NoteテーブルにcontentTextカラムを追加。
[neighbornote/NeighborNote.git] / src / cx / fbn / nevernote / gui / RensoNoteListItem.java
1 /*
2  * This file is part of NeighborNote
3  * Copyright 2013 Yuki Takahashi
4  * 
5  * This file may be licensed under the terms of of the
6  * GNU General Public License Version 2 (the ``GPL'').
7  *
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.
12  *
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.
17  *
18 */
19
20 // ICHANGED
21 package cx.fbn.nevernote.gui;
22
23 import java.text.SimpleDateFormat;
24
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;
40
41 import cx.fbn.nevernote.Global;
42 import cx.fbn.nevernote.sql.DatabaseConnection;
43
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;
56         
57         private final String iconPath = new String("classpath:cx/fbn/nevernote/icons/");
58         
59         public RensoNoteListItem(Note note, int relationPoints, boolean isStared, int allPointSum, DatabaseConnection c, RensoNoteList parent){
60                 
61                 this.conn = c;
62                 this.parent = parent;
63                 this.isStared = isStared;
64                 this.allPointSum = allPointSum;
65                 this.noteGuid = new String(note.getGuid());
66                 
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();
71                 
72                 StringBuilder sb = new StringBuilder();
73
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 + " ");
78                         }
79                 }
80
81                 this.tagNames = new String(sb);
82                 
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);
90         }
91         
92         @Override
93         protected void paintEvent(QPaintEvent event){
94                 QPainter painter = new QPainter(this);
95
96                 // 枠線
97                 painter.setPen(QColor.lightGray);
98                 painter.drawLine(0, rect().height() - 1, rect().width() - 1, rect().height() - 1);
99                 
100                 // 項目の中身
101                 // フォント設定
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);
110                 
111                 // タイトル
112                 painter.setPen(QColor.black);
113                 painter.setFont(titleFont);
114                 painter.drawText(85, 3, size().width() - 85, 20, Qt.AlignmentFlag.AlignLeft.value(), noteTitle);
115                 // ノート作成日時
116                 painter.setFont(normalFont);
117                 painter.setPen(new QColor(60, 65, 255));
118                 painter.drawText(85, 23, 75, 17, Qt.AlignmentFlag.AlignLeft.value(), noteCreated);
119                 // タグ
120                 painter.setPen(QColor.black);
121                 painter.drawText(165, 23, size().width() - 165, 17, Qt.AlignmentFlag.AlignLeft.value(), tagNames);
122                 // ノート内容
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);
130                 
131                 // 関連度
132                 double ratio = (double)relationPoints / allPointSum;
133                 QColor relationColor;
134                 if (ratio >= 0.8) {
135                         relationColor = new QColor(255, 0, 0);
136                 } else if (ratio >= 0.5) {
137                         relationColor = new QColor(255, 100, 0);
138                 } else {
139                         relationColor = new QColor(255, 200, 0);
140                 }
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);
151                 // サムネイル
152                 QImage img;
153                 String thumbnailName = Global.getFileManager().getResDirPath("thumbnail-" + noteGuid + ".png");
154                 QFile thumbnail = new QFile(thumbnailName);
155                 if (!thumbnail.exists()) {
156                         img = new QImage();
157                         img.loadFromData(conn.getNoteTable().getThumbnail(noteGuid));
158                 } else {
159                         img = new QImage(thumbnailName);
160                 }
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);
164                 
165                 // スター
166                 if (isStared) {
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());
170                 }
171                 
172                 painter.end();
173         }
174
175         @Override
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);
180                 }
181         }
182         
183         @Override
184         protected void leaveEvent(QEvent e){
185                 if (!parent.isContextMenuVisible()) {
186                         setDefaultBackground();
187                 }
188         }
189         
190         @Override
191         protected void mousePressEvent(QMouseEvent e) {
192                 
193                 palette.setColor(QPalette.ColorRole.Window, new QColor(165, 175, 255));
194                 this.setPalette(palette);
195                 
196                 super.mousePressEvent(e);
197         }
198         
199         public void setDefaultBackground() {
200                 palette.setColor(QPalette.ColorRole.Window, new QColor(255, 255, 255));
201                 this.setPalette(palette);
202         }
203 }