МЕТОДЫ
КЛАССА "КОММУТАТОР ОБРАБОТЧИКОВ
КОМАНДЫ УПРАВЛЕНИЯ" (TPanActionLink)
Объявлены: panact.h
Реализация: pantask.cpp
Конструктор
и деструктор
TpanActionLink::TpanActionLink
Создать
объект
"обработчик
команды". Если
обработчик
должен
начать
работу с диалога,
то диалог
должен
создаваться
в Setup() ...
Параметры:
task - указатель на объект класса "Задача" (TPanTask),
которому принадлежит обработчик;
ident - идентификатор обработчика.
public:
TPanActionLink(TPanTask *task, int
ident)
: TPanAction(task,ident)
{
Action = 0;
}
TpanActionLink::~TPanActionLink
Удалить
обработчик и
освободить
все ресурсы. Результаты
работы здесь
не
сохраняются.
public:
virtual ~TPanActionLink()
{
if (Action)
{
// Удалить
обработчик
delete Action;
Action = 0;
}
}
Методы
управления
обработчиком
команд
TpanActionLink::Setup
Выполнить
настройку
обработчика. Вызывается
после вызова
конструктора
public:
virtual void Setup()
{
if
(Action)
Action->Setup();
}
TpanActionLink::GetAction
Найти и
подключить
новый
обработчик.
Если
обработчик
не найден или
вызывалась
команда, не
требующая
обработчика -
остается
старый
обработчик.
Коды
обработчиков
должны быть
добавлены в
таблицы
функции GetAction(...).
Параметр comid - идентификатор обработчика. Если comid == 0,
старый
обработчик
отключается, сообщения
начинают
идти в
"коммутатор".
public:
virtual TPanAction * GetAction(int
comid, int run = 1)
{
if
(comid == 0)
{
return
LinkAction(0);
}
TPanAction
* action = 0;
if
(ActionTask)
{
action =
(TPanAction *)(ActionTask->GetAction(comid,run));
if
(((WPARAM)action) == -1)
action = 0;
}
if
(action) return
LinkAction(action);
return
0;
}
TpanActionLink::LinkAction
Подключить
новый обработчик.
Параметр action - указатель на объект класса обработчик (TPanAction)
public:
TPanAction * LinkAction(TPanAction *
action)
{
if
(Action)
{
delete
Action;
}
Action = action;
if
(Action)
Action->Setup();
return
Action;
}
TpanActionLink::CallHelp
Запрос
справки о
текущем
режиме
работы (CTRL-F1).
public:
virtual void CallHelp()
{
if
(Action)
Action->CallHelp();
else
MapWindow->ViewHelp(0);
}
TpanActionLink::CanClose
Запросить:
можно ли
отключить
обработчик
команды.
Если
разрешено -
будет вызван
деструктор обработчика. Перед
выдачей
разрешения
можно
сохранить
результаты
работы обработчика
... Задача
может
удалить
обработчик, не
вызывая CanClose()!
public:
virtual int CanClose()
{
if
(Action) return
Action->CanClose();
return
1;
}
TpanActionLink::Ident
Запросить
идентификатор
обрабатываемой
команды.
public:
int Ident()
{
return
ActionIdent;
}
TpanActionLink::LinkIdent
Запросить
идентификатор
обрабатываемой
команды.
public:
int LinkIdent()
{
if
(Action) return
Action->Ident();
return
0;
}
TpanActionLink::Task
Запросить
задачу,
которой
принадлежит
обработчик. Возвращает указатель на объект класса "Задача" (TPanTask).
public:
TPanTask * Task()
{
return ActionTask;
}
TpanActionLink::Close
Выполнить
самоликвидацию
(вызов
деструктора)
с
сохранением результатов
работы ... CanClose() вызывается.
protected:
void Close()
{
if (ActionTask)
ActionTask->CloseAction(Ident());
}
TpanActionLink::Quit
Выполнить
самоликвидацию
(вызов
деструктора)
без
сохранения
результатов
работы. Метод CanClose() не
будет
вызываться!
После
этой функции
нельзя
использовать
переменные
класса, его
уже нет!
protected:
void Quit()
{
if (ActionTask)
ActionTask->DestroyAction(Ident());
}
TpanActionLink::Restart
Выполнить
"перезагрузку"
обработчика (вызов
деструктора
и затем
конструктора)
без
сохранения
результатов работы. Метод CanClose() не
будет
вызываться.
protected:
void Restart()
{
if (ActionTask)
ActionTask->RestartAction(Ident());
}
Методы
обработки
прикладных
событий окна
карты
TpanActionLink::CanSelectObject
Запрос:
можно ли
выполнить
выбор нового
объекта на
карте для
обработки.
Обработчик
карты
выполнит
выбор
объекта в
точке
нажатия
левой кнопки
мышки, если
CanSelectObject()
возвращает
ненулевое
значение.
public:
virtual int CanSelectObject()
{
if
(Action) return
Action->CanSelectObject();
return
1;
}
TpanActionLink::CanSelectThisObject
Запрос:
можно ли
выполнить
выбор
данного
объекта на
карте для
обработки.
Может
вызываться
до
выполнения Setup().
Например:
можно ли
удалить
данный
объект и т.п.
public:
virtual int CanSelectThisObject(HOBJ
info)
{
if
(Action) return
Action->CanSelectThisObject(info);
return
1;
}
TpanActionLink::Commit
Сообщение
о завершении
обработки
объекта.
public:
virtual int Commit()
{
if
(Action) return
Action->Commit();
return
0;
}
TpanActionLink::SelectObject
Извещение:
выполнен
выбор
объекта.
Обработчик
может
накапливать
выбранные
объекты для совместной
обработки.
Параметр info - идентификатор выбранного объекта карты.
public:
virtual int SelectObject(HOBJ info)
{
if
(Action) return
Action->SelectObject(info);
return
0;
}
TpanActionLink::Revert
Сообщение
об отмене
обработки
объекта.
Выполняется
отключение
обработчика!
public:
virtual int Revert()
{
if
(Action) return
Action->Revert();
return
0;
}
Методы
обработки
системных
событий окна карты
TpanActionLink::KeyDown
Извещение:
нажата
клавиша.
Параметры:
key - идентификатор нажатой клавиши (описаны в winuser.h);
repeatCount - количество повторов (если пользователь удерживает
клавишу);
flags - флаги, соответствует значениям сообщения WM_KEYDOWN.
Если
событие не
обрабатывается
и может быть
передано
обработчику
окна карты -
возвращается
0.
public:
virtual int KeyDown(UINT key, UINT
repeatCount, UINT flags)
{
if (Action) return
Action->KeyDown(key,repeatCount,flags);
return 0;
}
TpanActionLink::LeftDown
Извещение: нажата
левая кнопка мыши.
Параметры:
modKeys - идентификатор нажатой клавиши клавиатуры (описаны в
winuser.h);
point - координаты точки, в которой находится курсор,
в системе координат окна;
Если
событие не
обрабатывается
и может быть
передано
обработчику
окна карты -
возвращается
0.
public:
virtual int LeftDown(UINT modKeys,
POINT& point)
{
if (Action) return
Action->LeftDown(modKeys,point);
return 0;
}
TpanActionLink::LeftUp
Извещение: отпущена
левая кнопка
мыши.
Параметры:
modKeys - идентификатор нажатой клавиши клавиатуры (описаны в
winuser.h);
point - координаты точки, в которой находится курсор,
в системе координат окна;
Если
событие не
обрабатывается
и может быть
передано
обработчику
окна карты -
возвращается
0.
public:
virtual int LeftUp(UINT modKeys,
POINT& point)
{
if (Action) return
Action->LeftUp(modKeys,point);
return 0;
}
TpanActionLink::Move
Извещение: перемещение
мышки по окну.
Параметры:
modKeys - идентификатор нажатой клавиши клавиатуры (описаны в
winuser.h);
point - координаты точки, в которой находится курсор,
в системе координат окна;
Если
событие не
обрабатывается
и может быть
передано
обработчику
окна карты -
возвращается
0.
public:
virtual int Move(UINT modKeys,
POINT& point)
{
if (Action) return
Action->Move(modKeys,point);
return 0;
}
TpanActionLink::RightDown
Извещение: нажата
правая
кнопка мыши.
Параметры:
modKeys - идентификатор нажатой клавиши клавиатуры (описаны в
winuser.h);
point - координаты точки, в которой находится курсор,
в системе координат окна;
Если
событие не
обрабатывается
и может быть
передано
обработчику
окна карты -
возвращается
0.
public:
virtual int RightDown(UINT modKeys,
POINT& point)
{
if (Action) return
Action->RightDown(modKeys,point);
return 0;
}
TpanActionLink::RightUp
Извещение: отпущена правая
кнопка мыши.
Параметры:
modKeys - идентификатор нажатой клавиши клавиатуры (описаны в
winuser.h);
point - координаты точки, в которой находится курсор,
в системе координат окна;
Если
событие не
обрабатывается
и может быть
передано
обработчику
окна карты -
возвращается
0.
public:
virtual int RightUp(UINT modKeys,
POINT& point)
{
if (Action) return
Action->RightUp(modKeys,point);
return 0;
}
TpanActionLink::CallRightMenu
Добавить
пункты меню
для текущей
операции.
Всплывающее
меню при
нажатии
правой кнопки
мышки.
Если
событие не
обрабатывается
и может быть
передано
обработчику
окна карты -
возвращается
0.
public:
virtual int CallRightMenu(TMENU *
Menu)
{
if (Action) return
Action->CallRightMenu(Menu);
return 0;
}
TpanActionLink::Paint
Извещение:
обработчик
может рисовать
"на карте" (карта
уже нарисована
...).
Параметры:
dc - контекст-устройства вывода;
erase - флаг очистки области, перед рисованием;
rect - координаты прямоугольной области, которая перерисовывается.
Если
событие не
обрабатывается
и может быть
передано
обработчику
окна карты -
возвращается
0.
public:
virtual int Paint(THDC& dc,
bool erase, TRECT& rect)
{
if (Action) return
Action->Paint(dc,erase,rect);
return 0;
}
TpanActionLink::IdleAction
Извещение
о том, что
обработчик
может выполнить
фоновый процесс.
public:
virtual void IdleAction(long count)
{
if (Action)
Action->IdleAction(count);
}
|