From c6825a96c74bb6222aaa7e82c9950290f5e7471b Mon Sep 17 00:00:00 2001 From: AnotherTest Date: Sun, 3 May 2020 09:00:09 +0430 Subject: [PATCH] AK+FileManager: Move out human_readable_size to AK::NumberFormat --- AK/NumberFormat.h | 53 ++++++++++++++++++++++ Applications/FileManager/DirectoryView.cpp | 23 ++-------- 2 files changed, 56 insertions(+), 20 deletions(-) create mode 100644 AK/NumberFormat.h diff --git a/AK/NumberFormat.h b/AK/NumberFormat.h new file mode 100644 index 0000000000..d7b1c54cb3 --- /dev/null +++ b/AK/NumberFormat.h @@ -0,0 +1,53 @@ +/* + * Copyright (c) 2020, The SerenityOS developers. + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions are met: + * + * 1. Redistributions of source code must retain the above copyright notice, this + * list of conditions and the following disclaimer. + * + * 2. Redistributions in binary form must reproduce the above copyright notice, + * this list of conditions and the following disclaimer in the documentation + * and/or other materials provided with the distribution. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" + * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE + * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE + * DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE + * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL + * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR + * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER + * CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, + * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE + * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + */ + +#pragma once + +#include +#include + +namespace AK { + +static String number_string_with_one_decimal(float number, const char* suffix) +{ + float decimals = number - (int)number; + return String::format("%d.%d %s", (int)number, (int)(decimals * 10), suffix); +} + +static String human_readable_size(size_t size) +{ + if (size < 1 * KB) + return String::format("%zu bytes", size); + if (size < 1 * MB) + return number_string_with_one_decimal((float)size / (float)KB, "KB"); + if (size < 1 * GB) + return number_string_with_one_decimal((float)size / (float)MB, "MB"); + return number_string_with_one_decimal((float)size / (float)GB, "GB"); +} + +} + +using namespace AK; diff --git a/Applications/FileManager/DirectoryView.cpp b/Applications/FileManager/DirectoryView.cpp index 247554bdd8..cb7d2536b0 100644 --- a/Applications/FileManager/DirectoryView.cpp +++ b/Applications/FileManager/DirectoryView.cpp @@ -26,6 +26,7 @@ #include "DirectoryView.h" #include +#include #include #include #include @@ -33,24 +34,6 @@ #include #include -// FIXME: Remove this hackery once printf() supports floats. -static String number_string_with_one_decimal(float number, const char* suffix) -{ - float decimals = number - (int)number; - return String::format("%d.%d %s", (int)number, (int)(decimals * 10), suffix); -} - -static String human_readable_size(size_t size) -{ - if (size < 1 * KB) - return String::format("%zu bytes", size); - if (size < 1 * MB) - return number_string_with_one_decimal((float)size / (float)KB, "KB"); - if (size < 1 * GB) - return number_string_with_one_decimal((float)size / (float)MB, "MB"); - return number_string_with_one_decimal((float)size / (float)GB, "GB"); -} - void DirectoryView::handle_activation(const GUI::ModelIndex& index) { if (!index.is_valid()) @@ -98,9 +81,9 @@ DirectoryView::DirectoryView() open(m_path_history.at(m_path_history_position)); else quit = true; - + if (on_error) - on_error(error, error_string, quit); + on_error(error, error_string, quit); }; m_model->on_complete = [this] {