1 /*******************************************************************
2 
3 Part of the Fritzing project - http://fritzing.org
4 Copyright (c) 2007-2014 Fachhochschule Potsdam - http://fh-potsdam.de
5 
6 Fritzing is free software: you can redistribute it and/or modify
7 it under the terms of the GNU General Public License as published by
8 the Free Software Foundation, either version 3 of the License, or
9 (at your option) any later version.
10 
11 Fritzing is distributed in the hope that it will be useful,
12 but WITHOUT ANY WARRANTY; without even the implied warranty of
13 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
14 GNU General Public License for more details.
15 
16 You should have received a copy of the GNU General Public License
17 along with Fritzing.  If not, see <http://www.gnu.org/licenses/>.
18 
19 ********************************************************************
20 
21 $Revision: 6483 $:
22 $Author: irascibl@gmail.com $:
23 $Date: 2012-09-26 15:45:37 +0200 (Mi, 26. Sep 2012) $
24 
25 ********************************************************************/
26 
27 
28 
29 #ifndef WELCOMEVIEW_H
30 #define WELCOMEVIEW_H
31 
32 #include <QFrame>
33 #include <QLabel>
34 #include <QList>
35 #include <QWidget>
36 #include <QNetworkReply>
37 #include <QDomDocument>
38 #include <QDragEnterEvent>
39 #include <QListWidget>
40 #include <QPainter>
41 #include <QAbstractItemDelegate>
42 
43 class BlogListWidget : public QListWidget
44 {
45     Q_OBJECT
46     Q_PROPERTY(QColor titleTextColor READ titleTextColor WRITE setTitleTextColor DESIGNABLE true)
47     Q_PROPERTY(QString titleTextFontFamily READ titleTextFontFamily WRITE setTitleTextFontFamily DESIGNABLE true)
48     Q_PROPERTY(QString titleTextFontSize READ titleTextFontSize WRITE setTitleTextFontSize DESIGNABLE true)
49     Q_PROPERTY(QString titleTextExtraLeading READ titleTextExtraLeading WRITE setTitleTextExtraLeading DESIGNABLE true)
50 
51     Q_PROPERTY(QColor introTextColor READ introTextColor WRITE setIntroTextColor DESIGNABLE true)
52     Q_PROPERTY(QString introTextFontFamily READ introTextFontFamily WRITE setIntroTextFontFamily DESIGNABLE true)
53     Q_PROPERTY(QString introTextFontSize READ introTextFontSize WRITE setIntroTextFontSize DESIGNABLE true)
54     Q_PROPERTY(QString introTextExtraLeading READ introTextExtraLeading WRITE setIntroTextExtraLeading DESIGNABLE true)
55 
56     Q_PROPERTY(QColor dateTextColor READ dateTextColor WRITE setDateTextColor DESIGNABLE true)
57     Q_PROPERTY(QString dateTextFontFamily READ dateTextFontFamily WRITE setDateTextFontFamily DESIGNABLE true)
58     Q_PROPERTY(QString dateTextFontSize READ dateTextFontSize WRITE setDateTextFontSize DESIGNABLE true)
59 
60 public:
61     BlogListWidget(QWidget * parent = 0);
62     ~BlogListWidget();
63 
64     QColor titleTextColor() const;
65     void setTitleTextColor(QColor);
66     QString titleTextFontFamily() const;
67     void setTitleTextFontFamily(QString);
68     QString titleTextFontSize() const;
69     void setTitleTextFontSize(QString);
70     QString titleTextExtraLeading() const;
71     void setTitleTextExtraLeading(QString);
72 
73     QColor introTextColor() const;
74     void setIntroTextColor(QColor);
75     QString introTextFontFamily() const;
76     void setIntroTextFontFamily(QString);
77     QString introTextFontSize() const;
78     void setIntroTextFontSize(QString);
79     QString introTextExtraLeading() const;
80     void setIntroTextExtraLeading(QString);
81 
82     QColor dateTextColor() const;
83     void setDateTextColor(QColor);
84     QString dateTextFontFamily() const;
85     void setDateTextFontFamily(QString);
86     QString dateTextFontSize() const;
87     void setDateTextFontSize(QString);
88 
89     QStringList & imageRequestList();
90 
91 public slots:
92     void itemEnteredSlot(QListWidgetItem *);
93 
94 protected:
95     QColor m_titleTextColor;
96     QString m_titleTextFontFamily;
97     QString m_titleTextFontSize;
98     QString m_titleTextExtraLeading;
99 
100     QColor m_introTextColor;
101     QString m_introTextFontFamily;
102     QString m_introTextFontSize;
103     QString m_introTextExtraLeading;
104 
105     QColor m_dateTextColor;
106     QString m_dateTextFontFamily;
107     QString m_dateTextFontSize;
108 
109     QStringList m_imageRequestList;
110 };
111 
112 class WelcomeView : public QFrame
113 {
114 Q_OBJECT
115 
116 public:
117 	WelcomeView(QWidget * parent = 0);
118 	~WelcomeView();
119 
120 	void showEvent(QShowEvent * event);
121     void dragEnterEvent(QDragEnterEvent *event);
122 	void updateRecent();
123 
124 protected:
125 	void initLayout();
126 	QWidget * initRecent();
127 	QWidget * initBlog();
128 	QWidget * initShop();
129 	QWidget * initTip();
130 	void readBlog(const QDomDocument &, bool doEmit, bool blog, const QString & prefix);
131     QWidget * makeRecentItem(const QString & objectName, const QString & iconText, const QString & textText, QLabel * & icon, QLabel * & text);
132     void getNextBlogImage(int ix, bool blog);
133     void setBlogItemImage(QPixmap &, int index, bool blog) ;
134     QWidget * createShopContentFrame(const QString & imagePath, const QString & headline, const QString & description,
135                                      const QString & url, const QString & urlText, const QString & urlText2, const QString & logoPath, const QString & footerLabelColor);
136     BlogListWidget * createBlogContentFrame(const QString & url, const QString & urlText, const QString & logoPath, const QString & footerLabelColor);
137 
138     QFrame * createHeaderFrame(const QString & url1, const QString & urlText1, const QString & url2, const QString & urlText2, const QString & inactiveColor, const QString & activeColor, QLabel * & label1, QLabel * & label2);
139 
140 
141 signals:
142 	void newSketch();
143 	void openSketch();
144 	void recentSketch(const QString & filename, const QString & actionText);
145 
146 protected slots:
147 	void clickRecent(const QString &);
148     void gotBlogSnippet(QNetworkReply *);
149     void gotBlogImage(QNetworkReply *);
150 	void clickBlog(const QString &);
151     void recentItemClicked(QListWidgetItem *);
152     void blogItemClicked(QListWidgetItem *);
153     void nextTip();
154 
155 protected:
156     BlogListWidget * m_blogListWidget;
157     BlogListWidget * m_projectListWidget;
158     QWidget * m_blogUberFrame;
159     QWidget * m_projectsUberFrame;
160     QLabel * m_tip;
161     QListWidget * m_recentListWidget;
162     QWidget * m_fabUberFrame;
163     QWidget * m_shopUberFrame;
164     QLabel * m_projectsLabel;
165     QLabel * m_blogLabel;
166     QLabel * m_fabLabel;
167     QLabel * m_shopLabel;
168 
169     static QString m_activeHeaderLabelColor;
170     static QString m_inactiveHeaderLabelColor;
171 
172 };
173 
174 class BlogListDelegate : public QAbstractItemDelegate
175 {
176 	public:
177 		BlogListDelegate(QObject *parent = 0);
178 		virtual ~BlogListDelegate();
179 
180 		void paint ( QPainter * painter, const QStyleOptionViewItem & option, const QModelIndex & index ) const;
181 		QSize sizeHint ( const QStyleOptionViewItem & option, const QModelIndex & index ) const;
182 };
183 
184 #endif
185