Welcome to mirror list, hosted at ThFree Co, Russian Federation.

git.blender.org/blender.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorFabian Schempp <fabianschempp@googlemail.com>2021-06-25 08:57:24 +0300
committerFabian Schempp <fabianschempp@googlemail.com>2021-06-25 08:57:24 +0300
commitae085e301c2aac0d6956609bfe93a90a19f0e235 (patch)
tree38b86749807915a6b6d46504a2acb90e41a4a77a /source/blender/blenlib
parent841df831e89dfc4011c323203c2efb8265dc1878 (diff)
Spreadsheet: Dataset region for spreadsheet editor
This patch adds a left aligned sidebar to the spreadsheet editor. This Sidebar can be used to navigate the geometry component types and attribute domains. It also provides a quick overview of domain sizes. It replaces the two dropdowns in the regions header. Next step will be to add the domain cycling shortcut using the CTRL + mouse wheel. Reviewer: Dalai Felinto (dfelinto), Julian Eisel (Severin), Hans Goudey (HooglyBoogly). Differential Revision: https://developer.blender.org/D11046
Diffstat (limited to 'source/blender/blenlib')
-rw-r--r--source/blender/blenlib/BLI_string.h2
-rw-r--r--source/blender/blenlib/intern/string.c38
-rw-r--r--source/blender/blenlib/tests/BLI_string_test.cc95
3 files changed, 134 insertions, 1 deletions
diff --git a/source/blender/blenlib/BLI_string.h b/source/blender/blenlib/BLI_string.h
index 5a80680c350..f4a417dbe65 100644
--- a/source/blender/blenlib/BLI_string.h
+++ b/source/blender/blenlib/BLI_string.h
@@ -100,7 +100,7 @@ size_t BLI_str_format_int_grouped(char dst[16], int num) ATTR_NONNULL();
size_t BLI_str_format_uint64_grouped(char dst[16], uint64_t num) ATTR_NONNULL();
void BLI_str_format_byte_unit(char dst[15], long long int bytes, const bool base_10)
ATTR_NONNULL();
-
+void BLI_str_format_attribute_domain_size(char dst[4], int number_to_format) ATTR_NONNULL();
int BLI_strcaseeq(const char *a, const char *b) ATTR_WARN_UNUSED_RESULT ATTR_NONNULL();
char *BLI_strcasestr(const char *s, const char *find) ATTR_WARN_UNUSED_RESULT ATTR_NONNULL();
char *BLI_strncasestr(const char *s, const char *find, size_t len) ATTR_WARN_UNUSED_RESULT
diff --git a/source/blender/blenlib/intern/string.c b/source/blender/blenlib/intern/string.c
index 3d40c6ef146..cadee2bfe12 100644
--- a/source/blender/blenlib/intern/string.c
+++ b/source/blender/blenlib/intern/string.c
@@ -1230,6 +1230,44 @@ void BLI_str_format_byte_unit(char dst[15], long long int bytes, const bool base
}
/**
+ * Format a attribute domain to a up to 6 places (plus '\0' terminator) string using long number names abbreviations.
+ * This function is designed to produce a compact representation of large numbers.
+ * 1 -> 1
+ * 15 -> 15
+ * 155 -> 155
+ * 1555 -> 1.6K
+ * 15555 -> 15.6K
+ * 155555 -> 156K
+ * 1555555 -> 1.6M
+ * 15555555 -> 15.6M
+ * 155555555 -> 156M
+ * 1000000000 -> 1B
+ * ...
+ * Dimension of 7 is the maximum length of the resulting string
+ * A combination with 7 places would be -15.5K\0
+ */
+void BLI_str_format_attribute_domain_size(char dst[7], int number_to_format)
+{
+ float number_to_format_converted = number_to_format;
+ int order = 0;
+ const float base = 1000;
+ const char *units[] = {"", "K", "M", "B"};
+ const int tot_units = ARRAY_SIZE(units);
+
+ while ((fabsf(number_to_format_converted) >= base) && ((order + 1) < tot_units)) {
+ number_to_format_converted /= base;
+ order++;
+ }
+
+ const size_t dst_len = 7;
+ int decimals = 0;
+ if ((order > 0) && fabsf(number_to_format_converted) < 100.0f) {
+ decimals = 1;
+ }
+ BLI_snprintf(dst, dst_len, "%.*f%s", decimals, number_to_format_converted, units[order]);
+}
+
+/**
* Find the ranges needed to split \a str into its individual words.
*
* \param str: The string to search for words.
diff --git a/source/blender/blenlib/tests/BLI_string_test.cc b/source/blender/blenlib/tests/BLI_string_test.cc
index 0b68ee8b93c..ccd2d01be98 100644
--- a/source/blender/blenlib/tests/BLI_string_test.cc
+++ b/source/blender/blenlib/tests/BLI_string_test.cc
@@ -420,6 +420,101 @@ TEST(string, StrFormatByteUnits)
EXPECT_STREQ("-8191.8472 PiB", size_str);
}
+/* BLI_str_format_attribute_domain_size */
+TEST(string, StrFormatAttributeDomainSize)
+{
+ char size_str[7];
+ int size;
+
+ BLI_str_format_attribute_domain_size(size_str, size = 0);
+ EXPECT_STREQ("0", size_str);
+ BLI_str_format_attribute_domain_size(size_str, size = 1);
+ EXPECT_STREQ("1", size_str);
+ BLI_str_format_attribute_domain_size(size_str, size = 10);
+ EXPECT_STREQ("10", size_str);
+ BLI_str_format_attribute_domain_size(size_str, size = 15);
+ EXPECT_STREQ("15", size_str);
+ BLI_str_format_attribute_domain_size(size_str, size = 100);
+ EXPECT_STREQ("100", size_str);
+ BLI_str_format_attribute_domain_size(size_str, size = 155);
+ EXPECT_STREQ("155", size_str);
+ BLI_str_format_attribute_domain_size(size_str, size = 1000);
+ EXPECT_STREQ("1.0K", size_str);
+ BLI_str_format_attribute_domain_size(size_str, size = 1555);
+ EXPECT_STREQ("1.6K", size_str);
+ BLI_str_format_attribute_domain_size(size_str, size = 10000);
+ EXPECT_STREQ("10.0K", size_str);
+ BLI_str_format_attribute_domain_size(size_str, size = 15555);
+ EXPECT_STREQ("15.6K", size_str);
+ BLI_str_format_attribute_domain_size(size_str, size = 100000);
+ EXPECT_STREQ("100K", size_str);
+ BLI_str_format_attribute_domain_size(size_str, size = 100000);
+ EXPECT_STREQ("100K", size_str);
+ BLI_str_format_attribute_domain_size(size_str, size = 155555);
+ EXPECT_STREQ("156K", size_str);
+ BLI_str_format_attribute_domain_size(size_str, size = 1000000);
+ EXPECT_STREQ("1.0M", size_str);
+ BLI_str_format_attribute_domain_size(size_str, size = 1555555);
+ EXPECT_STREQ("1.6M", size_str);
+ BLI_str_format_attribute_domain_size(size_str, size = 10000000);
+ EXPECT_STREQ("10.0M", size_str);
+ BLI_str_format_attribute_domain_size(size_str, size = 15555555);
+ EXPECT_STREQ("15.6M", size_str);
+ BLI_str_format_attribute_domain_size(size_str, size = 100000000);
+ EXPECT_STREQ("100M", size_str);
+ BLI_str_format_attribute_domain_size(size_str, size = 155555555);
+ EXPECT_STREQ("156M", size_str);
+ BLI_str_format_attribute_domain_size(size_str, size = 1000000000);
+ EXPECT_STREQ("1.0B", size_str);
+
+ /* Largest possible value. */
+ BLI_str_format_attribute_domain_size(size_str, size = INT32_MAX);
+ EXPECT_STREQ("2.1B", size_str);
+
+ BLI_str_format_attribute_domain_size(size_str, size = -0);
+ EXPECT_STREQ("0", size_str);
+ BLI_str_format_attribute_domain_size(size_str, size = -1);
+ EXPECT_STREQ("-1", size_str);
+ BLI_str_format_attribute_domain_size(size_str, size = -10);
+ EXPECT_STREQ("-10", size_str);
+ BLI_str_format_attribute_domain_size(size_str, size = -15);
+ EXPECT_STREQ("-15", size_str);
+ BLI_str_format_attribute_domain_size(size_str, size = -100);
+ EXPECT_STREQ("-100", size_str);
+ BLI_str_format_attribute_domain_size(size_str, size = -155);
+ EXPECT_STREQ("-155", size_str);
+ BLI_str_format_attribute_domain_size(size_str, size = -1000);
+ EXPECT_STREQ("-1.0K", size_str);
+ BLI_str_format_attribute_domain_size(size_str, size = -1555);
+ EXPECT_STREQ("-1.6K", size_str);
+ BLI_str_format_attribute_domain_size(size_str, size = -10000);
+ EXPECT_STREQ("-10.0K", size_str);
+ BLI_str_format_attribute_domain_size(size_str, size = -15555);
+ EXPECT_STREQ("-15.6K", size_str);
+ BLI_str_format_attribute_domain_size(size_str, size = -100000);
+ EXPECT_STREQ("-100K", size_str);
+ BLI_str_format_attribute_domain_size(size_str, size = -155555);
+ EXPECT_STREQ("-156K", size_str);
+ BLI_str_format_attribute_domain_size(size_str, size = -1000000);
+ EXPECT_STREQ("-1.0M", size_str);
+ BLI_str_format_attribute_domain_size(size_str, size = -1555555);
+ EXPECT_STREQ("-1.6M", size_str);
+ BLI_str_format_attribute_domain_size(size_str, size = -10000000);
+ EXPECT_STREQ("-10.0M", size_str);
+ BLI_str_format_attribute_domain_size(size_str, size = -15555555);
+ EXPECT_STREQ("-15.6M", size_str);
+ BLI_str_format_attribute_domain_size(size_str, size = -100000000);
+ EXPECT_STREQ("-100M", size_str);
+ BLI_str_format_attribute_domain_size(size_str, size = -155555555);
+ EXPECT_STREQ("-156M", size_str);
+ BLI_str_format_attribute_domain_size(size_str, size = -1000000000);
+ EXPECT_STREQ("-1.0B", size_str);
+
+ /* Smallest possible value. */
+ BLI_str_format_attribute_domain_size(size_str, size = -INT32_MAX);
+ EXPECT_STREQ("-2.1B", size_str);
+}
+
struct WordInfo {
WordInfo() = default;
WordInfo(int start, int end) : start(start), end(end)