You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
koffice-i18n/koffice-i18n-ru/docs/koffice/kugar/progguide.docbook

675 lines
19 KiB

This file contains ambiguous Unicode characters!

This file contains ambiguous Unicode characters that may be confused with others in your current locale. If your use case is intentional and legitimate, you can safely ignore this warning. Use the Escape button to highlight these characters.

<!-- If you want to validate or edit this document separately, uncomment
this prolog
<?xml version="1.0" ?>
<!DOCTYPE chapter PUBLIC "-//KDE//DTD DocBook XML V4.1-Based Variant V1.0//EN" "dtd/kdex.dtd">
-->
<chapter id="prog-guide">
<chapterinfo>
<authorgroup>
<author
><firstname
>Alexander</firstname
> <surname
>Dymo</surname
> <affiliation
> <address
><email
>cloudtemple@mksat.net </email
></address>
</affiliation>
</author>
<author
><firstname
>Phil</firstname
> <surname
>Thompson</surname
> <affiliation
> <address
><email
>phil@river-bank.demon.co.uk </email
></address>
</affiliation>
</author>
<othercredit role="translator"
><firstname
>Олег</firstname
><surname
>Баталов</surname
><affiliation
><address
><email
>olegbatalov@mail.ru</email
></address
></affiliation
><contrib
>Перевод на русский язык</contrib
></othercredit
>
</authorgroup>
</chapterinfo>
<title
>Руководство программиста</title>
<sect1 id="how-to-use-in-progs">
<title
>Как использовать &kugar; в ваших программах для создания отчётов</title>
<itemizedlist>
<title
>Существуют несколько способов использования &kugar;</title>
<listitem>
<para
>Создать временный файл и заполнить его данными, организованными согласно <link linkend="kugardata-dtd"
>Определению типа документа (DTD) KugarData</link
>. Затем вызвать в командной оболочке <command
> kugar</command
> (<cmdsynopsis
> <command
>kugar</command
> <group
> <option
>-d <replaceable
>файл данных Kugar</replaceable
></option
> </group
><group
> <option
>-r <replaceable
>Файл шаблона Kugar </replaceable
> </option
> </group
> </cmdsynopsis
>) для предварительного просмотра и распечатки отчёта. Подробноt описание смотрите в разделе <link linkend="prog-using-for-preview"
>Использование оболочки &kugar; для предварительного просмотра отчётов</link
> </para>
</listitem>
<listitem>
<para
>Использовать &kugar; непосредственно в коде приложения. Смотрите подробности в разделе <link linkend="prog-using-widget"
>Использование классов &kugar; в отчётах</link
> </para>
</listitem>
<listitem>
<para
>Создать модуль дизайнера &Qt;, и использовать его для создания приложений &GUI; в дизайнере и подключать его к программе динамически. Подробности смотрите в разделе <link linkend="prog-designer-plugin"
>Создание модулей дизайнера &Qt;</link
>. </para>
</listitem>
</itemizedlist>
<para
>Два последних метода приемлемы для разработчиков &Qt; и &kde;, но &kugar; спроектирован генератором отчётов, независящим от языка программирования и/или <acronym
>IDE</acronym
>. Он использует формат &XML; для описания шаблона отчёта и фала данных. Так что любая программа может произвести вывод в в формат файла данных &kugar;, как описано в <link linkend="kugardata-dtd"
>KugarData <acronym
>DTD</acronym
></link
> или даже в формат файла шаблона отчёта (см. <link linkend="template-dtd"
>KugarTemplate <acronym
>DTD</acronym
></link
>). Оболочка &kugar; (программа просмотра отчётов) может использоваться для предварительного просмотра и печати созданных отчётов. </para>
</sect1>
<sect1 id="prog-using-for-preview">
<title
>Использование оболочки &kugar; для предварительного просмотра отчётов</title>
<orderedlist>
<title
>Способ создания и предварительного просмотра (печати) отчёта состоит из:</title>
<listitem>
<para
>Создания с помощью &kudesigner; шаблона отчёта. </para>
</listitem>
<listitem>
<para
>Создания файла данных со значениями столбцов для секций в отчёте. Используя <link linkend="kugardata-dtd"
>KugarData <acronym
>DTD</acronym
></link
> для производства корректных файлов данных. </para>
</listitem>
<listitem>
<para
>Выполнения оболочки &kugar; для предварительного просмотра и печати отчёта. Например, для этого в языке C или C++ вызовите:</para>
<programlisting
><function
>system(<option
>"kugar -r <replaceable
>template_file.kut</replaceable
>-d <replaceable
>data_file.kud</replaceable
>"</option
>)</function
>.
</programlisting>
<para
>Не забудьте включить файл <filename class="headerfile"
>stdlib.h</filename
>. </para>
</listitem>
</orderedlist>
</sect1>
<sect1 id="prog-using-widget">
<title
>Использования в отчётах классов &kugar;</title>
<para
>Библиотека &kugar; включает два класса визуальных элементов для использования. </para>
<para
>Класс <classname
>KReportViewer</classname
> предназначен для разработчиков &kde;. Он поддерживает систему печати &kde; и локализацию &UNIX; через вызовы функции <function
>i18n()</function
>. </para>
<para
><classname
>MReportViewer</classname
> предназначен для разработчиков &Qt; и предоставляет реальную кросс+платформенность. Он может использоваться не только на платформах &UNIX;, но также и на &Windows; и &MacOS;. </para>
<para
>Чтобы создать программу, использующую библиотеку &kugar;, она должна быть связана с разделяемой библиотекой <filename
>libkugar.so</filename
>, которая обеспечивает работу &kugar; на всех платформах &UNIX;. </para>
<para
>Включить файлы <filename
>kugarqt.h</filename
> и <filename
>kugar.h</filename
> для программ &Qt; и &kde; соответственно. </para>
<para
>Для подробных примеров использования классов &kugar;, смотрите каталог <filename class="directory"
>/shell</filename
> в исходных текстах &kugar;. </para>
<para
><classname
>MReportViewer</classname
> (а также <classname
>KReportViewer</classname
>) содержат несколько открытых методов, которые можно использовать. </para>
<funcsynopsis>
<funcprototype>
<funcdef
>void <function
>renderReport</function
> </funcdef>
<void/>
</funcprototype>
<funcsynopsisinfo
>Вывести отчёт на экран.</funcsynopsisinfo>
</funcsynopsis>
<funcsynopsis>
<funcprototype>
<funcdef
>void <function
>printReport</function
></funcdef>
<void/>
</funcprototype>
<funcsynopsisinfo
>Вызвать диалог печати для распечатки отчёта.</funcsynopsisinfo>
</funcsynopsis>
<funcsynopsis>
<funcprototype>
<funcdef
>void <function
>clearReport</function
></funcdef>
<void/>
</funcprototype>
<funcsynopsisinfo
>Очистить отчёт на экране и удалить его данные. Вызывайте его перед открытием нового отчёта.</funcsynopsisinfo>
</funcsynopsis>
<funcsynopsis>
<funcprototype
><funcdef
>bool <function
>setReportData</function
></funcdef
> <paramdef
>const QString &amp;<parameter
>data_file_name</parameter
></paramdef
> </funcprototype>
<funcsynopsisinfo
>Установить данные отчёте из файла <replaceable
>data_file_name</replaceable
>.</funcsynopsisinfo>
</funcsynopsis>
<funcsynopsis>
<funcprototype
><funcdef
>bool <function
>setReportData</function
></funcdef
> <paramdef
>const QIODevice &amp;<parameter
>data_io_device</parameter
></paramdef
> </funcprototype>
<funcsynopsisinfo
>Установить данные отчёта из файла <replaceable
>data_io_device</replaceable
>. Устройство IO может быть любым преемником класса <classname
>QIODevice</classname
>. Например, для получения записей непосредственно из базы данных, создайте преемника <classname
>QIODevice</classname
> и переопределите у него необходимую функциональность. </funcsynopsisinfo>
</funcsynopsis>
<funcsynopsis>
<funcprototype
><funcdef
>bool <function
>setReportTemplate</function
></funcdef
> <paramdef
>const QString &amp;<parameter
>template_file_name</parameter
></paramdef
> </funcprototype>
<funcsynopsisinfo
>Установить шаблон отчёта из файла <replaceable
>template_file_name</replaceable
></funcsynopsisinfo>
</funcsynopsis>
<funcsynopsis>
<funcprototype
><funcdef
>bool <function
>setReportTemplate</function
></funcdef
> <paramdef
>const QIODevice &amp;<parameter
>template_io_device</parameter
></paramdef
> </funcprototype>
<funcsynopsisinfo
>Установить шаблон отчёта из файла <replaceable
>template_io_device</replaceable
>. Устройство IO может быть любым преемником класса <classname
>QIODevice</classname
>. Например, для получения шаблона отчёта из сети или базы данных, создайте преемника <classname
>QIODevice</classname
> и переопределите у него необходимую функциональность. </funcsynopsisinfo>
</funcsynopsis>
</sect1>
<sect1 id="prog-designer-plugin">
<title
>Создание модуля дизайнера &Qt;</title>
<para
>Этот код примера создан как дополнение к модулю дизайнера. Код ниже создаёт модуль для графического элемента &kde; <classname
>KReportViewer</classname
>. </para>
<para
>Если желателен графический элемент &Qt;, замените <classname
>KReportViewer</classname
> на <classname
>MReportViewer</classname
> и <filename
>kugar.h</filename
> на <filename
>kugarqt.h</filename
> в коде модуля. </para>
<sect2 id="plugin-usage">
<title
>Использование модуля</title>
<para
>Модули дизайнера позволят использовать Дизайнер &Qt; для помещения графического элемента <classname
>KReportViewer</classname
> в окно, и корректно просматривать его. </para>
<para
>Программы, которые используют этот модуль, должны быть динамически с ним связаны. Соответствующая библиотека называется <filename
>libkugar_plugin.so</filename
>. Графические элементы или диалоги, которые включают графический элемент <classname
>KReportViewer</classname
> должны включать &lt;kugar.h&gt; в реализацию и иметь предварительно описание класса <classname
>class KReportViewer</classname
>. Включения могут быть сделаны с помощью Исследователь объектов дизайнера &Qt; (вкладка источник). </para>
<para
>Для создание модуля выполните: <cmdsynopsis
><command
>qmake</command
> <arg
>kugar_plugin.pro</arg
> </cmdsynopsis>
<cmdsynopsis>
<command
>make</command>
</cmdsynopsis>
</para>
</sect2>
<sect2 id="plugin-code">
<title
>Код модуля</title>
<segmentedlist>
<title
>Код модуля находится в трёх файлах:</title>
<segtitle
><link linkend="plugin-h-source"
>kugar_plugin.h</link
></segtitle
> <segtitle
><link linkend="plugin-cpp-source"
>kugar_plugin.cpp</link
></segtitle
> <segtitle
><link linkend="plugin-pro-source"
>kugar_plugin.pro</link
></segtitle
> <seglistitem
> <seg
>A header file for <classname
>KugarWidgetPlugin</classname
>, <classname
>QWidgetPlugin</classname
> successor;</seg
> <seg
>A source file for <classname
>KugarWidgetPlugin</classname
>, <classname
>QWidgetPlugin</classname
> successor;</seg
> <seg
>Project file for <application
>QMake</application
> utility.</seg
> </seglistitem
> </segmentedlist>
<sect3 id="plugin-h-source">
<title
>kugar_plugin.h</title>
<programlisting
>#include &lt;qwidgetplugin.h
>&gt;
class KugarWidgetPlugin:public QWidgetPlugin
{
public:
KugarWidgetPlugin ();
QStringList keys () const;
QWidget *create (const QString &amp; classname, QWidget * parent =
0, const char *name = 0);
QString group (const QString &amp;) const;
QIconSet iconSet (const QString &amp;) const;
QString includeFile (const QString &amp;) const;
QString toolTip (const QString &amp;) const;
QString whatsThis (const QString &amp;) const;
bool isContainer (const QString &amp;) const;
};
</programlisting>
</sect3>
<sect3 id="plugin-cpp-source">
<title
>kugar_plugin.cpp</title>
<programlisting
>#include "kugar_plugin.h"
#include &lt;kugar.h&gt;
static const char *kugar_pixmap[] = {
"22 22 127 2",
".d c #000000",
".c c #131313",
".b c #282828",
".a c #434241",
".e c #4e463a",
".# c #595551",
".G c #66553b",
"#F c #68635f",
"#R c #6b4f23",
"#q c #6e6862",
"#M c #6f5229",
".n c #6f6146",
".w c #735310",
".V c #755c2a",
".I c #775f34",
".0 c #77694a",
"#n c #7e6434",
".o c #806f50",
"#C c #835d2d",
".P c #837c75",
"#B c #85653a",
"#k c #85827e",
".x c #866d46",
".U c #877967",
".X c #888888",
".F c #89724d",
"#x c #8b6d2a",
".S c #8d7759",
".z c #8e733b",
"#L c #906e49",
"#Q c #947b56",
".r c #948058",
".J c #957844",
".4 c #987736",
".q c #998969",
".k c #999897",
".R c #9a8a75",
"#i c #9f8348",
"#I c #a37c4b",
".u c #a38d66",
".E c #a58558",
"#A c #a8834b",
".s c #a9967a",
".t c #aa9467",
".C c #ae9f8d",
"#6 c #afa49d",
"#5 c #afa9a4",
"#W c #b18e4d",
".K c #b1935a",
".B c #b39660",
"#V c #b49866",
"#a c #b49d6c",
"## c #b49d72",
".j c #b5b4b4",
"#0 c #b7a597",
".O c #b9b1a9",
".L c #bb9c61",
".M c #bb9e6b",
".A c #bca778",
"#j c #bea46b",
".T c #bfb37d",
".v c #c0b391",
".W c #c3a262",
".i c #c4c4c4",
"#m c #c5b7aa",
"#8 c #c69f80",
".D c #c6b79b",
"#3 c #c7a589",
".7 c #c7a76c",
"#u c #c7bbaf",
".6 c #c8ad74",
"#7 c #c8b7a9",
"#r c #c8beb5",
".m c #c8c8c8",
"#U c #cbad96",
"#f c #ccb681",
"#h c #cdac6c",
"#P c #cdb49f",
"#X c #cdb8a6",
"#H c #ceb7a4",
".y c #ceb892",
".N c #cecac3",
"#Z c #cfb16f",
"#O c #cfbdad",
".Z c #cfc7c0",
"#w c #d0bcab",
".5 c #d1ad6b",
"#s c #d1bfb1",
".h c #d5d5d5",
"#l c #d6cdc6",
"#D c #d8b36e",
".H c #dac592",
"#t c #dbb977",
".g c #dcdcdc",
".1 c #e0dcc1",
".f c #e0e0df",
"#1 c #e3c8b1",
"#S c #e4cdb9",
".3 c #e4d9a3",
"#4 c #e6c1a1",
"#2 c #e7c4a5",
"#K c #e9c179",
"#g c #e9c47e",
"#Y c #e9c8ac",
".2 c #eae6c0",
"#T c #ebcdb3",
".Q c #ebd4b9",
"#E c #ecca87",
"#z c #ecd799",
".l c #ececeb",
"#G c #efd7c2",
"#e c #efe3ab",
".8 c #efe8e3",
"#v c #f1dcca",
"#. c #f2e2d4",
".p c #f4f4f4",
"#y c #f5daa0",
"#J c #f6cf7f",
".9 c #f7ede4",
"#p c #f9d995",
".Y c #fcf9f6",
"#d c #fefcc5",
"#c c #fefdda",
"#b c #fefee1",
"#N c #ffd685",
"#o c #fff0a9",
"Qt c #ffffff",
"QtQtQtQtQtQt.#.a.a.a.b.b.b.c.c.d.d.dQtQtQtQt",
"QtQtQtQtQtQt.e.f.g.g.f.g.g.h.i.j.d.k.dQtQtQt",
"QtQtQtQtQtQt.a.gQtQtQtQtQtQt.l.f.c.m.k.dQtQt",
"QtQtQtQtQt.n.n.n.n.n.o.g.pQtQt.l.bQt.m.k.dQt",
"QtQtQt.q.q.r.q.s.t.r.q.u.u.g.pQt.a.fQt.m.k.d",
"QtQt.s.s.v.w.x.y.y.t.z.A.t.B.i.p.#.a.b.c.d.d",
"Qt.C.C.D.E.F.G.A.H.F.I.J.K.L.M.i.p.l.N.O.P.d",
"Qt.s.v.Q.q.R.S.T.A.R.U.V.L.W.W.X.g.Y.f.Z.k.d",
".0.s.t.Q.1.U.R.2.3.S.U.4.5.6.6.7.j.8.9#..O.d",
".G##.V#a#b.1#c#c#d#e#f#g#h#i#j.W#k#l.9#.#m.d",
".G.4.F#n#c#c#c#d#d#o#p#g.x.w#i.L#q#r#.#.#s.d",
".e.J.J.I.3#d.H#j.6#f#p#t#n.w.E.L#q#u#.#v#w.d",
".G.A#x.z#y#z#A#B#B#C#D#E.4.4.6#h#F#m#v#G#H.d",
".o.s.A#j#E#t#I#I#I#C#A#J#p#p#K#t#F#m#v#G#H.d",
"Qt##.A.6.7#I#I#A.E#L#M.W#N#J#K.a.U#O#G.Q#P.d",
"Qt#a.M.L.J#A#I.4.E#Q.x#R#D#J#g.#.C#S.Q#T#U.d",
"QtQt#V.K.z#Q.s.S.x.S#B#M#W#E.a.U#X.Q#T#Y#U.d",
"QtQtQt.M#i#B.r#Q#Q.r#Q.z#Z.a#q#0#1#T#Y#2#3.d",
"QtQtQtQtQt#j.L.L.W.5#t.a.#.U#0#1#T#Y#2#4#3.d",
"QtQtQtQtQtQt.d#F#q#q#q.P.C#O#S.Q#T#Y#2#4#3.d",
"QtQtQtQtQtQt.d#5#5#6#6#0#7#w#H#P#U#U#3#3#8.d",
"QtQtQtQtQtQt.d.d.d.d.d.d.d.d.d.d.d.d.d.d.d.d"
};
KugarWidgetPlugin::KugarWidgetPlugin ()
{
}
QStringList KugarWidgetPlugin::keys () const
{
QStringList list;
list &lt;&lt; "KReportViewer";
return list;
}
QWidget* KugarWidgetPlugin::create (const QString &amp; key, QWidget * parent,
const char *name)
{
if (key == "KReportViewer")
return new KReportViewer (parent, name);
return 0;
}
QString KugarWidgetPlugin::group (const QString &amp; feature) const
{
if (feature == "KReportViewer")
return "Display";
return QString::null;
}
QIconSet KugarWidgetPlugin::iconSet (const QString &amp;) const
{
return QIconSet (QPixmap (kugar_pixmap));
}
QString KugarWidgetPlugin::includeFile (const QString &amp; feature) const
{
if (feature == "KReportViewer")
return "kugar.h";
return QString::null;
}
QString KugarWidgetPlugin::toolTip (const QString &amp; feature) const
{
if (feature == "KReportViewer")
return "Kugar report viewer widget";
return QString::null;
}
QString KugarWidgetPlugin::whatsThis (const QString &amp; feature) const
{
if (feature == "KReportViewer")
return "A widget to view xml reports";
return QString::null;
}
bool KugarWidgetPlugin::isContainer (const QString &amp;) const
{
return FALSE;
}
Q_EXPORT_PLUGIN( KugarWidgetPlugin )
</programlisting>
</sect3>
<sect3 id="plugin-pro-source">
<title
>kugar_plugin.pro</title>
<programlisting
>SOURCES += kugar_plugin.cpp
HEADERS += kugar_plugin.h
DESTDIR = $(TQTDIR)/plugins/designer
TARGET = kugar_plugin
target.path=$$plugins.path
isEmpty(target.path):target.path=$$QT_PREFIX/plugins
PROJECTNAME = KugarPlugin
TEMPLATE = lib
CONFIG += qt warn_on release plugin
unix:LIBS += -lkugar
LANGUAGE = C++
</programlisting>
</sect3>
</sect2>
</sect1>
</chapter>