/*************************************************************************** begin : mon 3-11 20:40:00 CEST 2003 copyright : (C) 2003 by Jeroen Wijnhout email : Jeroen.Wijnhout@kdemail.net ***************************************************************************/ /*************************************************************************** * * * 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. * * * ***************************************************************************/ #ifndef KILETOOL_H #define KILETOOL_H #include "kilelauncher.h" #include #include #include #include #include class TDEConfig; class KileInfo; class KShellProcess; class KileProject; namespace KileTool { typedef TQMap Config; class Manager; /** * A class that defines a general tool (latex, dvips etc.) to be launched from * within Kile. * * @author Jeroen Wijnhout **/ class Base : public TQObject { Q_OBJECT public: Base(const TQString &name, Manager *manager, bool prepare = true); ~Base(); /** * Sets the KileInfo object, this is already taken care of by the Manager. **/ void setInfo(KileInfo *ki) { m_ki = ki; } /** * Sets the TDEConfig object, this is already taken care of by the Manager. **/ void setConfig(TDEConfig *config) { m_config = config; } /** * @returns the Manager object for this tool. **/ Manager* manager() const { return m_manager; } /** * @returns a short descriptive name for this tool. **/ const TQString& name() const { return m_name; } /** * Allows you to set the source file explicitly (absolute path). **/ virtual void setSource(const TQString & source); /** * @returns the source file that is used to run the tool on. **/ const TQString source(bool absolute = true) const; const TQString S() const { return m_S; } const TQString baseDir() const { return m_basedir; } const TQString relativeDir() const { return m_relativedir; } const TQString targetDir() const { return m_targetdir; } const TQString from() const { return m_from; } const TQString to() const { return m_to; } const TQString target() const { return m_target; } const TQString options() const { return m_options; } void setOptions(const TQString &opt) { m_options = opt; } virtual bool isViewer() { return false; } void setQuickie() { m_quickie = true; } bool isQuickie() { return m_quickie; } /** * Allows you to set the target file explicitly (filename only). **/ virtual void setTarget(const TQString & target); virtual void setTargetDir(const TQString & target); virtual void setTargetPath(const TQString & target); /** * Sets the target directory relative to the source directory. **/ void setRelativeBaseDir(const TQString & dir) { m_relativedir = dir; } /** * Installs a launcher object that will be responsible for actually starting the tool. The * tool can be a command-line tool or a kpart, the KileTool class doesn't need to know * about the specifics of the launcher. **/ void installLauncher(Launcher *lr ); /** * Installs a launcher as indicated by the tool type. This creates a launcher object. **/ bool installLauncher(); /** * @returns a pointer to the launcher object, returns 0 if no launcher is installed. **/ Launcher *launcher() { return m_launcher; } /** * @returns the working dir for this tool. **/ const TQString &workingDir() const { return m_basedir; } /** * @returns the dictionary that translates the following keys Example docu: Consider a file which is called myBestBook.tex which resides in /home/thomas/latex and you compile it with pdflatex to myBestBook.pdf. The variables have the following meanings: %source -> filename with suffix but without path <-> myBestBook.tex %S -> filename without suffix but without path <-> myBestBook %dir_base -> path of the source file without filename <-> /home/thomas/latex %dir_target -> path of the target file without filename, same as %dir_base if no relative path has been set <-> /home/thomas/latex %target -> target filename without path <-> without filename And these are special variables %res <-> resolution of the quickpreview action set in configure kile->tools->preview %AFL <-> List of all files in a project marked for archiving. You can set the archive flag in the "Files and projects" sidebar using the context menu. */ TQDict* paramDict() { return &m_dictParams; } bool addDict(const TQString & key, const TQString & value); void translate(TQString &str); void setFlags(uint flags) { m_flags = flags; } uint flags() { return m_flags; } void setMsg(long n, const TQString & msg); TQString msg(long n) const { return m_messages[n]; } protected: bool needsUpdate(const TQString &target, const TQString &source); public slots: void sendMessage(int, const TQString &); virtual void filterOutput(const TQString &); signals: void message(int, const TQString &, const TQString &); void output(const TQString &); void start(Base*); void done(Base*, int); void requestSaveAll(bool amAutoSaving = false, bool disUntitled= false); public: void setEntryMap(Config map) { m_entryMap = map; } const TQString readEntry(const TQString & key) { return m_entryMap[key]; } public: virtual void prepareToRun(const TQString &cfg = TQString()); bool isPrepared() { return m_bPrepared; } bool needsToBePrepared() { return m_bPrepareToRun; } protected: /** * Checks if the prerequisites are in order. * @returns true if everything is ok, false otherwise. **/ virtual bool checkPrereqs(); /** * Determines on which file to run the tool. **/ virtual bool determineSource(); /** * Determines the target of the tool (i.e. a DVI for latex, PS for dvips) and * checks if the target file can be written to the specified location. **/ virtual bool determineTarget(); /** * Check if the target dir and file have the correct permissions (according to the flags set). **/ virtual bool checkTarget(); virtual bool checkSource(); public: /** * Configures the tool object. **/ virtual bool configure(const TQString & cfg = TQString()); public slots: /** * Starts the tool. First it performs basic checks (checkPrereqs()), * if all is well it launches the tool (launch()). After the process has * exited it calls finish(). * @return the exit code of the tool (if available) **/ virtual int run(); /** * Terminates the running process. **/ virtual void stop(); /** * Clean up after the process/lib has finished. **/ virtual bool finish(int); private: Manager *m_manager; KileInfo *m_ki; TDEConfig *m_config; TQString m_name, m_from, m_to; TQString m_target, m_basedir, m_relativedir, m_targetdir, m_source, m_S, m_options; TQString m_resolution; TQString m_message; bool m_buildPrereqs; protected: Launcher *m_launcher; bool m_quickie; private: TQDict m_dictParams; Config m_entryMap; uint m_flags; int m_nPreparationResult; bool m_bPrepared; bool m_bPrepareToRun; //messages TQMap m_messages; }; /** * A class that represents a compile tool (such as latex, pdflatex). **/ class Compile : public Base { public: Compile(const TQString &name, Manager * manager, bool prepare = true); ~Compile(); protected: bool checkSource(); }; /** * A class that represents a view tool (such as KDVI, gv, etc.). **/ class View : public Base { public: View(const TQString &name, Manager * manager, bool prepare = true); ~View(); bool isViewer() { return true; } }; /** * A class that represents a conversion tool (such as dvips). **/ class Convert : public Base { public: Convert(const TQString &name, Manager * manager, bool prepare = true); ~Convert(); bool determineSource(); }; /** * A class that represents a tool like tar, from multiple files to one file **/ class Archive: public Base { Q_OBJECT public: Archive(const TQString &name, Manager * manager, bool prepare = true); ~Archive(); bool checkPrereqs(); void setSource(const TQString & source); private: KileProject *m_project; TQString m_fileList; }; class Sequence : public Base { Q_OBJECT public: Sequence(const TQString &name, Manager * manager, bool prepare = true); public slots: int run(); }; } #endif