Technology Experience

Contenuti gestiti da Igor Damiani
posts - 949, comments - 2741, trackbacks - 15120

My Links

News

  • Questo blog si propone di raccogliere riflessioni, teoriche e pratiche, su tutto quello che riguarda il world-computing che mi sta attorno: programmazione in .NET, software attuale e futuro, notizie provenienti dal web, tecnologia in generale, open-source.

    L'idea è quella di lasciare una sorta di patrimonio personale, una raccolta di idee che un giorno potrebbe farmi sorridere, al pensiero di dov'ero e cosa stavo facendo.

    10/05/2005,
    Milano

Archives

Post Categories

Generale

Un FolderButton per il VivendoByteEmoticons plug-in

L'altra volta avevo accennato all'idea di poter organizzare le emoticons in sotto-folder, contenuti in: C:\Documents and Settings\All Users\Application Data\VivendoByte Emoticons. Notare che la directory non è più per-user. Questo implica il fatto che una volta che il plug-in viene installato, tutti gli utenti condividano lo stesso set di emoticons. Niente di male, direi.

L'altra volta avevo accennato al fatto che i Button che contengono le emoticons sono contenuti all'interno di un WrapPanel. Tale WrapPanel è definito nello XAML della Window ChooseEmoticon.

<WrapPanel Grid.Column="0" Grid.Row="1" Name="MainPanel" ItemHeight="{StaticResource Size}" ItemWidth="{StaticResource Size}"> </WrapPanel>

La classe ChooseEmoticon dispone di un metodo privato populateIcons(), che viene chiamato nel costruttore e successivamente ogni volta che viene cambiata directory. Tale metodo fa quanto segue:

  1. svuota i Children del WrapPanel
  2. eventualmente aggiunge un pulsante per tornare su di una directory
  3. aggiunge tanti FolderButton quanti sono i sotto-folder presenti nella directory corrente
  4. aggiunge tanti Button quanti sono i files .GIF presenti nella directory corrente
  5. aggiorna la proprietà Text del TextBlock per indicare all'utente quante emoticons ci sono

Il punto (2) richiede un breve chiarimento. Non voglio che l'utente navighi al di fuori di C:\Documents and Settings\All Users\Application Data\VivendoByte Emoticons, pertanto il FolderButton che torna su appare solo se ci troviamo in una sua sotto-directory, e non negli altri casi.

Anche il punto (3) richiede un chiarimento. La classe FolderButton infatti non esiste nel FW3.0, ma l'ho creata io attraverso un piccolo blocco di XAML. Lo XAML ovviamente non serve solo a creare Window o Page, ma a creare qualsiasi classe. La classe FolderButton eredita da un normale Button, ma ne specializza l'aspetto: utilizza una risorsa folder.bmp, in modo tale da creare un pulsante che come contenuto ha un'immagine che fa capire che si tratta di una directory. Ecco lo XAML che ho utilizzato per definire la classe FolderButton:

<Button x:Class="VivendoByte.Emoticons.FolderButton" xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"> <Grid> <Grid.ColumnDefinitions><ColumnDefinition></ColumnDefinition></Grid.ColumnDefinitions> <Grid.RowDefinitions><RowDefinition></RowDefinition></Grid.RowDefinitions> <Image Grid.Column="0" Grid.Row="0"> <Image.Source> <BitmapImage UriSource="Images/folder.bmp" /> </Image.Source> </Image> <TextBlock Name="folderName" VerticalAlignment="Center" HorizontalAlignment="Center" Grid.Column="0" Grid.Row="0">..</TextBlock> </Grid> </Button>

Di default la classe FolderButton crea un Button con dentro l'immagine di un folder ed il cui testo è "..". Un FolderButton contiene una Grid con una sola riga ed una sola colonna. L'unica cella contiene sia l'immagine che un oggetto TextBlock, nel cui testo finisce il nome della directory a cui si fa riferimento. Notare che l'immagine viene caricata dalla risorsa /Images/folder.bmp: ovviamente tale file è stato inserito nella soluzione come Resource.

Nel metodo populateIcons di cui parlavo prima, posso scrivere una cosa tipo:

private FrameworkElement getFolderElement(string directoryName) { FolderButton btn = new FolderButton(); btn.ToolTip = directoryName; btn.Tag = directoryName; btn.MouseDoubleClick += new MouseButtonEventHandler(FolderDoubleClicked); return (btn); }

Questo metodo ritorna un'istanza di FrameworkElement: nella fattispecie proprio un FolderButton. Ad ogni istanza associo un tooltip, imposto il tag ed assegno l'handler per l'evento MouseButtonDoubleClick: quando l'utente doppio-clicca su un FolderButton, faccio altre cosine e richiamo la populateIcons() per reimpostare il WrapPanel.

Vorrei sinceramente mettere altro codice, però il fatto di non poter avere scrollbar nei blocchi di codice causa la comparsa di post lunghi un chilometro: preferisco non farlo.

Print | posted on Thursday, February 15, 2007 4:46 PM | Filed Under [ I miei freeware ]

Comments have been closed on this topic.

Powered by:
Powered By Subtext Powered By ASP.NET