diff options
Diffstat (limited to 'app_templates/kioslave')
-rw-r--r-- | app_templates/kioslave/AUTHORS | 1 | ||||
-rw-r--r-- | app_templates/kioslave/COPYING | 340 | ||||
-rw-r--r-- | app_templates/kioslave/ChangeLog | 0 | ||||
-rw-r--r-- | app_templates/kioslave/INSTALL | 43 | ||||
-rw-r--r-- | app_templates/kioslave/MANIFEST.in | 6 | ||||
-rw-r--r-- | app_templates/kioslave/NEWS | 0 | ||||
-rw-r--r-- | app_templates/kioslave/README | 0 | ||||
-rw-r--r-- | app_templates/kioslave/TODO | 0 | ||||
-rw-r--r-- | app_templates/kioslave/doc/en/index.docbook | 555 | ||||
-rwxr-xr-x | app_templates/kioslave/setup.py | 30 | ||||
-rw-r--r-- | app_templates/kioslave/src/kioslave.lsm | 16 | ||||
-rw-r--r-- | app_templates/kioslave/src/kioslave.protocol | 13 | ||||
-rwxr-xr-x | app_templates/kioslave/src/kioslave.py | 618 |
13 files changed, 1622 insertions, 0 deletions
diff --git a/app_templates/kioslave/AUTHORS b/app_templates/kioslave/AUTHORS new file mode 100644 index 0000000..0463c0d --- /dev/null +++ b/app_templates/kioslave/AUTHORS @@ -0,0 +1 @@ +$AUTHOR$ <$EMAIL$> diff --git a/app_templates/kioslave/COPYING b/app_templates/kioslave/COPYING new file mode 100644 index 0000000..c13faf0 --- /dev/null +++ b/app_templates/kioslave/COPYING @@ -0,0 +1,340 @@ + GNU GENERAL PUBLIC LICENSE + Version 2, June 1991 + + Copyright (C) 1989, 1991 Free Software Foundation, Inc. + 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA + Everyone is permitted to copy and distribute verbatim copies + of this license document, but changing it is not allowed. + + Preamble + + The licenses for most software are designed to take away your +freedom to share and change it. By contrast, the GNU General Public +License is intended to guarantee your freedom to share and change free +software--to make sure the software is free for all its users. This +General Public License applies to most of the Free Software +Foundation's software and to any other program whose authors commit to +using it. (Some other Free Software Foundation software is covered by +the GNU Library General Public License instead.) You can apply it to +your programs, too. + + When we speak of free software, we are referring to freedom, not +price. Our General Public Licenses are designed to make sure that you +have the freedom to distribute copies of free software (and charge for +this service if you wish), that you receive source code or can get it +if you want it, that you can change the software or use pieces of it +in new free programs; and that you know you can do these things. + + To protect your rights, we need to make restrictions that forbid +anyone to deny you these rights or to ask you to surrender the rights. +These restrictions translate to certain responsibilities for you if you +distribute copies of the software, or if you modify it. + + For example, if you distribute copies of such a program, whether +gratis or for a fee, you must give the recipients all the rights that +you have. You must make sure that they, too, receive or can get the +source code. And you must show them these terms so they know their +rights. + + We protect your rights with two steps: (1) copyright the software, and +(2) offer you this license which gives you legal permission to copy, +distribute and/or modify the software. + + Also, for each author's protection and ours, we want to make certain +that everyone understands that there is no warranty for this free +software. If the software is modified by someone else and passed on, we +want its recipients to know that what they have is not the original, so +that any problems introduced by others will not reflect on the original +authors' reputations. + + Finally, any free program is threatened constantly by software +patents. We wish to avoid the danger that redistributors of a free +program will individually obtain patent licenses, in effect making the +program proprietary. To prevent this, we have made it clear that any +patent must be licensed for everyone's free use or not licensed at all. + + The precise terms and conditions for copying, distribution and +modification follow. + + GNU GENERAL PUBLIC LICENSE + TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION + + 0. This License applies to any program or other work which contains +a notice placed by the copyright holder saying it may be distributed +under the terms of this General Public License. The "Program", below, +refers to any such program or work, and a "work based on the Program" +means either the Program or any derivative work under copyright law: +that is to say, a work containing the Program or a portion of it, +either verbatim or with modifications and/or translated into another +language. (Hereinafter, translation is included without limitation in +the term "modification".) Each licensee is addressed as "you". + +Activities other than copying, distribution and modification are not +covered by this License; they are outside its scope. The act of +running the Program is not restricted, and the output from the Program +is covered only if its contents constitute a work based on the +Program (independent of having been made by running the Program). +Whether that is true depends on what the Program does. + + 1. You may copy and distribute verbatim copies of the Program's +source code as you receive it, in any medium, provided that you +conspicuously and appropriately publish on each copy an appropriate +copyright notice and disclaimer of warranty; keep intact all the +notices that refer to this License and to the absence of any warranty; +and give any other recipients of the Program a copy of this License +along with the Program. + +You may charge a fee for the physical act of transferring a copy, and +you may at your option offer warranty protection in exchange for a fee. + + 2. You may modify your copy or copies of the Program or any portion +of it, thus forming a work based on the Program, and copy and +distribute such modifications or work under the terms of Section 1 +above, provided that you also meet all of these conditions: + + a) You must cause the modified files to carry prominent notices + stating that you changed the files and the date of any change. + + b) You must cause any work that you distribute or publish, that in + whole or in part contains or is derived from the Program or any + part thereof, to be licensed as a whole at no charge to all third + parties under the terms of this License. + + c) If the modified program normally reads commands interactively + when run, you must cause it, when started running for such + interactive use in the most ordinary way, to print or display an + announcement including an appropriate copyright notice and a + notice that there is no warranty (or else, saying that you provide + a warranty) and that users may redistribute the program under + these conditions, and telling the user how to view a copy of this + License. (Exception: if the Program itself is interactive but + does not normally print such an announcement, your work based on + the Program is not required to print an announcement.) + +These requirements apply to the modified work as a whole. If +identifiable sections of that work are not derived from the Program, +and can be reasonably considered independent and separate works in +themselves, then this License, and its terms, do not apply to those +sections when you distribute them as separate works. But when you +distribute the same sections as part of a whole which is a work based +on the Program, the distribution of the whole must be on the terms of +this License, whose permissions for other licensees extend to the +entire whole, and thus to each and every part regardless of who wrote it. + +Thus, it is not the intent of this section to claim rights or contest +your rights to work written entirely by you; rather, the intent is to +exercise the right to control the distribution of derivative or +collective works based on the Program. + +In addition, mere aggregation of another work not based on the Program +with the Program (or with a work based on the Program) on a volume of +a storage or distribution medium does not bring the other work under +the scope of this License. + + 3. You may copy and distribute the Program (or a work based on it, +under Section 2) in object code or executable form under the terms of +Sections 1 and 2 above provided that you also do one of the following: + + a) Accompany it with the complete corresponding machine-readable + source code, which must be distributed under the terms of Sections + 1 and 2 above on a medium customarily used for software interchange; or, + + b) Accompany it with a written offer, valid for at least three + years, to give any third party, for a charge no more than your + cost of physically performing source distribution, a complete + machine-readable copy of the corresponding source code, to be + distributed under the terms of Sections 1 and 2 above on a medium + customarily used for software interchange; or, + + c) Accompany it with the information you received as to the offer + to distribute corresponding source code. (This alternative is + allowed only for noncommercial distribution and only if you + received the program in object code or executable form with such + an offer, in accord with Subsection b above.) + +The source code for a work means the preferred form of the work for +making modifications to it. For an executable work, complete source +code means all the source code for all modules it contains, plus any +associated interface definition files, plus the scripts used to +control compilation and installation of the executable. However, as a +special exception, the source code distributed need not include +anything that is normally distributed (in either source or binary +form) with the major components (compiler, kernel, and so on) of the +operating system on which the executable runs, unless that component +itself accompanies the executable. + +If distribution of executable or object code is made by offering +access to copy from a designated place, then offering equivalent +access to copy the source code from the same place counts as +distribution of the source code, even though third parties are not +compelled to copy the source along with the object code. + + 4. You may not copy, modify, sublicense, or distribute the Program +except as expressly provided under this License. Any attempt +otherwise to copy, modify, sublicense or distribute the Program is +void, and will automatically terminate your rights under this License. +However, parties who have received copies, or rights, from you under +this License will not have their licenses terminated so long as such +parties remain in full compliance. + + 5. You are not required to accept this License, since you have not +signed it. However, nothing else grants you permission to modify or +distribute the Program or its derivative works. These actions are +prohibited by law if you do not accept this License. Therefore, by +modifying or distributing the Program (or any work based on the +Program), you indicate your acceptance of this License to do so, and +all its terms and conditions for copying, distributing or modifying +the Program or works based on it. + + 6. Each time you redistribute the Program (or any work based on the +Program), the recipient automatically receives a license from the +original licensor to copy, distribute or modify the Program subject to +these terms and conditions. You may not impose any further +restrictions on the recipients' exercise of the rights granted herein. +You are not responsible for enforcing compliance by third parties to +this License. + + 7. If, as a consequence of a court judgment or allegation of patent +infringement or for any other reason (not limited to patent issues), +conditions are imposed on you (whether by court order, agreement or +otherwise) that contradict the conditions of this License, they do not +excuse you from the conditions of this License. If you cannot +distribute so as to satisfy simultaneously your obligations under this +License and any other pertinent obligations, then as a consequence you +may not distribute the Program at all. For example, if a patent +license would not permit royalty-free redistribution of the Program by +all those who receive copies directly or indirectly through you, then +the only way you could satisfy both it and this License would be to +refrain entirely from distribution of the Program. + +If any portion of this section is held invalid or unenforceable under +any particular circumstance, the balance of the section is intended to +apply and the section as a whole is intended to apply in other +circumstances. + +It is not the purpose of this section to induce you to infringe any +patents or other property right claims or to contest validity of any +such claims; this section has the sole purpose of protecting the +integrity of the free software distribution system, which is +implemented by public license practices. Many people have made +generous contributions to the wide range of software distributed +through that system in reliance on consistent application of that +system; it is up to the author/donor to decide if he or she is willing +to distribute software through any other system and a licensee cannot +impose that choice. + +This section is intended to make thoroughly clear what is believed to +be a consequence of the rest of this License. + + 8. If the distribution and/or use of the Program is restricted in +certain countries either by patents or by copyrighted interfaces, the +original copyright holder who places the Program under this License +may add an explicit geographical distribution limitation excluding +those countries, so that distribution is permitted only in or among +countries not thus excluded. In such case, this License incorporates +the limitation as if written in the body of this License. + + 9. The Free Software Foundation may publish revised and/or new versions +of the General Public License from time to time. Such new versions will +be similar in spirit to the present version, but may differ in detail to +address new problems or concerns. + +Each version is given a distinguishing version number. If the Program +specifies a version number of this License which applies to it and "any +later version", you have the option of following the terms and conditions +either of that version or of any later version published by the Free +Software Foundation. If the Program does not specify a version number of +this License, you may choose any version ever published by the Free Software +Foundation. + + 10. If you wish to incorporate parts of the Program into other free +programs whose distribution conditions are different, write to the author +to ask for permission. For software which is copyrighted by the Free +Software Foundation, write to the Free Software Foundation; we sometimes +make exceptions for this. Our decision will be guided by the two goals +of preserving the free status of all derivatives of our free software and +of promoting the sharing and reuse of software generally. + + NO WARRANTY + + 11. BECAUSE THE PROGRAM IS LICENSED FREE OF CHARGE, THERE IS NO WARRANTY +FOR THE PROGRAM, TO THE EXTENT PERMITTED BY APPLICABLE LAW. EXCEPT WHEN +OTHERWISE STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR OTHER PARTIES +PROVIDE THE PROGRAM "AS IS" WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED +OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF +MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. THE ENTIRE RISK AS +TO THE QUALITY AND PERFORMANCE OF THE PROGRAM IS WITH YOU. SHOULD THE +PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF ALL NECESSARY SERVICING, +REPAIR OR CORRECTION. + + 12. IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING +WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MAY MODIFY AND/OR +REDISTRIBUTE THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES, +INCLUDING ANY GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING +OUT OF THE USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED +TO LOSS OF DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY +YOU OR THIRD PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER +PROGRAMS), EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE +POSSIBILITY OF SUCH DAMAGES. + + END OF TERMS AND CONDITIONS + + How to Apply These Terms to Your New Programs + + If you develop a new program, and you want it to be of the greatest +possible use to the public, the best way to achieve this is to make it +free software which everyone can redistribute and change under these terms. + + To do so, attach the following notices to the program. It is safest +to attach them to the start of each source file to most effectively +convey the exclusion of warranty; and each file should have at least +the "copyright" line and a pointer to where the full notice is found. + + <one line to give the program's name and a brief idea of what it does.> + Copyright (C) <year> <name of author> + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 2 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program; if not, write to the Free Software + Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA + + +Also add information on how to contact you by electronic and paper mail. + +If the program is interactive, make it output a short notice like this +when it starts in an interactive mode: + + Gnomovision version 69, Copyright (C) year name of author + Gnomovision comes with ABSOLUTELY NO WARRANTY; for details type `show w'. + This is free software, and you are welcome to redistribute it + under certain conditions; type `show c' for details. + +The hypothetical commands `show w' and `show c' should show the appropriate +parts of the General Public License. Of course, the commands you use may +be called something other than `show w' and `show c'; they could even be +mouse-clicks or menu items--whatever suits your program. + +You should also get your employer (if you work as a programmer) or your +school, if any, to sign a "copyright disclaimer" for the program, if +necessary. Here is a sample; alter the names: + + Yoyodyne, Inc., hereby disclaims all copyright interest in the program + `Gnomovision' (which makes passes at compilers) written by James Hacker. + + <signature of Ty Coon>, 1 April 1989 + Ty Coon, President of Vice + +This General Public License does not permit incorporating your program into +proprietary programs. If your program is a subroutine library, you may +consider it more useful to permit linking proprietary applications with the +library. If this is what you want to do, use the GNU Library General +Public License instead of this License. diff --git a/app_templates/kioslave/ChangeLog b/app_templates/kioslave/ChangeLog new file mode 100644 index 0000000..e69de29 --- /dev/null +++ b/app_templates/kioslave/ChangeLog diff --git a/app_templates/kioslave/INSTALL b/app_templates/kioslave/INSTALL new file mode 100644 index 0000000..b94cd85 --- /dev/null +++ b/app_templates/kioslave/INSTALL @@ -0,0 +1,43 @@ +Basic Installation +================== +These are generic installation instructions. + +This software uses the Python language's distutils system for installation. +A detailed guide for users and system administrators to using distutils to +install software can be found here: + + http://docs.python.org/inst/inst.html + +The simplest way to install this software is to run the following command as +the root user: + + python setup.py install + +The setup.py script will automatically detect the directories to use for +documentation, binaries and other software files. + + +Uninstallation +============== +During installation setup.py creates list of files and directories that +were installed in a file called install_log.txt. + + python setup.py uninstall + + +Installing into an alternate root +================================= +For packaging purposes it is often very useful to be able to install all files +relative not to the usual root directory (/) but into an alternative +directory. + + python setup.py install --root=/tmp/alternativeroot/ + + +Operation Controls +================== +--verbose + Print more information about what setup.py is doing. + +--help + Print a summary of the options to setup.py, and exit. diff --git a/app_templates/kioslave/MANIFEST.in b/app_templates/kioslave/MANIFEST.in new file mode 100644 index 0000000..c2dde3f --- /dev/null +++ b/app_templates/kioslave/MANIFEST.in @@ -0,0 +1,6 @@ +recursive-include doc *.docbook *.png +recursive-include po *.po *.pot +include AUTHORS ChangeLog COPYING INSTALL MANIFEST.in NEWS README TODO +global-include *.desktop *.py *.ui *.png *.lsm +global-exclude *~ .svn +global-exclude *~ .cvs diff --git a/app_templates/kioslave/NEWS b/app_templates/kioslave/NEWS new file mode 100644 index 0000000..e69de29 --- /dev/null +++ b/app_templates/kioslave/NEWS diff --git a/app_templates/kioslave/README b/app_templates/kioslave/README new file mode 100644 index 0000000..e69de29 --- /dev/null +++ b/app_templates/kioslave/README diff --git a/app_templates/kioslave/TODO b/app_templates/kioslave/TODO new file mode 100644 index 0000000..e69de29 --- /dev/null +++ b/app_templates/kioslave/TODO diff --git a/app_templates/kioslave/doc/en/index.docbook b/app_templates/kioslave/doc/en/index.docbook new file mode 100644 index 0000000..325987f --- /dev/null +++ b/app_templates/kioslave/doc/en/index.docbook @@ -0,0 +1,555 @@ +<?xml version="1.0" ?> +<!DOCTYPE book PUBLIC "-//KDE//DTD DocBook XML V4.1.2-Based Variant V1.1//EN" "dtd/kdex.dtd" [ + <!ENTITY appname "<application>MyApplicaition 0.1</application>"> + <!ENTITY kappname "&appname;"><!-- Do *not* replace kappname--> + <!ENTITY package "kde-module"><!-- kdebase, kdeadmin, etc --> + <!ENTITY % addindex "IGNORE"> + <!ENTITY % English "INCLUDE"><!-- change language only here --> + + + <!-- Do not define any other entities; instead, use the entities + from kde-genent.entities and $LANG/user.entities. --> +]> +<!-- kdoctemplate v0.8 October 1 1999 + Minor update to "Credits and Licenses" section on August 24, 2000 + Removed "Revision history" section on 22 January 2001 + Changed to Installation/Help menu entities 18 October 2001 + Other minor cleanup and changes 18 October 2001 --> + + +<!-- +This template was designed by: David Rugge davidrugge@mindspring.com +with lots of help from: Eric Bischoff ebisch@cybercable.tm.fr +and Frederik Fouvry fouvry@sfs.nphil.uni-tuebingen.de +of the KDE DocBook team. + +You may freely use this template for writing any sort of KDE documentation. +If you have any changes or improvements, please let us know. + +Remember: +- in XML, the case of the <tags> and attributes is relevant ; +- also, quote all attributes. + +Please don't forget to remove all these comments in your final documentation, +thanks ;-). +--> + +<!-- ................................................................ --> + +<!-- The language must NOT be changed here. --> + +<book lang="&language;"> + +<!-- This header contains all of the meta-information for the document such +as Authors, publish date, the abstract, and Keywords --> + +<bookinfo> +<title>The &appname; Handbook</title> + +<authorgroup> +<author> +<firstname></firstname> +<othername></othername> +<surname>%{AUTHOR}</surname> +<affiliation> +<address><email>%{EMAIL}</email></address> +</affiliation> +</author> +</authorgroup> + +<!-- TRANS:ROLES_OF_TRANSLATORS --> + +<copyright> +<year>1999</year> +<year>%{YEAR}</year> +<holder>%{AUTHOR}</holder> +</copyright> +<!-- Translators: put here the copyright notice of the translation --> +<!-- Put here the FDL notice. Read the explanation in fdl-notice.docbook + and in the FDL itself on how to use it. --> +<legalnotice>&FDLNotice;</legalnotice> + +<!-- Date and version information of the documentation +Don't forget to include this last date and this last revision number, we +need them for translation coordination ! +Please respect the format of the date (YYYY-MM-DD) and of the version +(V.MM.LL), it could be used by automation scripts. +Do NOT change these in the translation. --> + +<date>2001-10-18</date> +<releaseinfo>%{VERSION}</releaseinfo> + +<!-- Abstract about this handbook --> + +<abstract> +<para> +&appname; is an application specially designed to do nothing you would +ever want. +</para> +</abstract> + +<!-- This is a set of Keywords for indexing by search engines. +Please at least include KDE, the KDE package it is in, the name + of your application, and a few relevant keywords. --> + +<keywordset> +<keyword>KDE</keyword> +<keyword>%{APPNAME}</keyword> +<keyword>nothing</keyword> +<keyword>nothing else</keyword> +</keywordset> + +</bookinfo> + +<!-- The contents of the documentation begin here. Label +each chapter so with the id attribute. This is necessary for two reasons: it +allows you to easily reference the chapter from other chapters of your +document, and if there is no ID, the name of the generated HTML files will vary +from time to time making it hard to manage for maintainers and for the CVS +system. Any chapter labelled (OPTIONAL) may be left out at the author's +discretion. Other chapters should not be left out in order to maintain a +consistent documentation style across all KDE apps. --> + +<chapter id="introduction"> +<title>Introduction</title> + +<!-- The introduction chapter contains a brief introduction for the +application that explains what it does and where to report +problems. Basically a long version of the abstract. Don't include a +revision history. (see installation appendix comment) --> + +<para> +&appname; is a program that lets you do absolutely nothing. Please report +any problems or feature requests to the &kde; mailing lists. +</para> +</chapter> + +<chapter id="using-appname"> +<title>Using &appname;</title> + +<!-- This chapter should tell the user how to use your app. You should use as +many sections (Chapter, Sect1, Sect3, etc...) as is necessary to fully document +your application. --> + +<para> + +<!-- Note that all graphics should be in .png format. Use no gifs because of +patent issues. --> + +<screenshot> +<screeninfo>Here's a screenshot of &appname;</screeninfo> + <mediaobject> + <imageobject> + <imagedata fileref="screenshot.png" format="PNG"/> + </imageobject> + <imageobject> + <imagedata fileref="screenshot.eps" format="EPS"/> + </imageobject> + <textobject> + <phrase>Screenshot</phrase> + </textobject> + </mediaobject> +</screenshot> +</para> + + +<sect1 id="appname-features"> +<title>More &appname; features</title> + +<para>It slices! It dices! and it comes with a free toaster!</para> +<para> +The Squiggle Tool <guiicon><inlinemediaobject> + <imageobject> + <imagedata fileref="squiggle.png" format="PNG"/> + </imageobject> + <imageobject> + <imagedata fileref="squiggle.eps" format="EPS"/> + </imageobject> + <textobject> + <phrase>Squiggle</phrase> + </textobject> +</inlinemediaobject></guiicon> is used to draw squiggly lines all over +the &appname; main window. It's not a bug, it's a feature! +</para> + +</sect1> +</chapter> + +<chapter id="commands"> +<title>Command Reference</title> + +<!-- (OPTIONAL, BUT RECOMMENDED) This chapter should list all of the +application windows and their menubar and toolbar commands for easy reference. +Also include any keys that have a special function but have no equivalent in the +menus or toolbars. This may not be necessary for small apps or apps with no tool +or menu bars. --> + +<sect1 id="appname-mainwindow"> +<title>The main &appname; window</title> + +<sect2> +<title>The File Menu</title> +<para> +<variablelist> +<varlistentry> +<term><menuchoice> +<shortcut> +<keycombo action="simul">&Ctrl;<keycap>N</keycap></keycombo> +</shortcut> +<guimenu>File</guimenu> +<guimenuitem>New</guimenuitem> +</menuchoice></term> +<listitem><para><action>Creates a new document</action></para></listitem> +</varlistentry> +<varlistentry> +<term><menuchoice> +<shortcut> +<keycombo action="simul">&Ctrl;<keycap>S</keycap></keycombo> +</shortcut> +<guimenu>File</guimenu> +<guimenuitem>Save</guimenuitem> +</menuchoice></term> +<listitem><para><action>Saves the document</action></para></listitem> +</varlistentry> +<varlistentry> +<term><menuchoice> +<shortcut> +<keycombo action="simul">&Ctrl;<keycap>Q</keycap></keycombo> +</shortcut> +<guimenu>File</guimenu> +<guimenuitem>Quit</guimenuitem> +</menuchoice></term> +<listitem><para><action>Quits</action> &appname;</para></listitem> +</varlistentry> +</variablelist> +</para> + +</sect2> + +<sect2> +<title>The <guimenu>Help</guimenu> Menu</title> + +<!-- Assuming you have a standard help menu (help, what's this, about --> +<!-- &appname;, about KDE) then the documentation is already written. --> +<!-- The following entity is valid anywhere that a variablelist is --> +<!-- valid. --> + +&help.menu.documentation; + +</sect2> + +</sect1> +</chapter> + +<chapter id="developers"> +<title>Developer's Guide to &appname;</title> + +<!-- (OPTIONAL) A Programming/Scripting reference chapter should be +used for apps that use plugins or that provide their own scripting hooks +and/or development libraries. --> + +<para> +Programming &appname; plugins is a joy to behold. Just read through the next +66 pages of API's to learn how! +</para> + +<!-- Use refentries to describe APIs. Refentries are fairly complicated and you +should consult the docbook reference for further details. The example below was +taken from that reference and shortened a bit for readability. --> + +<refentry id="re-1007-unmanagechildren-1"> +<refmeta> +<refentrytitle>XtUnmanageChildren</refentrytitle> +<refmiscinfo>Xt - Geometry Management</refmiscinfo> +</refmeta> +<refnamediv> +<refname>XtUnmanageChildren +</refname> +<refpurpose>remove a list of children from a parent widget's managed +list. +<indexterm id="ix-1007-unmanagechildren-1"><primary>widgets</primary><secondary>removing</secondary></indexterm> +<indexterm id="ix-1007-unmanagechildren-2"><primary>XtUnmanageChildren</primary></indexterm> +</refpurpose> + +</refnamediv> +<refsynopsisdiv> +<refsynopsisdivinfo> +<date>4 March 1996</date> +</refsynopsisdivinfo> +<synopsis> +void XtUnmanageChildren(<replaceable class="parameter">children</replaceable>, <replaceable class="parameter">num_children</replaceable>) + WidgetList <replaceable class="parameter">children</replaceable>; + Cardinal <replaceable class="parameter">num_children</replaceable>; +</synopsis> + +<refsect2 id="r2-1007-unmanagechildren-1"> +<title>Inputs</title> +<variablelist> +<varlistentry> +<term><replaceable class="parameter">children</replaceable> +</term> +<listitem> +<para>Specifies an array of child widgets. Each child must be of +class RectObj or any subclass thereof. +</para> +</listitem> +</varlistentry> +<varlistentry> +<term><replaceable class="parameter">num_children</replaceable> +</term> +<listitem> +<para>Specifies the number of elements in <replaceable class="parameter">children</replaceable>. +</para> +</listitem> +</varlistentry> +</variablelist> +</refsect2></refsynopsisdiv> + +<refsect1 id="r1-1007-unmanagechildren-1"> +<title>Description +</title> +<para><function>XtUnmanageChildren()</function> unmaps the specified widgets +and removes them from their parent's geometry management. +The widgets will disappear from the screen, and (depending +on its parent) may no longer have screen space allocated for +them. +</para> +<para>Each of the widgets in the <replaceable class="parameter">children</replaceable> array must have +the same parent. +</para> +<para>See the “Algorithm” section below for full details of the +widget unmanagement procedure. +</para> +</refsect1> + +<refsect1 id="r1-1007-unmanagechildren-2"> +<title>Usage</title> +<para>Unmanaging widgets is the usual method for temporarily +making them invisible. They can be re-managed with +<function>XtManageChildren()</function>. +</para> +<para>You can unmap a widget, but leave it under geometry +management by calling <function>XtUnmapWidget()</function>. You can +destroy a widget's window without destroying the widget by +calling <function>XtUnrealizeWidget()</function>. You can destroy a +widget completely with <function>XtDestroyWidget()</function>. +</para> +<para>If you are only going to unmanage a single widget, it is +more convenient to call <function>XtUnmanageChild()</function>. It is +often more convenient to call <function>XtUnmanageChild()</function> +several times than it is to declare and initialize an array +of widgets to pass to <function>XtUnmanageChildren()</function>. Calling +<function>XtUnmanageChildren()</function> is more efficient, however, +because it only calls the parent's <function>change_managed()</function> +method once. +</para> +</refsect1> + +<refsect1 id="r1-1007-unmanagechildren-3"> +<title>Algorithm +</title> +<para><function>XtUnmanageChildren()</function> performs the following: +</para> +<variablelist> +<varlistentry> +<term>- +</term> +<listitem> +<para>Ignores the child if it already is unmanaged or is being +destroyed. +</para> +</listitem> +</varlistentry> +<varlistentry> +<term>- +</term> +<listitem> +<para>Otherwise, if the child is realized, it makes it nonvisible +by unmapping it. +</para> +</listitem> +</varlistentry> +</variablelist> +<para> +</para> +</refsect1> + +<refsect1 id="r1-1007-unmanagechildren-4"> +<title>Structures</title> +<para>The <type>WidgetList</type> type is simply an array of widgets: +</para> +<screen id="sc-1007-unmanagechildren-1">typedef Widget *WidgetList; +</screen> +</refsect1> +</refentry> + +</chapter> + +<chapter id="faq"> +<title>Questions and Answers</title> + +<!-- (OPTIONAL but recommended) This chapter should include all of the silly +(and not-so-silly) newbie questions that fill up your mailbox. This chapter +should be reserved for BRIEF questions and answers! If one question uses more +than a page or so then it should probably be part of the +"Using this Application" chapter instead. You should use links to +cross-reference questions to the parts of your documentation that answer them. +This is also a great place to provide pointers to other FAQ's if your users +must do some complicated configuration on other programs in order for your +application work. --> + +&reporting.bugs; +&updating.documentation; + +<qandaset id="faqlist"> +<qandaentry> +<question> +<para>My Mouse doesn't work. How do I quit &appname;?</para> +</question> +<answer> +<para>You silly goose! Check out the <link linkend="commands">Commands +Section</link> for the answer.</para> +</answer> +</qandaentry> +<qandaentry> +<question> +<para>Why can't I twiddle my documents?</para> +</question> +<answer> +<para>You can only twiddle your documents if you have the foobar.lib +installed.</para> +</answer> +</qandaentry> +</qandaset> +</chapter> + +<chapter id="credits"> + +<!-- Include credits for the programmers, documentation writers, and +contributors here. The license for your software should then be included below +the credits with a reference to the appropriate license file included in the KDE +distribution. --> + +<title>Credits and License</title> + +<para> +&appname; +</para> +<para> +Program copyright %{YEAR} %{AUTHOR} <email>%{EMAIL}</email> +</para> +<para> +Contributors: +<itemizedlist> +<listitem><para>Konqui the KDE Dragon <email>konqui@kde.org</email></para> +</listitem> +<listitem><para>Tux the Linux Penguin <email>tux@linux.org</email></para> +</listitem> +</itemizedlist> +</para> + +<para> +Documentation copyright %{YEAR} %{AUTHOR} <email>%{EMAIL}</email> +</para> + +<!-- TRANS:CREDIT_FOR_TRANSLATORS --> + +&underFDL; <!-- FDL: do not remove --> + +<!-- Determine which license your application is licensed under, + and delete all the remaining licenses below: + + (NOTE: All documentation are licensed under the FDL, + regardless of what license the application uses) --> + +&underGPL; <!-- GPL License --> +&underBSDLicense; <!-- BSD License --> +&underArtisticLicense; <!-- BSD Artistic License --> +&underX11License; <!-- X11 License --> + +</chapter> + +<appendix id="installation"> +<title>Installation</title> + +<sect1 id="getting-appname"> +<title>How to obtain &appname;</title> + +<!-- This first entity contains boiler plate for applications that are +part of KDE CVS. You should remove it if you are releasing your +application --> + +&install.intro.documentation; + +</sect1> + +<sect1 id="requirements"> +<title>Requirements</title> + +<!-- +List any special requirements for your application here. This should include: +.Libraries or other software that is not included in kdesupport, +kdelibs, or kdebase. +.Hardware requirements like amount of RAM, disk space, graphics card +capabilities, screen resolution, special expansion cards, etc. +.Operating systems the app will run on. If your app is designed only for a +specific OS, (you wrote a graphical LILO configurator for example) put this +information here. +--> + +<para> +In order to successfully use &appname;, you need &kde; 1.1. Foobar.lib is +required in order to support the advanced &appname; features. &appname; uses +about 5 megs of memory to run, but this may vary depending on your +platform and configuration. +</para> + +<para> +All required libraries as well as &appname; itself can be found +on <ulink url="ftp://ftp.appname.org">The &appname; home page</ulink>. +</para> + +<!-- For a list of updates, you may refer to the application web site +or the ChangeLog file, or ... --> +<para> +You can find a list of changes at <ulink +url="http://apps.kde.org/appname">http://apps.kde.org/appname</ulink>. +</para> +</sect1> + +<sect1 id="compilation"> +<title>Compilation and Installation</title> + +<!-- This entity contains the boilerplate text for standard --> +<!-- compilation instructions. If your application requires any --> +<!-- special handling, remove it, and replace with your own text. --> + +&install.compile.documentation; + +</sect1> + +<sect1 id="configuration"> +<title>Configuration</title> + +<para>Don't forget to tell your system to start the <filename>dtd</filename> +dicer-toaster daemon first, or &appname; won't work !</para> + +</sect1> + +</appendix> + +&documentation.index; +</book> + +<!-- +Local Variables: +mode: sgml +sgml-minimize-attributes:nil +sgml-general-insert-case:lower +sgml-indent-step:0 +sgml-indent-data:nil +End: + +vim:tabstop=2:shiftwidth=2:expandtab +--> + diff --git a/app_templates/kioslave/setup.py b/app_templates/kioslave/setup.py new file mode 100755 index 0000000..f9b9e30 --- /dev/null +++ b/app_templates/kioslave/setup.py @@ -0,0 +1,30 @@ +#!/usr/bin/python +########################################################################### +# setup - description # +# ------------------------------ # +# begin : Fri Jun 27 2005 # +# copyright : (C) 2005 by AUTHOR # +# email : YOUR@EMAIL.com # +# # +########################################################################### +# # +# This program is free software; you can redistribute it and/or modify # +# it under the terms of the GNU General Public License as published by # +# the Free Software Foundation; either version 2 of the License, or # +# (at your option) any later version. # +# # +########################################################################### + +import kdedistutils + +kdedistutils.setup(name="kioslave", + version="0.1.0", + author="AUTHOR", + author_email="YOUR@EMAIL.com", + url="http://www.TESTAPP.com/", + min_kde_version = "3.0.0", + min_qt_version = "3.0.0", + license = "GPL", + application_data = ['src/kioslave.py'], + docbooks = [ ('doc/en','en') ], + kioslaves = [ ('src/kioslave.protocol','kioslave.py')] ) diff --git a/app_templates/kioslave/src/kioslave.lsm b/app_templates/kioslave/src/kioslave.lsm new file mode 100644 index 0000000..43d0d5f --- /dev/null +++ b/app_templates/kioslave/src/kioslave.lsm @@ -0,0 +1,16 @@ +Begin3 +Title: $APPNAME$ -- Some description +Version: $VERSION$ +Entered-date: +Description: +Keywords: KDE Qt +Author: $AUTHOR$ <$EMAIL$> +Maintained-by: $AUTHOR$ <$EMAIL$> +Home-page: +Alternate-site: +Primary-site: ftp://ftp.kde.org/pub/kde/unstable/apps/utils + xxxxxx $APPNAMELC$-$VERSION$.tar.gz + xxx $APPNAMELC$-$VERSION$.lsm +Platform: Linux. Needs KDE +Copying-policy: $LICENSE$ +End diff --git a/app_templates/kioslave/src/kioslave.protocol b/app_templates/kioslave/src/kioslave.protocol new file mode 100644 index 0000000..01dc5bb --- /dev/null +++ b/app_templates/kioslave/src/kioslave.protocol @@ -0,0 +1,13 @@ +[Protocol] +exec=kioslave +protocol=kioslave +input=none +output=filesystem +listing=Name,Type,Size,Date +reading=true +writing=true +makedir=true +deleting=true +linking=false +moving=true +maxInstances=1 diff --git a/app_templates/kioslave/src/kioslave.py b/app_templates/kioslave/src/kioslave.py new file mode 100755 index 0000000..63e34f0 --- /dev/null +++ b/app_templates/kioslave/src/kioslave.py @@ -0,0 +1,618 @@ +#!/usr/bin/python +########################################################################### +# kioslave - description # +# ------------------------------ # +# begin : Mon May 2 2005 # +# copyright : (C) 2005 by AUTHOR # +# email : your@email.com # +# # +########################################################################### +# # +# This program is free software; you can redistribute it and/or modify # +# it under the terms of the GNU General Public License as published by # +# the Free Software Foundation; either version 2 of the License, or # +# (at your option) any later version. # +# # +########################################################################### + +# Import the required Qt and KDE modules. +from qt import * +from kio import * +from kdecore import * +import os, time + +# For debugging purposes, import the sys and traceback modules. +import sys, traceback + +DEBUG = 1 + +# Define a class which will be used to create IOSlave instances. +############################################################################ +class SlaveClass(KIO.SlaveBase): + """SlaveClass(KIO.SlaveBase) + + See kdelibs/kio/kio/slavebase.h for virtual functions to override. + """ + + ######################################################################## + def __init__(self, pool, app): + # We must call the initialisation method of the base class. + KIO.SlaveBase.__init__(self, "kioslave", pool, app) + + # Attach the DCOP client object associated with this IOSlave to the + # DCOP server. + self.dcopClient().attach() + + self.debug("dcopClient: %i" % self.dcopClient().isRegistered()) + + self.contents = RAMDir(None,u"/") + + self.host = "" + self.document = None + self.file = None + + self.debug("Exiting __init__ now"); + + ######################################################################## + def __del__(self): + pass + + ######################################################################## + # KIO.SlaveBase method + def setHost(self, host, port, user, passwd): + self.debug( + "setHost: %s %s %s %s" % ( + repr(unicode(host)), repr(unicode(port)), + repr(unicode(user)), repr(unicode(passwd)) + ) + ) + + # This IOSlave does not allow a host to be specified as part of + # a URL. + if unicode(host) != u"": + self.closeConnection() + self.error(KIO.ERR_MALFORMED_URL, host) + return + + ######################################################################## + # KIO.SlaveBase method + def openConnection(self): + # Don't call self.finished() in this method. + self.debug("openConnection") + + ######################################################################## + # KIO.SlaveBase method + def closeConnection(self): + # Don't call self.finished() in this method. + self.debug("closeConnection") + + ######################################################################## + # KIO.SlaveBase method + def get(self, url): + path = str(url.path()) + self.debug("get(): %s" % path) + self.openConnection() + + item = self.contents.resolve(path) + if item is None: + self.error(KIO.ERR_DOES_NOT_EXIST, path) + return + + if item.isDir(): + self.error(KIO.ERR_IS_DIRECTORY, path) + + self.totalSize(len(item.getData())) + self.data(QByteArray(item.getData())) + + # The end of the data string. + self.data(QByteArray()) + + self.finished() + + ######################################################################## + # KIO.SlaveBase method + def put(self, url, permissions, overwrite, resume): + self.debug("put") + self.openConnection() + + path = str(url.path()) + parts = path.split('/') + filename = parts[-1] + parent_dir = self.contents.resolveParent(path) + if parent_dir is None: + parent_path = '/'.join(parts[:-1]) + self.error(KIO.ERR_DOES_NOT_EXIST, parent_path) + return + + if parent_dir.contains(filename): + if not overwrite: + self.error(KIO.ERR_COULD_NOT_WRITE, parent_path) + return + else: + parent_dir.unlink(filename) + + # Read data from the application. + bytearray = QByteArray() + bytes = 0 + data = "" + + while True: + self.dataReq() + result = self.readData(bytearray) + + if result <= 0: + # An error or the end of data was encountered. + break + + # The number of bytes read is given in the result. + bytes = bytes + result + data = data + str(bytearray) + + parent_dir.insert(RAMFile(parent_dir,filename,data)) + + self.finished() + + ######################################################################## + # KIO.SlaveBase method + def stat(self, url): + self.debug("stat: %s" % url.url(0,0)) + self.openConnection() + + self.debug("path:%s"% url.path()) + + # Return info the for the root. + item = self.contents.resolve(str(url.path())) + if item is None: + self.error(KIO.ERR_DOES_NOT_EXIST, str(url.path())) + return + + self.statEntry(item.getStatEntry()) + self.finished() + + ######################################################################## + # KIO.SlaveBase method + def mimetype(self, url): + self.debug("mimetype: %s" % unicode(url)) + self.openConnection() + + path = str(url.path()) + item = self.contents.resolve(path) + if item is None: + self.error(KIO.ERR_DOES_NOT_EXIST, path) + return + + self.mimeType(item.getMimetype()) + + self.finished() + + ######################################################################## + # KIO.SlaveBase method + def listDir(self, url): + # The "url" argument is a kdecore.KURL object. + self.debug("listDir: %s" % str(url.prettyURL(0))) + self.openConnection() + + path = str(url.path()) + dir = self.contents.resolve(path) + if dir is None: + self.error(KIO.ERR_DOES_NOT_EXIST, path) + return + + if not dir.isDir(): + self.error(KIO.ERR_IS_FILE, path) + return + + for entry in dir.listDir(): + self.listEntry(entry, 0) + + self.listEntry([], 1) # Signal that the list is finished. + self.finished() + + ######################################################################## + # KIO.SlaveBase method + def mkdir(self, url, permissions): + self.debug("mkdir") + self.openConnection() + + parent_path = str(url.path()) + parent_dir = self.contents.resolveParent(parent_path) + if parent_dir is None: + self.error(KIO.ERR_DOES_NOT_EXIST, parent_path) + return + + new_dir_obj = parent_dir.mkdir(parent_path.split('/')[-1]) + if new_dir_obj is None: + self.error(KIO.ERR_COULD_NOT_MKDIR, parent_path) + return + + self.finished() + + ######################################################################## + # KIO.SlaveBase method + def rename(self, src, dest, overwrite): + self.debug("rename: %s %s" % (src.path(), dest.path())) + self.openConnection() + + src_path = str(src.path()) + src_obj = self.contents.resolve(src_path) + if src_obj is None: + self.error(KIO.ERR_DOES_NOT_EXIST, src_path) + return + + # See if the destination path already exists. + dest_path = str(dest.path()) + dest_obj = self.contents.resolve(dest_path) + if dest_obj is not None: + if dest_obj is src_obj: + self.finished() # Done already. + return + + if not overwrite: + # Can't overwrite. not bad. + self.error(KIO.ERR_CANNOT_RENAME, dest_path) + return + else: + # Over write, just remove the object. + dest_obj.getParent().unlink(dest_obj.getName()) + + dest_dir = self.contents.resolveParent(dest_path) + if dest_dir is None: + self.error(KIO.ERR_DOES_NOT_EXIST, dest_path) + return + + src_obj.getParent().unlink(src_obj) + src_obj.setName(dest_path.split('/')[-1]) + dest_dir.insert(src_obj) + + self.finished() + + # Other possible file operations are represented by the following + # methods which are not implemented. + + #def symlink(self, target, dest, overwrite): + # debug("symlink") + # ... + # self.finished() + + #def chmod(self, url, permissions): + # debug("chmod") + # ... + # self.finished() + + ######################################################################## + # KIO.SlaveBase method + def copy(self, src, dest, permissions, overwrite): + self.debug("copy") + self.openConnection() + + src_path = str(src.path()) + src_obj = self.contents.resolve(src_path) + if src_obj is None: + self.error(KIO.ERR_DOES_NOT_EXIST, src_path) + return + + # See if the destination path already exists. + dest_path = str(dest.path()) + dest_obj = self.contents.resolve(dest_path) + if dest_obj is not None: + if dest_obj is src_obj: + self.finished() # Done already. + return + + if not overwrite: + # Can't overwrite. not bad. + self.error(KIO.ERR_COULD_NOT_WRITE, dest_path) + return + else: + # Over write, just remove the object. + dest_obj.getParent().unlink(dest_obj.getName()) + + dest_dir = self.contents.resolveParent(dest_path) + if dest_dir is None: + self.error(KIO.ERR_DOES_NOT_EXIST, dest_path) + return + + new_obj = src_obj.copy() + new_obj.setName(dest_path.split('/')[-1]) + dest_dir.insert(new_obj) + + self.finished() + + ######################################################################## + # KIO.SlaveBase method + def del_(self, url, isfile): + self.debug("del_") + self.openConnection() + + path = str(url.path()) + item = self.contents.resolve(path) + if item is None: + self.error(KIO.ERR_DOES_NOT_EXIST, path) + return + + item.getParent().unlink(item.getName()) + + self.finished() + + ######################################################################## + # KIO.SlaveBase method + def disconnectSlave(self): + self.debug("disconnectSlave") + return + + ######################################################################## + # KIO.SlaveBase method + def dispatchLoop(self): + self.debug("dispatchLoop") + KIO.SlaveBase.dispatchLoop(self) + + ######################################################################## + # KIO.SlaveBase method + def error(self,errid,text): + self.debug("error: %i, %s" % (errid,text) ) + KIO.SlaveBase.error(self,errid,text) + + ############################################################################ + def debug(self,msg): + if DEBUG == 0: return + print "kioslave:"+str(msg)+"\n" + sys.stdout.flush() + +############################################################################ +class RAMDir(object): + ############################################################################ + def __init__(self,parent,name): + self.contents = {} + self.parent = parent + self.name = str(name) + + ############################################################################ + def getParent(self): + return self.parent + + ############################################################################ + def setParent(self,parent): + self.parent = parent + + ############################################################################ + def getName(self): + return self.name + + ############################################################################ + def setName(self,name): + self.name = str(name) + + ############################################################################ + def resolve(self,path): + while path.endswith('/'): + path = path[:-1] + while path.startswith('/'): + path = path[1:] + + if path=='': + return self + + parts = path.split('/') + self.debug(path) + for item in self.contents.keys(): + self.debug("keys:"+item) + + if parts[0] in self.contents: + return self.contents[parts[0]].resolve('/'.join(parts[1:])) + self.debug("CHECKPOINT 1") + return None + + ############################################################################ + def resolveParent(self,path): + while path.endswith('/'): + path = path[:-1] + while path.startswith('/'): + path = path[1:] + + if path=="": + return None + + parts = path.split('/') + return self.resolve('/'.join(parts[:-1])) + + ############################################################################ + def mkdir(self,name): + if name in self.contents: + return None + new_dir = RAMDir(self,name) + self.contents[name] = new_dir + return new_dir + + ############################################################################ + def getStatEntry(self): + # Return info the for the root. + length = 0 + + entry = [] + atom = KIO.UDSAtom() + atom.m_uds = KIO.UDS_NAME + atom.m_str = self.name + #debug("name: %s" % name) + entry.append(atom) + + atom = KIO.UDSAtom() + atom.m_uds = KIO.UDS_SIZE + atom.m_long = length + #debug("length: %i" % length) + entry.append(atom) + + atom = KIO.UDSAtom() + atom.m_uds = KIO.UDS_MODIFICATION_TIME + # Number of seconds since the epoch. + atom.m_long = int(time.time()) + entry.append(atom) + + atom = KIO.UDSAtom() + atom.m_uds = KIO.UDS_ACCESS + # The usual octal permission information (rw-r--r-- in this case). + atom.m_long = 0644 + entry.append(atom) + + # If the stat method is implemented then entries _must_ include + # the UDE_FILE_TYPE atom or the whole system may not work at all. + atom = KIO.UDSAtom() + atom.m_uds = KIO.UDS_FILE_TYPE + #atom.m_long = os.path.stat.S_IFREG + atom.m_long = os.path.stat.S_IFDIR + entry.append(atom) + + atom = KIO.UDSAtom() + atom.m_uds = KIO.UDS_MIME_TYPE + atom.m_str = self.getMimetype() + entry.append(atom) + + return entry + + ############################################################################ + def listDir(self): + list = [] + for item in self.contents.values(): + list.append(item.getStatEntry()) + return list + + ############################################################################ + def isDir(self): + return True + + ############################################################################ + def insert(self,item): + self.contents[item.getName()] = item + + ############################################################################ + def contains(self,name): + return name in self.contents + + ############################################################################ + def unlink(self,name): + if str(name) in self.contents: + del self.contents[str(name)] + + ############################################################################ + def debug(self,msg): + if DEBUG == 0: return + + print "kioslave:"+str(msg)+"\n" + sys.stdout.flush() + + ############################################################################ + def getMimetype(self): + return "inode/directory" + + ############################################################################ + def copy(self): + new_dir = RAMDir(None,self.name) + + for item in self.contents.values(): + new_item = item.copy() + new_item.setParent(new_dir) + new_dir.insert(new_item) + + return new_dir + +############################################################################ +class RAMFile(object): + ############################################################################ + def __init__(self,parent,name,data=None): + self.parent = parent + self.name = str(name) + self.data = data + + ############################################################################ + def getParent(self): + return self.parent + + ############################################################################ + def setParent(self,parent): + self.parent = parent + + ############################################################################ + def getName(self): + return self.name + + ############################################################################ + def setName(self,name): + self.name = str(name) + + ############################################################################ + def resolve(self,path): + if path!="": + return None + return self + + ############################################################################ + def getData(self): + return self.data + + ############################################################################ + def resolveParent(self,path): + return None + + ############################################################################ + def getStatEntry(self): + # Return info the for the root. + length = 0 + + entry = [] + atom = KIO.UDSAtom() + atom.m_uds = KIO.UDS_NAME + atom.m_str = self.name + #debug("name: %s" % name) + entry.append(atom) + + length = 0 + if self.data is not None: + length = len(self.data) + + atom = KIO.UDSAtom() + atom.m_uds = KIO.UDS_SIZE + atom.m_long = length + #debug("length: %i" % length) + entry.append(atom) + + atom = KIO.UDSAtom() + atom.m_uds = KIO.UDS_MODIFICATION_TIME + # Number of seconds since the epoch. + atom.m_long = int(time.time()) + entry.append(atom) + + atom = KIO.UDSAtom() + atom.m_uds = KIO.UDS_ACCESS + # The usual octal permission information (rw-r--r-- in this case). + atom.m_long = 0644 + entry.append(atom) + + # If the stat method is implemented then entries _must_ include + # the UDE_FILE_TYPE atom or the whole system may not work at all. + atom = KIO.UDSAtom() + atom.m_uds = KIO.UDS_FILE_TYPE + atom.m_long = os.path.stat.S_IFREG + entry.append(atom) + + atom = KIO.UDSAtom() + atom.m_uds = KIO.UDS_MIME_TYPE + atom.m_str = self.getMimetype() + entry.append(atom) + + return entry + + ############################################################################ + def isDir(self): + return False + + ############################################################################ + def getMimetype(self): + return "text/html" + + ############################################################################ + def copy(self): + return RAMFile(None,self.name,self.data) + +############################################################################ +def SlaveFactory(pool, app): + slave = SlaveClass(pool, app) + slave.dispatchLoop() |