Port DialogJumpTo to agi::Context

Originally committed to SVN as r5255.
This commit is contained in:
Thomas Goyne 2011-01-21 04:57:28 +00:00
parent e8b8f876bd
commit 1f79d89e5b
3 changed files with 49 additions and 114 deletions

View File

@ -277,7 +277,7 @@ struct video_jump : public Command {
void operator()(agi::Context *c) { void operator()(agi::Context *c) {
c->videoController->Stop(); c->videoController->Stop();
if (c->videoController->IsLoaded()) { if (c->videoController->IsLoaded()) {
DialogJumpTo(c->parent).ShowModal(); DialogJumpTo(c).ShowModal();
c->videoBox->videoSlider->SetFocus(); c->videoBox->videoSlider->SetFocus();
} }
} }

View File

@ -45,49 +45,45 @@
#endif #endif
#include "dialog_jumpto.h" #include "dialog_jumpto.h"
#include "include/aegisub/context.h"
#include "ass_time.h"
#include "libresrc/libresrc.h" #include "libresrc/libresrc.h"
#include "timeedit_ctrl.h"
#include "utils.h" #include "utils.h"
#include "video_context.h" #include "video_context.h"
/// Event IDs DialogJumpTo::DialogJumpTo(agi::Context *c)
enum { : wxDialog(c->parent, -1, _("Jump to"), wxDefaultPosition, wxDefaultSize, wxDEFAULT_DIALOG_STYLE | wxWANTS_CHARS , "JumpTo")
TEXT_JUMP_TIME = 1100, , c(c)
TEXT_JUMP_FRAME , jumpframe(c->videoController->GetFrameN())
};
/// @brief Constructor
/// @param parent
///
DialogJumpTo::DialogJumpTo (wxWindow *parent)
: wxDialog(parent, -1, _("Jump to"), wxDefaultPosition, wxDefaultSize, wxDEFAULT_DIALOG_STYLE | wxWANTS_CHARS , _T("JumpTo"))
{ {
SetIcon(BitmapToIcon(GETIMAGE(jumpto_button_24))); SetIcon(BitmapToIcon(GETIMAGE(jumpto_button_24)));
// Set initial values // Set initial values
ready = false; AssTime jumptime;
jumpframe = VideoContext::Get()->GetFrameN(); jumptime.SetMS(c->videoController->TimeAtFrame(jumpframe));
jumptime.SetMS(VideoContext::Get()->TimeAtFrame(jumpframe)); wxString maxLength = wxString::Format("%i",c->videoController->GetLength() - 1);
wxString maxLength = wxString::Format(_T("%i"),VideoContext::Get()->GetLength()-1);
// Times // Times
wxStaticText *LabelFrame = new wxStaticText(this,-1,_("Frame: "),wxDefaultPosition,wxSize(60,20)); wxStaticText *LabelFrame = new wxStaticText(this,-1,_("Frame: "),wxDefaultPosition,wxSize(60,20));
wxStaticText *LabelTime = new wxStaticText(this,-1,_("Time: "),wxDefaultPosition,wxSize(60,20)); wxStaticText *LabelTime = new wxStaticText(this,-1,_("Time: "),wxDefaultPosition,wxSize(60,20));
JumpFrame = new wxTextCtrl(this,TEXT_JUMP_FRAME,wxString::Format(_T("%i"),jumpframe),wxDefaultPosition,wxSize(60,20),wxTE_PROCESS_ENTER); JumpFrame = new wxTextCtrl(this,-1,wxString::Format("%i",jumpframe),wxDefaultPosition,wxSize(60,20),wxTE_PROCESS_ENTER);
JumpFrame->SetMaxLength(maxLength.Len()); JumpFrame->SetMaxLength(maxLength.size());
JumpTime = new TimeEdit(this,TEXT_JUMP_TIME,jumptime.GetASSFormated(),wxDefaultPosition,wxSize(60,20),wxTE_PROCESS_ENTER); JumpTime = new TimeEdit(this,-1,jumptime.GetASSFormated(),wxDefaultPosition,wxSize(60,20),wxTE_PROCESS_ENTER);
wxSizer *FrameSizer = new wxBoxSizer(wxHORIZONTAL); wxSizer *FrameSizer = new wxBoxSizer(wxHORIZONTAL);
wxSizer *TimeSizer = new wxBoxSizer(wxHORIZONTAL); wxSizer *TimeSizer = new wxBoxSizer(wxHORIZONTAL);
FrameSizer->Add(LabelFrame,0,wxALIGN_CENTER_VERTICAL,0); FrameSizer->Add(LabelFrame,0,wxALIGN_CENTER_VERTICAL,0);
FrameSizer->Add(JumpFrame,1,wxLEFT,5); FrameSizer->Add(JumpFrame,1,wxLEFT,5);
TimeSizer->Add(LabelTime,0,wxALIGN_CENTER_VERTICAL,0); TimeSizer->Add(LabelTime,0,wxALIGN_CENTER_VERTICAL,0);
TimeSizer->Add(JumpTime,1,wxLEFT,5); TimeSizer->Add(JumpTime,1,wxLEFT,5);
wxSizer *TimesSizer = new wxStaticBoxSizer(wxVERTICAL, this, _T("")); wxSizer *TimesSizer = new wxStaticBoxSizer(wxVERTICAL, this, "");
TimesSizer->Add(FrameSizer,0,wxEXPAND | wxBOTTOM,5); TimesSizer->Add(FrameSizer,0,wxEXPAND | wxBOTTOM,5);
TimesSizer->Add(TimeSizer,0,wxEXPAND,0); TimesSizer->Add(TimeSizer,0,wxEXPAND,0);
// Buttons // Buttons
wxButton *OKButton = new wxButton(this,wxID_OK); wxButton *OKButton = new wxButton(this, wxID_OK);
wxButton *CancelButton = new wxButton(this,wxID_CANCEL); wxButton *CancelButton = new wxButton(this, wxID_CANCEL);
wxSizer *ButtonSizer = new wxBoxSizer(wxHORIZONTAL); wxSizer *ButtonSizer = new wxBoxSizer(wxHORIZONTAL);
ButtonSizer->Add(OKButton,1,wxRIGHT,5); ButtonSizer->Add(OKButton,1,wxRIGHT,5);
ButtonSizer->Add(CancelButton,0,0,0); ButtonSizer->Add(CancelButton,0,0,0);
@ -101,75 +97,34 @@ DialogJumpTo::DialogJumpTo (wxWindow *parent)
SetSizer(MainSizer); SetSizer(MainSizer);
MainSizer->SetSizeHints(this); MainSizer->SetSizeHints(this);
CenterOnParent(); CenterOnParent();
ready = true;
Bind(wxEVT_COMMAND_TEXT_ENTER, &DialogJumpTo::OnOK, this);
Bind(wxEVT_COMMAND_BUTTON_CLICKED, &DialogJumpTo::OnOK, this, wxID_OK);
Bind(wxEVT_COMMAND_BUTTON_CLICKED, std::tr1::bind(&DialogJumpTo::EndModal, this, 0), wxID_CANCEL);
JumpTime->Bind(wxEVT_COMMAND_TEXT_UPDATED, &DialogJumpTo::OnEditTime, this);
JumpFrame->Bind(wxEVT_COMMAND_TEXT_UPDATED, &DialogJumpTo::OnEditFrame, this);
} }
BEGIN_EVENT_TABLE(DialogJumpTo, wxDialog) void DialogJumpTo::OnOK(wxCommandEvent &) {
EVT_TEXT_ENTER(TEXT_JUMP_FRAME,DialogJumpTo::OnKey)
EVT_TEXT_ENTER(TEXT_JUMP_TIME,DialogJumpTo::OnKey)
EVT_BUTTON(wxID_CANCEL,DialogJumpTo::OnCloseButton)
EVT_BUTTON(wxID_OK,DialogJumpTo::OnOK)
EVT_TEXT(TEXT_JUMP_TIME, DialogJumpTo::OnEditTime)
EVT_TEXT(TEXT_JUMP_FRAME, DialogJumpTo::OnEditFrame)
END_EVENT_TABLE()
void DialogJumpTo::OnCloseButton (wxCommandEvent &) { OnClose(false); }
void DialogJumpTo::OnOK (wxCommandEvent &) { OnClose(true); }
/// @brief On Key pressed
void DialogJumpTo::OnKey(wxCommandEvent &) {
EndModal(0); EndModal(0);
if (jumpframe > VideoContext::Get()->GetLength()-1) jumpframe = VideoContext::Get()->GetLength()-1; c->videoController->JumpToFrame(std::min<int>(jumpframe, c->videoController->GetLength() - 1));
VideoContext::Get()->JumpToFrame(jumpframe);
} }
/// @brief On OK button pressed void DialogJumpTo::OnEditTime (wxCommandEvent &) {
/// @param ok long newframe = c->videoController->FrameAtTime(JumpTime->time.GetMS());
void DialogJumpTo::OnClose(bool ok) { if (jumpframe != newframe) {
EndModal(0); jumpframe = newframe;
if (jumpframe > VideoContext::Get()->GetLength()-1) jumpframe = VideoContext::Get()->GetLength()-1; JumpFrame->ChangeValue(wxString::Format("%i", jumpframe));
if (ok) VideoContext::Get()->JumpToFrame(jumpframe);
}
/// @brief Time editbox changed
/// @param event
///
void DialogJumpTo::OnEditTime (wxCommandEvent &event) {
if (ready) {
ready = false;
// Update frame
long newframe = VideoContext::Get()->FrameAtTime(JumpTime->time.GetMS());
if (jumpframe != newframe) {
jumpframe = newframe;
JumpFrame->ChangeValue(wxString::Format(_T("%i"),jumpframe));
}
ready = true;
} }
else event.Skip();
} }
/// @brief Frame editbox changed
/// @param event
///
void DialogJumpTo::OnEditFrame (wxCommandEvent &event) { void DialogJumpTo::OnEditFrame (wxCommandEvent &event) {
if (ready) { JumpFrame->GetValue().ToLong(&jumpframe);
ready = false; JumpFrame->ChangeValue(wxString::Format("%i", jumpframe));
// Update frame int newtime = c->videoController->TimeAtFrame(jumpframe);
JumpFrame->GetValue().ToLong(&jumpframe); if (JumpTime->time.GetMS() != newtime) {
JumpTime->time.SetMS(newtime);
JumpFrame->SetValue(wxString::Format(_T("%i"),jumpframe)); JumpTime->ChangeValue(JumpTime->time.GetASSFormated());
// Update time
int newtime = VideoContext::Get()->TimeAtFrame(jumpframe);
if (jumptime.GetMS() != newtime) {
jumptime.SetMS(newtime);
JumpTime->ChangeValue(jumptime.GetASSFormated());
}
ready = true;
} }
else event.Skip();
} }

View File

@ -34,14 +34,8 @@
/// @ingroup secondary_ui /// @ingroup secondary_ui
/// ///
class TimeEdit;
namespace agi { struct Context; }
///////////
// Headers
#include "ass_time.h"
#include "timeedit_ctrl.h"
/// DOCME /// DOCME
/// @class DialogJumpTo /// @class DialogJumpTo
@ -49,34 +43,20 @@
/// ///
/// DOCME /// DOCME
class DialogJumpTo : public wxDialog { class DialogJumpTo : public wxDialog {
private: agi::Context *c; ///< Project context
long jumpframe; ///< Target frame to jump to
TimeEdit *JumpTime; ///< Target time edit control
wxTextCtrl *JumpFrame; ///< Target frame edit control
/// DOCME /// Enter/OK button handler
bool ready;
/// DOCME
long jumpframe;
/// DOCME
AssTime jumptime;
/// DOCME
TimeEdit *JumpTime;
/// DOCME
wxTextCtrl *JumpFrame;
void OnKey(wxCommandEvent &event);
void OnCloseButton(wxCommandEvent &event);
void OnOK(wxCommandEvent &event); void OnOK(wxCommandEvent &event);
/// Update target frame on target time changed
void OnEditTime(wxCommandEvent &event); void OnEditTime(wxCommandEvent &event);
/// Update target time on target frame changed
void OnEditFrame(wxCommandEvent &event); void OnEditFrame(wxCommandEvent &event);
void OnClose(bool ok);
public: public:
DialogJumpTo (wxWindow *parent); /// Constructor
/// @param c Project context
DialogJumpTo(agi::Context *c);
DECLARE_EVENT_TABLE()
}; };