Enhancement: Improved/extended exits GUI for 2D mapper

The GUI formed by dlgRoomExits.{cpp|h} and room_exits.ui combined now
provide full control and aim to enforce relational consistency between the
data items that provide all the exits from a particular room.  All controls
should have tool-tips - some context sensitive and provide support for some
aspects that are not yet implemented in other parts of the code e.g. door
markers for the mapper on exits not in the XY-Plane.  As the controls for
each normal exit are duplicated, labels are not given for the individual
components to save space, instead an expanded disabled dummy with labels
is provided as a Key.  Unfortunately even after this the dialogue is still
a little large and it has been suggested to replace the four radio buttons
that provide control over the door item with a combo-box with the four
fixed values...

Following support methods have been changed/added:
bool TRoom::hasExitStub(int) - modified, to provide a Boolean type result
consistent with functionality.

void TRoom::setExitStub(int, bool) - modified, remove ALL existing stub
entries for the given direction code if the second argument is false, only
adds a new entry if a corresponding one was not present - this is required
for the data storage type (QList) for stubs which could otherwise take
multiple entries for the same key (exit).  Changed second argument to
Boolean type to reflect its functionality.

bool TRoom::hasExitWeight(QString) - new, needed for the GUI to determine
source of weight data for exit.  Normally that detail is hidden from
consumers of this data.

void TRoom::setExitWeight(QString, int) - modified, to permit it to remove
data item for an exit.  Uses zero or negative weight value which
additionally aides route-finding code that consumes this data but requires
only positive weight data.  Removal of specific exit weight data permits
reversion to use of overall weight value set in ROOM's weight.

void TRoom::setDoor(QString, int) - new, implemented previously declared
but not defined code.  First argument as lower case initials for normal
exits in XY-plane and "up", "down", "in", "out" for other normal exits.
Supports special exits though no support at this point in 2D mapper for
these or non-XY-plane exits. Second argument is door type (0=none, 1=open,
2=closed, 3=locked) and value of 0 will remove instance data of any of the
other type.

int TRoom::getDoor(QString) - new, companion to setDoor, uses same first
argument to determine exit to return door code of.  Returns zero for any
exit specified which does not have a door explicitly set.

Note: Parts of code-base still access door data directly at this point,
further work required before that data could be made private to TRoom
class.

void TRoom::setArea(int) - modified, warning for room not having valid
previous area enabled.

bool TRoom::hasExit(int) - modified, method not being in use, re-purposed
to use to test for an actual exit in given normal exit direction.  Test
used is simple, fast and may produce false positives (checks only for exit
to room Id NOT being -1).  A more thorough check would be to check that
mpRoomDB->getRoom( exitId ) != 0 where exitId is value already determined
not to be -1.

bool TRoom::setExit(int, int) - new, uses a direction code as a first
argument to set the exit to the exitId given as second.  Intended to
replace individual setNorth()...setOut() series of methods in cases
requiring iteration through all normal exits.

int TRoom::getExit(int) - new, companion to the new setExit().

bool TRoom::setSpecialExitLock(QString, bool) - new, substitute for
other version which does not need to have the destination room supplied.
Unlike the void method it supplants, it provides a bool return, true on
success.

void TRoom::setSpecialExit(int, QString) - replacement for addSpecialExit()
renamed because now capable of removing a special exit if the first
argument, the exit to room Id is less than one.  Lua command
removeSpecialExit( fromRoomId, cmd ) with no normal return value added for
users' use, eliminating the need to remove all exits and re-adding all
others in order to remove or change just one.  Corresponding
addSpecialExit( fromRoomId, toRoomId, cmd ) now able to change the
toRoomId for an existing exit "cmd" from given fromRoomId room.

void TRoom::removeAllSpecialExitsToRoom(int) - modified, now ensures the
corresponding TArea::exits is updated upon removal of all the special exits
from a room.

void TRoom::auditExits() - modified, missing checks added for up and down
normal exits, and reporting for all normal exits. Code restructured to
avoid use of two "goto" commands and consequent restarts in checking of
special exits if they were to be executed.

int TRoomDB::getArea(TArea *) - commented out prior to removal, it is
mis-named as it returned an integer area Id not a TArea value, pointer or
reference.  Also it's given functionality is already provided by
int TRoomDB::getAreaID(TArea *) and the implied action by
TArea * TRoomDB::getArea(int).


Signed-off-by: Stephen Lyons <slysven@virginmedia.com>
Fixup: Add new distinct icon for Room Exits' Dialog

Was unable to insert the icon in previous commit as it was tucked away in
a different prototyping branch and not then accessible!

Modify some tool-tip code to handle unnamed exit rooms better, and correct
erroneous application of tool-tips to the frame for the group of controls
for each exit.

Also adjust spacing on some bits for consistency with rest of file.

Signed-off-by: Stephen Lyons <slysven@virginmedia.com>
Bug Fix: Correct code block in wrong branch of if/else & wrong fixed string

Signed-off-by: Stephen Lyons <slysven@virginmedia.com>
Enhancement: Room Exits GUI - monitor/detect changes in exit data.

Restores "<dummy>" text items to special exits' room Id and command column
entries if any entry is deleted during editing.

Correctly utilises Dialog modified flag (e.g. * in dialog title) and only
enables save button if actual changes have been made. Defines a TExit class (only internally used at
moment) to record details and provide equality and inequality test
operators.

Abstract details of initialising dialog controls {to
void dlgRoomExits::initExit(...) and TExit * makeExitFromControls(...)} to
reduce the amount of code that would have to be explicitly duplicated but
modified for each exit.

Disables sorting of special exit items in table widget otherwise entries
rearrange themselves as the (sorted) data item is edited.

Signed-off-by: Stephen Lyons <slysven@virginmedia.com>