notepad/notepad1/inc/NpdCoreModel.h
changeset 0 f979ecb2b13e
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/notepad/notepad1/inc/NpdCoreModel.h	Tue Feb 02 10:12:19 2010 +0200
@@ -0,0 +1,281 @@
+/*
+* Copyright (c) 2002 Nokia Corporation and/or its subsidiary(-ies).
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of "Eclipse Public License v1.0"
+* which accompanies this distribution, and is available
+* at the URL "http://www.eclipse.org/legal/epl-v10.html".
+*
+* Initial Contributors:
+* Nokia Corporation - initial contribution.
+*
+* Contributors:
+*
+* Description:  Declaration of core part of Notepad Model class.
+*
+*/
+
+
+#ifndef NPDCOREMODEL_H
+#define NPDCOREMODEL_H
+
+// INCLUDES
+#include <e32std.h>
+#include <e32base.h>
+#include <badesca.h>
+#include <d32dbms.h>
+
+// CONSTANTS
+_LIT(KNotepadSqlDeleteHead, "DELETE FROM Table1 WHERE key="); //39 chars
+const TInt KNotepadSqlDeleteHeadSize(49); // %d costs 10 chars in max
+
+// FORWARD DECLARATIONS
+class CFileStore;
+class CDaUserColSet;
+class CEikonEnv;
+class CPlainText;
+
+// CLASS DECLARATION
+/**
+* Core part of the Notepad Engine.
+* CNotepadCoreModel is a core part of Notepad engine.
+* This class manages a DBMS session.
+*  
+* @lib NpdLib.lib
+* @see CNotepadModel, CNotepadTableModel
+*/
+class CNotepadCoreModel : public CBase
+    {
+    public:
+        enum TNotepadModelRowResult
+            {
+            ENotepadModelRowNop = 0,
+            ENotepadModelRowDeleted,
+            ENotepadModelRowAdded,
+            ENotepadModelRowUpdated
+            };
+        
+    public:  // Constructors and destructor
+
+        /**
+        * Default c++ constructor.
+        */
+        CNotepadCoreModel();
+
+        /**
+        * second phase constructor.
+        *
+        * @param aResId resource id of data file name.
+        */
+        void ConstructL(TInt aResId);
+
+        /**
+        * Destructor.
+        *
+        */
+        virtual ~CNotepadCoreModel();
+
+    public: // New functions
+
+        /**
+        * Return contents of a specified key.
+        *
+        * Caller own a returned object.
+        *
+        * @param aKey unique key id of Notepad.
+        * @return text content of specified item.
+        */
+        HBufC* ContentByKeyL(const TInt aKey);
+
+        /**
+        * Return the number of items in the database.
+        *
+        * @return Count of items.
+        */
+        TInt CountL();
+
+        /**
+        * Insert a text to the database as a new row.
+        * If a given text is regarded as empty, nothing is done.
+        *
+        * @param aDes descripter to save. if NULL, aText will be used.
+        * @param aText text to save. if NULL, aDes will be used.
+        * @return ENotepadModelRowNop if a given text is regarded as empty,
+        *  ENotepadModelRowAdded if really added.
+        */
+        TInt InsertL(const TDesC& aDes, TInt& aKey);
+
+        /**
+        * Update an entry.
+        * If a given text is regarded as empty, the row is removed.
+        * If a given text is regarded as unchanged, nothing is done.
+        * 
+        * @param aText text to overwrite.
+        * @param aKey entry key to update.
+        * @return ENotepadModelRowNop if a given text is regarded as unchanged,
+        *  ENotepadModelRowDeleted if a given text is regarded as empty, and
+        *  ENotepadModelRowUpdated if really updated.
+        */
+        TInt UpdateL(const TDesC& aDes, TInt& aKey);
+
+        /**
+        * Delete a item by Key.
+        *
+        * @param aKey key to delete. 
+        * @return If the key were not found, return ENotepadModelRowNop.
+        */
+        TInt DeleteL(TInt aKey);
+
+        /**
+        * Make compaction of the database.
+        *
+        * @return the return value of RDbDatabase::Compact.
+        */
+        TInt Compact();
+
+        /**
+        * Sets the iModOp when a note is inserted/deleted/updated.
+        *
+        * @param aModeOp Insert/Delete/Update Operation.
+        */
+        void SetModeOp(CNotepadCoreModel::TNotepadModelRowResult aModeOp);
+
+    protected: // New functions
+
+        /**
+        * Read text content of aKey into aDes.
+        * 
+        * @param aDes buffer for label.
+        * @param aKey key id to read.
+        */
+        void AppendContentAsLabelL(TDes& aDes, const TInt aKey);
+
+        /**
+        * Read text content into aDes.
+        * 
+        * @param aDes buffer for label.
+        * @param aDbView RDbView already opened for GetL.
+        */
+        void AppendContentAsLabelL(TDes& aDes, RDbView& aDbView);
+
+        /*
+        * Ask if the model is running for Templates.
+        */
+        inline TBool IsTemplates() const;
+
+        /*
+        * Returs the value of iModOp.
+        *
+        * @return value of the operation.
+        */
+        CNotepadCoreModel::TNotepadModelRowResult ModeOp();
+
+        /**
+        * Updates the ItemArray and the KeyArray when a particular
+        * Note is either Inserted or Deleted or Updated.
+        *
+        * @param aItemArray Array of items to be displayed in the listbox.
+        * @param aKeyArray key array.
+        * @param aTimeFormat Time format.
+        */
+		void DoUpdateNotepadItemArrayAndKeyArrayL(CDesCArray& aItemArray,RArray<TInt>& aKeyArray,HBufC& aTimeFormat);
+
+    private:  // New functions
+
+        /**
+        * Open (or create) a database.
+        *
+        * If already opened, do nothing.
+        * If there is no datafile, create a new datafile.
+        *
+        * @internal
+        */
+        void OpenDatabaseL();
+
+        /**
+        * Create and initialize database file.
+        *
+        */
+        void CreateDataFileL();
+
+        /**
+        * Initialize database file.
+        *
+        */
+        void InitDataFileL();
+
+        /**
+        * Insert factory setting of templates.
+        *
+        */
+        void SetDefaultTemplatesL();
+
+        /**
+        * Create database table definition.
+        *
+        * @return created table column definition.
+        */
+        CDbColSet* CreateDbColSetLC() const;
+
+        /**
+        * Recover DB and Leave.
+        *
+        */
+        void Rollback();
+
+        /**
+        * Common part of NewRowL and UpdateRowL.
+        *
+        * @param aItemIndex Update if aItemIndex>=0, otherwize Insert.
+        * @param aText content.
+        */
+        TInt InsertOrUpdateL(const TDesC& aDes, TInt& aKey);
+
+        /**
+        * Delete database file.
+        *
+        */
+        void DeleteFileL();
+
+        /**
+        * Check the database table.
+        *
+        * @return ETrue if incorrect table, otherwise EFalse.
+        */
+        TBool IsInvalidTableL();
+
+        /**
+        * Gets the Index where the new/updated note needs to be inserted.
+        *
+        * @return Index where the note needs to be inserted.
+        */
+		TInt GetInsertionIndex(const TDesC& aDes,
+								CDesCArray& aItemArray);
+
+    protected:  // Data
+
+        enum TNotepadColumnType
+            {
+            ENotepadKey = 1, // this must be 1 (DBMS/SQL restriction)
+            //ENotepadUpdateDate,
+            ENotepadUpdateTime,
+            ENotepadMemo,
+            ENotepadColCountPlusOne // sentinel
+            };
+
+        RDbNamedDatabase iDatabase;
+        CEikonEnv* iEnv; // cache
+
+    private:     // Data
+        TInt iDataResourceId;
+        HBufC* iDataFile; // own
+        RDbs iDbs;
+       	TNotepadModelRowResult iModeOp;
+       	TInt iKey;
+       	TTime iNpdItemLastChanged;
+    };
+
+#include "NpdCoreModel.inl"
+#endif      // NPDCOREMODEL_H
+
+// End of File