INSTALL.CMD
, nella cartella di installazione di &xwp;.
Le sostituzioni di classi pi— importanti che &xwp; effettua sono:
Nel senso descritto nella pagina precedente, la classe XFolder Š una "derivazione" della classe WPFolder. Perci• ha tutte le funzionalit… che hanno le normali cartelle, cui aggiunge le nuove voci di menu contestuali, i tasti rapidi cartella, la possibilit… di modificare i titoli delle finestre ecc.
Grazie al polimorfismo XFolder ridefinisce alcuni dei metodi di WPFolder, come descritto pi— avanti.
Tuttavia XFolder si registra nella WPS come classe sostitutiva di WPFolder, il che significa che la WPS come normale classe per le cartelle utilizza la classe XFolder invece di quella WPFolder. Quindi la classe WPFolder non viene pi— utilizzata direttamente, ma solo attraverso la sua classe sostitutiva (e "discendente"), XFolder.
Elenco qui alcuni dei metodi WPFolder superati da quelli della classe XFolder (per la curiosit… degli sviluppatori):
wpModifyPopupMenu
: questo metodo WPObject viene richiamato
dalla WPS subito prima di visualizzare il menu contestuale di un oggetto. Tutte le classi WPS
aggiungono le proprie eventuali voci di menu specifiche in questo modo.
Dato che XFolder lavora molto sui menu, questo Š uno dei metodi pi— importanti tra quelli
rimpiazzati da XFolder. Il metodo sostitutivo di XFolder per prima cosa richiama
wpModifyPopupMenu
, appartenente alla classe "genitore" (WPFolder), per
inserire nel menu contestuale dell'oggetto le voci di menu standard.
Dopodich‚ ricerca la cartella di configurazione di XFolder (identificabile tramite l'ID oggetto
<XFOLDER_CONFIG>
) e la popola, lasciandola per• invisibile.
Quindi passa in rassegna gli oggetti in essa contenuti ed in base ad essi aggiunge al menu
contestuale voci e sottomenu aggiuntivi.
Se la cartella di configurazione non si trova, viene visualizzato un messaggio di errore e viene
ricreata sulla Scrivania una cartella vuota con la giusta ID.
Le stesse operazioni valgono per le funzioni "Contenuto cartella" e per le cartelle "favorite".
Questi sottomenu per• vengono riempiti di oggetti solo dopo che l'utente li ha aperti, intercettando
il messaggio WM_INITMENU
nella procedura della cornice finestra surclassata (vedi
sotto). XFolder inoltre surclassa le finestre di questi due sottomenu (e solo di questi) per poter
disegnare le icone e per intercettare la richiesta di apertura cartella con il tasto destro 2 del mouse.
(Nota bene: "surclassare" ("subclassing") qui non ha niente a che vedere con le classi WPS, ma Š
la terminologia Presentation Manager con cui si intende l'utilizzo di una diversa procedura messaggi
per una finestra esistente al fine di intercettare alcuni dei messaggi PM per quella finestra, attraverso
l'uso dell'API WinSubclassWindow
).
In questa maniera XFolder modifica anche vari altri menu (ad es. il sottomenu "Ordinare") ed
aggiunge altre voci di menu, secondo quanto scelto con le Impostazioni globali.
wpMenuItemSelected
: viene chiamato dalla WPS ogni volta che
l'utente seleziona una voce in un menu contestuale.
XFolder controlla se si Š selezionata una delle sue voci di menu
(variabili), nel qual caso cerca l'oggetto corrispondente nella sua cartella di
configurazione e lo apre. Se l'oggetto appartiene alla classe WPProgram,
&xwp; applica gli accorgimenti relativi (si veda il menu contestuale della
Cartella di configurazione di &xwp; per i dettagli). Se invece l'oggetto Š un
modello, non importa di quale classe WPS, esso non viene aperto, ma ne viene
creata una copia nella cartella corrente (usando
wpCreateFromTemplate
).
Se la voce selezionata appartiene al sottomenu "contenuto cartella", viene aperto l'oggetto corrispondente alla selezione.
Se Š stata selezionata una delle altre voci di menu che XFolder aggiunge ai menu contestuali, XFolder provvede internamente ad eseguire l'azione relativa.
Se il menu selezionato non Š uno di quelli di XFolder, viene richiamato il metodo
wpMenuItemSelected
della classe "genitore" ((WPFolder); in questo modo le voci di
menu standard possono continuare a funzionare normalmente.
wpMenuItemHelpSelected
: viene richiamato dalla WPS
quando si preme F1
sulla voce di un menu contestuale. XFolder visualizza la pagina
di aiuto relativa, se prevista.
wpFilterPopupMenu
: con questo metodo XFolder elimina le voci
di menu standard che l'utente, agendo sulle Impostazioni globali, ha scelto di non visualizzare pi—
(questo metodo Š richiamato dalla WPS prima di wpModifyPopupMenu, per cui prima si rimuovono
le voci non richieste, poi si aggiungono le nuove).
wpclsQueryTitle
:
La stringa XFolder
(o quello che altrimenti si Š specificato nelle Impostazioni globali)
Š il valore che viene restituito, in modo da dare alla classe XFolder un nome univoco.
wpOpen
: la WPs utilizza questa routine ogni volta che
una cartella (o un qualunque altro oggetto) viene aperto.
XFolder va a sostituire questo metodo per implementare diverse nuove funzionalit….
Per prima cosa viene richiamato il metodo "genitore", al fine di avviare la visualizzazione della cartella: la WPS crea e visualizza una cartella con controllo contenitore.
Quindi XFolder intercetta lo "handle" della finestra cornice, il che gli permette di modificare
il titolo finestra della cartella indicandone il percorso completo (se si Š attivata questa funzione
dalle impostazioni globali). Si tratta in sostanza di una semplice chiamata WinSetWindowText
,
con solo qualche controllo per verificare se il nuovo titolo della finestra deve essere accorciato.
In questo metodo XFolder inoltre surclassa la finestra cornice della cartella per poter gestire direttamente i messaggi WM_CHAR per i tasti rapidi e numerose altre cose. Mi Š sembrato questo, per inciso, il punto migliore per effettuare il "subclassing": tutte le procedure di inizializzazione WPS sono state completate attraverso la chiamata del metodo "genitore", ma l'utente non pu• ancora interagire con la cartella dato che essa verr… riempita di oggetti ("popolata", secondo la terminologia WPS) solo da un sottoprocesso successivo.
Nella nuova procedura finestra, XFolder intercetta tutti i messaggi WM_CHAR (che vengono passati alla procedura finestra cornice solo se non sono gi… stati elaborati dal contenitore, come potrebbe essere per i tasti cursore) e li valuta in base alla sua lista interna dei tasti rapidi, modificabile a piacimento dalle impostazioni globali.
Il surclassamento viene utilizzato anche per introdurre le barre di stato delle cartelle; i
messaggi WM_QUERYFRAMECTLCOUNT
, WM_FORMATFRAME
e
WM_CALCFRAMERECT
sono intercettati per ridimensionare la cornice della cartella
e la finestra contenitore al suo interno quanto basta per la nuova barra di stato.
XFolder intercetta anche alcuni dei messaggi di notifica contenitore in modo da permettere la funzione "Scorrimento automatico nella visualizzazione ad albero" ed aggiornare il testo della barra di stato se l'utente seleziona degli oggetti nella cartella.
Oltre a ci• XFolder intercetta molti dei messaggi menu, tra cui WM_INITMENU
e WM_MENUSELECT
, il che gli permette di gestire alcune funzioni menu altrimenti
non accessibili attraverso i metodi WPS regolari.
Tutti i restanti messaggi, privi di significato per XFolder, sono passati alla procedura finestra originale.
Il metodo wpOpen
Š necessario anche per implementare le funzioni di
ordinamento esteso di XFolder; le impostazioni del contenitore vengono aggiornate in base ai
criteri di ordinamento specificati dall'utente.
wpAddSettingsPages
: Š il metodo richiamato
dalla WPS ogni volta che si apre il blocco appunti impostazioni di un oggetto. XFolder rimpiazza
questo metodo per aggiungere le proprie pagine impostazioni, ma solo
dopo aver a suo volta richiamato il metodo genitore; vengono cosŤ inserite anche tutte le
pagine originali.
Neanche XFldObject in apparenza fa molto, al di fuori dell'eliminare le voci di menu standard di &os2; ed aggiungere la funzione "Copiare nome file". Serve tuttavia internamente ad altre parti di XFolder per notificare eventi speciali interni alla WPS, in particolare la funzione &xshutdown;, descritta in dettaglio alla pagina successiva.
La classe XFldDesktop Š implementata per modificare le voci di menu della Scrivania e per la funzione &xshutdown;, descritta in dettaglio alla pagina successiva.
Mentre le versioni precedenti rimpiazzavano anche la classe WPSystem per aggiungere all'oggetto "Sistema" nella cartella "Impostazione del sistema" nuove pagine relative alle impostazioni globali XFolder, a partire dalla versione V0.80 vengono registrate due nuove classi derivate da WPSystem, che non viene pi— sostituito. Le due nuove classi sono XFldSystem e XFldWPS, rispettivamente per gli oggetti "Kernel &os2;" e "Workplace Shell". Le impostazioni specificate dall'utente sono (per la maggior parte) conservate nel file OS2.INI e valutate ogni volta che XFolder ne ha bisogno (quando, per es., si apre un menu contestuale). Le impostazioni XFolder "locali", relative alle singole cartelle, sono invece conservate nell'Attributo Esteso .CLASSINFO, dove la WPS conserva tutte le impostazioni relative a quella data cartella. Tutto ci• Š garantito dalla classe XFolder.
Si tenga ben presente che tutte le classi XFolder sono progettare per interagire tra loro. Non si
cerchi di rimuoverne ALCUNE, altrimenti XFolder inizier… a funzionare in maniera imprevedibile (se siete
fortunati!). Tutte le funzionalit… di XFolder sono estremamente configurabili in modo da poter disattivare
tutto ci• che non si vuole usare, fino ad eliminare completamente XFolder.