G I S   T o o l K i t
Справочник программиста

Главная | MAPAPI | PANAPI | Примеры
 

 
МЕТОДЫ КЛАССА "КОММУТАТОР ОБРАБОТЧИКОВ КОМАНДЫ УПРАВЛЕНИЯ" (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);

}

 

 
 

Касьянов О.В.
info@panorama.kharkov.ua

bigmir)net TOP 100