Domanda

Utilizzando il framework Apple OS X Cocoa, come posso pubblicare un file foglio (finestra di dialogo modale a scorrimento verso il basso) nella finestra di un altro processo?

Modificare: Chiarito un po':

La mia applicazione è un'estensione del Finder per eseguire il controllo della versione di Subversion (http://scplugin.tigris.org/).Parte della mia applicazione è un plug-in (una voce di menu contestuale per Finder);la maggior parte della mia applicazione, tuttavia, si trova in un processo demone separato.Per diverse ragioni, abbiamo scelto di inserire praticamente tutto il codice nel demone;il plug-in definisce solo il menu stesso e Apple-Events oltre al demone.

A volte, il demone deve richiedere all'utente ulteriori informazioni.Può aprire una finestra sullo schermo per questo, ma questo è dirompente (posizionato in modo casuale), e mi sembra che il flusso di lavoro qui sia legittimamente modale, ad esempio "seleziona un file, scegli 'commit' dal menu, fornisci commenti di commit , eseguire l'operazione."

La cooperazione tra processi (come il passaggio di un riferimento di qualche tipo) è accettabile:entrambi i processi sono miei, ma voglio evitare di vincolare il codice del foglio al processo primario.

È stato utile?

Soluzione

In realtà, sembra che tu stia cercando di far sì che la comunicazione tra processi avvenga a livello di vista, il che non è proprio il modo in cui generalmente funziona Cocoa.Le cose saranno molto più semplici se separerai i tuoi livelli un po' di più.

Perché non vuoi inserire il codice del foglio nell'altro processo?Si tratta di codice di visualizzazione e il codice di visualizzazione è intrinsecamente specifico del processo.La cosa giusta da fare qui è probabilmente aggiungere un supporto un po' generico per i fogli modali al codice del plugin e una chiamata IPC che il demone può effettuare per richiamare quel codice.Cercare di inviare oggetti di visualizzazione al processo remoto sarà un incubo se riesci a farlo funzionare.

Stai combattendo i framework con questo approccio.

Altri suggerimenti

Non puoi aggiungere un foglio a una finestra in un altro processo, perché hai al massimo solo l'accesso più limitato alle finestre nell'altro processo.

Per favore, non farlo.Se possibile, rendere l'interazione non modale.Soprattutto in qualcosa come un commit, è molto più bello poter sfogliare i tuoi file mentre scrivi commenti di commit.

OS X ha gruppi di finestre, ma non penso che possano (facilmente) estendere le applicazioni.

Un'altra cosa da considerare è che in OS X è possibile avere molte finestre del Finder aperte nella stessa cartella (a differenza di OS 9).Anche se tu fatto avere privilegi/API sufficienti per aggiungere un foglio a una finestra del Finder, non è che la modalità di quella finestra impedisca all'utente di continuare a lavorare con i file.

(La mia opinione personale come utente Mac di lunga data è che questo tipo di interazione mi farebbe impazzire.)

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top