FormatFileSize и параметр Width

Место, где разработчики плагинов могут поделиться своим опытом.
Ariman
Posts: 1153
Joined: Fri 30 Nov, 2007 15:32
Location: Крым
Has thanked: 10 times
Been thanked: 23 times
Contact:

FormatFileSize и параметр Width

Post by Ariman » Tue 16 May, 2017 14:10

В документации к функции FormatFileSize сказано
Ширина поля (примером может служить ширина колонки в панели). При значении равном -1 подразумевается - "сколько получится".
Но значение -1 не работает как заявлено. Форматируется в 1 символ как с любым другим числом. В сорцах какой-то специальной обработки значения -1 я тоже не нашел (хотя может и не там искал). Забыли реализовать или баг?

Shmuel
Posts: 5161
Joined: Thu 23 Mar, 2006 21:36
Location: Israel
Has thanked: 15 times
Been thanked: 145 times

FormatFileSize и параметр Width

Post by Shmuel » Tue 16 May, 2017 14:50

Ariman wrote: Но значение -1 не работает как заявлено.
Не работает, начиная с билда 4834.

Ariman
Posts: 1153
Joined: Fri 30 Nov, 2007 15:32
Location: Крым
Has thanked: 10 times
Been thanked: 23 times
Contact:

FormatFileSize и параметр Width

Post by Ariman » Tue 16 May, 2017 15:42

Закинуть на мантис?

Shmuel
Posts: 5161
Joined: Thu 23 Mar, 2006 21:36
Location: Israel
Has thanked: 15 times
Been thanked: 145 times

FormatFileSize и параметр Width

Post by Shmuel » Tue 16 May, 2017 15:52

Почему бы и нет.

User avatar
DrKnS
Posts: 4581
Joined: Thu 04 Aug, 2005 06:44
Location: Kyiv
Has thanked: 4 times
Been thanked: 115 times
Contact:

FormatFileSize и параметр Width

Post by DrKnS » Tue 16 May, 2017 20:13

Я поправлю, только расскажите, как это чудо должно работать.

В документации написано что-то странное:
При значении равном -1 подразумевается - "сколько получится". Отрицательное значение ширины позволяет выравнивать слева.
И функция в 4833 ведет себя не по документации.

Я вызвал в цикле от -15 до 15, результаты:

Code: Select all

-15: "12 345         "
-14: "12 345        "
-13: "12 345       "
-12: "12 345      "
-11: "12 345     "
-10: "12 345    "
 -9: "12 345   "
 -8: "12 345  "
 -7: "12 345 "
 -6: "12 345"
 -5: "12 345"
 -4: "12 345"
 -3: "12 345"
 -2: "12 345"
 -1: "12 345"
  0: ""
  1: "1"
  2: "12"
  3: "12 "
  4: "12 3"
  5: " 12 К"
  6: "12 345"
  7: " 12 345"
  8: "  12 345"
  9: "   12 345"
 10: "    12 345"
 11: "     12 345"
 12: "      12 345"
 13: "       12 345"
 14: "        12 345"
 15: "         12 345"
Т. е. положительная ширина - это абсолютная ширина, не больше и не меньше.
А отрицательная - внезапно, минимальная.

Shmuel
Posts: 5161
Joined: Thu 23 Mar, 2006 21:36
Location: Israel
Has thanked: 15 times
Been thanked: 145 times

FormatFileSize и параметр Width

Post by Shmuel » Tue 16 May, 2017 20:57

DrKnS wrote: И функция в 4833 ведет себя не по документации.
Да, документация не описывает точно реальное поведение в 4833.
Но: в случае Width==-1 билд 4833 ведёт себя согласно документации, а последующие - нет. О случае Width==-1 и писал автор темы.

Как должно себя вести - можно дискутировать. В любом случае желательно, чтобы описание было более адекватным.

User avatar
DrKnS
Posts: 4581
Joined: Thu 04 Aug, 2005 06:44
Location: Kyiv
Has thanked: 4 times
Been thanked: 115 times
Contact:

FormatFileSize и параметр Width

Post by DrKnS » Tue 16 May, 2017 21:03

Предлагаю так:

> 0: абсолютная ширина, выравнивание вправо
< 0: абсолютная ширина, выравнивание влево
0: сколько получится.

Возражения?

Shmuel
Posts: 5161
Joined: Thu 23 Mar, 2006 21:36
Location: Israel
Has thanked: 15 times
Been thanked: 145 times

FormatFileSize и параметр Width

Post by Shmuel » Tue 16 May, 2017 21:09

Возражение может быть такое: API то у нас заморожено и меняться не должно. Те плагины, которые рассчитывали на "сколько получится" при -1, начнут показывать неправильный размер.

2useven10
Posts: 2983
Joined: Mon 07 Sep, 2009 10:40
Has thanked: 2 times
Been thanked: 80 times

FormatFileSize и параметр Width

Post by 2useven10 » Tue 16 May, 2017 23:13

-1: абсолютная ширина 1, выравнивание влево == +1: абсолютная ширина 1, выравнивание вправо ??
Поэтому можно -1 отдать (оставить) на особый случай. А -2 и дальше переделать.
Хотя 0, конечно, более логичный 'особый случай'.
Last edited by 2useven10 on Tue 16 May, 2017 23:27, edited 1 time in total.

User avatar
DrKnS
Posts: 4581
Joined: Thu 04 Aug, 2005 06:44
Location: Kyiv
Has thanked: 4 times
Been thanked: 115 times
Contact:

FormatFileSize и параметр Width

Post by DrKnS » Wed 17 May, 2017 01:08

Господа, ещё такой философский вопрос.
Допустимо ли тупо резать результат по правому краю, если он не лезет в заказанном формате в заказанный размер?
См. помеченные "???" строки в колонках ниже.

Code: Select all

"123456789 B  "                   "117,74 M     "
"123456789 B "                    "117,74 M    "
"123456789 B"                     "117,74 M   "
"120563 K  "                      "117,74 M  "
"120563 K "                       "117,74 M "
"120563 K"                        "117,74 M"
"118 M  "                         "117,74 " ???
"118 M "                          "117,74" ???
"118 M"                           "117,7" ???
"0 G "                            "117," ???
"0 G"                             "117" ???
"12" ???                          "11" ???
"1" ???                           "1" ???
Не лучше ли в таком случае возвращать пустую строку как сигнал "не влезло, увеличь ширину", чем огрызок, дающий ложное представление о результате?

2useven10
Posts: 2983
Joined: Mon 07 Sep, 2009 10:40
Has thanked: 2 times
Been thanked: 80 times

FormatFileSize и параметр Width

Post by 2useven10 » Wed 17 May, 2017 06:04

Imho, просто резать плохо, можно, например так:

Code: Select all

"118 M  "                         "117,74…" ???
"118 M "                          "117,7…" ???
"118 M"                           "117,…" ???
"0 G "                            "117…" ???
"0 G"                             "11…" ???
"1…" ???                          "1…" ???
"…" ???                           "…" ???

Ariman
Posts: 1153
Joined: Fri 30 Nov, 2007 15:32
Location: Крым
Has thanked: 10 times
Been thanked: 23 times
Contact:

FormatFileSize и параметр Width

Post by Ariman » Wed 17 May, 2017 10:17

У меня, конечно, права голоса нет, но на правах автора темы вставлю 5 копеек :)
DrKnS wrote:0: сколько получится.
Поддерживаю такой вариант, будет более логичным.
DrKnS wrote:Не лучше ли в таком случае возвращать пустую строку как сигнал "не влезло, увеличь ширину", чем огрызок, дающий ложное представление о результате?
По доке функция возвращает необходимую ширину буфера. По идее, мы можем проверить влезло или нет сравнив это значение с заказанной шириной.
2useven10 wrote:Imho, просто резать плохо, можно, например так:
Можно флажочек новый добавить, просто обрезать или с многоточием.

User avatar
HaRT
Moderator
Posts: 8048
Joined: Tue 30 Aug, 2005 17:21
Location: Санкт-Петербург
Has thanked: 67 times
Been thanked: 100 times

FormatFileSize и параметр Width

Post by HaRT » Wed 17 May, 2017 12:33

Ariman wrote: флажочек новый добавить, просто обрезать или с многоточием
2useven10, тогда на положение многоточия должно влиять заказанное выравнивание.
Фар есть инструмент, а не нянька. © 2009 DrKnS

2useven10
Posts: 2983
Joined: Mon 07 Sep, 2009 10:40
Has thanked: 2 times
Been thanked: 80 times

FormatFileSize и параметр Width

Post by 2useven10 » Wed 17 May, 2017 13:44

HaRT wrote: тогда на положение многоточия должно влиять заказанное выравнивание.
Это отдельный вопрос/флаг: какую часть строки обрезать при выравнивании вправо (сейчас обрезается хвост).
И может быть имеет смысл добавить ещё один режим: не обрезать вообще...

User avatar
HaRT
Moderator
Posts: 8048
Joined: Tue 30 Aug, 2005 17:21
Location: Санкт-Петербург
Has thanked: 67 times
Been thanked: 100 times

FormatFileSize и параметр Width

Post by HaRT » Wed 17 May, 2017 13:49

2useven10 wrote: Это отдельный вопрос/флаг: какую часть строки обрезать при выравнивании вправо
Вот с этим-то я как раз и не согласен. При выравнивании влево отрезАть хвост, при выравнивании вправо — голову.

Но для строк ещё осмысленно иногда усекать середину, и вот это существующим указанием выравнивания уже не регулируется. Поэтому, если добавлять параметры, то, возможно, стоило бы задавать выравнивание и способ усечения явно и по отдельности.
Фар есть инструмент, а не нянька. © 2009 DrKnS

User avatar
DrKnS
Posts: 4581
Joined: Thu 04 Aug, 2005 06:44
Location: Kyiv
Has thanked: 4 times
Been thanked: 115 times
Contact:

FormatFileSize и параметр Width

Post by DrKnS » Wed 17 May, 2017 14:20

2useven10 wrote: И может быть имеет смысл добавить ещё один режим: не обрезать вообще
Так 0 же?
HaRT wrote: возможно, стоило бы задавать выравнивание и способ усечения
В API это всё уже есть - если надо, можно заказать необрезанный результат и обрезать потом как угодно.
Речь, о том, как вернуть наименее некорректный результат, если корректный невозможен.

Post Reply

Return to “Разработка плагинов”