Unified anstatt Metal NSDrawer

  • Unified anstatt Metal NSDrawer

    Sowas hab ich ja noch ueberhaupt noch nicht gesehen.
    Wenn ich an ein Metal L&F NSWindow einen NSDrawer dran haenge, dann ist der komplett im Unified Look.
    Kann mir das jemand erklaeren?
    Wie mache ich es, dass der im Metal Look und nicht Unified Look ist?

    Kann es damit zusammen haengen, dass ich das Fenster nachtraeglich mit der _setTextured...: auf Metal Look umgestellt habe und nicht direkt beim -init...: des Fensters den Metal Look eingestellt habe?
    Hat da jemand Erfahrung?

    Manfred
  • RE: Unified anstatt Metal NSDrawer

    direkt damit nicht ... aber ich hab festgestellt das cocoa es nciht so richtig mag derartige dinge dynamisch zu erstellen oder zu modifizieren ... cocoa liebt irgendwie den IB ...

    vermutlich muß irgendwo eine option in einer ererbten klasse noch gesetzt werden?
    vllt in NSPanel von der das drawer ererbt wird?

    ging mir mit meinen Tableviews des öfteren so - in den ich Zellen und Spalten zur laufzeit erzeuge...
    snafu
    :() { :|: &};:
    sometimes i dream in hex
    Obey gravity! Because its a law!
  • RE: Unified anstatt Metal NSDrawer

    Maja, der NIB-Loader macht es ja auch dynamisch. ;)

    Die Schubladen sind ganz normale Fenster mit dem Unterschied, dass sie dem Hauptfenster folgen. Ich halte es daher für naheliegend, dass die Änderung des Looks am Hauptfenster nicht "automatisch" an das Schubladenfenster weitergereicht wird. Schon deshalb, weil es dann jemanden gibt, der sich beschwert, dass er das nicht unabhängig einstellen kann.

    Kanst du das denn nicht drekt bei der Schublade setzen?
    Es hat noch nie etwas gefunzt. To tear down the Wall would be a Werror!
    25.06.2016: [Swift] gehört zu meinen *Favorite Tags* auf SO. In welcher Bedeutung von "favorite"?
  • Original von MCDan
    Original von asrael
    Danke ihr beiden.
    Aber wo kann ich das denn bei einem NSDrawer einstellen. Der erbt doch nur von NSResponder, nicht von NSPanel oder NSWindow?


    Hm, stimmt. Eine offizielle Methode um an das Fenster zu kommen gibt es nicht. Was liefert denn ein [objektImDrawer window] zurück? ;)

    Was meinst Du mit objektImDrawer?
    An das Fenster, wo der Drawer dranhaengt komm ich schon wieder dran, von Drawer aus, klar.

    Manfred
  • Original von asrael
    Original von MCDan
    Original von asrael
    Danke ihr beiden.
    Aber wo kann ich das denn bei einem NSDrawer einstellen. Der erbt doch nur von NSResponder, nicht von NSPanel oder NSWindow?


    Hm, stimmt. Eine offizielle Methode um an das Fenster zu kommen gibt es nicht. Was liefert denn ein [objektImDrawer window] zurück? ;)

    Was meinst Du mit objektImDrawer?

    Du hast doch bestimmt Views/Controls wie z.B. NSView, NSTextField oder sonstiges im Drawer. Also frage doch einfach mal eines dieser Views/Controls mit [meinViewImDrawer window] nach dem Window in dem sich der View befindet.

    Ich habe es noch nicht probiert, aber es sollte eigentlich das Window des Drawers sein.
  • Original von MCDan
    Original von asrael
    Was meinst Du mit objektImDrawer?

    Du hast doch bestimmt Views/Controls wie z.B. NSView, NSTextField oder sonstiges im Drawer. Also frage doch einfach mal eines dieser Views/Controls mit [meinViewImDrawer window] nach dem Window in dem sich der View befindet.

    Ich habe es noch nicht probiert, aber es sollte eigentlich das Window des Drawers sein.

    Ahh, jetzt versteh ich. Du meinst, dass der Drawer schon <irgendwo> ein "Fenster" hat. Auf das man nur nicht direkten Zugriff hat bzw. ueber einen View, der im Drawer liegt.
    Guet Idee, muss ich probieren...

    Manfred
  • *Huch* das ist mir noch gar nicht aufgefallen, dass es dort keine entsprechende Methode gibt. Dann sollte man allerdings erwarten, dass sich das Parent darum kümmert.

    Irgendwie muss es gehen, der IB bekommt es ja auch hin.

    Also, mal grundsätzlich:
    Jeder Drawer hat ein parentWindow, den du ja mit setParentWindow:(NSDrawer) bestimmst. Um an den Drawer selbst zu kommen (meist benötige ich nur Views im Drawer), kannst du dir ein Outlet darauf setzen. Wenn du ihn selbst erzeugst, hast du ja ohnehin einen Zeiger darauf.

    Wie setzt du denn den Metal-Look bei dem Fenster? Hängt dfa schon der Drawer dran? Nur dann kann ja das Window weitergeben ...

    Hmm, das hat mich dann doch interessiert und ich habe es nachgeschaut. Da findet sich folgender Hinweis:
    "A drawer automatically inherits the brushed metal appearance if its parent window is brushed metal."

    Ich mutmaße, dass es an der Reihenfolge liegt, in der du Look setzt und Draweer hinzufügst.

    BTW: Was zum Lachen:
    You can use a brushed metal window if your application:
    * Is a single-window application that provides a source list to navigate information -- for example, iTunes or the Finder.,"

    Aha, single-window application, aha, iTunes or Finder, aha.

    Man lernt in der Apple-Doku ja nie aus!
    Es hat noch nie etwas gefunzt. To tear down the Wall would be a Werror!
    25.06.2016: [Swift] gehört zu meinen *Favorite Tags* auf SO. In welcher Bedeutung von "favorite"?
  • Original von Tom9811
    *Huch* das ist mir noch gar nicht aufgefallen, dass es dort keine entsprechende Methode gibt. Dann sollte man allerdings erwarten, dass sich das Parent darum kümmert.

    Irgendwie muss es gehen, der IB bekommt es ja auch hin.

    Also, mal grundsätzlich:
    Jeder Drawer hat ein parentWindow, den du ja mit setParentWindow:(NSDrawer) bestimmst. Um an den Drawer selbst zu kommen (meist benötige ich nur Views im Drawer), kannst du dir ein Outlet darauf setzen. Wenn du ihn selbst erzeugst, hast du ja ohnehin einen Zeiger darauf.

    Genau.

    Original von Tom9811
    Wie setzt du denn den Metal-Look bei dem Fenster? Hängt dfa schon der Drawer dran? Nur dann kann ja das Window weitergeben ...

    Den Metal Look in dem Fenster setze ich mit _setTexturedBackground:. Wenn der Drawer schon dranhaengt beim setzen, aendert sich am Drawer garnix. Wenn ich den Drawer nachher an das Fenster dranhaenge, wenn das Fenster schon auf Metal eingestellt ist, bekommt der Drawer den Unified look.

    Manfred
  • Uiuiuiuiuiuii, das sieht richtig nach einem Bug aus.

    Das "_" gehört wirklich zu dem Methodennamen? Undokumentierte Methode?

    Ich forsche mal weiter. Das interessiert mich.

    +++ Update +++
    Hast du es mal mit der NSTExturedBackgroundMask als styleMask versucht? Scheint mir der offizielle Weg zu sein.
    Es hat noch nie etwas gefunzt. To tear down the Wall would be a Werror!
    25.06.2016: [Swift] gehört zu meinen *Favorite Tags* auf SO. In welcher Bedeutung von "favorite"?
  • Original von asrael
    Den Metal Look in dem Fenster setze ich mit _setTexturedBackground:. Wenn der Drawer schon dranhaengt beim setzen, aendert sich am Drawer garnix. Wenn ich den Drawer nachher an das Fenster dranhaenge, wenn das Fenster schon auf Metal eingestellt ist, bekommt der Drawer den Unified look.

    Wobei ich noch dazu sagen muss, dass der Unified look an dem Drawer sehr ungewoehnlich aussieht und IMHO keinefalls richtig sein kann.

    Manfred
  • Original von Tom9811
    Uiuiuiuiuiuii, das sieht richtig nach einem Bug aus.

    Das "_" gehört wirklich zu dem Methodennamen? Undokumentierte Methode?

    Ja, das ist eine undokumentiert Methode. IMHO aber die einige Moeglichkeit ein Fenster nachtraeglich in den Metal Look zu versetzen. Daran koennte es natuerlich auch liegen.
    Wenn ich die Methode auf ein NSPanel anwende bekommt es auch den Unified look anstatt den Metal look. Das Panel wird wirklich nur Metal, wenn ich es auch entsprechend beim -init...: so einstelle.

    Manfred
  • Original von Tom9811
    Hast du es mal mit der NSTExturedBackgroundMask als styleMask versucht? Scheint mir der offizielle Weg zu sein.

    Ja, das hatte ich probiert bzw. geht der Weg IMHO nur, wenn man das Fenster selbst erzeugt, da man die Mask nur bei einer -init...: Methode mitgeben kann.

    Manfred

    Update:
    Hab grad nachgesehen, es gibt nur eine -styleMask: Methode, aber keine setStyleMask:
  • Ah, du darfst gar nicht den style im laufendem Window verändern:
    "styleMask
    [...] Once set, it can't be changed"

    Du musst also mutmaßlich dein Window gleich mit der richtigen Maske initialisieren. Dann müsst der drangehängte Drawer es auch erben. Probiert?
    Es hat noch nie etwas gefunzt. To tear down the Wall would be a Werror!
    25.06.2016: [Swift] gehört zu meinen *Favorite Tags* auf SO. In welcher Bedeutung von "favorite"?
  • Original von Tom9811
    Ah, du darfst gar nicht den style im laufendem Window verändern:
    "styleMask
    [...] Once set, it can't be changed"

    Du musst also mutmaßlich dein Window gleich mit der richtigen Maske initialisieren. Dann müsst der drangehängte Drawer es auch erben. Probiert?

    Hmm, das ist natuerlich eine Moeglichkeit, die wahrscheinlich sogar richtig funtioniert. Nur wollte ich bis jetzt ungerne mein Hauptfenster programatikalisch erstellen anstatt im IB. Aber wenn das der einige Weg ist, wie das richtig funtioniert, muss ich das wohl machen...

    Thx.

    Manfred
  • Original von Tom9811
    Jo, so wird es sein.

    BTW: Wieso willst du das nachträglich ändern? Das finde ich von der GUI her sehr neu.

    Naja, ich wollte im Betrieb alle Fenster umstellen ohne neu starten zu muessen. Aber das geht wohl nicht richtig. Aber auf der anderen Seite machen mir undokumentierte Methoden zu benutzen auch irgendwie leichte Bauchschmerzen. ;)
    Ok, ueberredet, ich machs offiziell. Das Fenster ist ja schnell erstellt. Den Inhalt haeng ich halt in einen View und setz den am Fenster als contentView, schon erledigt.

    Manfred
  • Jo, so dürfte es gehen. Neues Fenster über das alte legen und das alte verschwinden lassen.

    Bei dieser ganzen brushed/unified/classic Diskussion finde ich persönlich, dass es kene Lösung ist, es dem User zu überlassen. Der bezahlt dich ja dafür, dass du dir Gedanken machst. Sonst könntest du ihm ja gleich Xcode liefern. ;)

    Neee, mal ehrlich. Man kann dazu ja viele Meinungen haben. Aber umstellenfinde ich ne Kleckerlösung alla Linux oder Windows. SEI EIN MANN! ENTSCHEIDE SELBST! ;)
    Es hat noch nie etwas gefunzt. To tear down the Wall would be a Werror!
    25.06.2016: [Swift] gehört zu meinen *Favorite Tags* auf SO. In welcher Bedeutung von "favorite"?