# Folders

Here is a description of each folder:

* app/
  Code specific to the standalone application (== not the KParts)

* desktopfiles/
  Desktop files, to start the standalone application, from the menu and from
  within Konqueror.
  
* doc/
  Man page. This is not the HTML doc. The HTML doc is in
  extragear/graphics/doc/gwenview.

* gvcore/
  Code shared between the application and the KParts.

* gvdirpart/
  The Gwenview KPart used to browse folders.

* gvimagepart/
  The Gwenview KPart to display images.

* imageutils/
  Various image code, like rotation (lossless for JPEG, classic for others),
  scaling...

* pics/
  Icons.

* spec/
  .spec files to build RPM (probably outdated)

* tools/
  Desktop files describing external tools.

* tsthread/
  A thread library written by Lubos Lunak.

* updates/
  Update scripts to migrate configuration files within versions.


# Code

In this part we describe the main classes, not getting too deeply into details
so that this document doesn't get obsoleted too fast :-)


## gvcore
### Document classes
document.h
document*impl.h

This is the heart of Gwenview. The Document class represents a media file. It
uses the "State" design pattern to adapt its behavior depending on its state.
The various states are implemented in the Document*Impl classes.
It knows how to load, save, edit a comment, rotate and mirror a document.


### Image loader and cache
imageloader.h
cache.h

Image loading is done by the ImageLoader classes, which work together with the
cache to avoid loading an image multiple times.
A loader may be shared, for example if an image is selected and a thumbnail of
it is being generated, the same loader will be used by both.


### File views
fileviewcontroller.h
filedetailview*.h
filethumbnailview*.h
fileviewbase.h

The main class is FileViewController, which contains the KDirLister responsible
for listing folder content. It also contains a QWidgetStack which contains
both the FileDetailView and the FileThumbnailView.
FileViewBase is an abstract class, which inherits from KFileView and adds the
concept of a "shown item": the item currently viewed in the image view.


### Image view
imageview.h
imageviewtools.h

The ImageView class inherits from QScrollView to show the current image. It
implements zooming and panning.
The ImageViewTools implements the different behaviors: for example when you
use the mouse wheel you will scroll (or browse): This is implemented by the
ImageView::ScrollTool class. If you press Ctrl and use the mouse wheel, you
will zoom in the image: This is implemented by the ImageView::ZoomTool.


### ImageViewController

ImageViewController contains a stack which contains an ImageView and a KPart.
The ImageView class is used to show raster images. For SVG images and movies,
the ImageViewController loads the corresponding KPart.


### File operations
fileoperation.h
fileopobject.h

These classes implements file operations: from the user interface to the actual
operation.


## app

### Main window
mainwindow.h

The MainWindow class is responsible for gluing together all components of the
application.  It is made of a QWidgetStack which contains two pages: one for
the docked windows (==Browse mode) and another for the ImageViewController
(==View and Fullscreen modes).
There is only one instance of ImageViewController. It is 'reparent'ed when the
QWidgetStack switch between modes.


### Folder view
dirviewcontroller.h
vtabwidget.h
bookmarkviewcontroller.h
treeview.h

These classes implement the folder view. The main class is DirViewController.
It contains a VTabWidget, which contains an instance of the
BoookmarkViewController and TreeView classes.


## gvdirpart

This KPart is made of a splitter, a FileThumbnailView and an ImageView.

## gvimagepart

This KPart is simply an ImageView.