МЕТОДЫ
КЛАССА "ОБРАБОТЧИК КОМАНДЫ
УПРАВЛЕНИЯ" (TpanAction)
Объявлены: panact.h
Реализация: pantask.cpp
Конструктор
и деструктор
TpanAction::TpanAction
Создать
объект
"обработчик
команды".
Если
обработчик
должен
начать
работу с диалога,
то диалог
должен
создаваться
в Setup() ...
public:
TpanAction::(TPanTask
* task,int ident)
TpanAction::~TpanAction
Удалить
обработчик и
освободить
все ресурсы.
Результаты
работы здесь
не
сохраняются!
public:
virtual ~TpanAction::()
Методы
управления
обработчиком
команд
TpanAction::Setup
Выполнить
настройку
обработчика.
Вызывается
после вызова
конструктора.
public:
virtual void Setup()
{
Comment();
}
TpanAction::GetSelectObjectType
Запросить
способ
выбора
объекта.
Без
диалога
"Выбор
объекта" - не
ноль, иначе –
ноль.
public:
virtual
int GetSelectObjectType()
{
return
1;
}
TpanAction::SetTaskAction
Установить
адрес
обработчика
в задаче.
Вызывается
автоматически
после
конструктора.
public:
virtual void SetTaskAction()
{
if (Task())
Task()->Action = this;
}
TpanAction::ClearTaskAction
Удалить адрес
обработчика в
задаче.
Вызывается
автоматически.
public:
virtual
void ClearTaskAction()
{
if
(Task())
Task()->Action = 0;
}
TpanAction::GetActionHandle
Запросить
идентификатор обработчика.
public:
HMAPACTION
GetActionHandle()
{
return HAction;
}
TpanAction::CallHelp
Запрос
справки о
текущем
режиме
работы (F1).
public:
virtual void CallHelp()
{
ActionTask->CallHelp(Ident());
}
TpanAction::CanClose
Запрос:
можно ли
отключить
обработчик
команды.
Если
разрешено -
будет вызван
деструктор
обработчика. Перед
выдачей
разрешения
можно
сохранить
результаты работы
обработчика
...
Задача
может
удалить
обработчик,
не вызывая CanClose()!
public:
virtual
int CanClose()
{
return
1;
}
TpanAction::CanCloseDoc
Запросить:
можно ли
закрыть окно
и отключить
обработчик
команды.
Если
разрешено -
будет вызван
деструктор обработчика.
Перед
выдачей
разрешения
можно
сохранить
результаты работы
обработчика.
Задача
может
удалить
обработчик,
не вызывая CanClose()!
public:
virtual int CanCloseDoc()
{
return CanClose();
}
TpanAction::CanRestartByButton
Запрос:
можно ли
перезапустить
обработчик при
повторном
нажатии
кнопки. Если
не разрешено –
будет выполняться
закрытие
обработчика
(CanClose() ...).
public:
virtual int CanRestartByButton()
{
return 0;
}
TpanAction::Ident
Запросить
идентификатор
обрабатываемой
команды.
public:
int Ident()
{
return ActionIdent;
}
TpanAction::CancelNotify
Извещение
о том, что
обработчик
будет завершен
в результате
повторного
нажатия его
кнопки.
Вызывается,
если
разрешил CanClose(). Применяется
для
обеспечения
перезапуска
обработчика
(Restart()).
public:
virtual void CancelNotify() {
}
TpanAction::Task
Запросить
задачу,
которой
принадлежит
обработчик.
public:
TPanTask * Task()
{
return ActionTask;
}
TpanAction::Close
Выполнить
самоликвидацию
(вызов
деструктора) с
сохранением
результатов
работы. Метод
CanClose()
вызывается.
protected:
void Close()
{
if (ActionTask)
ActionTask->CloseAction(Ident());
}
TpanAction::Quit
Выполнить
самоликвидацию
(вызов
деструктора) без
сохранения
результатов
работы.
Метод CanClose()
не будет
вызываться!
После
этой функции
нельзя
использовать
переменные
класса - его
уже нет!
protected:
void Quit()
{
if (ActionTask)
ActionTask->DestroyAction(Ident());
}
TpanAction::Restart
Выполнить
перезагрузку
обработчика (вызов
деструктора
и затем
конструктора)
без
сохранения
результатов
работы. Метод
CanClose() не будет
вызываться!
protected:
void Restart()
{
if (ActionTask)
ActionTask->RestartAction(Ident());
}
Справочные
данные об
окне карты и
приложении
TpanAction::GetMapWindowPoint
Запросить
координаты
верхнего
левого угла
окна в
логической
системе
карты (Map) в
дискретах.
public:
DOUBLEPOINT * GetMapWindowPoint()
{
return
MapWindow->GetMapWindowPoint();
}
TpanAction::GetMapWindowHandle
Запросить
идентификатор
окна карты.
public:
HWND GetMapWindowHandle()
{
return
MapWindow->GetHandle();
}
TpanAction::GetMapWindowClientRect
Запросить
размеры
клиентной
области окна
карты.
public:
RECT GetMapWindowClientRect()
{
return
MapWindow->GetClientRect();
}
Методы
обработки
прикладных
событий окна
карты
TpanAction::ChangeData
Извещение
об изменении
содержания
данных (карт,
растров,
матриц ...).
Если
активен
обработчик -
проверить, что
он не
работает c
закрытыми
данными.
public:
virtual void ChangeData() { }
TpanAction::CanSelectObject
Запрос:
можно ли
выполнить
выбор нового
объекта на
карте для
обработки.
Обработчик
карты
выполнит
выбор
объекта в
точке
нажатия левой
кнопки мышки,
если CanSelectObject()
возвращает
ненулевое
значение.
public:
virtual int CanSelectObject()
{
return 1;
}
TpanAction::CanSelectThisObject
Запрос:
можно ли
выполнить
выбор
данного объекта
на карте для
обработки.
Может
вызываться
до
выполнения Setup().
Например:
можно ли
удалить
данный
объект и т.п.
public:
virtual int CanSelectThisObject(HOBJ
)
{
return 1;
}
TpanAction::CanUnionGroupData
Запрос:
можно ли
выполнить
сборку
группы для
данного
объекта
карты.
Запрет
применяется
только для
отдельных операций
над составом
группы!
public:
virtual int CanUnionGroupData(HOBJ)
{
return 1;
}
TpanAction::Commit
Сообщение
о завершении
обработки
объекта.
public:
virtual int Commit()
{
return 0;
}
TpanAction::ActiveObject
Извещение:
активизирован
объект.
Происходит
между
запросом CanSelectThisObject() и
извещением SelectObject()).
Позволяет
перебирать
объекты с
одного нажатия
кнопкой
мышки. Для
программного
перехода к
следующему / предыдущему
объекту
применяются
методы MapWindow->NextActiveObject()
и MapWindow->PrevActiveObject(). Обработчик
может
накапливать
выбранные объекты для
совместной
обработки:
TObjectInfo * Target = new
TObjectInfo(info);
public:
virtual int ActiveObject(HOBJ)
{
return 0;
}
TpanAction::SelectObject
Извещение:
выполнен
выбор
объекта.
Обработчик
может
накапливать
выбранные объекты
для
совместной
обработки.
public:
virtual int SelectObject(HOBJ)
{
return 0;
}
TpanAction::Revert
Сообщение
об отмене
обработки
объекта.
Выполняется
отключение
обработчика!
public:
virtual int Revert()
{
return 0;
}
Методы
обработки
системных
событий окна карты
TpanAction::KeyDown
Извещение:
нажата
клавиша.
Параметры:
key - идентификатор нажатой клавиши (описаны в winuser.h);
repeatCount - количество повторов (если пользователь удерживает
клавишу);
flags - флаги, соответствует значениям сообщения WM_KEYDOWN.
Если
событие не
обрабатывается
и может быть
передано
обработчику
окна карты -
возвращается
0.
public:
virtual int KeyDown(UINT /*key*/,
UINT /*repeatCount*/, UINT
/*flags*/)
{
return 0;
}
TpanAction::LeftDown
Извещение: нажата
левая кнопка мыши.
Параметры:
modKeys - идентификатор нажатой клавиши клавиатуры (описаны в
winuser.h);
point - координаты точки, в которой находится курсор,
в системе координат окна;
Если
событие не
обрабатывается
и может быть
передано
обработчику
окна карты -
возвращается
0.
public:
virtual int LeftDown(UINT
/*modKeys*/, POINT& /*point*/)
{
return 0;
}
TpanAction::LeftUp
Извещение: отпущена
левая кнопка
мыши.
Параметры:
modKeys - идентификатор нажатой клавиши клавиатуры (описаны в
winuser.h);
point - координаты точки, в которой находится курсор,
в системе координат окна;
Если
событие не
обрабатывается
и может быть
передано
обработчику
окна карты -
возвращается
0.
public:
virtual int LeftUp(UINT /*modKeys*/,
POINT& /*point*/)
{
return 0;
}
TpanAction::Move
Извещение: перемещение
мышки по окну.
Параметры:
modKeys - идентификатор нажатой клавиши клавиатуры (описаны в
winuser.h);
point - координаты точки, в которой находится курсор,
в системе координат окна;
Если
событие не
обрабатывается
и может быть
передано
обработчику
окна карты -
возвращается
0.
public:
virtual int Move(UINT /*modKeys*/,
POINT& /*point*/)
{
return 0;
}
TpanAction::RightDown
Извещение: нажата
правая
кнопка мыши.
Параметры:
modKeys - идентификатор нажатой клавиши клавиатуры (описаны в
winuser.h);
point - координаты точки, в которой находится курсор,
в системе координат окна;
Если
событие не
обрабатывается
и может быть
передано
обработчику
окна карты -
возвращается
0.
Если
возвращает
ненулевое
значение - всплывающее
меню
блокируется
(не всплывает).
Может
применяться,
когда правая
кнопка нажимается
вместе с
клавишами ALT,CNTRL
и т.п.
public:
virtual int RightDown(UINT
/*modKeys*/, POINT&
/*point*/)
{
return 0;
}
TpanAction::RightUp
Извещение: отпущена правая
кнопка мыши.
Параметры:
modKeys - идентификатор нажатой клавиши клавиатуры (описаны в
winuser.h);
point - координаты точки, в которой находится курсор,
в системе координат окна;
Если
событие не
обрабатывается
и может быть
передано
обработчику
окна карты -
возвращается
0.
public:
virtual int RightUp(UINT /*modKeys*/,
POINT& /*point*/)
{
return 0;
}
TpanAction::CallPopupMenu
Добавить
пункты меню
для текущей
операции.
Всплывающее
меню при
нажатии
правой кнопки
мышки.
Если
событие не
обрабатывается
и может быть
передано
обработчику
окна карты -
возвращается
0.
public:
int CallPopupMenu(HMENU hmenu)
{
TMENU Tmenu(hmenu);
return CallRightMenu(&Tmenu);
}
TpanAction::CallRightMenu
Добавить
пункты меню
для текущей
операции.
Всплывающее
меню при
нажатии
правой кнопки
мышки.
Если
событие не
обрабатывается
и может быть
передано
обработчику
окна карты -
возвращается
0.
public:
virtual
int CallRightMenu(TMENU * /*Menu*/)
{
return 0;
}
TpanAction::Paint
Извещение:
обработчик
может рисовать
"на карте" (карта
уже нарисована
...).
Параметры:
dc - контекст-устройства вывода;
erase - флаг очистки области, перед рисованием;
rect - координаты прямоугольной области, которая перерисовывается.
Если
событие не
обрабатывается
и может быть
передано
обработчику
окна карты -
возвращается
0.
public:
virtual int Paint(THDC& dc,
bool erase, TRECT& rect)
{
return 0;
}
TpanAction::ResetMessage
Запрос на
перевывод
комментария
текущей операции
обработчика. Вызывается
автоматически
после
выполнения Setup(),
при
получении
фокуса и
изменении
кода языка. Обработчик
может
выполнить
MapWindow->SetMessage(....).
public:
virtual void ResetMessage()
{
Comment();
}
TpanAction::Comment
Запрос на
перевывод
комментария
текущей операции
обработчика. Синоним
ResetMessage().
Обработчик
может
выполнить
MapWindow->SetMessage(....).
public:
virtual
void Comment() { }
TpanAction::IdleAction
Сообщение
о том, что
обработчик
может выполнить
фоновый
процесс.
public:
virtual
void IdleAction(long count) { }
Запрос
координат
текущей
точки при
обработке
событий окна
карты
TpanAction::GetPicturePoint
Запросить
координаты в
системе
изображения
(Picture).
Возвращает
координаты
текущей
точки в
пикселах.
public:
POINT * GetPicturePoint()
{
return
ActionTask->GetPicturePoint();
}
TpanAction::GetMapPoint
Запросить
координаты в
логической
системе
карты (Map).
Возвращает
координаты
текущей
точки в
дискретах.
public:
DOUBLEPOINT * GetMapPoint()
{
return
ActionTask->GetMapPoint();
}
TpanAction::GetPlanePoint
Запросить
координаты в
прямоугольной
местной
системе (Plane).
Возвращает
координаты
текущей
точки в
метрах.
public:
DOUBLEPOINT * GetPlanePoint()
{
return
ActionTask->GetPlanePoint();
}
TpanAction::GetGeoPoint
Запросить
координаты в
географической
системе (Geo).
Возвращает
координаты
текущей
точки в
радианах.
Если
географическая
система
координат не
поддерживается
значение
координат
всегда ноль!
public:
DOUBLEPOINT * GetGeoPoint()
{
return
ActionTask->GetGeoPoint();
}
TpanAction::IsGeoSupported
Проверка
поддержки
географических
координат.
Если не
поддерживаются
– функция возвращает
ноль.
public:
int IsGeoSupported()
{
return
ActionTask->IsGeoSupported();
}
|