191 lines
4 KiB
C++
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;
|
||
|
}
|