source: filezilla/trunk/fuentes/src/interface/statuslinectrl.h @ 130

Last change on this file since 130 was 130, checked in by jrpelegrina, 3 years ago

First release to xenial

File size: 2.2 KB
Line 
1#ifndef __STATUSLINECTRL_H__
2#define __STATUSLINECTRL_H__
3
4class CQueueView;
5class CStatusLineCtrl final : public wxWindow
6{
7public:
8        CStatusLineCtrl(CQueueView* pParent, const t_EngineData* const pEngineData, const wxRect& initialPosition);
9        ~CStatusLineCtrl();
10
11        const CFileItem* GetItem() const { return m_pEngineData->pItem; }
12
13        void SetEngineData(const t_EngineData* const pEngineData);
14
15        void SetTransferStatus(CTransferStatus const& status);
16        void ClearTransferStatus();
17
18        int64_t GetLastOffset() const { return status_.empty() ? m_lastOffset : status_.currentOffset; }
19        int64_t GetTotalSize() const { return status_.empty() ? -1 : status_.totalSize; }
20        wxFileOffset GetSpeed(int elapsed_milli_seconds);
21        wxFileOffset GetCurrentSpeed();
22
23        virtual bool Show(bool show = true);
24
25protected:
26        void InitFieldOffsets();
27
28        void DrawRightAlignedText(wxDC& dc, wxString text, int x, int y);
29        void DrawProgressBar(wxDC& dc, int x, int y, int height, int bar_split, int permill);
30
31        CQueueView* m_pParent;
32        const t_EngineData* m_pEngineData;
33        CTransferStatus status_;
34
35        wxString m_statusText;
36        wxTimer m_transferStatusTimer;
37
38        static int m_fieldOffsets[4];
39        static wxCoord m_textHeight;
40        static bool m_initialized;
41
42        bool m_madeProgress;
43
44        int64_t m_lastOffset{-1}; // Stores the last transfer offset so that the total queue size can be accurately calculated.
45
46        // This is used by GetSpeed to forget about the first 10 seconds on longer transfers
47        // since at the very start the speed is hardly accurate (e.g. due to TCP slow start)
48        struct _past_data final
49        {
50                int elapsed{};
51                wxFileOffset offset{};
52        } m_past_data[10];
53        int m_past_data_count{};
54
55        //Used by getCurrentSpeed
56        wxDateTime m_gcLastTimeStamp;
57        wxFileOffset m_gcLastOffset{-1};
58        wxFileOffset m_gcLastSpeed{-1};
59
60        //Used to avoid excessive redraws
61        wxBitmap m_data;
62        std::unique_ptr<wxMemoryDC> m_mdc;
63        wxString m_previousStatusText;
64        int m_last_elapsed_seconds{};
65        int m_last_left{};
66        wxString m_last_bytes_and_rate;
67        int m_last_bar_split{-1};
68        int m_last_permill{-1};
69
70        DECLARE_EVENT_TABLE()
71        void OnPaint(wxPaintEvent& event);
72        void OnTimer(wxTimerEvent& event);
73        void OnEraseBackground(wxEraseEvent& event);
74};
75
76#endif // __STATUSLINECTRL_H__
Note: See TracBrowser for help on using the repository browser.