vendredi 23 octobre 2009

Créer une fenêtre d'attente efficace en Objective-C

Avant de rentrer dans la façon de faire, voyons déjà le pourquoi.
Certain utilisateur sont déjà abituer a voir une fenêtre d'attente pendant l'ouverture du logiciel. Le premier logiciel qui me viens a l'esprit (et qui utilise ce genre de fenêtre) est Photoshop.
Maintenant, voyons les critères pour justifier l'utilisation de ce genre de fenêtre.
Il faut que je logiciel mette un certain temps à ce lancer (plusieurs secondes), que la fenêtre puisse s'ouvrir le plus tôt possible (pour donner une impression de réactivité élevé du logiciel) et enfin qu'elle disparaisse dès que le logiciel est près à l'utilisation.

Maintenant, entrons dans le vif du sujet et voyons comment s'y prendre en Objective-C. Cette méthode expliquée ici n'utilise pas de fichier NIB pour la fenêtre car jugé trop long à charger. Nous allons donc la créer à la main (dans le code). Cependant, nous ne somme pas devin et les coordonées et tailles des objets ne vons pas sortir comme ça. Pour cela nous utiliserons Interface Builder pour modéliser visuellement le résultat et ainsi obtenir les informations manquantes.

Tout logiciel dispose d'une class principale qui sera chargé en premier. En général elle se nomme AppController.

Dans le fichier d'entête '.h' nous alons ajouter une variable d'instance:
NSWindow * startscreen;

Maintenant, dans le fichier '.m' nous allons ajouter le code de création de la fenêtre dans la méthode -(id) init. C'est la première à être appelée après alloc.
NSRect frameWindow=NSMakeRect(10.,50.,560.,350.); //définition de la taille de la fenêtre
startscreen=[[NSWindow alloc] initWithContentRect:frameWindow
styleMask:NSBorderlessWindowMask
backing:NSBackingStoreBuffered
defer:NO
screen:[NSScreen mainScreen]];//création de la fenêtre
//paramétrage de la fenêtre. Elle affiche une image.
[startscreen setBackgroundColor:[NSColor windowBackgroundColor]];
[startscreen setHasShadow:YES];
NSImage * image=[NSImage imageNamed:@"monimage.png"];
NSImageView * iv=[[NSImageView alloc] initWithFrame:NSMakeRect(0.,0.,560.,350.)];
[iv setImage:image];


[[startscreen contentView] addSubview:iv];
[startscreen center]; //centrage de la fenêtre
[startscreen makeKeyAndOrderFront:self];//affichage de la fenêtre
//enregistrement au notification center que je souhaite être averti de la fin du lancement de l'application
[[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(applicationDidFinishLaunching:) name:NSApplicationDidFinishLaunchingNotification object:nil];

Puis dans sous la méthode init, nous ajoutons la fonction lié à l'événement de fin de chargement de l'application:
- (void)applicationDidFinishLaunching:(NSNotification *)aNotification{
[startscreen close];
}


Et voilà! En quelques lignes de code vous disposez d'une magnifique fenêtre d'attente sans barre de titre, centré et composé uniquement de l'image. A vous de l'agrémenter à votre grès.

mardi 13 octobre 2009

Comment activer TimeMachine sur un NAS

Pour permettre à Time Machine de sauvegarder via le réseau sur autre chose que les Time Capsule d'Apple, il suffit d'exécuter une petite ligne de commande. Attention toute fois, cela n'est pas supporté par Apple !

Source : http://www.engadget.com/2007/11/10/how-to-enable-time-machine-on-unsupported-volumes/

lundi 12 octobre 2009

Mactonique IDE 0.3.9 + Bug

Pour ceux qui ne l'aurait pas remarqué la version 0.3.9 de Mactronique IDE est disponible depuis quelques temps. cependant un bug plutôt gênant a été découvert dans cette version.
Après avoir crée un nouveau fichier, mieux vaut l'enregistrer, le fermer pour le réouvrir. Car en dehors de cette manipulation tout le contenu du fichier sera efface lors de l'enregistrement.
Ce bug était déjà présent dans une version ultérieur mais avait été corrigé. J'espère pouvoir trouver une solution à ce problème rapidement.