OSDN Git Service

「ノート」メニューにメニューバーから直接アクセスできるように変更した
[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                 this.noteContent = conn.getNoteTable().getNoteContentText(note.getGuid());
86                 palette = new QPalette();
87                 palette.setColor(QPalette.ColorRole.Window, new QColor(255, 255, 255));
88                 this.setPalette(palette);
89                 this.setAutoFillBackground(true);
90                 this.setBackgroundRole(QPalette.ColorRole.Window);
91         }
92         
93         @Override
94         protected void paintEvent(QPaintEvent event){
95                 QPainter painter = new QPainter(this);
96
97                 // 枠線
98                 painter.setPen(QColor.lightGray);
99                 painter.drawLine(0, rect().height() - 1, rect().width() - 1, rect().height() - 1);
100                 
101                 // 項目の中身
102                 // フォント設定
103                 QFont relationFont = new QFont();
104                 relationFont.setPixelSize(25);
105                 relationFont.setBold(true);
106                 QFont titleFont = new QFont();
107                 titleFont.setPixelSize(15);
108                 titleFont.setBold(true);
109                 QFont normalFont = new QFont();
110                 normalFont.setPixelSize(12);
111                 
112                 // タイトル
113                 painter.setPen(QColor.black);
114                 painter.setFont(titleFont);
115                 painter.drawText(85, 3, size().width() - 85, 20, Qt.AlignmentFlag.AlignLeft.value(), noteTitle);
116                 // ノート作成日時
117                 painter.setFont(normalFont);
118                 painter.setPen(new QColor(60, 65, 255));
119                 painter.drawText(85, 23, 75, 17, Qt.AlignmentFlag.AlignLeft.value(), noteCreated);
120                 // タグ
121                 painter.setPen(QColor.black);
122                 painter.drawText(165, 23, size().width() - 165, 17, Qt.AlignmentFlag.AlignLeft.value(), tagNames);
123                 // ノート内容
124                 QPen tmpPen = painter.pen();
125                 painter.setPen(new QColor(100, 100, 100));
126                 QTextOption option = new QTextOption();
127                 option.setAlignment(Qt.AlignmentFlag.AlignLeft);
128                 option.setUseDesignMetrics(true);
129                 painter.drawText(new QRectF(85, 40, width() - 85, 45), noteContent, option);
130                 painter.setPen(tmpPen);
131                 
132                 // 関連度
133                 double ratio = (double)relationPoints / allPointSum;
134                 QColor relationColor;
135                 if (ratio >= 0.8) {
136                         relationColor = new QColor(255, 0, 0);
137                 } else if (ratio >= 0.5) {
138                         relationColor = new QColor(255, 100, 0);
139                 } else {
140                         relationColor = new QColor(255, 200, 0);
141                 }
142                 painter.setFont(relationFont);
143                 tmpPen = painter.pen();
144                 painter.setPen(this.palette().color(QPalette.ColorRole.Window));
145                 painter.drawText(size().width() - 70, size().height() - 33, 67, 33, Qt.AlignmentFlag.AlignRight.value(), String.valueOf((int)(ratio * 100)) + "%");
146                 painter.drawText(size().width() - 70, size().height() - 33, 73, 33, Qt.AlignmentFlag.AlignRight.value(), String.valueOf((int)(ratio * 100)) + "%");
147                 painter.drawText(70, size().height() - 36, size().width() - 70, 36, Qt.AlignmentFlag.AlignRight.value(), String.valueOf((int)(ratio * 100)) + "%");
148                 painter.drawText(70, size().height() - 30, size().width() - 70, 30, Qt.AlignmentFlag.AlignRight.value(), String.valueOf((int)(ratio * 100)) + "%");
149                 painter.setPen(relationColor);
150                 painter.drawText(70, size().height() - 33, size().width() - 70, 33, Qt.AlignmentFlag.AlignRight.value(), String.valueOf((int)(ratio * 100)) + "%");             
151                 painter.setPen(tmpPen);
152                 // サムネイル
153                 QImage img;
154                 String thumbnailName = Global.getFileManager().getResDirPath("thumbnail-" + noteGuid + ".png");
155                 QFile thumbnail = new QFile(thumbnailName);
156                 if (!thumbnail.exists()) {
157                         img = new QImage();
158                         img.loadFromData(conn.getNoteTable().getThumbnail(noteGuid));
159                 } else {
160                         img = new QImage(thumbnailName);
161                 }
162                 painter.drawImage(2, 4, img, 0, 0, 80, rect().height() - 10);
163                 painter.setPen(QColor.lightGray);
164                 painter.drawRect(2, 4, 80, rect().height() - 10);
165                 
166                 // スター
167                 if (isStared) {
168                         QImage starImage = new QImage(iconPath+"star.png");
169                         starImage = starImage.scaled(30, 30, Qt.AspectRatioMode.IgnoreAspectRatio, Qt.TransformationMode.SmoothTransformation);
170                         painter.drawImage(0, 0, starImage, 0, 0, starImage.width(), starImage.height());
171                 }
172                 
173                 painter.end();
174         }
175
176         @Override
177         protected void enterEvent(QEvent e){
178                 if (!parent.isContextMenuVisible()) {
179                         palette.setColor(QPalette.ColorRole.Window, new QColor(225, 235, 255));
180                         this.setPalette(palette);
181                 }
182         }
183         
184         @Override
185         protected void leaveEvent(QEvent e){
186                 if (!parent.isContextMenuVisible()) {
187                         setDefaultBackground();
188                 }
189         }
190         
191         @Override
192         protected void mousePressEvent(QMouseEvent e) {
193                 
194                 palette.setColor(QPalette.ColorRole.Window, new QColor(165, 175, 255));
195                 this.setPalette(palette);
196                 
197                 super.mousePressEvent(e);
198         }
199         
200         public void setDefaultBackground() {
201                 palette.setColor(QPalette.ColorRole.Window, new QColor(255, 255, 255));
202                 this.setPalette(palette);
203         }
204 }