Необычные функции

Здесь можно оставить пожелание относительно функций, которых в программе нет, но которые вам хотелось бы в ней видеть.

Модератор: motyara

Аватара пользователя
Qwertiy
Охотник за багами
Сообщения: 1199
Зарегистрирован: Вс янв 31, 2010 12:12 am

Сообщение Qwertiy »

Max Diesel писал(а):
Qwertiy писал(а):Так что насчёт обработки Ctrl (или Alt - на ваше усмотрение) при выборе диска?
На мой взгляд функция недостаточно актуальная чтобы цеплять ее на такой "стратегический запас" как кнопки Alt, Ctrl или Shift. Подозреваю что пользователей у этой функции будет <=1, а это маловато.
А как насчёт самой функции?

Обработку Ctrl или Alt можно сделать опциональной и загнать в расширенные настройки. Только не надо делать один флажок типа "Пытаться сохранить путь при смене диска".
Можно сделать по тому же принципу, но 4 флажка:
(*) Пытаться сохранить путь при смене диска, если нажаты:
(*) Alt (*) Shift (*) Ctrl
В этом случае пользователь сможет настроить любой удобный ему вариант, а сочетаний клавиш уже не 3, а 8. По-моему, это достаточно много.
Аватара пользователя
Max Diesel
Автор программы
Сообщения: 3431
Зарегистрирован: Пт окт 12, 2007 3:26 pm
Контактная информация:

Сообщение Max Diesel »

Да уж, в настройках как раз не хватало четырех флагов для функции, которой практически никто пользоваться не будет... тут вообще-то уже гораздо более актуальные флаги идут вне настроек, то есть в виде виртуальных ключей...
Аватара пользователя
Qwertiy
Охотник за багами
Сообщения: 1199
Зарегистрирован: Вс янв 31, 2010 12:12 am

Сообщение Qwertiy »

Max Diesel писал(а):Да уж, в настройках как раз не хватало четырех флагов для функции, которой практически никто пользоваться не будет... тут вообще-то уже гораздо более актуальные флаги идут вне настроек, то есть в виде виртуальных ключей...
Простое решение - флаги пока не делать, а ключи в ini-файл добавить.

PS: я за то, чтобы все настройки можно было делать в окне настроек. Жаль, что это пока не так. Надеюсь, что со временем Вы всё добавите...
Аватара пользователя
Max Diesel
Автор программы
Сообщения: 3431
Зарегистрирован: Пт окт 12, 2007 3:26 pm
Контактная информация:

Сообщение Max Diesel »

Если добавить все-все опции в окно настроек, то оно будет загружаться со сплэш-скрином и прогрессбаром загрузки... а если добавлять в программу все малоактуальные функции (вроде предложенной), то еще и сама программа стартовать будет в разы дольше... вряд ли большинство пользователей будут этому рады. Похоже Вам придется придумать какой-то другой способ взаимодействия с "экзотической системой распределения файлов". У меня на данный момент 5-ть жестких дисков (15-ть логических) и места как всегда не хватает, но "экзотическую систему" я не применяю, при большой необходимости на мой взгляд лучше уж объединять диски нежели разбрасывать по ним фрагменты каталогов.
Аватара пользователя
Qwertiy
Охотник за багами
Сообщения: 1199
Зарегистрирован: Вс янв 31, 2010 12:12 am

Сообщение Qwertiy »

Max Diesel писал(а):Если добавить все-все опции в окно настроек, то оно будет загружаться со сплэш-скрином и прогрессбаром загрузки... а если добавлять в программу все малоактуальные функции (вроде предложенной), то еще и сама программа стартовать будет в разы дольше... вряд ли большинство пользователей будут этому рады. Похоже Вам придется придумать какой-то другой способ взаимодействия с "экзотической системой распределения файлов". У меня на данный момент 5-ть жестких дисков (15-ть логических) и места как всегда не хватает, но "экзотическую систему" я не применяю, при большой необходимости на мой взгляд лучше уж объединять диски нежели разбрасывать по ним фрагменты каталогов.
Добавить все опции в окно настроек всё равно придётся. В этом и смысл опций, иначе их просто никто не найдет. Чтобы оно работало быстро, достаточно загружать страницу с настройками в тот момент, когда она выбирается в списке, а поиск производить по надписям (не искать в значениях параметров; наверное, это и сейчас так).

Предложенная мною функция на время загрузки программы влиять не должна. Учитывая, что в UC уже используются потоки, ini-файл можно загружать параллельно с работой программы, переходя от более значимых ключей к менее значимым. В случае, если какой-то ключ вдруг срочно понадобится, его можно загрузить мгновенно вне очереди (или просто использовать дефаултное значение). В любом случае, через 1-2 минуты всё уже загрузится полностью. Учитывая возможность фонового автозапуска UC при старте Windows, думаю, что никто из пользователей против не будет.

А насчёт малоактуальных функций: обработку команд "cd/" и "cd /" Вы всё-таки сделали, хотя они вообще не представлены в нормальной командной строке. То, что предлагаю я, кажется более полезной функцией (учитывая, что есть нормальная команда "cd \"), а при выполнении требует столько же времени, причём только тогда, когда нажимается кнопка выбора диска.
Аватара пользователя
Max Diesel
Автор программы
Сообщения: 3431
Зарегистрирован: Пт окт 12, 2007 3:26 pm
Контактная информация:

Сообщение Max Diesel »

Qwertiy писал(а):Добавить все опции в окно настроек всё равно придётся. В этом и смысл опций, иначе их просто никто не найдет. Чтобы оно работало быстро, достаточно загружать страницу с настройками в тот момент, когда она выбирается в списке, а поиск производить по надписям (не искать в значениях параметров; наверное, это и сейчас так).
Под словом "загружаться" в данном случае я имел в виду не наполнение контролов переменными (оно-то проходит быстро), а именно загрузку, то есть создание окна в оперативной памяти, создание контролов.
Qwertiy писал(а):Предложенная мною функция на время загрузки программы влиять не должна. Учитывая, что в UC уже используются потоки, ini-файл можно загружать параллельно с работой программы, переходя от более значимых ключей к менее значимым. В случае, если какой-то ключ вдруг срочно понадобится, его можно загрузить мгновенно вне очереди (или просто использовать дефаултное значение). В любом случае, через 1-2 минуты всё уже загрузится полностью. Учитывая возможность фонового автозапуска UC при старте Windows, думаю, что никто из пользователей против не будет.
Любая, даже самая маленькая функция, влияет на скорость загрузки программы... отличие лишь в том что маленькие функции влияют в меньшей мере (и влияние каждой конкретной функции "на глаз" не заметно). Загрузка ini-файлов по этапам - это что-то новенькое... хотелось бы привести какой-нибудь образный пример, который бы в аналогии демонстрировал несуразность этого мероприятия, но что-то подходящих примеров даже найти не удается.
Qwertiy писал(а):А насчёт малоактуальных функций: обработку команд "cd/" и "cd /" Вы всё-таки сделали, хотя они вообще не представлены в нормальной командной строке. То, что предлагаю я, кажется более полезной функцией (учитывая, что есть нормальная команда "cd \"), а при выполнении требует столько же времени, причём только тогда, когда нажимается кнопка выбора диска.
Команда "cd" была добавлена лишь для функциональной схожести с TC в расчете на пользователей, которые привыкли к ее использованию.
Аватара пользователя
Qwertiy
Охотник за багами
Сообщения: 1199
Зарегистрирован: Вс янв 31, 2010 12:12 am

Сообщение Qwertiy »

Max Diesel писал(а):
Qwertiy писал(а):Добавить все опции в окно настроек всё равно придётся. В этом и смысл опций, иначе их просто никто не найдет. Чтобы оно работало быстро, достаточно загружать страницу с настройками в тот момент, когда она выбирается в списке, а поиск производить по надписям (не искать в значениях параметров; наверное, это и сейчас так).
Под словом "загружаться" в данном случае я имел в виду не наполнение контролов переменными (оно-то проходит быстро), а именно загрузку, то есть создание окна в оперативной памяти, создание контролов.
Это не принципиально. Я написал "достаточно загружать страницу с настройками в тот момент, когда она выбирается в списке", т.е. не надо создавать все контролы сразу при показе окна настроек. Когда потребовалась определённая страница :arrow: , тогда её и создаём. Чтобы не мучиться с поэлементной реализацией, можно для содержимого каждой страницы создать отдельный элемент управления (вместо существующего сейчас фрейма :arrow: ), причём с public-доступом ко всем компонентам, и назначить ему то же имя, которое сейчас обозначает фрейм. При такой реализации изменения в коде (кроме самого окна настроек) будут минимальными (а, в идеале, вообще должны отсутствовать).

:arrow: Под страницей я подразумеваю набор настроек, соответствующих одному элементу списка
:arrow: Насколько я представляю (судя по внешниму виду и исходя из простоты реализации) для групприровки настроек применяется некий фрейм, для которого при выборе страницы из списка устанавливается соответствующее значение свойства Visible.

PS: насчёт того что никто не станет искать есть ли нужная опция где-то в ini-файле, если её нет в окне настроек (а справки по UC нет вообще), я абсолютно уверен. В лучшем случае зададут вопрос на этом форуме, а в худшем решат, что её нет и выберут другой файл-менеджер.

PS: Вы видели окно Сервис -> Параметры в OpenOffice.org? Сколько там всяких настроек?
Последний раз редактировалось Qwertiy Вт фев 16, 2010 9:30 pm, всего редактировалось 1 раз.
Аватара пользователя
Qwertiy
Охотник за багами
Сообщения: 1199
Зарегистрирован: Вс янв 31, 2010 12:12 am

Сообщение Qwertiy »

Max Diesel писал(а):Любая, даже самая маленькая функция, влияет на скорость загрузки программы... отличие лишь в том что маленькие функции влияют в меньшей мере (и влияние каждой конкретной функции "на глаз" не заметно). Загрузка ini-файлов по этапам - это что-то новенькое... хотелось бы привести какой-нибудь образный пример, который бы в аналогии демонстрировал несуразность этого мероприятия, но что-то подходящих примеров даже найти не удается.
Не по этапам, а просто параллельным процессом. При хорошей реализации, это может быть полезным.

Но вообще-то, я действительно перемудрил. Загрузку ini-файла можно ускорить и без этого. Вы где-то писали, что используете ini-файл в UTF-8, т.к. стандартных функций для работы с ini-файлами в юникоде не существует. В этом и проблема. Каждый раз, когда вызывается API-функция :arrow: для получения из ini-файла некоторого параметра, она просматривает весь файл, чтобы найти там нужную строку. Вместо этого надо считать весь файл один раз как текстовый и разбросать его содержимое по карте (map в C++), словарю (Dictionary в среде .NET) или коллекции (Collection в VB). Думаю, что и в Делфи есть нечто подобное. Будет работать намного быстрее.

Показываю вариант её реализации, написаный на VB.NET:

Код: Выделить всё

Public Class Ini

Public Ini As New Collection

Public Shared Function GetFromFile(ByVal Filename As String) As Ini
  Try
    Dim IniFile As IO.StreamReader = New IO.StreamReader(Filename, True)
    Dim Str As String, Section As String, Item As String, Value As String, SepPos As Integer
    Dim Res As New Ini

    Str = "[]"
    Do
      If Str <> "" And Not Str.StartsWith(";") Then
        If Str.StartsWith("[") And Str.EndsWith("]") Then
          Section = Str.Substring(1, Str.Length - 2).Trim().ToLower()
          If Not Res.Ini.Contains(Section) Then Res.Ini.Add(New Collection, Section)
        Else
          SepPos = Str.IndexOf("="c)
          Item = Str.Substring(0, SepPos).Trim().ToLower()
          Value = Str.Substring(SepPos + 1).Trim()
          If Res.Ini(Section).Contains(Item) Then Res.Ini(Section).Remove(Item)
          Res.Ini(Section).Add(Value, Item)
        End If
      End If
      Try
        Str = IniFile.ReadLine().Trim()
      Catch
        Exit Do
      End Try
    Loop 'Until IniFile.EndOfStream()
    IniFile.Close()
    Return Res
  Catch
    Return Nothing
  End Try
End Function

Public Function FindValue(ByVal Section As String, ByVal Item As String, Optional ByVal [Default] As Object = Nothing) As Object
  Try
    Return Ini(Section.ToLower)(Item.ToLower)
  Catch
    Return [Default]
  End Try
End Function

End Class
Давно собираюсь переписать его, используя

Код: Выделить всё

Dim Ini As New Dictionary(Of String, Dictionary(Of String, String))
:arrow: Не знаю используется ли Вами именно API-функция, но думаю, что принцип тот же.
Аватара пользователя
Qwertiy
Охотник за багами
Сообщения: 1199
Зарегистрирован: Вс янв 31, 2010 12:12 am

Сообщение Qwertiy »

Max Diesel писал(а):
Qwertiy писал(а):А насчёт малоактуальных функций: обработку команд "cd/" и "cd /" Вы всё-таки сделали, хотя они вообще не представлены в нормальной командной строке. То, что предлагаю я, кажется более полезной функцией (учитывая, что есть нормальная команда "cd \"), а при выполнении требует столько же времени, причём только тогда, когда нажимается кнопка выбора диска.
Команда "cd" была добавлена лишь для функциональной схожести с TC в расчете на пользователей, которые привыкли к ее использованию.
Я говорил не о команде "cd" (необходимость её наличия не вызывает у меня никаких сомнений), а о дополнительной реализации "cd/" (https://forum.unrealcommander.net/viewto ... ?f=7&t=411). Там Вы сами писали:
Max Diesel писал(а):Вообще-то команда "cd /" для файловой системы Windows'а пишется "cd \", в таком виде она воспринимается программой.
Max Diesel писал(а):Вообще мне не жалко добавить обработку и такого слэша тоже, но дело в том, что выполнять проверки через множество if'ов очень нерационально и данный кусок кода мне весьма неприятен даже в том виде, в котором он находится сейчас... а ведь к "cd /" надо еще добавить и "cd/" тоже. Кстати весьма странное желание использовать такой способ перехода в корень - нажатие пяти кнопок вместо нажатия двух (это вероятно дело привычки, но я заканчивал университет по специальности "экономика" и мне способ кажется излишне неэкономичным... вероятно потому, что я по этой специальности не работал).
Но всё же добавили обработку этой команды...
Аватара пользователя
Max Diesel
Автор программы
Сообщения: 3431
Зарегистрирован: Пт окт 12, 2007 3:26 pm
Контактная информация:

Сообщение Max Diesel »

Qwertiy писал(а):Я написал "достаточно загружать страницу с настройками в тот момент, когда она выбирается в списке", т.е. не надо создавать все контролы сразу при показе окна настроек. Когда потребовалась определённая страница :arrow: , тогда её и создаём. Чтобы не мучиться с поэлементной реализацией, можно для содержимого каждой страницы создать отдельный элемент управления (вместо существующего сейчас фрейма :arrow: ), причём с public-доступом ко всем компонентам, и назначить ему то же имя, которое сейчас обозначает фрейм. При такой реализации изменения в коде (кроме самого окна настроек) будут минимальными (а, в идеале, вообще должны отсутствовать).
Вообще-то с контролами программа еще и работает, а не только их отображает. Предложенный вариант видится мне абсолютно нерациональным.
Qwertiy писал(а):PS: насчёт того что никто не станет искать есть ли нужная опция где-то в ini-файле, если её нет в окне настроек (а справки по UC нет вообще), я абсолютно уверен. В лучшем случае зададут вопрос на этом форуме, а в худшем решат, что её нет и выберут другой файл-менеджер.
Зная динамику вопросов в стиле "а можно ли как-то отключить панель инструментов?" (флаг включения/отключения которой чуть ли не на главной вкладке окна настроек) могу с уверенностью сказать что есть пользователи которые вообще в настройках поискать чего-либо не желают. Если кого-то неустраивает отсутствие в программе какой-то нерациональной/индивидуальной функции, то пожалуй я не буду против если эта минимальная часть пользователей предпочтут другой файловый менеджер (в котором они в конечном итоге скорее всего также не найдут этой функции).
Qwertiy писал(а):PS: Вы видели окно Сервис -> Параметры в OpenOffice.org? Сколько там всяких настроек?
Видел. И подозреваю что скоро авторы OpenOffice могут в защиту своего нежелания добавлять новые опции сказать своим пользователям что-то в стиле: "А Вы видели окно настроек в Unreal Commander? Хотите чтобы и у нас никто ничего найти не смог без встроенной поисковой системы?...".
Qwertiy писал(а):Каждый раз, когда вызывается API-функция :arrow: для получения из ini-файла некоторого параметра, она просматривает весь файл, чтобы найти там нужную строку. Вместо этого надо считать весь файл один раз как текстовый и разбросать его содержимое по карте (map в C++), словарю (Dictionary в среде .NET) или коллекции (Collection в VB). Думаю, что и в Делфи есть нечто подобное. Будет работать намного быстрее.
Есть такой класс TMemIniFile...
Qwertiy писал(а):Но всё же добавили обработку этой команды...
Должен признать что добавление дополнительного фрагмента в проверку условия несколько проще нежели предложенная здесь функция. Да и актуальность выше.
Аватара пользователя
Qwertiy
Охотник за багами
Сообщения: 1199
Зарегистрирован: Вс янв 31, 2010 12:12 am

Сообщение Qwertiy »

Max Diesel писал(а):Вообще-то с контролами программа еще и работает, а не только их отображает. Предложенный вариант видится мне абсолютно нерациональным.
Любое обращение к элементу управления требует больше времени, чем обращение к обычной переменной. Поэтому я бы просто считал ini-файл, один раз обработал его в памяти, заполнив переменные и, в последнюю очередь, при необходимости, создавал бы контролы, для корректировки пользователем настроек программы... Скорее всего, настроив программу, пользователь не будет при каждом запуске лазить в настройки...
Max Diesel писал(а):Зная динамику вопросов в стиле "а можно ли как-то отключить панель инструментов?" (флаг включения/отключения которой чуть ли не на главной вкладке окна настроек) могу с уверенностью сказать что есть пользователи которые вообще в настройках поискать чего-либо не желают. Если кого-то неустраивает отсутствие в программе какой-то нерациональной/индивидуальной функции, то пожалуй я не буду против если эта минимальная часть пользователей предпочтут другой файловый менеджер (в котором они в конечном итоге скорее всего также не найдут этой функции).
Логично, но по-моему обидно, если эта функция всё-таки есть, но её просто не нашли, т.к. она не вынесена в настройки...
Max Diesel писал(а):
Qwertiy писал(а):PS: Вы видели окно Сервис -> Параметры в OpenOffice.org? Сколько там всяких настроек?
Видел. И подозреваю что скоро авторы OpenOffice могут в защиту своего нежелания добавлять новые опции сказать своим пользователям что-то в стиле: "А Вы видели окно настроек в Unreal Commander? Хотите чтобы и у нас никто ничего найти не смог без встроенной поисковой системы?...".
При хорошей группировке много настроек не бывает :).
Это окно я привёл не как пример того, как надо делать, а как пример быстрооткрывающегося окна о огромным числом элементов... И это при том, что OpenOffice написан на Джаве...
А за поиск - спасибо. Очень полезная и удобная функция, хотя кроме UC, видел её только в одной программе - Neotweaker (это программа для настройки Windows).
Max Diesel писал(а):Есть такой класс TMemIniFile...
Видимо это то, что надо. Хотя мне это название ни о чём не говорит - на Делфи и Паскале я не программирую...
Max Diesel писал(а):
Qwertiy писал(а):Но всё же добавили обработку этой команды...
Должен признать что добавление дополнительного фрагмента в проверку условия несколько проще нежели предложенная здесь функция. Да и актуальность выше.
Насчёт простоты, с учётом необходимости добавления настроек, согласен.
А вот насчёт актуальности... Не думаю, что многие привыкли набирать такой слеш в команде cd...
А при возможности нажать вместо этого Ctrl+\...
Хотя команды "cd \" и "cd /" и обрабатываются по-разному, я не думаю, что у них много поклонников... Особенно у второй...
Последний раз редактировалось Qwertiy Ср фев 17, 2010 12:43 am, всего редактировалось 1 раз.
Аватара пользователя
Max Diesel
Автор программы
Сообщения: 3431
Зарегистрирован: Пт окт 12, 2007 3:26 pm
Контактная информация:

Сообщение Max Diesel »

Qwertiy писал(а):Логично, но по-моему обидно, если эта функция всё-таки есть, но её просто не нашли, т.к. она не вынесена в настройки...
Вот по этой причине я не каждую предложенную функцию добавляю.
Qwertiy писал(а):При хорошей группировке много настроек не бывает :).
Даже если опций миллиард штук? Это конечно гипотетическая ситуация, но она отражает некорректность фразы "много настроек не бывает"...
Аватара пользователя
Qwertiy
Охотник за багами
Сообщения: 1199
Зарегистрирован: Вс янв 31, 2010 12:12 am

Сообщение Qwertiy »

Max Diesel писал(а):
Qwertiy писал(а):Логично, но по-моему обидно, если эта функция всё-таки есть, но её просто не нашли, т.к. она не вынесена в настройки...
Вот по этой причине я не каждую предложенную функцию добавляю.
Интересная мысль... Не добавлять функции, чтобы они не потерялись где-то там... Лучше бы файл справки, но пока его нет, даже не знаю...
Max Diesel писал(а):
Qwertiy писал(а):При хорошей группировке много настроек не бывает :).
Даже если опций миллиард штук? Это конечно гипотетическая ситуация, но она отражает некорректность фразы "много настроек не бывает"...
Чтобы запрограммировать опции, надо намного больше времени, чем чтобы найти их. Поэтому слишком много их не будет.
Можно сказать, что их слишком много, только если все они свалены в кучу и среди них ничего нельзя найти. Но если их хорошо упорядочить, то большое количество настроек будет удобным.
Аватара пользователя
Max Diesel
Автор программы
Сообщения: 3431
Зарегистрирован: Пт окт 12, 2007 3:26 pm
Контактная информация:

Сообщение Max Diesel »

Qwertiy писал(а):Интересная мысль... Не добавлять функции, чтобы они не потерялись где-то там...
Интересная интерпретация моих слов... в них смысл был в том что я добавляю только то что я счел рациональным, то есть таким что может понадобиться пользователям программы (причем не единичным, а многим).
Аватара пользователя
Qwertiy
Охотник за багами
Сообщения: 1199
Зарегистрирован: Вс янв 31, 2010 12:12 am

Сообщение Qwertiy »

Max Diesel писал(а):
Qwertiy писал(а):Интересная мысль... Не добавлять функции, чтобы они не потерялись где-то там...
Интересная интерпретация моих слов... в них смысл был в том что я добавляю только то что я счел рациональным, то есть таким что может понадобиться пользователям программы (причем не единичным, а многим).
В такой формулировке это кажется естественным и правильным.
Однако какие-то принципиальные отличия от других тоже должны быть... Пусть даже их будут использовать только 5% или 10% пользователей...
Ответить