1. OMG Coding Standards
These standards should be followed by all OMG developers.
Contents
1.1. Classes
1.1.1. Names
Class in OMG begin with Omg and are formed using mixed case.
Examples:
OmgPoint
OmgDataSet
OmgLocalClient
The rationale for using the Omg prefix is explained on the Trolltech Qt Naming Page.
1.1.2. Members
Class member names begin with a lower case m and are formed using mixed case.
mMapCanvas
mCurrentExtent
In the case where a class member is a pointer, use the letter p to indicate as much:
mpCanvas
mpModel
All class members should be private. Public class members are STRONGLY discouraged
1.1.3. Function parameters
Prefix all function parameters with 'the' (or 'thep' in the case of pointers)I have only ever seen this suggested in one C++ book, but I really like thes naming scheme:
bool Foo::Bar(Dog theDog, Cat * thepCat)
{
}
1.1.4. Local Variables
As above but use 'my' prefix:
bool Foo::Bar()
{
Bunny myBunny;
Horse * mypHorse
...
}
1.1.5. Accessor and Mutator Functions
Class member values should be obtained through accesssor functions. The function should be named without a get prefix. Accessor functions for the two private members above would be:
occurrence()
maxValue()
Mutator functions should follow the same convention but must be prefixed by the word set. For example:
setOccurrence()
setMaxValue()
1.1.6. Functions
Function names begin with a lowercase letter and are formed using mixed case. The function name should convey something about the purpose of the function (usually in the form of a verb).
updateMapExtent()
setUserOptions()
1.2. Qt Designer
1.2.1. Generated Classes
Classes that are generated from Qt Designer (ui) files should have a Base suffix. This identifies the class as a generated base class.
Examples:
OmgPluginMangerBase
OmgEnvironmentalDataPanelBase
1.2.2. Dialogs
All dialogs should implement the following:
- Tooltip help for all toolbar icons and other relevant widgets
WhatsThis help for all widgets on the dialog
An optional (though highly recommended) context sensitive Help button that directs the user to the appropriate help page by launching their web browser
1.3. C++ Files
1.3.1. Names
One class (or struct) per file. A struct may well be upgraded to a class at some point in future so treat it like a class! C++ implementation and header files should be have a .cpp and .h extension respectively. Filename should be all lowercase and, in the case of classes, match the class name.
Example:
Class OmgDataset source files are
omgdataset.cpp and omgdataset.h
1.3.2. Standard Header and License
Each source file should contain a header section patterned after the following example:
/***************************************************************************
omgfield.cpp - Describes a field in a layer or table
--------------------------------------
Date : 01-Jan-2004
Copyright : (C) 2004 by Tim Sutton
Email : t.sutton at reading.ac.uk
/***************************************************************************
* *
* 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. *
* *
***************************************************************************/
1.3.3. CVS Keyword
Each source file should contain the $Id$ keyword. This will be expanded by CVS to contain useful information about the file, revision, last committer, and date/time of last checkin.
Place the keyword right after the standard header/license that is found at the top of each source file:
/* $Id$ */
1.4. Variable Names
Variables declared within a method should be prefixed with 'my' - this provides a clear indication of the variable's scope. Variable names begin with a lower case letter and are formed using mixed case. Parameters passed to methods should be prefixed by 'the'. As mentioned above, class members should be prefixed by 'm'.
Fictitious Examples:
class OmgDataset
{
Public:
OmgDataset();
~QgsRasterLayer();
int numberOfLayers();
void setNumberOfLayers(int theNumberOfLayers);
Private:
int mNumberOfLayers;
}
OmgDataset::setNumberOfLayers(int theNumberOfLayers)
{
int myTotalCount = 100;
if (myTotalCount < theNumberOfLayers)
{
mNumberOfLayers = theNumberOfLayers;
}
}
In all cases variable names should be descriptive rather than terse.
n = 60; // <-- bad
numberOfReplicates = 60; // <--good
1.5. Editing
Any text editor/IDE can be used to edit OMG code, providing the following requirements are met.
1.5.1. Tabs
Set your editor to emulate tabs with spaces. Tab spacing should be set to 2 spaces.
1.5.2. Indentation
Source code should be indented to improve readability. There is a .indent.pro file in the OMG (TODO add this file) src directory that contains the switches to be used when indenting code using the GNU indent program. If you doin't use GNU indent, you should emulate these settings.
1.5.3. Braces
Braces should start on the line following the expression:
if(foo == 1)
{
// do stuff
...
}else
{
// do something else
...
}