Pack everything into `namespace SolveSpace`.

This is required to avoid name conflicts with the Cocoa libraries
on OS X.

I renamed the `class SolveSpace` to `class SolveSpaceUI`, because
that's what it does, and because otherwise the namespace would
have to be called something else than `namespace SolveSpace`.
pull/3/head
whitequark 2015-03-23 20:49:04 +03:00
parent 0807c2fdfe
commit 5d7a5bf3a7
17 changed files with 212 additions and 207 deletions

View File

@ -6,12 +6,12 @@
//-----------------------------------------------------------------------------
#include "solvespace.h"
void SolveSpace::Clipboard::Clear(void) {
void SolveSpaceUI::Clipboard::Clear(void) {
c.Clear();
r.Clear();
}
hEntity SolveSpace::Clipboard::NewEntityFor(hEntity he) {
hEntity SolveSpaceUI::Clipboard::NewEntityFor(hEntity he) {
ClipboardRequest *cr;
for(cr = r.First(); cr; cr = r.NextAfter(cr)) {
if(cr->oldEnt.v == he.v) {
@ -26,7 +26,7 @@ hEntity SolveSpace::Clipboard::NewEntityFor(hEntity he) {
return Entity::NO_ENTITY;
}
bool SolveSpace::Clipboard::ContainsEntity(hEntity he) {
bool SolveSpaceUI::Clipboard::ContainsEntity(hEntity he) {
hEntity hen = NewEntityFor(he);
if(hen.v) {
return true;

View File

@ -7,8 +7,6 @@
#ifndef __DSC_H
#define __DSC_H
#include <stddef.h>
#include "solvespace.h"
class Vector;

View File

@ -9,7 +9,7 @@
#include "solvespace.h"
#include <png.h>
void SolveSpace::ExportSectionTo(const char *filename) {
void SolveSpaceUI::ExportSectionTo(const char *filename) {
Vector gn = (SS.GW.projRight).Cross(SS.GW.projUp);
gn = gn.WithMagnitude(1);
@ -109,7 +109,7 @@ void SolveSpace::ExportSectionTo(const char *filename) {
bl.Clear();
}
void SolveSpace::ExportViewOrWireframeTo(const char *filename, bool wireframe) {
void SolveSpaceUI::ExportViewOrWireframeTo(const char *filename, bool wireframe) {
int i;
SEdgeList edges;
ZERO(&edges);
@ -194,7 +194,7 @@ void SolveSpace::ExportViewOrWireframeTo(const char *filename, bool wireframe) {
beziers.Clear();
}
void SolveSpace::ExportWireframeCurves(SEdgeList *sel, SBezierList *sbl,
void SolveSpaceUI::ExportWireframeCurves(SEdgeList *sel, SBezierList *sbl,
VectorFileWriter *out)
{
SBezierLoopSetSet sblss;
@ -217,7 +217,7 @@ void SolveSpace::ExportWireframeCurves(SEdgeList *sel, SBezierList *sbl,
sblss.Clear();
}
void SolveSpace::ExportLinesAndMesh(SEdgeList *sel, SBezierList *sbl, SMesh *sm,
void SolveSpaceUI::ExportLinesAndMesh(SEdgeList *sel, SBezierList *sbl, SMesh *sm,
Vector u, Vector v, Vector n,
Vector origin, double cameraTan,
VectorFileWriter *out)
@ -573,7 +573,7 @@ void VectorFileWriter::BezierAsNonrationalCubic(SBezier *sb, int depth) {
//-----------------------------------------------------------------------------
// Export a triangle mesh, in the requested format.
//-----------------------------------------------------------------------------
void SolveSpace::ExportMeshTo(const char *filename) {
void SolveSpaceUI::ExportMeshTo(const char *filename) {
SMesh *m = &(SK.GetGroup(SS.GW.activeGroup)->displayMesh);
if(m->IsEmpty()) {
Error("Active group mesh is empty; nothing to export.");
@ -602,7 +602,7 @@ void SolveSpace::ExportMeshTo(const char *filename) {
// Export the mesh as an STL file; it should always be vertex-to-vertex and
// not self-intersecting, so not much to do.
//-----------------------------------------------------------------------------
void SolveSpace::ExportMeshAsStlTo(FILE *f, SMesh *sm) {
void SolveSpaceUI::ExportMeshAsStlTo(FILE *f, SMesh *sm) {
char str[80];
memset(str, 0, sizeof(str));
strcpy(str, "STL exported mesh");
@ -638,7 +638,7 @@ void SolveSpace::ExportMeshAsStlTo(FILE *f, SMesh *sm) {
// Export the mesh as Wavefront OBJ format. This requires us to reduce all the
// identical vertices to the same identifier, so do that first.
//-----------------------------------------------------------------------------
void SolveSpace::ExportMeshAsObjTo(FILE *f, SMesh *sm) {
void SolveSpaceUI::ExportMeshAsObjTo(FILE *f, SMesh *sm) {
SPointList spl;
ZERO(&spl);
STriangle *tr;
@ -673,7 +673,7 @@ void SolveSpace::ExportMeshAsObjTo(FILE *f, SMesh *sm) {
// Export a view of the model as an image; we just take a screenshot, by
// rendering the view in the usual way and then copying the pixels.
//-----------------------------------------------------------------------------
void SolveSpace::ExportAsPngTo(const char *filename) {
void SolveSpaceUI::ExportAsPngTo(const char *filename) {
int w = (int)SS.GW.width, h = (int)SS.GW.height;
// No guarantee that the back buffer contains anything valid right now,
// so repaint the scene. And hide the toolbar too.

View File

@ -16,7 +16,7 @@ static int StrStartsWith(const char *str, const char *start) {
// sketch. This does not leave the program in an acceptable state (with the
// references created, and so on), so anyone calling this must fix that later.
//-----------------------------------------------------------------------------
void SolveSpace::ClearExisting(void) {
void SolveSpaceUI::ClearExisting(void) {
UndoClearStack(&redo);
UndoClearStack(&undo);
@ -34,7 +34,7 @@ void SolveSpace::ClearExisting(void) {
SK.param.Clear();
}
hGroup SolveSpace::CreateDefaultDrawingGroup(void) {
hGroup SolveSpaceUI::CreateDefaultDrawingGroup(void) {
Group g;
ZERO(&g);
@ -51,7 +51,7 @@ hGroup SolveSpace::CreateDefaultDrawingGroup(void) {
return g.h;
}
void SolveSpace::NewFile(void) {
void SolveSpaceUI::NewFile(void) {
ClearExisting();
// Our initial group, that contains the references.
@ -83,7 +83,7 @@ void SolveSpace::NewFile(void) {
CreateDefaultDrawingGroup();
}
const SolveSpace::SaveTable SolveSpace::SAVED[] = {
const SolveSpaceUI::SaveTable SolveSpaceUI::SAVED[] = {
{ 'g', "Group.h.v", 'x', &(SS.sv.g.h.v) },
{ 'g', "Group.type", 'd', &(SS.sv.g.type) },
{ 'g', "Group.order", 'd', &(SS.sv.g.order) },
@ -212,7 +212,7 @@ union SAVEDptr {
uint32_t x;
};
void SolveSpace::SaveUsingTable(int type) {
void SolveSpaceUI::SaveUsingTable(int type) {
int i;
for(i = 0; SAVED[i].type != 0; i++) {
if(SAVED[i].type != type) continue;
@ -253,7 +253,7 @@ void SolveSpace::SaveUsingTable(int type) {
}
}
bool SolveSpace::SaveToFile(const char *filename) {
bool SolveSpaceUI::SaveToFile(const char *filename) {
// Make sure all the entities are regenerated up to date, since they
// will be exported. We reload the imported files because that rewrites
// the impFileRel for our possibly-new filename.
@ -369,7 +369,7 @@ bool SolveSpace::SaveToFile(const char *filename) {
return true;
}
void SolveSpace::LoadUsingTable(char *key, char *val) {
void SolveSpaceUI::LoadUsingTable(char *key, char *val) {
int i;
for(i = 0; SAVED[i].type != 0; i++) {
if(strcmp(SAVED[i].desc, key)==0) {
@ -423,7 +423,7 @@ void SolveSpace::LoadUsingTable(char *key, char *val) {
}
}
bool SolveSpace::LoadFromFile(const char *filename) {
bool SolveSpaceUI::LoadFromFile(const char *filename) {
allConsistent = false;
fileLoadError = false;
@ -506,7 +506,7 @@ bool SolveSpace::LoadFromFile(const char *filename) {
return true;
}
bool SolveSpace::LoadEntitiesFromFile(const char *file, EntityList *le,
bool SolveSpaceUI::LoadEntitiesFromFile(const char *file, EntityList *le,
SMesh *m, SShell *sh)
{
SSurface srf;
@ -648,7 +648,7 @@ bool SolveSpace::LoadEntitiesFromFile(const char *file, EntityList *le,
return true;
}
void SolveSpace::ReloadAllImported(void) {
void SolveSpaceUI::ReloadAllImported(void) {
allConsistent = false;
int i;

View File

@ -8,12 +8,12 @@
//-----------------------------------------------------------------------------
#include "solvespace.h"
void SolveSpace::MarkGroupDirtyByEntity(hEntity he) {
void SolveSpaceUI::MarkGroupDirtyByEntity(hEntity he) {
Entity *e = SK.GetEntity(he);
MarkGroupDirty(e->group);
}
void SolveSpace::MarkGroupDirty(hGroup hg) {
void SolveSpaceUI::MarkGroupDirty(hGroup hg) {
int i;
bool go = false;
for(i = 0; i < SK.group.n; i++) {
@ -28,7 +28,7 @@ void SolveSpace::MarkGroupDirty(hGroup hg) {
unsaved = true;
}
bool SolveSpace::PruneOrphans(void) {
bool SolveSpaceUI::PruneOrphans(void) {
int i;
for(i = 0; i < SK.request.n; i++) {
Request *r = &(SK.request.elem[i]);
@ -52,7 +52,7 @@ bool SolveSpace::PruneOrphans(void) {
return false;
}
bool SolveSpace::GroupsInOrder(hGroup before, hGroup after) {
bool SolveSpaceUI::GroupsInOrder(hGroup before, hGroup after) {
if(before.v == 0) return true;
if(after.v == 0) return true;
@ -68,18 +68,18 @@ bool SolveSpace::GroupsInOrder(hGroup before, hGroup after) {
return true;
}
bool SolveSpace::GroupExists(hGroup hg) {
bool SolveSpaceUI::GroupExists(hGroup hg) {
// A nonexistent group is not acceptable
return SK.group.FindByIdNoOops(hg) ? true : false;
}
bool SolveSpace::EntityExists(hEntity he) {
bool SolveSpaceUI::EntityExists(hEntity he) {
// A nonexstient entity is acceptable, though, usually just means it
// doesn't apply.
if(he.v == Entity::NO_ENTITY.v) return true;
return SK.entity.FindByIdNoOops(he) ? true : false;
}
bool SolveSpace::PruneGroups(hGroup hg) {
bool SolveSpaceUI::PruneGroups(hGroup hg) {
Group *g = SK.GetGroup(hg);
if(GroupsInOrder(g->opA, hg) &&
EntityExists(g->predef.origin) &&
@ -93,7 +93,7 @@ bool SolveSpace::PruneGroups(hGroup hg) {
return true;
}
bool SolveSpace::PruneRequests(hGroup hg) {
bool SolveSpaceUI::PruneRequests(hGroup hg) {
int i;
for(i = 0; i < SK.entity.n; i++) {
Entity *e = &(SK.entity.elem[i]);
@ -110,7 +110,7 @@ bool SolveSpace::PruneRequests(hGroup hg) {
return false;
}
bool SolveSpace::PruneConstraints(hGroup hg) {
bool SolveSpaceUI::PruneConstraints(hGroup hg) {
int i;
for(i = 0; i < SK.constraint.n; i++) {
Constraint *c = &(SK.constraint.elem[i]);
@ -141,7 +141,7 @@ bool SolveSpace::PruneConstraints(hGroup hg) {
return false;
}
void SolveSpace::GenerateAll(void) {
void SolveSpaceUI::GenerateAll(void) {
int i;
int firstDirty = INT_MAX, lastVisible = 0;
// Start from the first dirty group, and solve until the active group,
@ -165,7 +165,7 @@ void SolveSpace::GenerateAll(void) {
}
}
void SolveSpace::GenerateAll(int first, int last, bool andFindFree) {
void SolveSpaceUI::GenerateAll(int first, int last, bool andFindFree) {
int i, j;
// Remove any requests or constraints that refer to a nonexistent
@ -351,7 +351,7 @@ pruned:
GenerateAll(first, last);
}
void SolveSpace::ForceReferences(void) {
void SolveSpaceUI::ForceReferences(void) {
// Force the values of the parameters that define the three reference
// coordinate systems.
static const struct {
@ -381,7 +381,7 @@ void SolveSpace::ForceReferences(void) {
}
}
void SolveSpace::MarkDraggedParams(void) {
void SolveSpaceUI::MarkDraggedParams(void) {
sys.dragged.Clear();
for(int i = -1; i < SS.GW.pending.points.n; i++) {
@ -440,7 +440,7 @@ void SolveSpace::MarkDraggedParams(void) {
}
}
void SolveSpace::SolveGroup(hGroup hg, bool andFindFree) {
void SolveSpaceUI::SolveGroup(hGroup hg, bool andFindFree) {
int i;
// Clear out the system to be solved.
sys.entity.Clear();
@ -476,7 +476,7 @@ void SolveSpace::SolveGroup(hGroup hg, bool andFindFree) {
FreeAllTemporary();
}
bool SolveSpace::AllGroupsOkay(void) {
bool SolveSpaceUI::AllGroupsOkay(void) {
int i;
bool allOk = true;
for(i = 0; i < SK.group.n; i++) {

View File

@ -5,6 +5,8 @@
//-----------------------------------------------------------------------------
#include "solvespace.h"
namespace SolveSpace {
// A public-domain Hershey vector font ("Simplex").
#include "font.table.h"
@ -623,3 +625,4 @@ void ssglDrawPixelsWithTexture(uint8_t *data, int w, int h)
glDisable(GL_TEXTURE_2D);
}
};

View File

@ -11,10 +11,10 @@
#define mClip (&GraphicsWindow::MenuClipboard)
#define mReq (&GraphicsWindow::MenuRequest)
#define mCon (&Constraint::MenuConstrain)
#define mFile (&SolveSpace::MenuFile)
#define mFile (&SolveSpaceUI::MenuFile)
#define mGrp (&Group::MenuGroup)
#define mAna (&SolveSpace::MenuAnalyze)
#define mHelp (&SolveSpace::MenuHelp)
#define mAna (&SolveSpaceUI::MenuAnalyze)
#define mHelp (&SolveSpaceUI::MenuHelp)
#define DEL DELETE_KEY
#define ESC ESCAPE_KEY
#define S SHIFT_MASK
@ -171,7 +171,7 @@ const GraphicsWindow::MenuEntry GraphicsWindow::menu[] = {
#undef IC
#undef IR
bool MakeAcceleratorLabel(int accel, char *out) {
bool SolveSpace::MakeAcceleratorLabel(int accel, char *out) {
if(!accel) {
out[0] = '\0';
return false;
@ -539,13 +539,13 @@ void GraphicsWindow::MenuView(int id) {
break;
case MNU_UNITS_INCHES:
SS.viewUnits = SolveSpace::UNIT_INCHES;
SS.viewUnits = SolveSpaceUI::UNIT_INCHES;
SS.ScheduleShowTW();
SS.GW.EnsureValidActives();
break;
case MNU_UNITS_MM:
SS.viewUnits = SolveSpace::UNIT_MM;
SS.viewUnits = SolveSpaceUI::UNIT_MM;
SS.ScheduleShowTW();
SS.GW.EnsureValidActives();
break;
@ -611,15 +611,15 @@ void GraphicsWindow::EnsureValidActives(void) {
SS.UndoEnableMenus();
switch(SS.viewUnits) {
case SolveSpace::UNIT_MM:
case SolveSpace::UNIT_INCHES:
case SolveSpaceUI::UNIT_MM:
case SolveSpaceUI::UNIT_INCHES:
break;
default:
SS.viewUnits = SolveSpace::UNIT_MM;
SS.viewUnits = SolveSpaceUI::UNIT_MM;
break;
}
RadioMenuById(MNU_UNITS_MM, SS.viewUnits == SolveSpace::UNIT_MM);
RadioMenuById(MNU_UNITS_INCHES, SS.viewUnits == SolveSpace::UNIT_INCHES);
RadioMenuById(MNU_UNITS_MM, SS.viewUnits == SolveSpaceUI::UNIT_MM);
RadioMenuById(MNU_UNITS_INCHES, SS.viewUnits == SolveSpaceUI::UNIT_INCHES);
ShowTextWindow(SS.GW.showTextWindow);
CheckMenuById(MNU_SHOW_TEXT_WND, SS.GW.showTextWindow);

View File

@ -62,6 +62,7 @@
# endif
#endif
namespace SolveSpace {
char RecentFile[MAX_RECENT][MAX_PATH];
#define GL_CHECK() \
@ -252,7 +253,6 @@ void ScheduleLater() {
/* GL wrapper */
namespace SolveSpacePlatf {
class GlWidget : public Gtk::DrawingArea {
public:
GlWidget() : _offscreen(NULL) {
@ -378,11 +378,9 @@ private:
GLOffscreen *_offscreen;
::Window _xwindow;
};
};
/* Editor overlay */
namespace SolveSpacePlatf {
class EditorOverlay : public Gtk::Fixed {
public:
EditorOverlay(Gtk::Widget &underlay) : _underlay(underlay) {
@ -457,11 +455,9 @@ private:
Gtk::Entry _entry;
sigc::signal<void, Glib::ustring> _signal_editing_done;
};
};
/* Graphics window */
namespace SolveSpacePlatf {
int DeltaYOfScrollEvent(GdkEventScroll *event) {
#ifdef HAVE_GTK3
int delta_y = event->delta_y;
@ -629,9 +625,9 @@ private:
}
};
class GraphicsWindow : public Gtk::Window {
class GraphicsWindowGtk : public Gtk::Window {
public:
GraphicsWindow() : _overlay(_widget) {
GraphicsWindowGtk() : _overlay(_widget) {
set_default_size(900, 600);
_box.pack_start(_menubar, false, true);
@ -640,7 +636,7 @@ public:
add(_box);
_overlay.signal_editing_done().
connect(sigc::mem_fun(this, &GraphicsWindow::on_editing_done));
connect(sigc::mem_fun(this, &GraphicsWindowGtk::on_editing_done));
}
GraphicsWidget &get_widget() {
@ -701,9 +697,8 @@ private:
bool _is_fullscreen;
};
};
SolveSpacePlatf::GraphicsWindow *GW = NULL;
GraphicsWindowGtk *GW = NULL;
void GetGraphicsWindowSize(int *w, int *h) {
Gdk::Rectangle allocation = GW->get_widget().get_allocation();
@ -767,7 +762,6 @@ bool MenuBarIsVisible(void) {
/* Context menus */
namespace SolveSpacePlatf {
class ContextMenuItem : public Gtk::MenuItem {
public:
static int choice;
@ -806,14 +800,13 @@ private:
};
int ContextMenuItem::choice = 0;
};
static Gtk::Menu *context_menu = NULL, *context_submenu = NULL;
void AddContextMenuItem(const char *label, int id) {
Gtk::MenuItem *menu_item;
if(label)
menu_item = new SolveSpacePlatf::ContextMenuItem(label, id);
menu_item = new ContextMenuItem(label, id);
else
menu_item = new Gtk::SeparatorMenuItem();
@ -846,7 +839,7 @@ int ShowContextMenu(void) {
context_menu->signal_deactivate().
connect(sigc::mem_fun(loop.operator->(), &Glib::MainLoop::quit));
SolveSpacePlatf::ContextMenuItem::choice = -1;
ContextMenuItem::choice = -1;
context_menu->show_all();
context_menu->popup(3, GDK_CURRENT_TIME);
@ -856,15 +849,14 @@ int ShowContextMenu(void) {
delete context_menu;
context_menu = NULL;
return SolveSpacePlatf::ContextMenuItem::choice;
return ContextMenuItem::choice;
}
/* Main menu */
namespace SolveSpacePlatf {
template<class MenuItem> class MainMenuItem : public MenuItem {
public:
MainMenuItem(const ::GraphicsWindow::MenuEntry &entry) :
MainMenuItem(const GraphicsWindow::MenuEntry &entry) :
MenuItem(), _entry(entry), _synthetic(false) {
Glib::ustring label(_entry.label);
for(int i = 0; i < label.length(); i++) {
@ -875,25 +867,25 @@ public:
guint accel_key = 0;
Gdk::ModifierType accel_mods = Gdk::ModifierType();
switch(_entry.accel) {
case ::GraphicsWindow::DELETE_KEY:
case GraphicsWindow::DELETE_KEY:
accel_key = GDK_KEY_Delete;
break;
case ::GraphicsWindow::ESCAPE_KEY:
case GraphicsWindow::ESCAPE_KEY:
accel_key = GDK_KEY_Escape;
break;
default:
accel_key = _entry.accel & ~(::GraphicsWindow::SHIFT_MASK | ::GraphicsWindow::CTRL_MASK);
if(accel_key > ::GraphicsWindow::FUNCTION_KEY_BASE &&
accel_key <= ::GraphicsWindow::FUNCTION_KEY_BASE + 12)
accel_key = GDK_KEY_F1 + (accel_key - ::GraphicsWindow::FUNCTION_KEY_BASE - 1);
accel_key = _entry.accel & ~(GraphicsWindow::SHIFT_MASK | GraphicsWindow::CTRL_MASK);
if(accel_key > GraphicsWindow::FUNCTION_KEY_BASE &&
accel_key <= GraphicsWindow::FUNCTION_KEY_BASE + 12)
accel_key = GDK_KEY_F1 + (accel_key - GraphicsWindow::FUNCTION_KEY_BASE - 1);
else
accel_key = gdk_unicode_to_keyval(accel_key);
if(_entry.accel & ::GraphicsWindow::SHIFT_MASK)
if(_entry.accel & GraphicsWindow::SHIFT_MASK)
accel_mods |= Gdk::SHIFT_MASK;
if(_entry.accel & ::GraphicsWindow::CTRL_MASK)
if(_entry.accel & GraphicsWindow::CTRL_MASK)
accel_mods |= Gdk::CONTROL_MASK;
}
@ -922,10 +914,9 @@ protected:
}
private:
const ::GraphicsWindow::MenuEntry &_entry;
const GraphicsWindow::MenuEntry &_entry;
bool _synthetic;
};
};
static std::map<int, Gtk::MenuItem *> main_menu_items;
@ -951,16 +942,16 @@ static void InitMainMenu(Gtk::MenuShell *menu_shell) {
if(entry->label) {
switch(entry->kind) {
case GraphicsWindow::MENU_ITEM_NORMAL:
menu_item = new SolveSpacePlatf::MainMenuItem<Gtk::MenuItem>(*entry);
menu_item = new MainMenuItem<Gtk::MenuItem>(*entry);
break;
case GraphicsWindow::MENU_ITEM_CHECK:
menu_item = new SolveSpacePlatf::MainMenuItem<Gtk::CheckMenuItem>(*entry);
menu_item = new MainMenuItem<Gtk::CheckMenuItem>(*entry);
break;
case GraphicsWindow::MENU_ITEM_RADIO:
SolveSpacePlatf::MainMenuItem<Gtk::CheckMenuItem> *radio_item =
new SolveSpacePlatf::MainMenuItem<Gtk::CheckMenuItem>(*entry);
MainMenuItem<Gtk::CheckMenuItem> *radio_item =
new MainMenuItem<Gtk::CheckMenuItem>(*entry);
radio_item->set_draw_as_radio(true);
menu_item = radio_item;
break;
@ -986,15 +977,13 @@ static void ActivateMenuById(int id) {
}
void CheckMenuById(int id, bool checked) {
((SolveSpacePlatf::MainMenuItem<Gtk::CheckMenuItem>*)main_menu_items[id])->
set_active(checked);
((MainMenuItem<Gtk::CheckMenuItem>*)main_menu_items[id])->set_active(checked);
}
void RadioMenuById(int id, bool selected) {
CheckMenuById(id, selected);
SolveSpace::CheckMenuById(id, selected);
}
namespace SolveSpacePlatf {
class RecentMenuItem : public Gtk::MenuItem {
public:
RecentMenuItem(const Glib::ustring& label, int id) :
@ -1004,7 +993,7 @@ public:
protected:
virtual void on_activate() {
if(_id >= RECENT_OPEN && _id < (RECENT_OPEN + MAX_RECENT))
SolveSpace::MenuFile(_id);
SolveSpaceUI::MenuFile(_id);
else if(_id >= RECENT_IMPORT && _id < (RECENT_IMPORT + MAX_RECENT))
Group::MenuGroup(_id);
}
@ -1012,7 +1001,6 @@ protected:
private:
int _id;
};
};
static void RefreshRecentMenu(int id, int base) {
Gtk::MenuItem *recent = static_cast<Gtk::MenuItem*>(main_menu_items[id]);
@ -1030,8 +1018,7 @@ static void RefreshRecentMenu(int id, int base) {
if(std::string(RecentFile[i]).empty())
break;
SolveSpacePlatf::RecentMenuItem *item =
new SolveSpacePlatf::RecentMenuItem(RecentFile[i], base + i);
RecentMenuItem *item = new RecentMenuItem(RecentFile[i], base + i);
menu->append(*item);
}
}
@ -1213,7 +1200,6 @@ int SaveFileYesNoCancel(void) {
/* Text window */
namespace SolveSpacePlatf {
class TextWidget : public GlWidget {
public:
#ifdef HAVE_GTK3
@ -1279,9 +1265,9 @@ private:
#endif
};
class TextWindow : public Gtk::Window {
class TextWindowGtk : public Gtk::Window {
public:
TextWindow() : _scrollbar(), _widget(_scrollbar.get_adjustment()),
TextWindowGtk() : _scrollbar(), _widget(_scrollbar.get_adjustment()),
_box(), _overlay(_widget) {
set_keep_above(true);
set_type_hint(Gdk::WINDOW_TYPE_HINT_UTILITY);
@ -1295,15 +1281,15 @@ public:
add(_box);
_scrollbar.get_adjustment()->signal_value_changed().
connect(sigc::mem_fun(this, &TextWindow::on_scrollbar_value_changed));
connect(sigc::mem_fun(this, &TextWindowGtk::on_scrollbar_value_changed));
_overlay.signal_editing_done().
connect(sigc::mem_fun(this, &TextWindow::on_editing_done));
connect(sigc::mem_fun(this, &TextWindowGtk::on_editing_done));
_overlay.get_entry().signal_motion_notify_event().
connect(sigc::mem_fun(this, &TextWindow::on_editor_motion_notify_event));
connect(sigc::mem_fun(this, &TextWindowGtk::on_editor_motion_notify_event));
_overlay.get_entry().signal_button_press_event().
connect(sigc::mem_fun(this, &TextWindow::on_editor_button_press_event));
connect(sigc::mem_fun(this, &TextWindowGtk::on_editor_button_press_event));
}
Gtk::VScrollbar &get_scrollbar() {
@ -1333,7 +1319,7 @@ protected:
virtual bool on_delete_event(GdkEventAny *event) {
/* trigger the action and ignore the request */
::GraphicsWindow::MenuView(::GraphicsWindow::MNU_SHOW_TEXT_WND);
GraphicsWindow::MenuView(GraphicsWindow::MNU_SHOW_TEXT_WND);
return false;
}
@ -1360,9 +1346,8 @@ private:
EditorOverlay _overlay;
Gtk::HBox _box;
};
};
SolveSpacePlatf::TextWindow *TW = NULL;
TextWindowGtk *TW = NULL;
void ShowTextWindow(bool visible) {
if(visible)
@ -1480,6 +1465,7 @@ void ExitNow(void) {
GW->hide();
TW->hide();
}
};
int main(int argc, char** argv) {
/* If we don't call this, gtk_init will set the C standard library
@ -1496,8 +1482,8 @@ int main(int argc, char** argv) {
CnfLoad();
TW = new SolveSpacePlatf::TextWindow;
GW = new SolveSpacePlatf::GraphicsWindow;
TW = new TextWindowGtk;
GW = new GraphicsWindowGtk;
InitMainMenu(&GW->get_menubar());
GW->get_menubar().accelerate(*TW);

View File

@ -8,7 +8,7 @@
#define EXPORT_DLL
#include <slvs.h>
Sketch SK;
Sketch SolveSpace::SK;
static System SYS;
static int IsInit = 0;
@ -17,18 +17,18 @@ void Group::GenerateEquations(IdList<Equation,hEquation> *l) {
// Nothing to do for now.
}
void CnfFreezeInt(uint32_t v, const char *name)
void SolveSpace::CnfFreezeInt(uint32_t v, const char *name)
{
abort();
}
uint32_t CnfThawInt(uint32_t v, const char *name)
uint32_t SolveSpace::CnfThawInt(uint32_t v, const char *name)
{
abort();
return 0;
}
void DoMessageBox(const char *str, int rows, int cols, bool error)
void SolveSpace::DoMessageBox(const char *str, int rows, int cols, bool error)
{
abort();
}

View File

@ -6,10 +6,10 @@
//-----------------------------------------------------------------------------
#include "solvespace.h"
SolveSpace SS;
Sketch SK;
SolveSpaceUI SolveSpace::SS;
Sketch SolveSpace::SK;
void SolveSpace::Init(const char *cmdLine) {
void SolveSpaceUI::Init(const char *cmdLine) {
SS.tangentArcRadius = 10.0;
// Then, load the registry settings.
@ -109,7 +109,7 @@ void SolveSpace::Init(const char *cmdLine) {
AfterNewFile();
}
void SolveSpace::Exit(void) {
void SolveSpaceUI::Exit(void) {
int i;
char name[100];
// Recent files
@ -187,39 +187,39 @@ void SolveSpace::Exit(void) {
ExitNow();
}
void SolveSpace::ScheduleGenerateAll() {
void SolveSpaceUI::ScheduleGenerateAll() {
if(!later.scheduled) ScheduleLater();
later.scheduled = true;
later.generateAll = true;
}
void SolveSpace::ScheduleShowTW() {
void SolveSpaceUI::ScheduleShowTW() {
if(!later.scheduled) ScheduleLater();
later.scheduled = true;
later.showTW = true;
}
void SolveSpace::DoLater(void) {
void SolveSpaceUI::DoLater(void) {
if(later.generateAll) GenerateAll();
if(later.showTW) TW.Show();
ZERO(&later);
}
double SolveSpace::MmPerUnit(void) {
double SolveSpaceUI::MmPerUnit(void) {
if(viewUnits == UNIT_INCHES) {
return 25.4;
} else {
return 1.0;
}
}
const char *SolveSpace::UnitName(void) {
const char *SolveSpaceUI::UnitName(void) {
if(viewUnits == UNIT_INCHES) {
return "inch";
} else {
return "mm";
}
}
char *SolveSpace::MmToString(double v) {
char *SolveSpaceUI::MmToString(double v) {
static int WhichBuf;
static char Bufs[8][128];
@ -234,19 +234,19 @@ char *SolveSpace::MmToString(double v) {
}
return s;
}
double SolveSpace::ExprToMm(Expr *e) {
double SolveSpaceUI::ExprToMm(Expr *e) {
return (e->Eval()) * MmPerUnit();
}
double SolveSpace::StringToMm(const char *str) {
double SolveSpaceUI::StringToMm(const char *str) {
return atof(str) * MmPerUnit();
}
double SolveSpace::ChordTolMm(void) {
double SolveSpaceUI::ChordTolMm(void) {
return SS.chordTol / SS.GW.scale;
}
int SolveSpace::UnitDigitsAfterDecimal(void) {
int SolveSpaceUI::UnitDigitsAfterDecimal(void) {
return (viewUnits == UNIT_INCHES) ? afterDecimalInch : afterDecimalMm;
}
void SolveSpace::SetUnitDigitsAfterDecimal(int v) {
void SolveSpaceUI::SetUnitDigitsAfterDecimal(int v) {
if(viewUnits == UNIT_INCHES) {
afterDecimalInch = v;
} else {
@ -254,7 +254,7 @@ void SolveSpace::SetUnitDigitsAfterDecimal(int v) {
}
}
double SolveSpace::CameraTangent(void) {
double SolveSpaceUI::CameraTangent(void) {
if(!usePerspectiveProj) {
return 0;
} else {
@ -262,7 +262,7 @@ double SolveSpace::CameraTangent(void) {
}
}
void SolveSpace::AfterNewFile(void) {
void SolveSpaceUI::AfterNewFile(void) {
// Clear out the traced point, which is no longer valid
traced.point = Entity::NO_ENTITY;
traced.path.l.Clear();
@ -307,7 +307,7 @@ void SolveSpace::AfterNewFile(void) {
UpdateWindowTitle();
}
void SolveSpace::RemoveFromRecentList(const char *file) {
void SolveSpaceUI::RemoveFromRecentList(const char *file) {
int src, dest;
dest = 0;
for(src = 0; src < MAX_RECENT; src++) {
@ -319,7 +319,7 @@ void SolveSpace::RemoveFromRecentList(const char *file) {
while(dest < MAX_RECENT) strcpy(RecentFile[dest++], "");
RefreshRecentMenus();
}
void SolveSpace::AddToRecentList(const char *file) {
void SolveSpaceUI::AddToRecentList(const char *file) {
RemoveFromRecentList(file);
int src;
@ -330,7 +330,7 @@ void SolveSpace::AddToRecentList(const char *file) {
RefreshRecentMenus();
}
bool SolveSpace::GetFilenameAndSave(bool saveAs) {
bool SolveSpaceUI::GetFilenameAndSave(bool saveAs) {
char prevSaveFile[MAX_PATH];
strcpy(prevSaveFile, saveFile);
@ -351,7 +351,7 @@ bool SolveSpace::GetFilenameAndSave(bool saveAs) {
}
}
bool SolveSpace::OkayToStartNewFile(void) {
bool SolveSpaceUI::OkayToStartNewFile(void) {
if(!unsaved) return true;
switch(SaveFileYesNoCancel()) {
@ -368,7 +368,7 @@ bool SolveSpace::OkayToStartNewFile(void) {
}
}
void SolveSpace::UpdateWindowTitle(void) {
void SolveSpaceUI::UpdateWindowTitle(void) {
if(strlen(saveFile) == 0) {
SetWindowTitle("SolveSpace - (not yet saved)");
} else {
@ -378,7 +378,7 @@ void SolveSpace::UpdateWindowTitle(void) {
}
}
void SolveSpace::MenuFile(int id) {
void SolveSpaceUI::MenuFile(int id) {
if(id >= RECENT_OPEN && id < (RECENT_OPEN+MAX_RECENT)) {
if(!SS.OkayToStartNewFile()) return;
@ -498,7 +498,7 @@ void SolveSpace::MenuFile(int id) {
SS.UpdateWindowTitle();
}
void SolveSpace::MenuAnalyze(int id) {
void SolveSpaceUI::MenuAnalyze(int id) {
SS.GW.GroupSelection();
#define gs (SS.GW.gs)
@ -646,7 +646,7 @@ void SolveSpace::MenuAnalyze(int id) {
vol / pow(SS.MmPerUnit(), 3),
SS.UnitName());
if(SS.viewUnits == SolveSpace::UNIT_MM) {
if(SS.viewUnits == SolveSpaceUI::UNIT_MM) {
sprintf(msg+strlen(msg), "\n %.2f mL", vol/(10*10*10));
}
strcpy(msg+strlen(msg),
@ -729,7 +729,7 @@ void SolveSpace::MenuAnalyze(int id) {
}
}
void SolveSpace::MenuHelp(int id) {
void SolveSpaceUI::MenuHelp(int id) {
switch(id) {
case GraphicsWindow::MNU_WEBSITE:
OpenWebsite("http://solvespace.com/helpmenu");
@ -763,7 +763,7 @@ void SolveSpace::MenuHelp(int id) {
}
}
void SolveSpace::Clear(void) {
void SolveSpaceUI::Clear(void) {
sys.Clear();
for(int i = 0; i < MAX_UNDO; i++) {
if(i < undo.cnt) undo.d[i].Clear();

View File

@ -12,6 +12,7 @@
#include <ctype.h>
#include <string.h>
#include <stdio.h>
#include <stddef.h>
#include <stdarg.h>
#include <math.h>
#include <limits.h>
@ -61,6 +62,8 @@
# define isnan(x) (((x) != (x)) || (x > 1e11) || (x < -1e11))
#endif
namespace SolveSpace {
inline int WRAP(int v, int n) {
// Clamp it to the range [0, n)
while(v >= n) v -= n;
@ -680,7 +683,7 @@ public:
#undef ENTITY
#undef CONSTRAINT
class SolveSpace {
class SolveSpaceUI {
public:
TextWindow TW;
GraphicsWindow GW;
@ -927,7 +930,13 @@ public:
void Clear(void);
};
extern SolveSpace SS;
extern SolveSpaceUI SS;
extern Sketch SK;
};
#ifndef __OBJC__
using namespace SolveSpace;
#endif
#endif

View File

@ -13,7 +13,7 @@
// and convergence should be fast by now.
#define RATPOLY_EPS (LENGTH_EPS/(1e2))
double Bernstein(int k, int deg, double t)
double SolveSpace::Bernstein(int k, int deg, double t)
{
if(k > deg || k < 0) return 0;
@ -54,7 +54,7 @@ double Bernstein(int k, int deg, double t)
oops();
}
double BernsteinDerivative(int k, int deg, double t)
double SolveSpace::BernsteinDerivative(int k, int deg, double t)
{
switch(deg) {
case 0:

View File

@ -7,14 +7,14 @@
//-----------------------------------------------------------------------------
#include "solvespace.h"
void SolveSpace::UndoRemember(void) {
void SolveSpaceUI::UndoRemember(void) {
unsaved = true;
PushFromCurrentOnto(&undo);
UndoClearStack(&redo);
UndoEnableMenus();
}
void SolveSpace::UndoUndo(void) {
void SolveSpaceUI::UndoUndo(void) {
if(undo.cnt <= 0) return;
PushFromCurrentOnto(&redo);
@ -22,7 +22,7 @@ void SolveSpace::UndoUndo(void) {
UndoEnableMenus();
}
void SolveSpace::UndoRedo(void) {
void SolveSpaceUI::UndoRedo(void) {
if(redo.cnt <= 0) return;
PushFromCurrentOnto(&undo);
@ -30,12 +30,12 @@ void SolveSpace::UndoRedo(void) {
UndoEnableMenus();
}
void SolveSpace::UndoEnableMenus(void) {
void SolveSpaceUI::UndoEnableMenus(void) {
EnableMenuById(GraphicsWindow::MNU_UNDO, undo.cnt > 0);
EnableMenuById(GraphicsWindow::MNU_REDO, redo.cnt > 0);
}
void SolveSpace::PushFromCurrentOnto(UndoStack *uk) {
void SolveSpaceUI::PushFromCurrentOnto(UndoStack *uk) {
int i;
if(uk->cnt == MAX_UNDO) {
@ -93,7 +93,7 @@ void SolveSpace::PushFromCurrentOnto(UndoStack *uk) {
uk->write = WRAP(uk->write + 1, MAX_UNDO);
}
void SolveSpace::PopOntoCurrentFrom(UndoStack *uk) {
void SolveSpaceUI::PopOntoCurrentFrom(UndoStack *uk) {
if(uk->cnt <= 0) oops();
(uk->cnt)--;
uk->write = WRAP(uk->write - 1, MAX_UNDO);
@ -131,7 +131,7 @@ void SolveSpace::PopOntoCurrentFrom(UndoStack *uk) {
SS.ScheduleShowTW();
}
void SolveSpace::UndoClearStack(UndoStack *uk) {
void SolveSpaceUI::UndoClearStack(UndoStack *uk) {
while(uk->cnt > 0) {
uk->write = WRAP(uk->write - 1, MAX_UNDO);
(uk->cnt)--;
@ -140,7 +140,7 @@ void SolveSpace::UndoClearStack(UndoStack *uk) {
ZERO(uk); // for good measure
}
void SolveSpace::UndoClearState(UndoState *ut) {
void SolveSpaceUI::UndoClearState(UndoState *ut) {
int i;
for(i = 0; i < ut->group.n; i++) {
Group *g = &(ut->group.elem[i]);

View File

@ -16,6 +16,8 @@
#include "solvespace.h"
namespace SolveSpace {
void dbp(const char *str, ...)
{
va_list f;
@ -115,3 +117,5 @@ void MemFree(void *p) {
void InitHeaps(void) {
/* nothing to do */
}
};

View File

@ -6,7 +6,7 @@
//-----------------------------------------------------------------------------
#include "solvespace.h"
void MakePathRelative(const char *basep, char *pathp)
void SolveSpace::MakePathRelative(const char *basep, char *pathp)
{
int i;
const char *p;
@ -66,7 +66,7 @@ void MakePathRelative(const char *basep, char *pathp)
strcpy(pathp, out);
}
void MakePathAbsolute(const char *basep, char *pathp) {
void SolveSpace::MakePathAbsolute(const char *basep, char *pathp) {
char out[MAX_PATH];
strcpy(out, basep);
@ -84,7 +84,7 @@ void MakePathAbsolute(const char *basep, char *pathp) {
strcpy(pathp, out);
}
bool StringAllPrintable(const char *str)
bool SolveSpace::StringAllPrintable(const char *str)
{
const char *t;
for(t = str; *t; t++) {
@ -95,7 +95,7 @@ bool StringAllPrintable(const char *str)
return true;
}
bool StringEndsIn(const char *str, const char *ending)
bool SolveSpace::StringEndsIn(const char *str, const char *ending)
{
int i, ls = (int)strlen(str), le = (int)strlen(ending);
@ -109,7 +109,8 @@ bool StringEndsIn(const char *str, const char *ending)
return true;
}
void MakeMatrix(double *mat, double a11, double a12, double a13, double a14,
void SolveSpace::MakeMatrix(double *mat,
double a11, double a12, double a13, double a14,
double a21, double a22, double a23, double a24,
double a31, double a32, double a33, double a34,
double a41, double a42, double a43, double a44)
@ -191,14 +192,14 @@ static void DoStringForMessageBox(const char *str, va_list f, bool error)
// And then display the text with our actual longest line length.
DoMessageBox(outBuf, rows, cols, error);
}
void Error(const char *str, ...)
void SolveSpace::Error(const char *str, ...)
{
va_list f;
va_start(f, str);
DoStringForMessageBox(str, f, true);
va_end(f);
}
void Message(const char *str, ...)
void SolveSpace::Message(const char *str, ...)
{
va_list f;
va_start(f, str);
@ -206,19 +207,18 @@ void Message(const char *str, ...)
va_end(f);
}
void CnfFreezeBool(bool v, const char *name)
void SolveSpace::CnfFreezeBool(bool v, const char *name)
{ CnfFreezeInt(v ? 1 : 0, name); }
void CnfFreezeColor(RgbColor v, const char *name)
void SolveSpace::CnfFreezeColor(RgbColor v, const char *name)
{ CnfFreezeInt(v.ToPackedInt(), name); }
bool CnfThawBool(bool v, const char *name)
bool SolveSpace::CnfThawBool(bool v, const char *name)
{ return CnfThawInt(v ? 1 : 0, name) != 0; }
RgbColor CnfThawColor(RgbColor v, const char *name)
RgbColor SolveSpace::CnfThawColor(RgbColor v, const char *name)
{ return RgbColor::FromPackedInt(CnfThawInt(v.ToPackedInt(), name)); }
//-----------------------------------------------------------------------------
// Solve a mostly banded matrix. In a given row, there are LEFT_OF_DIAG
// elements to the left of the diagonal element, and RIGHT_OF_DIAG elements to

View File

@ -5,12 +5,16 @@
//
// Copyright 2008-2013 Jonathan Westhues.
//-----------------------------------------------------------------------------
#include "solvespace.h"
#include <time.h>
#include <windows.h>
#include <shellapi.h>
#include <commctrl.h>
#include <commdlg.h>
#include <string>
#include "solvespace.h"
#ifdef HAVE_SPACEWARE
# include <si.h>
# include <siapp.h>
@ -38,7 +42,7 @@ static struct {
int x, y;
} LastMousePos;
char RecentFile[MAX_RECENT][MAX_PATH];
char SolveSpace::RecentFile[MAX_RECENT][MAX_PATH];
HMENU SubMenus[100];
HMENU RecentOpenMenu, RecentImportMenu;
@ -124,7 +128,7 @@ HWND CreateWindowClient(DWORD exStyle, const char *className, const char *window
return h;
}
void DoMessageBox(const char *str, int rows, int cols, bool error)
void SolveSpace::DoMessageBox(const char *str, int rows, int cols, bool error)
{
EnableWindow(GraphicsWnd, false);
EnableWindow(TextWnd, false);
@ -192,7 +196,7 @@ void DoMessageBox(const char *str, int rows, int cols, bool error)
DestroyWindow(MessageWnd);
}
void AddContextMenuItem(const char *label, int id)
void SolveSpace::AddContextMenuItem(const char *label, int id)
{
if(!ContextMenu) ContextMenu = CreatePopupMenu();
@ -210,12 +214,12 @@ void AddContextMenuItem(const char *label, int id)
}
}
void CreateContextSubmenu(void)
void SolveSpace::CreateContextSubmenu(void)
{
ContextSubmenu = CreatePopupMenu();
}
int ShowContextMenu(void)
int SolveSpace::ShowContextMenu(void)
{
POINT p;
GetCursorPos(&p);
@ -235,12 +239,12 @@ void CALLBACK TimerCallback(HWND hwnd, UINT msg, UINT_PTR id, DWORD time)
SS.GW.TimerCallback();
SS.TW.TimerCallback();
}
void SetTimerFor(int milliseconds)
void SolveSpace::SetTimerFor(int milliseconds)
{
SetTimer(GraphicsWnd, 1, milliseconds, TimerCallback);
}
void ScheduleLater()
void SolveSpace::ScheduleLater()
{
}
@ -251,20 +255,20 @@ static void GetWindowSize(HWND hwnd, int *w, int *h)
*w = r.right - r.left;
*h = r.bottom - r.top;
}
void GetGraphicsWindowSize(int *w, int *h)
void SolveSpace::GetGraphicsWindowSize(int *w, int *h)
{
GetWindowSize(GraphicsWnd, w, h);
}
void GetTextWindowSize(int *w, int *h)
void SolveSpace::GetTextWindowSize(int *w, int *h)
{
GetWindowSize(TextWnd, w, h);
}
void OpenWebsite(const char *url) {
void SolveSpace::OpenWebsite(const char *url) {
ShellExecute(GraphicsWnd, "open", url, NULL, NULL, SW_SHOWNORMAL);
}
void ExitNow(void) {
void SolveSpace::ExitNow(void) {
PostQuitMessage(0);
}
@ -272,10 +276,10 @@ void ExitNow(void) {
// Helpers so that we can read/write registry keys from the platform-
// independent code.
//-----------------------------------------------------------------------------
void CnfFreezeString(const char *str, const char *name)
void SolveSpace::CnfFreezeString(const char *str, const char *name)
{ FreezeStringF(str, FREEZE_SUBKEY, name); }
void CnfFreezeInt(uint32_t v, const char *name)
void SolveSpace::CnfFreezeInt(uint32_t v, const char *name)
{ FreezeDWORDF((DWORD)v, FREEZE_SUBKEY, name); }
union floatDWORD {
@ -283,20 +287,20 @@ union floatDWORD {
DWORD d;
};
void CnfFreezeFloat(float v, const char *name) {
void SolveSpace::CnfFreezeFloat(float v, const char *name) {
if(sizeof(float) != sizeof(DWORD)) oops();
floatDWORD u;
u.f = v;
FreezeDWORDF(u.d, FREEZE_SUBKEY, name);
}
void CnfThawString(char *str, int maxLen, const char *name)
void SolveSpace::CnfThawString(char *str, int maxLen, const char *name)
{ ThawStringF(str, maxLen, FREEZE_SUBKEY, name); }
uint32_t CnfThawInt(uint32_t v, const char *name)
uint32_t SolveSpace::CnfThawInt(uint32_t v, const char *name)
{ return (uint32_t)ThawDWORDF((DWORD)v, FREEZE_SUBKEY, name); }
float CnfThawFloat(float v, const char *name) {
float SolveSpace::CnfThawFloat(float v, const char *name) {
floatDWORD u;
u.f = v;
u.d = ThawDWORDF(u.d, FREEZE_SUBKEY, name);
@ -307,7 +311,7 @@ void SetWindowTitle(const char *str) {
SetWindowText(GraphicsWnd, str);
}
void SetMousePointerToHand(bool yes) {
void SolveSpace::SetMousePointerToHand(bool yes) {
SetCursor(LoadCursor(NULL, yes ? IDC_HAND : IDC_ARROW));
}
@ -323,7 +327,7 @@ static void PaintTextWnd(HDC hdc)
wglMakeCurrent(GetDC(GraphicsWnd), GraphicsGl);
}
void MoveTextScrollbarTo(int pos, int maxPos, int page)
void SolveSpace::MoveTextScrollbarTo(int pos, int maxPos, int page)
{
SCROLLINFO si;
memset(&si, 0, sizeof(si));
@ -411,7 +415,7 @@ LRESULT CALLBACK TextWndProc(HWND hwnd, UINT msg, WPARAM wParam, LPARAM lParam)
case WM_CLOSE:
case WM_DESTROY:
SolveSpace::MenuFile(GraphicsWindow::MNU_EXIT);
SolveSpaceUI::MenuFile(GraphicsWindow::MNU_EXIT);
break;
case WM_PAINT: {
@ -599,17 +603,17 @@ static bool ProcessKeyDown(WPARAM wParam)
return false;
}
void ToggleMenuBar(void)
void SolveSpace::ToggleMenuBar(void)
{
// Implement me
}
bool MenuBarIsVisible(void)
bool SolveSpace::MenuBarIsVisible(void)
{
// Implement me
return true;
}
void ShowTextWindow(bool visible)
void SolveSpace::ShowTextWindow(bool visible)
{
ShowWindow(TextWnd, visible ? SW_SHOWNOACTIVATE : SW_HIDE);
}
@ -642,27 +646,27 @@ static void CreateGlContext(HWND hwnd, HGLRC *glrc)
wglMakeCurrent(hdc, *glrc);
}
void PaintGraphics(void)
void SolveSpace::PaintGraphics(void)
{
SS.GW.Paint();
SwapBuffers(GetDC(GraphicsWnd));
}
void InvalidateGraphics(void)
void SolveSpace::InvalidateGraphics(void)
{
InvalidateRect(GraphicsWnd, NULL, false);
}
void ToggleFullScreen(void)
void SolveSpace::ToggleFullScreen(void)
{
// Implement me
}
bool FullScreenIsActive(void)
bool SolveSpace::FullScreenIsActive(void)
{
// Implement me
return false;
}
int64_t GetMilliseconds(void)
int64_t SolveSpace::GetMilliseconds(void)
{
LARGE_INTEGER t, f;
QueryPerformanceCounter(&t);
@ -671,14 +675,14 @@ int64_t GetMilliseconds(void)
return (int64_t)d;
}
int64_t GetUnixTime(void)
int64_t SolveSpace::GetUnixTime(void)
{
__time64_t ret;
_time64(&ret);
return (int64_t)ret;
}
void InvalidateText(void)
void SolveSpace::InvalidateText(void)
{
InvalidateRect(TextWnd, NULL, false);
}
@ -692,21 +696,21 @@ static void ShowEditControl(HWND h, int x, int y, char *s) {
SetFocus(h);
}
}
void ShowTextEditControl(int x, int y, char *s)
void SolveSpace::ShowTextEditControl(int x, int y, char *s)
{
if(GraphicsEditControlIsVisible()) return;
ShowEditControl(TextEditControl, x, y, s);
}
void HideTextEditControl(void)
void SolveSpace::HideTextEditControl(void)
{
ShowWindow(TextEditControl, SW_HIDE);
}
bool TextEditControlIsVisible(void)
bool SolveSpace::TextEditControlIsVisible(void)
{
return IsWindowVisible(TextEditControl) ? true : false;
}
void ShowGraphicsEditControl(int x, int y, char *s)
void SolveSpace::ShowGraphicsEditControl(int x, int y, char *s)
{
if(GraphicsEditControlIsVisible()) return;
@ -721,11 +725,11 @@ void ShowGraphicsEditControl(int x, int y, char *s)
ShowEditControl(GraphicsEditControl, x, y, s);
}
void HideGraphicsEditControl(void)
void SolveSpace::HideGraphicsEditControl(void)
{
ShowWindow(GraphicsEditControl, SW_HIDE);
}
bool GraphicsEditControlIsVisible(void)
bool SolveSpace::GraphicsEditControlIsVisible(void)
{
return IsWindowVisible(GraphicsEditControl) ? true : false;
}
@ -812,7 +816,7 @@ LRESULT CALLBACK GraphicsWndProc(HWND hwnd, UINT msg, WPARAM wParam,
if(HIWORD(wParam) == 0) {
int id = LOWORD(wParam);
if((id >= RECENT_OPEN && id < (RECENT_OPEN + MAX_RECENT))) {
SolveSpace::MenuFile(id);
SolveSpaceUI::MenuFile(id);
break;
}
if((id >= RECENT_IMPORT && id < (RECENT_IMPORT + MAX_RECENT))) {
@ -833,7 +837,7 @@ LRESULT CALLBACK GraphicsWndProc(HWND hwnd, UINT msg, WPARAM wParam,
case WM_CLOSE:
case WM_DESTROY:
SolveSpace::MenuFile(GraphicsWindow::MNU_EXIT);
SolveSpaceUI::MenuFile(GraphicsWindow::MNU_EXIT);
return 1;
default:
@ -846,7 +850,7 @@ LRESULT CALLBACK GraphicsWndProc(HWND hwnd, UINT msg, WPARAM wParam,
//-----------------------------------------------------------------------------
// Common dialog routines, to open or save a file.
//-----------------------------------------------------------------------------
bool GetOpenFile(char *file, const char *defExtension, const char *selPattern)
bool SolveSpace::GetOpenFile(char *file, const char *defExtension, const char *selPattern)
{
OPENFILENAME ofn;
@ -871,7 +875,7 @@ bool GetOpenFile(char *file, const char *defExtension, const char *selPattern)
return r ? true : false;
}
bool GetSaveFile(char *file, const char *defExtension, const char *selPattern)
bool SolveSpace::GetSaveFile(char *file, const char *defExtension, const char *selPattern)
{
OPENFILENAME ofn;
@ -896,7 +900,7 @@ bool GetSaveFile(char *file, const char *defExtension, const char *selPattern)
return r ? true : false;
}
int SaveFileYesNoCancel(void)
int SolveSpace::SaveFileYesNoCancel(void)
{
EnableWindow(GraphicsWnd, false);
EnableWindow(TextWnd, false);
@ -920,7 +924,7 @@ int SaveFileYesNoCancel(void)
return SAVE_CANCEL;
}
void LoadAllFontFiles(void)
void SolveSpace::LoadAllFontFiles(void)
{
WIN32_FIND_DATA wfd;
char dir[MAX_PATH];
@ -969,16 +973,16 @@ static void MenuById(int id, bool yes, bool check)
}
oops();
}
void CheckMenuById(int id, bool checked)
void SolveSpace::CheckMenuById(int id, bool checked)
{
MenuById(id, checked, true);
}
void RadioMenuById(int id, bool selected)
void SolveSpace::RadioMenuById(int id, bool selected)
{
// Windows does not natively support radio-button menu items
MenuById(id, selected, true);
}
void EnableMenuById(int id, bool enabled)
void SolveSpace::EnableMenuById(int id, bool enabled)
{
MenuById(id, enabled, false);
}
@ -996,7 +1000,7 @@ static void DoRecent(HMENU m, int base)
}
if(c == 0) AppendMenu(m, MF_STRING | MF_GRAYED, 0, "(no recent files)");
}
void RefreshRecentMenus(void)
void SolveSpace::RefreshRecentMenus(void)
{
DoRecent(RecentOpenMenu, RECENT_OPEN);
DoRecent(RecentImportMenu, RECENT_IMPORT);

View File

@ -8,6 +8,7 @@
//-----------------------------------------------------------------------------
#include "solvespace.h"
namespace SolveSpace {
static HANDLE PermHeap, TempHeap;
void dbp(const char *str, ...)
@ -81,4 +82,4 @@ void InitHeaps(void) {
// Create the heap that we use to store Exprs and other temp stuff.
FreeAllTemporary();
}
}