~s-cecilio/lenmus/v5.3

« back to all changes in this revision

Viewing changes to src/app/scoreView.h

  • Committer: cecilios
  • Date: 2006-03-05 11:33:10 UTC
  • Revision ID: svn-v4:2587a929-2f0e-0410-ae78-fe6f687d5efe:trunk:2
Initial import

Show diffs side-by-side

added added

removed removed

Lines of Context:
 
1
// RCS-ID: $Id: scoreView.h,v 1.3 2006/02/23 19:17:49 cecilios Exp $
 
2
//--------------------------------------------------------------------------------------
 
3
//    LenMus Phonascus: The teacher of music
 
4
//    Copyright (c) 2002-2006 Cecilio Salmeron
 
5
//
 
6
//    This program is free software; you can redistribute it and/or modify it under the 
 
7
//    terms of the GNU General Public License as published by the Free Software Foundation;
 
8
//    either version 2 of the License, or (at your option) any later version.
 
9
//
 
10
//    This program is distributed in the hope that it will be useful, but WITHOUT ANY 
 
11
//    WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A 
 
12
//    PARTICULAR PURPOSE.  See the GNU General Public License for more details.
 
13
//
 
14
//    You should have received a copy of the GNU General Public License along with this 
 
15
//    program; if not, write to the Free Software Foundation, Inc., 51 Franklin Street, 
 
16
//    Fifth Floor, Boston, MA  02110-1301, USA.
 
17
//
 
18
//    For any comment, suggestion or feature request, please contact the manager of 
 
19
//    the project at cecilios@users.sourceforge.net
 
20
//
 
21
//-------------------------------------------------------------------------------------
 
22
/*! @file scoreview.h
 
23
    @brief Header file for class lmScoreView
 
24
    @ingroup app_gui
 
25
*/
 
26
#ifdef __GNUG__
 
27
// #pragma interface
 
28
#endif
 
29
 
 
30
#ifndef __SCOREVIEWH__        //to avoid nested includes
 
31
#define __SCOREVIEWH__
 
32
 
 
33
#if wxUSE_GENERIC_DRAGIMAGE
 
34
#include "wx/generic/dragimgg.h"
 
35
#define wxDragImage wxGenericDragImage
 
36
#else
 
37
#include "wx/dragimag.h"
 
38
#endif
 
39
 
 
40
 
 
41
#include "wx/docview.h"
 
42
#include "ScoreCanvas.h"
 
43
#include "EditFrame.h"
 
44
#include "Paper.h"
 
45
#include "../widgets/Ruler.h"
 
46
#include "FontManager.h"
 
47
#include "../sound/SoundEvents.h"
 
48
 
 
49
class lmScoreObj;
 
50
 
 
51
class lmScoreView: public wxView
 
52
{
 
53
public:
 
54
    lmScoreView();
 
55
    ~lmScoreView();
 
56
 
 
57
    bool OnCreate(wxDocument* doc, long WXUNUSED(flags));
 
58
    void OnDraw(wxDC *dc);
 
59
    void RepaintScoreRectangle(wxDC* pDC, wxRect& repaintRect);
 
60
    void OnUpdate(wxView *WXUNUSED(sender), wxObject *WXUNUSED(hint) = (wxObject *) NULL);
 
61
    bool OnClose(bool deleteWindow = TRUE);
 
62
 
 
63
    void OnCut(wxCommandEvent& event);
 
64
 
 
65
    // options
 
66
 
 
67
    void SetScale(double rScale);
 
68
    double GetScale() { return m_rScale; }
 
69
    void SetRulersVisible(bool fVisible);
 
70
 
 
71
    // debug options
 
72
 
 
73
    //methods for dealing with user interaction
 
74
    void OnMouseEvent(wxMouseEvent& event, wxDC* pDC);
 
75
    void OnScroll(wxScrollEvent& event);
 
76
 
 
77
    //scrolling and painting
 
78
    void AdjustScrollbars();
 
79
    void ResizeControls();
 
80
    void GetViewStart (int *x, int *y) const;
 
81
    void GetScrollPixelsPerUnit (int *x_unit, int *y_unit) const;
 
82
 
 
83
    // print/preview
 
84
    void GetPageInfo(int* pMinPage, int* pMaxPage, int* pSelPageFrom, int* pSelPageTo);
 
85
    void DrawPage(wxDC* pDC, int nPage);
 
86
 
 
87
    // sound related methods
 
88
    void PlayScore();
 
89
    void StopPlaying();
 
90
    void PausePlaying();
 
91
    void OnVisualHighlight(lmScoreHighlightEvent& event);
 
92
 
 
93
 
 
94
private:
 
95
        ////-- methods ---
 
96
 
 
97
    // Auxiliary for rendering the view
 
98
    void InvalidateBitmap();
 
99
 
 
100
    // Auxiliary for scrolling
 
101
    int CalcScrollInc(wxScrollEvent& event);
 
102
    void DoScroll(wxInt32 orientation, wxInt32 nScrollSteps);
 
103
 
 
104
        ////-- variables ---
 
105
 
 
106
    lmEditFrame*            m_pFrame;    // the frame for the view
 
107
    lmScoreCanvas*        m_pCanvas;    // the window for rendering the view
 
108
 
 
109
    // controls on the window
 
110
    lmRuler*        m_pHRuler;    //rulers
 
111
    lmRuler*        m_pVRuler;
 
112
    wxScrollBar*    m_pHScroll;    // scrollbars
 
113
    wxScrollBar*    m_pVScroll;
 
114
 
 
115
    // scrolling management
 
116
    wxInt32        m_xScrollPosition, m_yScrollPosition;    // current display origin (scroll units)
 
117
    wxInt32        m_pixelsPerStepX, m_pixelsPerStepY;        // pixels per scroll unit
 
118
    wxInt32        m_xMaxScrollSteps, m_yMaxScrollSteps;            // num of scroll units to scroll the full view
 
119
    wxInt32        m_xScrollStepsPerPage, m_yScrollStepsPerPage;    // scroll units to scroll a page
 
120
    wxInt32        m_thumbX, m_thumbY;                        // scrollbars thumbs size
 
121
 
 
122
    double        m_rScale;        // presentation scale
 
123
    lmPaper        m_Paper;        // the lmPaper object to use
 
124
 
 
125
    // visual options
 
126
    bool        m_fRulers;        // draw rulers
 
127
 
 
128
    // positioning of page images (in pixels) onto the view space. This is 
 
129
    // a virtual infinite paper on which all pages are rendered one after the other.
 
130
    lmPixels    m_xPageSizeD, m_yPageSizeD;    // pages size in pixels
 
131
    lmPixels    m_xBorder;                // margin on both sides, left and rigth, of the page
 
132
    lmPixels    m_yBorder;                // top margin before the first page
 
133
    lmPixels    m_yInterpageGap;        // gap between pages
 
134
    wxInt32        m_numPages;                // the current number of pages contained in the view space
 
135
 
 
136
    // scaling factors between display pixels and logical units
 
137
    double        m_xDisplayPixelsPerLU;
 
138
    double        m_yDisplayPixelsPerLU;
 
139
 
 
140
    // dragging control variables
 
141
    int             m_dragState;
 
142
    wxPoint         m_dragStartPosL;
 
143
    wxPoint            m_dragHotSpot;        // pixels
 
144
    wxDragImage*    m_pDragImage;
 
145
    lmScoreObj*        m_pSoDrag;            // lmScoreObj being dragged
 
146
 
 
147
    // font management
 
148
    lmFontManager    m_fontManager;
 
149
 
 
150
    DECLARE_DYNAMIC_CLASS(lmScoreView)
 
151
    DECLARE_EVENT_TABLE()
 
152
};
 
153
 
 
154
 
 
155
 
 
156
#endif    // __SCOREVIEWH__