[Framework] Signets (WIP)

09:53 modifié dans Vos applications #1
Bonjour à  tous,

Je travail actuellement sur un petit framework qui permettrait de reproduire facilement la barre de signets de Safari.
Je lui ai donné un nom français parce que c'est tout mignon  ;D

Je viens à  peine de commencer le framework, et j'aimerai :
- Des avis sur l'implémentation : quel serait, pour vous, le meilleur moyen de d'implémenter ce framework dans vos projets (si un jour vous en auriez besoin)
- Des conseils sur la structure du framework

Pour l'instant je pars dans l'idée d'un controller (PASignetsBarController), une classe model (PASignetsBarItem), et une vue (PASignetBarView).

Je commence donc par le controller, et déjà  je me pose 2-3 questions sur l'implémentation.
J'ai ajouté des méthodes très proches de la gestion d'une NSMutableArray
<br />- (void)addSignet:(PASignetsBarItem*)aSignet;<br />- (void)insertSignet:(PASignetsBarItem*)aSignet atIndex:(NSInteger)anIndex;<br />- (void)removeSignet:(PASignetsBarItem*)aSignet;<br />- (void)removeSignetAtIndex:(NSInteger)anIndex;<br />- (void)replaceSignetAtIndex:(NSInteger)anIndex withSignet:(PASignetsBarItem*)aSignet;<br />- (void)replaceSignetAtIndex:(NSInteger)oldIndex withSignetAtIndex:(NSInteger)newIndex;<br />

Comme au final le controller se basera sur une NSMutableArray, chacune de ces méthodes appellera l'équivalent pour une NSMutableArray (exemple : addObject:aSignet).

À chaque fois qu'il y a modification (ajout, supression...), j'appelle ma méthode "synchronize" qui se charge de "convertir" les PASignetsBarItem de ma array sous une la norme .plist.. en gros, chaque PASignetsBarItem aura son équivalent sous forme de NSDictionary qui contiendra toute forme d'informations (nom, image, sous-menus, etc..). Mais il n'en reste pas moins que pendant le fonctionnement du framework, la array contient des PASignetsBarItem, et non leur représentation.

Ma grande première question est donc : ça vous paraà®t bien comme méthode?  ;D


Et là  j'en viens à  une question qui concerne l'implémentation du framework dans un projet.
<br />/*<br />	@param aBar : The PASignetsBarView outlet from your app.<br />	@param aDelegate : A delegate object that will receive some delegate methods <br />	@param aBundleIdentifier : Your bundle identifier (eg : com.MyCompany.MyApp)<br />	<br />	@Discussion<br />		Delegate : The delegate object doesn&#39;t need to implement the PASignetsBarController delegate methods.<br />		But it could be useful if you want to know when an PASignetsBarItem has been added, removed, moved.<br />*/<br />- (PASignetsBarController*)initWithBar:(PASignetsBarView*)aBar delegate:(id)aDelegate bundleIdentifier:(NSString*)aBundleIdentifier;<br />

Il vous suffirez donc d'ajouter dans votre .xib une PASignetsBarView, et dans votre appController (ou autre), il vous suffirez d'envoyer l'outlet de la barView, votre classe qui recevra les méthodes delegate, ainsi que l'identifier de votre application (pour la sauvegarde dans vos preferences).

Vous pensez que ça reste assez simple? Ou il y aurait encore mieux?


Merci d'avance pour tous ceux qui me conseilleront durant le développement du framework.

Réponses

  • 09:53 modifié #2
    Au final pour le controller ça donne ça niveau méthodes :
    <br />/* Controller methods to add/remove/replace/move a PASignetsBarItem<br />	Those methods are similar to NSMutableArray methods. Please refer to the NSMutableArray documentation to get more help.<br />	simply replace &quot;signet&quot; by &quot;object&quot; when you want to perform a search in XCode documentation<br />		(eg : replaceSignetAtIndex:withSignet: -&gt; replaceObjectAtIndex:withObject:)<br />*/<br />- (void)addSignet:(PASignetsBarItem*)aSignet;<br />- (void)addSignets:(NSArray*)signets; // This one is similar to &quot;addObjectsFromArray:&quot;<br />- (void)insertSignet:(PASignetsBarItem*)aSignet atIndex:(NSUInteger)anIndex;<br />- (void)insertSignets:(NSArray*)signets atIndexes:(NSIndexSet*)indexes;<br /><br />- (void)removeSignet:(PASignetsBarItem*)aSignet;<br />- (void)removeSignetAtIndex:(NSUInteger)anIndex;<br />- (void)removeSignets:(NSArray*)signets; // This one is similar to &quot;removeObjectsInArray:&quot;<br />- (void)removeSignetsAtIndexes:(NSIndexSet*)indexes;<br />- (void)removeSignetsInRange:(NSRange*)aRange;<br /><br />- (void)replaceSignetAtIndex:(NSUInteger)anIndex withSignet:(PASignetsBarItem*)aSignet;<br />- (void)replaceSignet:(PASignetsBarItem*)signet1 withSignet:(PASignetsBarItem*)signet2;<br />- (void)replaceSignetsAtIndexes:(NSIndexSet*)indexes withSignets:(NSArray*)signets;<br />- (void)replacesSignetsInRange:(NSRange)aRange withSignetsFromArray:(NSArray*)signets;<br />- (void)replaceSignetsInRange:(NSRange)aRange withSignetsFromArray:(NSArray*)signets range:(NSRange)otherRange;<br /><br />- (void)exchangeSignetAtIndex:(NSUInteger)idx1 withSignetAtIndex:(NSUInteger)idx2;<br />
    


    Donc vraiment similaire à  NSMutableArray.. mais d'un côté je pense que ça simplifie les choses pour le développeur qui veut implémenter le framework.. plutôt que de lui retourner la Array maà®tresse et le laisser manipuler comme un grand.
  • fouffouf Membre
    09:53 modifié #3
    Pourquoi dans la méthode init du controlleur a tu besoin du bundle identifier ? Si c'est pour les préférences, je penses que tu n'en as pas besoin car tu dois pouvoir le récuperer via le code. Sinon, je te conseillerais de mettre un titre ou tout du moins un identifiant à  chaque barre : tu pourras mettre plus facilement deux (ou plus) barres dans une application sans que cela pose de pb pour l'enregistrement dans les prefs.

    Sinon, pour te donner d'autres points de vue, pour faire la barre d'outil de DrawBerry (celle qui bouge de bas en haut, en haut des fenêtres de document) j'ai plutot utilisé un système de datasource comme pour les tableview. Mais il faut bien dire que cet aspect n'est pas du tout adapté à  ce que tu veux faire (pas de rechargements réguliers, ...).
  • août 2009 modifié #4
    dans 1250259520:

    Pourquoi dans la méthode init du controlleur a tu besoin du bundle identifier ? Si c'est pour les préférences, je penses que tu n'en as pas besoin car tu dois pouvoir le récuperer via le code. Sinon, je te conseillerais de mettre un titre ou tout du moins un identifiant à  chaque barre : tu pourras mettre plus facilement deux (ou plus) barres dans une application sans que cela pose de pb pour l'enregistrement dans les prefs.


    Yep c'est déjà  prévu, mais je pensais le faire sur PASignetsBarView pour le nom de la barre utilisée à  la sauvegarde. Mais finalement non :D
  • CeetixCeetix Membre
    09:53 modifié #5
    Tiens j'up un peu (je recherchais ton framework et je suis tombé sur ça). Tu as avancé ou mis de côté dans un dossier perdu du Finder ? ^^
  • 09:53 modifié #6
    dans 1267657776:

    Tiens j'up un peu (je recherchais ton framework et je suis tombé sur ça). Tu as avancé ou mis de côté dans un dossier perdu du Finder ? ^^

    Je crois que j'ai même supprimé  :D J'ai abandonné cette idée car je ne pense pas qu'elle servira beaucoup. Mais si des gens veulent se joindre au projet ça diminuerait grandement la charge de travail que ça représente et j'en serais ravi.
  • CeetixCeetix Membre
    09:53 modifié #7
    Moi je veux bien ça à  l'air cool. Enfin j'ai sans doute pas de grandes compétences .
    Et ça servirai à  quoi?
  • 09:53 modifié #8
    dans 1267657976:

    Moi je veux bien ça à  l'air cool. Enfin j'ai sans doute pas de grandes compétences .
    Et ça servirai à  quoi?


    À reproduire la barre de signets de Safari tout simplement. Sans pour autant limiter les items à  de simple "link to URL". ça pourrait servir à  différentes applications qui permettent l'ajout de favoris dans une petite barre facilement accessible, du genre un logiciel de FTP.
    Enfin bref comme je le disais, il n'y a pas vraiment d'utilité, mais quand ça peut en avoir une, ça servira beaucoup je pense !
  • CeetixCeetix Membre
    09:53 modifié #9
    Ok bah pourquoi pas alors :)
Connectez-vous ou Inscrivez-vous pour répondre.