# HG changeset patch
# User sl
# Date 1400655275 -7200
# Node ID 7d41682fce1aec70b31c27872c3a67b15dd904d6
# Parent  4cb67272815c87045a696081440a88ef00ca96b8
Adding font selection dialog. Did a bit of cleaning too.

diff -r 4cb67272815c -r 7d41682fce1a FutabaVfd.vcxproj
--- a/FutabaVfd.vcxproj	Tue May 20 22:31:46 2014 +0200
+++ b/FutabaVfd.vcxproj	Wed May 21 08:54:35 2014 +0200
@@ -104,10 +104,12 @@
   </ItemDefinitionGroup>
   <ItemGroup>
     <ClCompile Include="..\hidapi\windows\hid.c" />
+    <ClCompile Include="Main.cpp" />
     <ClCompile Include="test.cpp" />
   </ItemGroup>
   <ItemGroup>
     <ClInclude Include="..\hidapi\hidapi.h" />
+    <ClInclude Include="MainWindow.h" />
   </ItemGroup>
   <ItemGroup>
     <Text Include="ReadMe.txt" />
diff -r 4cb67272815c -r 7d41682fce1a Main.cpp
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/Main.cpp	Wed May 21 08:54:35 2014 +0200
@@ -0,0 +1,15 @@
+
+
+#include "MainWindow.h"
+
+FXMainWindow *g_main_window;
+
+int main(int argc, char **argv)
+{
+    FXApp app("Futaba VFD", "Slions Software");
+    app.init(argc, argv);
+    g_main_window = new MainWindow(&app);
+    app.create();
+    app.run();
+    return 0;
+}
\ No newline at end of file
diff -r 4cb67272815c -r 7d41682fce1a MainWindow.h
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/MainWindow.h	Wed May 21 08:54:35 2014 +0200
@@ -0,0 +1,125 @@
+
+
+#ifndef MAIN_WINDOW_H
+#define MAIN_WINDOW_H
+
+#include <fx.h>
+#include "hidapi.h"
+#include "mac_support.h"
+#include <string.h>
+#include <stdlib.h>
+#include <limits.h>
+
+
+//TODO: Get ride of that constant once we figure out a way to get it from hidapi
+const int KFutabaOutputReportLength = 65;
+
+#ifdef _WIN32
+// Thanks Microsoft, but I know how to use strncpy().
+#pragma warning(disable:4996)
+#endif
+
+class MainWindow : public FXMainWindow {
+    FXDECLARE(MainWindow)
+
+public:
+    enum {
+        ID_FIRST = FXMainWindow::ID_LAST,
+        ID_CONNECT,
+        ID_DISCONNECT,
+        ID_RESCAN,
+        ID_SEND_OUTPUT_REPORT,
+        ID_SEND_FEATURE_REPORT,
+        ID_GET_FEATURE_REPORT,
+        ID_CLEAR,
+        ID_TIMER,
+        ID_MAC_TIMER,
+        ID_FUTABA_CLEAR_DISPLAY,
+        ID_FUTABA_DIMMING,
+        ID_FUTABA_DISPLAY_DATA_INPUT,
+        ID_FUTABA_READ_ID,
+        ID_FUTABA_READ_FIRMWARE_REVISION,
+        ID_FUTABA_POWER_SUPPLY_MONITOR,
+        ID_FUTABA_SET_PIXEL,
+        ID_FUTABA_RESET_PIXEL,
+        ID_FUTABA_SET_ALL_PIXELS,
+        ID_SELECT_FONT,
+        ID_LAST
+    };
+
+    size_t getDataFromTextField(FXTextField *tf, char *buf, size_t len);
+    int getLengthFromTextField(FXTextField *tf);
+
+protected:
+    MainWindow() {};
+public:
+    MainWindow(FXApp *a);
+    ~MainWindow();
+    virtual void create();
+
+    long onConnect(FXObject *sender, FXSelector sel, void *ptr);
+    long onDisconnect(FXObject *sender, FXSelector sel, void *ptr);
+    long onRescan(FXObject *sender, FXSelector sel, void *ptr);
+    long onSendOutputReport(FXObject *sender, FXSelector sel, void *ptr);
+    long onSendFeatureReport(FXObject *sender, FXSelector sel, void *ptr);
+    long onGetFeatureReport(FXObject *sender, FXSelector sel, void *ptr);
+    long onClear(FXObject *sender, FXSelector sel, void *ptr);
+    //
+    long onFutabaClearDisplay(FXObject *sender, FXSelector sel, void *ptr);
+    long onFutabaDimming(FXObject *sender, FXSelector sel, void *ptr);
+    long onFutabaDisplayDataInput(FXObject *sender, FXSelector sel, void *ptr);
+    long onFutabaReadId(FXObject *sender, FXSelector sel, void *ptr);
+    long onFutabaReadFirmwareRevision(FXObject *sender, FXSelector sel, void *ptr);
+    long onFutabaPowerSupplyMonitor(FXObject *sender, FXSelector sel, void *ptr);
+    long onFutabaSetAllPixels(FXObject *sender, FXSelector sel, void *ptr);
+    long onFutabaSetPixel(FXObject *sender, FXSelector sel, void *ptr);
+    long onFutabaResetPixel(FXObject *sender, FXSelector sel, void *ptr);
+    //
+    long onSelectFont(FXObject *sender, FXSelector sel, void *ptr);
+    //
+    long onTimeout(FXObject *sender, FXSelector sel, void *ptr);
+    long onMacTimeout(FXObject *sender, FXSelector sel, void *ptr);
+    //
+    void SetPixel(int aX, int aY, unsigned char aValue);
+    void SetPixelBlock(int aX, int aY, int aHeight, int aSize, unsigned char aValue);
+
+private:
+    FXList *device_list;
+    FXButton *connect_button;
+    FXButton *disconnect_button;
+    FXButton *rescan_button;
+    FXButton *output_button;
+    FXLabel *connected_label;
+    FXTextField *output_text;
+    FXTextField *output_len;
+    FXButton *feature_button;
+    FXButton *get_feature_button;
+    FXTextField *feature_text;
+    FXTextField *feature_len;
+    FXTextField *get_feature_text;
+    FXText *input_text;
+    FXFont *title_font;
+    //Futaba VFD control
+    FXButton *iButtonClearDisplay;
+    FXButton *iButtonDimming;
+    FXButton *iButtonDisplayDataInput;
+    FXButton *iButtonReadId;
+    FXButton *iButtonReadFirmwareRevision;
+    FXButton *iButtonPowerSupplyMonitor;
+    FXTextField *iTextFieldX;
+    FXTextField *iTextFieldY;
+    FXButton *iButtonSetPixel;
+    FXButton *iButtonResetPixel;
+    FXButton *iButtonSetAllPixels;
+    //Font
+    FXButton *iButtonSelectFont;
+
+    unsigned char* iOutputReportBuffer;
+    unsigned char iDimming; //Current VFD dimming
+    FXFontDesc iCurrentFontDesc;
+
+    struct hid_device_info *devices;
+    hid_device *connected_device;
+};
+
+#endif //
\ No newline at end of file
diff -r 4cb67272815c -r 7d41682fce1a test.cpp
--- a/test.cpp	Tue May 20 22:31:46 2014 +0200
+++ b/test.cpp	Wed May 21 08:54:35 2014 +0200
@@ -14,126 +14,8 @@
  which use HIDAPI.
 ********************************************************/
 
+#include "MainWindow.h"
 
-#include <fx.h>
-
-#include "hidapi.h"
-#include "mac_support.h"
-#include <string.h>
-#include <stdlib.h>
-#include <limits.h>
-
-const int KFutabaOutputReportLength = 65;
-
-#ifdef _WIN32
-	// Thanks Microsoft, but I know how to use strncpy().
-	#pragma warning(disable:4996)
-#endif
-
-class MainWindow : public FXMainWindow {
-	FXDECLARE(MainWindow)
-
-public:
-	enum {
-		ID_FIRST = FXMainWindow::ID_LAST,
-		ID_CONNECT,
-		ID_DISCONNECT,
-		ID_RESCAN,
-		ID_SEND_OUTPUT_REPORT,
-		ID_SEND_FEATURE_REPORT,
-		ID_GET_FEATURE_REPORT,
-		ID_CLEAR,
-		ID_TIMER,
-		ID_MAC_TIMER,
-		ID_FUTABA_CLEAR_DISPLAY,
-		ID_FUTABA_DIMMING,
-		ID_FUTABA_DISPLAY_DATA_INPUT,
-		ID_FUTABA_READ_ID,
-		ID_FUTABA_READ_FIRMWARE_REVISION,
-		ID_FUTABA_POWER_SUPPLY_MONITOR,
-        ID_FUTABA_SET_PIXEL,
-		ID_FUTABA_RESET_PIXEL,
-        ID_FUTABA_SET_ALL_PIXELS,
-		ID_LAST,
-	};
-
-private:
-	FXList *device_list;
-	FXButton *connect_button;
-	FXButton *disconnect_button;
-	FXButton *rescan_button;
-	FXButton *output_button;
-	FXLabel *connected_label;
-	FXTextField *output_text;
-	FXTextField *output_len;
-	FXButton *feature_button;
-	FXButton *get_feature_button;
-	FXTextField *feature_text;
-	FXTextField *feature_len;
-	FXTextField *get_feature_text;
-	FXText *input_text;
-	FXFont *title_font;
-	//Futaba VFD control
-	FXButton *iButtonClearDisplay;
-	FXButton *iButtonDimming;
-	FXButton *iButtonDisplayDataInput;
-	FXButton *iButtonReadId;
-	FXButton *iButtonReadFirmwareRevision;
-	FXButton *iButtonPowerSupplyMonitor;
-    FXTextField *iTextFieldX;
-    FXTextField *iTextFieldY;
-    FXButton *iButtonSetPixel;
-	FXButton *iButtonResetPixel;
-    FXButton *iButtonSetAllPixels;
-
-
-	unsigned char* iOutputReportBuffer;
-	unsigned char iDimming;
-
-	//FXTextField *iTextX;
-	//FXTextField *iTextY;
-
-
-
-	struct hid_device_info *devices;
-	hid_device *connected_device;
-	size_t getDataFromTextField(FXTextField *tf, char *buf, size_t len);
-	int getLengthFromTextField(FXTextField *tf);
-
-
-protected:
-	MainWindow() {};
-public:
-	MainWindow(FXApp *a);
-	~MainWindow();
-	virtual void create();
-
-	long onConnect(FXObject *sender, FXSelector sel, void *ptr);
-	long onDisconnect(FXObject *sender, FXSelector sel, void *ptr);
-	long onRescan(FXObject *sender, FXSelector sel, void *ptr);
-	long onSendOutputReport(FXObject *sender, FXSelector sel, void *ptr);
-	long onSendFeatureReport(FXObject *sender, FXSelector sel, void *ptr);
-	long onGetFeatureReport(FXObject *sender, FXSelector sel, void *ptr);
-	long onClear(FXObject *sender, FXSelector sel, void *ptr);
-	//
-	long onFutabaClearDisplay(FXObject *sender, FXSelector sel, void *ptr);
-	long onFutabaDimming(FXObject *sender, FXSelector sel, void *ptr);
-	long onFutabaDisplayDataInput(FXObject *sender, FXSelector sel, void *ptr);
-	long onFutabaReadId(FXObject *sender, FXSelector sel, void *ptr);
-	long onFutabaReadFirmwareRevision(FXObject *sender, FXSelector sel, void *ptr);
-	long onFutabaPowerSupplyMonitor(FXObject *sender, FXSelector sel, void *ptr);
-    long onFutabaSetAllPixels(FXObject *sender, FXSelector sel, void *ptr);
-    long onFutabaSetPixel(FXObject *sender, FXSelector sel, void *ptr);
-	long onFutabaResetPixel(FXObject *sender, FXSelector sel, void *ptr);
-	//
-	//
-	long onTimeout(FXObject *sender, FXSelector sel, void *ptr);
-	long onMacTimeout(FXObject *sender, FXSelector sel, void *ptr);
-	//
-	void SetPixel(int aX, int aY, unsigned char aValue);
-	void SetPixelBlock(int aX, int aY, int aHeight, int aSize, unsigned char aValue);
-
-};
 
 // FOX 1.7 changes the timeouts to all be nanoseconds.
 // Fox 1.6 had all timeouts as milliseconds.
@@ -143,8 +25,6 @@
 	const int timeout_scalar = 1;
 #endif
 
-FXMainWindow *g_main_window;
-
 
 FXDEFMAP(MainWindow) MainWindowMap [] = {
 	FXMAPFUNC(SEL_COMMAND, MainWindow::ID_CONNECT, MainWindow::onConnect ),
@@ -163,6 +43,7 @@
     FXMAPFUNC(SEL_COMMAND, MainWindow::ID_FUTABA_SET_PIXEL, MainWindow::onFutabaSetPixel ),
 	FXMAPFUNC(SEL_COMMAND, MainWindow::ID_FUTABA_RESET_PIXEL, MainWindow::onFutabaResetPixel ),
     FXMAPFUNC(SEL_COMMAND, MainWindow::ID_FUTABA_SET_ALL_PIXELS, MainWindow::onFutabaSetAllPixels ),
+    FXMAPFUNC(SEL_COMMAND, MainWindow::ID_SELECT_FONT, MainWindow::onSelectFont ),
 	FXMAPFUNC(SEL_TIMEOUT, MainWindow::ID_TIMER, MainWindow::onTimeout ),
 	FXMAPFUNC(SEL_TIMEOUT, MainWindow::ID_MAC_TIMER, MainWindow::onMacTimeout ),
 };
@@ -212,10 +93,16 @@
 
 	connected_label = new FXLabel(vf, "Disconnected");
 
+    //Font group
+    new FXHorizontalFrame(vf);
+    FXGroupBox *gb = new FXGroupBox(vf, "Fonts", FRAME_GROOVE|LAYOUT_FILL_X);
+    FXMatrix *matrix = new FXMatrix(gb, 3, MATRIX_BY_COLUMNS|LAYOUT_FILL_X);
+    iButtonSelectFont = new FXButton(matrix, "Select Font", NULL, this, ID_SELECT_FONT, BUTTON_NORMAL|LAYOUT_FILL_X);
+
 	//Futaba VFD commands
 	new FXHorizontalFrame(vf);
-	FXGroupBox *gb = new FXGroupBox(vf, "Futaba GP1212A01A", FRAME_GROOVE|LAYOUT_FILL_X);
-	FXMatrix *matrix = new FXMatrix(gb, 3, MATRIX_BY_COLUMNS|LAYOUT_FILL_X);
+	gb = new FXGroupBox(vf, "Futaba GP1212A01A", FRAME_GROOVE|LAYOUT_FILL_X);
+	matrix = new FXMatrix(gb, 3, MATRIX_BY_COLUMNS|LAYOUT_FILL_X);
 	iButtonClearDisplay = new FXButton(matrix, "Clear Display", NULL, this, ID_FUTABA_CLEAR_DISPLAY, BUTTON_NORMAL|LAYOUT_FILL_X);
 	iButtonDimming = new FXButton(matrix, "Dimming", NULL, this, ID_FUTABA_DIMMING, BUTTON_NORMAL|LAYOUT_FILL_X);
 	iButtonDisplayDataInput = new FXButton(matrix, "Display Data Input", NULL, this, ID_FUTABA_DISPLAY_DATA_INPUT, BUTTON_NORMAL|LAYOUT_FILL_X);
@@ -231,6 +118,8 @@
 	iButtonResetPixel = new FXButton(matrix, "Reset Pixel", NULL, this, ID_FUTABA_RESET_PIXEL, BUTTON_NORMAL|LAYOUT_FILL_X);
     //
     iButtonSetAllPixels = new FXButton(matrix, "Set All Pixels", NULL, this, ID_FUTABA_SET_ALL_PIXELS, BUTTON_NORMAL|LAYOUT_FILL_X);
+    //
+
 	//
 	iButtonClearDisplay->disable();
 	iButtonDimming->disable();
@@ -689,7 +578,7 @@
 	iOutputReportBuffer[4]=0xF0; //
 	iOutputReportBuffer[5]=aX; //X
 	iOutputReportBuffer[6]=aY; //Y
-	iOutputReportBuffer[7]=aHeight; //Y length before return. Though outside the specs, setting this to zero apparently allows us to modify a single pixel without touching any other. 
+	iOutputReportBuffer[7]=aHeight; //Y length before return. Though outside the specs, setting this to zero apparently allows us to modify a single pixel without touching any other.
 	iOutputReportBuffer[8]=0x00; //Size of pixel data in bytes (MSB)
 	iOutputReportBuffer[9]=aSize; //Size of pixel data in bytes (LSB)
 	memset(iOutputReportBuffer+10, aValue, KFutabaOutputReportLength);
@@ -845,12 +734,17 @@
 	return 1;
 }
 
-int main(int argc, char **argv)
+/**
+
+*/
+long MainWindow::onSelectFont(FXObject *sender, FXSelector sel, void *ptr)
 {
-	FXApp app("Futaba VFD", "Slions Software");
-	app.init(argc, argv);
-	g_main_window = new MainWindow(&app);
-	app.create();
-	app.run();
-	return 0;
+    FXFontDialog* dlg=new FXFontDialog(this,"Pick a font");
+    dlg->execute();
+    dlg->getFontSelection(iCurrentFontDesc);
+    delete dlg;
+    return 1;
 }
+
+
+