summaryrefslogtreecommitdiffstats
path: root/src/app/UserAction/useraction.h
diff options
context:
space:
mode:
Diffstat (limited to 'src/app/UserAction/useraction.h')
-rw-r--r--src/app/UserAction/useraction.h145
1 files changed, 145 insertions, 0 deletions
diff --git a/src/app/UserAction/useraction.h b/src/app/UserAction/useraction.h
new file mode 100644
index 0000000..11ed68c
--- /dev/null
+++ b/src/app/UserAction/useraction.h
@@ -0,0 +1,145 @@
+//
+// C++ Interface: useraction
+//
+// Description: This manages all useractions
+//
+//
+// Author: Jonas Bähr (C) 2004
+//
+// Copyright: See COPYING file that comes with this distribution
+//
+//
+
+#ifndef USERACTION_H
+#define USERACTION_H
+
+#include <tqptrlist.h>
+
+class TQDomDocument;
+class TQDomElement;
+class TQString;
+class TQStringList;
+class KrAction;
+class KURL;
+class TDEPopupMenu;
+
+/**
+ * Useractions are Krusaders backend for user-defined actions on current/selected files in its panels
+ * and for krusader's internal actions which need some parameter. @n
+ * There are several komponents:
+ * - The UserAction class as a Manager
+ * - The interface to KDE's action-system (the KrAction)
+ * - The Expander, which parses the commandline for placeholders and calls the internal actions
+ * - A widget to manipulate the UserAction's Properties via GUI (ActionProperty)
+ * .
+ * The Useractions are stored in XML-files. Currently there are two main files. The first is a global example-file
+ * which is read only (read after the other actionfiles, doublicates are ignored) and a local file where the actions are saved.
+ * This class reads only the container and passes each action-tag to the new KrAction, which reads it's data itself.
+ *
+ * @author Jonas Bähr (http://www.jonas-baehr.de)
+ */
+
+class UserAction {
+public:
+
+ typedef TQPtrList<KrAction> KrActionList;
+
+ enum ReadMode { renameDoublicated, ignoreDoublicated };
+
+ /**
+ * The constructor reads all useractions, see readAllFiles()
+ */
+ UserAction();
+ ~UserAction();
+
+ /**
+ * adds an action to the collection.
+ */
+ void addKrAction( KrAction* action ) { _actions.append( action ); };
+
+ /**
+ * Use this to access the whole list of registerd KrActions.
+ * currently only used to fill the usermenu with all available actions. This should change...
+ * @return A reference to the internal KrActionList
+ */
+ const KrActionList &actionList() { return _actions; };
+
+ /**
+ * @return how many useractions exist
+ */
+ int count() const { return _actions.count(); };
+
+ /**
+ * removes a KrAction from the internal list but does not delete it.
+ * @param action the KrAction which should be removed
+ */
+ void removeKrAction( KrAction* action ) { _actions.remove( action ); };
+
+ /**
+ * check for each KrAction if it is available for the currend location / file and disables it if not
+ */
+ void setAvailability();
+ /**
+ * same as above but check for a specitic file
+ * @param currentURL Check for this file
+ */
+ void setAvailability(const KURL& currentURL);
+
+ /**
+ * Fills a TDEPopupMenu with all available UserActions in the list
+ * @param popupmenu to populate
+ */
+ void populateMenu(TDEPopupMenu* menu);
+
+ TQStringList allCategories();
+ TQStringList allNames();
+
+ /**
+ * reads all predefined useractionfiles.
+ */
+ void readAllFiles();
+ /**
+ * writes all actions to the local actionfile
+ */
+ bool writeActionFile();
+ /**
+ * Reads UserActions from a xml-file.
+ * @param list If provided, all new actions will also be added to this list
+ */
+ void readFromFile( const TQString& filename, ReadMode mode = renameDoublicated, KrActionList* list = 0 );
+ /**
+ * Reads UserActions from a XML-Element.
+ * @param element a container with action-elements
+ * @param list If provided, all new actions will also be added to this list
+ */
+ void readFromElement( const TQDomElement& element, ReadMode mode = renameDoublicated, KrActionList* list = 0 );
+
+ /**
+ * creates an empty TQDomDocument for the UserActions
+ */
+ static TQDomDocument createEmptyDoc();
+ /**
+ * Writes a TQDomDocument to an UTF-8 encodes text-file
+ * @param doc the XML-Tree
+ * @param filename the filename where to save
+ * @return true on success, false otherwise
+ * @warning any existing file will get overwritten!
+ */
+ static bool writeToFile( const TQDomDocument& doc, const TQString& filename );
+
+private:
+ KrActionList _actions;
+};
+
+
+#define ACTION_XML "krusader/useractions.xml"
+#define ACTION_XML_EXAMPLES "krusader/useraction_examples.xml"
+
+#define ACTION_DOCTYPE "KrusaderUserActions"
+// in well formed XML the root-element has to have the same name then the doctype:
+#define ACTION_ROOT ACTION_DOCTYPE
+#define ACTION_PROCESSINSTR "version=\"1.0\" encoding=\"UTF-8\" "
+
+
+
+#endif // ifndef USERACTION_H