Interface metal ou aqua au choix
muqaddar
Administrateur
Salut jeunes gens,
Bon on en a parlé récemment, mon appli est en Aqua par défaut. Par le biais d'une preférences (checkbox), je voudrais donner la possibilité de la passer en métal.
Là je récupère la valeur. Ensuite si le BOOL est YES, je voudrai donner l'apparence métal.
J'ai bien vu cette doc, mais j'arrive pas à l'exploiter :
http://www.cocoadev.com/index.pl?TexturedWindows
Merci à vous de me guider.
Bon on en a parlé récemment, mon appli est en Aqua par défaut. Par le biais d'une preférences (checkbox), je voudrais donner la possibilité de la passer en métal.
id mesPrefs = [[NSUserDefaultsController sharedUserDefaultsController] values];<br />//renvoyons la valeur de la boà®te à cocher sous forme d'un simple booléen<br />BOOL interfaceStyle = [[mesPrefs valueForKey: @"interfaceStyle"] boolValue];
Là je récupère la valeur. Ensuite si le BOOL est YES, je voudrai donner l'apparence métal.
J'ai bien vu cette doc, mais j'arrive pas à l'exploiter :
http://www.cocoadev.com/index.pl?TexturedWindows
Merci à vous de me guider.
Connectez-vous ou Inscrivez-vous pour répondre.
Réponses
import com.apple.cocoa.foundation.*;
import com.apple.cocoa.application.*;
public class TexturedBackgroundWindow extends NSWindow {
private static String PrefWindowName="EditorWindow";
public TexturedBackgroundWindow( NSRect contentRect, int styleMask, int backingType, boolean defer)
{
super( contentRect,
styleMask+((UUserDefaults.booleanPreferenceValue(PrefWindowName+"HasTexturedBackground"))
?NSWindow.TexturedBackgroundWindowMask:0),
backingType,defer);
}
public void setTexturedBackground(boolean state)
{
UUserDefaults.setBooleanPreferenceValue(frameAutosaveName()+"HasTexturedBackground",state);
}
public boolean texturedBackground()
{
return UUserDefaults.booleanPreferenceValue(frameAutosaveName()+"HasTexturedBackground");
}
}
T'as fait une classe rien que pour ça ?
Sinon, bah, c'est du Java... Si y'a un traducteur Java -> Obj-C dans la salle... ?
- (id)initWithContentRect:(NSRect)contentRect styleMask:(unsigned int)styleMask backing:(NSBackingStoreType)backingType defer:(BOOL)flag
TexturedBackgroundWindow
quel soucis du détail !
Oui Oxitan on ne peut modifier le styleMask d'une fenêtre une fois qu'elle a été crée
Faut donc sous classer ta NSWindow pour implémenter son init....
Enfin, on peut pas modifier une fois la fenêtre crée ... IB le fait bien lui !! (quand on coche/décoche "has texture") !
Comment fait I.B. là ? ???
Personne n'a réussi à faire la même chose ?
Alors sous-classons.
Merci messieurs.
Déja il serait bien qu'Apple respecte ses propes directives. Une fenêtre de document ne devrait jamais avoir le look metal ( Safari ??!!)
L'astuce consistant à créer nouvelle fenêtre et à remplacer le contentView à la volée est plantogène, ça marche une fois mais pas deux :-\
Quant à IB soit il utilise des fenêtres non classiques, soit il utilise une méthode non documentée (ou les deux )
Le Finder aussi. Il y a encore d'autres trucs qui ne vont pas dans Safari, comme par exemple le non emploi de NSToolbars, pour les fans de l'interface graphite, il n'est pas adapté (les boutons de la "barre d'outil" restent bleus alors qu'ils devraient être gris).
I.B. est un soft très particulier.... je pense que les fenêtres dans lesquelles ont met nos instances sont toutes tracées via Quartz à coup de drawRect: et de primitives.
En faites on a une simulation du résultat je crois