OpenCores
URL https://opencores.org/ocsvn/or1k/or1k/trunk

Subversion Repositories or1k

[/] [or1k/] [trunk/] [mw/] [src/] [demos/] [mwobjects/] [mwo-test.cc] - Rev 1765

Compare with Previous | Blame | View Log

/*
 * Copyright (c) 1999 Greg Haerr <greg@censoft.com>
 *
 * Demo program for Micro-Windows
 */
 
#define MWINCLUDECOLORS
#include <mwobjects.h>
#include <iostream>
 
extern MWIMAGEHDR image_microwin;
extern MWIMAGEHDR image_zion208;
 
PMWIMAGEHDR image  = &image_zion208;
 
using namespace MicroWindowsObjects;
 
class TestWindowClass
  : public WindowClass
{
public:
 
  TestWindowClass (LPCSTR lpszClassName);
 
};
 
class TestChildWindow
  : public Window
{
public:
 
  TestChildWindow ();
 
  HWND create (LPCSTR lpszClassName,
               HWND parent, 
               int x, int y, 
               int nWidth, int nHeight);
 
  void set_trace (bool t) 
    { trace = t; }
 
protected:
 
  virtual LRESULT message_handler (UINT   msg,
                                   WPARAM wParam,
                                   LPARAM lParam);
private:
 
  bool trace;
 
};
 
class TestWindow
  : public Window
{
public:
 
  TestWindow (LPCSTR lpszClassName, bool trace = false);
 
private:
 
  bool            trace;
  Window          button;
  TestChildWindow image[3];
 
};
 
class Test3dWindow
  : public Window
{
public:
 
  Test3dWindow (LPCSTR lpszChild);
 
protected:
 
  virtual LRESULT message_handler (UINT   msg,
                                   WPARAM wParam,
                                   LPARAM lParam);
private:
 
  vec1 gx;
  vec1 gy;
 
  vec1 last_gx;
  vec1 last_gy;
 
};
 
class TestRoseWindow
  : public TestWindow
{
public:
 
  TestRoseWindow (LPCSTR lpszClassName, bool trace = false);
 
protected:
 
  virtual LRESULT message_handler (UINT   msg,
                                   WPARAM wParam,
                                   LPARAM lParam);
};
 
class TestCircleWindow
  : public TestWindow
{
public:
 
  TestCircleWindow (LPCSTR lpszClassName, bool trace = false);
 
protected:
 
  virtual LRESULT message_handler (UINT   msg,
                                   WPARAM wParam,
                                   LPARAM lParam);
};
 
class TestDaisyWindow
  : public TestWindow
{
public:
 
  TestDaisyWindow (LPCSTR lpszClass, bool trace = false);
 
protected:
 
  virtual LRESULT message_handler (UINT   msg,
                                   WPARAM wParam,
                                   LPARAM lParam);
};
 
class TestFileDescriptor
  : public FileDescriptor
{
public:
 
  void do_fd_test ();
 
protected:
 
  LRESULT read ();
  LRESULT write ();
  LRESULT except ();
};
 
class TestApplication
  : public Application
{
  enum { GROUPS = 2 };
 
public:
 
  TestApplication ();
 
protected:
 
  virtual int initialise ();
  virtual int shutdown ();
 
private:
 
  TestWindowClass    main_class;
 
  Test3dWindow       *t3d [GROUPS];
  TestRoseWindow     *tr [GROUPS];
  TestCircleWindow   *tc [GROUPS];
  TestDaisyWindow    *td [GROUPS];
 
  TestFileDescriptor *fd;
 
};
 
TestWindowClass::TestWindowClass (LPCSTR lpszClassName)
  : WindowClass (lpszClassName,
                 CS_DBLCLKS | CS_VREDRAW | CS_HREDRAW)
{
  set_background ((HBRUSH) GetStockObject (LTGRAY_BRUSH));
}
 
TestChildWindow::TestChildWindow ()
{
}
 
HWND
TestChildWindow::create (LPCSTR lpszClassName,
                         HWND parent, 
                         int x, int y, 
                         int nWidth, int nHeight)
{
  return Window::create (0,
                         lpszClassName, 
                         "", 
                         WS_BORDER | WS_CHILD | WS_VISIBLE,
                         x, y, nWidth, nHeight,
                         parent, 0, 0, 0);
}
 
LRESULT
TestChildWindow::message_handler (UINT   msg,
                                  WPARAM wParam,
                                  LPARAM lParam)
{
  Paint paint (*this);
 
  switch (msg) 
  {
    case WM_PAINT:
      paint.begin ();
 
      DrawDIB (paint, paint.left (), paint.top (), image);
 
      paint.end ();
      break;
 
    default:
      return Window::message_handler (msg, wParam, lParam);
  }
  return 0;
}
 
TestWindow::TestWindow (LPCSTR lpszClassName, bool trace)
  : trace (trace)
{
  Rect rc (GetDesktopWindow ());
  int  width;
  int  height;
 
  width = height = rc.right () / 2;
 
  if (trace)
    cout << "create: hwnd=" << get_handle ()
         << " " << rc << endl;
 
  create (0, lpszClassName, "Micro C++ Application",
          WS_OVERLAPPEDWINDOW | WS_VISIBLE,
          CW_USEDEFAULT, CW_USEDEFAULT,
          width, height,
          0, 0, 0, 0);
 
  button.create (0, "BUTTON", "Ok",
                 WS_CHILD | WS_VISIBLE,
                 width * 5 / 8, 10, 50, 14,
                 *this, 0, 0, 0);
 
  image[0].create (lpszClassName, *this, 
                   4, 4, 
                   width / 3, height / 3);
  image[1].create (lpszClassName, *this, 
                   width / 3, height / 3, 
                   width / 3, height / 3);
  image[2].create (lpszClassName, *this, 
                   width * 3 / 5, height * 3 / 5, 
                   width * 2 / 3, height * 2 / 3);
 
  image[0].set_trace (trace);
  image[1].set_trace (trace);
  image[2].set_trace (trace);
 
}
 
Test3dWindow::Test3dWindow (LPCSTR lpszClassName)
  : gx (0),
    gy (0),
    last_gx (0),
    last_gy (0)
{
  Rect rect (GetDesktopWindow ());
  int  width;
  int  height;
 
  width = height = rect.right () / 2;
 
  create (0, lpszClassName, "Micro C++ Application",
          WS_OVERLAPPEDWINDOW | WS_VISIBLE,
          CW_USEDEFAULT, CW_USEDEFAULT,
          width, height,
          0, 0, 0, 0);
}
 
LRESULT
Test3dWindow::message_handler (UINT   msg,
                               WPARAM wParam,
                               LPARAM lParam)
{
  Paint paint (*this, lParam);
  Rect  rc;
 
  switch (msg) 
  {
    case WM_PAINT:
      paint.begin (true);
 
      look3 (-2 * gx, -2 * gy, 1.2);
      drawgrid (-8.0, 8.0, 10, -8.0, 8.0, 10);
 
      last_gx = gx;
      last_gy = gy;
 
      paint.end ();
      break;
 
    case WM_MOUSEMOVE:
 
      rc.get_client (*this);
      gx = (vec1) paint.get_point_x () / rc.right ();
      gy = (vec1) paint.get_point_y () / rc.bottom ();
 
      if (gx > last_gx || gy > last_gy)
        invalidate_rect (0, FALSE);
      break;
 
    default:
      return Window::message_handler (msg, wParam, lParam);
  }
  return 0;
}
 
TestRoseWindow::TestRoseWindow (LPCSTR lpszClassName, bool trace)
  : TestWindow (lpszClassName, trace)
{
}
 
LRESULT
TestRoseWindow::message_handler (UINT   msg,
                                 WPARAM wParam,
                                 LPARAM lParam)
{
  Paint paint (*this);
 
  switch (msg) 
  {
    case WM_PAINT:
      paint.begin (true);
 
      rose (1.0, 7, 13);
 
      paint.end ();
      break;
 
    default:
      return Window::message_handler (msg, wParam, lParam);
  }
  return 0;
}
 
TestCircleWindow::TestCircleWindow (LPCSTR lpszClassName, bool trace)
  : TestWindow (lpszClassName, trace)
{
}
 
LRESULT
TestCircleWindow::message_handler (UINT   msg,
                                   WPARAM wParam,
                                   LPARAM lParam)
{
  Paint paint (*this);
 
  switch (msg) 
  {
    case WM_PAINT:
      paint.begin (true);
 
      setcolor3 (BLACK);
      circle3 (1.0);
 
      paint.end ();
      break;
 
    default:
      return Window::message_handler (msg, wParam, lParam);
  }
  return 0;
}
 
TestDaisyWindow::TestDaisyWindow (LPCSTR lpszClassName, bool trace)
  : TestWindow (lpszClassName, trace)
{
}
 
LRESULT
TestDaisyWindow::message_handler (UINT   msg,
                                  WPARAM wParam,
                                  LPARAM lParam)
{
  Paint paint (*this);
 
  switch (msg) 
  {
    case WM_PAINT:
      paint.begin (true);
 
      setcolor3 (BLUE);
      daisy (1.0, 20);
 
      paint.paint_3d ();
 
      paint.text_out (10, 250, "Date built : %s", __DATE__);
 
      paint.end ();
      break;
 
    case WM_LBUTTONDOWN:
      cout << "left down : " << *this << endl;
      SendMessage (*this, WM_FDINPUT, 200, 0);
      return Window::message_handler (msg, wParam, lParam);
      break;
 
    case WM_RBUTTONDOWN:
      cout << "right down : " << *this << endl;
      SendMessage (*this, WM_FDOUTPUT, 200, 0);
      return Window::message_handler (msg, wParam, lParam);
      break;
 
    case WM_LBUTTONDBLCLK:
      cout << "double left : " << *this << endl;
      SendMessage (*this, WM_FDEXCEPT, 200, 0);
      return Window::message_handler (msg, wParam, lParam);
      break;
 
    default:
      return Window::message_handler (msg, wParam, lParam);
  }
  return 0;
}
 
void 
TestFileDescriptor::do_fd_test ()
{
}
 
LRESULT
TestFileDescriptor::read ()
{
  cout << "test read fd for `" << *get_window () << "' and fd " << *this << endl;
  return 0;  
}
 
LRESULT
TestFileDescriptor::write ()
{
  cout << "test write fd for `" << *get_window () << "' and fd " << *this << endl;
  return 0;  
}
 
LRESULT
TestFileDescriptor::except ()
{
  cout << "test except fd for `" << *get_window () << "' and fd " << *this << endl;
  return 0;  
}
 
TestApplication::TestApplication ()
  : Application (image_microwin),
    main_class ("test")
{
  for (int i = 0; i < GROUPS; i++)
  {
    t3d [i] = 0;
    tr [i] = 0;
    tc [i] = 0;
    td [i] = 0;
  }
}
 
int
TestApplication::initialise ()
{
  main_class.register_class ();
 
  for (int i = 0; i < GROUPS; i++)
  {
    t3d [i] = new Test3dWindow ("test");
    tr [i] = new TestRoseWindow ("test");
    tc [i] = new TestCircleWindow ("test");
    td [i] = new TestDaisyWindow ("test");
  }
 
  fd = new TestFileDescriptor ();
 
  cout << "attach to " << *td[GROUPS - 1] << endl;
 
  td[GROUPS - 1]->attach (200, *fd);
 
  return 0;
}
 
int
TestApplication::shutdown ()
{
  for (int i = 0; i < GROUPS; i++)
  {
    if (t3d [i])
      delete t3d [i];
    t3d [i] = 0;
 
    if (tr [i])
      delete tr [i];
    tr [i] = 0;
 
    if (tc [i])
      delete tc [i];
    tc [i] = 0;
 
    if (td [i])
      delete td [i];
    td [i] = 0;
  }
 
  return 0;
}
 
TestApplication test_application;
 

Compare with Previous | Blame | View Log

powered by: WebSVN 2.1.0

© copyright 1999-2024 OpenCores.org, equivalent to Oliscience, all rights reserved. OpenCores®, registered trademark.