Archivo para la BlackPoint categoría

Proyecto BlackPoint Liberado!

Publicado en BlackPoint, Blend, WPF el Noviembre 15, 2008 por blackout360

Por fin luego de algún tiempo he publicado todo el proyecto BlackPoint (Código fuente), comento que no se trata de una aplicación lista para usuarios finales, está orientada a personas que deseen revisar un poco temas de patrones de diseño y Windows Presentation Foundation. Espero lo encuentren interesante, hay algunas cosas que faltaría de agregarle a la aplicación pero en el punto en el que se encuentra es bastante completa y ayuda a mostrar distintas técnicas con WPF.

Pueden descargar el proyecto completo desde aquí:

BlackPoint2008.zip

Mas RAM !!!!

Publicado en Apple, BlackPoint el Noviembre 12, 2008 por blackout360

Imagen 2Hoy le hice un pequeño “overhaulin” a mi iMac, le subí la RAM a 3GB (antes tenía 1GB), quedó una bala, se nota de forma clara el aumento en velocidad de  la máquina virtual de WinXP y activando Unity.

Por cierto espero ya la siguiente semana publicar finalmente el código de BlackPoint

Usando Databinding y ValueConverter

Publicado en BlackPoint, Blend, Tutorial, WPF el Septiembre 14, 2008 por blackout360

En una de las tareas en el desarrollo de BlackPoint relacionada con enlace de datos tuve que escribir un ValueConverter personalizado para analizar una cadena de texto y en función del contenido retornar si un control debería o no ser visible. En la práctica este es el escenario:

Tengo un textblock que va a mostrar el título de una diapositiva, este textblock está enlazado (databinding) a la propiedad Name de un objeto. El contexto de los datos es una lista de valores, de tal forma que cada vez que seleccione un ítem distinto, el texto se actualiza. Este es el código XAML normalmente usado para databinding (generado por Blend):

 

<TextBlock Text=”{Binding Path=Name, Mode=Default}”  DataContext=”{Binding Path=Parts, Mode=Default}” />

 

Revisando el atributo Text, podemos observar que está enlazado a la propiedad Name de un objeto llamada Parts, este objeto Parts es del tipo List<Parts>. En un ListBox tengo listados todos los Parts, de tal forma que al seleccionar uno, se actualiza automáticamente el texto del TextBlock. El problema con este código es que cuando un Part no tenga un nombre (es decir Name == “”) el comportamiento del binding hace que muestre el nombre último ítem seleccionado que sí tenía un nombre, la verdad no se por qué funciona de esta forma o cómo es el manejo de las cadena vacías en este caso. Este era un buen escenario para usar un ValueConverter.

Un ValueConverter permite transformar un valor a otro, antes de que se realice el binding con el control. Por ejemplo, puedo crear un ValueConverter y usarlo para analizar la propiedad Name, si es vacía que ponga otro texto y sea ese el que se muestre en el TextBlock.

Crear un ValueConverter es sencillo, simplemente creamos una clase que implemente la interfaz IValueConverter:

public class TextConverter : IValueConverter
    {
        const string DEFAULT_TEXT = “…”;
        #region IValueConverter Members

        public object Convert(object value, Type targetType, object parameter, System.Globalization.CultureInfo culture)
        {
            if (value != null)
            {
                String text = value.ToString();

                if (!String.IsNullOrEmpty(text))
                    return text;
                return DEFAULT_TEXT;
            }

            return DEFAULT_TEXT;
        }

        public object ConvertBack(object value, Type targetType, object parameter, System.Globalization.CultureInfo culture)
        {
            return value.ToString();
        }

        #endregion
    }

Como se ve en el código anterior, si la propiedad es nula o vacía,se devuelve la cadena “…”, caso contrario se devuelve la misma propiedad.

El binding para usar el TextConverter se puede realizar desde Blend, sin tener que escribir XAML, si desean hacerlo desde Blend sigan estos pasos:

  1. Seleccionen el TextBlock.
  2. Busquen la propiedad Text y seleccionen DataBinding
  3. En la parte inferior de la ventana de enlace de datos, seleccionen ValueConverter.
  4. De la ventana “Add Value Converter” seleccionen el TextConverter y presionen OK, Blend busca y presenta automáticamente las objetos del CLR que implementan la interfaz IValueConverter.

ValueConverter

De esa forma se realiza el databinding aplicando algún ValueConverter.

BONUS: Le dejo un captura de pantalla de BlackPoint:

BlackPoint08

BlackPoint – Framework

Publicado en BlackPoint, Patrones de Diseño el Septiembre 4, 2008 por blackout360

BlackPoint Framework es un componente que permite desarrollar los adaptadores de contenido (módulos encargados de extraer la información de los archivos), los repositorios (módulos para persistir los datos de la aplicación), y para implementar la aplicación cliente de BlackPoint.

Precisamente este framework es el que estoy usando para desarrollador el adaptador para PowerPoint 2007, el repositorio en archivos XML y la aplicación cliente en Windows Presentation Foundation. Básicamente este framework provee:

  • Las interfaces con las que se deben programar para BlackPoint y los objetos que se pasan entre los distintos componentes de la aplicación.
  • Métodos de extensión para facilitar tareas de convertir objetos a XML y viceversa.
  • Implementaciones básicas de las interfaces para contenido.
  • Eventos para notificar al cliente sobre sucesos de los adaptadores.
  • Otros miembros de que ayudan en la implementación de los componentes.

El siguiente es un diagrama de clases del framework de BlackPoint:

BlackPoint.Framework

  • IOpenXmlPart: Representa una parte del contenido de un archivo, por ejemplo cada una de las diapositivas de una presentación se representan como una parte.
  • IOpenXmlContent:Representa un contenido en particular, por ejemplo todo una presentación en PowerPoint 2007.
  • FrameworkOpenXmlContent y FrameworkOpenXmlPart: Implementaciones concretas de las interfaces IOpenXmlContent e IOpenXmlPart, estas implementaciones se ofrecen en el framework para evitar que los desarrolladores tengan que hacerlo en sus propios adaptadores, si lo desean pueden crear también sus propias implementaciones.
  • ILibraryRepository: Cualquier repositorio de datos que se desee usar para BlackPoint debe implementar esta interfaz.Un repositorio se encarga de almacenar los datos de los contenidos, puede ser en archivos XML, bases de datos, etc.
  • IOpenXmlAdapter: Los adaptadores son los encargados de leer el contenido de los archivos y extraer sus datos, la información es cargada dentro de un objeto que implemente la interfaz IOpenXmlContent. Por ejemplo el adaptador de PowerPoint 2007 lee un paquete con extensión “.pptx” y extrae la información de Título, Autor, Descripción, Palabras claves, diapositivas y una vista previa de cada una.
  • IFileType: Permite identificar los archivos soportados por cada adaptador. Por ejemplo el adaptador para PowerPoint 2007 se usa para archivos con extensión “.pptx”.
  • ContentImportedDelegate y ContentEventArgs: Evento personalizado para notificar cuando a los subsciptores cuando un adaptador ha terminado de importar un contenido, se pasa como argumento el contenido importado.
  • Utils.GetImageStream: Lee una imagen de una Uri y la convierte a un mapa de bits en memoria.
  • Extension ToOpenXmlContent: Convierte un objeto XmlNode a IOpenXmlContent.
  • Extension ToXmlElement: Convierte un objeto IOpenXmlContent a un objeto XmlElement.
  • BlackPointSettings: Provee configuraciones generales del framework, como los nombres de los elementos para archivos XML.

Como se podrán dar cuenta, un principio básico que intento seguir es el de programar contra interfaces y no contra objetos en concreto, de esta forma se facilita la extensión del código y el soporte para nuevos módulos personalizados o especializados.

En entradas futuras publicaré mas diagramas de clases usados en BlackPoint. Como ven se han realizados algunos cambios desde la primera versión de este diagrama.

Noticias BlackPoint

Publicado en Aplicaciones, BlackPoint, Blend, WPF el Agosto 27, 2008 por blackout360

Luego de superar el problema de interoperabilidad con Microsoft PowerPoint 2007 logré avanzar con el proyecto, básicamente se debía a algún tipo de conflicto con Windows Vista, posiblemente el UAC o alguna otra “característica” de seguridad, luego de probar agregar un manifiesto para elevar los privilegios de la aplicación sin ningún resultado, finalmente regresé a XP y todo volvió a funcionar bien. Adjunto algunas capturas de pantallas del proceso de desarrollo de la aplicación, creo que va bastante interesante por el tema visual y por algunos patrones de diseño que se están siguiendo, en futuras entradas hablaré de ellas, por ahora les dejo las imágenes:

BlackPoint_Blend_MainWindow
Diseñando en Blend 2 la ventana principal.
BlackPoint_Blend_Layout01
Trabajando en la disposición de controles  de la ventana de propiedades.
BlackPoint_VS_ExtensionMethods
Código en VS2008, desarrollando los métodos de extensión.
BlackPoint_VS_Project
Organización de los proyectos en VS2008.

 

BlackPoint 2008 – Avanzado !!

Publicado en Aplicaciones, BlackPoint, Blend, Errores, Patrones de Diseño, Tutorial, WPF el Agosto 25, 2008 por blackout360

Maldito Qumana!! acaba de borrar todo el contenido de esta entrada, textos, imágenes, enlaces, todo. DIABLOS, voy a tener que escribir todo el post nuevamente… y lo que ya no me acuerdo….. aarrggg…. PRRRT.

Desafíos en el proyecto BlackPoint

Publicado en BlackPoint el Agosto 16, 2008 por blackout360

Hola a todos, como les comenté en entradas anteriores he retomado el proyecto BlackPoint, actualmente estoy con un problema en un módulo para abrir desde C# la aplicación PowerPoint, lo extraño es que uso el mismo código de la primera versión de BlackPoint (el cual funcionaba), la única diferencia es que ahora estoy trabajando en Windows Vista y antes lo hacía en Windows XP, adjunto un captura de pantalla de error, tal vez alguien ya ha enfrentado este inconveniente y me pueda dar luces sobre como resolverlo, o por último me regresaría a Windows XP (otra vez).

ACTUALIZACIÓN: Pensé que el problema podría ser algo relacionado al UAC de Vista, así que agregué un manifiesto para que la aplicación se ejecute bajo el rol de administrador, pero con todo esto el problema persistía. Finalmente decidí regresar a XP y todo volvió a funcionar bien, así que el proyecto sigue.

BlackPoint: Modelo de Clases v1.0

Publicado en Aplicaciones, BlackPoint, Blend, Patrones de Diseño, WPF el Julio 7, 2008 por blackout360

Para conocer sobre el proyecto BlackPoint visiten el post: BlackPoint 2008 vive!

Mi primera tarea para el proyecto BlackPoint es tratar de modelar las clases que intervendrán en la solución, a continuación expongo los primeros modelos que he diagramado, estos modelos se irán puliendo y modificando con el tiempo pero creo que es un buen inicio.

Estos diagramas representan las siguientes funcionalidades:

  1. Un Adaptador recibe la dirección de un archivo en formato Open XML, este se encarga de abrirlo y empezar a leer su contenido, la información del archivo se guarda en un objeto OpenXmlContent (por ejemplo: Nombre del archivo, palabras clave de búsqueda, etc..), los datos de las partes del archivo (por ejemplo: las diapositivas de un archivo Power Point) se guardan en una lista de objetos tipo OpenXmlPart. La idea del adaptador es que trabaje en segundo plano (en otro hilo) y una vez finalizado Notifique al cliente (aplicación WPF) que el trabajo ha terminado y los datos están listos.

  2. La aplicación cliente deberá guardar la información de archivos cargados y su contenido en algún lugar como un archivo XML, texto plano o una base de datos, a esto le llamaremos el Repositorio de datos.

  3. Por ahora no nos preocuparemos de las clases concretas que implementarán cada una de las funcionalidades, nos limitaremos a definir las intefaces que usaremos.

El primer diagrama modela los Adaptadores (color verde), los tipos de archivos soportados (color kaki) los Repositorios  (color fucsia) y las Notificaciones (color celeste). Los elemetos de color amarillo son tipos del .NetFramework.

Adaptadores

  • Descripción: Encargados de abrir un paquete en formato Open XML y extraer su contenido.

  • Patrón  de diseño: Strategic Pattern

Tipos de archivos

  • Descripción: Lista de tipos de archivos que el adaptor puede abrir. Se basa en la extensión del archivo.

Repositorio

  • Descripción: Se encarga de persistir los datos de la aplicación, el objetivo es que se puedan usar distintos repositorios como archivos XML y bases de datos.

  • Patrón de diseño: Strategic Pattern

Notificaciones: Publicador/Subscriptor

  • Descripción: Registra y mantiene notificados a los clientes cuando un adaptor ha completado su trabajo de extraer infromación de un paquete Open XML.

  • Patrón de diseño: Observer Pattern

El segundo diagrama presenta dos conceptos: El primero (colo verde) se encarga de iniciar el respectivo Adaptor Open XML, usa Factory Pattern para encapsular la creación/ejecución de un Adaptor.  El segundo usa Singletone Pattern para devolver una única instancia de un repositorio de datos que será usado a lo largo de toda la aplicación.

Blackpoint 2008 vive!

Publicado en Aplicaciones, BlackPoint, Blend, WPF el Julio 6, 2008 por blackout360

Hola a todos, hace ya algún tiempo estaba trabajando en un aplicación en WPF  para poder abrir y ver archivos de PowerPoint 2007, el código base de la aplicación estaba listo pero nunca llegué a publicarla, estas son dos capturas de cómo se veía la aplicación:

 BlackPoint es una aplicación que esta en proceso de desarrollo que permitirá inicialmente leer archivos de Power Point 2007 (.pptx) y generar una vista previa de su contenido, para esto usará de base el SDK de Open XML.

Pero por cuestiones de trabajo en aquel tiempo no pude continuar trabajando en la misma, gracias a un par de comentarios que mostraron curiosidad en la misma (gracias JuamM_L y JB) he decidido terminar esta aplicación y publicar también el código fuente. Creo que a todos los servirá.

También respondiendo a un par de preguntas que me habian hecho:

  • P: JuanM_L dijo:
         bastante buena, me gusto mucho.. te felicito, como lograste ese efecto brillante en tu aplicacion, las que yo hago no me quedan asi????

  • R: Usé algunos efectos, para los títulos OuterGlow y para las imágenes centrales un VisualBrush basado en la imagen que se muestra

  • P: JB dijo:
        ¿Donde la vas a publicar?

  • R: Próximamente aquí.

Los mantednré informados en este Post sobre los avances.  Inicio hoy mismo !