Russian Qt Forum

Qt => Qt-инструментарий => Тема начата: snasoft от Март 22, 2014, 14:35



Название: Плагин, добавляющий табы в QtCreator
Отправлено: snasoft от Март 22, 2014, 14:35
(http://habrastorage.org/getpro/habr/post_images/788/fe8/22a/788fe822ae2552e7ea313eb878a0d801.png)

Тема вкладок для QtCreator неоднократно поднималась на многих форумах. В частности предлагалось решение с модификацией кода самого Qt Creator на prog.org.ru (http://www.prog.org.ru/topic_18970_0.html) , был плагин Editor tabs (https://github.com/chenjiexin/editortabs) (ныне не поддерживаемый и не совместимый с текущей версией QtCreator) , вопрос поднимался на  qt-project.org (http://qt-project.org/forums/viewthread/2637).
Сам когда-то собирал QtCreator из исходников для поддержки табов (спасибо prog.org.ru), но вскоре прекратил эту практику (при выпуске нового QtCreator приходилось заново пересобирать его). Но вот недавно получил решение в виде плагина, который решает вопрос с табами без необходимости пересборки QtCreator (так как обладает совместимостью с новыми версиями).
Выношу этот плагин на суд общественности, надеюсь он будет полезен. Пожалуйста, пишите все замечания и предложения (в том числе по идеям о создании новых плагинов).

Ссылки:
1. Страница проекта на Sourceforge.net QtCreator Tabbed Editor Plugin (https://sourceforge.net/projects/tabbededitor) (если Вам понравился плагин, то искренне прошу проголосовать за него при наличии времени).
Для получения исходников:
Код
Bash
svn checkout svn://svn.code.sf.net/p/tabbededitor/src/trunk tabbededitor-src
2. Архивы с скомпилированным плагином QtCreator (версии 3.0.0 - 3.x.x ) для:

Windows (x32-x64) (https://sourceforge.net/projects/tabbededitor/files/Precompiled%20Binaries/Windows/)
Linux x64 (https://sourceforge.net/projects/tabbededitor/files/Precompiled%20Binaries/Linux%20x64/)
Linux x32 (https://sourceforge.net/projects/tabbededitor/files/Precompiled%20Binaries/Linux%20x32/)
Mac OS X (https://sourceforge.net/projects/tabbededitor/files/Precompiled%20Binaries/Mac%20OSX/)

Для установки плагина содержимое архива необходимо распаковать в директорию, где располагаются плагины:
для Windows обычно C:\Qt\Tools\QtCreator\lib\qtcreator\plugins.
для Lunux-based систем  /home/username/Qt5.2.0/Tools/QtCreator/lib/qtcreator/plugins при установке Qt в директорию пользователя. Или как вариант /opt/Qt5.2.0/Tools/QtCreator/lib/qtcreator/plugins (устанавливалось на Ubuntu).
3. Статья на habrahabr.ru с более подробным описанием Плагин, добавляющий табы в QtCreator (http://habrahabr.ru/post/215107/)

С уважением, Андрей.


Название: Re: Плагин, добавляющий табы в QtCreator
Отправлено: lesav от Март 22, 2014, 18:36
Есть возможность сборки для QtCreator 2.8 ?


Название: Re: Плагин, добавляющий табы в QtCreator
Отправлено: snasoft от Март 22, 2014, 18:41
Поддержка старых версий не предполагалась (и не изучалась), но вы можете самостоятельно собрать плагин, внеся соответствующие изменения (при необходимости).


Название: Re: Плагин, добавляющий табы в QtCreator
Отправлено: kambala от Март 22, 2014, 19:13
был какой-то плагин и для 2.х, даже у нас на форуме обсуждался


Название: Re: Плагин, добавляющий табы в QtCreator
Отправлено: snasoft от Март 22, 2014, 19:50
был какой-то плагин и для 2.х, даже у нас на форуме обсуждался
Возможно этот? Editor Tabs (https://github.com/chenjiexin/editortabs)


Название: Re: Плагин, добавляющий табы в QtCreator
Отправлено: kambala от Март 22, 2014, 20:25
нет, другой: http://gitorious.org/qt-creator-tabs

а вот и тема: http://www.prog.org.ru/topic_18970_0.html


Название: Re: Плагин, добавляющий табы в QtCreator
Отправлено: snasoft от Март 22, 2014, 20:31
нет, другой: http://gitorious.org/qt-creator-tabs

а вот и тема: http://www.prog.org.ru/topic_18970_0.html
Цитата: kambala
был какой-то плагин и для 2.х, даже у нас на форуме обсуждался
Это не плагин, это ветка QtCreator, в которой изменены исходники самого QtCreator. Ссылка на эту тему указана в первом сообщении.
Цитировать
В частности предлагалось решение с модификацией кода самого Qt Creator на prog.org.ru


Название: Re: Плагин, добавляющий табы в QtCreator
Отправлено: kambala от Март 22, 2014, 21:03
прочитал первый пост по диагонали и не заметил :)


Название: Re: Плагин, добавляющий табы в QtCreator
Отправлено: snasoft от Март 23, 2014, 13:24
Обновил плагин до версии 0.0.2:

исправлена недоработка, при которой после сохранения файла он продолжает помечаться * (как модифицированный). Случай возникал при автосохранении перед запуском сборки;
— теперь цвет берется из настроек цветовой схемы самого QtCreator'a (пример на рисунке), после смены настроек цветов необходимо перезапустить QtCreator (чтобы изменения затронули и табы);
— скроллер (элемент прокрутки табов, когда они не помещаются все одновременно) сделан непрозрачным;
— удалил весь отладочный вывод.

Исходники в репозитории и архивы обновлены для всех систем за исключением Mac OS X (пока только версия 0.0.1).
Ссылки в первом сообщении на архивы с скомпилированными плагинами теперь указывают не на файлы архивов, а на директории для загрузки под конкретную систему (сделано чтобы каждый раз не редактировать ссылки на загрузку).


Название: Re: Плагин, добавляющий табы в QtCreator
Отправлено: panAlexey от Март 23, 2014, 16:20
когда переключаешся на *.ui вкладки соответственно не видны. ((


Название: Re: Плагин, добавляющий табы в QtCreator
Отправлено: snasoft от Март 23, 2014, 17:21
когда переключаешся на *.ui вкладки соответственно не видны. ((
Насколько я понимаю при переключении на *.ui задействуется уже другой режим: "design", и в рабочей области отображается тот же Designer. Лично мне кажется неудобным, что при переходе в Edit после работы с формой в режиме Design отображается XML содержимое файла *.ui. Зачем оно, ведь напрямую этот файл все равно нельзя редактировать (вроде предполагается, что он автоматически генерируется Designer'ом). Но в то же время для *.ui в режиме Edit создается вкладка, то есть в режиме Edit представление формы - это текстовое представление формы (XML файл), а в режиме Design - графическое. Теоретически возможно добавить табы (если позволит Api) поверх Designer'а, но тогда в режиме Design вкладка для ui будет открывать соответствующую форму а в режиме Edit - xml файл, в то же время вкладки с *.cpp *.h  в режиме Design будут переводить в режим Edit и отображать эти файлы. Как то так.

P.S. Спасибо Вам за интересную идею дальнейшего развития плагина.


Название: Re: Плагин, добавляющий табы в QtCreator
Отправлено: panAlexey от Март 23, 2014, 17:35
когда переключаешся на *.ui вкладки соответственно не видны. ((
Насколько я понимаю при переключении на *.ui задействуется уже другой режим: "design", и в рабочей области отображается тот же Designer. Лично мне кажется неудобным, что при переходе в Edit после работы с формой в режиме Design отображается XML содержимое файла *.ui. Зачем оно, ведь напрямую этот файл все равно нельзя редактировать (вроде предполагается, что он автоматически генерируется Designer'ом). Но в то же время для *.ui в режиме Edit создается вкладка, то есть в режиме Edit представление формы - это текстовое представление формы (XML файл), а в режиме Design - графическое. Теоретически возможно добавить табы (если позволит Api) поверх Designer'а, но тогда в режиме Design вкладка для ui будет открывать соответствующую форму а в режиме Edit - xml файл, в то же время вкладки с *.cpp *.h  в режиме Design будут переводить в режим Edit и отображать эти файлы. Как то так.

P.S. Спасибо Вам за интересную идею дальнейшего развития плагина.
Оу, а владеешь внутренней структурой API креатора и умеешь интегрировать в него разные вещи?
Прикольно. А вот я пока не докопался. ((


Название: Re: Плагин, добавляющий табы в QtCreator
Отправлено: snasoft от Март 23, 2014, 18:17
Цитата: panAlexey
владеешь внутренней структурой API креатора и умеешь интегрировать в него разные вещи?

да как сказать владею... вот надо было узнать как отследить - модифицирован файл или нет (чтобы звездочку подрисовывать или убирать). Смотрю в списке файлов в панельке (где и обозначается * в самом QtCreator) есть элемент "<no document>" - явно он статический и "translatable", запускаю поиск этой строки по исходникам QtCreator, нахожу для какого элемента интерфейса это значение задается, потом по имени этого элемента ищу, где он используется (модифицируется), там же нахожу метод isModified() и код для использования модели документов (вроде DocumentModel, как то так). Как таковой серьезной документации для Api все равно ведь нет.


Название: Re: Плагин, добавляющий табы в QtCreator
Отправлено: kuzulis от Март 23, 2014, 22:23
Ох, сколько умов билось об эту задачу, сколько калорий сожжено..  :)

В любом случае, желаю успеха в твоем начинании... Возможно, хоть у тебя получится довести это до ума..

ЗЫ:

Я плагин еще не смотрел, но сходу, вопросики:

1. Есть ли где-нить в настройках креатора галочка, для того чтобы можно было включать/отключать режим табов?
2. Можно ли кликнув и потянув мышкой за таб, перемещать его как отдельное окно? Например, переемстить на другой монитор, а потом обратно?




Название: Re: Плагин, добавляющий табы в QtCreator
Отправлено: snasoft от Март 24, 2014, 18:43
Обновил плагин до версии 0.0.3.

  • теперь табы отображаются во всех режимах QtCreator (редактора, дизайнера, справки и др.) и расположены сразу под главным меню. Это позволяет переключаться к редактированию того или иного файла сразу из любого режима (в том числе из справочной системы, минуя переключение в режим Edit — данный режим включится автоматически).
  • еще одно улучшение: для форм (файлов *.ui) также появляется вкладка, при переходе на которую сразу отображается редактор формы.

Хотелось бы выразить благодарность пользователю panAlexey за идею этого обновления плагина.

(http://habrastorage.org/files/e1d/89a/bbd/e1d89abbdd0a40b398bd9cd3aa13b83c.jpg)

2 kuzulis.
вопросики:
1. Есть ли где-нить в настройках креатора галочка, для того чтобы можно было включать/отключать режим табов?
2. Можно ли кликнув и потянув мышкой за таб, перемещать его как отдельное окно? Например, переемстить на другой монитор, а потом обратно?
1. Да, можно отключить: Help->About Plugins и убрать соответствующую галочку в столбце "Load" напротив плагина.
2. Нет, Drag and drop не поддерживается, но если вы для открытого файла выполните действие "Open In New Window" (ниспадающее меню слева от крестика закрытия файла), то для него откроется новое окно редактирования, которое можно переместить и развернуть на втором (третьем?) мониторе.




Название: Re: Плагин, добавляющий табы в QtCreator
Отправлено: Akon от Март 24, 2014, 21:35
Цитировать
Поддержка старых версий не предполагалась (и не изучалась), но вы можете самостоятельно собрать плагин, внеся соответствующие изменения (при необходимости).
Между 2.8 и 3.x серьезные изменения в сорцах: другие классы и т.п. (сам делал вкладки, коими и пользуюсь до сих пор, но без плагина, неотключаемые).

Вероятно, попробую ваш плагин на 3-й версии. Мои основные требования:
1. Вкладки должны сохраняться/восстанавливаться для каждой сессии (включая порядок отображения).
2. Контекстное меню вкладок должно содержать действия, которые имеет контекстное меню открытых документов.

А если вы разделите окно редактора (split), т.е. будет два окна - что будет с вкладками?

Цитировать
— исправлена недоработка, при которой после сохранения файла он продолжает помечаться * (как модифицированный). Случай возникал при автосохранении перед запуском сборки;
Откуда у вас вкладки берут информацию об открытых файлах? Для вкладок и окна "Открытые документы" должен быть один источник (OpenEditorsModel или как она там сейчас эволюционировала), тогда и с синхронизацией проблем не будет.





Название: Re: Плагин, добавляющий табы в QtCreator
Отправлено: snasoft от Март 24, 2014, 22:26
Между 2.8 и 3.x серьезные изменения в сорцах
Еще большие изменения в функциональности (не считая исправления багов): QtCreator 3.0 Release Notes (https://blog.qt.digia.com/blog/2013/12/12/qt-creator-3-0-released/). В связи с этим не вижу объективных причин для того, чтобы в новой разработке поддерживать устравший Api для программного обеспечения с ошибками (со слов разработчиков). Ведь это не коммерческий проект и хочется работать на перспективу, а не заниматься сопровождением.

сам делал вкладки, коими и пользуюсь до сих пор
Ссылки на исходники есть на форуме? Было бы здорово, если бы вы поделились ими (попадись мне готовое решение - я не стал бы изобретать велосипед).

Мои основные требования:
1. Вкладки должны сохраняться/восстанавливаться для каждой сессии (включая порядок отображения).
2. Контекстное меню вкладок должно содержать действия, которые имеет контекстное меню открытых документов.
А ваши табы поддерживают этот функционал? Если да, то я с удовольствием на базе ваших наработок приведу плагин в соответствие с вашими требованиями.

А если вы разделите окно редактора (split), т.е. будет два окна - что будет с вкладками?
"в настоящее время плагин не полностью поддерживает split-конфигурацию окна редактора (когда область редактирования разделяется на несколько подобластей TabBar остается один для всех)." - это указано в более подробном описании статьи на сайте habrahabr.ru (ссылка на который имеется в конце первого сообщения темы). Что значит не полностью поддерживает? Это значит, что автор плагина не гарантирует адекватную работу плагина в split конфигурации. В обсуждении на хабре вы можете увидить отзыв человека, который тестировал табы в режиме split-a. (я просто не хочу дублировать информацию, для этого и дал ссылку).

Откуда у вас вкладки берут информацию об открытых файлах? Для вкладок и окна "Открытые документы" должен быть один источник (OpenEditorsModel или как она там сейчас эволюционировала), тогда и с синхронизацией проблем не будет.
На данный момент проблем с синхронизацией нет. По поводу деталей реализации приглашаю к исходникам - они открыты.


Название: Re: Плагин, добавляющий табы в QtCreator
Отправлено: Akon от Март 24, 2014, 22:43
https://qt.gitorious.org/qt-creator/akons-qt-creator/activities
Мои основные требования реализуются.

Цитировать
На данный момент проблем с синхронизацией нет. По поводу деталей реализации приглашаю к исходникам - они открыты.
Я понимаю, но мне бы не хотелось сейчас тратить время на изучение исходников, поэтому и задаю конкретные вопросы, предвидя потенциальные проблемы, если сделано так-то. Например, как отображаются рид-онли файлы: есть ли иконка замка ? и т.п.



Название: Re: Плагин, добавляющий табы в QtCreator
Отправлено: snasoft от Март 24, 2014, 22:58
https://qt.gitorious.org/qt-creator/akons-qt-creator/activities
Мои основные требования реализуются.

Цитировать
На данный момент проблем с синхронизацией нет. По поводу деталей реализации приглашаю к исходникам - они открыты.
Я понимаю, но мне бы не хотелось сейчас тратить время на изучение исходников, поэтому и задаю конкретные вопросы, предвидя потенциальные проблемы, если сделано так-то. Например, как отображаются рид-онли файлы: есть ли иконка замка ? и т.п.
Плагин использует модель документов. Файлы, доступные только для чтения никак не отображаются. Потенциальных проблем действительно много, еще больше возможностей для развития (например те же контекстные меню, или Drag and Drop с созданием нового окна). Я записал все, что вы отметили в список TODO (возможно еще что-то почерпну из исходников).
Спасибо за ссылку на исходники!


Название: Re: Плагин, добавляющий табы в QtCreator
Отправлено: Akon от Март 24, 2014, 23:05
Без проблем.

Мне нужны вкладки на 3-й версии, свои малой кровью я туда не перенесу. Так что лично для меня было бы здорово иметь хорошее решение под 3-ку, тем более в виде плагина.


Название: Re: Плагин, добавляющий табы в QtCreator
Отправлено: qt-lolacola от Декабрь 16, 2014, 15:32
На 3.3. версии криейтора плагин совсем отвалился. Как я понял, в криейторе выпилили .pluginspec. Может ктонибудь пофиксить?