This repository has been archived on 2023-07-11. You can view files and clone it, but cannot push or open issues or pull requests.
fte/o_model.cpp

191 lines
4 KiB
C++

/* o_model.cpp
*
* Copyright (c) 1994-1996, Marko Macek
*
* You may distribute under the terms of either the GNU General Public
* License or the Artistic License, as specified in the README file.
*
*/
#include "fte.h"
EModel *ActiveModel = 0;
char msgbuftmp[MSGBUFTMP_SIZE] = "";
EModel *FindModelID(EModel *Model, int ID) {
EModel *M = Model;
int No = ID;
while (M) {
if (M->ModelNo == No)
return M;
M = M->Next;
if (M == Model)
break;
}
return 0;
}
int GetNewModelID(EModel *B) {
static int lastid = -1;
while (FindModelID(B, ++lastid) != 0) /* */;
return lastid;
}
EModel::EModel(int createFlags, EModel **ARoot) {
Root = ARoot;
if (Root) {
if (*Root) {
if (createFlags & cfAppend) {
Prev = *Root;
Next = (*Root)->Next;
} else {
Next = *Root;
Prev = (*Root)->Prev;
}
Prev->Next = this;
Next->Prev = this;
} else
Prev = Next = this;
if (!(createFlags & cfNoActivate))
*Root = this;
} else
Prev = Next = this;
View = 0;
ModelNo = -1;
ModelNo = GetNewModelID(this);
}
EModel::~EModel() {
EModel *D = this;
while (D) {
D->NotifyDelete(this);
D = D->Next;
if (D == this)
break;
}
if (Next != this) {
Prev->Next = Next;
Next->Prev = Prev;
if (*Root == this)
*Root = Next;
} else
*Root = 0;
}
void EModel::AddView(EView *V) {
RemoveView(V);
if (V)
V->NextView = View;
View = V;
}
void EModel::RemoveView(EView *V) {
EView **X = &View;
if (!V) return;
while (*X) {
if ((*X) == V) {
*X = V->NextView;
return;
}
X = (&(*X)->NextView);
}
}
void EModel::SelectView(EView *V) {
RemoveView(V);
AddView(V);
}
EViewPort *EModel::CreateViewPort(EView *V) {
return 0;
}
int EModel::ExecCommand(int Command, ExState &State) {
return ErFAIL;
}
void EModel::HandleEvent(TEvent &Event) {
}
void EModel::Msg(int level, const char *s, ...) {
va_list ap;
if (View == 0)
return;
va_start(ap, s);
vsprintf(msgbuftmp, s, ap);
va_end(ap);
if (level != S_BUSY)
View->SetMsg(msgbuftmp);
}
int EModel::CanQuit() {
return 1;
}
int EModel::ConfQuit(GxView *V, int multiFile) {
return 1;
}
int EModel::GetContext() { return CONTEXT_NONE; }
EEventMap *EModel::GetEventMap() { return 0; }
int EModel::BeginMacro() { return 1; }
void EModel::GetName(char *AName, int MaxLen) { *AName = 0; }
void EModel::GetPath(char *APath, int MaxLen) { *APath = 0; }
void EModel::GetInfo(char *AInfo, int MaxLen) { *AInfo = 0; }
void EModel::GetTitle(char *ATitle, int MaxLen, char *ASTitle, int SMaxLen) { *ATitle = 0; *ASTitle = 0; }
void EModel::NotifyPipe(int PipeId) { }
void EModel::NotifyDelete(EModel *Deleted) {
}
void EModel::DeleteRelated() {
}
EViewPort::EViewPort(EView *V) { View = V; ReCenter = 0; }
EViewPort::~EViewPort() {}
void EViewPort::HandleEvent(TEvent &Event) { }
void EViewPort::UpdateView() { }
void EViewPort::RepaintView() { }
void EViewPort::UpdateStatus() { }
void EViewPort::RepaintStatus() { }
void EViewPort::GetPos() { }
void EViewPort::StorePos() { }
void EViewPort::Resize(int Width, int Height) {}
void EModel::UpdateTitle() {
char Title[256] = ""; //fte: ";
char STitle[256] = ""; //"fte: ";
EView *V;
GetTitle((char *)(Title + 0), sizeof(Title) - 0,
(char *)(STitle + 0), sizeof(STitle) - 0);
V = View;
while (V) {
V->MView->Win->UpdateTitle(Title, STitle);
V = V->NextView;
}
}
int EModel::GetStrVar(int var, char *str, int buflen) {
switch (var) {
case mvCurDirectory:
return GetDefaultDirectory(this, str, buflen);
}
return 0;
}
int EModel::GetIntVar(int var, int *value) {
return 0;
}