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
>Создать модуль дизайнера &TQt;, и использовать его для создания приложений &GUI; в дизайнере и подключать его к программе динамически. Подробности смотрите в разделе <link linkend="prog-designer-plugin"
>Создание модулей дизайнера &TQt;</link
>. </para>
</listitem>
</itemizedlist>
<para
>Два последних метода приемлемы для разработчиков &TQt; и &tde;, но &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
> предназначен для разработчиков &TQt; и предоставляет реальную кросс+платформенность. Он может использоваться не только на платформах &UNIX;, но также и на &Windows; и &MacOS;. </para>
<para
>Чтобы создать программу, использующую библиотеку &kugar;, она должна быть связана с разделяемой библиотекой <filename
>libkugar.so</filename
>, которая обеспечивает работу &kugar; на всех платформах &UNIX;. </para>
<para
>Включить файлы <filename
>kugarqt.h</filename
> и <filename
>kugar.h</filename
> для программ &TQt; и &tde; соответственно. </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 TQString &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 TQIODevice &amp;<parameter
>data_io_device</parameter
></paramdef
> </funcprototype>
<funcsynopsisinfo
>Установить данные отчёта из файла <replaceable
>data_io_device</replaceable
>. Устройство IO может быть любым преемником класса <classname
>TQIODevice</classname
>. Например, для получения записей непосредственно из базы данных, создайте преемника <classname
>TQIODevice</classname
> и переопределите у него необходимую функциональность. </funcsynopsisinfo>
</funcsynopsis>
<funcsynopsis>
<funcprototype
><funcdef
>bool <function
>setReportTemplate</function
></funcdef
> <paramdef
>const TQString &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 TQIODevice &amp;<parameter
>template_io_device</parameter
></paramdef
> </funcprototype>
<funcsynopsisinfo
>Установить шаблон отчёта из файла <replaceable
>template_io_device</replaceable
>. Устройство IO может быть любым преемником класса <classname
>TQIODevice</classname
>. Например, для получения шаблона отчёта из сети или базы данных, создайте преемника <classname
>TQIODevice</classname
> и переопределите у него необходимую функциональность. </funcsynopsisinfo>
</funcsynopsis>
</sect1>
<sect1 id="prog-designer-plugin">
<title
>Создание модуля дизайнера &TQt;</title>
<para
>Этот код примера создан как дополнение к модулю дизайнера. Код ниже создаёт модуль для графического элемента &kde; <classname
>KReportViewer</classname
>. </para>
<para
>Если желателен графический элемент &TQt;, замените <classname
>KReportViewer</classname
> на <classname
>MReportViewer</classname
> и <filename
>kugar.h</filename
> на <filename
>kugarqt.h</filename
> в коде модуля. </para>
<sect2 id="plugin-usage">
<title
>Использование модуля</title>
<para
>Модули дизайнера позволят использовать Дизайнер &TQt; для помещения графического элемента <classname
>KReportViewer</classname
> в окно, и корректно просматривать его. </para>
<para
>Программы, которые используют этот модуль, должны быть динамически с ним связаны. Соответствующая библиотека называется <filename
>libkugar_plugin.so</filename
>. Графические элементы или диалоги, которые включают графический элемент <classname
>KReportViewer</classname
> должны включать &lt;kugar.h&gt; в реализацию и иметь предварительно описание класса <classname
>class KReportViewer</classname
>. Включения могут быть сделаны с помощью Исследователь объектов дизайнера &TQt; (вкладка источник). </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;
TQWidget *create (const TQString &amp; classname, TQWidget * parent =
0, const char *name = 0);
TQString group (const TQString &amp;) const;
QIconSet iconSet (const TQString &amp;) const;
TQString includeFile (const TQString &amp;) const;
TQString toolTip (const TQString &amp;) const;
TQString whatsThis (const TQString &amp;) const;
bool isContainer (const TQString &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;
}
TQWidget* KugarWidgetPlugin::create (const TQString &amp; key, TQWidget * parent,
const char *name)
{
if (key == "KReportViewer")
return new KReportViewer (parent, name);
return 0;
}
TQString KugarWidgetPlugin::group (const TQString &amp; feature) const
{
if (feature == "KReportViewer")
return "Display";
return TQString::null;
}
QIconSet KugarWidgetPlugin::iconSet (const TQString &amp;) const
{
return QIconSet (QPixmap (kugar_pixmap));
}
TQString KugarWidgetPlugin::includeFile (const TQString &amp; feature) const
{
if (feature == "KReportViewer")
return "kugar.h";
return TQString::null;
}
TQString KugarWidgetPlugin::toolTip (const TQString &amp; feature) const
{
if (feature == "KReportViewer")
return "Kugar report viewer widget";
return TQString::null;
}
TQString KugarWidgetPlugin::whatsThis (const TQString &amp; feature) const
{
if (feature == "KReportViewer")
return "A widget to view xml reports";
return TQString::null;
}
bool KugarWidgetPlugin::isContainer (const TQString &amp;) const
{
return FALSE;
}
TQ_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>