source: filezilla/trunk/fuentes/src/interface/filelist_statusbar.cpp @ 130

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

First release to xenial

File size: 5.9 KB
Line 
1#include <filezilla.h>
2#include "filelist_statusbar.h"
3#include "sizeformatting.h"
4
5BEGIN_EVENT_TABLE(CFilelistStatusBar, wxStatusBar)
6EVT_TIMER(wxID_ANY, CFilelistStatusBar::OnTimer)
7END_EVENT_TABLE()
8
9CFilelistStatusBar::CFilelistStatusBar(wxWindow* pParent)
10        : wxStatusBar(pParent, wxID_ANY, 0)
11{
12        m_updateTimer.SetOwner(this);
13
14        m_empty_string = _("Empty directory.");
15        m_offline_string = _("Not connected.");
16
17        UpdateText();
18
19#ifdef __WXMSW__
20        if (GetLayoutDirection() != wxLayout_RightToLeft)
21                SetDoubleBuffered(true);
22#endif
23
24        RegisterOption(OPTION_SIZE_FORMAT);
25        RegisterOption(OPTION_SIZE_USETHOUSANDSEP);
26        RegisterOption(OPTION_SIZE_DECIMALPLACES);
27}
28
29void CFilelistStatusBar::UpdateText()
30{
31        wxString text;
32        if (!m_connected) {
33                text = m_offline_string;
34        }
35        else if (m_count_selected_files || m_count_selected_dirs) {
36                if (!m_count_selected_files)
37                        text = wxString::Format(wxPLURAL("Selected %d directory.", "Selected %d directories.", m_count_selected_dirs), m_count_selected_dirs);
38                else if (!m_count_selected_dirs) {
39                        const wxString size = CSizeFormat::Format(m_total_selected_size, true);
40                        if (m_unknown_selected_size)
41                                text = wxString::Format(wxPLURAL("Selected %d file. Total size: At least %s", "Selected %d files. Total size: At least %s", m_count_selected_files), m_count_selected_files, size);
42                        else
43                                text = wxString::Format(wxPLURAL("Selected %d file. Total size: %s", "Selected %d files. Total size: %s", m_count_selected_files), m_count_selected_files, size);
44                }
45                else {
46                        const wxString files = wxString::Format(wxPLURAL("%d file", "%d files", m_count_selected_files), m_count_selected_files);
47                        const wxString dirs = wxString::Format(wxPLURAL("%d directory", "%d directories", m_count_selected_dirs), m_count_selected_dirs);
48                        const wxString size = CSizeFormat::Format(m_total_selected_size, true);
49                        if (m_unknown_selected_size)
50                                text = wxString::Format(_("Selected %s and %s. Total size: At least %s"), files, dirs, size);
51                        else
52                                text = wxString::Format(_("Selected %s and %s. Total size: %s"), files, dirs, size);
53                }
54        }
55        else if (m_count_files || m_count_dirs) {
56                if (!m_count_files)
57                        text = wxString::Format(wxPLURAL("%d directory", "%d directories", m_count_dirs), m_count_dirs);
58                else if (!m_count_dirs) {
59                        const wxString size = CSizeFormat::Format(m_total_size, true);
60                        if (m_unknown_size)
61                                text = wxString::Format(wxPLURAL("%d file. Total size: At least %s", "%d files. Total size: At least %s", m_count_files), m_count_files, size);
62                        else
63                                text = wxString::Format(wxPLURAL("%d file. Total size: %s", "%d files. Total size: %s", m_count_files), m_count_files, size);
64                }
65                else {
66                        const wxString files = wxString::Format(wxPLURAL("%d file", "%d files", m_count_files), m_count_files);
67                        const wxString dirs = wxString::Format(wxPLURAL("%d directory", "%d directories", m_count_dirs), m_count_dirs);
68                        const wxString size = CSizeFormat::Format(m_total_size, true);
69                        if (m_unknown_size)
70                                text = wxString::Format(_("%s and %s. Total size: At least %s"), files, dirs, size);
71                        else
72                                text = wxString::Format(_("%s and %s. Total size: %s"), files, dirs, size);
73                }
74                if (m_hidden) {
75                        text += ' ';
76                        text += wxString::Format(wxPLURAL("(%d object filtered)", "(%d objects filtered)", m_hidden), m_hidden);
77                }
78        }
79        else {
80                text = m_empty_string;
81                if (m_hidden) {
82                        text += ' ';
83                        text += wxString::Format(wxPLURAL("(%d object filtered)", "(%d objects filtered)", m_hidden), m_hidden);
84                }
85        }
86
87        SetStatusText(text);
88}
89
90void CFilelistStatusBar::SetDirectoryContents(int count_files, int count_dirs, int64_t total_size, int unknown_size, int hidden)
91{
92        m_count_files = count_files;
93        m_count_dirs = count_dirs;
94        m_total_size = total_size;
95        m_unknown_size = unknown_size;
96        m_hidden = hidden;
97
98        UnselectAll();
99
100        TriggerUpdateText();
101}
102
103void CFilelistStatusBar::Clear()
104{
105        m_count_files = 0;
106        m_count_dirs = 0;
107        m_total_size = 0;
108        m_unknown_size = 0;
109        m_hidden = 0;
110
111        UnselectAll();
112}
113
114void CFilelistStatusBar::SelectAll()
115{
116        m_count_selected_files = m_count_files;
117        m_count_selected_dirs = m_count_dirs;
118        m_total_selected_size = m_total_size;
119        m_unknown_selected_size = m_unknown_size;
120        TriggerUpdateText();
121}
122
123void CFilelistStatusBar::UnselectAll()
124{
125        m_count_selected_files = 0;
126        m_count_selected_dirs = 0;
127        m_total_selected_size = 0;
128        m_unknown_selected_size = 0;
129        TriggerUpdateText();
130}
131
132void CFilelistStatusBar::SelectFile(int64_t size)
133{
134        ++m_count_selected_files;
135        if (size < 0)
136                ++m_unknown_selected_size;
137        else
138                m_total_selected_size += size;
139        TriggerUpdateText();
140}
141
142void CFilelistStatusBar::UnselectFile(int64_t size)
143{
144        --m_count_selected_files;
145        if (size < 0)
146                --m_unknown_selected_size;
147        else
148                m_total_selected_size -= size;
149        TriggerUpdateText();
150}
151
152void CFilelistStatusBar::SelectDirectory()
153{
154        ++m_count_selected_dirs;
155        TriggerUpdateText();
156}
157
158void CFilelistStatusBar::UnselectDirectory()
159{
160        --m_count_selected_dirs;
161        TriggerUpdateText();
162}
163
164void CFilelistStatusBar::OnTimer(wxTimerEvent& event)
165{
166        UpdateText();
167}
168
169void CFilelistStatusBar::TriggerUpdateText()
170{
171        if (m_updateTimer.IsRunning())
172                return;
173
174        m_updateTimer.Start(1, true);
175}
176
177void CFilelistStatusBar::AddFile(int64_t size)
178{
179        ++m_count_files;
180        if (size < 0)
181                ++m_unknown_size;
182        else
183                m_total_size += size;
184        TriggerUpdateText();
185}
186
187void CFilelistStatusBar::RemoveFile(int64_t size)
188{
189        --m_count_files;
190        if (size < 0)
191                --m_unknown_size;
192        else
193                m_total_size -= size;
194        TriggerUpdateText();
195}
196
197void CFilelistStatusBar::AddDirectory()
198{
199        ++m_count_dirs;
200        TriggerUpdateText();
201}
202
203void CFilelistStatusBar::RemoveDirectory()
204{
205        --m_count_dirs;
206        TriggerUpdateText();
207}
208
209void CFilelistStatusBar::SetHidden(int hidden)
210{
211        m_hidden = hidden;
212        TriggerUpdateText();
213}
214
215void CFilelistStatusBar::SetEmptyString(const wxString& empty)
216{
217        m_empty_string = empty;
218        TriggerUpdateText();
219}
220
221void CFilelistStatusBar::SetConnected(bool connected)
222{
223        m_connected = connected;
224        TriggerUpdateText();
225}
226
227void CFilelistStatusBar::OnOptionsChanged(changed_options_t const& options)
228{
229        TriggerUpdateText();
230}
Note: See TracBrowser for help on using the repository browser.