FormatFileSize и параметр Width

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

FormatFileSize и параметр Width

Post by Ariman »

В документации к функции FormatFileSize сказано
Ширина поля (примером может служить ширина колонки в панели). При значении равном -1 подразумевается - "сколько получится".
Но значение -1 не работает как заявлено. Форматируется в 1 символ как с любым другим числом. В сорцах какой-то специальной обработки значения -1 я тоже не нашел (хотя может и не там искал). Забыли реализовать или баг?
Shmuel
Posts: 6815
Joined: Thu 23 Mar, 2006 21:36
Location: Israel
Has thanked: 41 times
Been thanked: 526 times

FormatFileSize и параметр Width

Post by Shmuel »

Ariman wrote: Но значение -1 не работает как заявлено.
Не работает, начиная с билда 4834.
Ariman
Posts: 1351
Joined: Fri 30 Nov, 2007 15:32
Location: Крым
Has thanked: 15 times
Been thanked: 50 times
Contact:

FormatFileSize и параметр Width

Post by Ariman »

Закинуть на мантис?
Shmuel
Posts: 6815
Joined: Thu 23 Mar, 2006 21:36
Location: Israel
Has thanked: 41 times
Been thanked: 526 times

FormatFileSize и параметр Width

Post by Shmuel »

Почему бы и нет.
User avatar
DrKnS
Posts: 6114
Joined: Thu 04 Aug, 2005 06:44
Location: Kyiv
Has thanked: 12 times
Been thanked: 426 times

FormatFileSize и параметр Width

Post by DrKnS »

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

В документации написано что-то странное:
При значении равном -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: 6815
Joined: Thu 23 Mar, 2006 21:36
Location: Israel
Has thanked: 41 times
Been thanked: 526 times

FormatFileSize и параметр Width

Post by Shmuel »

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

Как должно себя вести - можно дискутировать. В любом случае желательно, чтобы описание было более адекватным.
User avatar
DrKnS
Posts: 6114
Joined: Thu 04 Aug, 2005 06:44
Location: Kyiv
Has thanked: 12 times
Been thanked: 426 times

FormatFileSize и параметр Width

Post by DrKnS »

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

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

Возражения?
Shmuel
Posts: 6815
Joined: Thu 23 Mar, 2006 21:36
Location: Israel
Has thanked: 41 times
Been thanked: 526 times

FormatFileSize и параметр Width

Post by Shmuel »

Возражение может быть такое: API то у нас заморожено и меняться не должно. Те плагины, которые рассчитывали на "сколько получится" при -1, начнут показывать неправильный размер.
2useven10
Posts: 5192
Joined: Mon 07 Sep, 2009 10:40
Has thanked: 18 times
Been thanked: 309 times

FormatFileSize и параметр Width

Post by 2useven10 »

-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: 6114
Joined: Thu 04 Aug, 2005 06:44
Location: Kyiv
Has thanked: 12 times
Been thanked: 426 times

FormatFileSize и параметр Width

Post by DrKnS »

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

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: 5192
Joined: Mon 07 Sep, 2009 10:40
Has thanked: 18 times
Been thanked: 309 times

FormatFileSize и параметр Width

Post by 2useven10 »

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: 1351
Joined: Fri 30 Nov, 2007 15:32
Location: Крым
Has thanked: 15 times
Been thanked: 50 times
Contact:

FormatFileSize и параметр Width

Post by Ariman »

У меня, конечно, права голоса нет, но на правах автора темы вставлю 5 копеек :)
DrKnS wrote:0: сколько получится.
Поддерживаю такой вариант, будет более логичным.
DrKnS wrote:Не лучше ли в таком случае возвращать пустую строку как сигнал "не влезло, увеличь ширину", чем огрызок, дающий ложное представление о результате?
По доке функция возвращает необходимую ширину буфера. По идее, мы можем проверить влезло или нет сравнив это значение с заказанной шириной.
2useven10 wrote:Imho, просто резать плохо, можно, например так:
Можно флажочек новый добавить, просто обрезать или с многоточием.
User avatar
HaRT
Moderator
Posts: 10806
Joined: Tue 30 Aug, 2005 17:21
Has thanked: 220 times
Been thanked: 357 times

FormatFileSize и параметр Width

Post by HaRT »

Ariman wrote: флажочек новый добавить, просто обрезать или с многоточием
2useven10, тогда на положение многоточия должно влиять заказанное выравнивание.
Фар есть инструмент, а не нянька. © 2009 DrKnS
2useven10
Posts: 5192
Joined: Mon 07 Sep, 2009 10:40
Has thanked: 18 times
Been thanked: 309 times

FormatFileSize и параметр Width

Post by 2useven10 »

HaRT wrote: тогда на положение многоточия должно влиять заказанное выравнивание.
Это отдельный вопрос/флаг: какую часть строки обрезать при выравнивании вправо (сейчас обрезается хвост).
И может быть имеет смысл добавить ещё один режим: не обрезать вообще...
User avatar
HaRT
Moderator
Posts: 10806
Joined: Tue 30 Aug, 2005 17:21
Has thanked: 220 times
Been thanked: 357 times

FormatFileSize и параметр Width

Post by HaRT »

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

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

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