NSSplitView autosaveName ?

mpergandmpergand Membre
00:29 modifié dans API AppKit #1
Comme pour NSTableView ça serait sympa, mais ça ne semble pas exister :-\\
Me gourge-je ???

Réponses

  • Eddy58Eddy58 Membre
    00:29 modifié #2
    Effectivement mpergand, pas de trace d'autosave dans la doc pour les NSSplitView.... :(
    Tu vas devoir faire sans apparamment... ;)
    Mais pour sauvegarder quels paramètres au juste ?
  • 00:29 modifié #3
    La position du séparateur pardi! ;)
  • mpergandmpergand Membre
    00:29 modifié #4
    Et je ne vois non plus de méthode pour fixer cette position ???

    Bon, j'ai bricolé un bout de code pour un splitView contenant deux tables:
    <br />NSArray a=splitView.subviews();<br />NSView v=(NSView)a.objectAtIndex(0);<br />NSMutableRect r=new NSMutableRect(v.frame());<br />r.setWidth(tableView1.frame().width());<br />v.setFrame(r);<br /><br />tableView1.sizeToFit();  // les colonnes ne sont plus ajustés !<br />tableView2.sizeToFit();<br />//splitView.adjustSubviews();  // pas sûr que ça serve<br />
    


    Ca marche pour une plage très restrainte autour du centre du splitView, si le séparareur est trop près des bords, c'est sans effet ???
  • BruBru Membre
    00:29 modifié #5
    Une NSSplitView, c'est 2 NSViews incluses dans une NSView spéciale (la splitview).

    Cette dernière possède un mécanisme qui permet de gérer le redimensionnement et le repositionnement de ces NSViews à  la volée (grâce à  la barre de séparation) les unes par rapport aux autres.

    Donc, pour mémoriser la position de la barre, c'est de mémoriser les frames (position X et Y, taille Width et Height) des 2 views incluses.

    De même pour restaurer une position de barre, c'est de rétablir les 2 frames sauvegardées sur les 2 NSViews, suivi d'un setNeedsDisplay sur la splitview.

    Du moins, c'est comme ça que je procéderai à  première vue. Mais je n'ai pas testé.

    .
  • cbrandtcbrandt Membre
    00:29 modifié #6
    et hop ! un petit bout de code extrait d'un de mes projets:

    <br />	NSRect  frame;<br />	NSSplitView *bigSplitView;<br />	...<br />	frame = [[[bigSplitView subviews] objectAtIndex: 0] frame];<br />	frame.size.width = CBPrefsPreviewSize ();<br />	NSLog (@&quot;MainController: awakeFromNib:  width = %f&quot;, frame.size.width);<br />	[[[bigSplitView subviews] objectAtIndex: 0] setFrame: frame];<br />	[bigSplitView adjustSubviews];<br />
    


    CBPrefsPreviewSize () est juste une fonction qui renvoie la taille stockée dans les préférences ou une taille par défaut...
    dans mon exemple, je ne m'intéresse ici qu'à  la largeur, la hauteur dépend de la taille de la fenêtre.
  • mpergandmpergand Membre
    00:29 modifié #7
    Ok, merci, on va bricoler alors :)
  • 00:29 modifié #8
    voila un bout de code que j ai créer pour mon appli et qui gère bien ca.
    #import <Foundation/Foundation.h>
    #import <AppKit/AppKit.h>
    #import "SplitViewCategory.h"

    @implementation NSSplitView (SplitViewCategory)

    - (float)heightFraction
    {
        NSRect topFrame, bottomFrame;
    float result;
    if ([[self subviews] count] < 2)
    return 0.0;
    topFrame = [[[self subviews] objectAtIndex:0] frame];
    bottomFrame = [[[self subviews] objectAtIndex:1] frame];
    result=bottomFrame.size.height/ (bottomFrame.size.height + topFrame.size.height);
    return result;
    }

    - (void)setHeightFraction:(float)newFract
    {
        NSRect topFrame, bottomFrame;
        NSView *topSubView;
        NSView *bottomSubView;
        float  totalHeight;

        if ([[self subviews] count] < 2)
    return;

        topSubView = [[self subviews] objectAtIndex:0];
        bottomSubView = [[self subviews] objectAtIndex:1];
        topFrame = [topSubView frame];
        bottomFrame = [bottomSubView frame];
    totalHeight = bottomFrame.size.height + topFrame.size.height;
    bottomFrame.size.height = newFract * totalHeight;
    topFrame.size.height = totalHeight - bottomFrame.size.height;
    [topSubView setFrame:topFrame];
        [bottomSubView setFrame:bottomFrame];
        [self adjustSubviews];
        [self setNeedsDisplay: YES];
    }

    - (float)widthFraction
    {
        NSRect leftFrame, rightFrame;
    float result;
    if ([[self subviews] count] < 2)
    return 0.0;
    leftFrame = [[[self subviews] objectAtIndex:0] frame];
    rightFrame = [[[self subviews] objectAtIndex:1] frame];
    result=rightFrame.size.width/ (rightFrame.size.width + leftFrame.size.width);
    return result;
    }

    - (void)setWidthFraction:(float)newFract
    {
        NSRect leftFrame, rightFrame;
        NSView *leftSubView;
        NSView *rightSubView;
        float  totalWidth;

        if ([[self subviews] count] < 2)
    return;

        leftSubView = [[self subviews] objectAtIndex:0];
        rightSubView = [[self subviews] objectAtIndex:1];
        leftFrame = [leftSubView frame];
        rightFrame = [rightSubView frame];
    totalWidth = rightFrame.size.width + leftFrame.size.width;
    rightFrame.size.width = newFract * totalWidth;
    leftFrame.size.width = totalWidth - rightFrame.size.width;
    [leftSubView setFrame:leftFrame];
        [rightSubView setFrame:rightFrame];
        [self adjustSubviews];
        [self setNeedsDisplay: YES];
    }
Connectez-vous ou Inscrivez-vous pour répondre.