Mercurial > projects > dwt-mac
diff dwt/widgets/FontDialog.d @ 37:642f460a0908
Fixed a lot of compile errors, a "hello world" app compiles now
author | Jacob Carlborg <doob@me.com> <jacob.carlborg@gmail.com> |
---|---|
date | Fri, 10 Oct 2008 12:29:48 +0200 |
parents | e831403a80a9 |
children | d8635bb48c7c |
line wrap: on
line diff
--- a/dwt/widgets/FontDialog.d Tue Oct 07 12:56:18 2008 +0200 +++ b/dwt/widgets/FontDialog.d Fri Oct 10 12:29:48 2008 +0200 @@ -7,12 +7,13 @@ * * Contributors: * IBM Corporation - initial API and implementation + * + * Port to the D programming language: + * Jacob Carlborg <jacob.carlborg@gmail.com> *******************************************************************************/ module dwt.widgets.FontDialog; -import dwt.dwthelper.utils; - import dwt.DWT; import dwt.DWTException; import dwt.graphics.Font; @@ -27,6 +28,12 @@ import dwt.internal.cocoa.OS; import dwt.internal.cocoa.SWTPanelDelegate; +import dwt.dwthelper.utils; +import dwt.internal.cocoa.NSInteger; +import dwt.widgets.Dialog; +import dwt.widgets.Display; +import dwt.widgets.Shell; + /** * Instances of this class allow the user to select a font * from all available fonts in the system. @@ -44,250 +51,250 @@ public class FontDialog : Dialog { FontData fontData; RGB rgb; - bool open; + bool open_; int fontID, fontSize; - -/** - * Constructs a new instance of this class given only its parent. - * - * @param parent a shell which will be the parent of the new instance - * - * @exception IllegalArgumentException <ul> - * <li>ERROR_NULL_ARGUMENT - if the parent is null</li> - * </ul> - * @exception DWTException <ul> - * <li>ERROR_THREAD_INVALID_ACCESS - if not called from the thread that created the parent</li> - * <li>ERROR_INVALID_SUBCLASS - if this class is not an allowed subclass</li> - * </ul> - */ -public this (Shell parent) { - this (parent, DWT.APPLICATION_MODAL); -} - -/** - * Constructs a new instance of this class given its parent - * and a style value describing its behavior and appearance. - * <p> - * The style value is either one of the style constants defined in - * class <code>DWT</code> which is applicable to instances of this - * class, or must be built by <em>bitwise OR</em>'ing together - * (that is, using the <code>int</code> "|" operator) two or more - * of those <code>DWT</code> style constants. The class description - * lists the style constants that are applicable to the class. - * Style bits are also inherited from superclasses. - * </p> - * - * @param parent a shell which will be the parent of the new instance - * @param style the style of dialog to construct - * - * @exception IllegalArgumentException <ul> - * <li>ERROR_NULL_ARGUMENT - if the parent is null</li> - * </ul> - * @exception DWTException <ul> - * <li>ERROR_THREAD_INVALID_ACCESS - if not called from the thread that created the parent</li> - * <li>ERROR_INVALID_SUBCLASS - if this class is not an allowed subclass</li> - * </ul> - */ -public this (Shell parent, int style) { - super (parent, style); - checkSubclass (); -} - -void changeFont(int arg0) { -} - -/** - * Returns a FontData object describing the font that was - * selected in the dialog, or null if none is available. - * - * @return the FontData for the selected font, or null - * @deprecated use #getFontList () - */ -public FontData getFontData () { - return fontData; -} - -/** - * Returns a FontData set describing the font that was - * selected in the dialog, or null if none is available. - * - * @return the FontData for the selected font, or null - * @since 2.1.1 - */ -public FontData [] getFontList () { - if (fontData is null) return null; - FontData [] result = new FontData [1]; - result [0] = fontData; - return result; -} - -/** - * Returns an RGB describing the color that was selected - * in the dialog, or null if none is available. - * - * @return the RGB value for the selected color, or null - * - * @see PaletteData#getRGBs - * - * @since 2.1 - */ -public RGB getRGB () { - return rgb; -} - -//int fontProc (int nextHandler, int theEvent, int userData) { -// int kind = OS.GetEventKind (theEvent); -// switch (kind) { -// case OS.kEventFontPanelClosed: -// open = false; -// break; -// case OS.kEventFontSelection: -// int [] fontID = new int [1]; -// if (OS.GetEventParameter (theEvent, OS.kEventParamATSUFontID, OS.typeUInt32, null, 4, null, fontID) is OS.noErr) { -// this.fontID = fontID [0]; -// } -// int [] fontSize = new int [1]; -// if (OS.GetEventParameter (theEvent, OS.kEventParamATSUFontSize, OS.typeFixed, null, 4, null, fontSize) is OS.noErr) { -// this.fontSize = fontSize [0]; -// } -// RGBColor color = new RGBColor (); -// int [] actualSize = new int [1]; -// if (OS.GetEventParameter (theEvent, OS.kEventParamFontColor, OS.typeRGBColor, null, RGBColor.sizeof, actualSize, color) is OS.noErr) { -// int red = (color.red >> 8) & 0xFF; -// int green = (color.green >> 8) & 0xFF; -// int blue = (color.blue >> 8) & 0xFF; -// rgb = new RGB (red, green, blue); -// } else { -// int [] dict = new int [1]; -// if (OS.GetEventParameter (theEvent, OS.kEventParamDictionary, OS.typeCFDictionaryRef, null, 4, actualSize, dict) is OS.noErr) { -// int [] attrib = new int [1]; -// if (OS.CFDictionaryGetValueIfPresent (dict [0], OS.kFontPanelAttributesKey (), attrib)) { -// int [] tags = new int [1]; -// int [] sizes = new int [1]; -// int [] values = new int [1]; -// if (OS.CFDictionaryGetValueIfPresent (attrib [0], OS.kFontPanelAttributeTagsKey (), tags) && -// OS.CFDictionaryGetValueIfPresent (attrib [0], OS.kFontPanelAttributeSizesKey (), sizes) && -// OS.CFDictionaryGetValueIfPresent (attrib [0], OS.kFontPanelAttributeValuesKey (), values) -// ) { -// int count = OS.CFDataGetLength (tags [0]) / 4; -// int tagPtr = OS.CFDataGetBytePtr (tags[0]); -// int sizePtr = OS.CFDataGetBytePtr (sizes [0]); -// int [] tag = new int [1]; -// int [] size = new int [1]; -// int valueOffset = 0; -// for (int i = 0 ; i < count ; i++) { -// OS.memmove (tag, tagPtr + (i * 4), 4); -// OS.memmove (size, sizePtr + (i * 4), 4); -// if (tag [0] is OS.kATSUColorTag && size[0] is RGBColor.sizeof) { -// int valuePtr = OS.CFDataGetBytePtr (values [0]); -// OS.memmove (color, valuePtr + valueOffset, RGBColor.sizeof); -// int red = (color.red >> 8) & 0xFF; -// int green = (color.green >> 8) & 0xFF; -// int blue = (color.blue >> 8) & 0xFF; -// rgb = new RGB (red, green, blue); -// break ; -// } -// valueOffset = size[0]; -// } -// } -// } -// } -// } -// break; -// } -// return OS.noErr; -//} + + /** + * Constructs a new instance of this class given only its parent. + * + * @param parent a shell which will be the parent of the new instance + * + * @exception IllegalArgumentException <ul> + * <li>ERROR_NULL_ARGUMENT - if the parent is null</li> + * </ul> + * @exception DWTException <ul> + * <li>ERROR_THREAD_INVALID_ACCESS - if not called from the thread that created the parent</li> + * <li>ERROR_INVALID_SUBCLASS - if this class is not an allowed subclass</li> + * </ul> + */ + public this (Shell parent) { + this (parent, DWT.APPLICATION_MODAL); + } + + /** + * Constructs a new instance of this class given its parent + * and a style value describing its behavior and appearance. + * <p> + * The style value is either one of the style constants defined in + * class <code>DWT</code> which is applicable to instances of this + * class, or must be built by <em>bitwise OR</em>'ing together + * (that is, using the <code>int</code> "|" operator) two or more + * of those <code>DWT</code> style constants. The class description + * lists the style constants that are applicable to the class. + * Style bits are also inherited from superclasses. + * </p> + * + * @param parent a shell which will be the parent of the new instance + * @param style the style of dialog to construct + * + * @exception IllegalArgumentException <ul> + * <li>ERROR_NULL_ARGUMENT - if the parent is null</li> + * </ul> + * @exception DWTException <ul> + * <li>ERROR_THREAD_INVALID_ACCESS - if not called from the thread that created the parent</li> + * <li>ERROR_INVALID_SUBCLASS - if this class is not an allowed subclass</li> + * </ul> + */ + public this (Shell parent, int style) { + super (parent, style); + checkSubclass (); + } + + void changeFont(int arg0) { + } + + /** + * Returns a FontData object describing the font that was + * selected in the dialog, or null if none is available. + * + * @return the FontData for the selected font, or null + * @deprecated use #getFontList () + */ + public FontData getFontData () { + return fontData; + } + + /** + * Returns a FontData set describing the font that was + * selected in the dialog, or null if none is available. + * + * @return the FontData for the selected font, or null + * @since 2.1.1 + */ + public FontData [] getFontList () { + if (fontData is null) return null; + FontData [] result = new FontData [1]; + result [0] = fontData; + return result; + } + + /** + * Returns an RGB describing the color that was selected + * in the dialog, or null if none is available. + * + * @return the RGB value for the selected color, or null + * + * @see PaletteData#getRGBs + * + * @since 2.1 + */ + public RGB getRGB () { + return rgb; + } -/** - * Makes the dialog visible and brings it to the front - * of the display. - * - * @return a FontData object describing the font that was selected, - * or null if the dialog was cancelled or an error occurred - * - * @exception DWTException <ul> - * <li>ERROR_WIDGET_DISPOSED - if the dialog has been disposed</li> - * <li>ERROR_THREAD_INVALID_ACCESS - if not called from the thread that created the dialog</li> - * </ul> - */ -public FontData open () { - Display display = parent !is null ? parent.display : Display.getCurrent (); + //int fontProc (int nextHandler, int theEvent, int userData) { + // int kind = OS.GetEventKind (theEvent); + // switch (kind) { + // case OS.kEventFontPanelClosed: + // open = false; + // break; + // case OS.kEventFontSelection: + // int [] fontID = new int [1]; + // if (OS.GetEventParameter (theEvent, OS.kEventParamATSUFontID, OS.typeUInt32, null, 4, null, fontID) is OS.noErr) { + // this.fontID = fontID [0]; + // } + // int [] fontSize = new int [1]; + // if (OS.GetEventParameter (theEvent, OS.kEventParamATSUFontSize, OS.typeFixed, null, 4, null, fontSize) is OS.noErr) { + // this.fontSize = fontSize [0]; + // } + // RGBColor color = new RGBColor (); + // int [] actualSize = new int [1]; + // if (OS.GetEventParameter (theEvent, OS.kEventParamFontColor, OS.typeRGBColor, null, RGBColor.sizeof, actualSize, color) is OS.noErr) { + // int red = (color.red >> 8) & 0xFF; + // int green = (color.green >> 8) & 0xFF; + // int blue = (color.blue >> 8) & 0xFF; + // rgb = new RGB (red, green, blue); + // } else { + // int [] dict = new int [1]; + // if (OS.GetEventParameter (theEvent, OS.kEventParamDictionary, OS.typeCFDictionaryRef, null, 4, actualSize, dict) is OS.noErr) { + // int [] attrib = new int [1]; + // if (OS.CFDictionaryGetValueIfPresent (dict [0], OS.kFontPanelAttributesKey (), attrib)) { + // int [] tags = new int [1]; + // int [] sizes = new int [1]; + // int [] values = new int [1]; + // if (OS.CFDictionaryGetValueIfPresent (attrib [0], OS.kFontPanelAttributeTagsKey (), tags) && + // OS.CFDictionaryGetValueIfPresent (attrib [0], OS.kFontPanelAttributeSizesKey (), sizes) && + // OS.CFDictionaryGetValueIfPresent (attrib [0], OS.kFontPanelAttributeValuesKey (), values) + // ) { + // int count = OS.CFDataGetLength (tags [0]) / 4; + // int tagPtr = OS.CFDataGetBytePtr (tags[0]); + // int sizePtr = OS.CFDataGetBytePtr (sizes [0]); + // int [] tag = new int [1]; + // int [] size = new int [1]; + // int valueOffset = 0; + // for (int i = 0 ; i < count ; i++) { + // OS.memmove (tag, tagPtr + (i * 4), 4); + // OS.memmove (size, sizePtr + (i * 4), 4); + // if (tag [0] is OS.kATSUColorTag && size[0] is RGBColor.sizeof) { + // int valuePtr = OS.CFDataGetBytePtr (values [0]); + // OS.memmove (color, valuePtr + valueOffset, RGBColor.sizeof); + // int red = (color.red >> 8) & 0xFF; + // int green = (color.green >> 8) & 0xFF; + // int blue = (color.blue >> 8) & 0xFF; + // rgb = new RGB (red, green, blue); + // break ; + // } + // valueOffset = size[0]; + // } + // } + // } + // } + // } + // break; + // } + // return OS.noErr; + //} - NSFontPanel panel = NSFontPanel.sharedFontPanel(); - panel.setTitle(NSString.stringWith(title !is null ? title : "")); - if (fontData !is null) { - Font font = new Font(display, fontData); - NSFontManager.sharedFontManager().setSelectedFont(font.handle, false); - font.dispose(); - } - SWTPanelDelegate delegate = cast(SWTPanelDelegate)new SWTPanelDelegate().alloc().init(); - int jniRef = OS.NewGlobalRef(this); - if (jniRef is 0) DWT.error(DWT.ERROR_NO_HANDLES); - delegate.setTag(jniRef); - panel.setDelegate(delegate); - fontData = null; - panel.orderFront(null); - NSApplication.sharedApplication().runModalForWindow_(panel); - panel.setDelegate(null); - delegate.release(); - OS.DeleteGlobalRef(jniRef); - NSFont font = NSFontManager.sharedFontManager().selectedFont(); - if (font !is null) { - //TODO - this does work - fontData = Font.cocoa_new(display, font).getFontData()[0]; + /** + * Makes the dialog visible and brings it to the front + * of the display. + * + * @return a FontData object describing the font that was selected, + * or null if the dialog was cancelled or an error occurred + * + * @exception DWTException <ul> + * <li>ERROR_WIDGET_DISPOSED - if the dialog has been disposed</li> + * <li>ERROR_THREAD_INVALID_ACCESS - if not called from the thread that created the dialog</li> + * </ul> + */ + public FontData open () { + Display display = parent !is null ? parent.display : Display.getCurrent (); + + NSFontPanel panel = NSFontPanel.sharedFontPanel(); + panel.setTitle(NSString.stringWith(title !is null ? title : "")); + if (fontData !is null) { + Font font = new Font(display, fontData); + NSFontManager.sharedFontManager().setSelectedFont(font.handle, false); + font.dispose(); + } + SWTPanelDelegate delegate_ = cast(SWTPanelDelegate)(new SWTPanelDelegate()).alloc().init(); + NSInteger jniRef = OS.NewGlobalRef(this); + if (jniRef is 0) DWT.error(DWT.ERROR_NO_HANDLES); + delegate_.setTag(jniRef); + panel.setDelegate(delegate_); + fontData = null; + panel.orderFront(null); + NSApplication.sharedApplication().runModalForWindow_(panel); + panel.setDelegate(null); + delegate_.release(); + OS.DeleteGlobalRef(jniRef); + NSFont font = NSFontManager.sharedFontManager().selectedFont(); + if (font !is null) { + //TODO - this does work + fontData = Font.cocoa_new(display, font).getFontData()[0]; + } + return fontData; } - return fontData; -} - -/** - * Sets a FontData object describing the font to be - * selected by default in the dialog, or null to let - * the platform choose one. - * - * @param fontData the FontData to use initially, or null - * @deprecated use #setFontList (FontData []) - */ -public void setFontData (FontData fontData) { - this.fontData = fontData; -} - -/** - * Sets the set of FontData objects describing the font to - * be selected by default in the dialog, or null to let - * the platform choose one. - * - * @param fontData the set of FontData objects to use initially, or null - * to let the platform select a default when open() is called - * - * @see Font#getFontData - * - * @since 2.1.1 - */ -public void setFontList (FontData [] fontData) { - if (fontData !is null && fontData.length > 0) { - this.fontData = fontData [0]; - } else { - this.fontData = null; + + /** + * Sets a FontData object describing the font to be + * selected by default in the dialog, or null to let + * the platform choose one. + * + * @param fontData the FontData to use initially, or null + * @deprecated use #setFontList (FontData []) + */ + public void setFontData (FontData fontData) { + this.fontData = fontData; } -} - -/** - * Sets the RGB describing the color to be selected by default - * in the dialog, or null to let the platform choose one. - * - * @param rgb the RGB value to use initially, or null to let - * the platform select a default when open() is called - * - * @see PaletteData#getRGBs - * - * @since 2.1 - */ -public void setRGB (RGB rgb) { - this.rgb = rgb; -} - -void windowWillClose(int sender) { - NSApplication.sharedApplication().stop(null); -} - -} + + /** + * Sets the set of FontData objects describing the font to + * be selected by default in the dialog, or null to let + * the platform choose one. + * + * @param fontData the set of FontData objects to use initially, or null + * to let the platform select a default when open() is called + * + * @see Font#getFontData + * + * @since 2.1.1 + */ + public void setFontList (FontData [] fontData) { + if (fontData !is null && fontData.length > 0) { + this.fontData = fontData [0]; + } else { + this.fontData = null; + } + } + + /** + * Sets the RGB describing the color to be selected by default + * in the dialog, or null to let the platform choose one. + * + * @param rgb the RGB value to use initially, or null to let + * the platform select a default when open() is called + * + * @see PaletteData#getRGBs + * + * @since 2.1 + */ + public void setRGB (RGB rgb) { + this.rgb = rgb; + } + + void windowWillClose(int sender) { + NSApplication.sharedApplication().stop(null); + } + + }