summaryrefslogtreecommitdiffstats
path: root/quanta/project/projectlist.h
blob: 505fbfd03cc0e5573c96a6ff9cabdc525046d1dc (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
/***********************************************************************
                          projectlist.h  -  List of ProjectURL's
                             -------------------
    begin                : June 19 2004
    copyright            : (C) 2004 by Jens Herden <jens@kdewebdev.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 PROJECTLIST_H
#define PROJECTLIST_H

#include "projecturl.h"
#include "qextfileinfo.h"

class QDomDocument;


/**
       @short Container for the project files.

       For fast lookup this container is based on QDict.
       The key is generated without a trailing '/' so it doesn't matter if you
       search for a folder in this container with or without trailing '/'
*/

class ProjectList : public ProjectUrlList
{
public:
  /** 1009 is a guess for maximum files in an average project, this number should be prime (@ref QDict)
  */
  ProjectList( int size = 1009 );
  ~ProjectList() {};

  typedef QDictIterator<ProjectURL> Iterator;

  /** resets @ref m_baseURL */
  void clear();

  /**
       reads entries from the dom tree
       invalid entries gets removed!
       @return true if an old structure was found
   */
  bool readFromXML(QDomDocument &dom, const KURL &baseURL,
                     const KURL &templateURL, const QRegExp &excludeRx);
  /**
       @return the relative URL
  */
  KURL toRelative(const KURL &url) const
  {
    return QExtFileInfo::toRelative(url, m_baseURL, false);
  }

  /**
      removes an url from the list and deletes the corresponding node

       @return true if url was in list
  */
  bool removeFromListAndXML(const KURL &url);

  /**   @return true if url is in container
  */
  bool contains(const KURL &url) const;

  /**   @return pointer to the entry or 0 if not found
  */
  ProjectURL * find(const KURL &url) const;

  /**
        Attention: never delete the object you have given here because the
        container takes ownership and deletes it later!

        @param the ProjectURL to add to the container
  */
  void insert(ProjectURL *url);

  /**   @return true if url is in container and a folder
  */
  bool isFolder(const KURL &url) const;

private:
  KURL m_baseURL;

  /**
       private because I want to control the key.
       use insert(ProjectURL *url) instead.
  */
  void insert(const QString & key, const ProjectURL * item);

  /**
       private because I want to control the key.
       use find(const KURL &url) instead.
  */
  ProjectURL *find ( const QString & key ) const;

  /**
       private because I want to control the key.
  */
  bool remove ( const QString & key );

  /**
       private because I want to control the key.
  */
  void replace(const QString & key, const ProjectURL * item);
};

#endif // PROJECTFILES_H