/* This file is part of the Kate text editor of the KDE project. It describes a "external tools" action for kate and provides a dialog page to configure that. This library is free software; you can redistribute it and/or modify it under the terms of the GNU Library General Public License version 2 as published by the Free Software Foundation. This library 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 Library General Public License for more details. You should have received a copy of the GNU Library General Public License along with this library; see the file COPYING.LIB. If not, write to the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. --- Copyright (C) 2004, Anders Lund <anders@alweb.dk> */ #ifndef _KATE_EXTERNAL_TOOLS_H_ #define _KATE_EXTERNAL_TOOLS_H_ #include <tdeaction.h> #include <kdialogbase.h> #include <kate/document.h> #include <kmacroexpander.h> #include <tqpixmap.h> /** * The external tools action * This action creates a menu, in which each item will launch a process * with the provided arguments, which may include the following macros: * - %URLS: the URLs of all open documents. * - %URL: The URL of the active document. * - %filedir: The directory of the current document, if that is a local file. * - %selection: The selection of the active document. * - %text: The text of the active document. * - %line: The line number of the cursor in the active view. * - %column: The column of the cursor in the active view. * * Each item has the following properties: * - Name: The friendly text for the menu * - Exec: The command to execute, including arguments. * - TryExec: the name of the executable, if not available, the * item will not be displayed. * - MimeTypes: An optional list of mimetypes. The item will be disabled or * hidden if the current file is not of one of the indicated types. * */ class KateExternalToolsMenuAction : public TDEActionMenu { friend class KateExternalToolAction; Q_OBJECT public: KateExternalToolsMenuAction( const TQString &text=TQString::null, TQObject *parent=0, const char* name=0, class KateMainWindow *mw=0 ); ~KateExternalToolsMenuAction() {}; /** * This will load all the confiured services. */ void reload(); class TDEActionCollection *actionCollection() { return m_actionCollection; } private slots: void slotDocumentChanged(); private: class TDEActionCollection *m_actionCollection; class KateMainWindow *mainwindow; // for the actions to access view/doc managers }; /** * This Action contains a KateExternalTool */ class KateExternalToolAction : public TDEAction, public KWordMacroExpander { Q_OBJECT public: KateExternalToolAction( TQObject *parent, const char *name, class KateExternalTool *t ); ~KateExternalToolAction(); protected: virtual bool expandMacro( const TQString &str, TQStringList &ret ); private slots: void slotRun(); public: class KateExternalTool *tool; }; /** * This class defines a single external tool. */ class KateExternalTool { public: KateExternalTool( const TQString &name=TQString::null, const TQString &command=TQString::null, const TQString &icon=TQString::null, const TQString &tryexec=TQString::null, const TQStringList &mimetypes=TQStringList(), const TQString &acname=TQString::null, const TQString &cmdname=TQString::null, int save=0 ); ~KateExternalTool() {}; TQString name; ///< The name used in the menu. TQString command; ///< The command to execute. TQString icon; ///< the icon to use in the menu. TQString tryexec; ///< The name or path of the executable. TQStringList mimetypes; ///< Optional list of mimetypes for which this action is valid. bool hasexec; ///< This is set by the constructor by calling checkExec(), if a value is present. TQString acname; ///< The name for the action. This is generated first time the action is is created. TQString cmdname; ///< The name for the commandline. int save; ///< We can save documents prior to activating the tool command: 0 = nothing, 1 = current document, 2 = all documents. /** * @return true if mimetypes is empty, or the @p mimetype matches. */ bool valid( const TQString &mimetype ) const; /** * @return true if "tryexec" exists and has the executable bit set, or is * empty. * This is run at least once, and the tool is disabled if it fails. */ bool checkExec(); private: TQString m_exec; ///< The fully qualified path of the executable. }; /** * The config widget. * The config widget allows the user to view a list of services of the type * "Kate/ExternalTool" and add, remove or edit them. */ class KateExternalToolsConfigWidget : public Kate::ConfigPage { Q_OBJECT public: KateExternalToolsConfigWidget( TQWidget *parent, const char* name); virtual ~KateExternalToolsConfigWidget(); virtual void apply(); virtual void reload(); virtual void reset() { reload(); } // sigh virtual void defaults() { reload(); } // double sigh private slots: void slotNew(); void slotEdit(); void slotRemove(); void slotInsertSeparator(); void slotMoveUp(); void slotMoveDown(); void slotSelectionChanged(); private: TQPixmap blankIcon(); TQStringList m_removed; class TDEListBox *lbTools; class TQPushButton *btnNew, *btnRemove, *btnEdit, *btnMoveUp, *btnMoveDwn; class TDEConfig *config; bool m_changed; }; /** * A Singleton class for invoking external tools with the view command line */ class KateExternalToolsCommand : public Kate::Command { public: KateExternalToolsCommand (); virtual ~KateExternalToolsCommand () {}; static KateExternalToolsCommand *self(); void reload(); public: virtual TQStringList cmds (); virtual bool exec (Kate::View *view, const TQString &cmd, TQString &msg); virtual bool help (Kate::View *view, const TQString &cmd, TQString &msg); private: static KateExternalToolsCommand *s_self; TQStringList m_list; TQMap<TQString,TQString> m_map; bool m_inited; }; /** * A Dialog to edit a single KateExternalTool object */ class KateExternalToolServiceEditor : public KDialogBase { Q_OBJECT public: KateExternalToolServiceEditor( KateExternalTool *tool=0, TQWidget *parent=0, const char *name=0 ); class TQLineEdit *leName, *leExecutable, *leMimetypes,*leCmdLine; class TQTextEdit *teCommand; class TDEIconButton *btnIcon; class TQComboBox *cmbSave; private slots: /** * Run when the OK button is clicked, to ensure critical values are provided */ void slotOk(); /** * show a mimetype chooser dialog */ void showMTDlg(); private: KateExternalTool *tool; }; #endif //_KATE_EXTERNAL_TOOLS_H_