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.
tdebase/kate/app/kateexternaltools.h

230 lines
7.0 KiB

/*
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 <kaction.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 KActionMenu
{
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 KActionCollection *actionCollection() { return m_actionCollection; }
private slots:
void slotDocumentChanged();
private:
class KActionCollection *m_actionCollection;
class KateMainWindow *mainwindow; // for the actions to access view/doc managers
};
/**
* This Action contains a KateExternalTool
*/
class KateExternalToolAction : public KAction, 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 KListBox *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 KIconButton *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_