OVH Cloud OVH Cloud

[Cocoa] savePanel et NSAlert

1 réponse
Avatar
pere.noel
j'ai un savePanel et je souhaite, lorsque le fichier existe déjà, ouvrir
une NSAlert, qui [con|in]firme le choix de l'utilisateur :

dans la méthode pour savePanel :
savePanelDidEnd_returnCode_contextInfo(panel, returnCode, contextInfo)

j'ai :

if FileTest.exists?("#{@file}")
alertSheetOpen("Attention vous allez écrasez le fichier «
#{@file} ».", "Il est préférable de le renommer.", proc { fileChoosen })
else
@open_panel_proc.call
end


avec :

@alert=OSX::NSAlert.alertWithMessageText_defaultButton_alternateButton_o
therButton_informativeTextWithFormat("", "Annuler", "Valider", "", "")

et :


def alertSheetOpen(messageText, informativeText, proc_to_call)
p "alertSheetOpen(messageText, informativeText, proc_to_call)"
@alert.setMessageText(messageText)
@alert.setInformativeText(informativeText)
@alert.setAlertStyle(OSX::NSCriticalAlertStyle)
@done_alert_proc = proc_to_call

@alert.beginSheetModalForWindow_modalDelegate_didEndSelector_contextInfo
(@savePanel, self, 'alertDidEnd:returnCode:contextInfo:', "")
sleep 2
end


et enfin :


def alertDidEnd_returnCode_contextInfo(alert, returnCode, contextInfo)
p "returnCode.to_i = #{returnCode.to_i}"
if returnCode.to_i == 1
sleep 0.5
chooseFile(nil)
else
@done_alert_proc.call
end
end


MAIS PROBLEME, ça ne passe pas par
"alertDidEnd_returnCode_contextInfo(alert, returnCode, contextInfo)"

l'alertSheet se ferme toute seule ???

je n'ai pas le temps de cliquer...

si j'inteverti les boutons "Annuler" et "Enregistrer", même chose...

je ne passe pas par alertDidEnd_returnCode_contextInfo...

--
une bévue

1 réponse

Avatar
pere.noel
Une bévue wrote:

l'alertSheet se ferme toute seule ???


si je change la ligne :

@alert.beginSheetModalForWindow_modalDelegate_didEndSelector_contextInfo
(nil, self, 'alertDidEnd:returnCode:contextInfo:', "")

donc je met nil pour la fen^tre alors cette "sheet" s'ouvre comme une
fenêtre, placée différemment si bien que, amha, le bouton par défaut
n'est pas cliqué...

donc veut dire que je devrait par une release des clixks souris AVANT de
lancer cette fenêtre d'alerte ???

ou la créer seulement après que j'en ai besoin, mais alors comment la
tuer après, pour éviter d'en avoir une tripotée en meme ???

--
une bévue