Перейти к публикации

Вызов диалогового окна из другого окна (Block Styler)


AleksandraN

Рекомендованные сообщения

Помогите пожалуйста с проблемой - программа представляет собой диалоговое окно (родительское), в нем несколько кнопок, по нажатию на каждую из них нужно вызвать соответствующие новые окошки (дочерние). Вызов окошка из другого окошка в свое время реализовывался мною с окошками User Interface Stylera и на С (UF библиотека), сейчас хотелось бы использовать NXOpen (Java, но не принципиально) и Block Styler. Подскажите как это реализовать, а то шаблончики, которые генерит User Interface Stylera и Block Styler сильно отличаются и не понятно даже как подступиться. Совсем не понятно как можно различать и обрабатывать нажатие на кнопку Применить в родительском и дочернем окошке. Если дадите кусок кода буду очень благодарна, но порадуют даже общие указания.

Изменено пользователем AleksandraN
Ссылка на сообщение
Поделиться на других сайтах
  • 6 месяцев спустя...


Подскажите в чем ошибка - при нажатии на Apply в dialog1 должно вызваться окно dialog2, но вместо этого - появляется ошибка : Невозможно запустить меню. В UI Styler была настройка того, может ли создаваемое окно вызывать другое окно. Но в BlockStyler ничего подобного не нашла. Хотелось бы понять ошибка связана с настройками диалоговых окон при создании или с кодом.

Ошибка возникает в момент theDialog2.show(); до этого инициализация окна идет нормально.

importjava.rmi.RemoteException;

importnxopen.*;

importnxopen.blockstyler.*;

publicclass dialog1 implementsBlockDialog.Initialize, BlockDialog.DialogShown, BlockDialog.FocusNotify, BlockDialog.KeyboardFocusNotify, BlockDialog.Apply, BlockDialog.Ok, BlockDialog.Update

{

//class members

publicstatic Session theSession = null;

publicstatic UI theUI = null;

static dialog1 thedialog1;

private String theDialogName;

privatenxopen.blockstyler.BlockDialogtheDialog;

privatenxopen.blockstyler.UIBlockgroup0;// Block type: Group

privatenxopen.blockstyler.UIBlocklabel0;// Block type: Label

privatenxopen.blockstyler.UIBlocktoggle0;// Block type: Toggle

public dialog1() throws Exception, RemoteException

{

try

{

theSession = (Session)SessionFactory.get("Session");

theUI = (UI)SessionFactory.get("UI");

theDialogName = "dialog1.dlx";

theDialog = theUI.createDialog(theDialogName);

theDialog.addApplyHandler(this);

theDialog.addOkHandler(this);

theDialog.addUpdateHandler(this);

theDialog.addInitializeHandler(this);

theDialog.addDialogShownHandler(this);

}

catch(Exception ex)

{

//---- Enter your exception handling code here -----

thrownew Exception(ex);

}

}

publicstaticvoid main(String [] argv) throws Exception

{

try

{

thedialog1 = newdialog1();

// The following method shows the dialog immediately

thedialog1.show();

}

catch(Exception ex)

{

//---- Enter your exception handling code here -----

theUI.nxmessageBox().show("Block Styler", nxopen.NXMessageBox.DialogType.INFORMATION, ex.getMessage());

}

finally

{

if(thedialog1 != null)

{

thedialog1.dispose();

}

}

}

publicstaticfinalintgetUnloadOption()

{

//return BaseSession.LibraryUnloadOption.EXPLICITLY;

returnBaseSession.LibraryUnloadOption.IMMEDIATELY;

// return BaseSession.LibraryUnloadOption.ATTERMINATION;

}

publicstaticvoidunloadLibrary() throwsNXException, RemoteException

{

try

{

}

catch(Exception ex)

{

//---- Enter your exception handling code here -----

theUI.nxmessageBox().show("Block Styler", nxopen.NXMessageBox.DialogType.INFORMATION, ex.getMessage());

}

}

publicint show() throwsNXException, RemoteException

{

try

{

theDialog.show();

}

catch(Exception ex)

{

//---- Enter your exception handling code here -----

theUI.nxmessageBox().show("Block Styler", nxopen.NXMessageBox.DialogType.INFORMATION, ex.getMessage());

}

return 0;

}

publicvoid dispose() throwsNXException, RemoteException

{

if(theDialog != null)

{

theDialog.dispose();

theDialog = null;

}

}

publicvoid initialize() throwsNXException, RemoteException

{

try

{

group0 = (nxopen.blockstyler.UIBlock)theDialog.topBlock().findBlock("group0");

label0 = (nxopen.blockstyler.UIBlock)theDialog.topBlock().findBlock("label0");

toggle0 = (nxopen.blockstyler.UIBlock)theDialog.topBlock().findBlock("toggle0");

}

catch(Exception ex)

{

//---- Enter your exception handling code here -----

theUI.nxmessageBox().show("Block Styler", nxopen.NXMessageBox.DialogType.INFORMATION, ex.getMessage());

}

}

publicvoiddialogShown() throwsNXException, RemoteException

{

try

{

//---- Enter your callback code here -----

}

catch(Exception ex)

{

//---- Enter your exception handling code here -----

theUI.nxmessageBox().show("Block Styler", nxopen.NXMessageBox.DialogType.INFORMATION, ex.getMessage());

}

}

publicint apply() throwsNXException, RemoteException

{

interrorCode = 0;

try

{

dialog2.show_dialog2();

}

catch(Exception ex)

{

//---- Enter your exception handling code here -----

errorCode = 1;

theUI.nxmessageBox().show("Block Styler", nxopen.NXMessageBox.DialogType.INFORMATION, ex.getMessage());

}

returnerrorCode;

}

publicint update( nxopen.blockstyler.UIBlock block) throwsNXException, RemoteException

{

try

{

if(block == label0)

{

//---------Enter your code here-----------

}

elseif(block == toggle0)

{

//---------Enter your code here-----------

}

}

catch(Exception ex)

{

//---- Enter your exception handling code here -----

theUI.nxmessageBox().show("Block Styler", nxopen.NXMessageBox.DialogType.INFORMATION, ex.getMessage());

}

return 0;

}

//------------------------------------------------------------------------------

//Callback Name: ok

//------------------------------------------------------------------------------

publicint ok() throwsNXException, RemoteException

{

interrorCode = 0;

try

{

//---- Enter your callback code here -----

errorCode = apply();

}

catch(Exception ex)

{

//---- Enter your exception handling code here -----

errorCode = 1;

theUI.nxmessageBox().show("Block Styler", nxopen.NXMessageBox.DialogType.INFORMATION, ex.getMessage());

}

returnerrorCode;

}

publicstaticclass dialog2 implementsBlockDialog.Initialize, BlockDialog.DialogShown, BlockDialog.FocusNotify, BlockDialog.KeyboardFocusNotify, BlockDialog.Apply, BlockDialog.Ok, BlockDialog.Update

{

//class members

static dialog2 thedialog2;

private String theDialogName2;

privatenxopen.blockstyler.BlockDialogtheDialog2;

privatenxopen.blockstyler.UIBlockgroup0;// Block type: Group

privatenxopen.blockstyler.UIBlockbutton0;// Block type: Button

public dialog2() throws Exception, RemoteException

{

try

{

theSession = (Session)SessionFactory.get("Session");

theUI = (UI)SessionFactory.get("UI");

theDialogName2 = "dialog2.dlx";

theDialog2 = theUI.createDialog(theDialogName2);

theDialog2.addApplyHandler(this);

theDialog2.addOkHandler(this);

theDialog2.addUpdateHandler(this);

theDialog2.addInitializeHandler(this);

theDialog2.addDialogShownHandler(this);

}

catch(Exception ex)

{

//---- Enter your exception handling code here -----

thrownew Exception(ex);

}

}

publicint show() throwsNXException, RemoteException

{

try

{

theDialog2.show();

}

catch(Exception ex)

{

//---- Enter your exception handling code here -----

theUI.nxmessageBox().show("Block Styler", nxopen.NXMessageBox.DialogType.INFORMATION, ex.getMessage());

}

return 0;

}

//------------------------------------------------------------------------------

//Method Name: dispose

//------------------------------------------------------------------------------

publicvoid dispose() throwsNXException, RemoteException

{

if(theDialog2 != null)

{

theDialog2.dispose();

theDialog2 = null;

}

}

publicstaticvoid show_dialog2() throwsNXException, RemoteException

{

try

{

thedialog2 = newdialog2();

// The following method shows the dialog immediately

thedialog2.show();

}

catch(Exception ex)

{

//---- Enter your exception handling code here -----

theUI.nxmessageBox().show("Block Styler", nxopen.NXMessageBox.DialogType.INFORMATION, ex.getMessage());

}

finally

{

thedialog2.dispose();

}

}

publicvoid initialize() throwsNXException, RemoteException

{

try

{

group0 = (nxopen.blockstyler.UIBlock)theDialog2.topBlock().findBlock("group0");

button0 = (nxopen.blockstyler.UIBlock)theDialog2.topBlock().findBlock("button0");

}

catch(Exception ex)

{

//---- Enter your exception handling code here -----

theUI.nxmessageBox().show("Block Styler", nxopen.NXMessageBox.DialogType.INFORMATION, ex.getMessage());

}

}

publicvoiddialogShown() throwsNXException, RemoteException

{

try

{

//---- Enter your callback code here -----

}

catch(Exception ex)

{

//---- Enter your exception handling code here -----

theUI.nxmessageBox().show("Block Styler", nxopen.NXMessageBox.DialogType.INFORMATION, ex.getMessage());

}

}

publicint apply() throwsNXException, RemoteException

{

interrorCode = 0;

try

{

//---- Enter your callback code here -----

}

catch(Exception ex)

{

//---- Enter your exception handling code here -----

errorCode = 1;

theUI.nxmessageBox().show("Block Styler", nxopen.NXMessageBox.DialogType.INFORMATION, ex.getMessage());

}

returnerrorCode;

}

publicint update( nxopen.blockstyler.UIBlock block) throwsNXException, RemoteException

{

try

{

if(block == button0)

{

//---------Enter your code here-----------

}

}

catch(Exception ex)

{

//---- Enter your exception handling code here -----

theUI.nxmessageBox().show("Block Styler", nxopen.NXMessageBox.DialogType.INFORMATION, ex.getMessage());

}

return 0;

}

publicint ok() throwsNXException, RemoteException

{

interrorCode = 0;

try

{

//---- Enter your callback code here -----

errorCode = apply();

}

catch(Exception ex)

{

//---- Enter your exception handling code here -----

errorCode = 1;

theUI.nxmessageBox().show("Block Styler", nxopen.NXMessageBox.DialogType.INFORMATION, ex.getMessage());

}

returnerrorCode;

}

}

}

Ссылка на сообщение
Поделиться на других сайтах

Уважаемая Александра!

Смотрю на приложенную "портянку" исходного кода и думаю - надо очень-очень захотеть помочь человеку, чтоб разобраться в этом коде..

Да, в старом добром UI_стулере была галочка "Разрешить дочерние диалоги", есть ли таковая в блок-стулере - мне неизвестно.

Еще момент - здесь на форуме немало программистов, которые пишут на С, С#, но вот на Jave - думаю не так много. Да еще и для BlockStyler.

Ссылка на сообщение
Поделиться на других сайтах

"Портянка" - просто соединенные два шаблона, полученные из BlockStylera (для диалогового окна dialog1 и dialog2), а разница в коде для С++, С# и Java минимальная, так что если есть примеры или теория как сделать на любом другом языке (только без старых UI функций, которыми только на С можно пользоваться) , но используя BlockStyler , буду тоже благодарна.

Из коментов при генерации шаблонов понятно только, что в родительском окне dialog1 нужно вызвать дочернее окно dialog2.show_dialog2(); А в dialog2 точко входа должна быть - вызовом из другого диалога (callback ). Работа с NXOpen начиналась с C,C++ такчто если есть идеи (а лучше конечно пример) насчет реализации на других языках, тоже подойдет. В крайнем случае буду делать на С с UIStyler - там уже все понятно, но хотелось бы использовать приемущества BlockStyler и Java. Заранее спасибо за любую помощь.

Ссылка на сообщение
Поделиться на других сайтах

Как оказалось, при вызове дочернего окна при нажатии на свою кнопку, а не на стандартные (ок, применить) все проходит без ошибок. Не понятно только вызов диалога по стандартным кнопкам впринципе не предусмотрен или что-то где-то надо было прописать/исправить?

Далее возникает другая проблема - после закрытия дочернего окна пока не удалось реализовать корректное возвращение в родительское и его закрытие-завершение работы программы. А именно - после закрытия дочернего окна показываю родительское Dialog1.show(), затем нажимаю на OK, окно закрывается, но NX будто не видит что окошки все закрыты, сессия остается в том виде (много не активных кнопок и меню), в каком она была во время работы приложения. Как-то получается что родительское окно и класс не уничтожаются (дело не доходит до dispose). Может кто сталкивался с такой ошибкой? Сейчас пытаюсь уничтожать родительский класс по разному, но все время или остается та же ситуация или возникает ошибка с памятью.

Ссылка на сообщение
Поделиться на других сайтах

Спасибо, попробовала, не получается. Закрадывается подозрение что что-то с классами или доступом не так. Вообще вопрос - UG lock статус, это вообще что такое, потому что в ходе работы менюх он у меня всегда UNLOCK?

В итоге пока так - из родительского окна вызывается дочернее, при этом родительское окно автоматически скрывается (закрывается???) Открывается дочернее, там все корректно отрабатывается, но после его закрытия родительское окно не возврвщается и NX остается в полу-недоступном виде (тут просто делается отмена Ctrl+Z и NX становиться активным). Если же в коде прописать открытие родительского окна после отработки дочернего, то после закрытия родительского не происходит его уничтожения (callback на OK отрабатывает, но диалог не dispose -иться) и тут уже идут ошибки с памятью.

Ссылка на сообщение
Поделиться на других сайтах

На С# применяю this.Activate() после вызова дочерних окон, чтоб родительское всплывало.

И сам вызов дочерних делаю ShowDialog(), а не Show().

Но это не блок-стайлер, а winforms...

Ссылка на сообщение
Поделиться на других сайтах

Присоединяйтесь к обсуждению

Вы можете опубликовать сообщение сейчас, а зарегистрироваться позже. Если у вас есть аккаунт, войдите в него для написания от своего имени.
Примечание: вашему сообщению потребуется утверждение модератора, прежде чем оно станет доступным.

Гость
Ответить в тему...

×   Вставлено в виде отформатированного текста.   Вставить в виде обычного текста

  Разрешено не более 75 эмодзи.

×   Ваша ссылка была автоматически встроена.   Отобразить как ссылку

×   Ваш предыдущий контент был восстановлен.   Очистить редактор

×   Вы не можете вставить изображения напрямую. Загрузите или вставьте изображения по ссылке.

  • Сейчас на странице   0 пользователей

    Нет пользователей, просматривающих эту страницу.




×
×
  • Создать...