wxPictureWindow.cpp
author viric <viriketo@gmail.com>
Sun, 24 Apr 2011 14:26:29 +0200
changeset 2 b2772bffb62f
parent 1 506e0fc65ba3
child 3 b29987bfe7ed
permissions -rw-r--r--
Outputting crop.txt now.
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
0
7e720dcafcaf First checkin. It works enough.
viric@mandarina
parents:
diff changeset
     1
#include <wx/scrolwin.h>
7e720dcafcaf First checkin. It works enough.
viric@mandarina
parents:
diff changeset
     2
#include <wx/image.h>
7e720dcafcaf First checkin. It works enough.
viric@mandarina
parents:
diff changeset
     3
#include <wx/bitmap.h>
7e720dcafcaf First checkin. It works enough.
viric@mandarina
parents:
diff changeset
     4
#include <wx/dc.h>
7e720dcafcaf First checkin. It works enough.
viric@mandarina
parents:
diff changeset
     5
#include <iostream>
2
b2772bffb62f Outputting crop.txt now.
viric <viriketo@gmail.com>
parents: 1
diff changeset
     6
#include <fstream>
0
7e720dcafcaf First checkin. It works enough.
viric@mandarina
parents:
diff changeset
     7
#include "wxPictureWindow.hpp"
1
506e0fc65ba3 Ara processo la tecla ESC, almenys, i ho preparo per un next_picture
viric <viriketo@gmail.com>
parents: 0
diff changeset
     8
#include "MainWindow.hpp"
0
7e720dcafcaf First checkin. It works enough.
viric@mandarina
parents:
diff changeset
     9
7e720dcafcaf First checkin. It works enough.
viric@mandarina
parents:
diff changeset
    10
const int factor = 3;
7e720dcafcaf First checkin. It works enough.
viric@mandarina
parents:
diff changeset
    11
7e720dcafcaf First checkin. It works enough.
viric@mandarina
parents:
diff changeset
    12
BEGIN_EVENT_TABLE(wxPictureWindow, wxScrolledWindow)
7e720dcafcaf First checkin. It works enough.
viric@mandarina
parents:
diff changeset
    13
  EVT_MOUSE_EVENTS (wxPictureWindow::OnMouse)
1
506e0fc65ba3 Ara processo la tecla ESC, almenys, i ho preparo per un next_picture
viric <viriketo@gmail.com>
parents: 0
diff changeset
    14
  EVT_KEY_UP (wxPictureWindow::OnKey)
0
7e720dcafcaf First checkin. It works enough.
viric@mandarina
parents:
diff changeset
    15
END_EVENT_TABLE()
7e720dcafcaf First checkin. It works enough.
viric@mandarina
parents:
diff changeset
    16
2
b2772bffb62f Outputting crop.txt now.
viric <viriketo@gmail.com>
parents: 1
diff changeset
    17
wxPictureWindow::wxPictureWindow(const wxString &img, const CropArea area, wxWindow *parent)
0
7e720dcafcaf First checkin. It works enough.
viric@mandarina
parents:
diff changeset
    18
    :wxScrolledWindow(parent, wxID_ANY),
7e720dcafcaf First checkin. It works enough.
viric@mandarina
parents:
diff changeset
    19
    _area(area)
7e720dcafcaf First checkin. It works enough.
viric@mandarina
parents:
diff changeset
    20
{
1
506e0fc65ba3 Ara processo la tecla ESC, almenys, i ho preparo per un next_picture
viric <viriketo@gmail.com>
parents: 0
diff changeset
    21
    SetImg(img);
0
7e720dcafcaf First checkin. It works enough.
viric@mandarina
parents:
diff changeset
    22
    _area.x /= factor;
7e720dcafcaf First checkin. It works enough.
viric@mandarina
parents:
diff changeset
    23
    _area.y /= factor;
7e720dcafcaf First checkin. It works enough.
viric@mandarina
parents:
diff changeset
    24
    _area.width /= factor;
7e720dcafcaf First checkin. It works enough.
viric@mandarina
parents:
diff changeset
    25
    _area.height /= factor;
1
506e0fc65ba3 Ara processo la tecla ESC, almenys, i ho preparo per un next_picture
viric <viriketo@gmail.com>
parents: 0
diff changeset
    26
    SetScrollRate(10, 10);
506e0fc65ba3 Ara processo la tecla ESC, almenys, i ho preparo per un next_picture
viric <viriketo@gmail.com>
parents: 0
diff changeset
    27
    SetFocus();
506e0fc65ba3 Ara processo la tecla ESC, almenys, i ho preparo per un next_picture
viric <viriketo@gmail.com>
parents: 0
diff changeset
    28
}
506e0fc65ba3 Ara processo la tecla ESC, almenys, i ho preparo per un next_picture
viric <viriketo@gmail.com>
parents: 0
diff changeset
    29
506e0fc65ba3 Ara processo la tecla ESC, almenys, i ho preparo per un next_picture
viric <viriketo@gmail.com>
parents: 0
diff changeset
    30
void
2
b2772bffb62f Outputting crop.txt now.
viric <viriketo@gmail.com>
parents: 1
diff changeset
    31
wxPictureWindow::SetImg(const wxString &img)
1
506e0fc65ba3 Ara processo la tecla ESC, almenys, i ho preparo per un next_picture
viric <viriketo@gmail.com>
parents: 0
diff changeset
    32
{
2
b2772bffb62f Outputting crop.txt now.
viric <viriketo@gmail.com>
parents: 1
diff changeset
    33
    _filename = img;
b2772bffb62f Outputting crop.txt now.
viric <viriketo@gmail.com>
parents: 1
diff changeset
    34
    wxLogVerbose(_T("Opening file %s."), img.c_str());
b2772bffb62f Outputting crop.txt now.
viric <viriketo@gmail.com>
parents: 1
diff changeset
    35
    wxImage i(img);
b2772bffb62f Outputting crop.txt now.
viric <viriketo@gmail.com>
parents: 1
diff changeset
    36
    if (!i.IsOk())
b2772bffb62f Outputting crop.txt now.
viric <viriketo@gmail.com>
parents: 1
diff changeset
    37
    {
b2772bffb62f Outputting crop.txt now.
viric <viriketo@gmail.com>
parents: 1
diff changeset
    38
        wxLogFatalError(_T("Error opening file %s."), img.c_str());
b2772bffb62f Outputting crop.txt now.
viric <viriketo@gmail.com>
parents: 1
diff changeset
    39
    }
b2772bffb62f Outputting crop.txt now.
viric <viriketo@gmail.com>
parents: 1
diff changeset
    40
b2772bffb62f Outputting crop.txt now.
viric <viriketo@gmail.com>
parents: 1
diff changeset
    41
    i.Rescale(i.GetWidth()/3, i.GetHeight()/3);
b2772bffb62f Outputting crop.txt now.
viric <viriketo@gmail.com>
parents: 1
diff changeset
    42
b2772bffb62f Outputting crop.txt now.
viric <viriketo@gmail.com>
parents: 1
diff changeset
    43
    _bmp = wxBitmap(i);
1
506e0fc65ba3 Ara processo la tecla ESC, almenys, i ho preparo per un next_picture
viric <viriketo@gmail.com>
parents: 0
diff changeset
    44
    SetVirtualSize(_bmp.GetWidth(), _bmp.GetHeight());
0
7e720dcafcaf First checkin. It works enough.
viric@mandarina
parents:
diff changeset
    45
}
7e720dcafcaf First checkin. It works enough.
viric@mandarina
parents:
diff changeset
    46
7e720dcafcaf First checkin. It works enough.
viric@mandarina
parents:
diff changeset
    47
void wxPictureWindow::OnDraw(wxDC &dc)
7e720dcafcaf First checkin. It works enough.
viric@mandarina
parents:
diff changeset
    48
{
7e720dcafcaf First checkin. It works enough.
viric@mandarina
parents:
diff changeset
    49
    dc.DrawBitmap(_bmp, 0, 0, false);
7e720dcafcaf First checkin. It works enough.
viric@mandarina
parents:
diff changeset
    50
7e720dcafcaf First checkin. It works enough.
viric@mandarina
parents:
diff changeset
    51
    wxRect rect(_area.x, _area.y, _area.width, _area.height);
7e720dcafcaf First checkin. It works enough.
viric@mandarina
parents:
diff changeset
    52
    dc.SetPen(*wxGREEN_PEN);
7e720dcafcaf First checkin. It works enough.
viric@mandarina
parents:
diff changeset
    53
    dc.SetBrush(*wxTRANSPARENT_BRUSH);
7e720dcafcaf First checkin. It works enough.
viric@mandarina
parents:
diff changeset
    54
    dc.DrawRectangle(rect);
7e720dcafcaf First checkin. It works enough.
viric@mandarina
parents:
diff changeset
    55
}
7e720dcafcaf First checkin. It works enough.
viric@mandarina
parents:
diff changeset
    56
7e720dcafcaf First checkin. It works enough.
viric@mandarina
parents:
diff changeset
    57
void wxPictureWindow::OnMouse(wxMouseEvent &ev)
7e720dcafcaf First checkin. It works enough.
viric@mandarina
parents:
diff changeset
    58
{
7e720dcafcaf First checkin. It works enough.
viric@mandarina
parents:
diff changeset
    59
    wxClientDC dc(this);
7e720dcafcaf First checkin. It works enough.
viric@mandarina
parents:
diff changeset
    60
    DoPrepareDC(dc);
7e720dcafcaf First checkin. It works enough.
viric@mandarina
parents:
diff changeset
    61
7e720dcafcaf First checkin. It works enough.
viric@mandarina
parents:
diff changeset
    62
    if (ev.LeftDown())
7e720dcafcaf First checkin. It works enough.
viric@mandarina
parents:
diff changeset
    63
    {
7e720dcafcaf First checkin. It works enough.
viric@mandarina
parents:
diff changeset
    64
        _area.x = ev.GetLogicalPosition(dc).x;
7e720dcafcaf First checkin. It works enough.
viric@mandarina
parents:
diff changeset
    65
        _area.y = ev.GetLogicalPosition(dc).y;
7e720dcafcaf First checkin. It works enough.
viric@mandarina
parents:
diff changeset
    66
        _area.width = 0;
7e720dcafcaf First checkin. It works enough.
viric@mandarina
parents:
diff changeset
    67
        _area.height = 0;
7e720dcafcaf First checkin. It works enough.
viric@mandarina
parents:
diff changeset
    68
    }
7e720dcafcaf First checkin. It works enough.
viric@mandarina
parents:
diff changeset
    69
    else if (ev.LeftIsDown())
7e720dcafcaf First checkin. It works enough.
viric@mandarina
parents:
diff changeset
    70
    {
7e720dcafcaf First checkin. It works enough.
viric@mandarina
parents:
diff changeset
    71
        _area.width = ev.GetLogicalPosition(dc).x - _area.x;
7e720dcafcaf First checkin. It works enough.
viric@mandarina
parents:
diff changeset
    72
        _area.height = ev.GetLogicalPosition(dc).y - _area.y;
7e720dcafcaf First checkin. It works enough.
viric@mandarina
parents:
diff changeset
    73
    }
7e720dcafcaf First checkin. It works enough.
viric@mandarina
parents:
diff changeset
    74
7e720dcafcaf First checkin. It works enough.
viric@mandarina
parents:
diff changeset
    75
    Refresh();
7e720dcafcaf First checkin. It works enough.
viric@mandarina
parents:
diff changeset
    76
}
7e720dcafcaf First checkin. It works enough.
viric@mandarina
parents:
diff changeset
    77
7e720dcafcaf First checkin. It works enough.
viric@mandarina
parents:
diff changeset
    78
wxPictureWindow::~wxPictureWindow()
7e720dcafcaf First checkin. It works enough.
viric@mandarina
parents:
diff changeset
    79
{
7e720dcafcaf First checkin. It works enough.
viric@mandarina
parents:
diff changeset
    80
}
1
506e0fc65ba3 Ara processo la tecla ESC, almenys, i ho preparo per un next_picture
viric <viriketo@gmail.com>
parents: 0
diff changeset
    81
506e0fc65ba3 Ara processo la tecla ESC, almenys, i ho preparo per un next_picture
viric <viriketo@gmail.com>
parents: 0
diff changeset
    82
void
506e0fc65ba3 Ara processo la tecla ESC, almenys, i ho preparo per un next_picture
viric <viriketo@gmail.com>
parents: 0
diff changeset
    83
wxPictureWindow::OnKey(wxKeyEvent &e)
506e0fc65ba3 Ara processo la tecla ESC, almenys, i ho preparo per un next_picture
viric <viriketo@gmail.com>
parents: 0
diff changeset
    84
{
506e0fc65ba3 Ara processo la tecla ESC, almenys, i ho preparo per un next_picture
viric <viriketo@gmail.com>
parents: 0
diff changeset
    85
    using namespace std;
506e0fc65ba3 Ara processo la tecla ESC, almenys, i ho preparo per un next_picture
viric <viriketo@gmail.com>
parents: 0
diff changeset
    86
    if (e.GetKeyCode() == WXK_ESCAPE)
506e0fc65ba3 Ara processo la tecla ESC, almenys, i ho preparo per un next_picture
viric <viriketo@gmail.com>
parents: 0
diff changeset
    87
    {
2
b2772bffb62f Outputting crop.txt now.
viric <viriketo@gmail.com>
parents: 1
diff changeset
    88
        std::ofstream of("crop.txt", std::fstream::app);
b2772bffb62f Outputting crop.txt now.
viric <viriketo@gmail.com>
parents: 1
diff changeset
    89
        of << (const char *) _filename.mb_str() << " ";
b2772bffb62f Outputting crop.txt now.
viric <viriketo@gmail.com>
parents: 1
diff changeset
    90
        of << _area.x * factor << " ";
b2772bffb62f Outputting crop.txt now.
viric <viriketo@gmail.com>
parents: 1
diff changeset
    91
        of << _area.y * factor << " ";
b2772bffb62f Outputting crop.txt now.
viric <viriketo@gmail.com>
parents: 1
diff changeset
    92
        of << _area.width * factor << " ";
b2772bffb62f Outputting crop.txt now.
viric <viriketo@gmail.com>
parents: 1
diff changeset
    93
        of << _area.height * factor << std::endl;
b2772bffb62f Outputting crop.txt now.
viric <viriketo@gmail.com>
parents: 1
diff changeset
    94
1
506e0fc65ba3 Ara processo la tecla ESC, almenys, i ho preparo per un next_picture
viric <viriketo@gmail.com>
parents: 0
diff changeset
    95
        wxCommandEvent e(EVT_NEXTPICTURE);
506e0fc65ba3 Ara processo la tecla ESC, almenys, i ho preparo per un next_picture
viric <viriketo@gmail.com>
parents: 0
diff changeset
    96
        GetParent()->AddPendingEvent(e);
506e0fc65ba3 Ara processo la tecla ESC, almenys, i ho preparo per un next_picture
viric <viriketo@gmail.com>
parents: 0
diff changeset
    97
    }
506e0fc65ba3 Ara processo la tecla ESC, almenys, i ho preparo per un next_picture
viric <viriketo@gmail.com>
parents: 0
diff changeset
    98
    else
506e0fc65ba3 Ara processo la tecla ESC, almenys, i ho preparo per un next_picture
viric <viriketo@gmail.com>
parents: 0
diff changeset
    99
        e.Skip();
506e0fc65ba3 Ara processo la tecla ESC, almenys, i ho preparo per un next_picture
viric <viriketo@gmail.com>
parents: 0
diff changeset
   100
}