forked from mia/Aegisub
Move everything but the subtitle modification utility functions from SubtitlesGrid to BaseGrid. There never has been a clean division of responsibilities between them and the split mostly just made things awkward.
Originally committed to SVN as r5828.
This commit is contained in:
parent
14d734298e
commit
8e81fd07ed
4 changed files with 128 additions and 169 deletions
|
@ -45,6 +45,7 @@
|
||||||
#include <wx/dcclient.h>
|
#include <wx/dcclient.h>
|
||||||
#include <wx/dcmemory.h>
|
#include <wx/dcmemory.h>
|
||||||
#include <wx/kbdstate.h>
|
#include <wx/kbdstate.h>
|
||||||
|
#include <wx/menu.h>
|
||||||
#include <wx/sizer.h>
|
#include <wx/sizer.h>
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
@ -52,6 +53,7 @@
|
||||||
|
|
||||||
#include "include/aegisub/context.h"
|
#include "include/aegisub/context.h"
|
||||||
#include "include/aegisub/hotkey.h"
|
#include "include/aegisub/hotkey.h"
|
||||||
|
#include "include/aegisub/menu.h"
|
||||||
|
|
||||||
#include "ass_dialogue.h"
|
#include "ass_dialogue.h"
|
||||||
#include "ass_file.h"
|
#include "ass_file.h"
|
||||||
|
@ -64,7 +66,8 @@
|
||||||
#include "video_slider.h"
|
#include "video_slider.h"
|
||||||
|
|
||||||
enum {
|
enum {
|
||||||
GRID_SCROLLBAR = 1730
|
GRID_SCROLLBAR = 1730,
|
||||||
|
MENU_SHOW_COL = 1250 // Needs 15 IDs after this
|
||||||
};
|
};
|
||||||
|
|
||||||
template<class S1, class S2, class D>
|
template<class S1, class S2, class D>
|
||||||
|
@ -86,6 +89,8 @@ BaseGrid::BaseGrid(wxWindow* parent, agi::Context *context, const wxSize& size,
|
||||||
, active_line(0)
|
, active_line(0)
|
||||||
, batch_level(0)
|
, batch_level(0)
|
||||||
, batch_active_line_changed(false)
|
, batch_active_line_changed(false)
|
||||||
|
, seek_listener(context->videoController->AddSeekListener(std::tr1::bind(&BaseGrid::Refresh, this, false, (wxRect*)NULL)))
|
||||||
|
, context_menu(0)
|
||||||
, context(context)
|
, context(context)
|
||||||
, yPos(0)
|
, yPos(0)
|
||||||
{
|
{
|
||||||
|
@ -98,9 +103,13 @@ BaseGrid::BaseGrid(wxWindow* parent, agi::Context *context, const wxSize& size,
|
||||||
SetSizerAndFit(scrollbarpositioner);
|
SetSizerAndFit(scrollbarpositioner);
|
||||||
|
|
||||||
UpdateStyle();
|
UpdateStyle();
|
||||||
|
OnHighlightVisibleChange(*OPT_GET("Subtitle/Grid/Highlight Subtitles in Frame"));
|
||||||
|
|
||||||
OPT_SUB("Subtitle/Grid/Font Face", &BaseGrid::UpdateStyle, this);
|
OPT_SUB("Subtitle/Grid/Font Face", &BaseGrid::UpdateStyle, this);
|
||||||
OPT_SUB("Subtitle/Grid/Font Size", &BaseGrid::UpdateStyle, this);
|
OPT_SUB("Subtitle/Grid/Font Size", &BaseGrid::UpdateStyle, this);
|
||||||
|
OPT_SUB("Subtitle/Grid/Highlight Subtitles in Frame", &BaseGrid::OnHighlightVisibleChange, this);
|
||||||
|
context->ass->AddCommitListener(&BaseGrid::OnSubtitlesCommit, this);
|
||||||
|
context->ass->AddFileOpenListener(&BaseGrid::OnSubtitlesOpen, this);
|
||||||
|
|
||||||
std::tr1::function<void (agi::OptionValue const&)> Refresh(std::tr1::bind(&BaseGrid::Refresh, this, false, (wxRect*)NULL));
|
std::tr1::function<void (agi::OptionValue const&)> Refresh(std::tr1::bind(&BaseGrid::Refresh, this, false, (wxRect*)NULL));
|
||||||
OPT_SUB("Colour/Subtitle Grid/Active Border", Refresh);
|
OPT_SUB("Colour/Subtitle Grid/Active Border", Refresh);
|
||||||
|
@ -115,7 +124,7 @@ BaseGrid::BaseGrid(wxWindow* parent, agi::Context *context, const wxSize& size,
|
||||||
OPT_SUB("Colour/Subtitle Grid/Lines", Refresh);
|
OPT_SUB("Colour/Subtitle Grid/Lines", Refresh);
|
||||||
OPT_SUB("Colour/Subtitle Grid/Selection", Refresh);
|
OPT_SUB("Colour/Subtitle Grid/Selection", Refresh);
|
||||||
OPT_SUB("Colour/Subtitle Grid/Standard", Refresh);
|
OPT_SUB("Colour/Subtitle Grid/Standard", Refresh);
|
||||||
OPT_SUB("Subtitle/Grid/Highlight Subtitles in Frame", Refresh);
|
OPT_SUB("Subtitle/Grid/Hide Overrides", Refresh);
|
||||||
|
|
||||||
Bind(wxEVT_CONTEXT_MENU, &BaseGrid::OnContextMenu, this);
|
Bind(wxEVT_CONTEXT_MENU, &BaseGrid::OnContextMenu, this);
|
||||||
}
|
}
|
||||||
|
@ -123,6 +132,66 @@ BaseGrid::BaseGrid(wxWindow* parent, agi::Context *context, const wxSize& size,
|
||||||
BaseGrid::~BaseGrid() {
|
BaseGrid::~BaseGrid() {
|
||||||
ClearMaps();
|
ClearMaps();
|
||||||
delete bmp;
|
delete bmp;
|
||||||
|
delete context_menu;
|
||||||
|
}
|
||||||
|
|
||||||
|
BEGIN_EVENT_TABLE(BaseGrid,wxWindow)
|
||||||
|
EVT_PAINT(BaseGrid::OnPaint)
|
||||||
|
EVT_SIZE(BaseGrid::OnSize)
|
||||||
|
EVT_COMMAND_SCROLL(GRID_SCROLLBAR,BaseGrid::OnScroll)
|
||||||
|
EVT_MOUSE_EVENTS(BaseGrid::OnMouseEvent)
|
||||||
|
EVT_KEY_DOWN(BaseGrid::OnKeyDown)
|
||||||
|
EVT_MENU_RANGE(MENU_SHOW_COL,MENU_SHOW_COL+15,BaseGrid::OnShowColMenu)
|
||||||
|
END_EVENT_TABLE();
|
||||||
|
|
||||||
|
void BaseGrid::OnSubtitlesCommit(int type) {
|
||||||
|
if (type == AssFile::COMMIT_NEW)
|
||||||
|
UpdateMaps(true);
|
||||||
|
else if (type & AssFile::COMMIT_ORDER || type & AssFile::COMMIT_DIAG_ADDREM)
|
||||||
|
UpdateMaps(false);
|
||||||
|
|
||||||
|
if (type & AssFile::COMMIT_DIAG_META) {
|
||||||
|
SetColumnWidths();
|
||||||
|
Refresh(false);
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
if (type & AssFile::COMMIT_DIAG_TIME)
|
||||||
|
RefreshRect(wxRect(time_cols_x, 0, time_cols_w, GetClientSize().GetHeight()), false);
|
||||||
|
if (type & AssFile::COMMIT_DIAG_TEXT)
|
||||||
|
RefreshRect(wxRect(text_col_x, 0, text_col_w, GetClientSize().GetHeight()), false);
|
||||||
|
}
|
||||||
|
|
||||||
|
void BaseGrid::OnSubtitlesOpen() {
|
||||||
|
BeginBatch();
|
||||||
|
ClearMaps();
|
||||||
|
UpdateMaps();
|
||||||
|
|
||||||
|
if (GetRows()) {
|
||||||
|
SetActiveLine(GetDialogue(0));
|
||||||
|
SelectRow(0);
|
||||||
|
}
|
||||||
|
EndBatch();
|
||||||
|
SetColumnWidths();
|
||||||
|
}
|
||||||
|
|
||||||
|
void BaseGrid::OnShowColMenu(wxCommandEvent &event) {
|
||||||
|
int item = event.GetId() - MENU_SHOW_COL;
|
||||||
|
showCol[item] = !showCol[item];
|
||||||
|
|
||||||
|
std::vector<bool> map(showCol, showCol + columns);
|
||||||
|
OPT_SET("Subtitle/Grid/Column")->SetListBool(map);
|
||||||
|
|
||||||
|
SetColumnWidths();
|
||||||
|
Refresh(false);
|
||||||
|
}
|
||||||
|
|
||||||
|
void BaseGrid::OnHighlightVisibleChange(agi::OptionValue const& opt) {
|
||||||
|
if (opt.GetBool()) {
|
||||||
|
seek_listener.Unblock();
|
||||||
|
}
|
||||||
|
else {
|
||||||
|
seek_listener.Block();
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
void BaseGrid::UpdateStyle() {
|
void BaseGrid::UpdateStyle() {
|
||||||
|
@ -350,13 +419,6 @@ wxArrayInt BaseGrid::GetSelection() const {
|
||||||
return res;
|
return res;
|
||||||
}
|
}
|
||||||
|
|
||||||
BEGIN_EVENT_TABLE(BaseGrid,wxWindow)
|
|
||||||
EVT_PAINT(BaseGrid::OnPaint)
|
|
||||||
EVT_SIZE(BaseGrid::OnSize)
|
|
||||||
EVT_COMMAND_SCROLL(GRID_SCROLLBAR,BaseGrid::OnScroll)
|
|
||||||
EVT_MOUSE_EVENTS(BaseGrid::OnMouseEvent)
|
|
||||||
EVT_KEY_DOWN(BaseGrid::OnKeyDown)
|
|
||||||
END_EVENT_TABLE()
|
|
||||||
|
|
||||||
void BaseGrid::OnPaint(wxPaintEvent &event) {
|
void BaseGrid::OnPaint(wxPaintEvent &event) {
|
||||||
// Get size and pos
|
// Get size and pos
|
||||||
|
@ -723,10 +785,29 @@ void BaseGrid::OnMouseEvent(wxMouseEvent &event) {
|
||||||
|
|
||||||
void BaseGrid::OnContextMenu(wxContextMenuEvent &evt) {
|
void BaseGrid::OnContextMenu(wxContextMenuEvent &evt) {
|
||||||
wxPoint pos = evt.GetPosition();
|
wxPoint pos = evt.GetPosition();
|
||||||
if (pos == wxDefaultPosition || ScreenToClient(pos).y > lineHeight)
|
if (pos == wxDefaultPosition || ScreenToClient(pos).y > lineHeight) {
|
||||||
OpenBodyContextMenu();
|
if (!context_menu) context_menu = menu::GetMenu("grid_context", context);
|
||||||
else
|
menu::OpenPopupMenu(context_menu, this);
|
||||||
OpenHeaderContextMenu();
|
}
|
||||||
|
else {
|
||||||
|
const wxString strings[] = {
|
||||||
|
_("Line Number"),
|
||||||
|
_("Layer"),
|
||||||
|
_("Start"),
|
||||||
|
_("End"),
|
||||||
|
_("Style"),
|
||||||
|
_("Actor"),
|
||||||
|
_("Effect"),
|
||||||
|
_("Left"),
|
||||||
|
_("Right"),
|
||||||
|
_("Vert"),
|
||||||
|
};
|
||||||
|
|
||||||
|
wxMenu menu;
|
||||||
|
for (size_t i = 0; i < columns; ++i)
|
||||||
|
menu.Append(MENU_SHOW_COL + i, strings[i], "", wxITEM_CHECK)->Check(showCol[i]);
|
||||||
|
PopupMenu(&menu);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
void BaseGrid::ScrollTo(int y) {
|
void BaseGrid::ScrollTo(int y) {
|
||||||
|
@ -872,17 +953,11 @@ void BaseGrid::SetColumnWidths() {
|
||||||
text_col_w = colWidth[10];
|
text_col_w = colWidth[10];
|
||||||
}
|
}
|
||||||
|
|
||||||
/// @brief Get dialogue by index
|
|
||||||
/// @param n Index to look up
|
|
||||||
/// @return Subtitle dialogue line for index, or 0 if invalid index
|
|
||||||
AssDialogue *BaseGrid::GetDialogue(int n) const {
|
AssDialogue *BaseGrid::GetDialogue(int n) const {
|
||||||
if (static_cast<size_t>(n) >= index_line_map.size()) return 0;
|
if (static_cast<size_t>(n) >= index_line_map.size()) return 0;
|
||||||
return index_line_map[n];
|
return index_line_map[n];
|
||||||
}
|
}
|
||||||
|
|
||||||
/// @brief Get index by dialogue line
|
|
||||||
/// @param diag Dialogue line to look up
|
|
||||||
/// @return Subtitle index for object, or -1 if unknown subtitle
|
|
||||||
int BaseGrid::GetDialogueIndex(AssDialogue *diag) const {
|
int BaseGrid::GetDialogueIndex(AssDialogue *diag) const {
|
||||||
std::map<AssDialogue*,int>::const_iterator it = line_index_map.find(diag);
|
std::map<AssDialogue*,int>::const_iterator it = line_index_map.find(diag);
|
||||||
if (it != line_index_map.end()) return it->second;
|
if (it != line_index_map.end()) return it->second;
|
||||||
|
|
|
@ -38,7 +38,6 @@
|
||||||
#pragma once
|
#pragma once
|
||||||
|
|
||||||
#ifndef AGI_PRE
|
#ifndef AGI_PRE
|
||||||
#include <list>
|
|
||||||
#include <map>
|
#include <map>
|
||||||
#include <vector>
|
#include <vector>
|
||||||
|
|
||||||
|
@ -46,12 +45,15 @@
|
||||||
#include <wx/scrolbar.h>
|
#include <wx/scrolbar.h>
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
#include <libaegisub/signal.h>
|
||||||
|
|
||||||
#include "selection_controller.h"
|
#include "selection_controller.h"
|
||||||
|
|
||||||
namespace agi { struct Context; }
|
namespace agi {
|
||||||
class AssEntry;
|
struct Context;
|
||||||
|
class OptionValue;
|
||||||
|
}
|
||||||
class AssDialogue;
|
class AssDialogue;
|
||||||
class SubsEditBox;
|
|
||||||
|
|
||||||
typedef SelectionController<AssDialogue> SubtitleSelectionController;
|
typedef SelectionController<AssDialogue> SubtitleSelectionController;
|
||||||
typedef SelectionListener<AssDialogue> SubtitleSelectionListener;
|
typedef SelectionListener<AssDialogue> SubtitleSelectionListener;
|
||||||
|
@ -91,22 +93,28 @@ class BaseGrid : public wxWindow, public BaseSelectionController<AssDialogue> {
|
||||||
/// is completed; should be a subset of selection
|
/// is completed; should be a subset of selection
|
||||||
Selection batch_selection_removed;
|
Selection batch_selection_removed;
|
||||||
|
|
||||||
|
/// Connection for video seek event. Stored explicitly so that it can be
|
||||||
|
/// blocked if the relevant option is disabled
|
||||||
|
agi::signal::Connection seek_listener;
|
||||||
|
|
||||||
|
/// Cached grid body context menu
|
||||||
|
wxMenu *context_menu;
|
||||||
|
|
||||||
void OnContextMenu(wxContextMenuEvent &evt);
|
void OnContextMenu(wxContextMenuEvent &evt);
|
||||||
void OnPaint(wxPaintEvent &event);
|
void OnHighlightVisibleChange(agi::OptionValue const& opt);
|
||||||
void OnSize(wxSizeEvent &event);
|
|
||||||
void OnScroll(wxScrollEvent &event);
|
|
||||||
void OnMouseEvent(wxMouseEvent &event);
|
|
||||||
void OnKeyDown(wxKeyEvent &event);
|
void OnKeyDown(wxKeyEvent &event);
|
||||||
|
void OnMouseEvent(wxMouseEvent &event);
|
||||||
|
void OnPaint(wxPaintEvent &event);
|
||||||
|
void OnScroll(wxScrollEvent &event);
|
||||||
|
void OnShowColMenu(wxCommandEvent &event);
|
||||||
|
void OnSize(wxSizeEvent &event);
|
||||||
|
void OnSubtitlesCommit(int type);
|
||||||
|
void OnSubtitlesOpen();
|
||||||
|
|
||||||
void DrawImage(wxDC &dc, bool paint_columns[]);
|
void DrawImage(wxDC &dc, bool paint_columns[]);
|
||||||
void ScrollTo(int y);
|
void ScrollTo(int y);
|
||||||
|
|
||||||
virtual void OpenHeaderContextMenu() { }
|
|
||||||
virtual void OpenBodyContextMenu() { }
|
|
||||||
|
|
||||||
protected:
|
|
||||||
int colWidth[16]; ///< Width in pixels of each column
|
int colWidth[16]; ///< Width in pixels of each column
|
||||||
agi::Context *context; ///< Current project context
|
|
||||||
|
|
||||||
int time_cols_x; ///< Left edge of the times columns
|
int time_cols_x; ///< Left edge of the times columns
|
||||||
int time_cols_w; ///< Width of the two times columns
|
int time_cols_w; ///< Width of the two times columns
|
||||||
|
@ -127,6 +135,9 @@ protected:
|
||||||
void AnnounceActiveLineChanged(AssDialogue *new_line);
|
void AnnounceActiveLineChanged(AssDialogue *new_line);
|
||||||
void AnnounceSelectedSetChanged(const Selection &lines_added, const Selection &lines_removed);
|
void AnnounceSelectedSetChanged(const Selection &lines_added, const Selection &lines_removed);
|
||||||
|
|
||||||
|
protected:
|
||||||
|
agi::Context *context; ///< Current project context
|
||||||
|
|
||||||
public:
|
public:
|
||||||
// SelectionController implementation
|
// SelectionController implementation
|
||||||
void SetActiveLine(AssDialogue *new_line);
|
void SetActiveLine(AssDialogue *new_line);
|
||||||
|
@ -155,7 +166,14 @@ public:
|
||||||
int GetRows() const { return index_line_map.size(); }
|
int GetRows() const { return index_line_map.size(); }
|
||||||
void MakeCellVisible(int row, int col,bool center=true);
|
void MakeCellVisible(int row, int col,bool center=true);
|
||||||
|
|
||||||
|
/// @brief Get dialogue by index
|
||||||
|
/// @param n Index to look up
|
||||||
|
/// @return Subtitle dialogue line for index, or 0 if invalid index
|
||||||
AssDialogue *GetDialogue(int n) const;
|
AssDialogue *GetDialogue(int n) const;
|
||||||
|
|
||||||
|
/// @brief Get index by dialogue line
|
||||||
|
/// @param diag Dialogue line to look up
|
||||||
|
/// @return Subtitle index for object, or -1 if unknown subtitle
|
||||||
int GetDialogueIndex(AssDialogue *diag) const;
|
int GetDialogueIndex(AssDialogue *diag) const;
|
||||||
|
|
||||||
BaseGrid(wxWindow* parent, agi::Context *context, const wxSize& size = wxDefaultSize, long style = wxWANTS_CHARS, const wxString& name = wxPanelNameStr);
|
BaseGrid(wxWindow* parent, agi::Context *context, const wxSize& size = wxDefaultSize, long style = wxWANTS_CHARS, const wxString& name = wxPanelNameStr);
|
||||||
|
|
|
@ -46,114 +46,19 @@
|
||||||
#include <wx/tokenzr.h>
|
#include <wx/tokenzr.h>
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
#include "command/command.h"
|
#include "subs_grid.h"
|
||||||
|
|
||||||
#include "include/aegisub/context.h"
|
#include "include/aegisub/context.h"
|
||||||
#include "include/aegisub/audio_provider.h"
|
|
||||||
#include "include/aegisub/menu.h"
|
|
||||||
|
|
||||||
#include "ass_dialogue.h"
|
#include "ass_dialogue.h"
|
||||||
#include "ass_file.h"
|
#include "ass_file.h"
|
||||||
#include "ass_override.h"
|
|
||||||
#include "ass_style.h"
|
|
||||||
#include "audio_controller.h"
|
|
||||||
#include "charset_conv.h"
|
|
||||||
#include "dialog_paste_over.h"
|
#include "dialog_paste_over.h"
|
||||||
#include "frame_main.h"
|
|
||||||
#include "main.h"
|
|
||||||
#include "subs_grid.h"
|
|
||||||
#include "utils.h"
|
#include "utils.h"
|
||||||
#include "video_context.h"
|
#include "video_context.h"
|
||||||
|
|
||||||
BEGIN_EVENT_TABLE(SubtitlesGrid, BaseGrid)
|
|
||||||
EVT_MENU_RANGE(MENU_SHOW_COL,MENU_SHOW_COL+15,SubtitlesGrid::OnShowColMenu)
|
|
||||||
END_EVENT_TABLE()
|
|
||||||
|
|
||||||
SubtitlesGrid::SubtitlesGrid(wxWindow *parent, agi::Context *context, const wxSize& size, long style, const wxString& name)
|
SubtitlesGrid::SubtitlesGrid(wxWindow *parent, agi::Context *context, const wxSize& size, long style, const wxString& name)
|
||||||
: BaseGrid(parent,context,size,style,name)
|
: BaseGrid(parent,context,size,style,name)
|
||||||
, seekListener(context->videoController->AddSeekListener(&SubtitlesGrid::Refresh, this, false, (const wxRect *)NULL))
|
|
||||||
, context_menu(0)
|
|
||||||
{
|
{
|
||||||
OnHighlightVisibleChange(*OPT_GET("Subtitle/Grid/Highlight Subtitles in Frame"));
|
|
||||||
OPT_SUB("Subtitle/Grid/Highlight Subtitles in Frame", &SubtitlesGrid::OnHighlightVisibleChange, this);
|
|
||||||
OPT_SUB("Subtitle/Grid/Hide Overrides", std::tr1::bind(&SubtitlesGrid::Refresh, this, false, (const wxRect*)0));
|
|
||||||
context->ass->AddCommitListener(&SubtitlesGrid::OnSubtitlesCommit, this);
|
|
||||||
context->ass->AddFileOpenListener(&SubtitlesGrid::OnSubtitlesOpen, this);
|
|
||||||
}
|
|
||||||
|
|
||||||
/// @brief Destructor
|
|
||||||
SubtitlesGrid::~SubtitlesGrid() {
|
|
||||||
delete context_menu;
|
|
||||||
}
|
|
||||||
|
|
||||||
void SubtitlesGrid::OnSubtitlesCommit(int type) {
|
|
||||||
if (type == AssFile::COMMIT_NEW)
|
|
||||||
UpdateMaps(true);
|
|
||||||
else if (type & AssFile::COMMIT_ORDER || type & AssFile::COMMIT_DIAG_ADDREM)
|
|
||||||
UpdateMaps(false);
|
|
||||||
|
|
||||||
if (type & AssFile::COMMIT_DIAG_META) {
|
|
||||||
SetColumnWidths();
|
|
||||||
Refresh(false);
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
if (type & AssFile::COMMIT_DIAG_TIME)
|
|
||||||
RefreshRect(wxRect(time_cols_x, 0, time_cols_w, GetClientSize().GetHeight()), false);
|
|
||||||
if (type & AssFile::COMMIT_DIAG_TEXT)
|
|
||||||
RefreshRect(wxRect(text_col_x, 0, text_col_w, GetClientSize().GetHeight()), false);
|
|
||||||
}
|
|
||||||
|
|
||||||
void SubtitlesGrid::OnSubtitlesOpen() {
|
|
||||||
BeginBatch();
|
|
||||||
ClearMaps();
|
|
||||||
UpdateMaps();
|
|
||||||
|
|
||||||
if (GetRows()) {
|
|
||||||
SetActiveLine(GetDialogue(0));
|
|
||||||
SelectRow(0);
|
|
||||||
}
|
|
||||||
EndBatch();
|
|
||||||
SetColumnWidths();
|
|
||||||
}
|
|
||||||
|
|
||||||
void SubtitlesGrid::OpenHeaderContextMenu() {
|
|
||||||
const wxString strings[] = {
|
|
||||||
_("Line Number"),
|
|
||||||
_("Layer"),
|
|
||||||
_("Start"),
|
|
||||||
_("End"),
|
|
||||||
_("Style"),
|
|
||||||
_("Actor"),
|
|
||||||
_("Effect"),
|
|
||||||
_("Left"),
|
|
||||||
_("Right"),
|
|
||||||
_("Vert"),
|
|
||||||
};
|
|
||||||
|
|
||||||
// Create Menu
|
|
||||||
wxMenu menu;
|
|
||||||
for (size_t i=0;i<columns;i++) {
|
|
||||||
menu.Append(MENU_SHOW_COL + i,strings[i],"",wxITEM_CHECK)->Check(showCol[i]);
|
|
||||||
}
|
|
||||||
PopupMenu(&menu);
|
|
||||||
}
|
|
||||||
|
|
||||||
void SubtitlesGrid::OpenBodyContextMenu() {
|
|
||||||
if (!context_menu) context_menu = menu::GetMenu("grid_context", context);
|
|
||||||
menu::OpenPopupMenu(context_menu, this);
|
|
||||||
}
|
|
||||||
|
|
||||||
/// @brief Process a show/hide column event
|
|
||||||
/// @param event
|
|
||||||
void SubtitlesGrid::OnShowColMenu(wxCommandEvent &event) {
|
|
||||||
int item = event.GetId()-MENU_SHOW_COL;
|
|
||||||
showCol[item] = !showCol[item];
|
|
||||||
|
|
||||||
std::vector<bool> map(showCol, showCol + columns);
|
|
||||||
OPT_SET("Subtitle/Grid/Column")->SetListBool(map);
|
|
||||||
|
|
||||||
// Update
|
|
||||||
SetColumnWidths();
|
|
||||||
Refresh(false);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
static void trim_text(AssDialogue *diag) {
|
static void trim_text(AssDialogue *diag) {
|
||||||
|
@ -162,6 +67,7 @@ static void trim_text(AssDialogue *diag) {
|
||||||
start.ReplaceFirst(&diag->Text, "");
|
start.ReplaceFirst(&diag->Text, "");
|
||||||
end.ReplaceFirst(&diag->Text, "");
|
end.ReplaceFirst(&diag->Text, "");
|
||||||
}
|
}
|
||||||
|
|
||||||
static void expand_times(AssDialogue *src, AssDialogue *dst) {
|
static void expand_times(AssDialogue *src, AssDialogue *dst) {
|
||||||
dst->Start.SetMS(std::min(dst->Start.GetMS(), src->Start.GetMS()));
|
dst->Start.SetMS(std::min(dst->Start.GetMS(), src->Start.GetMS()));
|
||||||
dst->End.SetMS(std::max(dst->End.GetMS(), src->End.GetMS()));
|
dst->End.SetMS(std::max(dst->End.GetMS(), src->End.GetMS()));
|
||||||
|
@ -552,12 +458,3 @@ void SubtitlesGrid::SetSelectionFromAbsolute(std::vector<int> &selection) {
|
||||||
|
|
||||||
SetSelectedSet(newsel);
|
SetSelectedSet(newsel);
|
||||||
}
|
}
|
||||||
|
|
||||||
void SubtitlesGrid::OnHighlightVisibleChange(agi::OptionValue const& opt) {
|
|
||||||
if (opt.GetBool()) {
|
|
||||||
seekListener.Unblock();
|
|
||||||
}
|
|
||||||
else {
|
|
||||||
seekListener.Block();
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
|
@ -35,9 +35,6 @@
|
||||||
///
|
///
|
||||||
|
|
||||||
#ifndef AGI_PRE
|
#ifndef AGI_PRE
|
||||||
#include <fstream>
|
|
||||||
#include <iostream>
|
|
||||||
#include <list>
|
|
||||||
#include <vector>
|
#include <vector>
|
||||||
|
|
||||||
#include <wx/grid.h>
|
#include <wx/grid.h>
|
||||||
|
@ -46,35 +43,14 @@
|
||||||
|
|
||||||
#include "base_grid.h"
|
#include "base_grid.h"
|
||||||
|
|
||||||
#include <libaegisub/signal.h>
|
|
||||||
|
|
||||||
namespace agi { class OptionValue; }
|
|
||||||
|
|
||||||
class AssEntry;
|
|
||||||
class wxMenu;
|
|
||||||
|
|
||||||
/// DOCME
|
/// DOCME
|
||||||
/// @class SubtitlesGrid
|
/// @class SubtitlesGrid
|
||||||
/// @brief DOCME
|
/// @brief DOCME
|
||||||
///
|
///
|
||||||
/// DOCME
|
/// DOCME
|
||||||
class SubtitlesGrid: public BaseGrid {
|
class SubtitlesGrid: public BaseGrid {
|
||||||
agi::signal::Connection seekListener;
|
|
||||||
wxMenu *context_menu;
|
|
||||||
|
|
||||||
void OpenHeaderContextMenu();
|
|
||||||
void OpenBodyContextMenu();
|
|
||||||
|
|
||||||
void OnShowColMenu(wxCommandEvent &event);
|
|
||||||
|
|
||||||
void OnHighlightVisibleChange(agi::OptionValue const& opt);
|
|
||||||
|
|
||||||
void OnSubtitlesCommit(int type);
|
|
||||||
void OnSubtitlesOpen();
|
|
||||||
|
|
||||||
public:
|
public:
|
||||||
SubtitlesGrid(wxWindow *parent, agi::Context *context, const wxSize& size = wxDefaultSize, long style = wxWANTS_CHARS, const wxString& name = wxPanelNameStr);
|
SubtitlesGrid(wxWindow *parent, agi::Context *context, const wxSize& size = wxDefaultSize, long style = wxWANTS_CHARS, const wxString& name = wxPanelNameStr);
|
||||||
~SubtitlesGrid();
|
|
||||||
|
|
||||||
/// @brief Adjoins selected lines, setting each line's start time to the previous line's end time
|
/// @brief Adjoins selected lines, setting each line's start time to the previous line's end time
|
||||||
/// @param n1 First line to adjoin
|
/// @param n1 First line to adjoin
|
||||||
|
@ -113,11 +89,4 @@ public:
|
||||||
/// @brief Update list of selected lines from absolute selection
|
/// @brief Update list of selected lines from absolute selection
|
||||||
/// @param selection Sorted list of selections
|
/// @param selection Sorted list of selections
|
||||||
void SetSelectionFromAbsolute(std::vector<int> &selection);
|
void SetSelectionFromAbsolute(std::vector<int> &selection);
|
||||||
|
|
||||||
DECLARE_EVENT_TABLE()
|
|
||||||
};
|
|
||||||
|
|
||||||
/// Menu event IDs
|
|
||||||
enum {
|
|
||||||
MENU_SHOW_COL = 1250 // Don't put anything after this
|
|
||||||
};
|
};
|
||||||
|
|
Loading…
Reference in a new issue