[WT] [Архив] [Поиск] Главная Управление
[Совместно с Ычаном]

[Назад]
Ответ в нить
Имя
Animapcha image [@] [?]
Тема   ( ответ в 6640)
Сообщение flower
Файл 
Пароль  (для удаления файлов и сообщений)
Параметры   
  • Прежде чем постить, ознакомьтесь с правилами.
  • Поддерживаемые типы файлов: 7Z, BZ, BZ2, GIF, GZ, JPG, MO, MP3, OGG, PDF, PNG, PSD, RAR, SVG, SWF, TXT, XCF, ZIP
  • Максимально допустимый размер файлов: 10000 кБ.
  • Изображения, размер которых превышает 200 на 200 пикселей, будут уменьшены.
  • Ныне 1572 unique user posts. Посмотреть каталог
  • Радио:

Файл: 133433613476.png-(28.14KB, 900x500, image.png)
6640 No. 6640 watch    
Стив, выручай. Пишу на Qt текстовый редактор (соль не в самом редакторе, но не это главное).
Короче, нужно мне запилить так называемый "режим блоков", чтоб можно было выделять текст как в WinEdt (см. картинку).
Сделать то я сделал, но уж больно криво. Приходится добавлять пробелы, если, скажем, строчки имеют разную длину. Выделение скачет, грузит процессор, и сам код крив до безобразия. Короче так нельзя.
Лучше всего, конечно, было бы реализовать что-то типа "виртуальных" пробелов - то есть чтоб курсор можно было поставить в любую точку документа, даже если там никакого текста нет (вроде нечто подобное сделано в редакторе борланд дельфи).
На кьютешном форуме спрашивал, глухо.
Развернуть все изображения
>> No. 6641    
>>6640
>Лучше всего, конечно, было бы реализовать что-то типа "виртуальных" пробелов - то есть чтоб курсор можно было поставить в любую точку документа, даже если там никакого текста нет (вроде нечто подобное сделано в редакторе борланд дельфи).

Ну так реализовывай. Или ты хочешь чтобы это кто-то сделал за тебя?
>> No. 6642    
>>6640
Слабо могу представить, зачем это вообще нужно.
Абсолютно не вижу проблемы, сначала рисуешь под мышкой квадрат, потом считаешь куда попадает верхний левый угол и нижний правый. Сохраняешь это как text_offset и text_count. Выделяешь текст. Оптимизации довольно очевидны, все строчки одинаковы и вообще.
>Выделение скачет
Ты ведь еще пойди не моноширные шрифты используешь, да?
>> No. 6643    
>>6642
Мышкой в текстовом редакторе тыкает только быдло.
>> No. 6646    
>>6641
Почему такой злой? Я за советом пришел, если бы знал, как сделать - не стал бы спрашивать.
>>6642
То есть, как я понял, надо собственную прорисовку делать? Это уже лучше, хотя и слишком сложно для меня, но все равно спасибо, можно хотя бы попытаться.
И да, выделение должно выполняться как мышкой, так и с клавиатуры.
>> No. 6647    
>>6642
Забыл сказать - шрифт, само собой, моноширинный. Там "скачки" происходят из-за разных длин строк.
>> No. 6658    
Если кому интересно: проблема, похоже, может быть решена за счет установления фиксированной длины строки (заполнение обыкновенными пробелами и немного колдовства над keyPressevent). А на крайний случай нашел библиотеку, где вроде бы это уже реализовано (http://qcodeedit.edyuk.org/). Правда пока не разобрался (документация скудная, а сырцы досконально изучать пока что лень).
>> No. 6696    
Файл: 133535387643.png-(167.17KB, 1282x722, PractInt_tex-1.png)
6696
Знаю, всем пофиг, но вот что получилось. Библиотеку когда-нибудь выложу на гитхаб.
>> No. 6697    
>>6696
как в твоем варианте работает вырезание и вставка квадратных блоков? Встречал несколько подходов (в Н++ и в ИДЕ дельфей - точно разные), не все понравились просто.
>> No. 6699    
>>6697
Если включен режим блоков и вставляется тоже блок (то есть все строки равной длины), то вставляемый текст как-бы раздвигает уже существующий текст. Если же одно из условий не выполняется, то вставка производится как обычно.
Не знаю, понятно ли написал, буду дома - приложу картинку.
>> No. 6701    
Файл: 133542302613.png-(171.40KB, 923x1353, paste.png)
6701
>>6699
Пара скучная, так что было время запилить иллюстрацию.
>> No. 6702    
>>6701
А если выделенный блок имеет вид
12345
112__
2334_
где _ - это виртуальный пробел - как тогда? Вставляешь пробелы или не вставляешь?
>> No. 6703    
>>6702
Я выше писал, что отказался от идеи собственной прорисовки, а значит и от виртуальных пробелов. Не стоит овчинка выделки. Строка просто забивается фиксированным числом пробелов (само собой, при разного рода редактировании это обстоятельство учитывается и длина строки всегда остается постоянной).
То есть при выделении вышеприведенного блока вместо _ будут выделены обычные пробелы. Чтобы вставляемый текст считался блоком, все его строки должны иметь одинаковую длину (то есть, опять же, "недостающие" символы заменяются пробелами).
А вообще, не пойму, к чему вопрос. Если был выделен и копирован прямоугольный блок, то при вставке он в любом случае будет расценен именно как блок.
>> No. 6704    
>>6703
То есть, проще говоря, если были на конце пробелы, то вставятся пробелы. Если их не было, то не вставятся. Если все строки вставляемого текста одинаковой длины, будет вставляться как блок, если длина разная - как простой текст.
>> No. 6706    
>>6699
меня больше интересует другое. Вот смотри. выделил я блок 5х5, скопировал, ушел дргое место и три раза нажал вставить. Как оно вставится? Одно под другим (курсор после вставки под блоком)? Одно за другим в тех же строках (курсор остается на месте)? Лесенкой (курсор оказывается в нижнем правом углу блока)? Если последнее, то очень плохо. Из практики могу сказать, что первая модель мне нужна была чаще всего, вторая реже, третья совершенно бесполезна (если аски-артом не занимаешься, лол)
>> No. 6707    
>>6706
Третье. Просто я не для себя пишу и вообще мало представляю, как будет удобнее. Но можно и так как ты сказал сделать, совершенно никакой проблемы нет. Спасибо за подсказку.
>> No. 6708    
>>6707
Ну вот, собственно, сделал так: если после вставки под блоком есть еще строки, то курсор переместится таким образом, чтобы следйющий блок вставился под предыдущим. Если же при вставке был достигнут конец документа, то курсор устанавливается у правого нижнего края вставленного блока. По-моему, вполне логичное и ожидаемое поведение.
>> No. 6709    
>>6708
Ящитаю, если после вставки был достигнут конец документа, то нужно добавить виртуальную строку и установить курсор под вставленным блоком слева.
>> No. 6714    
>>6709
Это уж как скажет заказчик. Может ему вообще по-другому захочется. Но за идею все равно спасибо, пока что так и сделаю.
[Назад]


Удалить сообщение []
Пароль  
[Mod]