Page 1 of 1

Explorer++ is now open source

Posted: Mon Jan 18, 2010 2:23 am
by David Erceg
Hi everyone,

I'm glad to announce today that the Explorer++ source code has been released under the GNU GPLv3 license. A major factor in my decision to release the code was the desire to have input from other programmers, which I hope will lead to increased quality and shorter release times for Explorer++. The source code is available from SourceForge.

Explorer++ SourceForge homepage
SVN Repository

For those people who would like to help out, I've included some information below to help you get started.

Project Overview
Explorer++ is composed of six individual projects. There are currently ~35,000 lines of code (not including comments or whitespace) distributed across the entire solution, with the source been a mixture of C/C++.

Projects
Explorer++ - This is the main, and by far the biggest of the six projects. It manages the GUI, and handles all interaction with the user. It is also responsible for saving and loading user settings, and organizing the functionality provided by the lower-layer projects. Conceptually, this project is at the top layer of the design.

ShellBrowser - Together with the Explorer++ project, these two projects form the core of the application. This project is central to been able to browse through folders, and handles almost all functionality seen in individual tabs. This includes browsing folders, saving path history, inserting data into columns, sorting items, handling drag and drop, and drawing thumbnails.

MyTreeView - This project manages the treeview. It provides functionality to insert and manage directories and handle drag and drop. It also automatically updates the treeview when hardware is inserted or removed (i.e. a removable drive in inserted/removed, or a cd/dvd is inserted/ejected).

DisplayWindow - As it's name suggests, this project handles all functionality associated with the display window. This includes drawing (and caching) the gradient background, drawing columns of text, and drawing item thumbnails and icons.

HolderWindow - Manages the holder window. This is the window that encompasses the main treeview (i.e the 'Folders' window). This is by far the smallest of the six projects.

Helper - Conceptually, this project is at the lowest layer of the design. It provides miscellaneous functionality to all higher level projects, including the Explorer++ project.

Development Environment
Visual Studio 2008 is the main development environment, while the Windows SDK version I use to compile Explorer++ is 7.0 (which can be obtained here). Version 6.0A of the SDK (i.e. the version that comes with Visual Studio 2008) may be used, although one or two definitions may have to be manually added to the Explorer++ project.

Note also that the Versioner project (Tools\Versioner) must be built before building the main Explorer++ project.

Submitting Patches
If you have written some code for Explorer++, and would like to have it included in the main development tree, please email me (david(AT)explorerplusplus(DOT)com) the SVN patch, or create a new post in the forum, with the patch as an attachment. In either case, please be sure to include a description of what the patch does.

In the future, I may consider giving write access to the SVN repository to developers, based on the frequency of patch submissions and quality.

Also just note that I would prefer it if your code follows the coding style used throughout the majority of the project (the style can be deduced by looking through any of the associated source files), although I'm not too worried about minor deviations.

Finally, if you have an issue regarding development, or would like some help understanding some part of the design, please feel free to email me. The code currently contained within the SVN repository is essentially version 1.0.0.0, with a few bug fixes. It contains at least one fairly large bug (due to an incomplete feature to save column widths), which means that this SVN version should not be put into general use.

Thanks, and happy coding :)

David