// JLH = James L. Hammons <jlhamm@acm.org>
//
// Who When What
-// --- ---------- -------------------------------------------------------------
+// --- ---------- -----------------------------------------------------------
// JLH 04/10/2002 Created this file
// JLH 05/10/2004 Translated file from ASM to CPP
// JLH 05/14/2004 Added rudimentary editing capability to tool palette tools
// JLH 11/18/2006 Initial port to Linux
// JLH 08/27/2008 Fixed tool palette focus problems
// JLH 08/28/2008 Split out classes defined here into separate files
+// JLH 03/05/2009 Initial conversion from wxWidgets to Qt
//
-// FIXED:
-//
-// - Fix problem with tool palette not getting focus 1st time it's called up [DONE]
-// - Split out windows/classes defined here into their own files [DONE]
-//
-// STILL TO BE DONE:
-//
-// - Fix bug in Glyphpoints when dragging on an empty canvas or loading a font
-// - Fix scrolling, zooming, settings (ini)
-// - Finish conversion to wxWidgets for cross-platform portability
-// - Fix problem with owned window causing main window refresh problems
-// (ironically enough, it doesn't seem to be a problem anymore...)
-//
-
-// Uncomment this for debugging...
-#define DEBUG
-#define DEBUGFOO // Various tool debugging...
-#define DEBUGTP // Toolpalette debugging...
-
#include "ttedit.h"
-#include "charwindow.h"
-#include "toolwindow.h"
-#include "editwindow.h"
-#include "tte_res.h" // Resource IDs
-#ifdef DEBUG
-#include "debug.h"
-#endif
-
-// Pixmap resouces
-
-#include "res/cur1.xpm"
-#include "res/cur2.xpm"
-#include "res/cur3.xpm"
-#include "res/cur4.xpm"
-#include "res/cur5.xpm"
-#include "res/cur6.xpm"
-#include "res/cur7.xpm"
-#include "res/cur8.xpm"
-#include "res/ttedit.xpm" // *nix only, but small enough to not matter
-#include "res/tool1.xpm"
-#include "res/tool2.xpm"
-#include "res/tool3.xpm"
-
-
-IMPLEMENT_APP(TTEditApp) // Run the main application loop
-
-bool TTEditApp::OnInit()
-{
- wxLog * logTarget = new wxLogStderr();//fopen("!ttedit_log.txt", "wb"));
- wxLog::SetActiveTarget(logTarget);
-#ifdef DEBUG
- OpenDebugLog();
-#endif
-
- // Initialize all the top-level window members to NULL.
- mainFrame = NULL;
- charWin = NULL;
- toolPalette = NULL;
- for(int i=0; i<8; i++)
- cur[i] = NULL;
-
-//Shouldn't we check to see if it was successful? This just assumes
- CreateResources();
+#include <QApplication>
+#include "mainwindow.h"
- mainFrame = new TTEditFrame(NULL, _("TTEdit"), wxPoint(155, 165), wxSize(300, 300),
- wxDEFAULT_FRAME_STYLE | wxFULL_REPAINT_ON_RESIZE);
-// wxMINIMIZE_BOX | wxRESIZE_BOX | wxMAXIMIZE_BOX | | wxSYSTEM_MENU | wxCAPTION);
+// Main app constructor--we stick globally accessible stuff here...
-// charWin = new CharWindow(NULL);//, _T("Own3d W1nd0w"), wxDefaultPosition, wxDefaultSize);
- charWin = new CharWindow(mainFrame, _("Own3d W1nd0w"), wxDefaultPosition, wxDefaultSize,
- wxCAPTION | wxRESIZE_BORDER | wxFRAME_NO_TASKBAR | wxFRAME_FLOAT_ON_PARENT);
-
- toolPalette = new ToolWindow(mainFrame, _(""), wxDefaultPosition, wxDefaultSize,
- wxBORDER_NONE | wxFRAME_NO_TASKBAR | wxFRAME_FLOAT_ON_PARENT);
-
- return true;
-}
-
-int TTEditApp::OnExit()
-{
-#ifdef DEBUG
- CloseDebugLog();
-#endif
- for(int i=0; i<8; i++)
- if (cur[i])
- delete cur[i];
-
- return 0;
-}
-
-//
-// OS dependent method of creating cursor (works for Win32 and GTK+)
-//
-#define CREATE_CURSOR(storage, name, hsx, hsy) \
- wxBitmap name##_bitmap(name##_xpm); \
- wxImage name##_image = name##_bitmap.ConvertToImage(); \
- name##_image.SetOption(wxIMAGE_OPTION_CUR_HOTSPOT_X, hsx); \
- name##_image.SetOption(wxIMAGE_OPTION_CUR_HOTSPOT_Y, hsy); \
- storage = new wxCursor(name##_image);
-
-void TTEditApp::CreateResources(void)
+TTEdit::TTEdit(int & argc, char * argv[]): QApplication(argc, argv), charWnd(NULL)
{
- // This is a sucky way to create cursors, but at least it's cross-platform...
- // NOTE: Need to fix hotspots on a few... !!! FIX !!! [DONE]
-
- CREATE_CURSOR(cur[0], cur1, 1, 1);
- CREATE_CURSOR(cur[1], cur2, 1, 1);
- CREATE_CURSOR(cur[2], cur3, 11, 11); // Prolly won't need this soon (scroll)...
- CREATE_CURSOR(cur[3], cur4, 15, 13); // Prolly won't need this soon (zoom)...
- CREATE_CURSOR(cur[4], cur5, 1, 1);
- CREATE_CURSOR(cur[5], cur6, 1, 1);
- CREATE_CURSOR(cur[6], cur7, 1, 1);
- CREATE_CURSOR(cur[7], cur8, 1, 1);
+ mainWindow = new MainWindow;
+//printf("mainWindow.show();\n");
+ mainWindow->show();
}
-BEGIN_EVENT_TABLE(TTEditFrame, wxFrame)
- EVT_MENU(IDM_OPEN, TTEditFrame::OnOpen)
- EVT_MENU(IDM_EXIT, TTEditFrame::OnExit)
- EVT_MENU(IDM_ABOUT, TTEditFrame::OnAbout)
- EVT_MENU(ID_TBCHARWIN, TTEditFrame::OnCharWindow)
- EVT_CLOSE(TTEditFrame::OnCloseWindow)
-END_EVENT_TABLE()
-
-TTEditFrame::TTEditFrame(wxFrame * parent, const wxString &title, const wxPoint &pos,
- const wxSize &size, long style): wxFrame(parent, -1, title, pos, size, style), app(wxGetApp()), mainWindow(NULL)
+// Here's the main application loop--short and simple...
+int main(int argc, char * argv[])
{
- // Initialize child subwindow members (and hopefully avoid subtle bugs)
-// mainWindow = NULL;
-
- SetIcon(wxICON(ttedit));
-// CreateStatusBar(2); // Create 2 panes
- int widths[2] = { -1, 120 };
- wxStatusBar * sb = CreateStatusBar(2, 0); // Create 2 panes
- sb->SetStatusWidths(2, widths);
- wxToolBar * tb = CreateToolBar();
+ Q_INIT_RESOURCE(ttedit); // This must the same name as the exe filename
- if (tb != NULL)
- {
- // Create buttons
-
- wxBitmap tool1(tool1_xpm);
- wxBitmap tool2(tool2_xpm);
- wxBitmap tool3(tool3_xpm);
-
- tb->AddTool(ID_TBLEFT, _("Prev char"), tool1, _("Go to prev char"), wxITEM_NORMAL);
- tb->AddTool(ID_TBRIGHT, _("Next char"), tool2, _("Go to next char"), wxITEM_NORMAL);
- tb->AddTool(ID_TBCHARWIN, _("Char Wnd"), tool3, _("Toggle char window"), wxITEM_CHECK);
- tb->Realize();
- }
-
- // Create a menu bar for the frame
- menuBar = new wxMenuBar;
- wxMenu * menu1 = new wxMenu;
- menu1->Append(IDM_NEW, _("&New\tCtrl+N"), _("Create a new font."));
- menu1->Append(IDM_OPEN, _("&Open...\tCtrl+O"), _("Opens an existing font."));
- menu1->Append(IDM_SAVE, _("&Save\tCtrl+S"), _("Save the current font."));
- menu1->Append(IDM_SAVEAS, _("Save &As..."), _("Save the current font under a different name."));
- menu1->AppendSeparator();
- menu1->Append(IDM_EXIT, _("E&xit\tAlt+X"), _("Quits the TTEdit program."));
- menuBar->Append(menu1, _("&File"));
- wxMenu * menu2 = new wxMenu;
- menu2->Append(IDM_HELPTOPICS, _("&Help Topics"), _("Displays the Help contents and index."));
- menu2->AppendSeparator();
- menu2->Append(IDM_ABOUT, _("&About TTEdit"), _("Displays information about TTEdit."));
- menuBar->Append(menu2, _("&Help"));
- SetMenuBar(menuBar);
-
- // Create child subwindows
- mainWindow = new TTEditWindow(this);
-
- Centre(wxBOTH); // Centre frame on the screen
- Show(true); // Show the frame
-}
-
-TTEditFrame::~TTEditFrame()
-{
-}
-
-void TTEditFrame::OnOpen(wxCommandEvent &e)
-{
- wxFileDialog fd(this, _("Choose a font to load"), _(""), _(""), _("TTF files (*.ttf)|*.ttf|All files (*.*)|*.*"), wxOPEN);
-
- if (fd.ShowModal() != wxID_OK)
- return;
-
-// Hmm. The font object is causing a massive crash... (gdb says it's in "Load")
- if (app.font.Load((char *)fd.GetPath().c_str()) != true)
- {
- wxMessageDialog dlg(NULL, _("Load font failed!"), _("Houston, we have a problem..."), wxOK | wxICON_ERROR);
- dlg.ShowModal();
- }
-
-//Huzzah! It works! Now just need scaling, scrolling, etc...
-// pts = app.font.GetGlyphPoints(45);
-}
-
-void TTEditFrame::OnAbout(wxCommandEvent &e)
-{
- wxMessageDialog dlg(NULL, _("TrueType Edit v1.0.1\n\nA handy tool for editing TrueType fonts!\nby James \"Shamus\" Hammons\n(C) 2006 Underground Software"), _("About TrueType Edit"), wxOK | wxICON_INFORMATION);
- dlg.ShowModal();
-}
-
-void TTEditFrame::OnExit(wxCommandEvent &e)
-{
- app.toolPalette->Destroy();
- this->Destroy();
-}
-
-void TTEditFrame::OnCharWindow(wxCommandEvent &e)
-{
- app.charWin->Show(e.IsChecked() ? true : false);
-
- if (e.IsChecked())
- Raise();
-}
-
-void TTEditFrame::OnCloseWindow(wxCloseEvent &e)
-{
- app.toolPalette->Destroy();
- this->Destroy();
+// QApplication app(argc, argv);
+//printf("TTEdit app(argc, argv);\n");
+ TTEdit app(argc, argv);
+//printf("TTEMainWindow mainWindow;\n");
+//OK, it gets to here at least...
+//printf("return app.exec();\n");
+ return app.exec();
}