Multi-nib et barre d'outils

muqaddarmuqaddar Administrateur
18:58 modifié dans API AppKit #1
Salut,

Bon, je suis en train de créer ma première application multi-nib.
J'arrive à  charger un autre nib depuis le premier en cliquant sur une icone de ma barre d'outils. Seulement, mon nib se charge et charge la fenetre associée à  ce nib sur l'écran, en plus de la fenêtre principale. Moi je voudrais remplacer la fenetre mainWindow du mainMenu.nib par celle du nouveau nib (casier.nib), tout en gardant la barre d'outils associée à  la fenetre du maimMenu.nib.

Si je ne suis pas clair, c'est exactement le même principe que les prefs d'ichat...

Tout ça est passionnant !

Réponses

  • mpergandmpergand Membre
    18:58 modifié #2
    Donc tu ne veux pas changer de fenêtre mais seulement en changer son contenu, alors change le  ;)

    Globalement par setContentView
    Ou en utilisant un tabView sans tabs visibles
  • odjauodjau Membre
    18:58 modifié #3
  • muqaddarmuqaddar Administrateur
    18:58 modifié #4
    ptit bras, je suis en train de le lire, mais ils ne parlent pas de plusieurs nib...

    mpergan, il manque pas des mots dans ton message ? ;)
  • mpergandmpergand Membre
    18:58 modifié #5
    Ce que tu sembles vouloir faire ressemble aux préférences Systèmes, non ?

    Une méthode possible est d'utiliser un NSTabView avec un tabView pour chaque vue que tu veux afficher,  lors d'un clic sur une  icône de ta barre d'outils, tu selectionneras la tabView correspondante avec selectTabViewItem ou selectTabViewAtIndex.
  • muqaddarmuqaddar Administrateur
    18:58 modifié #6
    Bon, j'y suis arrivé (sans tabView). En fait, c'est tout con.
    J'ai donc 2 nib (en tout j'en aurais 5 plus tard) qui contiennent chacun 1 vue (view).

    Dans le awakeFromNib, j'initialise la vue du mainMenu.nib. Ensuite, qd je clique sur l'icone de ma barre d'outils, j'appelle une action qui charge le nib (l'autre) et affiche sa vue. Le pied avec la méthode resize d'animer ça ! :-)

    Dependant, il y a 2 points qui foirent :
    - D'abord, je ne suis pas sûr que quand un nib a été chargé, il ne soit pas à  nouveau chargé.

    J'ai fait ça :
    &nbsp; &nbsp; if (!casierView) {<br />           [NSBundle loadNibNamed:@&quot;Casier&quot; owner:self];<br />   }
    

    casierView étant la vue du nib casier... je doute que ça suffise.

    - Second point :
    Au lancement de l'appli tout est parfait. Je change de nib et de vue : OK. La deuxième vue est plus petite. Je repasse dans la première et patatrac, le haut de la vue est caché par la toolbar. Et oui on se sert de la frame de la fenêtre pour ajuster à  la taille mais ça prend pas en compte la barre d'outils apparemment.

    Le code de redimenssionnement :
    - (void)resizeWindowToSize:(NSSize)newSize<br />{<br />&nbsp; &nbsp; NSRect aFrame;<br />&nbsp; &nbsp; <br />&nbsp; &nbsp; float newHeight = newSize.height;<br />&nbsp; &nbsp; float newWidth = newSize.width;<br />&nbsp; &nbsp; <br />&nbsp; &nbsp; aFrame = [NSWindow contentRectForFrameRect:[mainWindow frame] styleMask:[mainWindow styleMask]];<br />&nbsp; &nbsp; <br />&nbsp; &nbsp; aFrame.origin.y += aFrame.size.height;<br />&nbsp; &nbsp; aFrame.origin.y -= newHeight;<br />&nbsp; &nbsp; <br />&nbsp; &nbsp; aFrame.size.height = newHeight;<br />&nbsp; &nbsp; aFrame.size.width = newWidth;<br />&nbsp; &nbsp; <br />&nbsp; &nbsp; aFrame = [NSWindow frameRectForContentRect:aFrame styleMask:[mainWindow styleMask]];<br />&nbsp; &nbsp; <br />&nbsp; &nbsp; [mainWindow setFrame:aFrame display:YES animate:YES];<br />}<br /><br />
    


    Je pense pouvoir tricher en ajoutant une dimension en pixels en hauteur, mais je pense que ça augmentera la taille aussi au démarrage de l'appli (qd ça marche)...
  • muqaddarmuqaddar Administrateur
    18:58 modifié #7
    Bon j'ai ajouté 50 pixels qui semble correspondre à  la hauteur de barre d'outils :

        float newHeight = newSize.height + 50;

    ça marche, mais je trouve pas cette solution très propre... Il doit y avoir mieux...
  • nucleusnucleus Membre
    18:58 modifié #8
    dans 1099924402:
    ça marche, mais je trouve pas cette solution très propre... Il doit y avoir mieux...


    Moi non plus..

    Je ferais plutôt comme a dit mpergand: un TabView..
    C'est une View qui sait gérer plusieurs vues et qui en affiche qu'une seule à  la fois.. ca semble correspondre à  ton besoin (tu peux ne pas afficher les onglets)

    Tu met la TabView dans la fenêtre avec ta toolbar, et tu fournis tous les NSTabViewItem initialisés pour chacune de tes vue de nib..

    C'est encore plus simple si tu n'a pas la contrainte d'avoir plusieurs nibs..

  • mpergandmpergand Membre
    18:58 modifié #9
    dans 1099932507:


    C'est encore plus simple si tu n'a pas la contrainte d'avoir plusieurs nibs..



    Et oui, je comprends pas bien l'interet d'avoir plusieurs nibs, en fait  ???
    Hein osxitan ?  ;)
  • GenoseGenose Membre
    novembre 2004 modifié #10
    voila,

    file:///Developer/Documentation/Cocoa/TasksAndConcepts/ProgrammingTopics/LoadingResources/Concepts/UsingMultiNibFiles.html
  • muqaddarmuqaddar Administrateur
    18:58 modifié #11
    Et bien j'ai lu que avoir plusieurs nib permettait d'utiliser moins de mémoire par rapport à  plusieurs vues, et elles sont initialisées quand on les demande, pas toutes au démarrage comme les vues, ce qui ralentit le lancement du prog.
    Il va de soit que c'est peut-être démesuré dans mon cas, mais autant faire les choses bien même sur un petit programme...

    Ton lien ne marche pas Génose. ;)

    Quant à  la solution de charger les vues, ça marche très bien hormis l'histoire du décalage dû à  la toolbar. C'est comme ça qu'ils font en général (j'ai lu des tutorials), je ne vois pas trop l'intérêt de "bricoler" avec des tabView qui ne sont pas là  pour ça, non ? ;)
  • mpergandmpergand Membre
    18:58 modifié #12
    Je parlais dans le cas d'oxitan, je vois pas le pourquoi du multi nibs  là Â  :)



    Et bien j'ai lu que avoir plusieurs nib permettait d'utiliser moins de mémoire par rapport à  plusieurs vues, et elles sont initialisées quand on les demande, pas toutes au démarrage comme les vues, ce qui ralentit le lancement du prog.
    Il va de soit que c'est peut-être démesuré dans mon cas, mais autant faire les choses bien même sur un petit programme...


    L'économie de mémoire, pfff c'était bon du temps de NEXT y a 15 ans, quant au temps de chargement, ben c'est pareil, quand les ordis plafonnaient à  20Mhz :D

    Sérieusement, le multi-nibs ne se justifie que dans le cas de grosses applis bien gourmandes en ressources...

    Pour moi le multi-nibs à  une autre utilité, il peut aider à  la structuration d'un programme et permettre de créer des modules autonomes. Ex, j'ai dans mes éditeurs de synthés un clavier MIDI virtuel, il est composé d'un nib et de sa classe contrôleur, formant un module indépendant. Il me suffit de l'ajouter à  un projet et de le charger au démarrage et voila il est intégré à  la nouvelle appli.

    Franchement ces économies de bouts de ficelles sur la mémoire et la vitesse de chargement: laissez tomber :D
  • muqaddarmuqaddar Administrateur
    18:58 modifié #13
    C'est bizarre pourtant que Apple crée 11 nibs en plus du Main pour son logiciel iChat qui est un petit soft.
  • GenoseGenose Membre
    18:58 modifié #14
    Je vient de trouver foule de document parlant de ce genre truc "Multi-nibs in Documents-Based App", mais pour creer ce genre de chose, c'est une autre histoire.

    ils racontent que pour que acceder aux classes et aux NSWindow, on doit creer une instance de NSWindowController,
    jusque la ok ca marche.

    //@ mycontrollerwind : NSWindowController

    ::main.m

    mycontrollerwind *mycontroller = [[mycontrollerwind alloc] init];


    ensuite je charge le nib avec

      if (![NSBundle loadNibNamed:@Stratup_screen owner:mycontrollerwind]) {

      NSLog(@Error loading Nib for document!);
        [mycontrollerwind release];


      } else {

     
     

        NSLog(@ Nib loaded for document!);
        [mycontrollerwind doSomething];

     
     
     

    }
    ::end

    et enfin avec dosomething je fait dans ma class :
    ::mycontrollerwind.m

    [MyIBWind makeKeyAndOrderFront];


    meme en suivant les recomandations des doc apple et des tutos sur le web ca n'a rien changer :(
    ma fenetre reste cacher et dans la console j'ai des alerte genre "bad connection" alors que en definisant ce meme nib comme etant le mainnib il charge et affiche la fenetre  :'( :why?:

    a croire je devrai refaire les connections avec un Truc comme NSNibConnection

    une idée du pourquoi de ce truc?

    Merci

    Genose
  • cbrandtcbrandt Membre
    18:58 modifié #15
    dans 1099924402:

    Bon j'ai ajouté 50 pixels qui semble correspondre à  la hauteur de barre d'outils :

        float newHeight = newSize.height + 50;

    ça marche, mais je trouve pas cette solution très propre... Il doit y avoir mieux...


    pour obtenir la taille de la barre d'outils:

    <br />&nbsp; &nbsp; toolbarHeight = 20.0;<br />&nbsp; &nbsp; if ([[[self window] toolbar] isVisible])<br />&nbsp; &nbsp; &nbsp; &nbsp; toolbarHeight = [NSWindow contentRectForFrameRect: [[self window] frame] styleMask: [[self window] styleMask]].size.height - [[[self window] contentView] frame].size.height + 20;<br />
    

  • mpergandmpergand Membre
    18:58 modifié #16
    Salut genose,

    Décidément le multi-nibs posent bien des problèmes et  pourtant c'est pas compliqué, il suffit de les utiliser à  bon escient.


    Je vient de trouver foule de document parlant de ce genre truc "Multi-nibs in Documents-Based App",


    Les applis documents-based sont par nature multi-nibs puisqu'il y a un nib par type de document + le mainNib

    Pour l'histoire du windowController, le seul cas où j'ai eu à  l'utiliser, c'est pour ouvrir plusieurs fenêtres contenant le même document (représentation différentes des données)

    Que veux-tu faire avec ce windowController ?
  • BruBru Membre
    18:58 modifié #17
    dans 1099968629:

    mycontrollerwind *mycontroller = [[mycontrollerwind alloc] init];
      if (![NSBundle loadNibNamed:@Stratup_screen owner:mycontrollerwind]) {
       NSLog(@Error loading Nib for document!);
        [mycontrollerwind release];
      } else {
        NSLog(@ Nib loaded for document!);
        [mycontrollerwind doSomething];



    Je pense que c'est une erreur de saisie, mais vérifie bien que c'est mycontroller et non mycontrollerwind, car dans le bout de code que tu as mis dans ton post, tu as fait la confusion entre les 2 (argument owner de (![NSBundle loadNibNamed:owner:], destinataire du message release ou doSomething dans le if/else).

    .
  • muqaddarmuqaddar Administrateur
    18:58 modifié #18
    dans 1099990982:

    dans 1099924402:

    Bon j'ai ajouté 50 pixels qui semble correspondre à  la hauteur de barre d'outils :

        float newHeight = newSize.height + 50;

    ça marche, mais je trouve pas cette solution très propre... Il doit y avoir mieux...


    pour obtenir la taille de la barre d'outils:

    <br />&nbsp; &nbsp; toolbarHeight = 20.0;<br />&nbsp; &nbsp; if ([[[self window] toolbar] isVisible])<br />&nbsp; &nbsp; &nbsp; &nbsp; toolbarHeight = [NSWindow contentRectForFrameRect: [[self window] frame] styleMask: [[self window] styleMask]].size.height - [[[self window] contentView] frame].size.height + 20;<br />
    




    Merci cbrandt, ça a l'air de marcher nikel ! :-)
  • nucleusnucleus Membre
    novembre 2004 modifié #19
    A part le cas des application "document-based" où tu as forcement 2 nibs, l'interêt principal d'avoir plusieurs nib est de pouvoir réutiliser une partie de l'interface graphique dans une autre application (ex: vérification des mises à  jour qui peut être similaire d'une appli à  l'autre) ou de permettre d'avoir des plugins avec une interface graphique

    Sinon effectivement tu peux gagner du temps de chargement et de la mémoire, mais dans ton cas je ne pense pas que tu n'aura pas cet avantage.. puisque pour afficher ta fenêtre il te faudra charger tous les nibs de tes fragments d'interface.. tu te compliques la vie..

    Pour profiter de ces avantages, tu pourrais faire un nib spécifique pour cette fenêtre qui incluerai aussi toutes tes vues différentes dans un TabView.. Et au moment voulu, tu charge ce nib en l'associant à  ton WindowController spécifique..

    A propos de WindowController dans une application "document-based", ca peut être utile de faire sa propre version pour découpler la classe document de truc périphériques comme la gestion des tiroirs, des barres d'outils.. Ainsi la classe document se voit affecter des responsabilité plus en rapport avec le modèle (MVC) et moins en rapport avec l'interaction utilisateur
  • muqaddarmuqaddar Administrateur
    18:58 modifié #20
    Bon, et bien je vais tâcher d'écouter vos conseils et de ne pas multiplier les nibs. :-)
    Merci à  vous.
    ça aura au moins le mérite de m'avoir fait utiliser les nibs.
  • GenoseGenose Membre
    novembre 2004 modifié #21
    dans 1099993875:



    Je pense que c'est une erreur de saisie, mais vérifie bien que c'est mycontroller et non mycontrollerwind, car dans le bout de code que tu as mis dans ton post, tu as fait la confusion entre les 2 (argument owner de (![NSBundle loadNibNamed:owner:], destinataire du message release ou doSomething dans le if/else).

    .


    effectivement, mais bon cela n'a pas changer grand chose dans le code, une fois compiler

    <br />mycontrollerwind *mycontroller = [[mycontrollerwind alloc] init];<br />&nbsp; if (![NSBundle loadNibNamed:@&quot;Stratup_screen&quot; owner:mycontroller]) {<br />&nbsp;  NSLog(@&quot;Error loading Nib for document!&quot;);<br />&nbsp; &nbsp; [mycontroller release];<br />&nbsp; } else {<br />&nbsp; &nbsp; NSLog(@&quot; Nib loaded for document!&quot;);<br />&nbsp; &nbsp; [mycontroller doSomething];
    






    en plus la class mycontrollerwind est la classe stoké dans mon nib avec cette fenetre donc c'est pas logique que elle se retrouve pas.

    <br /><br />/* StartupScreenPanel */<br /><br />#import &lt;Cocoa/Cocoa.h&gt;<br /><br />@interface&nbsp; mycontrollerwind: NSWindowController<br />{<br /><br />&nbsp; &nbsp; IBOutlet id APP_vers_str;<br />&nbsp; &nbsp; // NSWindowController *&nbsp; &nbsp; windowController; //inutiliser ici<br />&nbsp; &nbsp; &nbsp; IBOutlet id NStartupScreenPanel;<br />&nbsp; &nbsp; <br /><br />}<br />//affichage de la fentre<br />- (IBAction)Startupscreen:(id)sender;<br /><br />-(void) awakeFromNib;<br />// init<br />-(id)init;<br /><br /><br />@end<br /><br />/////////////////<br /><br />#import &quot;mycontrollerwind.h&quot;<br /><br />@implementation mycontrollerwind<br /><br />- (IBAction)Startupscreen:(id)sender<br />{<br /><br /> NSLog(@&quot;mycontrollerwind::StartupScreenPanel niblink : %@&quot;,NStartupScreenPanel);<br /> if(!NStartupScreenPanel)<br />&nbsp; &nbsp; &nbsp; &nbsp; {<br /><br /><br />&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; NSLog(@&quot;mycontrollerwind::StartupScreenPanel not loaded&quot;);<br />&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <br /><br />&nbsp; &nbsp; &nbsp; &nbsp; }else{<br /><br />&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; //&nbsp; [APP_vers_str setStringValue:@&quot; le debut&quot;];<br />&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <br />&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <br /> <br />&nbsp; &nbsp; &nbsp; &nbsp; &nbsp;  <br />&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;  [NStartupScreenPanel makeKeyAndOrderFront:self]; // ib outlet connecter a l&#39;objet fentre dans le nib<br />&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <br />&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <br />&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; NSLog(@&quot;mycontrollerwind::StartupScreenPanel says hello&quot;);<br />&nbsp; &nbsp; &nbsp; &nbsp; }<br /><br />}<br />-(id)init<br />{<br />&nbsp; &nbsp; NSLog(@&quot;&#092;n&#092;nmycontrollerwind::init::StartupScreenPanel&#092;n &quot;);<br /><br />&nbsp; &nbsp;  self=[ super init];<br /><br />&nbsp; &nbsp;  if(NStartupScreenPanel == nil){<br /><br />&nbsp; <br />&nbsp; &nbsp; &nbsp; &nbsp;  return self;<br />&nbsp; &nbsp;  }<br />&nbsp;  [self release];<br />&nbsp;  return nil;<br />}<br />-(void) awakeFromNib<br />{<br /><br /><br />NSLog(@&quot;mycontrollerwind::awakeFromNib::StartupScreenPanel says hello&quot;);<br /><br /><br /><br /><br /><br />}<br /><br /><br />@end<br />
    





    bien que ...


    mon log donne :

    2004-11-09 15:58:15.587 Mon Nib venu d&#39;ailleur[3354] <br /><br />L&#39;application se charge<br />2004-11-09 15:58:15.588 Mon Nib venu d&#39;ailleur[3354]&nbsp; <br /> .... 0 <br />2004-11-09 15:58:15.588 Mon Nib venu d&#39;ailleur[3354] <br /><br />init::StartupScreenPanel<br /> <br />2004-11-09 15:58:15.590 Mon Nib venu d&#39;ailleur[3354]&nbsp; <br /> .... 1 <br />2004-11-09 15:58:17.203 Mon Nib venu d&#39;ailleur[3354] <br /><br />init::StartupScreenPanel<br /> <br />Nov&nbsp; 9 15:58:17 Ordinateur-de-rutabaga /users/sil_am_proj/appli/Build/Mon Nib venu d&#39;ailleur.app/Contents/MacOS/Mon Nib venu d&#39;ailleur: kCGErrorInvalidConnection : CGSGetCurrentCursorLocation: Invalid connection<br /><br />Nov&nbsp; 9 15:58:17 Ordinateur-de-rutabaga /users/sil_am_proj/appli/Build/Mon Nib venu d&#39;ailleur.app/Contents/MacOS/Mon Nib venu d&#39;ailleur: kCGErrorInvalidConnection : CGSGetCurrentCursorLocation: Invalid connection<br /><br />Nov&nbsp; 9 15:58:17 Ordinateur-de-rutabaga /users/sil_am_proj/appli/Build/Mon Nib venu d&#39;ailleur.app/Contents/MacOS/Mon Nib venu d&#39;ailleur: kCGErrorInvalidConnection : CGSGetCurrentCursorLocation: Invalid connection<br /><br />2004-11-09 15:58:17.345 Mon Nib venu d&#39;ailleur[3354] mycontrollerwind::awakeFromNib::StartupScreenPanel says hello<br />2004-11-09 15:58:17.348 Mon Nib venu d&#39;ailleur[3354] mycontrollerwind::awakeFromNib::StartupScreenPanel says hello<br />Nov&nbsp; 9 15:58:17 Ordinateur-de-rutabaga /users/sil_am_proj/appli/Build/Mon Nib venu d&#39;ailleur.app/Contents/MacOS/Mon Nib venu d&#39;ailleur: kCGErrorInvalidConnection : CGSNewWindow: Invalid connection<br /><br />2004-11-09 15:58:17.349 Mon Nib venu d&#39;ailleur[3354] _NXCreateWindow: error creating window (1002)<br />Nov&nbsp; 9 15:58:17 Ordinateur-de-rutabaga /users/sil_am_proj/appli/Build/Mon Nib venu d&#39;ailleur.app/Contents/MacOS/Mon Nib venu d&#39;ailleur: kCGErrorInvalidConnection : CGSSetWindowProperty: Invalid connection<br /><br />Nov&nbsp; 9 15:58:17 Ordinateur-de-rutabaga /users/sil_am_proj/appli/Build/Mon Nib venu d&#39;ailleur.app/Contents/MacOS/Mon Nib venu d&#39;ailleur: kCGErrorInvalidConnection : CGSInvalidateWindowShadow: Invalid connection<br /><br />Nov&nbsp; 9 15:58:17 Ordinateur-de-rutabaga /users/sil_am_proj/appli/Build/Mon Nib venu d&#39;ailleur.app/Contents/MacOS/Mon Nib venu d&#39;ailleur: kCGErrorInvalidConnection : CGSSetWindowListAlpha: Invalid connection<br /><br />Nov&nbsp; 9 15:58:17 Ordinateur-de-rutabaga /users/sil_am_proj/appli/Build/Mon Nib venu d&#39;ailleur.app/Contents/MacOS/Mon Nib venu d&#39;ailleur: kCGErrorIllegalArgument : CGSLockWindowRectBits: Invalid window<br /><br />Nov&nbsp; 9 15:58:17 Ordinateur-de-rutabaga /users/sil_am_proj/appli/Build/Mon Nib venu d&#39;ailleur.app/Contents/MacOS/Mon Nib venu d&#39;ailleur: kCGErrorFailure : Failed to create window context device.<br /><br />Nov&nbsp; 9 15:58:17 Ordinateur-de-rutabaga /users/sil_am_proj/appli/Build/Mon Nib venu d&#39;ailleur.app/Contents/MacOS/Mon Nib venu d&#39;ailleur: kCGErrorFailure : CGWindowContextCreate: failed to create context.<br /><br />2004-11-09 15:58:17.361 Mon Nib venu d&#39;ailleur[3354] _initWithWindowNumber: error creating graphics ctxt object for ctxt:0, window:-1<br />Nov&nbsp; 9 15:58:17 Ordinateur-de-rutabaga /users/sil_am_proj/appli/Build/Mon Nib venu d&#39;ailleur.app/Contents/MacOS/Mon Nib venu d&#39;ailleur: kCGErrorFailure : CGContextResetClip: invalid context<br /><br />Nov&nbsp; 9 15:58:17 Ordinateur-de-rutabaga /users/sil_am_proj/appli/Build/Mon Nib venu d&#39;ailleur.app/Contents/MacOS/Mon Nib venu d&#39;ailleur: kCGErrorFailure : CGContextReplaceTopGState: invalid context<br /><br />Nov&nbsp; 9 15:58:17 Ordinateur-de-rutabaga /users/sil_am_proj/appli/Build/Mon Nib venu d&#39;ailleur.app/Contents/MacOS/Mon Nib venu d&#39;ailleur: kCGErrorInvalidConnection : CGSGetWindowProperty: Invalid connection<br /><br />Nov&nbsp; 9 15:58:17 Ordinateur-de-rutabaga /users/sil_am_proj/appli/Build/Mon Nib venu d&#39;ailleur.app/Contents/MacOS/Mon Nib venu d&#39;ailleur: kCGErrorInvalidConnection : CGSSetHideOnDeact: error getting current hide-on-deactivate state<br /><br />Nov&nbsp; 9 15:58:17 Ordinateur-de-rutabaga /users/sil_am_proj/appli/Build/Mon Nib venu d&#39;ailleur.app/Contents/MacOS/Mon Nib venu d&#39;ailleur: kCGErrorInvalidConnection : CGSSetWindowProperty: Invalid connection<br /><br />Nov&nbsp; 9 15:58:17 Ordinateur-de-rutabaga /users/sil_am_proj/appli/Build/Mon Nib venu d&#39;ailleur.app/Contents/MacOS/Mon Nib venu d&#39;ailleur: kCGErrorInvalidConnection : CGSSetEventMask: error setting client event mask window property<br /><br />Nov&nbsp; 9 15:58:17 Ordinateur-de-rutabaga /users/sil_am_proj/appli/Build/Mon Nib venu d&#39;ailleur.app/Contents/MacOS/Mon Nib venu d&#39;ailleur: kCGErrorInvalidConnection : CGSSetWindowEventMask: Invalid connection<br /><br />Nov&nbsp; 9 15:58:17 Ordinateur-de-rutabaga /users/sil_am_proj/appli/Build/Mon Nib venu d&#39;ailleur.app/Contents/MacOS/Mon Nib venu d&#39;ailleur: kCGErrorInvalidConnection : CGSSetEventMask: error setting window event mask<br /><br />Nov&nbsp; 9 15:58:17 Ordinateur-de-rutabaga /users/sil_am_proj/appli/Build/Mon Nib venu d&#39;ailleur.app/Contents/MacOS/Mon Nib venu d&#39;ailleur: kCGErrorInvalidConnection : CGSSetWindowToReleaseBackingOnOrderOut: Invalid connection<br /><br />Nov&nbsp; 9 15:58:17 Ordinateur-de-rutabaga /users/sil_am_proj/appli/Build/Mon Nib venu d&#39;ailleur.app/Contents/MacOS/Mon Nib venu d&#39;ailleur: kCGErrorInvalidConnection : CGSGetCurrentCursorLocation: Invalid connection<br /><br />2004-11-09 15:58:17.404 Mon Nib venu d&#39;ailleur[3354]&nbsp; main::Nib loaded for document!<br />2004-11-09 15:58:17.405 Mon Nib venu d&#39;ailleur[3354]&nbsp; <br /> .... 3 <br />2004-11-09 15:58:17.405 Mon Nib venu d&#39;ailleur[3354] mycontrollerwind::StartupScreenPanel&nbsp; niblink : (null)<br />2004-11-09 15:58:17.408 Mon Nib venu d&#39;ailleur[3354] mycontrollerwind::StartupScreenPanel not loaded<br />2004-11-09 15:58:17.408 Mon Nib venu d&#39;ailleur[3354]&nbsp; <br /> .... 5
    




    k s ki cloche dans ce Ko 2 ?

    ps: je veux faire comme d'autre on appris a le faire, une fenetre qui s'affichera apres avoir charger une ressource nib.
  • Eddy58Eddy58 Membre
    18:58 modifié #22
    Genose, si tu veux une bonne base pour faire du multi-nib, je te conseille l'exemple dans le devkit : Developer/Examples/InterfaceBuilder/SimpleMultiWindow
    :)
  • GenoseGenose Membre
    18:58 modifié #23
    ok je regarde ca merci, ca me donne deja une piste merci Eddy58 :)
  • GenoseGenose Membre
    novembre 2004 modifié #24
    Salut,

    Pour finir je suis parvenu a creer une startup screen, comme pendant le demarrage de macosX, avec texte qui defile en temp reel pendant les phases de  chargement de tout mes nib, plug-ins, et de mes documents, en gros pendant toutes le durée du chargement de l'appli.

    le muti-nib  est vraiment super.


    j'apprend doucement mais je progresse mieux deja !!

    A bientot.

    Genose
  • 18:58 modifié #25
    dans 1099994757:


    pour obtenir la taille de la barre d'outils:

    <br />    toolbarHeight = 20.0;<br />    if ([[[self window] toolbar] isVisible])<br />        toolbarHeight = [NSWindow contentRectForFrameRect: [[self window] frame] styleMask: [[self window] styleMask]].size.height - [[[self window] contentView] frame].size.height + 20;<br />
    




    Merci cbrandt, ça a l'air de marcher nikel ! :-)


    Il y a plus simple:
    [[self window] frame].size.height - [[[self window] contentView] frame].size.height
    

    Ce code te donne la de la différence entre la taille de la fenetre et son contenu, cà d la taille de la barre de titre et de la barre d'outils. Il te suffit d'ajouter cette grandeur à  la taille de la nouvelle vue. Le fait de ne pas avoir de constante fait que ce code est aussi ok pour des palettes par exemple.

    En plus je ne vois pas à  quoi correspond le 20: il me semble que la taille d'une barre de titre est 22...
  • muqaddarmuqaddar Administrateur
    18:58 modifié #26
    Merci.

    Je confirme que c'est bon ! 
  • cbrandtcbrandt Membre
    18:58 modifié #27
    dans 1100178580:


    Il y a plus simple:
    [[self window] frame].size.height - [[[self window] contentView] frame].size.height
    

    Ce code te donne la de la différence entre la taille de la fenetre et son contenu, cà d la taille de la barre de titre et de la barre d'outils. Il te suffit d'ajouter cette grandeur à  la taille de la nouvelle vue. Le fait de ne pas avoir de constante fait que ce code est aussi ok pour des palettes par exemple.

    En plus je ne vois pas à  quoi correspond le 20: il me semble que la taille d'une barre de titre est 22...


    En fait, c'est un vieux bout de code que j'ai utilisé dans un projet, et ce code était basé sur cette page chez apple http://developer.apple.com/documentation/Cocoa/Conceptual/Toolbars/Tasks/ToolbarHeight.html. par contre, je ne sais plus pourquoi j'ai mis cette constante de 20...  ???
  • muqaddarmuqaddar Administrateur
    18:58 modifié #28
    Bein effectivement, la barre de titre a l'air de faire 22 ;)
  • nucleusnucleus Membre
    18:58 modifié #29
    As-tu regardé UKPrefsPanel  dispo sur http://www.zathras.de/programming/sourcecode.htm ?

    Ca ressemble à  ce que tu essaye de faire non?

    Ca utilise une NSTabView..  :sors:
  • muqaddarmuqaddar Administrateur
    18:58 modifié #30
    C'est bon, j'y suis arrivé avec les views. :-)
    merci
Connectez-vous ou Inscrivez-vous pour répondre.