Go back to Richel Bilderbeek's homepage.

Go back to Richel Bilderbeek's C++ page.

 

 

 

 

 

(C++) TestTextCanvas

 

TestTextCanvas is a tool to test the TextCanvas class.

 

 

 

 

 

Downloads

 

Technical facts

 

Operating system(s) or programming environment(s)

IDE(s):

Project type:

C++ standard:

Compiler(s):

Libraries used:

 

 

 

 

 

Qt project file: ./ToolTestTextCanvas/ToolTestTextCanvasConsole.pro

 

include(../../ConsoleApplication.pri)

include(../../Libraries/Boost.pri)

include(../../Classes/CppAbout/CppAbout.pri)
include(../../Classes/CppFileIo/CppFileIo.pri)
include(../../Classes/CppHelp/CppHelp.pri)
include(../../Classes/CppMenuDialog/CppMenuDialog.pri)
include(../../Classes/CppRichelBilderbeekProgram/CppRichelBilderbeekProgram.pri)
include(../../Classes/CppTrace/CppTrace.pri)

#Specific
include(../../Classes/CppCanvas/CppCanvas.pri)
include(../../Classes/CppDotMatrix/CppDotMatrix.pri)
include(../../Tools/ToolTestTextCanvas/ToolTestTextCanvasConsole.pri)
include(../../Classes/CppTextCanvas/CppTextCanvas.pri)

SOURCES += main.cpp

 

 

 

 

 

Qt project file: ./ToolTestTextCanvas/ToolTestTextCanvasDesktop.pro

 

include(../../DesktopApplication.pri)
include(../../Libraries/Boost.pri)
include(../../Libraries/GeneralConsole.pri)
include(../../Libraries/GeneralDesktop.pri)

#Specific for this application
#Console
include(../../Classes/CppCanvas/CppCanvas.pri)
include(../../Classes/CppContainer/CppContainer.pri)
include(../../Classes/CppDotMatrix/CppDotMatrix.pri)
include(../../Classes/CppFuzzy_equal_to/CppFuzzy_equal_to.pri)
include(../../Classes/CppImageCanvas/CppImageCanvas.pri)
include(../../Classes/CppTextCanvas/CppTextCanvas.pri)
#Desktop
include(../../Classes/CppQtDotMatrix/CppQtDotMatrix.pri)
include(../../Classes/CppQtCanvas/CppQtCanvas.pri)
include(../../Tools/ToolTestTextCanvas/ToolTestTextCanvasDesktop.pri)

SOURCES += qtmain.cpp

 

 

 

 

 

./ToolTestTextCanvas/ToolTestTextCanvasConsole.pri

 

INCLUDEPATH += \
    ../../Tools/ToolTestTextCanvas

SOURCES += \
    ../../Tools/ToolTestTextCanvas/testtextcanvasmenudialog.cpp

HEADERS += \
    ../../Tools/ToolTestTextCanvas/testtextcanvasmenudialog.h

OTHER_FILES += \
    ../../Tools/ToolTestTextCanvas/Licence.txt

RESOURCES += \
    ../../Tools/ToolTestTextCanvas/ToolTestTextCanvas.qrc

 

 

 

 

 

./ToolTestTextCanvas/ToolTestTextCanvasDesktop.pri

 

include(../../Tools/ToolTestTextCanvas/ToolTestTextCanvasConsole.pri)

FORMS += \
    ../../Tools/ToolTestTextCanvas/qttesttextcanvasmenudialog.ui \
    ../../Tools/ToolTestTextCanvas/qttesttextcanvasmaindialog.ui

SOURCES += \
    ../../Tools/ToolTestTextCanvas/qttesttextcanvasmenudialog.cpp \
    ../../Tools/ToolTestTextCanvas/qttesttextcanvasmaindialog.cpp

HEADERS += \
    ../../Tools/ToolTestTextCanvas/qttesttextcanvasmenudialog.h \
    ../../Tools/ToolTestTextCanvas/qttesttextcanvasmaindialog.h

 

 

 

 

 

./ToolTestTextCanvas/ToolTestTextCanvasWebsite.pri

 

include(../../Tools/ToolTestTextCanvas/ToolTestTextCanvasConsole.pri)

 

 

 

 

 

./ToolTestTextCanvas/main.cpp

 

#include "testtextcanvasmenudialog.h"
#include "trace.h"

int main(int argc, char* argv[])
{
  START_TRACE();
  const std::vector<std::string> args { ribi::MenuDialog::ConvertArguments(argc,argv) };
  return ribi::TestTextCanvasMenuDialog().Execute(args);
}

 

 

 

 

 

./ToolTestTextCanvas/qtmain.cpp

 

#pragma GCC diagnostic push
#pragma GCC diagnostic ignored "-Weffc++"
#pragma GCC diagnostic ignored "-Wunused-local-typedefs"
#include <QApplication>

#include "qttesttextcanvasmenudialog.h"
#include "trace.h"
#pragma GCC diagnostic pop

int main(int argc, char *argv[])
{
  QApplication a(argc, argv);
  START_TRACE();
  ribi::QtTestTextCanvasMenuDialog d;
  d.show();
  return a.exec();
}

 

 

 

 

 

./ToolTestTextCanvas/qttesttextcanvasmaindialog.h

 

#ifndef QTTESTTEXTCANVASMAINDIALOG_H
#define QTTESTTEXTCANVASMAINDIALOG_H

#pragma GCC diagnostic push
#pragma GCC diagnostic ignored "-Weffc++"
#pragma GCC diagnostic ignored "-Wunused-local-typedefs"
#include <boost/shared_ptr.hpp>
#include "qthideandshowdialog.h"
#include "textcanvas.h"
#pragma GCC diagnostic pop

namespace Ui {
  class QtTestTextCanvasMainDialog;
}

namespace ribi {

struct QtCanvas;
struct TextCanvas;

class QtTestTextCanvasMainDialog : public QtHideAndShowDialog
{
  Q_OBJECT
  
public:
  explicit QtTestTextCanvasMainDialog(QWidget *parent = 0);
  QtTestTextCanvasMainDialog(const QtTestTextCanvasMainDialog&) = delete;
  QtTestTextCanvasMainDialog& operator=(const QtTestTextCanvasMainDialog&) = delete;
  ~QtTestTextCanvasMainDialog() noexcept;
  
private slots:

  void on_box_coordinat_system_currentIndexChanged(int index);
  void on_button_char_clicked();
  void on_button_clear_clicked();
  void on_button_text_clicked();

  void on_button_as_dialog_clicked();

private:
  Ui::QtTestTextCanvasMainDialog *ui;
  TextCanvas m_canvas;
  QtCanvas * const m_qtcanvas;

  static TextCanvas CreateCanvas();

  #ifndef NDEBUG
  static void Test() noexcept;
  #endif
};

} //~namespace ribi

#endif // QTTESTTEXTCANVASMAINDIALOG_H

 

 

 

 

 

./ToolTestTextCanvas/qttesttextcanvasmaindialog.cpp

 

#pragma GCC diagnostic push
#pragma GCC diagnostic ignored "-Weffc++"
#pragma GCC diagnostic ignored "-Wunused-local-typedefs"
#include "qttesttextcanvasmaindialog.h"

#include <cassert>
#include <sstream>

#include <boost/bind.hpp>
#include <boost/lambda/lambda.hpp>

#include "qtcanvas.h"
#include "qtcanvasdialog.h"
#include "textcanvas.h"
#include "testtimer.h"
#include "trace.h"
#include "ui_qttesttextcanvasmaindialog.h"
#pragma GCC diagnostic pop

ribi::QtTestTextCanvasMainDialog::QtTestTextCanvasMainDialog(QWidget *parent)
:  QtHideAndShowDialog(parent),
  ui(new Ui::QtTestTextCanvasMainDialog),
  m_canvas(CreateCanvas()),
  m_qtcanvas{new QtCanvas}
{
  #ifndef NDEBUG
  Test();
  #endif
  ui->setupUi(this);

  {
    assert(ui->verticalLayout);
    //m_qtcanvas.reset(new QtCanvas(m_canvas));
    m_qtcanvas->SetTextCanvas(m_canvas);
    ui->verticalLayout->addWidget(m_qtcanvas);
  }

  {
    const double w = m_canvas.GetWidth();
    const double h = m_canvas.GetHeight();
    ui->box_char_x->setValue(0.5 * w);
    ui->box_char_y->setValue(0.5 * h);
    ui->box_text_x->setValue(0.5 * w);
    ui->box_text_y->setValue(0.5 * h);
  }
}

ribi::QtTestTextCanvasMainDialog::~QtTestTextCanvasMainDialog() noexcept
{
  delete ui;
}

ribi::TextCanvas ribi::QtTestTextCanvasMainDialog::CreateCanvas()
{
  const int maxx = 79;
  const int maxy = 23;
  TextCanvas canvas(maxx,maxy);
  canvas.PutText(1,1,"Hello");
  canvas.PutText(2,2,"World");
  return canvas;
}

void ribi::QtTestTextCanvasMainDialog::on_box_coordinat_system_currentIndexChanged(int )
{
  const CanvasCoordinatSystem coordinat_system
    = ui->box_coordinat_system->currentIndex() == 0
    ? CanvasCoordinatSystem::screen : CanvasCoordinatSystem::graph;
  this->m_canvas.SetCoordinatSystem(coordinat_system);
  //Should redraw automatically
}

void ribi::QtTestTextCanvasMainDialog::on_button_clear_clicked()
{
  m_canvas.Clear();
  //Should redraw automatically
}

#ifndef NDEBUG
void ribi::QtTestTextCanvasMainDialog::Test() noexcept
{
  {
    static bool is_tested{false};
    if (is_tested) return;
    is_tested = true;
  }
  {
    TextCanvas();
    QtCanvas();
  }
  const TestTimer test_timer(__func__,__FILE__,1.0);
}
#endif

void ribi::QtTestTextCanvasMainDialog::on_button_char_clicked()
{
  const int x = ui->box_char_x->value();
  const int y = ui->box_char_y->value();
  const std::string s = ui->edit_char->text().toStdString();
  if (s.empty()) return;
  m_canvas.PutChar(x,y,s[0]);
}

void ribi::QtTestTextCanvasMainDialog::on_button_text_clicked()
{
  const int x = ui->box_text_x->value();
  const int y = ui->box_text_y->value();
  const std::string s = ui->edit_text->text().toStdString();
  m_canvas.PutText(x,y,s);
}

void ribi::QtTestTextCanvasMainDialog::on_button_as_dialog_clicked()
{
  QtCanvas * const qtcanvas {
    new QtCanvas
  };
  qtcanvas->SetTextCanvas(m_canvas);

  const boost::scoped_ptr<QtCanvasDialog> d {
    new QtCanvasDialog(qtcanvas)
  };
  this->ShowChild(d.get());
  //qtcanvas will be deleted by QtCanvasDialog

}

 

 

 

 

 

./ToolTestTextCanvas/qttesttextcanvasmenudialog.h

 

#ifndef QTTESTTEXTCANVASMENUDIALOG_H
#define QTTESTTEXTCANVASMENUDIALOG_H

#include "qthideandshowdialog.h"

namespace Ui {
  class QtTestTextCanvasMenuDialog;
}

namespace ribi {

class QtTestTextCanvasMenuDialog : public QtHideAndShowDialog
{
  Q_OBJECT

public:
  explicit QtTestTextCanvasMenuDialog(QWidget *parent = 0);
  QtTestTextCanvasMenuDialog(const QtTestTextCanvasMenuDialog&) = delete;
  QtTestTextCanvasMenuDialog& operator=(const QtTestTextCanvasMenuDialog&) = delete;
  ~QtTestTextCanvasMenuDialog() noexcept;

protected:
  void keyPressEvent(QKeyEvent * event);

private:
  Ui::QtTestTextCanvasMenuDialog *ui;

private slots:
  void on_button_about_clicked();
  void on_button_quit_clicked();
  void on_button_start_canvas_clicked();

  #ifndef NDEBUG
  static void Test() noexcept;
  #endif
};

} //~namespace ribi

#endif // QTTESTTEXTCANVASMENUDIALOG_H

 

 

 

 

 

./ToolTestTextCanvas/qttesttextcanvasmenudialog.cpp

 

#pragma GCC diagnostic push
#pragma GCC diagnostic ignored "-Weffc++"
#pragma GCC diagnostic ignored "-Wunused-local-typedefs"
#include "qttesttextcanvasmenudialog.h"

#include <QDesktopWidget>
#include <QKeyEvent>

#include "testtextcanvasmenudialog.h"
#include "qtaboutdialog.h"
#include "qttesttextcanvasmaindialog.h"
#include "qthideandshowdialog.h"
#include "testtimer.h"
#include "trace.h"
#include "ui_qttesttextcanvasmenudialog.h"
#pragma GCC diagnostic pop

ribi::QtTestTextCanvasMenuDialog::QtTestTextCanvasMenuDialog(
  QWidget *parent)
  : QtHideAndShowDialog(parent),
    ui(new Ui::QtTestTextCanvasMenuDialog)
{
  #ifndef NDEBUG
  Test();
  #endif
  ui->setupUi(this);
}

ribi::QtTestTextCanvasMenuDialog::~QtTestTextCanvasMenuDialog() noexcept
{
  delete ui;
}

void ribi::QtTestTextCanvasMenuDialog::keyPressEvent(QKeyEvent * event)
{
  if (event->key() == Qt::Key_Escape) { close(); return; }
}

void ribi::QtTestTextCanvasMenuDialog::on_button_about_clicked()
{
  About a = TestTextCanvasMenuDialog().GetAbout();
  a.AddLibrary("QtHideAndShowDialog version: " + QtHideAndShowDialog::GetVersion());
  QtAboutDialog d(a);
  d.setWindowIcon(this->windowIcon());
  d.setStyleSheet(this->styleSheet());
  this->ShowChild(&d);
}

void ribi::QtTestTextCanvasMenuDialog::on_button_quit_clicked()
{
  close();
}

void ribi::QtTestTextCanvasMenuDialog::on_button_start_canvas_clicked()
{
  QtTestTextCanvasMainDialog d;
  d.setWindowIcon(this->windowIcon());
  //d.setStyleSheet(this->styleSheet());
  ShowChild(&d);
}

#ifndef NDEBUG
void ribi::QtTestTextCanvasMenuDialog::Test() noexcept
{
  {
    static bool is_tested{false};
    if (is_tested) return;
    is_tested = true;
  }
  {
    TestTextCanvasMenuDialog();
    QtTestTextCanvasMainDialog();
  }
  const TestTimer test_timer(__func__,__FILE__,1.0);
}
#endif

 

 

 

 

 

./ToolTestTextCanvas/testtextcanvasmenudialog.h

 

#ifndef TESTTEXTCANVASMENUDIALOG_H
#define TESTTEXTCANVASMENUDIALOG_H

#include "menudialog.h"

namespace ribi {

///GUI independent TestTextCanvas menu dialog
struct TestTextCanvasMenuDialog final : public MenuDialog
{
  TestTextCanvasMenuDialog();
  About GetAbout() const noexcept override;
  Help GetHelp() const noexcept override;
  boost::shared_ptr<const Program> GetProgram() const noexcept override;
  std::string GetVersion() const noexcept override;
  std::vector<std::string> GetVersionHistory() const noexcept override;

  private:
  int ExecuteSpecific(const std::vector<std::string>& argv) noexcept override;

  #ifndef NDEBUG
  static void Test() noexcept;
  #endif
};

} //~namespace ribi

#endif // TESTTEXTCANVASMENUDIALOG_H

 

 

 

 

 

./ToolTestTextCanvas/testtextcanvasmenudialog.cpp

 

#include "testtextcanvasmenudialog.h"

#include <cassert>
#include <iostream>

#include "fileio.h"
#include "richelbilderbeekprogram.h"
#include "testtimer.h"
#include "textcanvas.h"
#include "trace.h"

ribi::TestTextCanvasMenuDialog::TestTextCanvasMenuDialog()
{
  #ifndef NDEBUG
  Test();
  #endif
}

int ribi::TestTextCanvasMenuDialog::ExecuteSpecific(const std::vector<std::string>& argv) noexcept
{
  const int argc = static_cast<int>(argv.size());
  if (argc != 1)
  {
    std::cout << GetHelp() << '\n';
    return 1;
  }
  //Specify the dimensions of the canvas equal to the screen
  //Coordinat (0,0) is the top-left coordinat
  //Coordinat (79,23) is the bottom-right coordinat
  const int maxx = 69;
  const int maxy = 13;

  for (int i=0; i!=2; ++i)
  {
    const CanvasCoordinatSystem coordinat_system
      = i % 2 ? CanvasCoordinatSystem::graph : CanvasCoordinatSystem::screen;
    TextCanvas c(maxx, maxy, coordinat_system);
    for (int j=0; j!=400; ++j)
    {
      const int x = -maxx + (std::rand() % (2 * maxx));
      const int y = -maxy + (std::rand() % (2 * maxy));
      const std::string s = fileio::FileIo().GetTempFileName();
      c.PutText(x,y,s);
    }
    std::cout << c;
    std::cout << std::endl;
    std::cout << std::endl;
  }
  return 0;
}

ribi::About ribi::TestTextCanvasMenuDialog::GetAbout() const noexcept
{
  About a(
    "Richel Bilderbeek",
    "TestTextCanvas",
    "tests the TextCanvas class",
    "the 9th of January 2014",
    "2014-2015",
    "http://www.richelbilderbeek.nl/ToolTestTextCanvas.htm",
    GetVersion(),
    GetVersionHistory());
  a.AddLibrary("TextCanvas version: " + TextCanvas::GetVersion());
  a.AddLibrary("Trace version: " + Trace::GetVersion());
  return a;
}

ribi::Help ribi::TestTextCanvasMenuDialog::GetHelp() const noexcept
{
  return Help(
    this->GetAbout().GetFileTitle(),
    this->GetAbout().GetFileDescription(),
    {

    },
    {

    }
  );
}

boost::shared_ptr<const ribi::Program> ribi::TestTextCanvasMenuDialog::GetProgram() const noexcept
{
  const boost::shared_ptr<const Program> p {
    new ProgramTestTextCanvas
  };
  assert(p);
  return p;
}

std::string ribi::TestTextCanvasMenuDialog::GetVersion() const noexcept
{
  return "1.0";
}

std::vector<std::string> ribi::TestTextCanvasMenuDialog::GetVersionHistory() const noexcept
{
  return {
    "2014-01-09: version 1.0: initial version"
  };
}

#ifndef NDEBUG
void ribi::TestTextCanvasMenuDialog::Test() noexcept
{
  {
    static bool is_tested{false};
    if (is_tested) return;
    is_tested = true;
  }
  ribi::TextCanvas();
  const TestTimer test_timer(__func__,__FILE__,1.0);
}
#endif

 

 

 

 

 

Go back to Richel Bilderbeek's C++ page.

Go back to Richel Bilderbeek's homepage.

 

Valid XHTML 1.0 Strict

This page has been created by the tool CodeToHtml