~s-cecilio/lenmus/v5.3

« back to all changes in this revision

Viewing changes to src/mdi/ClientWindow.cpp

  • Committer: cecilios
  • Date: 2012-09-11 16:59:18 UTC
  • Revision ID: svn-v4:2587a929-2f0e-0410-ae78-fe6f687d5efe:branches/TRY-5.0:730
Paths: fixed problem with installation folders. Fixed Chinese ISO language code

Show diffs side-by-side

added added

removed removed

Lines of Context:
1
 
//--------------------------------------------------------------------------------------
2
 
//    LenMus Phonascus: The teacher of music
3
 
//    Copyright (c) 2002-2007 Cecilio Salmeron
4
 
//
5
 
//    This program is free software; you can redistribute it and/or modify it under the 
6
 
//    terms of the GNU General Public License as published by the Free Software Foundation;
7
 
//    either version 2 of the License, or (at your option) any later version.
8
 
//
9
 
//    This program is distributed in the hope that it will be useful, but WITHOUT ANY 
10
 
//    WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A 
11
 
//    PARTICULAR PURPOSE.  See the GNU General Public License for more details.
12
 
//
13
 
//    You should have received a copy of the GNU General Public License along with this 
14
 
//    program; if not, write to the Free Software Foundation, Inc., 51 Franklin Street, 
15
 
//    Fifth Floor, Boston, MA  02110-1301, USA.
16
 
//
17
 
//    For any comment, suggestion or feature request, please contact the manager of 
18
 
//    the project at cecilios@users.sourceforge.net
19
 
//
20
 
//-------------------------------------------------------------------------------------
21
 
 
22
 
#include "../app/global.h"
23
 
 
24
 
#if lmUSE_NOTEBOOK_MDI
25
 
 
26
 
 
27
 
// For compilers that support precompilation, includes "wx.h".
28
 
#include "wx/wxprec.h"
29
 
 
30
 
#ifdef __BORLANDC__
31
 
    #pragma hdrstop
32
 
#endif
33
 
 
34
 
 
35
 
#include "ParentFrame.h"
36
 
#include "ChildFrame.h"
37
 
#include "ClientWindow.h"
38
 
 
39
 
 
40
 
#ifndef WX_PRECOMP
41
 
    #include "wx/panel.h"
42
 
    #include "wx/menu.h"
43
 
    #include "wx/intl.h"
44
 
    #include "wx/log.h"
45
 
#endif
46
 
 
47
 
 
48
 
//-----------------------------------------------------------------------------
49
 
// lmMDIClientWindow
50
 
//    The client window is the area where MDI child windows exist. It doesn't 
51
 
//    have to cover the whole parent frame; other windows such as toolbars and 
52
 
//    a help window might coexist with it. There can be scrollbars on a client 
53
 
//    window, which are controlled by the parent window style.
54
 
//    As client I will use wxAuiNotebook
55
 
//
56
 
//    The MDIClientWindow object is created by the MDI parent frame, in the 
57
 
//    constructor. And is deleted also by MDIParentFrame in its destructor.
58
 
//
59
 
//-----------------------------------------------------------------------------
60
 
 
61
 
#define lmID_NOTEBOOK wxID_HIGHEST + 100
62
 
 
63
 
IMPLEMENT_DYNAMIC_CLASS(lmMDIClientWindow, wxAuiNotebook)
64
 
 
65
 
BEGIN_EVENT_TABLE(lmMDIClientWindow, wxAuiNotebook)
66
 
    EVT_SIZE(lmMDIClientWindow::OnSize)
67
 
    EVT_AUINOTEBOOK_PAGE_CLOSE(wxID_ANY, lmMDIClientWindow::OnChildClose)
68
 
END_EVENT_TABLE()
69
 
 
70
 
 
71
 
lmMDIClientWindow::lmMDIClientWindow()
72
 
{
73
 
}
74
 
 
75
 
lmMDIClientWindow::lmMDIClientWindow( lmMDIParentFrame *parent, long style )
76
 
{
77
 
    //SetWindowStyleFlag(style);
78
 
    wxAuiNotebook::Create(parent, lmID_NOTEBOOK, wxPoint(0,0), 
79
 
        wxSize(100, 100), style);
80
 
}
81
 
 
82
 
lmMDIClientWindow::~lmMDIClientWindow()
83
 
{
84
 
}
85
 
 
86
 
int lmMDIClientWindow::SetSelection(size_t nPage)
87
 
{
88
 
    int oldSelection = wxAuiNotebook::SetSelection(nPage);
89
 
    return oldSelection;
90
 
}
91
 
 
92
 
void lmMDIClientWindow::PageChanged(int OldSelection, int newSelection)
93
 
{
94
 
    // Don't do to much work, only when something realy should change!
95
 
    if (OldSelection == newSelection)
96
 
        return;
97
 
    // Again check if we realy need to do this...
98
 
    if (newSelection != -1)
99
 
    {
100
 
        lmMDIChildFrame* child = (lmMDIChildFrame *)GetPage(newSelection);
101
 
 
102
 
        if (child->GetMDIParentFrame()->GetActiveChild() == child)
103
 
            return;
104
 
    }
105
 
}
106
 
 
107
 
void lmMDIClientWindow::OnSize(wxSizeEvent& event)
108
 
{
109
 
    wxAuiNotebook::OnSize(event);
110
 
 
111
 
    size_t pos;
112
 
    for (pos = 0; pos < GetPageCount(); pos++)
113
 
    {
114
 
        ((lmMDIChildFrame *)GetPage(pos))->ApplyMDIChildFrameRect();
115
 
    }
116
 
}
117
 
 
118
 
lmMDIChildFrame* lmMDIClientWindow::GetSelectedPage()
119
 
{
120
 
    if (GetPageCount() > 0)
121
 
        return (lmMDIChildFrame*)GetPage(GetSelection());
122
 
    else
123
 
        return (lmMDIChildFrame*) NULL;
124
 
}
125
 
 
126
 
void lmMDIClientWindow::OnChildClose(wxAuiNotebookEvent& evt)
127
 
{    
128
 
    //Do not allow direct closing of lmMDIChildFrame by wxAuiNotebook as it deletes
129
 
    //the child frames and this causes problems with the view/doc model.
130
 
    //So lets veto page closing and proceed to a controlled close.
131
 
    evt.Veto();
132
 
 
133
 
    //proceed to a controlled close
134
 
    int iPage = GetSelection();
135
 
    GetPage(iPage)->Close();
136
 
    RemovePage(iPage);
137
 
 
138
 
}
139
 
 
140
 
#endif  //lmUSE_NOTEBOOK_MDI