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.
tdewebdev/quanta/utility/tagaction.h

139 lines
4.8 KiB

/***************************************************************************
tagaction.h - description
-------------------
begin : ?
copyright : (C) ? Dmitry Poplavsky
(C) 2002-2005 Andras Mantia <amantia@kde.org>
***************************************************************************/
/***************************************************************************
* *
* 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 TAGACTION_H
#define TAGACTION_H
#include <tdeversion.h>
#include <tdeaction.h>
#include <tdeactioncollection.h>
#include <tqstring.h>
#include <tqdom.h>
class TDEMainWindow;
class QuantaView;
class TDEProcess;
class TQDomElement;
class TQFile;
class TQTimer;
class MessageOutput;
class Node;
class NodeModifsSet;
class NodeSelection;
/**
* An action for inserting an XML tag.
*
* @author Dmitry Poplavsky, dima@kde.org
* Andras Mantia, amantia@kde.org
* Paulo Moura Guedes, moura@tdewebdev.org
*/
class TagAction : public TDEToggleAction
{
Q_OBJECT
public:
/**
* Create an insert from dom element.
* @param toggle If set to true, the class behaves like a TDEToggleAction;
* Else it behaves like a TDEAction. This avoids the multi-inheritance problem.
*/
TagAction(TQDomElement *element, TDEMainWindow *parentMainWindow, bool toggle = false);
virtual ~TagAction();
TQDomElement data() const { return tag; }
void setModified(bool modified) { m_modified = modified;}
bool isModified() const {return m_modified;}
void setOutputFile(TQFile* file);
void setInputFileName(const TQString& fileName);
void addArguments(const TQStringList& arguments);
bool toggable() const {return tag.attribute("toggable") == "true";}
bool toggled() const {return isChecked();}
/** Activates the action.
@param blocking in case of script actions, the script is run in blocking mode, if this argument is true
*/
void execute(bool blocking);
TQString type();
/**
* Remove accelerator from tag action name *
*/
TQString actionText();
TQString XMLTagName() const;
TQString openXMLTagString() const;
TQString closeXMLTagString() const;
signals:
void showMessage(const TQString& msg, bool append);
void clearMessages();
void showMessagesView();
void createNewFile();
public slots:
virtual void slotActivated();
/**
* We need this information in order to know if queued actions should be applied.
* It's public because it can be activated by other classes if there are any queued actions.
*/
virtual bool slotActionActivated(TDEAction::ActivationReason reason, TQt::ButtonState state);
protected slots:
virtual void slotGetScriptOutput( TDEProcess *, char *buffer, int buflen );
virtual void slotGetScriptError( TDEProcess *, char *buffer, int buflen );
virtual void scriptDone();
void slotTimeout();
void slotProcessExited(TDEProcess *);
virtual bool slotActionActivated();
private:
void applyTagInSelection(Node* start_node, int start_offset, Node* end_node, int end_offset,
NodeSelection& selection, NodeModifsSet* modifs) const;
void applyTagInMixedSelection(Node* start_node, int start_offset, Node* end_node, int end_offset,
NodeSelection& selection, NodeModifsSet* modifs) const;
void deapplyTagInSelection(Node* start_node, int start_offset, Node* end_node, int end_offset,
NodeSelection& selection, NodeModifsSet* modifs) const;
void deapplyTagInMixedSelection(Node* start_node, int start_offset, Node* end_node, int end_offset,
NodeSelection& selection, NodeModifsSet* modifs) const;
private:
TDEProcess *proc;
bool firstError;
bool firstOutput;
bool m_modified;
bool loopStarted;
bool m_useInputFile;
bool m_useOutputFile;
TQString scriptOutputDest;
TQString scriptErrorDest;
TQTimer* timer;
TQDomElement tag;
TQFile* m_file;
TDEMainWindow *m_parentMainWindow;
TQString m_inputFileName;
TQStringList m_argsList;
uint m_killCount;
bool const m_toggle;
};
#endif // TAGACTION_H