wx_ref и пользовательские wx_object's - PullRequest
1 голос
/ 08 июня 2010

Я разрабатываю приложение MDI с помощью wxErlang. У меня есть родительский кадр, реализованный как wx_object:

-module(main_frame).
-export([new/0, init/1, handle_call/3, handle_event/2, terminate/2]).

-behaviour(wx_object).

....

И у меня есть дочерний фрейм, также реализованный как wx_object:

module(child_frame).
-export([new/2, init/1, handle_call/3, handle_event/2, terminate/2]).
-export([save/1]).

-behaviour(wx_object).

% some public API method
save(Frame) ->
    wx_object:call(Frame, save).

....

Я хочу вызвать save / 1 для активного дочернего кадра из родительского кадра. Вот мой код:

 ActiveChild = wxMDIParentFrame:getActiveChild(Frame),
 case wx:is_null(ActiveChild) of
  false ->
   child_frame:save(ActiveChild);
  _ ->
   ignore
 end

Этот код завершается ошибкой, поскольку ActiveChild - это #wx_ref {} с состоянием = [], но для wx_object: call / 2 требуется #wx_ref {}, где состояние установлено в pid процесса, который мы вызываем. Какой правильный способ сделать это? Я думал только о том, чтобы сохранить список всех созданных дочерних фреймов с его pids в родительском фрейме и искать pid в этом списке, но это ужасно.

1 Ответ

0 голосов
/ 21 декабря 2011

Вы не можете (в настоящее время) получить объект / процесс erlang от
wxMDIParentFrame:getActiveChild(Frame),

Вам нужно будет сохранить дочерние объекты erlang в вашем состоянии и активный дочерний элемент, а также, вероятно, сохранитьэто обновлено событиями.

Здесь есть место для улучшения

...