diff options
| author | craig <craig@11d20701-8431-0410-a711-e3c959e3b870> | 2012-01-01 11:40:09 +0000 |
|---|---|---|
| committer | craig <craig@11d20701-8431-0410-a711-e3c959e3b870> | 2012-01-01 11:40:09 +0000 |
| commit | 7ed83b6c6666eb8b6b104c211ae7e52907350372 (patch) | |
| tree | 4430b556abac0ad660a0aacf1887d77f85d8be02 /scribus/transaction.h | |
| download | scribus-7ed83b6c6666eb8b6b104c211ae7e52907350372.tar.gz scribus-7ed83b6c6666eb8b6b104c211ae7e52907350372.tar.xz scribus-7ed83b6c6666eb8b6b104c211ae7e52907350372.zip | |
Branch 1.3.5 tree to 1.4.x tree, goodbye 1.3.x
git-svn-id: svn://scribus.net/branches/Version14x/Scribus@17163 11d20701-8431-0410-a711-e3c959e3b870
Diffstat (limited to 'scribus/transaction.h')
| -rw-r--r-- | scribus/transaction.h | 102 |
1 files changed, 102 insertions, 0 deletions
diff --git a/scribus/transaction.h b/scribus/transaction.h new file mode 100644 index 0000000..153d4a4 --- /dev/null +++ b/scribus/transaction.h @@ -0,0 +1,102 @@ + +/* + For general Scribus (>=1.3.2) copyright and licensing information please refer + to the COPYING file provided with the program. Following this notice may exist + a copyright and/or license notice that predates the release of Scribus 1.3.2 + for which a new license (GPL+exception) is in place. + */ +/*************************************************************************** +* Copyright (C) 2008 by Andreas Vox * +* * +* 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. * +* * +* This program 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 General Public License for more details. * +* * +* You should have received a copy of the GNU General Public License * +* along with this program; if not, write to the * +* Free Software Foundation, Inc., * +* 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. * +***************************************************************************/ + +#ifndef TRANSACTION_H +#define TRANSACTION_H + +#include "scribusapi.h" + + +/** + Interface class for objects representing a going transaction. + Will be specialized by classes like Undomanager for use as + a result type in their beginTransaction() method. +*/ +class SCRIBUS_API Transaction { + +public: + enum Status { + STATE_OPEN, + STATE_WILLFAIL, + STATE_FAILED, + STATE_COMMITTED + }; + + struct TransactionStateBase { + Status m_status; + }; + + Transaction(TransactionStateBase* data) : m_data(data) + { + if (data != 0) + m_data->m_status = STATE_OPEN; + } + + Transaction(const Transaction& other) : m_data(other.m_data) + { + const_cast<Transaction&>(other).m_data = 0; // mean, but necessary so that not both destructors commit/close + } + + + /** + Automatically commits if forgotten. + Override as appropiate. Since the superclass destructor is called last, you + can cancel in the subclass destructor; the commit here then will do nothing. + Don't forget to set m_data to NULL if you free the m_data pointer! + */ + virtual ~Transaction(); + + /** + Commits this transaction if in STATE_OPEN. + If in STATE_WILLFAIL, cancel the transaction instead; otherwise do nothing. + Returns true iff the transaction was committed or canceled. + */ + virtual bool commit() = 0; + + /** + Cancels this transaction if in STATE_OPEN or STATE_WILLFAIL; otherwise do nothing + Returns true iff the transaction was canceled. + */ + virtual bool cancel() = 0; + + /** + Marks this transaction as failed. + */ + virtual void markFailed(); + + int getState() const; + +protected: + // if you subclass, do *not* add any data members but use this pointer instead, + // otherwise the copy initializer will strip your objects. + TransactionStateBase* m_data; + +private: + // blocked + Transaction& operator= (const Transaction&) { return *this; } +}; + +#endif |
