Annotation of truecrypt/main/forms/volumesizewizardpage.cpp, revision 1.1.1.1

1.1       root        1: /*
                      2:  Copyright (c) 2008 TrueCrypt Foundation. All rights reserved.
                      3: 
                      4:  Governed by the TrueCrypt License 2.4 the full text of which is contained
                      5:  in the file License.txt included in TrueCrypt binary and source code
                      6:  distribution packages.
                      7: */
                      8: 
                      9: #include "System.h"
                     10: #include "Main/GraphicUserInterface.h"
                     11: #include "VolumeSizeWizardPage.h"
                     12: 
                     13: namespace TrueCrypt
                     14: {
                     15:        VolumeSizeWizardPage::VolumeSizeWizardPage (wxPanel* parent, const VolumePath &volumePath)
                     16:                : VolumeSizeWizardPageBase (parent)
                     17:        {
                     18:                VolumeSizePrefixChoice->Append (LangString["KB"], reinterpret_cast <void *> (1024));
                     19:                VolumeSizePrefixChoice->Append (LangString["MB"], reinterpret_cast <void *> (1024 * 1024));
                     20:                VolumeSizePrefixChoice->Append (LangString["GB"], reinterpret_cast <void *> (1024 * 1024 * 1024));
                     21:                VolumeSizePrefixChoice->Select (Prefix::MB);
                     22: 
                     23:                wxLongLong diskSpace = 0;
                     24:                if (!wxGetDiskSpace (wxFileName (wstring (volumePath)).GetPath(), nullptr, &diskSpace))
                     25:                {
                     26:                        VolumeSizeTextCtrl->Disable();
                     27:                        VolumeSizeTextCtrl->SetValue (L"");
                     28:                }
                     29: 
                     30:                FreeSpaceStaticText->SetFont (Gui->GetDefaultBoldFont (this));
                     31: 
                     32: #ifdef TC_WINDOWS
                     33:                wxString drive = wxFileName (wstring (volumePath)).GetVolume();
                     34:                if (!drive.empty())
                     35:                {
                     36:                        FreeSpaceStaticText->SetLabel (StringFormatter (_("Free space on drive {0}: is {1}."),
                     37:                                drive, Gui->SizeToString (diskSpace.GetValue())));
                     38:                }
                     39:                else
                     40: #endif
                     41:                {
                     42:                        FreeSpaceStaticText->SetLabel (StringFormatter (_("Free space available: {0}"),
                     43:                                Gui->SizeToString (diskSpace.GetValue())));
                     44:                }
                     45: 
                     46:                VolumeSizeTextCtrl->SetMinSize (wxSize (Gui->GetCharWidth (VolumeSizeTextCtrl) * 20, -1));
                     47: 
                     48:                wxTextValidator validator (wxFILTER_INCLUDE_CHAR_LIST);  // wxFILTER_NUMERIC does not exclude - . , etc.
                     49:                const wxChar *valArr[] = { L"0", L"1", L"2", L"3", L"4", L"5", L"6", L"7", L"8", L"9" };
                     50:                validator.SetIncludes (wxArrayString (array_capacity (valArr), (const wxChar **) &valArr));
                     51:                VolumeSizeTextCtrl->SetValidator (validator);
                     52:        }
                     53: 
                     54:        uint64 VolumeSizeWizardPage::GetVolumeSize () const
                     55:        {
                     56:                uint64 prefixMult = 1;
                     57:                if (VolumeSizePrefixChoice->GetSelection() != wxNOT_FOUND)
                     58:                        prefixMult = reinterpret_cast <int> (VolumeSizePrefixChoice->GetClientData (VolumeSizePrefixChoice->GetSelection()));
                     59:                
                     60:                uint64 val = StringConverter::ToUInt64 (wstring (VolumeSizeTextCtrl->GetValue()));
                     61:                if (val <= 0x7fffFFFFffffFFFFull / prefixMult)
                     62:                        return val * prefixMult;
                     63:                else
                     64:                        return 0;
                     65:        }
                     66: 
                     67:        bool VolumeSizeWizardPage::IsValid ()
                     68:        {
                     69:                if (!VolumeSizeTextCtrl->IsEmpty() && Validate())
                     70:                {
                     71:                        try
                     72:                        {
                     73:                                if (GetVolumeSize() > 0)
                     74:                                        return true;
                     75:                        }
                     76:                        catch (...) { }
                     77:                }
                     78:                return false;
                     79:        }
                     80: 
                     81:        void VolumeSizeWizardPage::SetVolumeSize (uint64 size)
                     82:        {
                     83:                if (size == 0)
                     84:                {
                     85:                        VolumeSizePrefixChoice->Select (Prefix::MB);
                     86:                        VolumeSizeTextCtrl->SetValue (L"");
                     87:                        return;
                     88:                }
                     89:                
                     90:                if (size % (1024 * 1024 * 1024) == 0)
                     91:                {
                     92:                        size /= 1024 * 1024 * 1024;
                     93:                        VolumeSizePrefixChoice->Select (Prefix::GB);
                     94:                }
                     95:                else if (size % (1024 * 1024) == 0)
                     96:                {
                     97:                        size /= 1024 * 1024;
                     98:                        VolumeSizePrefixChoice->Select (Prefix::MB);
                     99:                }
                    100:                else
                    101:                {
                    102:                        size /= 1024;
                    103:                        VolumeSizePrefixChoice->Select (Prefix::KB);
                    104:                }
                    105: 
                    106:                VolumeSizeTextCtrl->SetValue (StringConverter::FromNumber (size));
                    107:        }
                    108: }

unix.superglobalmegacorp.com

This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.