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
jrj has quit [Quit: Leaving]
JohnDoe_71Rus has joined #libreoffice-ru
UNIm95 has joined #libreoffice-ru
<tagezi> mikekaganski: трям
<tagezi> а где искать определение вот этого? css::uno::Reference<css::frame::XModel> mxModel;
<tagezi> css::frame::XModel <- что это такое
<tagezi> вроде разобрался :)
<mikekaganski> ок :)
<tagezi> mikekaganski: по поводу второго изихака, можно обсудить его?
<tagezi> я понимаю что происходит, мне интересна реализация, как лучше сделать,
<mikekaganski> давай
<tagezi> там срабатывает исключение, и их есть 4
<tagezi> и в них нет завершения статусиндикатора
<mikekaganski> ага
<tagezi> там если тупо в лоб решать, то можно просто поставить mxStatusIndicator->end(); в них и всё
<mikekaganski> ага :)
<tagezi> и я думаю что даже проверки не нужно, так как работает парсер и индикатор должен быть
<tagezi> в теории
<mikekaganski> на всякий случай кинь ссылку на код - я по памяти всё не помню
<tagezi> так, нет
<tagezi> объясни инструкцию throw
<tagezi> что значит бросить, что он будет дальше делать?
<tagezi> то что после исключений идёт?
<mikekaganski> нет
<tagezi> а что?
<tagezi> оно будет работать как брайк?
<mikekaganski> оно вылетит из функции до обработчика следующего уровня
<mikekaganski> то есть она может вылететь не только из этой, но и из вызывающих
<mikekaganski> пока обработчик не найдёт
<tagezi> тоесть оно эквеволетно ретёрн; только более глобально
<tagezi> нахренвсё, вернусь к рождению
<mikekaganski> Насчёт "даже проверки не нужно" - это не стоит делать, лучше оставить как там стоит, с проверкой. Например, может не быть индикатора при headless-кужиме
<mikekaganski> ага
<tagezi> получается,что я просто копипасчу 519 и 520 строки
<mikekaganski> это как же мне надо было исхитриться так, чтобы написать "кужиме"?
<tagezi> 4 раза
<mikekaganski> я бы не стал так
<mikekaganski> это именно то, что ты назвал "в лоб"
<tagezi> да, в лоб
<tagezi> по уму, можно сделать инлайн функцию
<tagezi> mxStatusIndicator член, и мне даже пересылать ничего не нужно
<tagezi> или, можно прописать в дескрипторе
<mikekaganski> я предполагал RAII, как мы делали в прошлый раз - с маленьким объектом, единственная цель которого - это ресетить индикатор в деструкторе
<tagezi> ага, я понял, это интересно
<tagezi> только тогда у меня вопрос, если так делать, то лучше вынести всю работу с прогресиндикатором в класс
<tagezi> а я не совсем понимаю как вызывается void OOXMLDocumentImpl::incrementProgress()
<tagezi> она публик
<tagezi> или сдулать класс только на создание и разрушение объекта?
<tagezi> тоесть в конструктор уйдет 445-448, а в деструктор 519-520
<tagezi> как-то так
<tagezi> так, нет, нужно думать
<tagezi> mikekaganski: ладно, я подумаю, потом скажу как это вижу
kompi has joined #libreoffice-ru
kompi has quit [Quit: Page closed]
<tagezi> mikekaganski: вы всё ещё с ним возитесь,
<tagezi> ?
<tagezi> киви странный како-то, он вообще не думает об удобстве других
<mikekaganski> я - нет
<tagezi> я бы на его месте нача с чего-нибудь более простого
<tagezi> но он какой-то упертый
<tagezi> и как выясняется, иногда нужно попробовать несколько рекомендованных способов, чтобы найти тот другой, который реально будет работать как хочется :))
<tagezi> бедный бескрылый птиц :)
<tagezi> mikekaganski: тут?
<mikekaganski> тут
<tagezi> слушай, а можно не создавать же класс новый, а просто в этом деструкторе класса прописать освобождение объекта
<tagezi> каждый раз когда переменная дочернего класса будет освобождаться, будет срабатывать деструктор этого класса и статус индикатор будет освобождаться
<mikekaganski> ссылка куда?
<tagezi> на класс
<tagezi> вот деструктор
<mikekaganski> нет, нельзя
<mikekaganski> потому что этот класс может быть задействован не только сам по себе
<mikekaganski> он может создаваться для загрузки встроенных объектов
<mikekaganski> и тогда он не должен сбрасывать индикатор
<tagezi> погоди, класс в любом случае создает СтатусИндикатор
<mikekaganski> потому что индикатор будет принадлежать внешнему объекту
<mikekaganski> создаёт?
<tagezi> в конструкторе класса переменная инициализируется
<mikekaganski> класс получает ссылку на индикатор и сохраняет её у себя
<tagezi> так, тогда я не понимаю
<tagezi> есть функция которая используется извне https://opengrok.libreoffice.org/xref/core/writerfilter/source/ooxml/OOXMLDocumentImpl.cxx#523
<mikekaganski> так
<mikekaganski> (кстати, без проверки)
<tagezi> потому что в функции только чтены, и они будут если есть объект этого класс
<tagezi> у меня 6 мест вхождения объекта в этом класе
<mikekaganski> ?
<tagezi> в конструкторе
<tagezi> void OOXMLDocumentImpl::resolve(Stream & rStream)
<tagezi> void OOXMLDocumentImpl::incrementProgress()
<tagezi> объект член класса
<tagezi> и я не совсем понимаю, как это будет работать, если я сделаю подкласс
<tagezi> если объект член, он вообще будет освобождаться до завершения процесса, который его вызвал
<tagezi> ?
<mikekaganski> я тебя не понял. Мы про какие объекты сейчас говорим? про индикатор или про OOXMLDocumentImpl?
<mikekaganski> давай сначала про индикатор
<tagezi> хорошо, про индикатор
<mikekaganski> индикатор передаётся в конструктор с помощью объекта-ссылки
<tagezi> да
<mikekaganski> В OOXMLDocumentImpl он тоже хранится в виде ссылки
<mikekaganski> то есть ссылка указывает на объект, созданный вне объекта
<mikekaganski> каждая ссылка увеличивает счётчик использований объекта индикатора
<mikekaganski> при уничтожении ссылки счётчик уменьшается, при обнулении объект уничтожится
<mikekaganski> но у нас класс не первый создал этот объект, так что он увеличил счётчик из ненулевой позиции, и при своём уничтожении уменьшит до ненулевой
<mikekaganski> так что сам индикатор не будет уничтожен, только одна из ссылок на него
<mikekaganski> вопросы?
JohnDoe_71Rus has quit [Quit: Miranda IM! Smaller, Faster, Easier. http://miranda-im.org]
<tagezi> это понятно
<mikekaganski> ок
<tagezi> поэтому объект должен быть уничтожен руками
<mikekaganski> ?
<mikekaganski> зачем его уничтожать?
<mikekaganski> давай без слова "объект"
<mikekaganski> а то непонятно
<tagezi> хорошо
<tagezi> индикатор нужно уничтожить, так как он остается
<mikekaganski> индикатор нужно сбросить, а не уничтожить
<mikekaganski> mxStatusIndicator->end();
<tagezi> это сброс?
<mikekaganski> да
<mikekaganski> объект не уничтожится
<mikekaganski> просто скроется и забудет состояние
<mikekaganski> (сколько на нём процентов)
<tagezi> хорошо, но видимость Индикатора весь класс, он член класса
* mikekaganski сам использует просто "объект" :))
<tagezi> я тебя понимаю :)
<mikekaganski> так,
<mikekaganski> он виден везде, да
<mikekaganski> но используется в границах resolve
<tagezi> нет
<tagezi> void OOXMLDocumentImpl::incrementProgress()
<tagezi> он тоже используется
<mikekaganski> да :)
<tagezi> что да? :)
<mikekaganski> эта функция тоже используется в границах resolve
<tagezi> нет, она не используется там
<tagezi> если только не считаешь коментарий :)
<mikekaganski> в начале функции индикатор готовится (настраивает границы), затем функция создаёт парсер и передаёт свой объект этому парсеру, парсер парсит и в этом процессе вызывает incrementProgress, затем возвращается в функцию
<mikekaganski> так что incrementProgress используется в этих границах, хоть и опосредованно
<tagezi> хорошо, я кажеться понимаю
<tagezi> но это не изменяет видимость объекта
<tagezi> СтатусИндикатора*
<tagezi> если его не делать членом класса, то его нужно будет пинать туда сюда
<tagezi> или нет
<tagezi> это ссылка, значение меняется, есть в функции resolve можно отказаться от члена
<tagezi> а переменная будет жить до завершения функции
<tagezi> а член можно не трогать, пусть живет, он будет работать только в incrementProgress
<tagezi> так чтоли?
<mikekaganski> вроде так (если я тебя правильно понял) - давай посмотрим на код :)
JohnDoe_71Rus has joined #libreoffice-ru
<tagezi> mikekaganski: так.. нужна твоя помощь
<mikekaganski> ?
<tagezi> блин, как тебе это показать то
<JohnDoe_71Rus> скайп
<JohnDoe_71Rus> шаредесктоп
<tagezi> mikekaganski: https://paste.ubuntu.com/26125638/
<mikekaganski> ясно
<tagezi> помоему тёмно :)
<mikekaganski> не
<mikekaganski> но блин не сейчас - мне за дочей в садик
<tagezi> топай давай
<tagezi> потом объяснишь
kompilainenn has joined #libreoffice-ru
<kompilainenn> tagezi: пора писать новые фичи
<tagezi> не слышал о такое поре :)
<kompilainenn> Да ладно, ты уже превзошел Юсуфа и Хейко вместе взятых
<kompilainenn> Значит пора
<tagezi> они так не думают :)
<tagezi> нужно ещё изихаки поделать... вопревых просто прокачаю скил с++, вовторых, буду более просто общаться с кодом ЛО
<tagezi> и я вчера и так новую фичу сделал, кстати.. добавил функционал в окно
<tagezi> а не просто строку поправил :)
<tagezi> только бубли всё не может посмотреть, времени у неё нет на это
<kompilainenn> Ахах, борись с ними
<kompilainenn> И победи, а желательно еще мордой их ткнуть
bormant has joined #libreoffice-ru
<kompilainenn> tagezi: в какое окно?
<tagezi> kompilainenn: ну я же тебе скинул на баг ссылку
<tagezi> когда справка не установлена, при попытки её юзат, вылетает окно
<tagezi> вот там и делал функционал
<kompilainenn> Ну норм
<kompilainenn> Еще чутка и на тебя будут равняться
<mikekaganski> tagezi: сорри
<tagezi> mikekaganski: да перестань, всё нормально. семья прежде всего
<mikekaganski> :) твой класс *почти* нормальный, но не нужно им заменять mxStatusIndicator (или нужно это сделать чуток по-другому)
<tagezi> что значит почти нормальный?
<tagezi> все атрибуты есть :)
<mikekaganski> если оставить его как есть, то просто не нужно трогать строки ~70
<mikekaganski> почти - потому что нужно сделать explicit конструктор
<mikekaganski> сейчас объясню
<mikekaganski> сначала про строку 70
<mikekaganski> нас же никто не заставляет прекратить пользоваться mxStatusIndicator
<kompilainenn> Андроид вьюер ппц тяжелый
<mikekaganski> kompilainenn: да, это же весь ЛО
<kompilainenn> На моём планшете тормозит аццки даже пустой
<mikekaganski> так что у тебя есть класс-сторож, и его задача - только очистить по завершению
<tagezi> а компилятор не будет ругаться что переменная не используется?
<kompilainenn> VitaliyAnderson: как жизнь, Бро?
<mikekaganski> ты его создал в 60, и ладушки
<mikekaganski> нет. Эта переменная используется в деструкторе :)
<tagezi> эм
<tagezi> ты думаешь это вообе кто-то поймет потом? :)
<mikekaganski> пусть и неявно, но используется
<mikekaganski> а чтобы поняли, давай займёмся именами
<mikekaganski> StatusIndicator -> StatusIndicatorGuard
<tagezi> так, погоди с именами
<tagezi> explicit конструктор
<tagezi> вот про это расскажи
<tagezi> вообще не помню этого
<mikekaganski> jr
<mikekaganski> ок
<mikekaganski> ты свою переменную инициализируешь так: StatusIndicator xStatusIndicator = mxStatusIndicator
<mikekaganski> так вот, этот синтаксис рекомендуется использовать только тогда, когда класс является как бы другой формой того же самого. То есть может заменять исходный объект
<tagezi> а буду StatusIndicator xStatusIndicator = StatusIndicator(mxStatusIndicator)
<mikekaganski> В твоём случае твой класс, хоть и содержит индикатор, но не может использоваться вместо него
<mikekaganski> Лучше StatusIndicator xStatusIndicator(mxStatusIndicator)
<tagezi> хорошо..
<tagezi> но в чем разница, что за явное преобразование?
<tagezi> чем оно отличается от обычного?
<mikekaganski> просто конструктор объявляется с дополнительным словом
<mikekaganski> explicit StatusIndicator(css::uno::Reference<css::task::XStatusIndicator>& xStatusIndicator)
<tagezi> да, это я понимаю
<tagezi> я гуглить умею, и это видно даже если по ссылкам не переходить :)
<tagezi> когда это нужно использовать..
<mikekaganski> так, тогда в чём вопрос
<tagezi> ну вот у меня тут в патче, я передаю объект по ссылке, тоесть в переменной храниться адрес
<mikekaganski> когда ты не хочешь, чтобы возможно было превратить объект в другой объект "случайно"
<tagezi> почему вдруг методы изменились?
<mikekaganski> я что-то путаюсь. Изменились относительно чего?
<tagezi> ну, да этого я мог их использовать, а теперь нет
<tagezi> объект то не изменился..
<tagezi> вот StatusIndicator, он как в конструкторе основного класса преобразовался, так и всё
<mikekaganski> погоди, где я сказал "явное преобразование"?
<tagezi> а дальше я его только пинаю
<tagezi> [20:22:16] <mikekaganski> почти - потому что нужно сделать explicit конструктор
<tagezi> explicit запрещает не явное преобразование
<mikekaganski> да, то есть запрещает StatusIndicator xStatusIndicator = mxStatusIndicator
<mikekaganski> и требует вместо него StatusIndicator xStatusIndicator(mxStatusIndicator)
<mikekaganski> всё
<mikekaganski> других последствий у этого нет
<mikekaganski> это и есть явное преобразование
<tagezi> а разница в чем кроме синтаксиса, и зачем это делать?
<mikekaganski> в данном конкретном случае - только в синтаксисе
<tagezi> хорошо
<tagezi> объясни тогда почему методы перестали работать
<tagezi> xStatusIndicator->start(aDocLoad, mnProgressEndPos);
<tagezi> почему это не работает больше
<tagezi> у меня же в класс уходит ссылка, объявление объекта такое же
<mikekaganski> xStatusIndicator имеет тип StatusIndicator
<mikekaganski> у этого класса нет никаких методов
<mikekaganski> в том числе оператора ->
<kompilainenn> Либра 5 в реактос стартует, а 6 уже нет
<tagezi> mikekaganski: так ссылка делается на кусок памяти, без какого-то смысла?
<tagezi> так, ладно, я вроде понимаю
<tagezi> в классе методы будут работать
<tagezi> а у объектов созданых от этого класса методов нет
<kompilainenn> mikekaganski: а что 6 совсем откажется стартовать на вин хр?
<tagezi> mikekaganski: спасибо, заработало
<tagezi> и я понял что тупанул прировняв разные штуки в голове
<tagezi> буду переменные думать как назвать
<mikekaganski> tagezi: теперь убери этот класс из заголовка, опиши его прямо в cxx перед resolve
<mikekaganski> он там не нужен в описании класса OOXMLDocumentImpl
<tagezi> mikekaganski: погоди.. он в cxx сделан
<tagezi> просто перед всем, но в том же пространстве
<mikekaganski> ну, я имею ввиду, не в классе OOXMLDocumentImpl
<mikekaganski> я бы его сделал в безымянном пространстве
<tagezi> а, поместить его в безымянное пространство
<mikekaganski> ага
<tagezi> чтобы он не был доступен из вне
<mikekaganski> и в заголовке у тебя есть он
<mikekaganski> ага
<tagezi> а в заголовке его куда поставить?
<tagezi> я же его должен объявить
<mikekaganski> никуда, не должен
<tagezi> эм.. ну я буду пробовать
<tagezi> :)
kompilainenn has quit [Quit: Bye]
<mikekaganski> kompilainenn: да
<tagezi> mikekaganski: почему строки не вернуть.. этоже просто форматирование, читать удобнее
<mikekaganski> чтобы не было не относящихся к сути изменений. У новичков это часто особенно строго следят
<tagezi> о потом приходят чуваки, и делают одльный патчь на букву Лы
<mikekaganski> :)
<tagezi> ладно, хорошо
JohnDoe_71Rus has quit [Quit: KVIrc 4.9.2 Aria http://www.kvirc.net/]
<tagezi> mikekaganski: опубликовывать или ещё раз взглянишь?
<mikekaganski> уже. Публикуй :)
bormant has quit [Quit: Leaving]
UNIm95 has quit [Ping timeout: 255 seconds]
mikekaganski has quit [*.net *.split]
mikekaganski has joined #libreoffice-ru
UNIm95 has joined #libreoffice-ru
<tagezi> mikekaganski: сколько сейчас сборки идут?
UNIm95 has quit [Quit: Leaving.]