2

Я хотел показать пользователю диалог удаления подтверждения при удалении объектов из Eclipse GMF. Я переопределил createDeleteSemanticCommand в политике редактирования роли компонента для отдельного EditPart, чтобы включить диалог подтверждения удаления. Ниже приведены фрагменты кода, которые я сделал.Несколько подтверждений удаления - Eclipse GMF

/////// СООТВЕТСТВУЮЩИЙ EDIT ЧАСТЬ КЛАСС, где editpolicy установлен

protected void createDefaultEditPolicies() { 
installEditPolicy(EditPolicy.COMPONENT_ROLE, new 
      ComponentRoleEditPolicy()); 

/////// СООТВЕТСТВУЮЩЕГО EDITPOLICY CLASS, где пользовательские диалоговые удалять операции выполняются (ComponentRoleEditPolicy)

protected Command createDeleteSemanticCommand(GroupRequest deleteRequest) 
{ 
if(deleteRequest instanceof GroupRequestViaKeyboard) { 
    if(deleteDialog(foo.getName())) 
      { 
       return super.createDeleteSemanticCommand(deleteRequest); 
      } 
      else { 
       return UnexecutableCommand.INSTANCE; 
      } 
     } 
return UnexecutableCommand.INSTANCE; 
} 

////// Подтверждение удаления МЕТОД

public static boolean deleteDialog(String name) { 
    Shell shell = PlatformUI.getWorkbench().getActiveWorkbenchWindow().getShell(); 
    boolean delete = MessageDialog.openConfirm(shell, "Delete", "Are you sure you want to delete " 
    + name + " ?"); 
    return delete; 
} 

Для каждой отдельной части редактирования я написал этот фрагмент кода, чтобы запросить подтверждение на удаление. Позже я понял, что вы выбираете несколько диаграмм на диаграмме и выполняете кнопку удаления, я получаю «n» окна подтверждения для «n», выбранных на диаграмме. Как решить эту проблему. Пожалуйста, помогите мне в этом.

Спасибо.

+1

Не уверен, как это сделать правильно, но здесь очень уродливое решение: после первого удаления вы можете установить некоторый статический булевский флаг «doNotAskAgain» и отбросить его на долю секунды позже, используя некоторый поток. –

+0

Да, Thats отлично работает благодаря ниткам и материалам. Но существует ли какой-либо конкретный gmf API eclipse, чтобы включить диалог подтверждения удаления для элемента (ов). Любая помощь в этом? – Logan

+0

По-прежнему нет «правильного» решения, но вы можете обойтись и без потоков, просто запомнив отметку времени последнего удаления и проверки, когда последний выпуск был выпущен перед показом диалога ... –

ответ

0

Вот решение, которое я выполнил для решения проблемы.

В пользовательском генерироваться классом DeleteAction, переопределения следующие методы

// confirm dialog for rightclicking and selecting "Delete from Model" 
@Override 
public void runWithEvent(Event event) { 
    if(deleteDialog("the selected element(s)")) 
     super.runWithEvent(event); 
} 
// Confirm dialog for pressing delete key. 
@Override 
public void run() { 
    if(deleteDialog("the selected element(s)")) { 
     super.run(); 
    } 
} 

добавить удаление ключа действия, в созданном классе XXXDiagramEditor,

// In the generated configureGraphicalViewer() - Change to @Generated NOT 
KeyHandler keyHandler = getDiagramGraphicalViewer().getKeyHandler(); 
keyHandler.put(KeyStroke.getPressed(SWT.DEL, 127, 0), new DeleteElementAction(this)/*Custom generated delete action*/); 
getDiagramGraphicalViewer().setKeyHandler(keyHandler); 

После добавления этих кодов, все работало как очарование. Он попросит диалог подтверждения, когда мы нажмем delete (Даже после выбора любого количества элементов) и выполним необходимые операции. Также, когда мы щелкаем правой кнопкой мыши и выбираем delete из модели, он работает. Кроме того, нам не нужна политика редактирования роли компонента. Я удалил его с installEditPolicy() [также файл editPolicy].

Смежные вопросы