mirror of https://github.com/odrling/Aegisub
Merged the hotkeys dialog into the options dialog.
Originally committed to SVN as r1058.
This commit is contained in:
parent
29e529367e
commit
a891964bc2
|
@ -65,7 +65,6 @@ aegisub_SOURCES = \
|
||||||
dialog_export.cpp \
|
dialog_export.cpp \
|
||||||
dialog_fextracker.cpp \
|
dialog_fextracker.cpp \
|
||||||
dialog_fonts_collector.cpp \
|
dialog_fonts_collector.cpp \
|
||||||
dialog_hotkeys.cpp \
|
|
||||||
dialog_jumpto.cpp \
|
dialog_jumpto.cpp \
|
||||||
dialog_kanji_timer.cpp \
|
dialog_kanji_timer.cpp \
|
||||||
dialog_options.cpp \
|
dialog_options.cpp \
|
||||||
|
|
|
@ -213,6 +213,7 @@ Please visit http://aegisub.net to download latest version
|
||||||
- Implemented sorting of subtitles by start time. (AMZ)
|
- Implemented sorting of subtitles by start time. (AMZ)
|
||||||
- Recovered subtitle files are now saved in their own subfolder (customizeable in config.dat). (AMZ)
|
- Recovered subtitle files are now saved in their own subfolder (customizeable in config.dat). (AMZ)
|
||||||
- Fixed crash with changing font properties via the subtitle edit box when there was a \fs override tag earlier in the line. (AMZ)
|
- Fixed crash with changing font properties via the subtitle edit box when there was a \fs override tag earlier in the line. (AMZ)
|
||||||
|
- Hotkey editor was moved inside the options dialog. (AMZ)
|
||||||
|
|
||||||
|
|
||||||
= 1.09 beta - 2006.01.16 ===========================
|
= 1.09 beta - 2006.01.16 ===========================
|
||||||
|
|
|
@ -1,220 +0,0 @@
|
||||||
// Copyright (c) 2005, Rodrigo Braz Monteiro
|
|
||||||
// All rights reserved.
|
|
||||||
//
|
|
||||||
// Redistribution and use in source and binary forms, with or without
|
|
||||||
// modification, are permitted provided that the following conditions are met:
|
|
||||||
//
|
|
||||||
// * Redistributions of source code must retain the above copyright notice,
|
|
||||||
// this list of conditions and the following disclaimer.
|
|
||||||
// * Redistributions in binary form must reproduce the above copyright notice,
|
|
||||||
// this list of conditions and the following disclaimer in the documentation
|
|
||||||
// and/or other materials provided with the distribution.
|
|
||||||
// * Neither the name of the Aegisub Group nor the names of its contributors
|
|
||||||
// may be used to endorse or promote products derived from this software
|
|
||||||
// without specific prior written permission.
|
|
||||||
//
|
|
||||||
// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
|
|
||||||
// AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
|
|
||||||
// IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
|
|
||||||
// ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE
|
|
||||||
// LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
|
|
||||||
// CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
|
|
||||||
// SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
|
|
||||||
// INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
|
|
||||||
// CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
|
|
||||||
// ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
|
|
||||||
// POSSIBILITY OF SUCH DAMAGE.
|
|
||||||
//
|
|
||||||
// -----------------------------------------------------------------------------
|
|
||||||
//
|
|
||||||
// AEGISUB
|
|
||||||
//
|
|
||||||
// Website: http://aegisub.cellosoft.com
|
|
||||||
// Contact: mailto:zeratul@cellosoft.com
|
|
||||||
//
|
|
||||||
|
|
||||||
|
|
||||||
////////////
|
|
||||||
// Includes
|
|
||||||
#include "dialog_hotkeys.h"
|
|
||||||
#include "frame_main.h"
|
|
||||||
#include "main.h"
|
|
||||||
|
|
||||||
|
|
||||||
///////////////
|
|
||||||
// Constructor
|
|
||||||
DialogHotkeys::DialogHotkeys(FrameMain *_parent)
|
|
||||||
: wxDialog(NULL, -1, _("Hotkeys"), wxDefaultPosition, wxSize(300,300), wxCAPTION | wxCLOSE_BOX | wxRESIZE_BORDER, _T("Hotkeys"))
|
|
||||||
{
|
|
||||||
// Backup original shortcuts
|
|
||||||
origKeys = Hotkeys.key;
|
|
||||||
|
|
||||||
// Set variables
|
|
||||||
modified = false;
|
|
||||||
parent = _parent;
|
|
||||||
|
|
||||||
// Description
|
|
||||||
wxStaticText *text = new wxStaticText(this,-1,_("List of all hotkeys (shortcuts) available in Aegisub. Double click on any item to reassign it."));
|
|
||||||
|
|
||||||
// List of shortcuts
|
|
||||||
Shortcuts = new wxListView(this,Hotkey_List,wxDefaultPosition,wxSize(450,380),wxLC_REPORT | wxLC_SINGLE_SEL);
|
|
||||||
Shortcuts->InsertColumn(0,_("Function"),wxLIST_FORMAT_LEFT,245);
|
|
||||||
Shortcuts->InsertColumn(1,_("Key"),wxLIST_FORMAT_LEFT,180);
|
|
||||||
|
|
||||||
// Populate list
|
|
||||||
std::map<wxString,HotkeyType>::iterator cur;
|
|
||||||
for (cur = Hotkeys.key.end();cur-- != Hotkeys.key.begin();) {
|
|
||||||
wxListItem item;
|
|
||||||
item.SetText(wxGetTranslation(cur->second.origName));
|
|
||||||
item.SetData(&cur->second);
|
|
||||||
int pos = Shortcuts->InsertItem(item);
|
|
||||||
Shortcuts->SetItem(pos,1,cur->second.GetText());
|
|
||||||
}
|
|
||||||
|
|
||||||
// Button sizer
|
|
||||||
wxSizer *ButtonSizer = new wxBoxSizer(wxHORIZONTAL);
|
|
||||||
ButtonSizer->AddStretchSpacer(1);
|
|
||||||
#ifndef __APPLE__
|
|
||||||
ButtonSizer->Add(new wxButton(this,wxID_OK),0,wxRIGHT|wxEXPAND,5);
|
|
||||||
ButtonSizer->Add(new wxButton(this,wxID_CANCEL),0,wxRIGHT|wxEXPAND,0);
|
|
||||||
#else
|
|
||||||
ButtonSizer->Add(new wxButton(this,wxID_CANCEL),0,wxRIGHT|wxEXPAND,5);
|
|
||||||
ButtonSizer->Add(new wxButton(this,wxID_OK),0,wxRIGHT|wxEXPAND,0);
|
|
||||||
#endif
|
|
||||||
|
|
||||||
// Main sizer
|
|
||||||
wxSizer *MainSizer = new wxBoxSizer(wxVERTICAL);
|
|
||||||
MainSizer->Add(text,0,wxALL|wxEXPAND,5);
|
|
||||||
MainSizer->Add(Shortcuts,1,wxLEFT|wxRIGHT|wxTOP|wxEXPAND,5);
|
|
||||||
MainSizer->Add(ButtonSizer,0,wxALL|wxEXPAND,5);
|
|
||||||
MainSizer->SetSizeHints(this);
|
|
||||||
SetSizer(MainSizer);
|
|
||||||
CenterOnParent();
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
///////////////
|
|
||||||
// Event table
|
|
||||||
BEGIN_EVENT_TABLE(DialogHotkeys,wxDialog)
|
|
||||||
EVT_LIST_ITEM_ACTIVATED (Hotkey_List,DialogHotkeys::OnEditItem)
|
|
||||||
EVT_BUTTON(wxID_OK,DialogHotkeys::OnOK)
|
|
||||||
EVT_BUTTON(wxID_CANCEL,DialogHotkeys::OnCancel)
|
|
||||||
END_EVENT_TABLE()
|
|
||||||
|
|
||||||
|
|
||||||
//////////////
|
|
||||||
// OK pressed
|
|
||||||
void DialogHotkeys::OnOK(wxCommandEvent &event) {
|
|
||||||
// Apply changes if modified
|
|
||||||
if (modified) {
|
|
||||||
// Save changes
|
|
||||||
Hotkeys.modified = true;
|
|
||||||
Hotkeys.Save();
|
|
||||||
|
|
||||||
// Rebuild menu
|
|
||||||
parent->InitMenu();
|
|
||||||
|
|
||||||
// Rebuild accelerator table
|
|
||||||
parent->SetAccelerators();
|
|
||||||
}
|
|
||||||
|
|
||||||
// Close
|
|
||||||
EndModal(0);
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
//////////////////
|
|
||||||
// Cancel pressed
|
|
||||||
void DialogHotkeys::OnCancel(wxCommandEvent &event) {
|
|
||||||
// Restore if it was modified
|
|
||||||
if (modified) Hotkeys.key = origKeys;
|
|
||||||
|
|
||||||
// Close
|
|
||||||
EndModal(0);
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
/////////////////
|
|
||||||
// Edit a hotkey
|
|
||||||
void DialogHotkeys::OnEditItem(wxListEvent &event) {
|
|
||||||
// Get key and store old
|
|
||||||
HotkeyType *curKey = (HotkeyType *)event.GetData();
|
|
||||||
int oldKeycode = curKey->keycode;
|
|
||||||
int oldFlags = curKey->flags;
|
|
||||||
|
|
||||||
// Open dialog
|
|
||||||
DialogInputHotkey input(curKey,event.GetText());
|
|
||||||
input.ShowModal();
|
|
||||||
|
|
||||||
// Update stuff if it changed
|
|
||||||
if (oldKeycode != curKey->keycode || oldFlags != curKey->flags) {
|
|
||||||
Shortcuts->SetItem(event.GetIndex(),1,curKey->GetText());
|
|
||||||
modified = true;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
/////////////////////
|
|
||||||
// Input constructor
|
|
||||||
DialogInputHotkey::DialogInputHotkey(HotkeyType *_key,wxString name)
|
|
||||||
: wxDialog(NULL, -1, _("Press Key"), wxDefaultPosition, wxSize(200,50), wxCAPTION | wxWANTS_CHARS , _T("Press key"))
|
|
||||||
{
|
|
||||||
// Key
|
|
||||||
key = _key;
|
|
||||||
|
|
||||||
// Text
|
|
||||||
wxStaticText *text = new wxStaticText(this,-1,_("Press key to bind to \"") + name + _("\" or esc to cancel."));
|
|
||||||
|
|
||||||
// Key capturer
|
|
||||||
capture = new CaptureKey(this);
|
|
||||||
|
|
||||||
// Main sizer
|
|
||||||
wxSizer *MainSizer = new wxBoxSizer(wxVERTICAL);
|
|
||||||
MainSizer->Add(text,1,wxALL,5);
|
|
||||||
MainSizer->SetSizeHints(this);
|
|
||||||
SetSizer(MainSizer);
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
////////////////////////
|
|
||||||
// Capturer constructor
|
|
||||||
CaptureKey::CaptureKey(DialogInputHotkey *_parent)
|
|
||||||
: wxTextCtrl(_parent,-1,_T(""),wxDefaultPosition,wxSize(0,0))
|
|
||||||
{
|
|
||||||
parent = _parent;
|
|
||||||
SetFocus();
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
/////////////////////
|
|
||||||
// Input event table
|
|
||||||
BEGIN_EVENT_TABLE(CaptureKey,wxTextCtrl)
|
|
||||||
EVT_KEY_DOWN(CaptureKey::OnKeyDown)
|
|
||||||
EVT_KILL_FOCUS(CaptureKey::OnLoseFocus)
|
|
||||||
END_EVENT_TABLE()
|
|
||||||
|
|
||||||
|
|
||||||
///////////////
|
|
||||||
// On key down
|
|
||||||
void CaptureKey::OnKeyDown(wxKeyEvent &event) {
|
|
||||||
int keycode = event.GetKeyCode();
|
|
||||||
|
|
||||||
if (keycode == WXK_ESCAPE) parent->EndModal(0);
|
|
||||||
else if (keycode != WXK_SHIFT && keycode != WXK_CONTROL && keycode != WXK_ALT) {
|
|
||||||
parent->key->keycode = keycode;
|
|
||||||
int mod = 0;
|
|
||||||
if (event.m_altDown) mod |= wxACCEL_ALT;
|
|
||||||
if (event.m_controlDown) mod |= wxACCEL_CTRL;
|
|
||||||
if (event.m_shiftDown) mod |= wxACCEL_SHIFT;
|
|
||||||
parent->key->flags = mod;
|
|
||||||
parent->EndModal(0);
|
|
||||||
}
|
|
||||||
else event.Skip();
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
//////////////
|
|
||||||
// Keep focus
|
|
||||||
void CaptureKey::OnLoseFocus(wxFocusEvent &event) {
|
|
||||||
SetFocus();
|
|
||||||
}
|
|
|
@ -1,111 +0,0 @@
|
||||||
// Copyright (c) 2005, Rodrigo Braz Monteiro
|
|
||||||
// All rights reserved.
|
|
||||||
//
|
|
||||||
// Redistribution and use in source and binary forms, with or without
|
|
||||||
// modification, are permitted provided that the following conditions are met:
|
|
||||||
//
|
|
||||||
// * Redistributions of source code must retain the above copyright notice,
|
|
||||||
// this list of conditions and the following disclaimer.
|
|
||||||
// * Redistributions in binary form must reproduce the above copyright notice,
|
|
||||||
// this list of conditions and the following disclaimer in the documentation
|
|
||||||
// and/or other materials provided with the distribution.
|
|
||||||
// * Neither the name of the Aegisub Group nor the names of its contributors
|
|
||||||
// may be used to endorse or promote products derived from this software
|
|
||||||
// without specific prior written permission.
|
|
||||||
//
|
|
||||||
// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
|
|
||||||
// AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
|
|
||||||
// IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
|
|
||||||
// ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE
|
|
||||||
// LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
|
|
||||||
// CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
|
|
||||||
// SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
|
|
||||||
// INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
|
|
||||||
// CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
|
|
||||||
// ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
|
|
||||||
// POSSIBILITY OF SUCH DAMAGE.
|
|
||||||
//
|
|
||||||
// -----------------------------------------------------------------------------
|
|
||||||
//
|
|
||||||
// AEGISUB
|
|
||||||
//
|
|
||||||
// Website: http://aegisub.cellosoft.com
|
|
||||||
// Contact: mailto:zeratul@cellosoft.com
|
|
||||||
//
|
|
||||||
|
|
||||||
|
|
||||||
#ifndef DIALOG_HOTKEYS_H
|
|
||||||
#define DIALOG_HOTKEYS_H
|
|
||||||
|
|
||||||
|
|
||||||
////////////
|
|
||||||
// Includes
|
|
||||||
#include <wx/wxprec.h>
|
|
||||||
#include <wx/listctrl.h>
|
|
||||||
#include <map>
|
|
||||||
#include "hotkeys.h"
|
|
||||||
|
|
||||||
|
|
||||||
//////////////
|
|
||||||
// Prototypes
|
|
||||||
class FrameMain;
|
|
||||||
class DialogInputHotkey;
|
|
||||||
|
|
||||||
|
|
||||||
/////////////////////
|
|
||||||
// List dialog class
|
|
||||||
class DialogHotkeys : public wxDialog {
|
|
||||||
private:
|
|
||||||
std::map<wxString,HotkeyType> origKeys;
|
|
||||||
wxListView *Shortcuts;
|
|
||||||
bool modified;
|
|
||||||
FrameMain *parent;
|
|
||||||
|
|
||||||
void OnEditItem(wxListEvent &event);
|
|
||||||
void OnOK(wxCommandEvent &event);
|
|
||||||
void OnCancel(wxCommandEvent &event);
|
|
||||||
|
|
||||||
public:
|
|
||||||
DialogHotkeys(FrameMain *parent);
|
|
||||||
|
|
||||||
DECLARE_EVENT_TABLE()
|
|
||||||
};
|
|
||||||
|
|
||||||
|
|
||||||
/////////////////////
|
|
||||||
// Capture key class
|
|
||||||
class CaptureKey : public wxTextCtrl {
|
|
||||||
private:
|
|
||||||
DialogInputHotkey *parent;
|
|
||||||
void OnKeyDown(wxKeyEvent &event);
|
|
||||||
void OnLoseFocus(wxFocusEvent &event);
|
|
||||||
|
|
||||||
public:
|
|
||||||
CaptureKey(DialogInputHotkey *parent);
|
|
||||||
|
|
||||||
DECLARE_EVENT_TABLE()
|
|
||||||
};
|
|
||||||
|
|
||||||
|
|
||||||
//////////////////////
|
|
||||||
// Input dialog class
|
|
||||||
class DialogInputHotkey : public wxDialog {
|
|
||||||
friend class CaptureKey;
|
|
||||||
|
|
||||||
private:
|
|
||||||
CaptureKey *capture;
|
|
||||||
HotkeyType *key;
|
|
||||||
|
|
||||||
public:
|
|
||||||
DialogInputHotkey(HotkeyType *key,wxString name);
|
|
||||||
};
|
|
||||||
|
|
||||||
|
|
||||||
///////
|
|
||||||
// IDs
|
|
||||||
enum {
|
|
||||||
Hotkey_List = 2500
|
|
||||||
};
|
|
||||||
|
|
||||||
|
|
||||||
#endif
|
|
|
@ -83,6 +83,7 @@ DialogOptions::DialogOptions(wxWindow *parent)
|
||||||
wxPanel *audioPage = new wxPanel(book,-1);
|
wxPanel *audioPage = new wxPanel(book,-1);
|
||||||
wxPanel *displayPage = new wxPanel(book,-1);
|
wxPanel *displayPage = new wxPanel(book,-1);
|
||||||
wxPanel *autoPage = new wxPanel(book,-1);
|
wxPanel *autoPage = new wxPanel(book,-1);
|
||||||
|
wxPanel *hotkeysPage = new wxPanel(book,-1);
|
||||||
|
|
||||||
// General page
|
// General page
|
||||||
{
|
{
|
||||||
|
@ -589,6 +590,38 @@ DialogOptions::DialogOptions(wxWindow *parent)
|
||||||
autoPage->SetSizer(autoMainSizer);
|
autoPage->SetSizer(autoMainSizer);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// Hotkeys page
|
||||||
|
{
|
||||||
|
// Variables
|
||||||
|
hotkeysModified = false;
|
||||||
|
origKeys = Hotkeys.key;
|
||||||
|
|
||||||
|
// Description
|
||||||
|
wxStaticText *text = new wxStaticText(hotkeysPage,-1,_("List of all hotkeys (shortcuts) available in Aegisub.\nDouble click on any item to reassign it."),wxDefaultPosition,wxSize(150,-1));
|
||||||
|
|
||||||
|
// List of shortcuts
|
||||||
|
Shortcuts = new wxListView(hotkeysPage,Hotkey_List,wxDefaultPosition,wxSize(250,150),wxLC_REPORT | wxLC_SINGLE_SEL);
|
||||||
|
Shortcuts->InsertColumn(0,_("Function"),wxLIST_FORMAT_LEFT,200);
|
||||||
|
Shortcuts->InsertColumn(1,_("Key"),wxLIST_FORMAT_LEFT,120);
|
||||||
|
|
||||||
|
// Populate list
|
||||||
|
std::map<wxString,HotkeyType>::iterator cur;
|
||||||
|
for (cur = Hotkeys.key.end();cur-- != Hotkeys.key.begin();) {
|
||||||
|
wxListItem item;
|
||||||
|
item.SetText(wxGetTranslation(cur->second.origName));
|
||||||
|
item.SetData(&cur->second);
|
||||||
|
int pos = Shortcuts->InsertItem(item);
|
||||||
|
Shortcuts->SetItem(pos,1,cur->second.GetText());
|
||||||
|
}
|
||||||
|
|
||||||
|
// Main sizer
|
||||||
|
wxSizer *hotkeysSizer = new wxBoxSizer(wxVERTICAL);
|
||||||
|
hotkeysSizer->Add(text,0,wxALL|wxEXPAND,5);
|
||||||
|
hotkeysSizer->Add(Shortcuts,1,wxLEFT|wxRIGHT|wxTOP|wxEXPAND,5);
|
||||||
|
hotkeysSizer->Fit(hotkeysPage);
|
||||||
|
hotkeysPage->SetSizer(hotkeysSizer);
|
||||||
|
}
|
||||||
|
|
||||||
// List book
|
// List book
|
||||||
book->AddPage(generalPage,_("General"),true);
|
book->AddPage(generalPage,_("General"),true);
|
||||||
book->AddSubPage(filePage,_("File save/load"),true);
|
book->AddSubPage(filePage,_("File save/load"),true);
|
||||||
|
@ -598,6 +631,7 @@ DialogOptions::DialogOptions(wxWindow *parent)
|
||||||
book->AddPage(audioPage,_("Audio"),true);
|
book->AddPage(audioPage,_("Audio"),true);
|
||||||
book->AddSubPage(displayPage,_("Display"),true);
|
book->AddSubPage(displayPage,_("Display"),true);
|
||||||
book->AddPage(autoPage,_("Automation"),true);
|
book->AddPage(autoPage,_("Automation"),true);
|
||||||
|
book->AddPage(hotkeysPage,_("Hotkeys"),true);
|
||||||
#ifdef wxUSE_TREEBOOK
|
#ifdef wxUSE_TREEBOOK
|
||||||
book->ChangeSelection(Options.AsInt(_T("Options page")));
|
book->ChangeSelection(Options.AsInt(_T("Options page")));
|
||||||
#endif
|
#endif
|
||||||
|
@ -646,6 +680,7 @@ BEGIN_EVENT_TABLE(DialogOptions,wxDialog)
|
||||||
EVT_BUTTON(wxID_OK,DialogOptions::OnOK)
|
EVT_BUTTON(wxID_OK,DialogOptions::OnOK)
|
||||||
EVT_BUTTON(wxID_CANCEL,DialogOptions::OnCancel)
|
EVT_BUTTON(wxID_CANCEL,DialogOptions::OnCancel)
|
||||||
EVT_BUTTON(wxID_APPLY,DialogOptions::OnApply)
|
EVT_BUTTON(wxID_APPLY,DialogOptions::OnApply)
|
||||||
|
EVT_LIST_ITEM_ACTIVATED (Hotkey_List,DialogOptions::OnEditHotkey)
|
||||||
END_EVENT_TABLE()
|
END_EVENT_TABLE()
|
||||||
|
|
||||||
|
|
||||||
|
@ -678,6 +713,10 @@ void DialogOptions::OnApply(wxCommandEvent &event) {
|
||||||
//////////
|
//////////
|
||||||
// Cancel
|
// Cancel
|
||||||
void DialogOptions::OnCancel(wxCommandEvent &event) {
|
void DialogOptions::OnCancel(wxCommandEvent &event) {
|
||||||
|
// Undo hotkeys
|
||||||
|
if (hotkeysModified) Hotkeys.key = origKeys;
|
||||||
|
|
||||||
|
// Set options
|
||||||
Options.SetInt(_T("Options page"),book->GetSelection());
|
Options.SetInt(_T("Options page"),book->GetSelection());
|
||||||
Options.Save();
|
Options.Save();
|
||||||
EndModal(0);
|
EndModal(0);
|
||||||
|
@ -782,6 +821,22 @@ void DialogOptions::WriteToOptions(bool justApply) {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// Apply hotkey changes if modified
|
||||||
|
if (hotkeysModified) {
|
||||||
|
// Save changes
|
||||||
|
Hotkeys.modified = true;
|
||||||
|
Hotkeys.Save();
|
||||||
|
hotkeysModified = false;
|
||||||
|
origKeys = Hotkeys.key;
|
||||||
|
|
||||||
|
// Rebuild menu
|
||||||
|
FrameMain *parent = (FrameMain*) GetParent();
|
||||||
|
parent->InitMenu();
|
||||||
|
|
||||||
|
// Rebuild accelerator table
|
||||||
|
parent->SetAccelerators();
|
||||||
|
}
|
||||||
|
|
||||||
// Save options
|
// Save options
|
||||||
Options.Save();
|
Options.Save();
|
||||||
|
|
||||||
|
@ -882,3 +937,89 @@ void DialogOptions::ReadFromOptions() {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
/////////////////
|
||||||
|
// Edit a hotkey
|
||||||
|
void DialogOptions::OnEditHotkey(wxListEvent &event) {
|
||||||
|
// Get key and store old
|
||||||
|
HotkeyType *curKey = (HotkeyType *)event.GetData();
|
||||||
|
int oldKeycode = curKey->keycode;
|
||||||
|
int oldFlags = curKey->flags;
|
||||||
|
|
||||||
|
// Open dialog
|
||||||
|
DialogInputHotkey input(curKey,event.GetText());
|
||||||
|
input.ShowModal();
|
||||||
|
|
||||||
|
// Update stuff if it changed
|
||||||
|
if (oldKeycode != curKey->keycode || oldFlags != curKey->flags) {
|
||||||
|
Shortcuts->SetItem(event.GetIndex(),1,curKey->GetText());
|
||||||
|
hotkeysModified = true;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
/////////////////////
|
||||||
|
// Input constructor
|
||||||
|
DialogInputHotkey::DialogInputHotkey(HotkeyType *_key,wxString name)
|
||||||
|
: wxDialog(NULL, -1, _("Press Key"), wxDefaultPosition, wxSize(200,50), wxCAPTION | wxWANTS_CHARS , _T("Press key"))
|
||||||
|
{
|
||||||
|
// Key
|
||||||
|
key = _key;
|
||||||
|
|
||||||
|
// Text
|
||||||
|
wxStaticText *text = new wxStaticText(this,-1,_("Press key to bind to \"") + name + _("\" or esc to cancel."));
|
||||||
|
|
||||||
|
// Key capturer
|
||||||
|
capture = new CaptureKey(this);
|
||||||
|
|
||||||
|
// Main sizer
|
||||||
|
wxSizer *MainSizer = new wxBoxSizer(wxVERTICAL);
|
||||||
|
MainSizer->Add(text,1,wxALL,5);
|
||||||
|
MainSizer->SetSizeHints(this);
|
||||||
|
SetSizer(MainSizer);
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
////////////////////////
|
||||||
|
// Capturer constructor
|
||||||
|
CaptureKey::CaptureKey(DialogInputHotkey *_parent)
|
||||||
|
: wxTextCtrl(_parent,-1,_T(""),wxDefaultPosition,wxSize(0,0))
|
||||||
|
{
|
||||||
|
parent = _parent;
|
||||||
|
SetFocus();
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
/////////////////////
|
||||||
|
// Input event table
|
||||||
|
BEGIN_EVENT_TABLE(CaptureKey,wxTextCtrl)
|
||||||
|
EVT_KEY_DOWN(CaptureKey::OnKeyDown)
|
||||||
|
EVT_KILL_FOCUS(CaptureKey::OnLoseFocus)
|
||||||
|
END_EVENT_TABLE()
|
||||||
|
|
||||||
|
|
||||||
|
///////////////
|
||||||
|
// On key down
|
||||||
|
void CaptureKey::OnKeyDown(wxKeyEvent &event) {
|
||||||
|
int keycode = event.GetKeyCode();
|
||||||
|
|
||||||
|
if (keycode == WXK_ESCAPE) parent->EndModal(0);
|
||||||
|
else if (keycode != WXK_SHIFT && keycode != WXK_CONTROL && keycode != WXK_ALT) {
|
||||||
|
parent->key->keycode = keycode;
|
||||||
|
int mod = 0;
|
||||||
|
if (event.m_altDown) mod |= wxACCEL_ALT;
|
||||||
|
if (event.m_controlDown) mod |= wxACCEL_CTRL;
|
||||||
|
if (event.m_shiftDown) mod |= wxACCEL_SHIFT;
|
||||||
|
parent->key->flags = mod;
|
||||||
|
parent->EndModal(0);
|
||||||
|
}
|
||||||
|
else event.Skip();
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
//////////////
|
||||||
|
// Keep focus
|
||||||
|
void CaptureKey::OnLoseFocus(wxFocusEvent &event) {
|
||||||
|
SetFocus();
|
||||||
|
}
|
||||||
|
|
|
@ -40,12 +40,17 @@
|
||||||
////////////
|
////////////
|
||||||
// Includes
|
// Includes
|
||||||
#include <wx/wxprec.h>
|
#include <wx/wxprec.h>
|
||||||
|
#include <wx/listctrl.h>
|
||||||
#include <vector>
|
#include <vector>
|
||||||
|
#include <map>
|
||||||
#include "options.h"
|
#include "options.h"
|
||||||
|
#include "hotkeys.h"
|
||||||
|
|
||||||
|
|
||||||
//////////////
|
//////////////
|
||||||
// Prototypes
|
// Prototypes
|
||||||
|
class FrameMain;
|
||||||
|
class DialogInputHotkey;
|
||||||
#ifdef wxUSE_TREEBOOK
|
#ifdef wxUSE_TREEBOOK
|
||||||
class wxTreebook;
|
class wxTreebook;
|
||||||
#else
|
#else
|
||||||
|
@ -73,6 +78,11 @@ private:
|
||||||
wxTreebook *book;
|
wxTreebook *book;
|
||||||
std::vector<OptionsBind> binds;
|
std::vector<OptionsBind> binds;
|
||||||
|
|
||||||
|
// Hotkeys
|
||||||
|
std::map<wxString,HotkeyType> origKeys;
|
||||||
|
wxListView *Shortcuts;
|
||||||
|
bool hotkeysModified;
|
||||||
|
|
||||||
void Bind(wxControl *ctrl,wxString option,int param=0);
|
void Bind(wxControl *ctrl,wxString option,int param=0);
|
||||||
void WriteToOptions(bool justApply=false);
|
void WriteToOptions(bool justApply=false);
|
||||||
void ReadFromOptions();
|
void ReadFromOptions();
|
||||||
|
@ -80,6 +90,7 @@ private:
|
||||||
void OnOK(wxCommandEvent &event);
|
void OnOK(wxCommandEvent &event);
|
||||||
void OnCancel(wxCommandEvent &event);
|
void OnCancel(wxCommandEvent &event);
|
||||||
void OnApply(wxCommandEvent &event);
|
void OnApply(wxCommandEvent &event);
|
||||||
|
void OnEditHotkey(wxListEvent &event);
|
||||||
|
|
||||||
public:
|
public:
|
||||||
DialogOptions(wxWindow *parent);
|
DialogOptions(wxWindow *parent);
|
||||||
|
@ -87,3 +98,39 @@ public:
|
||||||
|
|
||||||
DECLARE_EVENT_TABLE()
|
DECLARE_EVENT_TABLE()
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
||||||
|
/////////////////////
|
||||||
|
// Capture key class
|
||||||
|
class CaptureKey : public wxTextCtrl {
|
||||||
|
private:
|
||||||
|
DialogInputHotkey *parent;
|
||||||
|
void OnKeyDown(wxKeyEvent &event);
|
||||||
|
void OnLoseFocus(wxFocusEvent &event);
|
||||||
|
|
||||||
|
public:
|
||||||
|
CaptureKey(DialogInputHotkey *parent);
|
||||||
|
|
||||||
|
DECLARE_EVENT_TABLE()
|
||||||
|
};
|
||||||
|
|
||||||
|
|
||||||
|
//////////////////////
|
||||||
|
// Input dialog class
|
||||||
|
class DialogInputHotkey : public wxDialog {
|
||||||
|
friend class CaptureKey;
|
||||||
|
|
||||||
|
private:
|
||||||
|
CaptureKey *capture;
|
||||||
|
HotkeyType *key;
|
||||||
|
|
||||||
|
public:
|
||||||
|
DialogInputHotkey(HotkeyType *key,wxString name);
|
||||||
|
};
|
||||||
|
|
||||||
|
|
||||||
|
///////
|
||||||
|
// IDs
|
||||||
|
enum {
|
||||||
|
Hotkey_List = 2500
|
||||||
|
};
|
||||||
|
|
|
@ -241,7 +241,6 @@ void FrameMain::InitToolbar () {
|
||||||
|
|
||||||
// Options
|
// Options
|
||||||
Toolbar->AddTool(Menu_Tools_Options,_("Options"),wxBITMAP(options_button),_("Configure Aegisub"));
|
Toolbar->AddTool(Menu_Tools_Options,_("Options"),wxBITMAP(options_button),_("Configure Aegisub"));
|
||||||
Toolbar->AddTool(Menu_Tools_Hotkeys,_("Hotkeys"),wxBITMAP(hotkeys_button),_("Remap hotkeys"));
|
|
||||||
Toolbar->AddTool(Grid_Toggle_Tags,_("Cycle Tag Hidding Mode"),wxBITMAP(toggle_tag_hiding),_("Cycle through tag-hiding modes"));
|
Toolbar->AddTool(Grid_Toggle_Tags,_("Cycle Tag Hidding Mode"),wxBITMAP(toggle_tag_hiding),_("Cycle through tag-hiding modes"));
|
||||||
|
|
||||||
// Update
|
// Update
|
||||||
|
@ -419,7 +418,6 @@ void FrameMain::InitMenu() {
|
||||||
viewMenu = new wxMenu();
|
viewMenu = new wxMenu();
|
||||||
AppendBitmapMenuItem(viewMenu,Menu_View_Language, _T("&Language..."), _("Select Aegisub interface language"), wxBITMAP(blank_button));
|
AppendBitmapMenuItem(viewMenu,Menu_View_Language, _T("&Language..."), _("Select Aegisub interface language"), wxBITMAP(blank_button));
|
||||||
AppendBitmapMenuItem(viewMenu,Menu_Tools_Options, _("&Options...") + wxString(_T("\t")) + Hotkeys.GetText(_T("Options")), _("Configure Aegisub"), wxBITMAP(options_button));
|
AppendBitmapMenuItem(viewMenu,Menu_Tools_Options, _("&Options...") + wxString(_T("\t")) + Hotkeys.GetText(_T("Options")), _("Configure Aegisub"), wxBITMAP(options_button));
|
||||||
AppendBitmapMenuItem(viewMenu,Menu_Tools_Hotkeys, _("&Hotkeys..."), _("Remap hotkeys"), wxBITMAP(hotkeys_button));
|
|
||||||
AppendBitmapMenuItem(viewMenu,Menu_Tools_Log, _("Lo&g window..."), _("Open log window"), wxBITMAP(blank_button));
|
AppendBitmapMenuItem(viewMenu,Menu_Tools_Log, _("Lo&g window..."), _("Open log window"), wxBITMAP(blank_button));
|
||||||
viewMenu->AppendSeparator();
|
viewMenu->AppendSeparator();
|
||||||
viewMenu->AppendRadioItem(Menu_View_Subs, _("Subs only view"), _("Display subtitles only"));
|
viewMenu->AppendRadioItem(Menu_View_Subs, _("Subs only view"), _("Display subtitles only"));
|
||||||
|
|
|
@ -204,7 +204,6 @@ private:
|
||||||
void OnOpenResample (wxCommandEvent &event);
|
void OnOpenResample (wxCommandEvent &event);
|
||||||
void OnOpenTimingProcessor (wxCommandEvent &event);
|
void OnOpenTimingProcessor (wxCommandEvent &event);
|
||||||
void OnOpenKanjiTimer (wxCommandEvent &event);
|
void OnOpenKanjiTimer (wxCommandEvent &event);
|
||||||
void OnOpenHotkeys (wxCommandEvent &event);
|
|
||||||
void OnOpenOptions (wxCommandEvent &event);
|
void OnOpenOptions (wxCommandEvent &event);
|
||||||
void OnOpenLog (wxCommandEvent &event);
|
void OnOpenLog (wxCommandEvent &event);
|
||||||
void OnGridEvent (wxCommandEvent &event);
|
void OnGridEvent (wxCommandEvent &event);
|
||||||
|
@ -360,7 +359,6 @@ enum {
|
||||||
Menu_Tools_Resample,
|
Menu_Tools_Resample,
|
||||||
Menu_Tools_Timing_Processor,
|
Menu_Tools_Timing_Processor,
|
||||||
Menu_Tools_Kanji_Timer,
|
Menu_Tools_Kanji_Timer,
|
||||||
Menu_Tools_Hotkeys,
|
|
||||||
Menu_Tools_Options,
|
Menu_Tools_Options,
|
||||||
Menu_Tools_Log,
|
Menu_Tools_Log,
|
||||||
|
|
||||||
|
|
|
@ -70,7 +70,6 @@
|
||||||
#include "dialog_kanji_timer.h"
|
#include "dialog_kanji_timer.h"
|
||||||
#include "audio_display.h"
|
#include "audio_display.h"
|
||||||
#include "toggle_bitmap.h"
|
#include "toggle_bitmap.h"
|
||||||
#include "dialog_hotkeys.h"
|
|
||||||
#include "dialog_timing_processor.h"
|
#include "dialog_timing_processor.h"
|
||||||
#if USE_FEXTRACKER == 1
|
#if USE_FEXTRACKER == 1
|
||||||
#include "../FexTrackerSource/FexTracker.h"
|
#include "../FexTrackerSource/FexTracker.h"
|
||||||
|
@ -168,7 +167,6 @@ BEGIN_EVENT_TABLE(FrameMain, wxFrame)
|
||||||
EVT_MENU(Menu_Tools_Resample, FrameMain::OnOpenResample)
|
EVT_MENU(Menu_Tools_Resample, FrameMain::OnOpenResample)
|
||||||
EVT_MENU(Menu_Tools_Timing_Processor, FrameMain::OnOpenTimingProcessor)
|
EVT_MENU(Menu_Tools_Timing_Processor, FrameMain::OnOpenTimingProcessor)
|
||||||
EVT_MENU(Menu_Tools_Kanji_Timer, FrameMain::OnOpenKanjiTimer)
|
EVT_MENU(Menu_Tools_Kanji_Timer, FrameMain::OnOpenKanjiTimer)
|
||||||
EVT_MENU(Menu_Tools_Hotkeys, FrameMain::OnOpenHotkeys)
|
|
||||||
EVT_MENU(Menu_Tools_Options, FrameMain::OnOpenOptions)
|
EVT_MENU(Menu_Tools_Options, FrameMain::OnOpenOptions)
|
||||||
EVT_MENU(Menu_Tools_Log, FrameMain::OnOpenLog)
|
EVT_MENU(Menu_Tools_Log, FrameMain::OnOpenLog)
|
||||||
|
|
||||||
|
@ -923,13 +921,6 @@ void FrameMain::OnOpenKanjiTimer (wxCommandEvent &event) {
|
||||||
kanjitimer.ShowModal();
|
kanjitimer.ShowModal();
|
||||||
}
|
}
|
||||||
|
|
||||||
///////////////////////
|
|
||||||
// Open Hotkeys dialog
|
|
||||||
void FrameMain::OnOpenHotkeys (wxCommandEvent &event) {
|
|
||||||
DialogHotkeys keys(this);
|
|
||||||
keys.ShowModal();
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
///////////////////////
|
///////////////////////
|
||||||
// Open Options dialog
|
// Open Options dialog
|
||||||
|
|
|
@ -46,7 +46,7 @@
|
||||||
|
|
||||||
//////////////
|
//////////////
|
||||||
// Prototypes
|
// Prototypes
|
||||||
class DialogHotkeys;
|
class DialogOptions;
|
||||||
|
|
||||||
|
|
||||||
////////////////
|
////////////////
|
||||||
|
@ -72,7 +72,7 @@ public:
|
||||||
/////////////////////////////
|
/////////////////////////////
|
||||||
// Class that stores hotkeys
|
// Class that stores hotkeys
|
||||||
class HotkeyManager {
|
class HotkeyManager {
|
||||||
friend class DialogHotkeys;
|
friend class DialogOptions;
|
||||||
private:
|
private:
|
||||||
bool modified;
|
bool modified;
|
||||||
wxString filename;
|
wxString filename;
|
||||||
|
|
|
@ -111,7 +111,7 @@ LibassSubtitlesProvider::LibassSubtitlesProvider() {
|
||||||
ass_renderer = ass_renderer_init(ass_library);
|
ass_renderer = ass_renderer_init(ass_library);
|
||||||
if (!ass_renderer) throw _T("ass_renderer_init failed");
|
if (!ass_renderer) throw _T("ass_renderer_init failed");
|
||||||
ass_set_font_scale(ass_renderer, 1.);
|
ass_set_font_scale(ass_renderer, 1.);
|
||||||
ass_set_fonts(ass_renderer, NULL, "Sans");
|
ass_set_fonts(ass_renderer, "c:\\windows\\fonts\\verdana.ttf", "Sans");
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue