xref: /haiku/src/apps/webpositive/DownloadProgressView.h (revision b57470a2179ca208ea910422db1ab2881575b69d)
1 /*
2  * Copyright (C) 2010 Stephan Aßmus <superstippi@gmx.de>
3  *
4  * All rights reserved. Distributed under the terms of the MIT License.
5  */
6 #ifndef DOWNLOAD_PROGRESS_VIEW_H
7 #define DOWNLOAD_PROGRESS_VIEW_H
8 
9 
10 #include <GroupView.h>
11 #include <Path.h>
12 #include <String.h>
13 
14 class BEntry;
15 class BStatusBar;
16 class BStringView;
17 class BWebDownload;
18 class IconView;
19 class SmallButton;
20 
21 
22 enum {
23 	SAVE_SETTINGS = 'svst'
24 };
25 
26 
27 class DownloadProgressView : public BGroupView {
28 public:
29 								DownloadProgressView(BWebDownload* download);
30 								DownloadProgressView(const BMessage* archive);
31 
32 			bool				Init(BMessage* archive = NULL);
33 
34 			status_t			SaveSettings(BMessage* archive);
35 	virtual	void				AttachedToWindow();
36 	virtual	void				DetachedFromWindow();
37 	virtual	void				AllAttached();
38 
39 	virtual	void				Draw(BRect updateRect);
40 
41 	virtual	void				MessageReceived(BMessage* message);
42 
43 			void				ShowContextMenu(BPoint screenWhere);
44 
45 			BWebDownload*		Download() const;
46 			const BString&		URL() const;
47 			bool				IsMissing() const;
48 			bool				IsFinished() const;
49 
50 			void				DownloadFinished();
51 			void				DownloadCanceled();
52 
53 	static	void				SpeedVersusEstimatedFinishTogglePulse();
54 
55 private:
56 			void				_UpdateStatus(off_t currentSize,
57 									off_t expectedSize);
58 			void				_UpdateStatusText();
59 			void				_StartNodeMonitor(const BEntry& entry);
60 			void				_StopNodeMonitor();
61 
62 private:
63 			IconView*			fIconView;
64 			BStatusBar*			fStatusBar;
65 			BStringView*		fInfoView;
66 			SmallButton*		fTopButton;
67 			SmallButton*		fBottomButton;
68 			BWebDownload*		fDownload;
69 			BString				fURL;
70 			BPath				fPath;
71 
72 			off_t				fCurrentSize;
73 			off_t				fExpectedSize;
74 			off_t				fLastSpeedReferenceSize;
75 			off_t				fEstimatedFinishReferenceSize;
76 			bigtime_t			fLastUpdateTime;
77 			bigtime_t			fLastSpeedReferenceTime;
78 			bigtime_t			fProcessStartTime;
79 			bigtime_t			fLastSpeedUpdateTime;
80 			bigtime_t			fEstimatedFinishReferenceTime;
81 	static	const size_t		kBytesPerSecondSlots = 10;
82 			size_t				fCurrentBytesPerSecondSlot;
83 			double				fBytesPerSecondSlot[kBytesPerSecondSlots];
84 			double				fBytesPerSecond;
85 
86 	static	bigtime_t			sLastEstimatedFinishSpeedToggleTime;
87 	static	bool				sShowSpeed;
88 };
89 
90 #endif // DOWNLOAD_PROGRESS_VIEW_H
91