Template VisualTool on the type of draggable features to use

Originally committed to SVN as r4320.
This commit is contained in:
Thomas Goyne 2010-05-20 08:55:46 +00:00
parent 2ef8302a6d
commit a282393b47
12 changed files with 75 additions and 52 deletions

View File

@ -81,7 +81,6 @@ class SubtitlesProvider;
/// DOCME
class VideoContext : public wxEvtHandler {
friend class AudioProvider;
friend class VisualTool;
private:
/// DOCME

View File

@ -46,7 +46,7 @@
class VideoSlider;
class VideoBox;
class VideoOutGL;
class VisualTool;
class IVisualTool;
struct VideoState {
int x;
@ -132,7 +132,7 @@ class VideoDisplay: public wxGLCanvas {
std::auto_ptr<VideoOutGL> videoOut;
/// The active visual typesetting tool
std::auto_ptr<VisualTool> tool;
std::auto_ptr<IVisualTool> tool;
/// The current tool's ID
int activeMode;
/// The toolbar used by individual typesetting tools

View File

@ -34,6 +34,8 @@
/// @ingroup visual_ts
///
#pragma once
class OpenGLWrapper;
class AssDialogue;

View File

@ -59,13 +59,15 @@
#include "video_context.h"
#include "video_display.h"
#include "video_provider_manager.h"
#include "visual_feature.h"
#include "visual_tool.h"
const wxColour VisualTool::colour[4] = {wxColour(106,32,19), wxColour(255,169,40), wxColour(255,253,185), wxColour(187,0,0)};
const wxColour IVisualTool::colour[4] = {wxColour(106,32,19), wxColour(255,169,40), wxColour(255,253,185), wxColour(187,0,0)};
/// @brief Constructor
/// @param parent
VisualTool::VisualTool(VideoDisplay *parent, VideoState const& video)
template<class FeatureType>
VisualTool<FeatureType>::VisualTool(VideoDisplay *parent, VideoState const& video)
: parent(parent)
, holding(false)
, curDiag(NULL)
@ -83,12 +85,14 @@ VisualTool::VisualTool(VideoDisplay *parent, VideoState const& video)
}
/// @brief Destructor
VisualTool::~VisualTool() {
template<class FeatureType>
VisualTool<FeatureType>::~VisualTool() {
}
/// @brief Mouse event
/// @param event
void VisualTool::OnMouseEvent (wxMouseEvent &event) {
template<class FeatureType>
void VisualTool<FeatureType>::OnMouseEvent (wxMouseEvent &event) {
bool realTime = Options.AsBool(L"Video Visual Realtime");
if (event.Leaving()) {
@ -203,7 +207,8 @@ void VisualTool::OnMouseEvent (wxMouseEvent &event) {
/// @brief Commit
/// @param full
void VisualTool::Commit(bool full) {
template<class FeatureType>
void VisualTool<FeatureType>::Commit(bool full) {
SubtitlesGrid *grid = VideoContext::Get()->grid;
if (full) grid->ass->FlagAsModified(_("visual typesetting"));
grid->CommitChanges(false,!full);
@ -212,7 +217,8 @@ void VisualTool::Commit(bool full) {
/// @brief Get active dialogue line
/// @return
AssDialogue* VisualTool::GetActiveDialogueLine() {
template<class FeatureType>
AssDialogue* VisualTool<FeatureType>::GetActiveDialogueLine() {
SubtitlesGrid *grid = VideoContext::Get()->grid;
AssDialogue *diag = grid->GetDialogue(grid->editBox->linen);
@ -229,7 +235,8 @@ AssDialogue* VisualTool::GetActiveDialogueLine() {
/// @brief Get feature under mouse
/// @return
int VisualTool::GetHighlightedFeature() {
template<class FeatureType>
int VisualTool<FeatureType>::GetHighlightedFeature() {
int highestLayerFound = INT_MIN;
int bestMatch = -1;
for (size_t i=0;i<features.size();i++) {
@ -242,7 +249,8 @@ int VisualTool::GetHighlightedFeature() {
}
/// @brief Draw all features
void VisualTool::DrawAllFeatures() {
template<class FeatureType>
void VisualTool<FeatureType>::DrawAllFeatures() {
if (!dragListOK) {
PopulateFeatureList();
dragListOK = true;
@ -259,7 +267,8 @@ void VisualTool::DrawAllFeatures() {
}
/// @brief Refresh
void VisualTool::Refresh() {
template<class FeatureType>
void VisualTool<FeatureType>::Refresh() {
frame_n = VideoContext::Get()->GetFrameN();
if (!dragging) dragListOK = false;
DoRefresh();
@ -269,7 +278,8 @@ void VisualTool::Refresh() {
/// @param diag
/// @param x
/// @param y
void VisualTool::GetLinePosition(AssDialogue *diag,int &x, int &y) {
template<class FeatureType>
void VisualTool<FeatureType>::GetLinePosition(AssDialogue *diag,int &x, int &y) {
int orgx=0,orgy=0;
GetLinePosition(diag,x,y,orgx,orgy);
}
@ -280,7 +290,8 @@ void VisualTool::GetLinePosition(AssDialogue *diag,int &x, int &y) {
/// @param y
/// @param orgx
/// @param orgy
void VisualTool::GetLinePosition(AssDialogue *diag,int &x, int &y, int &orgx, int &orgy) {
template<class FeatureType>
void VisualTool<FeatureType>::GetLinePosition(AssDialogue *diag,int &x, int &y, int &orgx, int &orgy) {
if (!diag) {
x = INT_MIN;
y = INT_MIN;
@ -399,7 +410,8 @@ void VisualTool::GetLinePosition(AssDialogue *diag,int &x, int &y, int &orgx, in
/// @param y2
/// @param t1
/// @param t2
void VisualTool::GetLineMove(AssDialogue *diag,bool &hasMove,int &x1,int &y1,int &x2,int &y2,int &t1,int &t2) {
template<class FeatureType>
void VisualTool<FeatureType>::GetLineMove(AssDialogue *diag,bool &hasMove,int &x1,int &y1,int &x2,int &y2,int &t1,int &t2) {
// Parse tags
hasMove = false;
diag->ParseASSTags();
@ -443,7 +455,8 @@ void VisualTool::GetLineMove(AssDialogue *diag,bool &hasMove,int &x1,int &y1,int
/// @param rx
/// @param ry
/// @param rz
void VisualTool::GetLineRotation(AssDialogue *diag,float &rx,float &ry,float &rz) {
template<class FeatureType>
void VisualTool<FeatureType>::GetLineRotation(AssDialogue *diag,float &rx,float &ry,float &rz) {
// Default values
rx = ry = rz = 0.0f;
@ -483,7 +496,8 @@ void VisualTool::GetLineRotation(AssDialogue *diag,float &rx,float &ry,float &rz
/// @param diag
/// @param scalX
/// @param scalY
void VisualTool::GetLineScale(AssDialogue *diag,float &scalX,float &scalY) {
template<class FeatureType>
void VisualTool<FeatureType>::GetLineScale(AssDialogue *diag,float &scalX,float &scalY) {
// Default values
scalX = scalY = 100.0f;
@ -520,7 +534,8 @@ void VisualTool::GetLineScale(AssDialogue *diag,float &scalX,float &scalY) {
/// @param x2
/// @param y2
/// @param inverse
void VisualTool::GetLineClip(AssDialogue *diag,int &x1,int &y1,int &x2,int &y2,bool &inverse) {
template<class FeatureType>
void VisualTool<FeatureType>::GetLineClip(AssDialogue *diag,int &x1,int &y1,int &x2,int &y2,bool &inverse) {
// Default values
x1 = y1 = 0;
int sw,sh;
@ -570,7 +585,8 @@ void VisualTool::GetLineClip(AssDialogue *diag,int &x1,int &y1,int &x2,int &y2,b
/// @param diag
/// @param scale
/// @param inverse
wxString VisualTool::GetLineVectorClip(AssDialogue *diag,int &scale,bool &inverse) {
template<class FeatureType>
wxString VisualTool<FeatureType>::GetLineVectorClip(AssDialogue *diag,int &scale,bool &inverse) {
// Prepare overrides
wxString result;
scale = 1;
@ -615,7 +631,8 @@ wxString VisualTool::GetLineVectorClip(AssDialogue *diag,int &scale,bool &invers
/// @brief Set override
/// @param tag
/// @param value
void VisualTool::SetOverride(AssDialogue* line, wxString tag, wxString value) {
template<class FeatureType>
void VisualTool<FeatureType>::SetOverride(AssDialogue* line, wxString tag, wxString value) {
if (!line) return;
wxString removeTag;
@ -658,3 +675,5 @@ void VisualTool::SetOverride(AssDialogue* line, wxString tag, wxString value) {
parent->SetFocus();
}
template class VisualTool<VisualDraggableFeature>;

View File

@ -45,26 +45,36 @@
#endif
#include "gl_wrap.h"
#include "visual_feature.h"
//////////////
// Prototypes
class VideoDisplay;
class AssDialogue;
class VisualTool;
struct VideoState;
/// DOCME
/// First window id for visualsubtoolbar items
#define VISUAL_SUB_TOOL_START 1300
/// DOCME
/// Last window id for visualsubtoolbar items
#define VISUAL_SUB_TOOL_END (VISUAL_SUB_TOOL_START+100)
class IVisualTool : public OpenGLWrapper {
protected:
/// DOCME
static const wxColour colour[4];
public:
virtual void OnMouseEvent(wxMouseEvent &event)=0;
virtual void OnSubTool(wxCommandEvent &)=0;
virtual void Update()=0;
virtual void Draw()=0;
virtual void Refresh()=0;
virtual ~IVisualTool() { };
};
/// DOCME
/// @class VisualTool
/// @brief DOCME
/// DOCME
class VisualTool : public OpenGLWrapper {
template<class FeatureType>
class VisualTool : public IVisualTool {
private:
/// DOCME
@ -79,9 +89,6 @@ protected:
/// DOCME
VideoDisplay *parent;
/// DOCME
static const wxColour colour[4];
/// DOCME
bool holding;
@ -95,7 +102,7 @@ protected:
int curFeature;
/// DOCME
std::vector<VisualDraggableFeature> features;
std::vector<FeatureType> features;
/// DOCME
bool dragListOK;
@ -153,17 +160,17 @@ protected:
/// @brief DOCME
/// @param feature
///
virtual bool InitializeDrag(VisualDraggableFeature &feature) { return true; }
virtual bool InitializeDrag(FeatureType &feature) { return true; }
/// @brief DOCME
/// @param feature
///
virtual void UpdateDrag(VisualDraggableFeature &feature) {}
virtual void UpdateDrag(FeatureType &feature) {}
/// @brief DOCME
/// @param feature
///
virtual void CommitDrag(VisualDraggableFeature &feature) {}
virtual void CommitDrag(FeatureType &feature) {}
/// @brief DOCME
///

View File

@ -34,20 +34,15 @@
/// @ingroup visual_ts
///
///////////
// Headers
#include "visual_feature.h"
#include "visual_tool.h"
/// DOCME
/// @class VisualToolClip
/// @brief DOCME
///
/// DOCME
class VisualToolClip : public VisualTool {
class VisualToolClip : public VisualTool<VisualDraggableFeature> {
private:
/// DOCME

View File

@ -34,11 +34,7 @@
/// @ingroup visual_ts
///
///////////
// Headers
#include "visual_feature.h"
#include "visual_tool.h"
@ -47,7 +43,7 @@
/// @brief DOCME
///
/// DOCME
class VisualToolCross : public VisualTool {
class VisualToolCross : public VisualTool<VisualDraggableFeature> {
public:
VisualToolCross(VideoDisplay *parent, VideoState const& video, wxToolBar *);
~VisualToolCross();

View File

@ -39,6 +39,7 @@
#include <wx/toolbar.h>
#endif
#include "visual_feature.h"
#include "visual_tool.h"
@ -47,7 +48,7 @@
/// @brief DOCME
///
/// DOCME
class VisualToolDrag : public VisualTool {
class VisualToolDrag : public VisualTool<VisualDraggableFeature> {
private:
/// DOCME
wxToolBar *toolBar;

View File

@ -34,12 +34,13 @@
/// @ingroup visual_ts
///
#include "visual_feature.h"
#include "visual_tool.h"
/// DOCME
/// @class VisualToolRotateXY
/// @brief DOCME
class VisualToolRotateXY : public VisualTool {
class VisualToolRotateXY : public VisualTool<VisualDraggableFeature> {
private:
/// DOCME

View File

@ -34,6 +34,7 @@
/// @ingroup visual_ts
///
#include "visual_feature.h"
#include "visual_tool.h"
@ -42,7 +43,7 @@
/// @brief DOCME
///
/// DOCME
class VisualToolRotateZ : public VisualTool {
class VisualToolRotateZ : public VisualTool<VisualDraggableFeature> {
private:
/// DOCME

View File

@ -34,12 +34,13 @@
/// @ingroup visual_ts
///
#include "visual_feature.h"
#include "visual_tool.h"
/// DOCME
/// @class VisualToolScale
/// @brief DOCME
class VisualToolScale : public VisualTool {
class VisualToolScale : public VisualTool<VisualDraggableFeature> {
private:
/// DOCME

View File

@ -34,6 +34,7 @@
/// @ingroup visual_ts
///
#include "visual_feature.h"
#include "visual_tool.h"
#include "spline.h"
@ -42,7 +43,7 @@ class wxToolBar;
/// DOCME
/// @class VisualToolVectorClip
/// @brief DOCME
class VisualToolVectorClip : public VisualTool {
class VisualToolVectorClip : public VisualTool<VisualDraggableFeature> {
private:
/// DOCME