Make several methods in BaseGrid static or const and clean up some of the implementations.

Originally committed to SVN as r4362.
This commit is contained in:
Thomas Goyne 2010-05-26 07:17:34 +00:00
parent acc1e93728
commit d2a81d871b
3 changed files with 47 additions and 65 deletions

View File

@ -40,6 +40,7 @@
#include "config.h" #include "config.h"
#ifndef AGI_PRE #ifndef AGI_PRE
#include <algorithm>
#include <wx/sizer.h> #include <wx/sizer.h>
#endif #endif
@ -205,27 +206,23 @@ void BaseGrid::MakeCellVisible(int row, int col,bool center) {
/// @param select /// @param select
/// ///
void BaseGrid::SelectRow(int row, bool addToSelected, bool select) { void BaseGrid::SelectRow(int row, bool addToSelected, bool select) {
// Sanity checking
if (row >= GetRows()) row = GetRows()-1;
else if (row < 0) row = 0;
if (!addToSelected) ClearSelection(); if (!addToSelected) ClearSelection();
try {
bool cur = selMap.at(row);
if (select != cur) {
selMap.at(row) = select;
if (!addToSelected) Refresh(false); if (row < 0 || (size_t)row >= selMap.size()) return;
else { if (select != selMap[row]) {
int w = 0; selMap[row] = select;
int h = 0;
GetClientSize(&w,&h); if (!addToSelected) {
RefreshRect(wxRect(0,(row+1-yPos)*lineHeight,w,lineHeight),false); Refresh(false);
} }
else {
int w = 0;
int h = 0;
GetClientSize(&w,&h);
RefreshRect(wxRect(0,(row+1-yPos)*lineHeight,w,lineHeight),false);
} }
} }
catch (...) {}
} }
@ -268,15 +265,9 @@ void BaseGrid::ClearSelection() {
/// @param col /// @param col
/// @return /// @return
/// ///
bool BaseGrid::IsInSelection(int row, int col) const { bool BaseGrid::IsInSelection(int row, int) const {
if (row >= GetRows() || row < 0) return false; if ((size_t)row >= selMap.size() || row < 0) return false;
(void) col; return selMap[row];
try {
return selMap.at(row);
}
catch (...) {
return false;
}
} }
@ -284,13 +275,8 @@ bool BaseGrid::IsInSelection(int row, int col) const {
/// @brief Number of selected rows /// @brief Number of selected rows
/// @return /// @return
/// ///
int BaseGrid::GetNumberSelection() { int BaseGrid::GetNumberSelection() const {
int count = 0; return std::count(selMap.begin(), selMap.end(), true);
int rows = selMap.size();
for (int i=0;i<rows;i++) {
if (selMap[i]) count++;
}
return count;
} }
@ -298,14 +284,10 @@ int BaseGrid::GetNumberSelection() {
/// @brief Gets first selected row /// @brief Gets first selected row
/// @return /// @return
/// ///
int BaseGrid::GetFirstSelRow() { int BaseGrid::GetFirstSelRow() const {
int nrows = GetRows(); std::vector<bool>::const_iterator first = std::find(selMap.begin(), selMap.end(), true);
for (int i=0;i<nrows;i++) { if (first == selMap.end()) return -1;
if (IsInSelection(i,0)) { return std::distance(selMap.begin(), first);
return i;
}
}
return -1;
} }
@ -313,7 +295,7 @@ int BaseGrid::GetFirstSelRow() {
/// @brief Gets last selected row from first block selection /// @brief Gets last selected row from first block selection
/// @return /// @return
/// ///
int BaseGrid::GetLastSelRow() { int BaseGrid::GetLastSelRow() const {
int frow = GetFirstSelRow(); int frow = GetFirstSelRow();
while (IsInSelection(frow)) { while (IsInSelection(frow)) {
frow++; frow++;
@ -324,10 +306,10 @@ int BaseGrid::GetLastSelRow() {
/// @brief Gets all selected rows /// @brief Gets all selected rows
/// @param cont /// @param[out] cont
/// @return /// @return
/// ///
wxArrayInt BaseGrid::GetSelection(bool *cont) { wxArrayInt BaseGrid::GetSelection(bool *cont) const {
// Prepare // Prepare
int nrows = GetRows(); int nrows = GetRows();
int last = -1; int last = -1;
@ -973,13 +955,10 @@ void BaseGrid::SetColumnWidths() {
/// @param n /// @param n
/// @return /// @return
/// ///
AssDialogue *BaseGrid::GetDialogue(int n) { AssDialogue *BaseGrid::GetDialogue(int n) const {
try { try {
if (n < 0) return NULL; if (n < 0 || (size_t)n >= diagMap.size()) return NULL;
if ((size_t)n >= diagMap.size()) return NULL; return dynamic_cast<AssDialogue*>(*diagMap.at(n));
AssEntry *e = *diagMap.at(n);
if (e->GetType() != ENTRY_DIALOGUE) return NULL;
return dynamic_cast<AssDialogue*>(e);
} }
catch (...) { catch (...) {
return NULL; return NULL;
@ -993,10 +972,11 @@ AssDialogue *BaseGrid::GetDialogue(int n) {
/// @return /// @return
/// ///
bool BaseGrid::IsDisplayed(AssDialogue *line) { bool BaseGrid::IsDisplayed(AssDialogue *line) {
if (!VideoContext::Get()->IsLoaded()) return false; VideoContext* con = VideoContext::Get();
if (!con->IsLoaded()) return false;
int f1 = VFR_Output.GetFrameAtTime(line->Start.GetMS(),true); int f1 = VFR_Output.GetFrameAtTime(line->Start.GetMS(),true);
int f2 = VFR_Output.GetFrameAtTime(line->End.GetMS(),false); int f2 = VFR_Output.GetFrameAtTime(line->End.GetMS(),false);
if (f1 <= VideoContext::Get()->GetFrameN() && f2 >= VideoContext::Get()->GetFrameN()) return true; if (f1 <= con->GetFrameN() && f2 >= con->GetFrameN()) return true;
return false; return false;
} }
@ -1188,7 +1168,7 @@ void BaseGrid::SetByFrame (bool state) {
/// @param n1 /// @param n1
/// @param n2 /// @param n2
/// ///
wxArrayInt BaseGrid::GetRangeArray(int n1,int n2) { wxArrayInt BaseGrid::GetRangeArray(int n1,int n2) const {
// Swap if in wrong order // Swap if in wrong order
if (n2 < n1) { if (n2 < n1) {
int aux = n1; int aux = n1;

View File

@ -118,6 +118,9 @@ protected:
/// DOCME /// DOCME
int yPos; int yPos;
/// DOCME
std::vector<bool> selMap;
public: public:
/// DOCME /// DOCME
@ -133,9 +136,6 @@ public:
/// DOCME /// DOCME
std::vector<AssDialogue *> diagPtrMap; std::vector<AssDialogue *> diagPtrMap;
/// DOCME
std::vector<bool> selMap;
void AdjustScrollbar(); void AdjustScrollbar();
void SetColumnWidths(); void SetColumnWidths();
void BeginBatch(); void BeginBatch();
@ -145,22 +145,22 @@ public:
void SelectRow(int row, bool addToSelected = false, bool select=true); void SelectRow(int row, bool addToSelected = false, bool select=true);
void ClearSelection(); void ClearSelection();
bool IsInSelection(int row, int col=0) const; bool IsInSelection(int row, int col=0) const;
bool IsDisplayed(AssDialogue *line); static bool IsDisplayed(AssDialogue *line);
int GetNumberSelection(); int GetNumberSelection() const;
int GetFirstSelRow(); int GetFirstSelRow() const;
int GetLastSelRow(); int GetLastSelRow() const;
void SelectVisible(); void SelectVisible();
wxArrayInt GetSelection(bool *continuous=NULL); wxArrayInt GetSelection(bool *continuous=NULL) const;
void Clear(); void Clear();
void UpdateMaps(); void UpdateMaps();
void UpdateStyle(); void UpdateStyle();
int GetRows() const; int GetRows() const;
wxArrayInt GetRangeArray(int n1,int n2); wxArrayInt GetRangeArray(int n1,int n2) const;
void MakeCellVisible(int row, int col,bool center=true); void MakeCellVisible(int row, int col,bool center=true);
AssDialogue *GetDialogue(int n); AssDialogue *GetDialogue(int n) const;
BaseGrid(wxWindow* parent, wxWindowID id, const wxPoint& pos = wxDefaultPosition, const wxSize& size = wxDefaultSize, long style = wxWANTS_CHARS, const wxString& name = wxPanelNameStr); BaseGrid(wxWindow* parent, wxWindowID id, const wxPoint& pos = wxDefaultPosition, const wxSize& size = wxDefaultSize, long style = wxWANTS_CHARS, const wxString& name = wxPanelNameStr);
~BaseGrid(); ~BaseGrid();

View File

@ -179,8 +179,10 @@ void VisualToolDrag::PopulateFeatureList() {
features.clear(); features.clear();
// Get video data // Get video data
int numRows = VideoContext::Get()->grid->GetRows(); VideoContext* con = VideoContext::Get();
int framen = VideoContext::Get()->GetFrameN(); int numRows = con->grid->GetRows();
int framen = con->GetFrameN();
wxArrayInt sel = GetSelection();
// For each line // For each line
AssDialogue *diag; AssDialogue *diag;