Программа для создания кроссвордов (Обсуждение исходника)

Полезные советы и программы от пользователей нашего форума.

Модератор: Модераторы разделов

Аватара пользователя
xwicked
Сообщения: 115
ОС: GNU / Linux Debian 7 amd64
Контактная информация:

Программа для создания кроссвордов

Сообщение xwicked »

Изображение

Здравствуйте! Есть одна программа для создания кроссвордов. Она состоит из двух частей: создание и отгадывание.

Прошу её код хорошо покритиковать. Для остальных, чтобы могли посмотреть на её работу, дам ссылки на бинарники 32-бит: создание, отгадывание. Qt-4.5.3.

Проекты OpenSource под GPLv2. Ссылки на SourceForge.net - создание, отгадывание.
Это мой первый код на C++(Qt). Жду комментариев :)

Добавлю небольшое описание: Сетка кроссворда представлена обычной таблицей TableCrosswordEdit(QTableWidget), слова загружаются в список слов ListWord(QStringList), толкования(вопросы) находятся в списке вопросов ListQuestions(QListWidget).

Структура файла - динамическая. Когда писал программы на Delphi - использовал статику - расходовалось лишнее дисковое пространство .
XWC: Пароль, количество строк, количество столбцов, ширина(высота) ячейки таблицы, шрифт, структура таблицы(w + 1(x) - белая ячейка, b + 1( c ) - чёрная), строка с данными CrosswordData(QString).

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

... if(file.open(QIODevice::WriteOnly))
                   {
                       QBrush BrushBlack = QBrush(Qt::black, Qt::SolidPattern);
                       QDataStream sfile(&file);
                       QChar sdata;
                       ushort idata;

                           if(State == false) sfile << strPassword;

                       sfile << TableCrosswordEdit->rowCount();
                       sfile << TableCrosswordEdit->columnCount();
                       sfile << TableCrosswordEdit->rowHeight(0);
                       sfile << TableCrosswordEdit->font();

                           for(int i = 0; i < TableCrosswordEdit->rowCount(); i++)
                               for(int j = 0; j < TableCrosswordEdit->columnCount(); j++)
                                   {
                                           if(TableCrosswordEdit->item(i,j)->background() == BrushBlack)
                                               {
                                                   sdata = 'b';
                                                   idata = sdata.unicode() + 1;
                                                   sfile << idata;
                                               }
                                           else
                                               {
                                                   sdata = 'w';
                                                   idata = sdata.unicode() + 1;
                                                   sfile << idata;
                                               }

                                       sdata = 0;
                                   }

                           if(State == false) CrosswordToData(2);
                           if(State == false) sfile << CrosswordData;

                       file.close();

                           if(State == false) SaveStateCross = true;
                           else SaveStateTemplate = true;
                   } ...

CrosswordData: цикл по количеству слов(q, QChar(номер слова), QChar(координата строки в сетке), QChar(координата столбца в сетке), направление слова в сетке), цикл по количеству слов(W, QChar(номер слова), QChar(длина слова), само слово), цикл по количеству вопросов(Q, QChar(номер вопроса), QChar(длина вопроса), сам вопрос).

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

...
                       for(int i = 0; i < ListWord.count(); i++)
                           {
                               CrosswordData.append(QChar('W'));
                               CrosswordData.append(QChar(ushort(i)));
                               CurrentString.clear();
                               CurrentString.append(ListWord.at(i));
                               CrosswordData.append(QChar(ushort(CurrentString.length())));
                               CrosswordData.append(ListWord.at(i));
                           }

                       for(int i = 0; i < ListQuestions->count(); i++)
                           {
                               CrosswordData.append(QChar('Q'));
                               CrosswordData.append(QChar(ushort(i)));
                               CrosswordData.append(QChar(ushort(ListQuestions->item(i)->text().length())));
                               CrosswordData.append(ListQuestions->item(i)->text());
                           } ...

Шаблон кроссворда(XWTPL) таже структура, но без пароля и без CrosswordData.

Состояние сохранения(tmpcross): цикл по количеству слов(W, QChar(номер слова), QChar(длина слова), само слово).
Спасибо сказали:
Аватара пользователя
xwicked
Сообщения: 115
ОС: GNU / Linux Debian 7 amd64
Контактная информация:

Re: Программа для создания кроссвордов

Сообщение xwicked »

Продолжаем знакомиться с исходником. Профессиональный кроссворд, версии 0.1.4 - это объединение двух предыдущих: создателя и отгадывателя, с последующей доработкой.
Изменения:
- Добавлена возможность автоматического создания сетки кроссворда(бета-версия).
- Добавлена возможность автоматического составления кроссворда(выбор слов из словаря). Первая бета-версия.
- Присутствуют обе возможности(создание и отгадывыание).

Отмечу, что выбор слов происходит в один проход и могут быть пропуски слов в сетке, после составления кроссворда.

Исходный код(0.1.4) Отдельный проект на SourceForge.net - Клёст-кроссворд

В Клёст-кроссворде нет возможности сохранять пароль, в то время как в Crossword editor эта возможность есть. Проекты были разделены для большего удобства разработки.

P.S. Профессиональный кроссворд 0.1.7 = Клёст-кроссворд 0.1.7 :)
Спасибо сказали:
Аватара пользователя
xwicked
Сообщения: 115
ОС: GNU / Linux Debian 7 amd64
Контактная информация:

Re: Программа для создания кроссвордов

Сообщение xwicked »

Следующая версия программы - 0.1.5. Исходный код.

Изменилась функция составления кроссворда, которая теперь позволяет заполнить всю сетку кроссворда словами.
Спасибо сказали:
Аватара пользователя
xwicked
Сообщения: 115
ОС: GNU / Linux Debian 7 amd64
Контактная информация:

Re: Программа для создания кроссвордов

Сообщение xwicked »

В новой версии 0.1.6 - исходник, добавлен экспорт кроссворда в изображения следующих растровых графических форматов: JPG, JPEG, BMP, TIFF, PNG, XPM, XBM, PPM + несколько других исправлений.
Спасибо сказали:
Аватара пользователя
xwicked
Сообщения: 115
ОС: GNU / Linux Debian 7 amd64
Контактная информация:

Re: Программа для создания кроссвордов

Сообщение xwicked »

А вот и новая версия 0.1.7. Изучаем код.

Что изменено:
- Временное название "Профессиональный кроссворд" изменено на "Клёст-кроссворд".
- При вводе слова в кроссворд, производится проверка на количество введённых букв в поле "Введите слово".
- В свойствах таблицы кроссворда отключена возможность ввода букв, непосредственно в ячейку, минуя поле "Введите слово".
- Изменены цветовые стили некоторых компонентов.
- В строку состояния добавлен компонент, отображающий количество букв.
- Добавлена проверка состояния сохранения изменений, произведённые в кроссворде, при выходе, используя меню "Кроссворд->Выход".
Спасибо сказали:
Аватара пользователя
xwicked
Сообщения: 115
ОС: GNU / Linux Debian 7 amd64
Контактная информация:

Re: Программа для создания кроссвордов

Сообщение xwicked »

Если у кого-нибудь будет желание свою изменённую версию кроссворда далее распространять, то для этой цели я подготовил спекфайл для сборки программы в дистрибутиве ОС Linux, основанного на RPM-пакетах.
Также прошу найти в нём ошибки:
Summary: Qt program for professional creating and easy guessing the classic crossword puzzles.

Summary(ru): Qt программа для профессионального создания редактирования и лёгкого отгадывания классических кроссвордов

%define version 0.1.7

Group: Games/Puzzles

Name: klest-crossword

BuildRequires: gcc-c++, libqt4-sql-sqlite >= 4.4.3, libqtgui4 >= 4.4.3, libqt4-core >= 4.4.3

BuildArch: %ix86

Provides: klest-crossword

Release: alt1

Source: klest-crossword-%{version}.tar.gz

Url: http://labfreetech.org/index_e.html

Version: %{version}

License: GPLv2

Packager: LabFreeTech.org admin@labfreetech.org

%description
Qt program for creating and guessing the classic crossword puzzles.
Supported features: - Create a crossword puzzle; - Editing a crossword puzzle; - Guessing crossword puzzle; - Check correctness of guessing a crossword puzzle; - Save state incompletely guessed crossword puzzle; - Automatic creation of crossword puzzle grid (beta) - Automatic selection of words from the dictionary (Beta 2); - Adding / removing words from the dictionary; - Conservation created a crossword puzzle grid, as a template for the new; - Editing the font crossword; - Editing the size of the grid cell crossword puzzle; - Export crossword in the image.

%description -l ru
Qt программа для профессионального создания редактирования и лёгкого отгадывания классических кроссвордов
Поддерживаемые функции: - Создание кроссворда; - Редактирование кроссворда; - Отгадывание кроссворда; - Проверка правильности отгадывания кроссворда; - Сохранение состояния неполностью отгаданного кроссворда; - Автоматическое создание сетки кроссворда(бета); - Автоматический выбор слов из словаря(бета 2); - Добавление/удаление слов из словаря; - Сохранение созданной сетки кроссворда, как шаблон для нового; - Редактирование шрифта кроссворда; - Редактирование размера ячейки сетки кроссворда; - Экспорт кроссворда в изображение.

%prep

%setup -q

%build
%make_build

%install

cp -Rv klest/ %buildroot/




%clean

rm -rf $RPM_BUILD_ROOT

%files

/usr/games/*
/usr/share/*

%post

test -e /usr/bin/klest-crossword-0.1.7 || ln -s /usr/games/klest-crossword-0.1.7 /usr/bin/klest-crossword-0.1.7
test -e $HOME/Desktop/klest-crossword.desktop || cp -r /usr/share/applications/klest-crossword.desktop $HOME/Desktop/klest-crossword.desktop

%postun

test -L /usr/bin/klest-crossword-0.1.7 && rm -r /usr/bin/klest-crossword-0.1.7
test -e $HOME/Desktop/klest-crossword.desktop && rm -r $HOME/Desktop/klest-crossword.desktop

Специальный архив версии 0.1.7.
Устанавливаем дополнительный пакет rpm-build и собираем командой в консоли:
$rpmbuild -bb /home/username/RPM/SPECS/klest-crossword-0.1.7-alt.spec
Спасибо сказали:
Аватара пользователя
xwicked
Сообщения: 115
ОС: GNU / Linux Debian 7 amd64
Контактная информация:

Re: Программа для создания кроссвордов

Сообщение xwicked »

Продолжение: 0.1.8, 0.1.8-rpm.

Изменения:
- Изменился алгоритм выбора слов из словаря(бета 3), с небольшой оптимизацией;
- Исправлена ошибка при экспорте кроссворда в изображение;
- Изменилось автоматическое переключение между направлением слов, на ручное - щелчком правой кнопки мыши.
Спасибо сказали:
Аватара пользователя
xwicked
Сообщения: 115
ОС: GNU / Linux Debian 7 amd64
Контактная информация:

Re: Программа для создания кроссвордов

Сообщение xwicked »

Здравствуйте!

Хочу порадовать Вас тем, что я сделал дополнительный архив исходного кода, для сборки программы в ОС GNU / Linux Debian( / Ubuntu).
Для сборки deb-пакета необходимо наличие установленных пакетов: autotools-dev, dh-make, fakeroot, cdbs, dpkg, dpkg-dev и другие.
Команда сборки:
user@pc:/klest-crossword-0.1.9-deb$ dpkg-buildpackage -rfakeroot

Для проверки правильности соответствия стандартам дистрибутива Debian, используйте пакет Lintian.

Исходный код: 0.1.9, 0.1.9-rpm, 0.1.9-deb.

Что нового:
- Исправлена фатальная ошибка, возникающая при отсутствии словаря.
- Исправлена фатальная ошибка, возникающая когда заканчиваются слова в словаре.
- Добавлена возможность несимметричного ручного редактирования сетки кроссворда.
- Изменён режим работы программы по умолчанию на режим просмотра.
Спасибо сказали:
Аватара пользователя
Bizdelnick
Модератор
Сообщения: 20793
Статус: nulla salus bello
ОС: Debian GNU/Linux

Re: Программа для создания кроссвордов

Сообщение Bizdelnick »

xwicked писал(а):
13.07.2011 06:07
%install

cp -Rv klest/ %buildroot/

Это что за ерунда? Осильте википедия://FHS и man install.
В %files нужно прописывать права на файлы.
Линки нужно делать в %install, по относительным путям.
Пишите правильно:
в консоли
вку́пе (с чем-либо)
в общем
вообще
в течение (часа)
новичок
нюанс
по умолчанию
приемлемо
проблема
пробовать
трафик
Спасибо сказали:
Аватара пользователя
xwicked
Сообщения: 115
ОС: GNU / Linux Debian 7 amd64
Контактная информация:

Re: Программа для создания кроссвордов

Сообщение xwicked »

Следующая версия = 0.2.0.

Исходный код + сборки: 0.2.0.

Важное изменение: добавление значков Oxygen. Ещё добавлены 2-а новых словаря: русский на 31 000 слов и английский на 41 000 слов. Теперь программа выглядит вот так -

Изображение

Произведённые изменения:
- Добавлены значки "Oxygen", распространяемые по лицензии GNU GPL;
- Исправлена ошибка экспорта кроссворда в изображение форматов JPG, JPEG, TIFF;
- Добавлена возможность выбора словаря для составления кроссворда. Возможные варианты: русский и английский;
- Изменена стандартная панель - добавлены несколько новых действий, исправлены ошибки;
- Изменён формат файла свойств программы, в сторону более простого добавления в него будущих свойств.
Спасибо сказали:
Аватара пользователя
xwicked
Сообщения: 115
ОС: GNU / Linux Debian 7 amd64
Контактная информация:

Re: Программа для создания кроссвордов

Сообщение xwicked »

sash-kan писал(а):
26.05.2011 10:21
xwicked
предлагаю свою помощь в опакетировании «Клёст-кроссворд» для meego, дистрибутива операционной системы gnu/linux.
если у коллег не будет возражений (что вряд ли), я включу её в репозиторий российской редакции meego — meego linuxcenter edition,
необходимым условием для включения в репозиторий является публикация исходников под какой-нибудь свободной лицензией (например, gnu gpl). желательно, но не обязательно, чтобы исходники были размещены вами не просто в виде архива, а на каком-нибудь публичном сервере проектов (например, github.com, gitorious.org и т.п.)

прежде чем взяться вам помогать, мне, естественно, нужно с исходниками ознакомиться. публиковать их для этого нет необходимости — можно через личное сообщение форума или письмом на любой из моих адресов (например, al@linuxcenter.ru) дать соответствующую инструкцию для скачивания (либо приложить непосредственно сам архив).

надеюсь на скорый ответ. с уважением, александр баракин.



sash-kan писал(а):
26.05.2011 12:12
продублировал предложение по адресу, найденному на сайте автора. ждёмс.

Здравствуйте, уважаемый sash-kan! May 26 2011 датировка Вашего предложения. 23.08.2011 - сегодняшняя дата. Вы таки ознакомились с исходниками программы?!

Благодарю за скорый ответ!
С уважением, Денис Флегонтов.
Спасибо сказали:
Аватара пользователя
sash-kan
Администратор
Сообщения: 13939
Статус: oel ngati kameie
ОС: GNU
Контактная информация:

Re: Программа для создания кроссвордов

Сообщение sash-kan »

xwicked
к сожалению, сейчас работа над meego linuxcenter edition «подвешена в воздухе»· осенью начальники обещают определиться·
Писать безграмотно - значит посягать на время людей, к которым мы адресуемся, а потому совершенно недопустимо в правильно организованном обществе. © Щерба Л. В., 1957
при сбоях форума см.блог
Спасибо сказали:
Аватара пользователя
xwicked
Сообщения: 115
ОС: GNU / Linux Debian 7 amd64
Контактная информация:

Re: Программа для создания кроссвордов

Сообщение xwicked »

sash-kan писал(а):
23.08.2011 16:17
xwicked
к сожалению, сейчас работа над meego linuxcenter edition «подвешена в воздухе»· осенью начальники обещают определиться·
Я рад, что Вам исходник понравился :) буду ждать возврата из воздухоплавания.
-----------------------------
Программа доведена до стабильности. Релиз 0.2.1. Исходник + сборки.

Все изменения:
- Исправлена фатальная ошибка, возникающая при повторном автоматическом выборе слов, после автоматического создания сетки;
- Исправлена ошибка алгоритма выбора слов из словаря;
- Исправлена ошибка автоматической вставки слов в сетку кроссворда;
- Исправлена ошибка неправильного ввода слова в сетку кроссворда, при повторных нажатиях на кнопку "ОК";
- Исправлена ошибка экспорта в изображения, при ручном создании кроссворда;
- Исправлена ошибка передачи текущего шрифта в диалог выбора шрифта, при его открытии;
- Оптимизирован алгоритм автоматического создания сетки кроссворда;
- Оптимизирован алгоритм автоматического выбора слов из словаря;
- Оптимизированы алгоритмы: создания, изменения, сохранения, открытия, закрытия кроссворда;
- Изменён формат файла кроссворда и формат файла сохранения состояния неполностью отгаданного кроссворда;
- Для повышения интереса к игровому процессу, после проверки правильности отгадывания, кроссворд закрывается.
Спасибо сказали:
Аватара пользователя
Rodegast
Сообщения: 337
ОС: Linux
Контактная информация:

Re: Программа для создания кроссвордов

Сообщение Rodegast »

Нехватает печати кроссворда, встроенных шаблонов мало и они нестандартны. А в остальном очень хорошая программа :)
Спасибо сказали:
Аватара пользователя
xwicked
Сообщения: 115
ОС: GNU / Linux Debian 7 amd64
Контактная информация:

Re: Программа для создания кроссвордов

Сообщение xwicked »

Rodegast писал(а):
30.08.2011 16:02
Нехватает печати кроссворда, встроенных шаблонов мало...
Печать будет реализована в версии 0.2.7 :) Автоматическое создание шаблонов - это одна из функций, реализацию которой я не смог быстро придумать. Поэтому она в стадии 2-ой бета-версии.
-----------
А в новой версии 0.2.2 я реализовал импорт кроссворда из текстового формата AcrossLite первой версии. Вторая версия будет загружаться, но за исключением дополнительной головоломки.

Что нового:
- Появилась возможность импортировать кроссворд, из текстового формата AcrossLite;
- Исправлена фатальная ошибка, не позволяющая создавать кроссворды больше чем 18х18;
- В меню "Помощь" добавились пункты: "Пожертвовать" и "Получить исходный код";
- Сохранение состояния неполностью отгаданного кроссворда AcrossLite(TXT) имеет своё расширение, при оставленной той же структуре файла;
- В окне о программе все ссылки изменили свой цвет на синий, для удобства поиска;
- Появилась возможность вводить слово в сетку кроссворда, нажатием на клавишу "Ввод".
Дабы быть уверенным в том, что файлы не побились, при закачке, я добавил текстовик с md5-контрольными суммами.
Git-репозиторий:
git://klest-crossword.git.sourceforge.net/gitroot/klest-crossword/klest-crossword (read-only)
Спасибо сказали:
Аватара пользователя
xwicked
Сообщения: 115
ОС: GNU / Linux Debian 7 amd64
Контактная информация:

Re: Программа для создания кроссвордов

Сообщение xwicked »

Здравствуйте!
- Добавлена возможность полуавтоматического ввода слов из словаря;
- Добавлена возможность печати кроссворда;
- Добавлены горячие клавишы;
- Увеличен максимальный размер кроссворда до 999х999х999(столбцы/строки/размер ячейки);
- Во избежании ошибки, теперь после отмены выбора слов нельзя сделать экспорт в изображение;
- После отладки, возвращено автоматическое определение направления слов при выделении, убранное в версии 0.1.8;
- Добавлена возможность ввода имени игрока;
- Добавлена статистика;
- Исправлена ошибка неисчезновения пунктов меню автоматизации, в режиме просмотра;
- Исправлена ошибка, при ручном вводе слов в кроссворд;
- Добавлен пункт меню "Получить техподдержку";
- Некоторые окна теперь не разворачиваются на весь экран по-умолчанию. Изменились также размеры нескольких окон.
В новой версии 0.2.7 Появилась возможность печати кроссворда. Хочу обратить особое внимание на тестирование этой функции, так как у меня дома нету принтера. Очень интересно, как ведёт себя печать на разных принтерах под всеми ОС.
Полуавтоматический ввод слов позволит создавать тематические кроссворды и задавать различную сложность, при составлении.

P.S. Ещё один очень важный момент: версии 0.2.7, 0.2.8 - сборки являются минимальными. То есть, чтобы посмотреть на все функции, необходимо программу собрать из исходника . Это делалось для проверки аудитории пользователей на заинтересованность в программе, путем отправки мне запроса на получение исходного кода. Что было не очень удачной идеей и, с версии 0.2.9, сборки программы уже снова полнофункциональны. Прошу извинить меня за данное неудобство :blush: .
Спасибо сказали:
Аватара пользователя
xwicked
Сообщения: 115
ОС: GNU / Linux Debian 7 amd64
Контактная информация:

Re: Программа для создания кроссвордов

Сообщение xwicked »

В версии 0.2.8 я добавил функции горизонтального и вертикального отражения кроссворда как изображения. Так же добавил инверсию цветов ячеек сетки кроссворда. Но... я не смог быстро придумать функцию обрезания сетки кроссворда, если он, например, получился меньше созданных рамок. Интересует самое простое решение данного вопроса. Благодарю!

Ещё изменения:
- Добавлена возможность рисования сетки, как карандашом;
- Добавлена функция автоматического создания, сохранения и экспорта неограниченного числа кроссвордов из одного шаблона по нажатии одной клавиши, предварительно установив соотвествующие настройки;
- Добавлены функции очистки слов, сетки и всего кроссворда;
- Добавилось окно "Параметры";
- Выбор словаря перенесён в окно "Параметры";
- Добавлена возможность выбора папки, из которой будут показываться шаблоны, для последующего их использования;
- Добавлена возможность задания пути для экспортируемого изображения в окне "Параметры";
- Добавлена возможность задания папки для экспорта вопросов и ответов в окне "Параметры";
Спасибо сказали:
Аватара пользователя
xwicked
Сообщения: 115
ОС: GNU / Linux Debian 7 amd64
Контактная информация:

Re: Программа для создания кроссвордов

Сообщение xwicked »

Следующая версия программы 0.2.9. В ней я походу вышел за предел стека :laugh: : Ошибку я уже нашёл.

- Оптимизирован алгоритм выбора слов в 2,5 раза;
- Добавлена возможность экспорта кроссворда в файл, форматов: HTML, PDF, PostScript, текстовый формат AcrossLite, OpenKlest(*.ok);
- Добавлена возможность поворота кроссворда;
- Добавлена возможность автоматического создания и экспорта кроссворда в форматы HTML, PDF, PostScript, текстовый формат AcrossLite, OpenKlest(*.ok);
- Добавлена возможность импорта кроссворда в формате OpenKlest(*.ok);
Экспорт в PDF и PostScript осуществляется достаточно просто: подготавливается HTML-страница и распечатывается на принтере, но печать идёт не на физическое устройство а в файл :)

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

    QTextEdit textEdit;
    textEdit.setHtml(strHTML);
#ifndef QT_NO_PRINTER

    QPrinter printer(QPrinter::HighResolution);//Настройка принтера на  высокое качество
    printer.setOutputFormat(QPrinter::PostScriptFormat);//Выбор печати в файл PostScript
    printer.setOutputFileName(sExportName);//Присваивание имени файла
    textEdit.document()->print(&printer);//Сама печать

#endif
Хотелось бы отметить, что с появлением функции экспорта кроссворда в Across Lite TXT, у программы across lite 2.0 появилась возможность отгадывать нетолько американские кроссворды, но и классические, правда всё в английском языке. Можете поэксперементировать, ради интереса :rolleyes:
Спасибо сказали:
Аватара пользователя
xwicked
Сообщения: 115
ОС: GNU / Linux Debian 7 amd64
Контактная информация:

Re: Программа для создания кроссвордов

Сообщение xwicked »

Здравствуйте! Как я избавился от переполнения стека:

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

ushort usTable[50][50];//Массив сетки кроссворда
Если делал больше 50-ти, то отваливался импорт файла и запуск руководства пользователя :D
Изменил на:

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

ushort **usTable;//Массив сетки кроссворда
...
//Создание двумерного динамического массива
        usTable = new ushort*[TableKlestCrossword->rowCount()];

        for(int i = 0; i < TableKlestCrossword->rowCount(); i++)
            usTable[i] = new ushort[TableKlestCrossword->columnCount()];
Далее введены константы:

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

//Определение путей констант, в соответствии с системой
#if defined(Q_WS_WIN)

    #define PATH_TMP_SET QApplication::applicationDirPath() + "/settings.xwsc"
    #define PATH_SHARE_DOC QApplication::applicationDirPath()
    #define PATH_SHARE_APP QApplication::applicationDirPath()
    #define PATH_TMP_STAT QApplication::applicationDirPath() + "/cstat.html"


#elif defined(Q_WS_X11)

    #define PATH_TMP_SET "/tmp/klest-crossword-0.3.7/settings.xwsc"
    #define PATH_SHARE_DOC "/usr/share/doc/klest-crossword-0.3.7"
    #define PATH_SHARE_APP "/usr/share/klest-crossword-0.3.7"
    #define PATH_TMP_STAT "/tmp/klest-crossword-0.3.7/cstat.html"

#elif defined(Q_WS_MAC)

    #define PATH_TMP_SET QApplication::applicationDirPath() + "/settings.xwsc"
    #define PATH_SHARE_DOC QApplication::applicationDirPath()
    #define PATH_SHARE_APP QApplication::applicationDirPath()
    #define PATH_TMP_STAT QApplication::applicationDirPath() + "/cstat.html"


#endif

//Пути для разработки и отладки программы
/*#define PATH_TMP_SET QApplication::applicationDirPath() + "/settings.xwsc"
#define PATH_SHARE_DOC QApplication::applicationDirPath()
#define PATH_SHARE_APP QApplication::applicationDirPath()
#define PATH_TMP_STAT QApplication::applicationDirPath() + "/cstat.html"*/

#define MODE_VIEW true
#define MODE_EDIT false

#define ACROSS_ENABLE true
#define ACROSS_DISABLE false

#define LANGUAGE_RUSSIAN true
#define LANGUAGE_ENGLISH false

#define TOOLBAR_SHOW true
#define TOOLBAR_HIDE false

#define EXPORT_YES true
#define EXPORT_NO false

#define TYPE_PDF 0
#define TYPE_POST_SCRIPT 1
Что позволило пути в программе менять всего один раз :) Так же появилась возможность убрать лишние условия и оформить в switch:

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

        switch(iTypeExport)
        {
        case TYPE_PDF:
            sFilter = ".pdf";
            break;

        case TYPE_POST_SCRIPT:
            sFilter = ".ps";
            break;

        case TYPE_HTML:
            sFilter = ".html";
            break;

        case TYPE_TXT:
            sFilter = ".txt";
            break;

        case TYPE_JPG:
            sFilter = ".jpg";
            break;

        case TYPE_JPEG:
            sFilter = ".jpeg";
            break;

        case TYPE_BMP:
            sFilter = ".bmp";
            break;

        case TYPE_TIFF:
            sFilter = ".tiff";
            break;

        case TYPE_PNG:
            sFilter = ".png";
            break;

        case TYPE_XPM:
            sFilter = ".xpm";
            break;

        case TYPE_XBM:
            sFilter = ".xbm";
            break;

        case TYPE_PPM:
            sFilter = ".ppm";
            break;

        case TYPE_OPEN_KLEST:
            sFilter = ".ok";
            break;
        }
Введение структуры файла свойств:

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

//Структура файла свойств программы
struct TFileOptions
{
     bool bModeWork,//Режим работы программы
          bLanguageProgram,//Язык программы
          bStateStandardToolbar,//Состояние показа стандартной панели
          bStateExport,//Состояние экспортирования
          bCurrentDictionary;//Текущий словарь
     QString sModePassword,//Пароль режима
             sPathCrossword,//Путь для кроссвордов
             sPathExport,//Путь для экспорта
             sPathTemplate;//Путь для шаблонов
     int iNumberTimes,//Количество раз
         iTypeExport;//Тип экспорта
};
Скачать 0.3.7. На данный момент это последняя версия, прошу...
Спасибо сказали:
Аватара пользователя
RasenHerz
Сообщения: 1341
ОС: Arch Linux amd64

Re: Программа для создания кроссвордов

Сообщение RasenHerz »

За константы в виде #define'ов надо бить линейкой по рукам (почему ищите сами), Всякие PATH_SHARE_DOC вообще должны определятся системой сборки программы, но никак не программистом в сорцах. switch в данном случае прекрасно заменится на ассоциативный массив и поиск ключа в нем. а "Введение структуры файла свойств" заменяется использованием класса QSettings.
Спасибо сказали:
Аватара пользователя
xwicked
Сообщения: 115
ОС: GNU / Linux Debian 7 amd64
Контактная информация:

Re: Программа для создания кроссвордов

Сообщение xwicked »

RasenHerz писал(а):
13.02.2012 01:21
За константы в виде #define'ов надо бить линейкой по рукам ... а "Введение структуры файла свойств" заменяется использованием класса QSettings.
ну ну:

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

//ffmpeg/libav-0.5.6/ffplay.c
#define MAX_VIDEOQ_SIZE (5 * 256 * 1024)//Очень и очень удобственно :)
#define MAX_AUDIOQ_SIZE (5 * 16 * 1024)
#define MAX_SUBTITLEQ_SIZE (5 * 16 * 1024)

/* SDL audio buffer size, in samples. Should be small to have precise
   A/V sync as SDL does not have hardware buffer fullness info. */
#define SDL_AUDIO_BUFFER_SIZE 1024

/* no AV sync correction is done if below the AV sync threshold */
#define AV_SYNC_THRESHOLD 0.01
/* no AV correction is done if too big error */
#define AV_NOSYNC_THRESHOLD 10.0

/* maximum audio speed change to get correct sync */
#define SAMPLE_CORRECTION_PERCENT_MAX 10

/* we use about AUDIO_DIFF_AVG_NB A-V differences to make the average */
#define AUDIO_DIFF_AVG_NB   20

/* NOTE: the size must be big enough to compensate the hardware audio buffersize size */
#define SAMPLE_ARRAY_SIZE (2*65536)
QSettings - обязательно.
Спасибо сказали:
Аватара пользователя
Minton
Сообщения: 1588
Статус: openSUSE Localization Team
ОС: openSUSE Tumbleweed x86-64

Re: Программа для создания кроссвордов

Сообщение Minton »

Не-не-не, речь про вот это:

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

 #define PATH_TMP_SET "/tmp/klest-crossword-0.3.7/settings.xwsc"
    #define PATH_SHARE_DOC "/usr/share/doc/klest-crossword-0.3.7"
    #define PATH_SHARE_APP "/usr/share/klest-crossword-0.3.7"
    #define PATH_TMP_STAT "/tmp/klest-crossword-0.3.7/cstat.html"

За хардкоженные пути бьют линейкой по рукам, это точно.
Русский раздел на forums.opensuse.org :)

"Настоящие мужчины используют поиск" ©Goodvin
Спасибо сказали:
Аватара пользователя
xwicked
Сообщения: 115
ОС: GNU / Linux Debian 7 amd64
Контактная информация:

Re: Программа для создания кроссвордов

Сообщение xwicked »

Minton писал(а):
13.02.2012 20:43
...
За хардкоженные пути бьют линейкой по рукам, это точно.
Если это про

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

./configure --prefix /usr/path
, то буду гуглить.
Спасибо сказали:
Аватара пользователя
RasenHerz
Сообщения: 1341
ОС: Arch Linux amd64

Re: Программа для создания кроссвордов

Сообщение RasenHerz »

xwicked писал(а):
13.02.2012 02:08
ну ну:

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

//ffmpeg/libav-0.5.6/ffplay.c
#define MAX_VIDEOQ_SIZE (5 * 256 * 1024)//Очень и очень удобственно :)
#define MAX_AUDIOQ_SIZE (5 * 16 * 1024)
#define MAX_SUBTITLEQ_SIZE (5 * 16 * 1024)

/* SDL audio buffer size, in samples. Should be small to have precise
   A/V sync as SDL does not have hardware buffer fullness info. */
#define SDL_AUDIO_BUFFER_SIZE 1024

/* no AV sync correction is done if below the AV sync threshold */
#define AV_SYNC_THRESHOLD 0.01
/* no AV correction is done if too big error */
#define AV_NOSYNC_THRESHOLD 10.0

/* maximum audio speed change to get correct sync */
#define SAMPLE_CORRECTION_PERCENT_MAX 10

/* we use about AUDIO_DIFF_AVG_NB A-V differences to make the average */
#define AUDIO_DIFF_AVG_NB   20

/* NOTE: the size must be big enough to compensate the hardware audio buffersize size */
#define SAMPLE_ARRAY_SIZE (2*65536)


И давно ffmpeg написана на C++?) Это же С, там define'ы используются повсеместно, в случае C++ это пережиток прошлого и их использование необходимо свести к минимуму. Вот тут и тут расписано зачем и почему.

P.S. не подумайте что я придираюсь, просто хочется чтобы на C++ писали грамотно.
Спасибо сказали:
Аватара пользователя
xwicked
Сообщения: 115
ОС: GNU / Linux Debian 7 amd64
Контактная информация:

Re: Программа для создания кроссвордов

Сообщение xwicked »

RasenHerz писал(а):
15.02.2012 16:42
...
И давно ffmpeg написана на C++?) Это же С, там define'ы используются повсеместно ...
P.S. не подумайте что я придираюсь, просто хочется чтобы на C++ писали грамотно.
ffmpeg написана на C++?
Это же С,
на C++?
Это же С
define'ы используются повсеместно
ffmpeg написана на С
Значит, в законченном варианте, моей программе ничего не угрожает :rolleyes:
Поделюсь секретом: я хочу в будущем полностью разделить логику от ифейса. Это значит максимально возможное количество кода переписать на чистом С а то, что не получиться - на C++. Чтобы приобрести статус trueЫ. А функцию составления кроссворда выгрузить в разделяемую библиотеку и опубликовать её под BSD. Во как!
ЗЫ: значит у меня всё в норме :)
Спасибо сказали:
Аватара пользователя
xwicked
Сообщения: 115
ОС: GNU / Linux Debian 7 amd64
Контактная информация:

Re: Программа для создания кроссвордов

Сообщение xwicked »

Нагуглил:

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

#./configure
# installation paths
prefix_default="/usr/local"
bindir_default='${prefix}/bin'
datadir_default='${prefix}/share/ffmpeg'
incdir_default='${prefix}/include'
libdir_default='${prefix}/lib'
mandir_default='${prefix}/share/man'
shlibdir_default="$libdir_default"
но, ближайшие полгода я этим заниматься не буду :mellow: .
В приведённом выше коде возможна только одна установка, у меня же можно установить несколько разных версий, которые абсолютно не будут друг другу мешать, это не unix-way, поэтому я крепко над этим задумаюсь.
Спасибо сказали:
Аватара пользователя
Voral
Сообщения: 1205
ОС: Debian Wheezy (amd64)
Контактная информация:

Re: Программа для создания кроссвордов

Сообщение Voral »

xwicked писал(а):
15.02.2012 23:45
Поделюсь секретом: я хочу в будущем полностью разделить логику от ифейса. Это значит максимально возможное количество кода переписать на чистом С а то, что не получиться - на C++. Чтобы приобрести статус trueЫ.

Хотел бы я посомтреть на Ъ, который переписывает работающий проект на C просто ради статуса. Это раз.
Ребята из команды Qt дали в руки достаточно стандартных механизмов для разделения логики и интерфейсов. Использовать для этого другой язык программирования совершенно нет необходимости. Это двас.

Есественно это ИМХО

На сколько я помню ваш код (правда, я не очень уверн, что правильно помню), там вся игровая информация храниться в ячейках таблицы (плюс тот массив о, котором недавно говорили). Убирайте все это в модель, а модель уже связывайте с таблицей. - это будет один из шагов разделения.
То что не убивает нас, делает нас сильнее! © Ницше.
When life puts you in tough situations, don’t say "why me". Just say "try me © ?
Спасибо сказали:
Аватара пользователя
xwicked
Сообщения: 115
ОС: GNU / Linux Debian 7 amd64
Контактная информация:

Re: Программа для создания кроссвордов

Сообщение xwicked »

Voral писал(а):
16.02.2012 08:31
xwicked писал(а):
15.02.2012 23:45
Поделюсь секретом: я хочу в будущем полностью разделить логику от ифейса. Это значит максимально возможное количество кода переписать на чистом С а то, что не получиться - на C++. Чтобы приобрести статус trueЫ.

Хотел бы я посомтреть на Ъ, который переписывает работающий проект на C просто ради статуса. Это раз.
Ребята из команды Qt дали в руки достаточно стандартных механизмов для разделения логики и интерфейсов. Использовать для этого другой язык программирования совершенно нет необходимости. Это двас.
Есественно это ИМХО
На сколько я помню ваш код (правда, я не очень уверн, что правильно помню), там вся игровая информация храниться в ячейках таблицы (плюс тот массив о, котором недавно говорили). Убирайте все это в модель, а модель уже связывайте с таблицей. - это будет один из шагов разделения.
trueЫ = не безвоздушное пространство, коим я сейчас не являюсь в глазах всех, кто так или иначе причисляет себя к OpenSource. Другими словами Ы(интерпрайз), то есть не студент-красноглазик. Получается сейчас меня здесь нет. Вот, чтобы меня начали воспринимать как человека, я и хочу сделать всё по-максимуму. Всё просто :laugh:
Спасибо сказали:
Аватара пользователя
Voral
Сообщения: 1205
ОС: Debian Wheezy (amd64)
Контактная информация:

Re: Программа для создания кроссвордов

Сообщение Voral »

xwicked писал(а):
16.02.2012 20:13
Вот, чтобы меня начали воспринимать как человека, я и хочу сделать всё по-максимуму. Всё просто :laugh:

Ну так и сделайте красивый код на том языке на котором написана программа. Вылизывайте и не оставляйте на потом.
ИМХО
То что не убивает нас, делает нас сильнее! © Ницше.
When life puts you in tough situations, don’t say "why me". Just say "try me © ?
Спасибо сказали:
Аватара пользователя
xwicked
Сообщения: 115
ОС: GNU / Linux Debian 7 amd64
Контактная информация:

Re: Программа для создания кроссвордов

Сообщение xwicked »

Voral писал(а):
16.02.2012 20:21
... Ну так и сделайте красивый код на том языке на котором написана программа. Вылизывайте и не оставляйте на потом.
ИМХО
На чистом C я буду писать ещё не скоро просто мыслями поделился :rolleyes:
Я к git'у кроссворда добавил кроме master-ветки, ветку current и теперь там код будет самый свежий. Есть небольшой план по объектной ориентации. Кто что может сказать про свойства Q_PROPERTY - они не будут лишними или смотря где и как?
Спасибо сказали:
Ответить