This is a file to read if you want to join the KLog development team.

This document will explain the KLog architecture, requirements, tips and important to know
things to take into account when joining the KLog development team.



CONTENT:
1 - BEFORE CODING
2 - KLOG ARCHITECTURE
3 - BEFORE CODING
4 - CODING
5 - AFTER CODING
6 - GUI
7 - DOCUMENTATION
8 - TRANSLATIONS
9 - DEPLOYING





0 - MISSION AND OBJECTIVE

The objective of KLog is to provide a free software that runs in Linux, macOS and Windows.
KLog will provide hamradio contest and DX logging support.

0.1 - REQUIREMENTS

- Able to run in Linux, macOS and Windows.
- Easy to use.
- Able to localize to any language.
- Any data can be exportable into ADIF (http://www.adif.org).
- Can import standard ADIF.
- Can export to Cabrillo (http://www.kkn.net/~trey/cabrillo/).

- Provides a user manual / documentation.



1 - BEFORE CODING:

Read this document.

Join the KLog mailing list and send a "Hello that's me and I am here" message:
http//MAILINGLIST

Interesting links:
http://www.qtcentre.org/wiki/index.php?title=Keeping_the_GUI_Responsive
Packer: http://upx.sourceforge.net/

= = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = =

2 - KLOG ARCHITECTURE

KLog is intended to be a MODULAR software with the requirement to be modular ;-) so it is easy to
add new features (mainly contests and awards support).

2.1 IMPORTANT THINGS TO HAVE IN MIND

DEPRECATED - KLog version number is using the following system:
   Release versions: The Decimal part of the version number will always use even numbers like 0, 1.2, 2.20, ...
   while the decimal part of the development or Release Candidate versions will always be an odd number ie 0.1, 1.3, ...
   The release number is defined in the "main.cpp" file.

- KLog should manage several logs. The "log" table of the DB has a column called "lognumber".
   ALL QSO has a lognumber id that identifies the log it belongs to.
   Each lognumber will have associated a Name and/or ID (TBD) so the user is able to "open" just
   that log. It is important that all the QSO operations are aware of this lognumber id.

- The log table has a "marked" column. This column is to allow mass operations. Changing this column has
  to be done with care and leave it "unmarked" once the desired operation is finished.
  KLog should unmark(N) all QSO when starts and exits. Mark = 'X', unmark='N' or other.
  Marked column should not be saved.

- Any change to the DB architecture must be communicated and agreed with the development team before
  commiting to the SVN and following the 2.4 DB UPDATES area in this document.



2.2 CONTEST SUPPORT

The "Contest" class (in contest.h) is a base class and all the contest should inherit it.
The "Contest" class has several virtual functions that should re-implemented in all derived classes.

2.2.1 ADDING A NEW CONTEST

To add a new contest, a new class, inheriting the "Contest" class should be created.

The new contest file should be named: "contest_nameofthecontest.h" and "contest_nameofthecontest.cpp"
and should be included in the mainwindow.h

All the calls to the contest class should be implemented in the virtual class.

A new contest must include the implementation of all the functions of the virtual class.


2.3 AWARD SUPPORT

2.4 DB UPDATES

A DB update consist on:

- All the intended changes.
- Update the softwarecontrol TABLE on the DB

To update the DB structure there are several things to have in mind:

- The current version of the DB is defined in database.h
    const float DBVersionf = 0.003;

- All the actions to update the DB to the new structure are done here:
    DataBase::updateIfNeeded

- After making any update



= = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = =

3 - BEFORE CODING

Update your sources from the SVN: Remember that other developer may has done a commit.


= = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = =

4 - CODING

- The development language is English.
- All Strings to be shown to the user must be translatable. i.e. tr("String")

4.1 - STYLE
4.2 - ADIF SUPPORT

KLog is using some application defined ADIF fields: APP_{PROGRAMID}_{FIELDNAME}

Header fields:
    APP_KLOG_LOG_DATE_EXPORT: The date and time (in UTC) when the log was exported.
    APP_KLOG_QSOS: The number of QSOs in the log.
    DEPRECATED: APP_KLOG_RELEASE: Release of KLog used to export the log file. CHANGED TO PROGRAMVERSION (ADIF standard)

QSO fields:
    APP_KLOG_POINTS: Points given by the QSO.
    APP_KLOG_LOGN: Lognumber if the ADIF file contains several logs.


KLog is also importing other application defined ADIF fields:
    APP_N1MM_POINTS: That is imported into the points column in the log table.

KLog should not export any ADIF header that comming from other application without renaming it to APP_KLOG_

4.3 SHORTCUTS

Before adding or modifying any shortcut:
 - It should be agreed in the devel mailing list.
 - It should be as standard as possible, reuse the same shortcuts of main/popular contest software.
 - It should be checked and added to a list below.



4.4 DATA BASE

- The DB version has to be checked and modified after a DB schema modification.
- Any modification to the DB has to be provided with the code to update from any previous version.

= = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = =

5 - AFTER CODING

Test that your code compiles and does not break the previous code.

Document your changes and close/update the tasks/bugs you have worked on.

Remember to commit your code to the SVN.

Try to do "atomic" commits. That is to commit updates that may be disabled as a block.
i.e. A new function or a modification to a function. Don't commit several things at once
if you can avoid it.
This is just a recommendation to avoid big commits that, in case of a problem are difficult to
trace.

Document your commits: ALWAYS add a clear comment to the commits so it is easy to know what is it about.

5.1 TEST CHECKLIST

Here is the list of tests to be done before releasing new software:

 - Install in a new installation of Windows/macOS
 - Upgrade from a previous version

 - Create a new log
 - Add a new QSO
    - Check that the DXCC & IOTA continent make sense
    - Check if QSO/worked DXCC, ... count changes
 - Edit a QSO from log
    - Modify at least one field in each tab
 - Edit a QSO from the search box
 - Remove a QSO
 - Update the DXCC status tab


 - Connect to the DXCluster
 - Click on a spot on the DXCluster

 - Export an ADIF file
 - Import an ADIF file

 - Remove KLog in Windows




= = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = =

6 - GUI

6.1 CONTEST GUI

- The GUI should only have the data fields that are needed for that contest, keeping the GUI simple
  and easy to use.



= = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = =

7 - DOCUMENTATION

- One feature will not be considered completed until it is not added to the user manual.
  Please document in the klog-handbook.xml your feature so the user knows how to use it.

= = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = =

9 - TRANSLATIONS

9.1 ADDING TRANSLATIONS

To add a new translation add the new language file to the klog.pro file following the sintax:

TRANSLATIONS = KLog_es.ts \
    klog_fr.ts

Being es, fr, the ISO codes naming the language.

After a translation is added, you also need to update the aboutdialog.cpp to include a new Translator line.

9.2 TRANSLATING

Translators should work in the *.ts files.

9.2 UPDATING TRANSLATIONS

Update translations:
  Run: lupdate -verbose klog.pro
  in the klog directory to update the language files

= = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = =

9 - DEPLOYING

Before deploying, translations should be updated.


9.1 DEPLOYING ON LINUX

9.2 DEPLOYING ON macOS

    Build KLog with QTCreator
    If you can't run KLog due to missing libTIFF/LibJPEG/libPNG/libGIF chec this URL:
    https://stackoverflow.com/questions/35509731/dyld-symbol-not-found-cg-jpeg-resync-to-restart
    Try this in the shell:
        $ cd /System/Library/Frameworks/ImageIO.framework/Versions/A/Resources
        $ sudo ln -sf libJPEG.dylib /usr/local/lib/libJPEG.dylib
        $ sudo ln -sf libPng.dylib /usr/local/lib/libPng.dylib
        $ sudo ln -sf libTIFF.dylib /usr/local/lib/libTIFF.dylib
        $ sudo ln -sf libGIF.dylib /usr/local/lib/libGIF.dylib

    Run the following command from the build directory:
        mv klog.app KLog.app
        create new folder in KLog.app/Contents/PlugIns/sqldrivers
        copy $QT_DIR/plugins/sqldrivers/libqsqlite.dylib to the new folder (/Developer/Applications/Qt/plugins/)
        create new folder: KLog.app/Contents/MacOs/translations
        copy the *.qm (translation) files into KLog.app/Contents/MacOS/translations
        macdeployqt KLog.app/ -dmg
        mv KLog.dmg KLog-[VERSION].dmg

9.3 DEPLOYING ON WINDOWS
    Currently using an Open Source Licence of: BitRock InstallBuilder

9.4 ICON
    Follow this link for all the OS:
    http://doc.qt.io/qt-5/appicon.html

Installer:
http://en.wikipedia.org/wiki/List_of_installation_software

