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
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
|
This document tries to give a little overview about Quanta classes and their
interactions. The document is for Quanta+ 3.3 as of 27-05-2004.
1. src directory
-----------------
- the main classes
KSplash: the splash screen class (used only for KDE < 3.2.3). Called from the
KQApplication classes.
KQApplicationPrivate: the common class for the unique and non-unique mode
Quanta application.
KQApplication: the non-unique version of the Quanta application.
KQUniqueApplication: the unique version of the Quanta application.
QuantaApp: the main window class of Quanta. The main purpose is to handle
general user events and to process and provide general informations.
As it inherits from KMdiMainFrm it also does some window managing
jobs.
There is one global object of this type called quantaApp, but it's
recommended that you use the signal/slot mechanism instead of
calling directly the QuantaApp methods. It interacts almost with
every other class.
QuantaInit: a class used only on startup to build the user interface, load the options,
set up the signal/slot connections, etc. It has a very short life and can be
imagined as a part of QuantaApp.
QuantaDoc: an old class inherited from the pre-KMDI design of Quanta. The methods
from it most probably belong somewhere else (eg. QuantaApp). The main
tasks now are related to document opening and handling of some user
events. There is only one object of this type.
QuantaView: a QuantaView can be imagined as a visual representation of a document,
plugin, part. It's the widget on a "tab" in the user interface. Each object
may hold either a Document (real document), QuantaPlugin (a plugin) and/or
a common widget (anything, like the preview part, documentation part).
It has methods to save the document, switch between different view modes
(VPL, source) and reacts to some events, like getting the focus.
The views are managed by the ViewManager.
ViewManager: singleton object which manages the QuantaView's. It has methods to
create, remove, save views, reacts to view change, handles the
tab context menus and the D&D of tabs. Interacts with QuantaApp and
QuantaView.
Document: an editable (KTextEditor) document with advanced, Quanta specific features.
There is a 1-1 relation between a Document and QuantaView. Each view can
have one Document and each Document can have only one view. Multiple
views of the same document is not supported by Quanta at this moment.
The class has methods to manipulate the KTextEditor::Document and
KTextEditor::View via the various KTextEditor interfaces in an editor
independent mode. Main tasks are:
- react to user keypresses
- handle autocompletion (when it should appear, what should appear in the
completion box, autocompleting of child tags)
- react to changes in the document and ask for a rebuild of the node tree
- modify the closing/opening tags based on the node tree
- create temporary files of opened documents (and after each save)
- create backups of documents
- handle text and tag insertion
- handling tag modifications
- react to changes made to the document outside of Quanta
- detect the main DTD of the document. Each Document has a main DTD,
but may contain other pseudo-DTDs inside.
- provides convenience methods to work with text documents (find,
findRev, findWordRev, currentWord, text selection)
- keeps track of untitled and modified status
DTDs: stores and loads the DTEPs from disk as they are requested. Works with
DTDStruct classes (structures). Interacts with every class which works with
DTEPs. Singleton.
DCOP* classes: the DCOP interfaces of Quanta. WindowManagerIf is the general
purpose interface working mainly with views and files, implemented in the
QuantaApp class. SettingsIf is an interfaces towards various Quanta settings and
QuantaIf is an interface towards Quanta internals like selectors, used in some
of the DTEP definition files. The interfaces (except WindowManagerIf) have a separate implementation class.
2. parsers directory
---------------------
- parsing and node tree related classes (yes, QTag might not belong here)
Parser: parses a document and builds the node tree. It does a quick parsing of XML
tags, special areas are not parsed in detail, only their start and end region is
determined. For XML areas it parses also for groups and does a quick
parsing of included (XML) files as well. It has a method to parse only the
changed area of the document (rebuild) and a method to find the node from
the tree corresponding for a place in the document (nodeAt). It calls
the detailed special area parser in the background via a singleshot timer.
Interacts with the SAParser, StructureTreeView and any other class requesting
information from the node tree.
There is usually only one Parser object in the memory, but it is not a singleton
as it's used in the table editor as well.
SAParser: special area (pseudo DTEP) parser. Parses scripts, CSS, etc. Can do a quick
or detailed parsing in synchronous or asynchronous mode. The later means that
the parsing is done in small steps, using singleshot timers to call the next step, so
the user interface is not blocked while the detailed, time consuming parsing is
done. The parsing is context based. Calls the special area group parser for
every special area node. Emits signals to indicate the ending of parsing and
the need of the structure tree rebuilding.
SAGroupParser: the special area group parser called from SAParser. This can behave
asynchronously as well. Emits signals to indicate the ending of parsing and
the need of the rebuilding of the group part of the structure tree.
ParserCommon: common (static) methods used by the Parser and SAParser, and holds
parser-global data structures as well.
Node: an element of the Node tree. Each Node has a parent, child, next and previous
Node (of course they can be NULL) and a Tag. The Tag cannot be NULL.
Each node appears at least once under the visual structure tree (mainListItem),
but can appear more than once if it's part of some structure groups (listItems)
There are convenience methods which helps navigating through the node tree and
some flags noting the status of the node. See the description of the class
attributes.
Tag: a parsed tag. Each node has a tag. A tag can be a real XML tags from the
document or some other special tag noting text, empty area, structure begin,
structure end, comment, etc. XML tags are parsed and it's possible to read
the available attributes and attribute values, modify them, etc. Each tag has a
DTD associated with it, meaning that "this tag was parsed and should be
interpreted as part of this DTD", holds the position in the document, the
original text found at that position, a cleaned version of that text (without
comments), etc. A Tag is not necessary a valid tag of the DTD. <foo foo1="foo">
is a tag in any DTD.
QTag: a valid DTD tag. When the tagXML files are read, each DTDStruct will contain many
QTag objects describing the valid tags in that DTD. The QTag gives us the
possible attributes and their values, the relationship regarding other QTags and
some other status information (single, optional, etc.). A QTag can hold
information about pseudo-DTD tags, which are not real XML tags, but they can
describe methods, classes, functions, etc.
DTDParser: parses a real DTD definition file and converts to tagXML.
3. utility directory
-------------------
- helper, convenience classes; other classes not belonging anywhere else
QuantaCommon: static convenience methods, used in many places.
QConfig: holds the Quanta configuration settings.
QuantaToolBar/ToolbarTabWidget/ToolbarXMLGUI: classes needed to make the
user toolbars work.
TagAction: an extended KAction, which can be modified in Quanta. May be of three
types: Tag, Script, Text. Script actions can be executed in synchronous
(execute) or async. mode (insertTag). TagActions are usually put on the
user toolbars and under Tags menu, but they can be plugged anywhere
just like the normal KActions.
4. treeviews directory
-----------------------
- classes dealing with the different treeviews
FilesTreeView/FilesTreeBranch/FilesTreeViewItem: shows the file and directory
structure in a tree. Can show more than one tree at once. By default
it shows a tree starting with the root directory (/) and one starting with the
$HOME directory of the current user. It's possible to specify other
such top-level directories. The toplevel directories can be remote directories
as well. The class handles the events of the file and folder context menus and
communicates using signals with QuantaApp, for example to indicate that
a file must be opened.
It's an extension of the KFileTreeView.
ProjectTree* : an extension of the FilesTree* classes to show the project files in a
tree. The project files are not what are under the project directory, but
only those that are listed in the .webprj file. Communicates with QuantaApp
and the Project object via signals. It's a singleton class.
TemplatesTree*: an extension of the FilesTree* classes to show the three special
template directories (global, local and project template directory). Handles
template specific actions (insert, template settings, send in email), D&D.
It's a singleton.
ScriptTreeView: an extension of FilesTreeView class which shows the global and
local script directories, makes possible to execute or edit the scripts,
view or edit their descriptions.
StructTreeView: the visual representation of the internal node tree. Build the visual
tree from the node tree, makes possible to navigate through the document
using the tree.
StructTreeTag: an element of the structure tree. Every element has an associated Node
and the element is included in the listItems of the Node.
The problem checker is done in the constructor of the StructTreeTag element,
by verifying if the Node associated with the element holds a valid Tag for the
current DTD and the relation between the Node and the surrounding nodes
are valid in this DTD.
UploadTree*: a treeview and it's file/folder elements with a special look. There is a
column with a 3 state checkbox. In case of folders checked means that
every element under the folder is checked, un-checked means that none
of the elements under the folder are checked and grayed means that some
elements (but not all) are checked. Used in the project upload dialog, the
project folder scanning dialog and in the new project wizard.
TagAttributeTree/EnhancedTagAttributeTree/EditableTree/
DualEditableTree/TopLevelItem/Attribute*: classes used to edit the attributes of a tag.
DocTreeView/DocItem/DocFolder: the treeview and it's elements which show the
different loaded documentation files, including the project documentation.
The tree shows the documentation titles and the content is opened in a
HTML part embedded in a QuantaView or a separated toolview.
5. project directory
---------------------
- project management related classes
Project: the main project management class. Loads, stores, modifies the .webprj file.
Project related actions like project rescan, new project, project upload,
project properties, adding/removing files to the project are handled here.
It's a singleton.
ProjectNew*: classes for different stages of the new project wizard. They are
instantiated from the Project object.
ProjectUpload: class that handles uploading of project files. It has also a special mode
when the UI is minimized and in this mode the class can be used to modify
the upload profiles.
RescanPrj: class that handles rescanning of the project directory and marking the
files that are under the directory but not in the .webprj file. It does not show
or mark the files that are excluded from the project in the project options.
ProjectURL: an extended KURL with some status informations including description,
upload status and a note if the URL is a document-base folder or not.
Used inside Project and the other classes dealing with the project files (ProjectUpload, ProjectTreeView)
6. plugins directory
---------------------
- (mainly) classes related to the plugin system
QuantaPlugin: manages a configured Quanta plugin (a KPart). Takes care of loading and
unloading of the part, embedding it in a widget and calling the part's
openURL method with the configured argument. Special plugins that
needs to have a more detailed communication with Quanta can have
a plugin class inherited from QuantaPlugin.
QuantaPluginInterface: the interface between QuantaApp and the QuantaPlugins. Reads
the plugins, returns pointers to them on request, validates them, etc.
QuantaPluginEditor and QuantaPluginConfig: classes which helps configuring the plugins.
SpellChecker: Quanta specific spellchecker. Not a real QuantaPlugin and most probably
it belongs to the utility directory.
7. parts directory
------------------
- KParts used inside Quanta.
WHTMLPart: simple TDEHTML based class which can display HTML pages. Used in preview
and documentation.
kafka directory: VPL related classes
8. messages directory
------------------------
- messaging system
MessageOutput/MessageItem: widget to show messages from external applications or
from Quanta. Used to display the result of actions, but used by the
Problem reporter as well. It has a methods to find the line and column
number inside a message and clicking on a text containing the line and
column moves the cursor in the editor to that position.
9. dialogs directory
---------------------
- some dialog implementations used in Quanta. The settings subdirectory contains the
widget implementations for the different Quanta setting pages, the tagdialog directory
contains classes dealing with the tagXML dialogs.
ActionConfigDialog: makes TagAction configuration possible. Displays all possible
actions (not just TagActions) in a tree, all loaded user toolbars with
the actions on them. TagActions can be created, deleted, modified and
plugged/unplugged in a user toolbar.
CopyTo: class which is used in many places to do asynchronous file copy. It signals
when the file copy is done and the object can be deleted. Mainly used
inside the Project* classes to add files to the project.
DirtyDlg: dialog offering some possibilities for the user when a document was changed
outside of Quanta. In case of comparing the files it launches Kompare, waits
until it finishes and returns afterwards, this way blocking Quanta while Kompare
is running.
FileCombo: widget class offering a combobox and a button to select files. Used in the
Tagxml class.
SpecialCharDialog: a dialog which offers the user a list of special characters.
AbbreviationDlg: handles the code abbreviations (adding/removing/editing them)
FileMasks: a badly named class. Currently takes care of editing the environment settings.
ParserOptions: make possible to finetune the parser and the structure tree behavior.
PreviewOptions: another not so well named class, as currently it makes possible to
configure the UI look and behavior. Between others it offers possibility to
change the preview and documentation location, the tab and toolview
behavior, etc.
tagdialogs directory: classes and widgets used to build a dialog from a tagXML file, which
makes possible to edit a tag in a document. Based on a Tag and the
corresponding QTag.
10. components directory
---------------------------
- holds classes dealing with specific functions, many are DTD specific.
csseditor directory: classes for the visual CSS editor
cvsservice directory: a classes providing CVS functions for different context menus
(document context menu, treeview context menus) using cvsservice from
Cervisia.
debugger directory: classes providing interface towards different debuggers, including
the Gubed PHP debugger.
framewizard directory: classes for the visual HTML framewizard (frame editor)
tableeditor directory: dialog to visually edit HTML tables
|