ChanServ changed the topic of #libreoffice-ru to: Канал поддержки русскоязычных пользователей LibreOffice | Wiki TDF http://tdf.io/wikiru | On-line документация http://tdf.io/helpru | Логи канала: http://goo.gl/gzwdwU
tagezi_ has joined #libreoffice-ru
tagezi has quit [Ping timeout: 240 seconds]
JohnDoe_71Rus has joined #libreoffice-ru
<tagezi_> mikekaganski: ты можешь мне объяснить, как работает вот этот класс? https://opengrok.libreoffice.org/xref/core/basctl/source/basicide/basicbox.cxx#41
<mikekaganski> класс целиком? (ты просто указал на конструктор, поэтому уточняю)
<tagezi_> это похоже на класс конверт или управляющий класс
<tagezi_> ох, да там всё не понятно
<tagezi_> нет диструктора, функции явно не вызываются, что делает макрос я вообще не понимаю
<tagezi_> я лишь понимаю, что при реистрации https://opengrok.libreoffice.org/xref/core/basctl/source/basicide/basidesh.cxx#183 создается объект LibBoxControl который создает объект LibBox
<tagezi_> но там куча методов, ни один из которых явно нигде не появляется
<tagezi_> я так понимаю, что всё происходит через макрос https://opengrok.libreoffice.org/xref/core/include/sfx2/tbxctrl.hxx#187
<tagezi_> но о_О для меня эти макросы просто магия какая-то
<mikekaganski> макросы и есть магия, и поэтому мы избавляемся от них где можем
<mikekaganski> но там несложно
<mikekaganski> смотри: возьми его и запиши его определение вместо его использования в basicbox.cxx
<mikekaganski> все \ в конце строк уничтожь
<mikekaganski> вместо Class в определении подставь LibBoxControl
<mikekaganski> вместо nItemClass подставь SfxStringItem
<mikekaganski> больше в этом макросе ничего нет (бывают макросы с дополнительными макроспецифичными фишками)
<mikekaganski> и у тебя получится реальный c++ код
<tagezi_> смотри
<tagezi_> Class::CreateImpl
<tagezi_> это вызов LibBoxControl::CreateItemWindow ?
<mikekaganski> вместо Class в этом месте вставь LibBoxControl
<mikekaganski> да
<mikekaganski> нет
<tagezi_> но имена то разные
<tagezi_> эм
<tagezi_> ааа, это метод приходящий по наследству
<mikekaganski> это вызов LibBoxControl::CreateImpl
<mikekaganski> ага
<mikekaganski> я описал все преобразования - других делать не надо
<tagezi_> хорошо, а как тогда вызываются метода LibBoxControl::CreateItemWindow и LibBoxControl::StateChanged?
* tagezi_ когданибудь станет как колан, но не сегодня :)
<tagezi_> то что они переопределяют родительские методы, это я вижу, но не может же родитель их вызывать
<tagezi_> эм
<mikekaganski> Они же виртуальные переопределения - они вызываются, когда унаследованные или внешние методы их вызывают
<libreofficeru-tg> <Kompilainenn> Каолан - икона из мира Либры
<tagezi_> а
<tagezi_> жопа то какая
<libreofficeru-tg> <Kompilainenn> 😂
<libreofficeru-tg> <Kompilainenn> Чтобы либра работала, на его исходники нельзя даже дышать (с) МК
<tagezi_> да нет, просто у меня скил с++ на базовом уровне
<tagezi_> это логично, тут же прямое наследование, значит все методы переходят как есть
<mikekaganski> @Kompilainenn: неправда. Внесение любых изменений в цитату уничтожает её смысл
<tagezi_> то есть, есть метод, который проверяет был ли изменение и вызывает StateChanged (установка изменений
<mikekaganski> Если уж заменять слова в моей цитате, то только так: "чтобы либра продолжала работать как сейчас, на его исходники нельзя даже дышать"
<tagezi_> mikekaganski: а диструктор наследуется?
<tagezi_> о_О
<mikekaganski> виртуальный - да
<tagezi_> конструктор точно нет, насколько я помню
<mikekaganski> на то он и виртуальный деструктор
<tagezi_> LibBoxControlне имеет диструктора
<mikekaganski> если класс не имеет явного деструктора, компилятор создаёт для него деструктор. При этом компилятор, конечно, может сгенерировать корректный код только для простых случаев
<mikekaganski> если у предка класса деструктор виртуальный, то и у этого класса деструктор будет виртуальным
<tagezi_> почти как в кути :)
<tagezi_> ясно
<tagezi_> @Kompilainenn, по поводу твой хрени. Попробуй разделить все свои изменения на маленькие контролируемые куски. Чтобы изменений было по минимум
<tagezi_> будет проще смотреть где накосячил
<tagezi_> если изменение удасное, добавляй его в коммит... следующее удасное,добавляй его в этот же коммит..
<tagezi_> так ты по тихоньку собирешь свой коммит
<tagezi_> когда пол файла переписано, очень сложно найти косяк... майк может выдовать ошибки не там где они на самом деле, просто ему кажеться, что это самое явное
<tagezi_> mikekaganski: глупый вопрос, а приватные переменные могут быть изменены классом родителем?
<mikekaganski> напрямую нет, только вызовом виртуальной функции, переопределённой у дочернего класса, который имеет к ним доступ
<tagezi_> ага
<tagezi_> понятно.. примерно как я и представлял :)
<tagezi_> и все равно не понятно, зачем разделять создание элемента и сам элемент
<tagezi_> mikekaganski: спасибо
tagezi_ is now known as tagezi
<libreofficeru-tg> <Kompilainenn> Нууу
<libreofficeru-tg> <Kompilainenn> Армин про твою мудрость не знает
<libreofficeru-tg> <Kompilainenn> И потому не просто дышит на код, а вообще магию творит
<tagezi> что значит магию творит?
<libreofficeru-tg> <Kompilainenn> Ну посмотри на его недавний мегапатч
<libreofficeru-tg> <Kompilainenn> И у меня не хрень, у меня патч, ровно такой же, какой легко пишешь ты или майк или кто угодно
<libreofficeru-tg> <Kompilainenn> То, что диалог так сильно меняется, не я виноват
<libreofficeru-tg> <Kompilainenn> А мержить отдельные патчина каждое перемещение отдельного контрола - просто ересь
<mikekaganski> @Kompilainenn: речь не о том, чтобы твой патч разбить на кучу патчей, а чтобы разбить его на кучу частей
<mikekaganski> взять маленькое изменение (заменить контейнер) и проверить, что всё продолжает работать
<mikekaganski> теперь поменять его положение и проверить, что всё работает
<tagezi> git commit --amend
<mikekaganski> потом добавить панель и посмотреть, что всё работает ...
<mikekaganski> а уже тогда получится скомбинированный патч
<tagezi> просто меняя потихоньку ты видишь что меняешь, и заодно учишься...
<tagezi> я делаю точно также, если я не уверен, я думаю правильно про код, я делаю патч того в чем уверен, потом делаю другие изменения, и если всё хорошо, то добавляю их в свой патч
<tagezi> а потом делаю уже конечную шлифорку (стараюсь по крайне мере :)) и тоже добавляю её в патч
<tagezi> таким образом, мне не нужно переделывать всё с нуля, я могу очень просто откатиться обратно
<tagezi> а заодно смотрю и учусь
<tagezi> mikekaganski: а если вызов макроса https://opengrok.libreoffice.org/xref/core/basctl/source/basicide/basicbox.cxx#39 перенести в хедер, то будет лажа?
<tagezi> мне его не задокументировать в схх :(
<tagezi> лажа
<tagezi> mikekaganski: почуму классы выподающих списков называют box?
<mikekaganski> охх... ну как мне ответить? исторически... наверное
<tagezi> элемент интерфейса же drop-down list
<mikekaganski> combobox?
<tagezi> ы
<tagezi> убедил :)
<tagezi> хорошо, другой вопрос
<tagezi> почему Lib для списка макросов в IDE
<tagezi> меня реально смущает название LibBox
<tagezi> коробка библиотек
<tagezi> https://imgur.com/a/HwR1kBc вот этот элемент
<libreofficeru-tg> <Kompilainenn> Вот этот не нужный элемент
<mikekaganski> ну, потому что это "библиотеки" макросов в терминологии ЛО?
<tagezi> да.. точна
<tagezi> @Kompilainenn, нормальный это элемент
<tagezi> другое дело, что в IDE интерфейс сейчас не настраивается вообще никак
<libreofficeru-tg> <Kompilainenn> Это элемент, который нисколько не улучшает UX,а просто занимает место
<tagezi> Ром, как часто ты пишешь макросы в IDE? 2 раза в день? 5 раз в день?
<tagezi> когда начнёшь писать, вот тогда и расказывай, что нужно, я что не нужно
<tagezi> mikekaganski: а что такое префикс e?
<mikekaganski> tagezi: enum
<tagezi> o_O
<tagezi> не понимаю
<tagezi> не, что такое енум я знаю
<tagezi> там же приходит значение из перечисления, а не всё еречисление
<tagezi> какой смысл указывать что это значение из перечисления?
<mikekaganski> это не комплексный объект (чтобы использовать префикс a) и не число (с которым можно делать вычисления) для префикса n
<tagezi> логично
<tagezi> буду знать
<tagezi> mikekaganski: вот, мнение твоё, если я заменю LibBox на LibComboBox и LibBoxControl на LibComboBoxControl нормально будет?
<tagezi> чтобы было понятно, что это выпадающие списки, а не просто области
<mikekaganski> не вижу смысла на самом деле... ведь там есть тип, и в любом случае, человек, работающий с этим кодом, обязан хотя бы взглянуть на диалог вживую
<tagezi> грепать удобнее
<mikekaganski> Простите, а речь про LibBox и LibBoxControl, или про LanguageBox?
<tagezi> две разных коробки, одна заполняет комбобокс, вторая сам комбобокс для переключения языков в диалогах
<tagezi> так они в одном месте
<mikekaganski> я так и не уловил, в каком сценарии греп облегчится
<tagezi> греп облекчиться для языка, но просто это одинаковые элементы, и логично будет называть одинаковое одним образом
<tagezi> так, наверное, нужно целый патч представить, и тогда уже вопросы задавать
<tagezi> а то я на своей волне, а ты на своей
<libreofficeru-tg> <Kompilainenn> проверьте кто-нить на 6.3 альфа
<libreofficeru-tg> <Kompilainenn> открыть Writer
<libreofficeru-tg> <Kompilainenn> скопировать из браузера любой текст, вставить в Writer как Unformatted text
<libreofficeru-tg> <Kompilainenn> попробовать сохранить файл
<libreofficeru-tg> <Kompilainenn> у меня окно сохранения файла просто мигает, а файл не сохраняется
<libreofficeru-tg> <Kompilainenn> винда 10
<mikekaganski> @Kompilainenn: ты не про https://bugs.documentfoundation.org/show_bug.cgi?id=121569 ?
UNIm95 has joined #libreoffice-ru
<libreofficeru-tg> <Kompilainenn> да оно
UNIm95 has left #libreoffice-ru [#libreoffice-ru]
<libreofficeru-tg> <Kompilainenn> mikekaganski: изменения мин/макс в диалоге УФ войдут только в 6.3 уже?
<mikekaganski> не помню - глянь что в баге пишут
<libreofficeru-tg> <Kompilainenn> да, 6.3
<libreofficeru-tg> <Kompilainenn> я уж подумал, что-то не так https://bugs.documentfoundation.org/show_bug.cgi?id=121839
<mikekaganski> @Kompilainenn: ты что, из тех немногих, кто уже закоммиттил что-то в ЛО, но ещё не огребыл регрессий??? Ж-)
<mikekaganski> Б! Ведь написал ещё в августе, а этот Энкаш забил. В конце концов самому приходится сопли собирать
<libreofficeru-tg> <Kompilainenn> =)
<libreofficeru-tg> <Kompilainenn> GSoC такой GSoC
<libreofficeru-tg> <Kompilainenn> mikekaganski: что такое sw redlinehide?
<mikekaganski> это mst переделывает работу с записью изменений
<mikekaganski> не с записью. а скорее с данными о записанных изменениях
<libreofficeru-tg> <Kompilainenn> track changes или undo/redo?
<libreofficeru-tg> <Kompilainenn> у тебя сегодня не детский день что ли?
<mikekaganski> я их в деревню до утра отослал
<mikekaganski> track changes
<libreofficeru-tg> <Kompilainenn> а у меня дурдом дома=( весь день
<libreofficeru-tg> <Kompilainenn> я так понял, тема с диалогом печать так и зависнет мертвым грузом
<libreofficeru-tg> <Kompilainenn> в мастер это не примут, Даниэль это скорее всего допиливать не станет, всем спасибо за потраченное время
<mikekaganski> Блин да приняли бы это в мастер, если бы ему сказали в мастере работать. Уж если этот говнокод, что я сейчас правил, приняли!...
<mikekaganski> Надо на ESC предложить, чтобы гсоковцы работали только в мастере
<libreofficeru-tg> <Kompilainenn> А вот это тема
mikekaganski_ has joined #libreoffice-ru
mikekaganski has quit [Ping timeout: 246 seconds]
mikekaganski_ is now known as mikekaganski
<tagezi> mikekaganski: ты тут?
<tagezi> а как работает конструктор, который ничего не делает? Просто происходит выделение памяти под объект?
<mikekaganski> конструктор, который ничего не делает, не выделяет память под объект (как и тот, который что-то делает)
<tagezi> эм.. а что он делает?
<mikekaganski> под объект выделяет память либо operator new, либо (если это локальный объект) память выделяется в стеке
<mikekaganski> а вот что он делает - это вопрос. В зависимости от того, что это за объект
<tagezi> ну, вот например, тот же LibBoxControl
<tagezi> там пустой конструктор, хотя в него передаются переменные
<mikekaganski> если ты создашь class foo{int i;public:foo(){}}; - то он и в самом деле *ничего* не будет делать
<mikekaganski> а для class foo{std::string s;public:foo(){}}; он уже будет вызывать конструктор tsd::string
<mikekaganski> а для class foo:bar{int i;public:foo(){}}; он вызовет конструктор bar
<tagezi> то есть LibBoxControl вызывает конструктор SfxToolBoxControl
<mikekaganski> то есть можно считать, что он всегда вызывает конструкторы по умолчанию для родительских классов и нетривиальных членов
<mikekaganski> да
<tagezi> и передает ему эти параметры
<mikekaganski> какие это параметры? ты ж сказал, он пустой
<mikekaganski> летмичек
<mikekaganski> а, так он не пустой
<mikekaganski> он *явно* вызывает родительский конструктор, причём не по умолчанию, а с параметрами
<tagezi> так, а скажи мне вот что тогда. Если я документирую, мне это нужно указывать?
<mikekaganski> на мой взгляд, нет. Во-первых, родительский конструктор вызывается *всегда*, даже если не указан явно (вопрос только какой конструктор из перегруженных)
<mikekaganski> иерархия там есть
<tagezi> понятно
<tagezi> тоесть мне имеет смысл указать только параметры
<mikekaganski> да
<tagezi> хорошо...
<tagezi> а можешь мне объяснить, как быстро понять что это за параметры?
<mikekaganski> я могу тебе небыстро попытаться объяснить, что это за параметры, но вот объяснить, как быстро понять - это увольте ;-)
<mikekaganski> дело в том, что я и сам не вполне понимаю
<mikekaganski> слот - это сущность (номер) внутренней операции ЛО
<mikekaganski> Ид - уникальный номер этого элемента в диалоге
<mikekaganski> что такое тулбокс - без понятия
<mikekaganski> может быть, объект, который им владеет?
<mikekaganski> тулбокс и его тулбокс контролы
<tagezi> панель инструментов
<mikekaganski> ну вот, а на ней - либбоксконтрол
<tagezi> скажем так, я понял слова
<tagezi> :)
<tagezi> откуда берутся эти слоты и ид?
<mikekaganski> а, насчёт слота. Например, через слоты становится понятно, какие элементы надо заблокировать, если, скажем, мы не в таблице, или там зашли в облясть ReadOnly
<mikekaganski> Ид - просто номер по порядку (я думаю, оно его генерит автоматом)
<mikekaganski> а вот слоты ... это пестня
<mikekaganski> там я дал пару ссылок (их гораздо больше) на файлы, где слоты определяются
<mikekaganski> всякие там SID_BASICIDE_TOGGLEBRKPNT
<mikekaganski> (надо ж как в тему под руку подвернулся пример)
<tagezi> :) да, я даже делал эти слоты
<tagezi> но всеравно не понимаю как они работают
<mikekaganski> ну вот, значит, ты в курсе
<mikekaganski> и я не вполне понимаю
<tagezi> блин, вот всегда так.. работает, а почему, никто не знает
<tagezi> а пойду на канал дев, мне скажут "что если ты уже неделю роишь эти фалы, то ты лучше всех знаешь что там происходит"
<mikekaganski> Ну, моё эго сейчас прямо надулось до величины ... короче, я горд, что если *я* не понимаю, значит, никто
JohnDoe_71Rus has quit [Quit: KVIrc 5.0.0 Aria http://www.kvirc.net/]
<tagezi> ну, а если я знаю лучше всех, то там точно нифига никто не понимает :))
<tagezi> я так понимаю, все эти параметры передаются макросом в конструктор
<mikekaganski> насчёт слотов надо поискать в вики опенофиса
<libreofficeru-tg> <Kompilainenn> Мало того, что каждые пять лет начинают в багзилле дублировать древние баги, так и с кодом то же самое? Каждые пять лет кто то заново пытается понять магию внутренностей либры
<mikekaganski> ничего подобного
<mikekaganski> то есть ничего общего с правдой
<tagezi> никто даже не пытается :)
<mikekaganski> какие пять??? каждый месяц-другой!!!
<tagezi> ЛО работает так, у колана есть магический шар и армия гномиков-рабов. Гномики бегают и крутят шестерёнки ЛО, а колон сидит и смотрит в шар
<tagezi> а все остальные пишут буковки и молятся, чтобы колоновские гномики не заблудились :)
* mikekaganski смотрит на говорящую очепятку "колоновские" и вспоминает анатомию
<tagezi> Колон – арендатор чужой земли, юридически независимый от арендодателя, которому он платил деньгами или частью урожая.
<tagezi> а вот анатомии не помню
<tagezi> :)
<tagezi> mikekaganski: я правильно понимаю магию? этот макрос только регистрирует объект https://opengrok.libreoffice.org/xref/core/include/sfx2/tbxctrl.hxx#114
<tagezi> хотя, я не понимаю что это значит о_О
<tagezi> а этт макрос его создает https://opengrok.libreoffice.org/xref/core/include/sfx2/tbxctrl.hxx#187
<mikekaganski> эти два макроса просто упрощают написание постоянно повторяющихся и однообразных функций. Они не регистрируют и не создают, они только объявляют и определяют функции
<tagezi> так не понял
<mikekaganski> первый макрос появляется в теле описания класса
<tagezi> угу
<mikekaganski> он там просто создаёт две строчки: "static SfxToolBoxControl* CreateImpl( sal_uInt16 nSlotId, sal_uInt16 nId, ToolBox &rTbx );" и "static void RegisterControl(sal_uInt16 nSlotId = 0, SfxModule *pMod=nullptr)"
<mikekaganski> то есть он там объявил две функции класса
<mikekaganski> второй макрос - в cxx файле - просто создаёт стандартные тела этим функциям
<tagezi> а зачем так?
<tagezi> почему не сделать обычные функции?
<mikekaganski> чтобы не писать каждый раз заново, а заодно облегчить внесение изменений
<mikekaganski> если потом внести изменение в макрос - везде, где он используется, будут изменения
<tagezi> то есть, это просто вынесенный кусок кода получается
<mikekaganski> да
<mikekaganski> это копипаста
<mikekaganski> хм - а почему у этого макроса префикс basctl::LibBoxControl
<tagezi> потому что он в пространстве имен
<tagezi> это doxygen делает, а не я. я лишь код описываю
<mikekaganski> макросы обрабатываются препроцессором, который знать не знает ни о каких пространствах имён...
<mikekaganski> получается нехорошо/некорректно
<tagezi> doxygen воспринимает это как метод
<mikekaganski> жалко
<tagezi> да, так я сегодня пол дня с этим бился.. решил что лучше оставить это как есть, но описать подробнее
<tagezi> понятно, что старики, люди которые хорошо знают код и так всё поймут, они в документацию и не смотрят
<tagezi> а в документации я описал вроде как надо
<mikekaganski> вроде нормально описано
<tagezi> mikekaganski: а nSID это сигнал?
<mikekaganski> tagezi: где?
<mikekaganski> Это первый параметр? н здесь вообще игнорируется
<tagezi> блин, нет...
<tagezi> не навижу авторов ЛО :)
<tagezi> это тотже nSlotId
<tagezi> почему нельзя соблюдать один способ наименования хотябы в приделах одного класса? :)
<mikekaganski> эмм... ну, так веселее?
<tagezi> и он не используется
<libreofficeru-tg> <Kompilainenn> веселее лол
<libreofficeru-tg> <Kompilainenn> давайте напишем ржачный код офиса
<mikekaganski> о, видишь, тебе уже весело :-)
<libreofficeru-tg> <Kompilainenn> Миша, у меня дома ТИШИНА
<libreofficeru-tg> <Kompilainenn> дети СПЯТ
<libreofficeru-tg> <Kompilainenn> это такое БЛАЖЕНСТВО
<mikekaganski> это замесательное время :-)
<mikekaganski> хм
<libreofficeru-tg> <Kompilainenn> заесим
<libreofficeru-tg> <Kompilainenn> :D
<mikekaganski> :-)
<libreofficeru-tg> <Kompilainenn> время опечаток
<mikekaganski> устали все (наконец-то можно мои кривые руки списать на усталость!)
<libreofficeru-tg> <Kompilainenn> tagezi: ты не в курсе, UNO команда работает только для панелей инструментов? На простую обычную кнопку можно UNO назначить?
<tagezi> да
<tagezi> уно команде всёравно
<libreofficeru-tg> <Kompilainenn> чо ж мне бубли голову клепала
<libreofficeru-tg> <Kompilainenn> и я вымахивался с тулбаром посреди диалога
<tagezi> уно - это метод, ему все равно как ты его вызываешь, лишь бы он имел возможноть быть вызваным
<libreofficeru-tg> <Kompilainenn> а вот это правильный вопрос
<tagezi> ну, uno:Save ты назначаешь на горячие клавишь, кнопки на тулбаре, в пункте меню
<tagezi> но тебе нужно создать слот для него
<tagezi> ты создаешь слот не для уно, а для элемента который делаешь
<libreofficeru-tg> <Kompilainenn> ты не углубляйся в терминологию, что такое слот у тебя?
<tagezi> вот я делал слот для повтора поиска https://gerrit.libreoffice.org/plugins/gitiles/core/+/3322661414a558d29146c40c0cd5e9db0a7b21dd%5E%21
<tagezi> уно был .uno:RepeatSearch
<tagezi> он везде у нас такой
<tagezi> правда это не очень хороший пример, там пришлось упрощать код
<tagezi> но если бубли говорит что тебе нужно сделать uno для твоей штуки, то скорее всего так оно и есть :)
<libreofficeru-tg> <Kompilainenn> когда я посмотрел на твой пример https://sadpanda.cn/wordpress/wp-content/uploads/2010/10/charactersbook.jpg
<libreofficeru-tg> <Kompilainenn> бубли сказала, что мне проще всего будет запилить панель инструментов с кнопками и к кнопкам привязать существующие UNO
<tagezi> ну, наверное. я не знаю что ты делаешь
<libreofficeru-tg> <Kompilainenn> просто, ну я видел пример на NB (риббоне) юзаются UNO для форматирования текста
<libreofficeru-tg> <Kompilainenn> ты наешь, потому что ты это ругал уже
<libreofficeru-tg> <Kompilainenn> вчера по-моему
<libreofficeru-tg> <Kompilainenn> эм
<libreofficeru-tg> <Kompilainenn> так вот
<tagezi> ну, так ты там перестраиваешь же, а не добавляешь
<libreofficeru-tg> <Kompilainenn> в NB юзаются UNO. И есть уно для выбора шрифта. По внешнему виду - это выпадающий список, однако UNO назначено на КНОПКУ, а выглядит в итоге, как выпадающий список
<libreofficeru-tg> <Kompilainenn> вот это мне вообще непонятно
<libreofficeru-tg> <Kompilainenn> что, UNO не важно, на какой контрол оно повешено, оно все равно будет так выглядеть, как прописано в UNO?
<tagezi> а какое у тебя там uno?