1 /////////////////////////////////////////////////////////////////////////////
2 // Name:        SlideDlg.cpp
3 // Purpose:     Slide properties dialog
4 // Author:      Alex Thuering
5 // Created:     23.12.2013
6 // RCS-ID:      $Id: SlideDlg.cpp,v 1.2 2014/01/01 19:47:06 ntalex Exp $
7 // Copyright:   (c) Alex Thuering
8 // Licence:     GPL
9 /////////////////////////////////////////////////////////////////////////////
10 #include "SlideDlg.h"
11 #include "../wxVillaLib/utils.h"
12 #include <wx/file.h>
13 
14 //(*InternalHeaders(SlideDlg)
15 #include <wx/intl.h>
16 #include <wx/button.h>
17 #include <wx/string.h>
18 //*)
19 
20 #include "../wxVillaLib/rc/loading.png.h"
21 #define TRANSITIONS_DIR wxFindDataDirectory(_T("transitions"))
22 
23 //(*IdInit(SlideDlg)
24 const long SlideDlg::ID_FILENAME_TEXT = wxNewId();
25 const long SlideDlg::ID_THUMBNAILS = wxNewId();
26 //*)
27 
BEGIN_EVENT_TABLE(SlideDlg,wxDialog)28 BEGIN_EVENT_TABLE(SlideDlg, wxDialog)
29 	//(*EventTable(SlideDlg)
30 	//*)
31 	EVT_BUTTON(wxID_OK, SlideDlg::OnOkBt)
32 END_EVENT_TABLE()
33 
34 SlideDlg::SlideDlg(wxWindow* parent, Slide* slide, int defaultTranstion) {
35 	m_slide = slide;
36 
37 	//(*Initialize(SlideDlg)
38 	wxBoxSizer* boxSizer1;
39 	wxStdDialogButtonSizer* stdDialogButtonSizer;
40 	wxStaticText* staticText1;
41 	wxStaticBoxSizer* StaticBoxSizer1;
42 	wxBoxSizer* mainSizer;
43 
44 	Create(parent, wxID_ANY, _("Slide properties"), wxDefaultPosition, wxDefaultSize, wxDEFAULT_DIALOG_STYLE|wxRESIZE_BORDER, _T("wxID_ANY"));
45 	SetClientSize(wxSize(500,380));
46 	mainSizer = new wxBoxSizer(wxVERTICAL);
47 	boxSizer1 = new wxBoxSizer(wxHORIZONTAL);
48 	staticText1 = new wxStaticText(this, wxID_ANY, _("File name:"), wxDefaultPosition, wxDefaultSize, 0, _T("wxID_ANY"));
49 	boxSizer1->Add(staticText1, 0, wxRIGHT|wxALIGN_CENTER_HORIZONTAL|wxALIGN_CENTER_VERTICAL, 2);
50 	m_fileNameText = new wxStaticText(this, ID_FILENAME_TEXT, wxEmptyString, wxDefaultPosition, wxDefaultSize, 0, _T("ID_FILENAME_TEXT"));
51 	boxSizer1->Add(m_fileNameText, 1, wxALIGN_CENTER_HORIZONTAL|wxALIGN_CENTER_VERTICAL, 5);
52 	mainSizer->Add(boxSizer1, 0, wxTOP|wxLEFT|wxRIGHT|wxEXPAND, 5);
53 	StaticBoxSizer1 = new wxStaticBoxSizer(wxHORIZONTAL, this, _("Transition:"));
54 	m_thumbnails = new wxThumbnails(this,ID_THUMBNAILS);
55 	StaticBoxSizer1->Add(m_thumbnails, 1, wxLEFT|wxRIGHT|wxEXPAND, 0);
56 	mainSizer->Add(StaticBoxSizer1, 1, wxALL|wxEXPAND, 5);
57 	stdDialogButtonSizer = new wxStdDialogButtonSizer();
58 	stdDialogButtonSizer->AddButton(new wxButton(this, wxID_OK, wxEmptyString));
59 	stdDialogButtonSizer->AddButton(new wxButton(this, wxID_CANCEL, wxEmptyString));
60 	stdDialogButtonSizer->Realize();
61 	mainSizer->Add(stdDialogButtonSizer, 0, wxALL|wxEXPAND, 5);
62 	SetSizer(mainSizer);
63 	SetSizer(mainSizer);
64 	Layout();
65 	Center();
66 	//*)
67 	stdDialogButtonSizer->GetAffirmativeButton()->SetDefault();
68 
69 	m_fileNameText->SetLabel(m_slide->GetFilename());m_thumbnails->Clear();
70 	wxArrayString labels;
71 	Slideshow::GetTransitions(m_transitions, labels);
72 	labels[0] = _("Default") + wxString(wxT(" (")) + labels[defaultTranstion] + wxT(")");
73 	m_transitions[0] = wxT("");
74 	int sel = 0;
75 	for (unsigned int i = 0; i < m_transitions.GetCount(); i++) {
76 		if (m_transitions[i] == m_slide->GetTransition()) {
77 			sel = i;
78 		}
79 		wxImage img = getTransitionImage(m_transitions[i == 0 ? defaultTranstion : i]);
80 		wxThumb* thumb = new wxThumb(img, labels[i],  m_transitions[i]);
81 		m_thumbnails->InsertItem(thumb);
82 	}
83 
84 	if (m_thumbnails->GetItemCount() > 0)
85 		m_thumbnails->SetSelected(sel);
86 	m_thumbnails->Update();
87 	m_thumbnails->SetFocus();
88 }
89 
~SlideDlg()90 SlideDlg::~SlideDlg() {
91 	//(*Destroy(SlideDlg)
92 	//*)
93 }
94 
getTransitionImage(const wxString & transition)95 wxImage SlideDlg::getTransitionImage(const wxString& transition) {
96 	wxString imgFile;
97 	if (transition.length() == 0 || transition == wxT("none")) {
98 		imgFile = TRANSITIONS_DIR + wxT("none.png");
99 	} else if (transition == wxT("random")) {
100 		imgFile = TRANSITIONS_DIR + wxT("random.png");
101 	} else {
102 		imgFile = TRANSITIONS_DIR + transition.BeforeLast(wxT('.')) + wxT(".png");
103 	}
104 
105 	wxImage img;
106 	if (wxFile::Exists(imgFile)) {
107 		img.LoadFile(imgFile);
108 	} else {
109 		img = wxBITMAP_FROM_MEMORY(loading).ConvertToImage();
110 	}
111 	return img;
112 }
113 
OnOkBt(wxCommandEvent & event)114 void SlideDlg::OnOkBt(wxCommandEvent& event) {
115 	m_slide->SetTransition(m_transitions[m_thumbnails->GetSelected() >= 0 ? m_thumbnails->GetSelected() : 0]);
116 	this->EndModal(wxID_OK);
117 }
118 
119