Skip to content
Extraits de code Groupes Projets
Valider c7f8ba6c rédigé par Rodrigo Braz Monteiro's avatar Rodrigo Braz Monteiro
Parcourir les fichiers

Some interface clean up.

Originally committed to SVN as r2477.
parent f279bc2a
Aucune branche associée trouvée
Aucune étiquette associée trouvée
Aucune requête de fusion associée trouvée
......@@ -319,6 +319,10 @@
<Filter
Name="Formats"
>
<File
RelativePath=".\src\format_handler.cpp"
>
</File>
<File
RelativePath=".\src\format_handler.h"
>
......
......@@ -66,6 +66,7 @@ namespace Athenasub {
class IDeltaCoder;
class CController;
class CAction;
class IAction;
// Smart pointers
......@@ -83,6 +84,7 @@ namespace Athenasub {
typedef shared_ptr<INotification> Notification;
typedef shared_ptr<ISection> Section;
typedef shared_ptr<IDeltaCoder> DeltaCoder;
typedef shared_ptr<IAction> Action;
// Const smart pointers
......@@ -100,27 +102,6 @@ namespace Athenasub {
// Model
class IModel {
friend class CFormatHandler;
friend class CActionList;
friend class CController;
friend class CAction;
protected:
virtual void ProcessActionList(CActionList &actionList,int type=0) = 0;
virtual void Undo(const String owner="") = 0;
virtual void Redo(const String owner="") = 0;
virtual void ActivateStack(ActionStack stack,bool isUndo,const String &owner) = 0;
virtual void DispatchNotifications(Notification notification) const = 0;
virtual void Clear() = 0;
virtual void Load(Reader &input,Format format=Format()) = 0;
virtual Section AddSection(String name) = 0;
virtual Section GetMutableSection(String name) = 0;
virtual Section GetMutableSectionByIndex(size_t index) = 0;
public:
virtual ~IModel() {}
......@@ -335,8 +316,6 @@ namespace Athenasub {
// Action interface
class IAction;
typedef shared_ptr<IAction> Action;
class IAction {
public:
virtual ~IAction() {}
......@@ -415,7 +394,6 @@ namespace Athenasub {
class ILibAthenaSub {
public:
virtual ~ILibAthenaSub() {}
virtual Model CreateModel()=0;
};
typedef shared_ptr<ILibAthenaSub> LibAthenaSub;
......
......@@ -48,6 +48,16 @@ CAction::CAction(Model _model)
if (!model) THROW_ATHENA_EXCEPTION(Exception::Internal_Error);
}
Model CAction::GetModel() const
{
return model;
}
Section CAction::GetSection(String name) const
{
return static_pointer_cast<CModel>(model)->GetMutableSection(name);
}
///////////////////////////// Insert line /////////////////////////////
......
......@@ -43,13 +43,13 @@ namespace Athenasub {
// Action base class
class CAction : public IAction {
private:
mutable Model model;
Model model;
protected:
CAction(Model model);
Model GetModel() const { return model; }
Section GetSection(String name) const { return model->GetMutableSection(name); }
Model GetModel() const;
Section GetSection(String name) const;
};
// Insert line
......
......@@ -41,7 +41,7 @@ using namespace Athenasub;
///////////////
// Constructor
CActionList::CActionList(weak_ptr<IModel> _model,String _actionName,const String _owner,bool _undoAble)
: model(_model), owner(_owner), undoAble(_undoAble)
: model(dynamic_pointer_cast<CModel>(Model(_model))), owner(_owner), undoAble(_undoAble)
{
valid = false;
Start(_actionName);
......@@ -96,7 +96,7 @@ void CActionList::Start(const String name)
void CActionList::Finish()
{
if (valid) {
Model(model)->ProcessActionList(*this);
shared_ptr<CModel>(model)->ProcessActionList(*this);
actions.clear();
valid = false;
}
......@@ -125,7 +125,7 @@ void CActionList::RemoveLine(int position,const String section)
// Insert a "modify line" action
Entry CActionList::ModifyLine(int position,const String section)
{
Section sect = Model(model)->GetMutableSection(section);
Section sect = shared_ptr<CModel>(model)->GetMutableSection(section);
Entry entry = sect->GetEntry(position)->Clone();
Action action = Action (new ActionModify(model.lock(),entry,position,section,false));
AddAction(action);
......@@ -138,7 +138,7 @@ Entry CActionList::ModifyLine(int position,const String section)
std::vector<Entry> CActionList::ModifyLines(Selection selection,const String section)
{
// Get section
Section sect = Model(model)->GetMutableSection(section);
Section sect = shared_ptr<CModel>(model)->GetMutableSection(section);
// Generate entries
std::vector<Entry> entries(selection->GetCount());
......
......@@ -56,7 +56,7 @@ namespace Athenasub {
private:
String actionName;
String owner;
weak_ptr<IModel> model;
weak_ptr<CModel> model;
std::list<Action> actions;
bool valid;
bool undoAble;
......
......@@ -46,7 +46,7 @@ using namespace Athenasub;
///////////////
// Constructor
CController::CController(Model _model)
: model(_model)
: model(dynamic_pointer_cast<CModel>(_model))
{
}
......
......@@ -43,7 +43,7 @@ namespace Athenasub {
friend class CModel;
private:
Model model;
shared_ptr<CModel> model;
CController (Model model);
public:
......
// Copyright (c) 2008, 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/ATHENASUB
//
// Website: http://www.aegisub.net
// Contact: mailto:amz@aegisub.net
//
#include "format_handler.h"
#include "model.h"
using namespace Athenasub;
Section CFormatHandler::AddSection(IModel &model,String name) const
{
return (dynamic_cast<CModel*>(&model))->AddSection(name);
}
ConstSection CFormatHandler::GetSection(const IModel &model,String name) const
{
return model.GetSection(name);
}
ConstSection CFormatHandler::GetSectionByIndex(const IModel &model,size_t index) const
{
return model.GetSectionByIndex(index);
}
Section CFormatHandler::GetSection(IModel &model,String name) const
{
return (dynamic_cast<CModel*>(&model))->GetMutableSection(name);
}
Section CFormatHandler::GetSectionByIndex(IModel &model,size_t index) const
{
return (dynamic_cast<CModel*>(&model))->GetMutableSectionByIndex(index);
}
size_t CFormatHandler::GetSectionCount(const IModel &model) const {
return model.GetSectionCount();
}
......@@ -45,12 +45,12 @@ namespace Athenasub {
protected:
virtual ~CFormatHandler() {}
Section AddSection(IModel &model,String name) const { return model.AddSection(name); }
ConstSection GetSection(const IModel &model,String name) const { return model.GetSection(name); }
ConstSection GetSectionByIndex(const IModel &model,size_t index) const { return model.GetSectionByIndex(index); }
Section GetSection(IModel &model,String name) const { return model.GetMutableSection(name); }
Section GetSectionByIndex(IModel &model,size_t index) const { return model.GetMutableSectionByIndex(index); }
size_t GetSectionCount(const IModel &model) const { return model.GetSectionCount(); }
Section AddSection(IModel &model,String name) const;
ConstSection GetSection(const IModel &model,String name) const;
ConstSection GetSectionByIndex(const IModel &model,size_t index) const;
Section GetSection(IModel &model,String name) const;
Section GetSectionByIndex(IModel &model,size_t index) const;
size_t GetSectionCount(const IModel &model) const;
public:
//CFormatHandler(IModel& _model) : model(_model) {}
......
......@@ -48,7 +48,7 @@ Athenasub::TextReaderCache::TextReaderCache(shared_ptr<TextReader> src)
String TextReaderCache::ReadLineFromFile()
{
if (bufferPos == buffer.size()) {
LoadMore(1000000);
LoadMore(1);
}
if (bufferPos == buffer.size()) {
return "";
......
0% Chargement en cours ou .
You are about to add 0 people to the discussion. Proceed with caution.
Veuillez vous inscrire ou vous pour commenter