diff --git a/include/lgi/common/List.h b/include/lgi/common/List.h --- a/include/lgi/common/List.h +++ b/include/lgi/common/List.h @@ -1,505 +1,507 @@ /// \file /// \author Matthew Allen (fret@memecode.com) /// \brief A list control #ifndef __LList_H #define __LList_H // Includes #include "lgi/common/Mem.h" #include "lgi/common/Array.h" #include "lgi/common/Popup.h" #include "lgi/common/DisplayString.h" #include "lgi/common/Css.h" #include "lgi/common/ItemContainer.h" #include "lgi/common/UnrolledList.h" class LList; class LListItem; // Messages #define WM_END_EDIT_LABEL (WM_USER+0x556) ////////////////////////////////////////////////////////////////////////////// /// View modes for the list control enum LListMode { LListDetails, LListColumns, LListSpacial, }; #if 1 typedef LUnrolledList LListT; #else typedef List LListT; #endif class LgiClass LListItemPainter { public: // Overridable virtual void OnPaintColumn(LItem::ItemPaintCtx &Ctx, int i, LItemColumn *c) = 0; }; class LgiClass LListItemColumn : public LBase, public LItem, public LListItemPainter { LListItem *_Item; int _Column; int64 _Value; void OnPaint(ItemPaintCtx &Ctx) {} protected: LListT *GetAllItems(); LListItemColumn *GetItemCol(LListItem *i, int Col); public: LListItemColumn(LListItem *item, int col); // Other objects LListItem *GetItem() { return _Item; } LList *GetList(); LItemContainer *GetContainer(); // Props int GetColumn() { return _Column; } void SetColumn(int i) { _Column = i; } virtual int64 Value() { return _Value; } virtual void Value(int64 i); }; /// LItem for populating a LList class LgiClass LListItem : public LItem, public LListItemPainter { friend class LList; friend class LListItemColumn; friend class LItemColumn; protected: // Data class LListItemPrivate *d = NULL; LRect Pos; LList *Parent = NULL; // Methods bool GridLines(); LDisplayString *GetDs(int Col, int FitTo = -1); void ClearDs(int Col); public: // Application defined, defaults to 0 union { void *_UserPtr; NativeInt _UserInt; }; // Object LListItem(const char *initStr = NULL); virtual ~LListItem(); LItemContainer *GetContainer() override; /// Get the owning list LList *GetList() { return Parent; } /// Gets the LListItemColumn's. List *GetItemCols(); // Properties /// Set the text for a given column bool SetText(const char *s, int i=0) override; /// \brief Get the text for a given column. /// /// Override this in your LListItem based class to /// return the text for a column. Otherwise call SetText to store the text in the /// control. /// /// \returns A string const char *GetText ( /// The index of the column. int i = 0 ) override; /// Get the icon index to display in the '0th' column. The image list is stored in /// the parent LList. int GetImage(int Flags = 0) override; /// Sets the icon index void SetImage(int i) override; /// Returns true if selected bool Select() override; /// Changes the selection start of the control. void Select(bool b) override; /// Gets the on screen position of the field at column 'col' LRect *GetPos(int Col = -1) override; /// True if the item is visible bool OnScreen() { return Pos.y1 < Pos.y2; } // Methods /// Update the text cache and display the updated data void Update() override; /// Moves the item on screen if not visible void ScrollTo() override; // Events; void OnMouseClick(LMouse &m) override; void OnMeasure(LPoint *Info) override; void OnPaint(LSurface *pDC) override { LAssert(0); } void OnPaint(LItem::ItemPaintCtx &Ctx) override; void OnPaintColumn(LItem::ItemPaintCtx &Ctx, int i, LItemColumn *c) override; // Over-ridable virtual int Compare(LListItem *To, ssize_t Field = 0) { return 0; } virtual void OnColumnNotify(int Col, int64 Data) { Update(); } }; class LListItems { protected: LListT Items; public: template bool GetSelection(List &n) { n.Empty(); for (auto i : Items) { if (i->Select()) { T *ptr = dynamic_cast(i); if (ptr) n.Insert(ptr); } } return n.Length() > 0; } template bool GetSelection(LArray &n) { n.Empty(); for (auto i : Items) { if (i->Select()) { T *ptr = dynamic_cast(i); if (ptr) n.Add(ptr); } } return n.Length() > 0; } template bool GetAll(List &n) { n.Empty(); for (auto i : Items) { T *ptr = dynamic_cast(i); if (ptr) n.Insert(ptr); } return n.Length() > 0; } template bool GetAll(LArray &n) { n.Empty(); for (auto i : Items) { T *ptr = dynamic_cast(i); if (ptr) n.Add(ptr); } return n.Length() == Items.Length(); } LListT::I begin() { return Items.begin(); } LListT::I end() { return Items.end(); } }; /// List widget class LgiClass LList : public LItemContainer, public ResObject, public LListItems { friend class LListItem; friend class LItemColumn; friend class LListItemColumn; #ifdef WIN32 HCURSOR Cursor; #endif protected: class LListPrivate *d; // Contents int Keyboard; // index of the item with keyboard focus // Flags bool EditLabels; bool GridLines; // Double buffered LSurface *Buf; // Drawing locations LRect ItemsPos; LRect ScrollX, ScrollY; int FirstVisible; int LastVisible; int CompletelyVisible; // Misc bool GetUpdateRegion(LListItem *i, LRegion &r); LListItem *HitItem(int x, int y, int *Index = 0); LRect &GetClientRect(); void PourAll(); void UpdateScrollBars(); void KeyScroll(int iTo, int iFrom, bool SelectItems); void ClearDs(int Col); public: /// Constructor LList ( /// The control's ID int id, /// Left edge position int x = 0, /// Top edge position int y = 0, /// The width int cx = 100, /// The height int cy = 100, /// An unseen descriptor of the control const char *name = NULL ); ~LList(); const char *GetClass() { return "LList"; } // Overridables /// Called when an item is clicked virtual void OnItemClick ( /// The item clicked LListItem *Item, /// The mouse parameters for the click LMouse &m ); /// Called when the user selects an item and starts to drag it virtual void OnItemBeginDrag ( /// The item being dragged LListItem *Item, /// The mouse parameters at the time LMouse &m ); /// Called when the user selects an item. If multiple items are selected /// in one hit this is only called for the first item. Use GetSelection to /// get the extent of the selected items. virtual void OnItemSelect ( /// The item selected LArray &Items ); /// Called when a column is dragged somewhere virtual void OnColumnDrag ( /// The column index int Col, /// The mouse parameters at the time LMouse &m ) {} /// Called when the column is dropped to a new location /// /return true to have the columns reindexed for you virtual bool OnColumnReindex ( /// The column dropped LItemColumn *Col, /// The old index int OldIndex, /// The new index int NewIndex ) { return false; } // Events void OnPaint(LSurface *pDC); LMessage::Result OnEvent(LMessage *Msg); // int OnHitTest(int x, int y); LCursor GetCursor(int x, int y); void OnMouseClick(LMouse &m); void OnMouseMove(LMouse &m); int OnNotify(LViewI *Ctrl, LNotification n); void OnPosChange(); bool OnKey(LKey &k); bool OnMouseWheel(double Lines); void OnFocus(bool b); void OnPulse(); // Properties /// Returns whether the user can edit labels bool AllowEditLabels() { return EditLabels; } /// Sets whether the user can edit labels void AllowEditLabels(bool b) { EditLabels = b; } /// Returns whether grid lines are drawn bool DrawGridLines() { return GridLines; } /// Sets whether grid lines are drawn void DrawGridLines(bool b) { GridLines = b; } // Methods /// Get the display mode. /// \sa LListMode LListMode GetMode(); /// Set the display mode. /// \sa LListMode void SetMode(LListMode m); /// Returns the index of the first selected item int64 Value(); /// Selects the item at index 'i' void Value(int64 i); /// Selects 'obj' bool Select(LListItem *Obj); /// Gets the first selected object LListItem *GetSelected(); /// Select all the item in the list void SelectAll(); /// Scrolls the view to the first selected item if not in view void ScrollToSelection(); /// Clears the text cache for all the items and repaints the screen. void UpdateAllItems(); /// Gets the number of items. size_t Length() { return Items.Length(); } /// Returns true if the list is empty bool IsEmpty() { return Items.Length() == 0; } /// Deletes the item at index 'Index' bool Delete(ssize_t Index); /// Deletes the item 'p' virtual bool Delete(LListItem *p); /// Remove the item 'Obj' but don't delete it virtual bool Remove(LListItem *Obj); /// Inserts the item 'p' at index 'Index'. bool Insert ( /// The item to insert LListItem *p, /// The index to insert at or -1 for append int Index = -1, /// True if you want the list to update immediately. If you are inserting a lot of items quickly /// then you should pass false here and then update just once at the end of the insertions. bool Update = true ); template bool Insert(LArray &items, int Index = -1, bool Update = true) { List lst(items); return Insert(lst, Index, Update); } /// Insert a list of item virtual bool Insert ( /// The items to insert List &l, /// The starting index to insert at int Index = -1, /// True if you want the list to update immediately. If you are inserting a lot of item list quickly /// then you should pass false here and then update just once at the end of the insertions. bool Update = true ); /// Return true if the item 'Obj' is in the list bool HasItem(LListItem *Obj); /// Return the index of the item 'Obj' or -1 if not present int IndexOf(LListItem *Obj); /// Returns the item at index 'Index' LListItem *ItemAt(size_t Index); /* /// Sort the list void Sort ( /// The comparison function. Should return a integer greater then > 0 if the first item item is greater in value. LListCompareFunc Compare, /// User defined 32-bit value passed through to the 'Compare' function NativeInt Data = 0 ); */ /// Sort the list template void Sort ( /// The comparison function. Should return a integer greater then > 0 if the first item item is greater in value. int (*Compare)(LListItem *a, LListItem *b, User data), /// User defined value passed through to the 'Compare' function User Data = 0 ) { if (!Compare || !Lock(_FL)) return; LListItem *Kb = Keyboard >= 0 && Keyboard < (int)Items.Length() ? Items[Keyboard] : NULL; - Items.Sort(Compare, Data); + Items.Sort([Compare, Data](auto a, auto b) + { + return Compare(a, b, Data); + }); Keyboard = Kb ? (int)Items.IndexOf(Kb) : -1; Unlock(); Invalidate(&ItemsPos); } void Sort(int Column) { if (Items.Length() == 0) return; if (!Lock(_FL)) return; LListItem *Kb = Items[Keyboard]; Items.Sort ( - [](LListItem *a, LListItem *b, int Column) -> int + [Column](LListItem *a, LListItem *b) -> int { const char *ATxt = a->GetText(Column); const char *BTxt = b->GetText(Column); return (ATxt && BTxt) ? stricmp(ATxt, BTxt) : 0; - }, - Column + } ); Keyboard = Kb ? (int)Items.IndexOf(Kb) : -1; Unlock(); Invalidate(&ItemsPos); } /// Removes all items from list and delete the objects. virtual void Empty(); /// Removes all references to externally owned items. Doesn't delete objects. virtual void RemoveAll(); // Impl int GetContentSize(int ColumnIdx); }; #endif diff --git a/include/lgi/common/UnrolledList.h b/include/lgi/common/UnrolledList.h --- a/include/lgi/common/UnrolledList.h +++ b/include/lgi/common/UnrolledList.h @@ -1,1038 +1,1022 @@ #ifndef _LUNROLLED_LIST_H_ #define _LUNROLLED_LIST_H_ #include #ifdef _DEBUG #define VALIDATE_UL() Validate() #else #define VALIDATE_UL() #endif template class LUnrolledList { struct LstBlk { LstBlk *Next, *Prev; int Count; T Obj[BlockSize]; LstBlk() { Next = Prev = NULL; Count = 0; } ~LstBlk() { for (int n=0; n= BlockSize; } int Remaining() { return BlockSize - Count; } }; public: class Iter { int Version; public: LUnrolledList *Lst; LstBlk *i; int Cur; Iter(LUnrolledList *lst) { Lst = lst; Version = Lst->Version; i = 0; Cur = 0; } Iter(LUnrolledList *lst, LstBlk *item, int c) { Lst = lst; Version = Lst->Version; i = item; Cur = c; } bool operator ==(const Iter &it) const { int x = (int)In() + (int)it.In(); if (x == 2) return (i == it.i) && (Cur == it.Cur); return x == 0; } bool operator !=(const Iter &it) const { return !(*this == it); } bool In() const { if (Lst->Version != Version) { // We need to check that 'i' is still part of the list: bool Found = false; for (auto p = Lst->FirstObj; p; p = p->Next) { if (i == p && (Found = true)) break; } if (!Found) return false; } return i && Cur >= 0 && Cur < i->Count; } T &operator *() { if (In()) return i->Obj[Cur]; LAssert(!"Invalid iterator."); static T empty; return empty; } T *operator ->() { return In() ? &i->Obj[Cur] : NULL; } Iter &operator =(LstBlk *item) { i = item; if (!i) Cur = 0; return *this; } Iter &operator =(int c) { Cur = c; return *this; } Iter &operator =(Iter *iter) { Lst = iter->Lst; i = iter->i; Cur = iter->Cur; return *this; } int GetIndex(int Base) { if (i) return Base + Cur; return -1; } bool Next() { if (i) { Cur++; if (Cur >= i->Count) { i = i->Next; if (i) { Cur = 0; return i->Count > 0; } } else return true; } return false; } bool Prev() { if (i) { Cur--; if (Cur < 0) { i = i->Prev; if (i && i->Count > 0) { Cur = i->Count - 1; return true; } } else return true; } return false; } bool Delete() { if (i) { LAssert(Lst); i->Delete(Cur, i); return true; } return false; } Iter &operator ++() { Next(); return *this; } Iter &operator --() { Prev(); return *this; } Iter &operator ++(int) { Next(); return *this; } Iter &operator --(int) { Prev(); return *this; } }; typedef Iter I; // typedef int (*CompareFn)(T *a, T *b, NativeInt data); protected: size_t Items; LstBlk *FirstObj, *LastObj; // This is used to warn iterators that the block list has changed and they // need to re-validate if their block pointer is still part of the list. // Otherwise they could try and access a block that doesn't exist anymore. // // New blocks don't bump this because they don't invalidate iterator's // block pointer. int Version; LstBlk *NewBlock(LstBlk *Where) { LstBlk *i = new LstBlk; LAssert(i != NULL); if (!i) return NULL; if (Where) { i->Prev = Where; if (i->Prev->Next) { // Insert i->Next = Where->Next; i->Prev->Next = i->Next->Prev = i; } else { // Append i->Prev->Next = i; LAssert(LastObj == Where); LastObj = i; } } else { // First object LAssert(FirstObj == 0); LAssert(LastObj == 0); FirstObj = LastObj = i; } return i; } bool DeleteBlock(LstBlk *i) { if (!i) { LAssert(!"No Obj."); return false; } if (i->Prev != 0 && i->Next != 0) { LAssert(FirstObj != i); LAssert(LastObj != i); } if (i->Prev) { i->Prev->Next = i->Next; } else { LAssert(FirstObj == i); FirstObj = i->Next; } if (i->Next) { i->Next->Prev = i->Prev; } else { LAssert(LastObj == i); LastObj = i->Prev; } Version++; delete i; return true; } bool Insert(LstBlk *i, T p, int Index = -1) { if (!i) return false; if (i->Full()) { if (!i->Next) { // Append a new LstBlk if (!NewBlock(i)) return false; } if (Index < 0) return Insert(i->Next, p, Index); // Push last pointer into Next if (i->Next->Full()) NewBlock(i); // Create an empty Next if (!Insert(i->Next, i->Obj[BlockSize-1], 0)) return false; i->Count--; Items--; // We moved the item... not inserted it. // Fall through to the local "non-full" insert... } LAssert(!i->Full()); if (Index < 0) Index = i->Count; else if (Index < i->Count) memmove(i->Obj+Index+1, i->Obj+Index, (i->Count-Index) * sizeof(p)); i->Obj[Index] = p; i->Count++; Items++; LAssert(i->Count <= BlockSize); return true; } Iter GetIndex(size_t Index, size_t *Base = NULL) { size_t n = 0; for (LstBlk *i = FirstObj; i; i = i->Next) { if (Index >= n && Index < n + i->Count) { if (Base) *Base = n; return Iter(this, i, (int) (Index - n)); } n += i->Count; } if (Base) *Base = 0; return Iter(this); } Iter GetPtr(T Obj, size_t *Base = NULL) { size_t n = 0; for (LstBlk *i = FirstObj; i; i = i->Next) { for (int k=0; kCount; k++) { if (i->Obj[k] == Obj) { if (Base) *Base = n; return Iter(this, i, k); } } n += i->Count; } if (Base) *Base = 0; return Iter(this); } class BTreeNode { public: T *Node; BTreeNode *Left; BTreeNode *Right; T ***Index(T ***Items) { if (Left) { Items = Left->Index(Items); } **Items = Node; Items++; if (Right) { Items = Right->Index(Items); } return Items; } }; public: LUnrolledList() { FirstObj = LastObj = NULL; Items = 0; Version = 0; } ~LUnrolledList() { VALIDATE_UL(); Empty(); } size_t Length() const { return Items; } bool Length(size_t Len) { if (Len == 0) return Empty(); else if (Len == Items) return true; VALIDATE_UL(); bool Status = false; if (Len < Items) { // Decrease list size... size_t Base = 0; Iter i = GetIndex(Len, &Base); if (i.i) { LAssert((Len - Base) <= i.i->Count); i.i->Count = Len - Base; LAssert(i.i->Count >= 0 && i.i->Count < BlockSize); while (i.i->Next) { DeleteBlock(i.i->Next); } Items = Len; } else LAssert(!"Iterator invalid."); } else { // Increase list size... LAssert(!"Impl me."); } VALIDATE_UL(); return Status; } bool Empty() { VALIDATE_UL(); Version++; LstBlk *n; for (LstBlk *i = FirstObj; i; i = n) { n = i->Next; delete i; } FirstObj = LastObj = NULL; Items = 0; VALIDATE_UL(); return true; } bool DeleteAt(size_t Index) { VALIDATE_UL(); Iter p = GetIndex(Index); if (!p.In()) return false; bool Status = Delete(p); VALIDATE_UL(); return Status; } bool Delete(Iter Pos) { if (!Pos.In()) return false; int &Index = Pos.Cur; LstBlk *&i = Pos.i; if (Index < i->Count-1) memmove(i->Obj+Index, i->Obj+Index+1, (i->Count-Index-1) * sizeof(T)); Items--; if (--i->Count == 0) { // This Item is now empty, remove and reset current // into the next Item LstBlk *n = i->Next; bool Status = DeleteBlock(i); Pos.Cur = 0; Pos.i = n; return Status; } else if (Index >= i->Count) { // Carry current item over to next Item Pos.i = Pos.i->Next; Pos.Cur = 0; } return true; } bool Delete(T Obj) { VALIDATE_UL(); auto It = GetPtr(Obj); if (!It.In()) return false; bool Status = Delete(It); VALIDATE_UL(); return Status; } T &New() { VALIDATE_UL(); if (!FirstObj || LastObj->Count >= BlockSize) NewBlock(LastObj); if (LastObj->Count >= BlockSize) { LAssert(!"No block for new object."); static T empty; return empty; } T &Ref = LastObj->Obj[LastObj->Count++]; Items++; VALIDATE_UL(); return Ref; } bool Insert(T p, Iter &it) { if (it.Lst != this) { LAssert(!"Wrong list."); return false; } if (!LastObj) return Insert(p, -1); VALIDATE_UL(); bool Status = Insert(it.i, p, it.Cur); VALIDATE_UL(); return Status; } bool Insert(T p, int Index = -1) { VALIDATE_UL(); if (!LastObj) { LstBlk *b = NewBlock(NULL); if (!b) return false; b->Obj[b->Count++] = p; Items++; VALIDATE_UL(); return true; } bool Status; size_t Base; Iter Pos(this); if (Index < 0) Status = Insert(LastObj, p, Index); else { Pos = GetIndex(Index, &Base); if (Pos.i) Status = Insert(Pos.i, p, (int) (Index - Base)); else Status = Insert(LastObj, p, -1); } VALIDATE_UL(); LAssert(Status); return Status; } bool Add(T p) { return Insert(p); } T operator [](int Index) { VALIDATE_UL(); auto i = GetIndex(Index); VALIDATE_UL(); return *i; } ssize_t IndexOf(T p) { VALIDATE_UL(); size_t Base = -1; auto Local = GetPtr(p, &Base); LAssert(Base != -1); ssize_t Idx = Local.In() ? Base + Local.Cur : -1; VALIDATE_UL(); return Idx; } bool HasItem(T p) { VALIDATE_UL(); Iter Pos = GetPtr(p); bool Status = Pos.In(); VALIDATE_UL(); return Status; } T ItemAt(ssize_t i) { VALIDATE_UL(); auto Local = GetIndex(i); VALIDATE_UL(); return *Local; } void Compact() { if (!FirstObj || !LastObj) return; /* int n=0; for (auto i: *this) LgiTrace("Before[%i]=%p\n", n++, i); n = 0; */ auto in = begin(); auto out = begin(); // Copy any items to fill gaps... while (in.i) { if (out.Cur >= BlockSize) { out.i = out.i->Next; out.Cur = 0; if (!out.i) { LAssert(!"Out should always trail in, and therefor be valid."); break; } } if (in.i != out.i || in.Cur != out.Cur) { // LgiTrace("Assign[%i/%i]: %p:%i=%p:%i %p\n", n++, (int)Items, out.i, out.Cur, in.i, in.Cur, out.i->Obj[out.Cur]); out.i->Obj[out.Cur] = in.i->Obj[in.Cur]; } else { // LgiTrace("NoAssign[%i/%i]: %p:%i=%p:%i %p\n", n++, (int)Items, out.i, out.Cur, in.i, in.Cur, out.i->Obj[out.Cur]); } out.Cur++; in++; } // Adjust all the block counts... size_t c = Items; for (auto i = FirstObj; i; i = i->Next) { if (c > BlockSize) i->Count = BlockSize; else i->Count = (int)c; c -= i->Count; } LAssert(c == 0); // Free any empty blocks... while (LastObj->Count <= 0) DeleteBlock(LastObj); /* n=0; for (auto i: *this) LgiTrace("After[%i]=%p\n", n++, i); */ } void Swap(LUnrolledList &other) { LSwap(Items, other.Items); LSwap(FirstObj, other.FirstObj); LSwap(LastObj, other.LastObj); } class RandomAccessIter { public: typedef LUnrolledList Unrolled; typedef RandomAccessIter It; typedef std::random_access_iterator_tag iterator_category; typedef T value_type; typedef ssize_t difference_type; typedef T *pointer; typedef T &reference; private: Unrolled *u; ssize_t Idx; int Shift; int Mask; int Version; struct BlkMap { int Count, Refs; LstBlk **Blocks; BlkMap(Unrolled *u) { Refs = 1; Count = (int) (u->Items + (BlockSize-1)) / BlockSize; Blocks = new LstBlk*[Count]; int Idx = 0; for (LstBlk *b=u->FirstObj; b; b = b->Next) Blocks[Idx++] = b; } ~BlkMap() { delete [] Blocks; } } *Map; bool Init() { Mask = 0; for (Shift=0; Shift<32 && (1<= 32) { LAssert(!"Not a power of 2 size"); return false; } Mask = (1 << Shift) - 1; // Create array of block pointers if (u) { // Make sure there are no gaps in the arrays u->Compact(); // Get a count of blocks and alloc index LAssert(Map == NULL); Map = new BlkMap(u); } return true; } public: RandomAccessIter(Unrolled *lst = NULL, ssize_t idx = 0) { u = lst; Idx = idx; Map = NULL; Version = lst->Version; Init(); } RandomAccessIter(const It &rhs) { u = rhs.u; Idx = rhs.Idx; Shift = rhs.Shift; Mask = rhs.Mask; Map = rhs.Map; Version = rhs.Version; if (Map) Map->Refs++; } RandomAccessIter(const It &rhs, ssize_t idx) { u = rhs.u; Idx = idx; Shift = rhs.Shift; Mask = rhs.Mask; Map = rhs.Map; Version = rhs.Version; if (Map) Map->Refs++; } ~RandomAccessIter() { if (Map) { Map->Refs--; if (Map->Refs == 0) { delete Map; Map = 0; } } } bool IsValid() const { return u != NULL && Idx >= 0 && Idx < (ssize_t)u->Items && Shift != 0 && Mask != 0 && Map != NULL; } inline T& operator*() const { LAssert(IsValid()); T &Obj = Map->Blocks[Idx>>Shift]->Obj[Idx&Mask]; return Obj; } inline T* operator->() const { LAssert(IsValid()); return &Map->Blocks[Idx>>Shift]->Obj[Idx&Mask]; } inline T& operator[](difference_type rhs) const { LAssert(IsValid() && rhs >= 0 && rhs < u->Items); return Map->Blocks[rhs>>Shift]->Obj[rhs&Mask]; } inline It& operator+=(difference_type rhs) {Idx += rhs; return *this;} inline It& operator-=(difference_type rhs) {Idx -= rhs; return *this;} inline It& operator++() {++Idx; return *this;} inline It& operator--() {--Idx; return *this;} inline It operator++(int) {It tmp(*this); ++Idx; return tmp;} inline It operator--(int) {It tmp(*this); --Idx; return tmp;} inline difference_type operator-(const It& rhs) const {return Idx-rhs.Idx;} - inline It operator+(difference_type amt) { return It(*this, Idx + amt); } - inline It operator-(difference_type amt) { return It(*this, Idx - amt); } + inline It operator+(difference_type amt) const { return It(*this, Idx + amt); } + inline It operator-(difference_type amt) const { return It(*this, Idx - amt); } friend inline It operator+(difference_type lhs, const It& rhs) {return It(lhs+rhs.Idx);} friend inline It operator-(difference_type lhs, const It& rhs) {return It(lhs-rhs.Idx);} inline bool operator==(const It& rhs) const {return Idx == rhs.Idx;} inline bool operator!=(const It& rhs) const {return Idx != rhs.Idx;} inline bool operator>(const It& rhs) const {return Idx > rhs.Idx;} inline bool operator<(const It& rhs) const {return Idx < rhs.Idx;} inline bool operator>=(const It& rhs) const {return Idx >= rhs.Idx;} inline bool operator<=(const It& rhs) const {return Idx <= rhs.Idx;} }; // Sort with no extra user data template void Sort(Fn Compare) { RandomAccessIter Start(this, 0); RandomAccessIter End(Start, Items); std::sort ( Start, End, - [Compare](T &a, T &b)->bool + [Compare](auto &a, auto &b)->bool { return Compare(a, b) < 0; } ); } - // Sort with extra user data - template - void Sort(Fn Compare, User Data) - { - RandomAccessIter Start(this, 0); - RandomAccessIter End(Start, Items); - std::sort - ( - Start, End, - [Compare, Data](T &a, T &b)->bool - { - return Compare(a, b, Data) < 0; - } - ); - } - /// Assign the contents of another list to this one LUnrolledList &operator =(const LUnrolledList &lst) { VALIDATE_UL(); // Make sure we have enough blocks allocated size_t i = 0; // Set the existing blocks to empty... for (LstBlk *out = FirstObj; out; out = out->Next) { out->Count = 0; i += BlockSize; } // If we don't have enough, add more... while (i < lst.Length()) { LstBlk *out = NewBlock(LastObj); if (out) i += BlockSize; else { LAssert(!"Can't allocate enough blocks?"); return *this; } } // If we have too many, free some... while (LastObj && i > lst.Length() + BlockSize) { DeleteBlock(LastObj); i -= BlockSize; } // Now copy over the block's contents. LstBlk *out = FirstObj; Items = 0; for (LstBlk *in = lst.FirstObj; in; in = in->Next) { for (int pos = 0; pos < in->Count; ) { if (!out->Remaining()) { out = out->Next; if (!out) { LAssert(!"We should have pre-allocated everything..."); return *this; } } int Cp = MIN(out->Remaining(), in->Count - pos); LAssert(Cp > 0); memcpy(out->Obj + out->Count, in->Obj + pos, Cp * sizeof(T*)); out->Count += Cp; pos += Cp; Items += Cp; } } VALIDATE_UL(); return *this; } Iter begin(int At = 0) { return GetIndex(At); } Iter rbegin(int At = 0) { return GetIndex(Length()-1); } Iter end() { return Iter(this, NULL, -1); } bool Validate() const { if (FirstObj == NULL && LastObj == NULL && Items == 0) return true; size_t n = 0; LstBlk *Prev = NULL; for (LstBlk *i = FirstObj; i; i = i->Next) { for (int k=0; kCount; k++) { n++; } if (i == FirstObj) { if (i->Prev) { LAssert(!"First object's 'Prev' should be NULL."); return false; } } else if (i == LastObj) { if (i->Next) { LAssert(!"Last object's 'Next' should be NULL."); return false; } } else { if (i->Prev != Prev) { LAssert(!"Middle LstBlk 'Prev' incorrect."); return false; } } Prev = i; } if (Items != n) { LAssert(!"Item count cache incorrect."); return false; } return true; } }; #endif diff --git a/lvc/mac/LvcCocoa.xcodeproj/project.pbxproj b/lvc/mac/LvcCocoa.xcodeproj/project.pbxproj --- a/lvc/mac/LvcCocoa.xcodeproj/project.pbxproj +++ b/lvc/mac/LvcCocoa.xcodeproj/project.pbxproj @@ -1,760 +1,583 @@ // !$*UTF8*$! { archiveVersion = 1; classes = { }; objectVersion = 48; objects = { /* Begin PBXBuildFile section */ 342D52A50F0CBA2F002A1C7C /* LgiMain.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 342D52A40F0CBA2F002A1C7C /* LgiMain.cpp */; }; - 3443DE7D2A46582B00973376 /* libssh.dylib in Frameworks */ = {isa = PBXBuildFile; fileRef = 347D147E252D44EE00422DA9 /* libssh.dylib */; }; - 3443DE7E2A46583600973376 /* libssh.dylib in CopyFiles */ = {isa = PBXBuildFile; fileRef = 347D147E252D44EE00422DA9 /* libssh.dylib */; settings = {ATTRIBUTES = (CodeSignOnCopy, ); }; }; 3448F8C62081D2500038AE76 /* mac-icon.icns in Resources */ = {isa = PBXBuildFile; fileRef = 3448F8C52081D2500038AE76 /* mac-icon.icns */; }; 3449AB5828B96C8A00F8AAD4 /* SshConnection.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 3449AB5728B96C8A00F8AAD4 /* SshConnection.cpp */; }; 3457FE492081CB3D00014BE4 /* BrowseUi.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 3457FE3E2081CB3D00014BE4 /* BrowseUi.cpp */; }; 3457FE4A2081CB3D00014BE4 /* DropDownBtn.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 3457FE3F2081CB3D00014BE4 /* DropDownBtn.cpp */; }; 3457FE4B2081CB3D00014BE4 /* Main.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 3457FE412081CB3D00014BE4 /* Main.cpp */; }; 3457FE4C2081CB3D00014BE4 /* VcCommit.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 3457FE432081CB3D00014BE4 /* VcCommit.cpp */; }; 3457FE4D2081CB3D00014BE4 /* VcFile.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 3457FE452081CB3D00014BE4 /* VcFile.cpp */; }; 3457FE4E2081CB3D00014BE4 /* VcFolder.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 3457FE472081CB3D00014BE4 /* VcFolder.cpp */; }; 3457FE502081CBE500014BE4 /* SubProcess.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 3457FE4F2081CBE500014BE4 /* SubProcess.cpp */; }; 3457FE522081CC4800014BE4 /* Lvc.lr8 in Resources */ = {isa = PBXBuildFile; fileRef = 3457FE512081CC4800014BE4 /* Lvc.lr8 */; }; 3465A7E32B2AB1BF00084F66 /* PostBuildStep.py in Resources */ = {isa = PBXBuildFile; fileRef = 3465A7E22B2AB1BF00084F66 /* PostBuildStep.py */; }; + 346F5AC72BA507C000D64829 /* libssh.4.7.2.dylib in Frameworks */ = {isa = PBXBuildFile; fileRef = 34DB96442BA5060A0058A51D /* libssh.4.7.2.dylib */; }; 347D1489252D453300422DA9 /* DeEscape.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 347D1488252D453300422DA9 /* DeEscape.cpp */; }; 3485E7F5294F13F70020C14D /* PatchViewer.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 3485E7F4294F13F70020C14D /* PatchViewer.cpp */; }; - 34A3CCB92B64647E000AD22F /* libpng16.15.29.0.dylib in CopyFiles */ = {isa = PBXBuildFile; fileRef = 34A3CCB52B646469000AD22F /* libpng16.15.29.0.dylib */; settings = {ATTRIBUTES = (CodeSignOnCopy, ); }; }; - 34A3CCBA2B646487000AD22F /* libz_local.1.2.5.dylib in CopyFiles */ = {isa = PBXBuildFile; fileRef = 34A3CCB72B646472000AD22F /* libz_local.1.2.5.dylib */; settings = {ATTRIBUTES = (CodeSignOnCopy, ); }; }; + 34A3CCB92B64647E000AD22F /* libpng16.16.dylib in CopyFiles */ = {isa = PBXBuildFile; fileRef = 34A3CCB52B646469000AD22F /* libpng16.16.dylib */; settings = {ATTRIBUTES = (CodeSignOnCopy, ); }; }; + 34A3CCBA2B646487000AD22F /* libz.1.3.1.dylib in CopyFiles */ = {isa = PBXBuildFile; fileRef = 34A3CCB72B646472000AD22F /* libz.1.3.1.dylib */; settings = {ATTRIBUTES = (CodeSignOnCopy, ); }; }; 34BD35B120C5484A0001838A /* ControlTree.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 34BD35B020C5484A0001838A /* ControlTree.cpp */; }; 34BD35B320C548710001838A /* XmlTreeUi.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 34BD35B220C548710001838A /* XmlTreeUi.cpp */; }; 34C032B32319CDE900470DF2 /* Cocoa.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 34C032B22319CDE900470DF2 /* Cocoa.framework */; }; 34C032BB2319CE8C00470DF2 /* LgiCocoa.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 34C032B92319CDFE00470DF2 /* LgiCocoa.framework */; }; 34C032BD2319CEC100470DF2 /* OptionsFile.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 34C032BC2319CEC100470DF2 /* OptionsFile.cpp */; }; 34C032BE2319CEF200470DF2 /* LgiCocoa.framework in CopyFiles */ = {isa = PBXBuildFile; fileRef = 34C032B92319CDFE00470DF2 /* LgiCocoa.framework */; settings = {ATTRIBUTES = (CodeSignOnCopy, RemoveHeadersOnCopy, ); }; }; 34CE07102327B3B100807DCB /* Png.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 34CE070F2327B3B100807DCB /* Png.cpp */; }; + 34DB96462BA5061E0058A51D /* libssh.4.7.2.dylib in CopyFiles */ = {isa = PBXBuildFile; fileRef = 34DB96442BA5060A0058A51D /* libssh.4.7.2.dylib */; settings = {ATTRIBUTES = (CodeSignOnCopy, ); }; }; 34E1910C20B1898E00005243 /* image-list.png in Resources */ = {isa = PBXBuildFile; fileRef = 34E1910B20B1898E00005243 /* image-list.png */; }; 8D0C4E8D0486CD37000505A6 /* InfoPlist.strings in Resources */ = {isa = PBXBuildFile; fileRef = 0867D6AAFE840B52C02AAC07 /* InfoPlist.strings */; }; /* End PBXBuildFile section */ /* Begin PBXContainerItemProxy section */ - 347D146D252D44EE00422DA9 /* PBXContainerItemProxy */ = { - isa = PBXContainerItemProxy; - containerPortal = 347D145B252D44EE00422DA9 /* libssh.xcodeproj */; - proxyType = 2; - remoteGlobalIDString = E7B7EBF2E2E94B119E531A89; - remoteInfo = exec; - }; - 347D146F252D44EE00422DA9 /* PBXContainerItemProxy */ = { - isa = PBXContainerItemProxy; - containerPortal = 347D145B252D44EE00422DA9 /* libssh.xcodeproj */; - proxyType = 2; - remoteGlobalIDString = DD956992C30A4BF184529B89; - remoteInfo = libssh_scp; - }; - 347D1471252D44EE00422DA9 /* PBXContainerItemProxy */ = { - isa = PBXContainerItemProxy; - containerPortal = 347D145B252D44EE00422DA9 /* libssh.xcodeproj */; - proxyType = 2; - remoteGlobalIDString = 0E7EB5AA394C4113A5D0EE27; - remoteInfo = libsshpp; - }; - 347D1473252D44EE00422DA9 /* PBXContainerItemProxy */ = { - isa = PBXContainerItemProxy; - containerPortal = 347D145B252D44EE00422DA9 /* libssh.xcodeproj */; - proxyType = 2; - remoteGlobalIDString = AE81894E52BF4DA59548676E; - remoteInfo = libsshpp_noexcept; - }; - 347D1475252D44EE00422DA9 /* PBXContainerItemProxy */ = { - isa = PBXContainerItemProxy; - containerPortal = 347D145B252D44EE00422DA9 /* libssh.xcodeproj */; - proxyType = 2; - remoteGlobalIDString = D4B00784B7B24F5E8FD509DC; - remoteInfo = samplesftp; - }; - 347D1477252D44EE00422DA9 /* PBXContainerItemProxy */ = { - isa = PBXContainerItemProxy; - containerPortal = 347D145B252D44EE00422DA9 /* libssh.xcodeproj */; - proxyType = 2; - remoteGlobalIDString = F26DAFAF6A004E7AB969A293; - remoteInfo = scp_download; - }; - 347D1479252D44EE00422DA9 /* PBXContainerItemProxy */ = { - isa = PBXContainerItemProxy; - containerPortal = 347D145B252D44EE00422DA9 /* libssh.xcodeproj */; - proxyType = 2; - remoteGlobalIDString = 5B89EEC82A1A4D30A30253B2; - remoteInfo = senddata; - }; - 347D147B252D44EE00422DA9 /* PBXContainerItemProxy */ = { - isa = PBXContainerItemProxy; - containerPortal = 347D145B252D44EE00422DA9 /* libssh.xcodeproj */; - proxyType = 2; - remoteGlobalIDString = C8A8CF13F28F48F68C943CCA; - remoteInfo = "ssh-client"; - }; - 347D147D252D44EE00422DA9 /* PBXContainerItemProxy */ = { - isa = PBXContainerItemProxy; - containerPortal = 347D145B252D44EE00422DA9 /* libssh.xcodeproj */; - proxyType = 2; - remoteGlobalIDString = 918DBE79178E4403B12D04C9; - remoteInfo = ssh_shared; - }; - 347D147F252D44EE00422DA9 /* PBXContainerItemProxy */ = { - isa = PBXContainerItemProxy; - containerPortal = 347D145B252D44EE00422DA9 /* libssh.xcodeproj */; - proxyType = 2; - remoteGlobalIDString = 31153E90BDBA4EC6977031A8; - remoteInfo = sshnetcat; - }; - 347D1481252D44F900422DA9 /* PBXContainerItemProxy */ = { - isa = PBXContainerItemProxy; - containerPortal = 347D145B252D44EE00422DA9 /* libssh.xcodeproj */; - proxyType = 1; - remoteGlobalIDString = 28E768FB52DB40D988486502; - remoteInfo = ssh_shared; - }; 34C032B82319CDFE00470DF2 /* PBXContainerItemProxy */ = { isa = PBXContainerItemProxy; containerPortal = 34C032B42319CDFE00470DF2 /* LgiCocoa.xcodeproj */; proxyType = 2; remoteGlobalIDString = 3477C2681CBF020F0028B84B; remoteInfo = LgiCocoa; }; 34C032BF2319CF1A00470DF2 /* PBXContainerItemProxy */ = { isa = PBXContainerItemProxy; containerPortal = 34C032B42319CDFE00470DF2 /* LgiCocoa.xcodeproj */; proxyType = 1; remoteGlobalIDString = 3477C2671CBF020F0028B84B; remoteInfo = LgiCocoa; }; /* End PBXContainerItemProxy section */ /* Begin PBXCopyFilesBuildPhase section */ 34640D3212D5D8AB00B207F4 /* CopyFiles */ = { isa = PBXCopyFilesBuildPhase; buildActionMask = 2147483647; dstPath = ""; dstSubfolderSpec = 10; files = ( - 34A3CCBA2B646487000AD22F /* libz_local.1.2.5.dylib in CopyFiles */, - 34A3CCB92B64647E000AD22F /* libpng16.15.29.0.dylib in CopyFiles */, - 3443DE7E2A46583600973376 /* libssh.dylib in CopyFiles */, + 34DB96462BA5061E0058A51D /* libssh.4.7.2.dylib in CopyFiles */, + 34A3CCBA2B646487000AD22F /* libz.1.3.1.dylib in CopyFiles */, + 34A3CCB92B64647E000AD22F /* libpng16.16.dylib in CopyFiles */, 34C032BE2319CEF200470DF2 /* LgiCocoa.framework in CopyFiles */, ); runOnlyForDeploymentPostprocessing = 0; }; /* End PBXCopyFilesBuildPhase section */ /* Begin PBXFileReference section */ 342D52A40F0CBA2F002A1C7C /* LgiMain.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = LgiMain.cpp; path = ../../src/common/Lgi/LgiMain.cpp; sourceTree = SOURCE_ROOT; }; 3448F8C52081D2500038AE76 /* mac-icon.icns */ = {isa = PBXFileReference; lastKnownFileType = image.icns; name = "mac-icon.icns"; path = "../Resources/mac-icon.icns"; sourceTree = ""; }; 3449AB5628B96C8A00F8AAD4 /* SshConnection.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = SshConnection.h; path = ../Src/SshConnection.h; sourceTree = ""; }; 3449AB5728B96C8A00F8AAD4 /* SshConnection.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = SshConnection.cpp; path = ../Src/SshConnection.cpp; sourceTree = ""; }; 3457FE3E2081CB3D00014BE4 /* BrowseUi.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = BrowseUi.cpp; path = ../src/BrowseUi.cpp; sourceTree = ""; }; 3457FE3F2081CB3D00014BE4 /* DropDownBtn.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = DropDownBtn.cpp; path = ../Src/DropDownBtn.cpp; sourceTree = ""; }; 3457FE402081CB3D00014BE4 /* Lvc.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = Lvc.h; path = ../Src/Lvc.h; sourceTree = ""; }; 3457FE412081CB3D00014BE4 /* Main.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = Main.cpp; path = ../Src/Main.cpp; sourceTree = ""; }; 3457FE422081CB3D00014BE4 /* resdefs.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = resdefs.h; path = ../Resources/resdefs.h; sourceTree = ""; }; 3457FE432081CB3D00014BE4 /* VcCommit.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = VcCommit.cpp; path = ../Src/VcCommit.cpp; sourceTree = ""; }; 3457FE442081CB3D00014BE4 /* VcCommit.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = VcCommit.h; path = ../Src/VcCommit.h; sourceTree = ""; }; 3457FE452081CB3D00014BE4 /* VcFile.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = VcFile.cpp; path = ../Src/VcFile.cpp; sourceTree = ""; }; 3457FE462081CB3D00014BE4 /* VcFile.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = VcFile.h; path = ../Src/VcFile.h; sourceTree = ""; }; 3457FE472081CB3D00014BE4 /* VcFolder.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = VcFolder.cpp; path = ../Src/VcFolder.cpp; sourceTree = ""; }; 3457FE482081CB3D00014BE4 /* VcFolder.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = VcFolder.h; path = ../Src/VcFolder.h; sourceTree = ""; }; 3457FE4F2081CBE500014BE4 /* SubProcess.cpp */ = {isa = PBXFileReference; explicitFileType = sourcecode.cpp.objcpp; fileEncoding = 4; name = SubProcess.cpp; path = ../../src/posix/SubProcess.cpp; sourceTree = ""; }; 3457FE512081CC4800014BE4 /* Lvc.lr8 */ = {isa = PBXFileReference; explicitFileType = text; fileEncoding = 4; name = Lvc.lr8; path = ../Resources/Lvc.lr8; sourceTree = ""; }; 3465A7E22B2AB1BF00084F66 /* PostBuildStep.py */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.script.python; path = PostBuildStep.py; sourceTree = ""; }; - 347D145B252D44EE00422DA9 /* libssh.xcodeproj */ = {isa = PBXFileReference; lastKnownFileType = "wrapper.pb-project"; name = libssh.xcodeproj; path = ../../../../../CodeLib/libssh/build/libssh.xcodeproj; sourceTree = ""; }; 347D1488252D453300422DA9 /* DeEscape.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = DeEscape.cpp; path = ../../src/common/Text/DeEscape.cpp; sourceTree = ""; }; 3485E7F4294F13F70020C14D /* PatchViewer.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = PatchViewer.cpp; path = ../Src/PatchViewer.cpp; sourceTree = ""; }; 3488EE99233C16AF00756838 /* en */ = {isa = PBXFileReference; fileEncoding = 10; lastKnownFileType = text.plist.strings; name = en; path = en.lproj/InfoPlist.strings; sourceTree = ""; }; - 34A3CCB52B646469000AD22F /* libpng16.15.29.0.dylib */ = {isa = PBXFileReference; lastKnownFileType = "compiled.mach-o.dylib"; name = libpng16.15.29.0.dylib; path = ../../../../../codelib/libpng/build/release/libpng16.15.29.0.dylib; sourceTree = ""; }; - 34A3CCB72B646472000AD22F /* libz_local.1.2.5.dylib */ = {isa = PBXFileReference; lastKnownFileType = "compiled.mach-o.dylib"; name = libz_local.1.2.5.dylib; path = ../../../../../codelib/libpng/build/release/zlib_dir/libz_local.1.2.5.dylib; sourceTree = ""; }; + 34A3CCB52B646469000AD22F /* libpng16.16.dylib */ = {isa = PBXFileReference; lastKnownFileType = "compiled.mach-o.dylib"; name = libpng16.16.dylib; path = /opt/local/lib/libpng16.16.dylib; sourceTree = ""; }; + 34A3CCB72B646472000AD22F /* libz.1.3.1.dylib */ = {isa = PBXFileReference; lastKnownFileType = "compiled.mach-o.dylib"; name = libz.1.3.1.dylib; path = /opt/local/lib/libz.1.3.1.dylib; sourceTree = ""; }; 34BD35B020C5484A0001838A /* ControlTree.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = ControlTree.cpp; path = ../../src/common/Widgets/ControlTree.cpp; sourceTree = ""; }; 34BD35B220C548710001838A /* XmlTreeUi.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = XmlTreeUi.cpp; path = ../../src/common/Text/XmlTreeUi.cpp; sourceTree = ""; }; 34C032B22319CDE900470DF2 /* Cocoa.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = Cocoa.framework; path = ../../../../../../../System/Library/Frameworks/Cocoa.framework; sourceTree = ""; }; 34C032B42319CDFE00470DF2 /* LgiCocoa.xcodeproj */ = {isa = PBXFileReference; lastKnownFileType = "wrapper.pb-project"; name = LgiCocoa.xcodeproj; path = ../../src/mac/cocoa/LgiCocoa.xcodeproj; sourceTree = ""; }; 34C032BC2319CEC100470DF2 /* OptionsFile.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = OptionsFile.cpp; path = ../../src/common/Lgi/OptionsFile.cpp; sourceTree = ""; }; 34CE070F2327B3B100807DCB /* Png.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = Png.cpp; path = ../../src/common/Gdc2/Filters/Png.cpp; sourceTree = ""; }; + 34DB96442BA5060A0058A51D /* libssh.4.7.2.dylib */ = {isa = PBXFileReference; lastKnownFileType = "compiled.mach-o.dylib"; name = libssh.4.7.2.dylib; path = ../../../../../codelib/libssh/build/src/libssh.4.7.2.dylib; sourceTree = ""; }; 34E1910B20B1898E00005243 /* image-list.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; name = "image-list.png"; path = "../Resources/image-list.png"; sourceTree = ""; }; 8D0C4E960486CD37000505A6 /* Info.plist */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.plist; path = Info.plist; sourceTree = ""; }; 8D0C4E970486CD37000505A6 /* Lvc.app */ = {isa = PBXFileReference; explicitFileType = wrapper.application; includeInIndex = 0; path = Lvc.app; sourceTree = BUILT_PRODUCTS_DIR; }; /* End PBXFileReference section */ /* Begin PBXFrameworksBuildPhase section */ 8D0C4E910486CD37000505A6 /* Frameworks */ = { isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( - 3443DE7D2A46582B00973376 /* libssh.dylib in Frameworks */, 34C032BB2319CE8C00470DF2 /* LgiCocoa.framework in Frameworks */, 34C032B32319CDE900470DF2 /* Cocoa.framework in Frameworks */, + 346F5AC72BA507C000D64829 /* libssh.4.7.2.dylib in Frameworks */, ); runOnlyForDeploymentPostprocessing = 0; }; /* End PBXFrameworksBuildPhase section */ /* Begin PBXGroup section */ 195DF8CFFE9D517E11CA2CBB /* Products */ = { isa = PBXGroup; children = ( 8D0C4E970486CD37000505A6 /* Lvc.app */, ); name = Products; sourceTree = ""; }; 20286C29FDCF999611CA2CEA /* i.Hex */ = { isa = PBXGroup; children = ( 20286C2AFDCF999611CA2CEA /* Sources */, 20286C2CFDCF999611CA2CEA /* Resources */, 20286C32FDCF999611CA2CEA /* External Frameworks and Libraries */, 195DF8CFFE9D517E11CA2CBB /* Products */, 347D1483252D450500422DA9 /* Frameworks */, ); name = i.Hex; sourceTree = ""; }; 20286C2AFDCF999611CA2CEA /* Sources */ = { isa = PBXGroup; children = ( 3457FE412081CB3D00014BE4 /* Main.cpp */, 3457FE432081CB3D00014BE4 /* VcCommit.cpp */, 3457FE452081CB3D00014BE4 /* VcFile.cpp */, 3457FE472081CB3D00014BE4 /* VcFolder.cpp */, 3457FE402081CB3D00014BE4 /* Lvc.h */, 3457FE442081CB3D00014BE4 /* VcCommit.h */, 3457FE462081CB3D00014BE4 /* VcFile.h */, 3457FE482081CB3D00014BE4 /* VcFolder.h */, 342D52A30F0CBA07002A1C7C /* Lgi */, 3449AB3D28B96C7800F8AAD4 /* Ssh */, 3485E7F6294F15EE0020C14D /* UI */, ); name = Sources; sourceTree = ""; }; 20286C2CFDCF999611CA2CEA /* Resources */ = { isa = PBXGroup; children = ( 3465A7E22B2AB1BF00084F66 /* PostBuildStep.py */, 3457FE422081CB3D00014BE4 /* resdefs.h */, 34E1910B20B1898E00005243 /* image-list.png */, 3448F8C52081D2500038AE76 /* mac-icon.icns */, 3457FE512081CC4800014BE4 /* Lvc.lr8 */, 8D0C4E960486CD37000505A6 /* Info.plist */, 0867D6AAFE840B52C02AAC07 /* InfoPlist.strings */, ); name = Resources; sourceTree = ""; }; 20286C32FDCF999611CA2CEA /* External Frameworks and Libraries */ = { isa = PBXGroup; children = ( - 34A3CCB52B646469000AD22F /* libpng16.15.29.0.dylib */, - 34A3CCB72B646472000AD22F /* libz_local.1.2.5.dylib */, - 347D145B252D44EE00422DA9 /* libssh.xcodeproj */, + 34DB96442BA5060A0058A51D /* libssh.4.7.2.dylib */, + 34A3CCB52B646469000AD22F /* libpng16.16.dylib */, + 34A3CCB72B646472000AD22F /* libz.1.3.1.dylib */, 34C032B42319CDFE00470DF2 /* LgiCocoa.xcodeproj */, 34C032B22319CDE900470DF2 /* Cocoa.framework */, ); name = "External Frameworks and Libraries"; sourceTree = ""; }; 342D52A30F0CBA07002A1C7C /* Lgi */ = { isa = PBXGroup; children = ( 347D1488252D453300422DA9 /* DeEscape.cpp */, 34CE070F2327B3B100807DCB /* Png.cpp */, 34C032BC2319CEC100470DF2 /* OptionsFile.cpp */, 34BD35B220C548710001838A /* XmlTreeUi.cpp */, 34BD35B020C5484A0001838A /* ControlTree.cpp */, 3457FE4F2081CBE500014BE4 /* SubProcess.cpp */, 342D52A40F0CBA2F002A1C7C /* LgiMain.cpp */, ); name = Lgi; sourceTree = ""; }; 3449AB3D28B96C7800F8AAD4 /* Ssh */ = { isa = PBXGroup; children = ( 3449AB5728B96C8A00F8AAD4 /* SshConnection.cpp */, 3449AB5628B96C8A00F8AAD4 /* SshConnection.h */, ); name = Ssh; sourceTree = ""; }; - 347D145C252D44EE00422DA9 /* Products */ = { - isa = PBXGroup; - children = ( - 347D146E252D44EE00422DA9 /* exec */, - 347D1470252D44EE00422DA9 /* libssh_scp */, - 347D1472252D44EE00422DA9 /* libsshpp */, - 347D1474252D44EE00422DA9 /* libsshpp_noexcept */, - 347D1476252D44EE00422DA9 /* samplesftp */, - 347D1478252D44EE00422DA9 /* scp_download */, - 347D147A252D44EE00422DA9 /* senddata */, - 347D147C252D44EE00422DA9 /* ssh-client */, - 347D147E252D44EE00422DA9 /* libssh.dylib */, - 347D1480252D44EE00422DA9 /* sshnetcat */, - ); - name = Products; - sourceTree = ""; - }; 347D1483252D450500422DA9 /* Frameworks */ = { isa = PBXGroup; children = ( ); name = Frameworks; sourceTree = ""; }; 3485E7F6294F15EE0020C14D /* UI */ = { isa = PBXGroup; children = ( 3457FE3E2081CB3D00014BE4 /* BrowseUi.cpp */, 3485E7F4294F13F70020C14D /* PatchViewer.cpp */, 3457FE3F2081CB3D00014BE4 /* DropDownBtn.cpp */, ); name = UI; sourceTree = ""; }; 34C032B52319CDFE00470DF2 /* Products */ = { isa = PBXGroup; children = ( 34C032B92319CDFE00470DF2 /* LgiCocoa.framework */, ); name = Products; sourceTree = ""; }; /* End PBXGroup section */ /* Begin PBXNativeTarget section */ 8D0C4E890486CD37000505A6 /* Lvc */ = { isa = PBXNativeTarget; buildConfigurationList = C0E91AC508A95435008D54AB /* Build configuration list for PBXNativeTarget "Lvc" */; buildPhases = ( 8D0C4E8C0486CD37000505A6 /* Resources */, 8D0C4E8F0486CD37000505A6 /* Sources */, 8D0C4E910486CD37000505A6 /* Frameworks */, 34640D3212D5D8AB00B207F4 /* CopyFiles */, 347D148F252D51F300422DA9 /* ShellScript */, 3465A7C82B2AB1A600084F66 /* ShellScript */, ); buildRules = ( ); dependencies = ( - 347D1482252D44F900422DA9 /* PBXTargetDependency */, 34C032C02319CF1A00470DF2 /* PBXTargetDependency */, ); name = Lvc; productInstallPath = "$(HOME)/Applications"; productName = i.Hex; productReference = 8D0C4E970486CD37000505A6 /* Lvc.app */; productType = "com.apple.product-type.application"; }; /* End PBXNativeTarget section */ /* Begin PBXProject section */ 20286C28FDCF999611CA2CEA /* Project object */ = { isa = PBXProject; attributes = { LastUpgradeCheck = 0940; }; buildConfigurationList = C0E91AC908A95435008D54AB /* Build configuration list for PBXProject "LvcCocoa" */; compatibilityVersion = "Xcode 8.0"; developmentRegion = en; hasScannedForEncodings = 1; knownRegions = ( en, Base, ); mainGroup = 20286C29FDCF999611CA2CEA /* i.Hex */; projectDirPath = ""; projectReferences = ( { ProductGroup = 34C032B52319CDFE00470DF2 /* Products */; ProjectRef = 34C032B42319CDFE00470DF2 /* LgiCocoa.xcodeproj */; }, - { - ProductGroup = 347D145C252D44EE00422DA9 /* Products */; - ProjectRef = 347D145B252D44EE00422DA9 /* libssh.xcodeproj */; - }, ); projectRoot = ""; targets = ( 8D0C4E890486CD37000505A6 /* Lvc */, ); }; /* End PBXProject section */ /* Begin PBXReferenceProxy section */ - 347D146E252D44EE00422DA9 /* exec */ = { - isa = PBXReferenceProxy; - fileType = "compiled.mach-o.executable"; - path = exec; - remoteRef = 347D146D252D44EE00422DA9 /* PBXContainerItemProxy */; - sourceTree = BUILT_PRODUCTS_DIR; - }; - 347D1470252D44EE00422DA9 /* libssh_scp */ = { - isa = PBXReferenceProxy; - fileType = "compiled.mach-o.executable"; - path = libssh_scp; - remoteRef = 347D146F252D44EE00422DA9 /* PBXContainerItemProxy */; - sourceTree = BUILT_PRODUCTS_DIR; - }; - 347D1472252D44EE00422DA9 /* libsshpp */ = { - isa = PBXReferenceProxy; - fileType = "compiled.mach-o.executable"; - path = libsshpp; - remoteRef = 347D1471252D44EE00422DA9 /* PBXContainerItemProxy */; - sourceTree = BUILT_PRODUCTS_DIR; - }; - 347D1474252D44EE00422DA9 /* libsshpp_noexcept */ = { - isa = PBXReferenceProxy; - fileType = "compiled.mach-o.executable"; - path = libsshpp_noexcept; - remoteRef = 347D1473252D44EE00422DA9 /* PBXContainerItemProxy */; - sourceTree = BUILT_PRODUCTS_DIR; - }; - 347D1476252D44EE00422DA9 /* samplesftp */ = { - isa = PBXReferenceProxy; - fileType = "compiled.mach-o.executable"; - path = samplesftp; - remoteRef = 347D1475252D44EE00422DA9 /* PBXContainerItemProxy */; - sourceTree = BUILT_PRODUCTS_DIR; - }; - 347D1478252D44EE00422DA9 /* scp_download */ = { - isa = PBXReferenceProxy; - fileType = "compiled.mach-o.executable"; - path = scp_download; - remoteRef = 347D1477252D44EE00422DA9 /* PBXContainerItemProxy */; - sourceTree = BUILT_PRODUCTS_DIR; - }; - 347D147A252D44EE00422DA9 /* senddata */ = { - isa = PBXReferenceProxy; - fileType = "compiled.mach-o.executable"; - path = senddata; - remoteRef = 347D1479252D44EE00422DA9 /* PBXContainerItemProxy */; - sourceTree = BUILT_PRODUCTS_DIR; - }; - 347D147C252D44EE00422DA9 /* ssh-client */ = { - isa = PBXReferenceProxy; - fileType = "compiled.mach-o.executable"; - path = "ssh-client"; - remoteRef = 347D147B252D44EE00422DA9 /* PBXContainerItemProxy */; - sourceTree = BUILT_PRODUCTS_DIR; - }; - 347D147E252D44EE00422DA9 /* libssh.dylib */ = { - isa = PBXReferenceProxy; - fileType = "compiled.mach-o.dylib"; - name = libssh.dylib; - path = libssh.4.7.2.dylib; - remoteRef = 347D147D252D44EE00422DA9 /* PBXContainerItemProxy */; - sourceTree = BUILT_PRODUCTS_DIR; - }; - 347D1480252D44EE00422DA9 /* sshnetcat */ = { - isa = PBXReferenceProxy; - fileType = "compiled.mach-o.executable"; - path = sshnetcat; - remoteRef = 347D147F252D44EE00422DA9 /* PBXContainerItemProxy */; - sourceTree = BUILT_PRODUCTS_DIR; - }; 34C032B92319CDFE00470DF2 /* LgiCocoa.framework */ = { isa = PBXReferenceProxy; fileType = wrapper.framework; path = LgiCocoa.framework; remoteRef = 34C032B82319CDFE00470DF2 /* PBXContainerItemProxy */; sourceTree = BUILT_PRODUCTS_DIR; }; /* End PBXReferenceProxy section */ /* Begin PBXResourcesBuildPhase section */ 8D0C4E8C0486CD37000505A6 /* Resources */ = { isa = PBXResourcesBuildPhase; buildActionMask = 2147483647; files = ( 3457FE522081CC4800014BE4 /* Lvc.lr8 in Resources */, 34E1910C20B1898E00005243 /* image-list.png in Resources */, 8D0C4E8D0486CD37000505A6 /* InfoPlist.strings in Resources */, 3448F8C62081D2500038AE76 /* mac-icon.icns in Resources */, 3465A7E32B2AB1BF00084F66 /* PostBuildStep.py in Resources */, ); runOnlyForDeploymentPostprocessing = 0; }; /* End PBXResourcesBuildPhase section */ /* Begin PBXShellScriptBuildPhase section */ 3465A7C82B2AB1A600084F66 /* ShellScript */ = { isa = PBXShellScriptBuildPhase; buildActionMask = 2147483647; files = ( ); inputFileListPaths = ( ); inputPaths = ( ); outputFileListPaths = ( ); outputPaths = ( ); runOnlyForDeploymentPostprocessing = 0; shellPath = /bin/sh; shellScript = "# Type a script or drag a script file from your workspace to insert its path.\npython3 ${PROJECT_DIR}/PostBuildStep.py ${BUILT_PRODUCTS_DIR}/${FRAMEWORKS_FOLDER_PATH}\n"; }; 347D148F252D51F300422DA9 /* ShellScript */ = { isa = PBXShellScriptBuildPhase; buildActionMask = 2147483647; files = ( ); inputFileListPaths = ( ); inputPaths = ( ); outputFileListPaths = ( ); outputPaths = ( ); runOnlyForDeploymentPostprocessing = 0; shellPath = /bin/sh; shellScript = "# Type a script or drag a script file from your workspace to insert its path.\nexport FW=${CONFIGURATION_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}\necho fw=${FW}\nrm -f ${FW}/libssh.4.dylib\nln -s ./libssh.4.7.2.dylib ${FW}/libssh.4.dylib\n"; }; /* End PBXShellScriptBuildPhase section */ /* Begin PBXSourcesBuildPhase section */ 8D0C4E8F0486CD37000505A6 /* Sources */ = { isa = PBXSourcesBuildPhase; buildActionMask = 2147483647; files = ( 347D1489252D453300422DA9 /* DeEscape.cpp in Sources */, 3457FE502081CBE500014BE4 /* SubProcess.cpp in Sources */, 34BD35B320C548710001838A /* XmlTreeUi.cpp in Sources */, 3457FE4C2081CB3D00014BE4 /* VcCommit.cpp in Sources */, 3457FE4E2081CB3D00014BE4 /* VcFolder.cpp in Sources */, 3485E7F5294F13F70020C14D /* PatchViewer.cpp in Sources */, 3457FE4A2081CB3D00014BE4 /* DropDownBtn.cpp in Sources */, 3457FE4D2081CB3D00014BE4 /* VcFile.cpp in Sources */, 34C032BD2319CEC100470DF2 /* OptionsFile.cpp in Sources */, 3457FE492081CB3D00014BE4 /* BrowseUi.cpp in Sources */, 342D52A50F0CBA2F002A1C7C /* LgiMain.cpp in Sources */, 34CE07102327B3B100807DCB /* Png.cpp in Sources */, 34BD35B120C5484A0001838A /* ControlTree.cpp in Sources */, 3449AB5828B96C8A00F8AAD4 /* SshConnection.cpp in Sources */, 3457FE4B2081CB3D00014BE4 /* Main.cpp in Sources */, ); runOnlyForDeploymentPostprocessing = 0; }; /* End PBXSourcesBuildPhase section */ /* Begin PBXTargetDependency section */ - 347D1482252D44F900422DA9 /* PBXTargetDependency */ = { - isa = PBXTargetDependency; - name = ssh_shared; - targetProxy = 347D1481252D44F900422DA9 /* PBXContainerItemProxy */; - }; 34C032C02319CF1A00470DF2 /* PBXTargetDependency */ = { isa = PBXTargetDependency; name = LgiCocoa; targetProxy = 34C032BF2319CF1A00470DF2 /* PBXContainerItemProxy */; }; /* End PBXTargetDependency section */ /* Begin PBXVariantGroup section */ 0867D6AAFE840B52C02AAC07 /* InfoPlist.strings */ = { isa = PBXVariantGroup; children = ( 3488EE99233C16AF00756838 /* en */, ); name = InfoPlist.strings; sourceTree = ""; }; /* End PBXVariantGroup section */ /* Begin XCBuildConfiguration section */ C0E91AC608A95435008D54AB /* Debug */ = { isa = XCBuildConfiguration; buildSettings = { - ARCHS = x86_64; CLANG_CXX_LANGUAGE_STANDARD = "c++14"; CLANG_CXX_LIBRARY = "libc++"; CLANG_ENABLE_OBJC_WEAK = YES; COMBINE_HIDPI_IMAGES = YES; COPY_PHASE_STRIP = NO; GCC_OPTIMIZATION_LEVEL = 0; GCC_PRECOMPILE_PREFIX_HEADER = YES; HEADER_SEARCH_PATHS = ( ../../include, ../../include/lgi/mac/cocoa, - ../../../../../codelib/libpng, - ../../../../../codelib/libpng/build/release, ../../../../../codelib/libssh/include, + /opt/local/include, + /opt/local/include/libpng16, ); INFOPLIST_FILE = Info.plist; INSTALL_PATH = "$(HOME)/Applications"; LD_RUNPATH_SEARCH_PATHS = "@executable_path/../Frameworks"; LIBRARY_SEARCH_PATHS = ( "$(inherited)", + "../../../../../codelib/libssh/build/**", /opt/local/lib, ); OTHER_CPLUSPLUSFLAGS = ( "$(OTHER_CFLAGS)", "-Wno-nullability-completeness", "-DHAS_LIBSSH=1", ); PRODUCT_BUNDLE_IDENTIFIER = com.memecode.Lvc; PRODUCT_NAME = Lvc; WRAPPER_EXTENSION = app; }; name = Debug; }; C0E91AC708A95435008D54AB /* Release */ = { isa = XCBuildConfiguration; buildSettings = { - ARCHS = x86_64; CLANG_CXX_LANGUAGE_STANDARD = "c++14"; CLANG_CXX_LIBRARY = "libc++"; CLANG_ENABLE_OBJC_WEAK = YES; COMBINE_HIDPI_IMAGES = YES; GCC_GENERATE_DEBUGGING_SYMBOLS = NO; GCC_PRECOMPILE_PREFIX_HEADER = YES; HEADER_SEARCH_PATHS = ( ../../include, ../../include/lgi/mac/cocoa, - ../../../../../codelib/libpng, - ../../../../../codelib/libpng/build/release, ../../../../../codelib/libssh/include, + /opt/local/include, + /opt/local/include/libpng16, ); INFOPLIST_FILE = Info.plist; INSTALL_PATH = "$(HOME)/Applications"; LD_RUNPATH_SEARCH_PATHS = "@executable_path/../Frameworks"; LIBRARY_SEARCH_PATHS = ( "$(inherited)", + "../../../../../codelib/libssh/build/**", /opt/local/lib, ); OTHER_CPLUSPLUSFLAGS = ( "$(OTHER_CFLAGS)", "-Wno-nullability-completeness", "-DHAS_LIBSSH=1", ); PRODUCT_BUNDLE_IDENTIFIER = com.memecode.Lvc; PRODUCT_NAME = Lvc; WRAPPER_EXTENSION = app; }; name = Release; }; C0E91ACA08A95435008D54AB /* Debug */ = { isa = XCBuildConfiguration; buildSettings = { ALWAYS_SEARCH_USER_PATHS = NO; CLANG_WARN_BLOCK_CAPTURE_AUTORELEASING = YES; CLANG_WARN_BOOL_CONVERSION = YES; CLANG_WARN_COMMA = YES; CLANG_WARN_CONSTANT_CONVERSION = YES; CLANG_WARN_DEPRECATED_OBJC_IMPLEMENTATIONS = YES; CLANG_WARN_EMPTY_BODY = YES; CLANG_WARN_ENUM_CONVERSION = YES; CLANG_WARN_INFINITE_RECURSION = YES; CLANG_WARN_INT_CONVERSION = YES; CLANG_WARN_NON_LITERAL_NULL_CONVERSION = YES; CLANG_WARN_OBJC_IMPLICIT_RETAIN_SELF = YES; CLANG_WARN_OBJC_LITERAL_CONVERSION = YES; CLANG_WARN_RANGE_LOOP_ANALYSIS = YES; CLANG_WARN_STRICT_PROTOTYPES = YES; CLANG_WARN_SUSPICIOUS_MOVE = YES; CLANG_WARN_UNREACHABLE_CODE = YES; CLANG_WARN__DUPLICATE_METHOD_MATCH = YES; ENABLE_STRICT_OBJC_MSGSEND = YES; ENABLE_TESTABILITY = YES; GCC_NO_COMMON_BLOCKS = YES; GCC_PREPROCESSOR_DEFINITIONS = ( MAC, _DEBUG, "LGI_COCOA=1", ); GCC_WARN_64_TO_32_BIT_CONVERSION = YES; GCC_WARN_ABOUT_RETURN_TYPE = YES; GCC_WARN_UNDECLARED_SELECTOR = YES; GCC_WARN_UNINITIALIZED_AUTOS = YES; GCC_WARN_UNUSED_FUNCTION = YES; GCC_WARN_UNUSED_VARIABLE = YES; HEADER_SEARCH_PATHS = ( ../../include/common, ../../include/mac/cocoa, ../../../../../CodeLib/libpng, ../../../../../CodeLib/libpng/build, ); MACOSX_DEPLOYMENT_TARGET = 10.15; ONLY_ACTIVE_ARCH = YES; SDKROOT = macosx; - VALID_ARCHS = x86_64; }; name = Debug; }; C0E91ACB08A95435008D54AB /* Release */ = { isa = XCBuildConfiguration; buildSettings = { ALWAYS_SEARCH_USER_PATHS = NO; CLANG_WARN_BLOCK_CAPTURE_AUTORELEASING = YES; CLANG_WARN_BOOL_CONVERSION = YES; CLANG_WARN_COMMA = YES; CLANG_WARN_CONSTANT_CONVERSION = YES; CLANG_WARN_DEPRECATED_OBJC_IMPLEMENTATIONS = YES; CLANG_WARN_EMPTY_BODY = YES; CLANG_WARN_ENUM_CONVERSION = YES; CLANG_WARN_INFINITE_RECURSION = YES; CLANG_WARN_INT_CONVERSION = YES; CLANG_WARN_NON_LITERAL_NULL_CONVERSION = YES; CLANG_WARN_OBJC_IMPLICIT_RETAIN_SELF = YES; CLANG_WARN_OBJC_LITERAL_CONVERSION = YES; CLANG_WARN_RANGE_LOOP_ANALYSIS = YES; CLANG_WARN_STRICT_PROTOTYPES = YES; CLANG_WARN_SUSPICIOUS_MOVE = YES; CLANG_WARN_UNREACHABLE_CODE = YES; CLANG_WARN__DUPLICATE_METHOD_MATCH = YES; ENABLE_STRICT_OBJC_MSGSEND = YES; GCC_NO_COMMON_BLOCKS = YES; GCC_PREPROCESSOR_DEFINITIONS = ( MAC, "LGI_COCOA=1", ); GCC_WARN_64_TO_32_BIT_CONVERSION = YES; GCC_WARN_ABOUT_RETURN_TYPE = YES; GCC_WARN_UNDECLARED_SELECTOR = YES; GCC_WARN_UNINITIALIZED_AUTOS = YES; GCC_WARN_UNUSED_FUNCTION = YES; GCC_WARN_UNUSED_VARIABLE = YES; HEADER_SEARCH_PATHS = ( ../../include/common, ../../include/mac/cocoa, ../../../../../CodeLib/libpng, ../../../../../CodeLib/libpng/build, ); MACOSX_DEPLOYMENT_TARGET = 10.15; SDKROOT = macosx; - VALID_ARCHS = x86_64; }; name = Release; }; /* End XCBuildConfiguration section */ /* Begin XCConfigurationList section */ C0E91AC508A95435008D54AB /* Build configuration list for PBXNativeTarget "Lvc" */ = { isa = XCConfigurationList; buildConfigurations = ( C0E91AC608A95435008D54AB /* Debug */, C0E91AC708A95435008D54AB /* Release */, ); defaultConfigurationIsVisible = 0; defaultConfigurationName = Release; }; C0E91AC908A95435008D54AB /* Build configuration list for PBXProject "LvcCocoa" */ = { isa = XCConfigurationList; buildConfigurations = ( C0E91ACA08A95435008D54AB /* Debug */, C0E91ACB08A95435008D54AB /* Release */, ); defaultConfigurationIsVisible = 0; defaultConfigurationName = Release; }; /* End XCConfigurationList section */ }; rootObject = 20286C28FDCF999611CA2CEA /* Project object */; } diff --git a/lvc/mac/LvcCocoa.xcodeproj/project.xcworkspace/xcuserdata/matthew.xcuserdatad/WorkspaceSettings.xcsettings b/lvc/mac/LvcCocoa.xcodeproj/project.xcworkspace/xcuserdata/matthew.xcuserdatad/WorkspaceSettings.xcsettings --- a/lvc/mac/LvcCocoa.xcodeproj/project.xcworkspace/xcuserdata/matthew.xcuserdatad/WorkspaceSettings.xcsettings +++ b/lvc/mac/LvcCocoa.xcodeproj/project.xcworkspace/xcuserdata/matthew.xcuserdatad/WorkspaceSettings.xcsettings @@ -1,20 +1,22 @@ BuildLocationStyle UseAppPreferences CustomBuildLocationType RelativeToDerivedData + DerivedDataCustomLocation + DerivedData DerivedDataLocationStyle - Default + WorkspaceRelativePath EnabledFullIndexStoreVisibility IssueFilterStyle ShowActiveSchemeOnly LiveSourceIssuesEnabled ShowSharedSchemesAutomaticallyEnabled diff --git a/lvc/mac/PostBuildStep.py b/lvc/mac/PostBuildStep.py --- a/lvc/mac/PostBuildStep.py +++ b/lvc/mac/PostBuildStep.py @@ -1,38 +1,38 @@ #!/usr/bin/env python3 import os import sys # import subprocess #log = open("log-file.txt", "w") #log.write(str(sys.argv)) frameworks = sys.argv[1] print("frameworks:", frameworks) def makeLink(target, hasMajorVer): global frameworks global log parts = target.split(".") target = "./" + target if hasMajorVer: link = os.path.join(frameworks, parts[0] + "." + parts[1] + ".dylib") else: link = os.path.join(frameworks, parts[0] + ".dylib") print("link", link, "exists:", os.path.exists(link)) if os.path.islink(link): os.unlink(link) os.symlink(target, link) def findLibAndLink(name, hasMajorVer): global frameworks global log files = os.listdir(frameworks) for f in files: full = os.path.join(frameworks, f) if not os.path.islink(full) and f.find(name) >= 0: makeLink(f, hasMajorVer) -findLibAndLink("libz_local", True) +findLibAndLink("libz", True) findLibAndLink("libpng16", False) diff --git a/src/mac/cocoa/File.mm b/src/mac/cocoa/File.mm --- a/src/mac/cocoa/File.mm +++ b/src/mac/cocoa/File.mm @@ -1,1903 +1,1902 @@ /*hdr ** FILE: File.mm ** AUTHOR: Matthew Allen ** DATE: 8/10/2000 ** DESCRIPTION: The new file subsystem ** ** Copyright (C) 2000, Matthew Allen ** fret@memecode.com */ /****************************** Includes **********************************/ #include #include #include #include #include #include #include #include #include "lgi/common/File.h" #include "lgi/common/Containers.h" #include "lgi/common/Gdc2.h" #include "lgi/common/LgiCommon.h" #include "lgi/common/LgiString.h" #include "lgi/common/SubProcess.h" #if LGI_COCOA #include #endif /****************************** Defines ***********************************/ #define stat64 stat #define lseek64 lseek #define ftrucate64 ftruncate #define O_LARGEFILE 0 /****************************** Globals ***********************************/ LString LFile::Path::Sep(DIR_STR); bool LFile::Path::FixCase() { return false; } struct ErrorCodeType { const char *Name; int Code; const char *Desc; } ErrorCodes[] = { #if defined(WIN32) {"EPERM", 1, "Not owner"}, {"ENOENT", 2, "No such file"}, {"ESRCH", 3, "No such process"}, {"EINTR", 4, "Interrupted system"}, {"EIO", 5, "I/O error"}, {"ENXIO", 6, "No such device"}, {"E2BIG", 7, "Argument list too long"}, {"ENOEXEC", 8, "Exec format error"}, {"EBADF", 9, "Bad file number"}, {"ECHILD", 10, "No children"}, {"EAGAIN", 11, "No more processes"}, {"ENOMEM", 12, "Not enough core"}, {"EACCES", 13, "Permission denied"}, {"EFAULT", 14, "Bad address"}, {"ENOTBLK", 15, "Block device required"}, {"EBUSY", 16, "Mount device busy"}, {"EEXIST", 17, "File exists"}, {"EXDEV", 18, "Cross-device link"}, {"ENODEV", 19, "No such device"}, {"ENOTDIR", 20, "Not a directory"}, {"EISDIR", 21, "Is a directory"}, {"EINVAL", 22, "Invalid argument"}, {"ENFILE", 23, "File table overflow"}, {"EMFILE", 24, "Too many open file"}, {"ENOTTY", 25, "Not a typewriter"}, {"ETXTBSY", 26, "Text file busy"}, {"EFBIG", 27, "File too large"}, {"ENOSPC", 28, "No space left on"}, {"ESPIPE", 29, "Illegal seek"}, {"EROFS", 30, "Read-only file system"}, {"EMLINK", 31, "Too many links"}, {"EPIPE", 32, "Broken pipe"}, {"EWOULDBLOCK", 35, "Operation would block"}, {"EINPROGRESS", 36, "Operation now in progress"}, {"EALREADY", 37, "Operation already in progress"}, {"ENOTSOCK", 38, "Socket operation on"}, {"EDESTADDRREQ", 39, "Destination address required"}, {"EMSGSIZE", 40, "Message too long"}, {"EPROTOTYPE", 41, "Protocol wrong type"}, {"ENOPROTOOPT", 42, "Protocol not available"}, {"EPROTONOSUPPORT", 43, "Protocol not supported"}, {"ESOCKTNOSUPPORT", 44, "Socket type not supported"}, {"EOPNOTSUPP", 45, "Operation not supported"}, {"EPFNOSUPPORT", 46, "Protocol family not supported"}, {"EAFNOSUPPORT", 47, "Address family not supported"}, {"EADDRINUSE", 48, "Address already in use"}, {"EADDRNOTAVAIL", 49, "Can't assign requested address"}, {"ENETDOWN", 50, "Network is down"}, {"ENETUNREACH", 51, "Network is unreachable"}, {"ENETRESET", 52, "Network dropped connection"}, {"ECONNABORTED", 53, "Software caused connection"}, {"ECONNRESET", 54, "Connection reset by peer"}, {"ENOBUFS", 55, "No buffer space available"}, {"EISCONN", 56, "Socket is already connected"}, {"ENOTCONN", 57, "Socket is not connected" }, {"ESHUTDOWN", 58, "Can't send after shutdown"}, {"ETOOMANYREFS", 59, "Too many references"}, {"ETIMEDOUT", 60, "Connection timed out"}, {"ECONNREFUSED", 61, "Connection refused"}, {"ELOOP", 62, "Too many levels of nesting"}, {"ENAMETOOLONG", 63, "File name too long" }, {"EHOSTDOWN", 64, "Host is down"}, {"EHOSTUNREACH", 65, "No route to host"}, {"ENOTEMPTY", 66, "Directory not empty"}, {"EPROCLIM", 67, "Too many processes"}, {"EUSERS", 68, "Too many users"}, {"EDQUOT", 69, "Disc quota exceeded"}, {"ESTALE", 70, "Stale NFS file handle"}, {"EREMOTE", 71, "Too many levels of remote in the path"}, {"ENOSTR", 72, "Device is not a stream"}, {"ETIME", 73, "Timer expired"}, {"ENOSR", 74, "Out of streams resources"}, {"ENOMSG", 75, "No message"}, {"EBADMSG", 76, "Trying to read unreadable message"}, {"EIDRM", 77, "Identifier removed"}, {"EDEADLK", 78, "Deadlock condition"}, {"ENOLCK", 79, "No record locks available"}, {"ENONET", 80, "Machine is not on network"}, {"ERREMOTE", 81, "Object is remote"}, {"ENOLINK", 82, "The link has been severed"}, {"EADV", 83, "ADVERTISE error"}, {"ESRMNT", 84, "SRMOUNT error"}, {"ECOMM", 85, "Communication error"}, {"EPROTO", 86, "Protocol error"}, {"EMULTIHOP", 87, "Multihop attempted"}, {"EDOTDOT", 88, "Cross mount point"}, {"EREMCHG", 89, "Remote address change"}, #elif defined(MAC) {"EPERM", EPERM, "Operation not permitted"}, {"ENOENT", ENOENT, "No such file or directory"}, {"ESRCH", ESRCH, "No such process"}, {"EINTR", EINTR, "Interrupted system call"}, {"EIO", EIO, "I/O error"}, {"ENXIO", ENXIO, "No such device or address"}, {"E2BIG", E2BIG, "Argument list too long"}, {"ENOEXEC", ENOEXEC, "Exec format error"}, {"EBADF", EBADF, "Bad file number"}, {"ECHILD", ECHILD, "No child processes"}, {"EAGAIN", EAGAIN, "Try again"}, {"ENOMEM", ENOMEM, "Out of memory"}, {"EACCES", EACCES, "Permission denied"}, {"EFAULT", EFAULT, "Bad address"}, {"ENOTBLK", ENOTBLK, "Block device required"}, {"EBUSY", EBUSY, "Device or resource busy"}, {"EEXIST", EEXIST, "File exists"}, {"EXDEV", EXDEV, "Cross-device link"}, {"ENODEV", ENODEV, "No such device"}, {"ENOTDIR", ENOTDIR, "Not a directory"}, {"EISDIR", EISDIR, "Is a directory"}, {"EINVAL", EINVAL, "Invalid argument"}, {"ENFILE", ENFILE, "File table overflow"}, {"EMFILE", EMFILE, "Too many open files"}, {"ENOTTY", ENOTTY, "Not a typewriter"}, {"ETXTBSY", ETXTBSY, "Text file busy"}, {"EFBIG", EFBIG, "File too large"}, {"ENOSPC", ENOSPC, "No space left on device"}, {"ESPIPE", ESPIPE, "Illegal seek"}, {"EROFS", EROFS, "Read-only file system"}, {"EMLINK", EMLINK, "Too many links"}, {"EPIPE", EPIPE, "Broken pipe"}, {"EDOM", EDOM, "Math argument out of domain of func"}, {"ERANGE", ERANGE, "Math result not representable"}, {"EDEADLK", EDEADLK, "Resource deadlock would occur"}, {"ENAMETOOLONG", ENAMETOOLONG, "File name too long"}, {"ENOLCK", ENOLCK, "No record locks available"}, {"ENOSYS", ENOSYS, "Function not implemented"}, {"ENOTEMPTY", ENOTEMPTY, "Directory not empty"}, {"ELOOP", ELOOP, "Too many symbolic links encountered"}, {"EWOULDBLOCK", EWOULDBLOCK, "Operation would block"}, {"ENOMSG", ENOMSG, "No message of desired type"}, {"EIDRM", EIDRM, "Identifier removed"}, {"EREMOTE", EREMOTE, "Object is remote"}, {"EOVERFLOW", EOVERFLOW, "Value too large for defined data type"}, {"EILSEQ", EILSEQ, "Illegal byte sequence"}, {"EUSERS", EUSERS, "Too many users"}, {"ENOTSOCK", ENOTSOCK, "Socket operation on non-socket"}, {"EDESTADDRREQ", EDESTADDRREQ, "Destination address required"}, {"EMSGSIZE", EMSGSIZE, "Message too long"}, {"EPROTOTYPE", EPROTOTYPE, "Protocol wrong type for socket"}, {"ENOPROTOOPT", ENOPROTOOPT, "Protocol not available"}, {"EPROTONOSUPPORT", EPROTONOSUPPORT, "Protocol not supported"}, {"ESOCKTNOSUPPORT", ESOCKTNOSUPPORT, "Socket type not supported"}, {"EOPNOTSUPP", EOPNOTSUPP, "Operation not supported on transport endpoint"}, {"EPFNOSUPPORT", EPFNOSUPPORT, "Protocol family not supported"}, {"EAFNOSUPPORT", EAFNOSUPPORT, "Address family not supported by protocol"}, {"EADDRINUSE", EADDRINUSE, "Address already in use"}, {"EADDRNOTAVAIL", EADDRNOTAVAIL, "Cannot assign requested address"}, {"ENETDOWN", ENETDOWN, "Network is down"}, {"ENETUNREACH", ENETUNREACH, "Network is unreachable"}, {"ENETRESET", ENETRESET, "Network dropped connection because of reset"}, {"ECONNABORTED", ECONNABORTED, "Software caused connection abort"}, {"ECONNRESET", ECONNRESET, "Connection reset by peer"}, {"ENOBUFS", ENOBUFS, "No buffer space available"}, {"EISCONN", EISCONN, "Transport endpoint is already connected"}, {"ENOTCONN", ENOTCONN, "Transport endpoint is not connected"}, {"ESHUTDOWN", ESHUTDOWN, "Cannot send after transport endpoint shutdown"}, {"ETOOMANYREFS", ETOOMANYREFS, "Too many references: cannot splice"}, {"ETIMEDOUT", ETIMEDOUT, "Connection timed out"}, {"ECONNREFUSED", ECONNREFUSED, "Connection refused"}, {"EHOSTDOWN", EHOSTDOWN, "Host is down"}, {"EHOSTUNREACH", EHOSTUNREACH, "No route to host"}, {"EALREADY", EALREADY, "Operation already in progress"}, {"EINPROGRESS", EINPROGRESS, "Operation now in progress"}, {"ESTALE", ESTALE, "Stale NFS file handle"}, {"EDQUOT", EDQUOT, "Quota exceeded"}, #else #error impl me #endif {"NONE", 0, "No error"}, }; const char *GetErrorName(int e) { for (ErrorCodeType *c=ErrorCodes; c->Code; c++) { if (e == c->Code) { return c->Name; } } static char s[32]; snprintf(s, sizeof(s), "Unknown(%i)", e); return s; } const char *GetErrorDesc(int e) { for (ErrorCodeType *c=ErrorCodes; c->Code; c++) { if (e == c->Code) { return c->Desc; } } return 0; } /****************************** Helper Functions **************************/ int64 LFileSize(const char *FileName) { struct stat64 s; if (FileName && stat64(FileName, &s) == 0) { return s.st_size; } return 0; } bool LDirExists(const char *FileName, char *CorrectCase) { bool Status = false; if (FileName) { struct stat s; // Check for exact match... if (stat(FileName, &s) == 0) { Status = S_ISDIR(s.st_mode); } } return Status; } bool LFileExists(const char *FileName, char *CorrectCase) { bool Status = false; if (FileName) { struct stat s; // Check for exact match... if (stat(FileName, &s) == 0) { Status = true; } else if (strlen(FileName) < MAX_PATH_LEN) { // Look for altenate case by enumerating the directory char d[MAX_PATH_LEN]; strcpy_s(d, sizeof(d), FileName); char *e = strrchr(d, DIR_CHAR); if (e) { *e++ = 0; DIR *Dir = opendir(d); if (Dir) { dirent *De; while ((De = readdir(Dir))) { if (stricmp(De->d_name, e) == 0) { try { // Tell the calling program the actual case of the file... e = (char*)strrchr(FileName, DIR_CHAR); // If this crashes because the argument is read only then we get caught by the try catch strcpy(e+1, De->d_name); // It worked! Status = true; } catch (...) { // It didn't work :( #ifdef _DEBUG printf("%s,%i - FileExists(%s) found an alternate case version but couldn't return it to the caller.\n", __FILE__, __LINE__, FileName); #endif } break; } } closedir(Dir); } } } } return Status; } bool LResolveShortcut(const char *LinkFile, char *Path, ssize_t Len) { return readlink (LinkFile, Path, Len) > 0; } void WriteStr(LFile &f, const char *s) { size_t Len = (s) ? strlen(s) : 0; f << Len; if (Len > 0) { f.Write(s, (int)Len); } } char *ReadStr(LFile &f DeclDebugArgs) { char *s = 0; // read the strings length... uint32 Len; f >> Len; if (Len > 0) { // 16mb sanity check.... anything over this // is _probably_ an error if (Len >= (16 << 20)) { // LgiAssert(0); return 0; } // allocate the memory buffer #if defined(_DEBUG) && defined MEMORY_DEBUG s = new(_file, _line) char[Len+1]; #else s = new char[Len+1]; #endif if (s) { // read the bytes from disk f.Read(s, Len); s[Len] = 0; } else { // memory allocation error, skip the data // on disk so the caller is where they think // they are in the file. f.Seek(Len, SEEK_CUR); } } return s; } ssize_t SizeofStr(const char *s) { return sizeof(uint32) + ((s) ? strlen(s) : 0); } bool LGetDriveInfo ( char *Path, uint64 *Free, uint64 *Size, uint64 *Available ) { bool Status = false; if (Path) { struct stat s; if (lstat(Path, &s) == 0) { // printf("LGetDriveInfo dev=%i\n", s.st_dev); } } return Status; } ///////////////////////////////////////////////////////////////////////// #include #include struct LVolumePriv { LString Name; LString Path; LVolumeTypes Type = VT_NONE; int Flags = 0; int64 Size = 0; int64 Free = 0; LAutoPtr Icon; LSystemPath SysPath = LSP_ROOT; LVolume *Next = NULL, *Child = NULL; LVolumePriv(const char *init) { if (init) { Name = LGetLeaf(init); Type = VT_FOLDER; Path = init; } } LVolumePriv(LSystemPath type, const char *name) { if (type) { Name = name; switch (SysPath = type) { case LSP_DESKTOP: Type = VT_DESKTOP; break; default: Type = VT_FOLDER; break; } Path = LGetSystemPath(type); } } void Insert(LVolume *v) { if (!Child) Child = v; else { for (auto i = Child; i; i = i->Next()) { if (!i->d->Next) { i->d->Next = v; break; } } } } }; LVolume::LVolume(const char *init) { d = new LVolumePriv(init); } LVolume::LVolume(LSystemPath syspath, const char *name) { d = new LVolumePriv(syspath, name); } LVolume::~LVolume() { DeleteObj(d->Child); DeleteObj(d->Next); DeleteObj(d); } const char *LVolume::Name() const { return d->Name; } const char *LVolume::Path() const { return d->Path; } LVolumeTypes LVolume::Type() const { return d->Type; } int LVolume::Flags() const { return d->Flags; } uint64 LVolume::Size() const { return d->Size; } uint64 LVolume::Free() const { return d->Free; } LSurface *LVolume::Icon() const { return d->Icon; } LDirectory *LVolume::GetContents() { LDirectory *Dir = NULL; if (d->Path) { Dir = new LDirectory; if (Dir && !Dir->First(d->Path)) DeleteObj(Dir); } return Dir; } #pragma GCC diagnostic push #pragma GCC diagnostic ignored "-Wdeprecated-declarations" // IDGF Apple.. provide an alternative you dumbass LVolume *LVolume::First() { if (d->SysPath == LSP_DESKTOP && !d->Child) { LVolume *v = NULL; LString DesktopPath = LGetSystemPath(LSP_DESKTOP); // List any favorites UInt32 seed; auto sflRef = LSSharedFileListCreate(NULL, kLSSharedFileListFavoriteItems, NULL); auto items = LSSharedFileListCopySnapshot( sflRef, &seed ); for( size_t i = 0; i < CFArrayGetCount(items); i++ ) { auto item = (LSSharedFileListItemRef) CFArrayGetValueAtIndex(items, i); if( !item ) continue; LString displayName = LSSharedFileListItemCopyDisplayName(item); auto outURL = LSSharedFileListItemCopyResolvedURL(item, kLSSharedFileListNoUserInteraction, NULL); if( !outURL ) continue; auto itemPath = CFURLCopyFileSystemPath(outURL, kCFURLPOSIXPathStyle); LString s = itemPath; if (displayName || (s && !s.Equals(DesktopPath))) // This is the root item, don't duplicate { v = new LVolume(); if (v) { v->d->Path = s; v->d->Name = displayName && !displayName.Equals("/") ? displayName : (LString)LGetLeaf(s); v->d->Type = VT_FOLDER; printf("Vol: %s -> %s\n", s.Get(), v->d->Name.Get()); auto IcoRef = LSSharedFileListItemCopyIconRef(item); if (IcoRef) { - NSImage *img = [[NSImage alloc] initWithIconRef:IcoRef]; + auto img = [[NSImage alloc] initWithIconRef:IcoRef]; v->d->Icon.Reset(new LMemDC(img)); [img release]; - CFRelease(IcoRef); } d->Insert(v); } } CFRelease(outURL); CFRelease(itemPath); } CFRelease(items); CFRelease(sflRef); } return d->Child; } LVolume *LVolume::Next() { if (d->SysPath == LSP_DESKTOP && !d->Next) { d->Next = new LVolume("/Volumes"); // List the local hard disks auto *ws = [NSWorkspace sharedWorkspace]; auto *vols = [ws mountedLocalVolumePaths]; auto *fm = [NSFileManager defaultManager]; for (NSString *path in vols) { NSDictionary* fsAttributes; NSString *description, *type, *volName; BOOL removable, writable, unmountable, res; res = [ws getFileSystemInfoForPath:path isRemovable:&removable isWritable:&writable isUnmountable:&unmountable description:&description type:&type]; if (!res) continue; // fsAttributes = [fm fileSystemAttributesAtPath:path]; NSError *err = nil; fsAttributes = [fm attributesOfFileSystemForPath:path error:&err]; volName = [fm displayNameAtPath:path]; NSNumber *size = [fsAttributes objectForKey:NSFileSystemSize]; NSNumber *freeSize = [fsAttributes objectForKey:NSFileSystemFreeSize]; #if 0 NSLog(@"path=%@\nname=%@\nremovable=%d\nwritable=%d\nunmountable=%d\n" "description=%@\ntype=%@, size=%@\n\n", path, name, removable, writable, unmountable, description, type, size); #endif LString s = [type UTF8String]; LString p = [path UTF8String]; LString name = [volName UTF8String]; if (!s.Equals("autofs") && p.Find("/System/Volumes") < 0 && p.Find("/private") < 0) { auto v = new LVolume(); if (v) { v->d->Path = p; v->d->Name = name; v->d->Type = VT_HARDDISK; v->d->Size = size.longLongValue; v->d->Free = freeSize.longLongValue; d->Next->d->Insert(v); // printf("Vol: s=%s p=%s name=%s\n", s.Get(), p.Get(), v->d->Name.Get()); } } } } return d->Next; } #pragma GCC diagnostic pop bool LVolume::IsMounted() const { return false; } bool LVolume::SetMounted(bool Mount) { return Mount; } void LVolume::Insert(LAutoPtr v) { d->Insert(v.Release()); } /////////////////////////////////////////////////////////////////////////////// LFileSystem::LFileSystem() { Instance = this; Root = 0; } LFileSystem::~LFileSystem() { DeleteObj(Root); } int FloppyType(int Letter) { return 0; } #if 0 OSType gFinderSignature = 'MACS'; OSStatus MoveFileToTrash(CFURLRef fileURL) { AppleEvent event, reply; OSStatus err; FSRef fileRef; AliasHandle fileAlias; if (CFURLGetFSRef(fileURL, &fileRef) == false) return coreFoundationUnknownErr; err = FSNewAliasMinimal(&fileRef, &fileAlias); if (err == noErr) { err = AEBuildAppleEvent(kAECoreSuite, kAEDelete, typeApplSignature, &gFinderSignature, sizeof(OSType), kAutoGenerateReturnID, kAnyTransactionID, &event, NULL, "'----':alis(@@)", fileAlias); if (err == noErr) { err = AESendMessage(&event, &reply, kAEWaitReply, kAEDefaultTimeout); if (err == noErr) AEDisposeDesc(&reply); AEDisposeDesc(&event); } DisposeHandle((Handle)fileAlias); } return err; } #endif bool LFileSystem::Copy(const char *From, const char *To, LError *ErrorCode, std::function callback) { if (!From || !To) { #if LGI_COCOA if (ErrorCode) *ErrorCode = NSFileReadInvalidFileNameError; #else if (ErrorCode) *ErrorCode = paramErr; #endif return false; } LFile In, Out; if (!In.Open(From, O_READ)) { if (ErrorCode) *ErrorCode = In.GetError(); return false; } if (!Out.Open(To, O_WRITE)) { if (ErrorCode) *ErrorCode = Out.GetError(); return false; } if (Out.SetSize(0)) { if (ErrorCode) *ErrorCode = #if LGI_COCOA NSFileWriteUnknownError; #else writErr; #endif return false; } int64 Size = In.GetSize(); if (!Size) { return true; } int64 Block = MIN((1 << 20), Size); char *Buf = new char[Block]; if (!Buf) { if (ErrorCode) *ErrorCode = #if LGI_COCOA NSFileWriteOutOfSpaceError; #else notEnoughBufferSpace; #endif return false; } int64 i = 0; while (i < Size) { ssize_t r = In.Read(Buf, Block); if (r > 0) { int Written = 0; while (Written < r) { ssize_t w = Out.Write(Buf + Written, r - Written); if (w > 0) { Written += w; } else { if (ErrorCode) *ErrorCode = #if LGI_COCOA NSFileWriteUnknownError; #else writErr; #endif goto ExitCopyLoop; } } i += Written; if (callback && !callback(i, Size)) break; } else break; } ExitCopyLoop: DeleteArray(Buf); if (i == Size) { if (ErrorCode) *ErrorCode = noErr; } else { Out.Close(); Delete(To, NULL, false); } return i == Size; } bool LFileSystem::Delete(LArray &Files, LArray *Status, bool ToTrash) { bool Error = false; if (ToTrash) { #if defined MAC #if LGI_COCOA NSMutableArray *urls = [[NSMutableArray alloc] initWithCapacity:Files.Length()]; if (urls) { for (auto f : Files) { id u = (NSURL *)CFURLCreateFromFileSystemRepresentation(NULL, (UInt8 *)f, strlen(f), 0); [urls addObject:u]; CFRelease(u); } [[NSWorkspace sharedWorkspace] recycleURLs:urls completionHandler:NULL]; [urls release]; } #else // Apple events method for (int i=0; id_name, ".") == 0 || strcmp(De->d_name, "..") == 0 || ( Pattern && !MatchStr(Pattern, De->d_name) ) ); } }; LDirectory::LDirectory() { d = new LDirectoryPriv; } LDirectory::~LDirectory() { Close(); DeleteObj(d); } LDirectory *LDirectory::Clone() { return new LDirectory; } int LDirectory::First(const char *Name, const char *Pattern) { Close(); if (Name) { strcpy_s(d->BasePath, sizeof(d->BasePath), Name); d->BaseEnd = d->BasePath + strlen(d->BasePath); if (!Pattern || stricmp(Pattern, LGI_ALL_FILES) == 0) { struct stat S; if (lstat(Name, &S) == 0) { if (S_ISREG(S.st_mode)) { char *Dir = strrchr(d->BasePath, DIR_CHAR); if (Dir) { *Dir++ = 0; d->Pattern = NewStr(Dir); } } } } else { d->Pattern = NewStr(Pattern); } auto e = d->BasePath + strlen(d->BasePath); while (e > d->BasePath && e[-1] == DIR_CHAR) *--e = 0; d->Dir = opendir(d->BasePath); if (d->Dir) { d->De = readdir(d->Dir); if (d->De) { char s[512]; LMakePath(s, sizeof(s), d->BasePath, GetName()); lstat(s, &d->Stat); if (d->Ignore()) { if (!Next()) { return false; } } } } else if (!Stricmp(Name, "/")) { // Really Apple? REALLY??? // Can't opendir("/")... sigh. Clearly there is more than one way to get this done. LSubProcess p("ls", "-l /"); LStringPipe o; if (p.Start() && p.Communicate(&o) == 0) { strcpy_s(d->BasePath, sizeof(d->BasePath), Name); d->BaseEnd = d->BasePath + strlen(d->BasePath); d->Cache.SetFixedLength(false); auto Lines = o.NewLStr().Split("\n"); for (auto Ln: Lines) { auto p = Ln.SplitDelimit(" \t", 8); if (p.Length() > 8) { auto Name = p.Last(); auto Lnk = Name.Split(" -> "); if (Lnk.Length() > 1) d->Cache.New().Printf("/%s", Lnk.Last().Get()); else d->Cache.New().Printf("/%s", Name.Get()); } } d->CachePos = 0; return !lstat(d->Cache[d->CachePos], &d->Stat); } else printf("%s:%i - ls failed.\n", _FL); } else { printf("%s:%i - opendir(%s) failed with %i\n", _FL, d->BasePath, errno); } } return d->Dir != 0 && d->De != 0; } int LDirectory::Next() { int Status = false; char s[512]; if (d->CachePos >= 0) { d->CachePos++; if (d->CachePos >= d->Cache.Length()) Status = false; else { *d->BaseEnd = 0; auto &c = d->Cache[d->CachePos]; if (!lstat(c, &d->Stat)) Status = true; } } else { while (d->Dir && d->De) { if ((d->De = readdir(d->Dir))) { *d->BaseEnd = 0; LMakePath(s, sizeof(s), d->BasePath, GetName()); lstat(s, &d->Stat); if (!d->Ignore()) { Status = true; break; } } } } return Status; } int LDirectory::Close() { if (d->Dir) { closedir(d->Dir); d->Dir = 0; } d->De = 0; return true; } bool LDirectory::Path(char *s, int BufLen) const { if (!s) { return false; } return LMakePath(s, BufLen, d->BasePath, GetName()); } LVolumeTypes LDirectory::GetType() const { return IsDir() ? VT_FOLDER : VT_FILE; } int LDirectory::GetUser(bool Group) const { if (Group) { return d->Stat.st_gid; } else { return d->Stat.st_uid; } } bool LDirectory::IsReadOnly() const { if (getuid() == d->Stat.st_uid) { // Check user perms return !TestFlag(GetAttributes(), S_IWUSR); } else if (getgid() == d->Stat.st_gid) { // Check group perms return !TestFlag(GetAttributes(), S_IWGRP); } // Check global perms return !TestFlag(GetAttributes(), S_IWOTH); } bool LDirectory::IsSymLink() const { long a = GetAttributes(); return S_ISLNK(a); } bool LDirectory::IsHidden() const { return GetName() && GetName()[0] == '.'; } bool LDirectory::IsDir() const { long a = GetAttributes(); return !S_ISLNK(a) && S_ISDIR(a); } long LDirectory::GetAttributes() const { return d->Stat.st_mode; } const char *LDirectory::GetName() const { if (d->CachePos >= 0) return d->Cache[d->CachePos]; if (d->De) return d->De->d_name; LAssert(!"Invalid state."); return NULL; } uint64 LDirectory::GetCreationTime() const { return (uint64)d->Stat.st_ctime * 1000; } uint64 LDirectory::GetLastAccessTime() const { return (uint64)d->Stat.st_atime * 1000; } uint64 LDirectory::GetLastWriteTime() const { return (uint64)d->Stat.st_mtime * 1000; } uint64 LDirectory::GetSize() const { return d->Stat.st_size; } int64 LDirectory::GetSizeOnDisk() { return d->Stat.st_size; } const char *LDirectory::FullPath() { auto n = GetName(); if (!n) return NULL; char *s = d->BaseEnd; char *e = d->BasePath + sizeof(d->BasePath); if (s > d->BasePath && s[-1] != DIR_CHAR) *s++ = DIR_CHAR; strncpy(s, n, e - s); return d->BasePath; } LString LDirectory::FileName() const { return GetName(); } int64_t LDirectory::TsToUnix(uint64_t timeStamp) { return timeStamp / 1000; } LDateTime LDirectory::TsToDateTime(uint64_t timeStamp, bool convertToLocalTz) { LDateTime dt; dt.SetTimeZone(0, false); // UTC dt.Set(timeStamp); LArray dst; if (convertToLocalTz && LDateTime::GetDaylightSavingsInfo(dst, dt)) { // Convert to local using the timezone in effect at 'dt' LDateTime::DstToLocal(dst, dt); } else { // Without knowing the timezone at 'dt' just leave it as UTC... // The caller will have to figure it out. } return dt; } ///////////////////////////////////////////////////////////////////////////////// class LFilePrivate { public: int hFile; char *Name; bool Swap; int Status; int Attributes; int LastError; LFilePrivate() { hFile = INVALID_HANDLE; Name = 0; Swap = false; Status = true; Attributes = 0; #if LGI_COCOA LastError = 0; #else LastError = noErr; #endif } ~LFilePrivate() { DeleteArray(Name); } }; LFile::LFile(const char *path, int mode) { d = new LFilePrivate; if (path) Open(path, mode); } LFile::~LFile() { if (d && ValidHandle(d->hFile)) { Close(); } DeleteObj(d); } int LFile::GetError() { return d->LastError; } OsFile LFile::Handle() { return d->hFile; } bool LFile::IsOpen() { return ValidHandle(d->hFile); } uint64_t LFile::GetModifiedTime() { struct stat s; stat(d->Name, &s); return s.st_mtime; } bool LFile::SetModifiedTime(uint64_t dt) { struct stat s; stat(d->Name, &s); struct timeval times[2] = {}; times[0].tv_sec = s.st_atime; times[1].tv_sec = dt; int r = utimes(d->Name, times); return r == 0; } void LFile::ChangeThread() { } // #define _FILE_OPEN #ifdef _FILE_OPEN GSemaphore _FileLock; GHashTable _FileOpen; LgiFunc void _DumpOpenFiles() { if (_FileLock.Lock(_FL)) { char *k; int i=0; for (void *p=_FileOpen.First(&k); p; p=_FileOpen.Next(&k)) { printf("File[%i]='%s'\n", i++, k); } _FileLock.Unlock(); } } #endif int LFile::Open(const char *File, int Mode) { if (!File) { #if LGI_COCOA d->LastError = NSFileReadInvalidFileNameError; #else d->LastError = paramErr; #endif return false; } if (TestFlag(Mode, O_WRITE) || TestFlag(Mode, O_READWRITE)) { Mode |= O_CREAT; } Close(); d->hFile = open(File, Mode | O_LARGEFILE, S_IRUSR | S_IWUSR); if (!ValidHandle(d->hFile)) { d->LastError = errno; printf("LFile::Open failed\n\topen(%s,%8.8x) = %i\n\terrno=%s (%s)\n", File, Mode, d->hFile, GetErrorName(errno), GetErrorDesc(errno)); return false; } #ifdef _FILE_OPEN if (_FileLock.Lock(_FL)) {5 _FileOpen.Add(File, this); _FileLock.Unlock(); } #endif d->Attributes = Mode; d->Name = new char[strlen(File)+1]; if (d->Name) { strcpy(d->Name, File); } d->Status = true; return true; } int LFile::Close() { if (ValidHandle(d->hFile)) { #ifdef _FILE_OPEN if (_FileLock.Lock(_FL)) { _FileOpen.Delete(d->Name); _FileLock.Unlock(); } #endif close(d->hFile); d->hFile = INVALID_HANDLE; DeleteArray(d->Name); } return true; } #define CHUNK 0xFFF0 ssize_t LFile::Read(void *Buffer, ssize_t Size, int Flags) { ssize_t Red = 0; if (Buffer && Size > 0) { Red = read(d->hFile, Buffer, Size); #ifdef _DEBUG if (Red < 0) { int Err = errno; int64 Pos = GetPos(); printf("Read error: %i, " LPrintfInt64 "\n", Err, Pos); } #endif } d->Status = Red == Size; return MAX(Red, 0); } ssize_t LFile::Write(const void *Buffer, ssize_t Size, int Flags) { ssize_t Written = 0; if (Buffer && Size > 0) { Written = write(d->hFile, Buffer, Size); #ifdef _DEBUG if (Written < 0) { int Err = errno; int64 Pos = GetPos(); printf("Write error: %i, " LPrintfInt64 "\n", Err, Pos); } #endif } d->Status = Written == Size; return MAX(Written, 0); } int64 LFile::Seek(int64 To, int Whence) { #if LINUX64 return lseek64(d->hFile, To, Whence); // If this doesn't compile, switch off LINUX64 #else return lseek(d->hFile, To, Whence); #endif } int64 LFile::SetPos(int64 Pos) { #if LINUX64 int64 p = lseek64(d->hFile, Pos, SEEK_SET); if (p < 0) { int e = errno; printf("%s:%i - lseek64(%Lx) failed (error %i: %s).\n", __FILE__, __LINE__, Pos, e, GetErrorName(e)); } #else return lseek(d->hFile, Pos, SEEK_SET); #endif } int64 LFile::GetPos() { #if LINUX64 int64 p = lseek64(d->hFile, 0, SEEK_CUR); if (p < 0) { int e = errno; printf("%s:%i - lseek64 failed (error %i: %s).\n", __FILE__, __LINE__, e, GetErrorName(e)); } return p; #else return lseek(d->hFile, 0, SEEK_CUR); #endif } int64 LFile::GetSize() { int64 Here = GetPos(); #if LINUX64 int64 Ret = lseek64(d->hFile, 0, SEEK_END); #else off_t Ret = lseek(d->hFile, 0, SEEK_END); #endif SetPos(Here); return Ret; } int64 LFile::SetSize(int64 Size) { if (ValidHandle(d->hFile)) { int64 Pos = GetPos(); /* close(d->hFile); if (d->Name) { #if LINUX64 truncate64(Name, Size); #else truncate(Name, Size); #endif } d->hFile = open(Name, Attributes, 0); */ #if LINUX64 ftruncate64(d->hFile, Size); #else ftruncate(d->hFile, Size); #endif if (d->hFile) { SetPos(Pos); } } return GetSize(); } bool LFile::Eof() { return GetPos() >= GetSize(); } ssize_t LFile::SwapRead(uchar *Buf, ssize_t Size) { ssize_t r = Read(Buf, Size); if (r == Size) { uint8 *s = Buf, *e = Buf + r - 1; for (; s < e; s++, e--) { uchar c = *s; *s = *e; *e = c; } } else return 0; return r; } ssize_t LFile::SwapWrite(uchar *Buf, ssize_t Size) { switch (Size) { case 1: { return Write(Buf, Size); break; } case 2: { uint16 i = *((uint16*)Buf); i = LgiSwap16(i); return Write(&i, Size); break; } case 4: { uint32 i = *((uint32*)Buf); i = LgiSwap32(i); return Write(&i, Size); break; } case 8: { uint64 i = *((uint64*)Buf); i = LgiSwap64(i); return Write(&i, Size); break; } default: { ssize_t i, n; for (i=0, n=Size-1; i 0) { char c; Size--; do { r = read(d->hFile, &c, 1); if (Eof()) { break; } *Buf++ = c; i++; } while (i < Size - 1 && c != '\n'); *Buf = 0; } return i; } ssize_t LFile::WriteStr(char *Buf, ssize_t Size) { ssize_t i = 0; ssize_t w; while (i <= Size) { w = write(d->hFile, Buf, 1); Buf++; i++; if (*Buf == '\n') break; } return i; } void LFile::SetStatus(bool s) { d->Status = s; } bool LFile::GetStatus() { return d->Status; } void LFile::SetSwap(bool s) { d->Swap = s; } bool LFile::GetSwap() { return d->Swap; } int LFile::GetOpenMode() { return d->Attributes; } const char *LFile::GetName() { return d->Name; } #define GFileOp(type) LFile &LFile::operator >> (type &i) \ { \ d->Status |= ((d->Swap) ? SwapRead((uchar*) &i, sizeof(i)) : Read(&i, sizeof(i))) != sizeof(i); \ return *this; \ } GFileOps(); #undef GFileOp #define GFileOp(type) LFile &LFile::operator << (type i) \ { \ d->Status |= ((d->Swap) ? SwapWrite((uchar*) &i, sizeof(i)) : Write(&i, sizeof(i))) != sizeof(i); \ return *this; \ } GFileOps(); #undef GFileOp diff --git a/src/mac/cocoa/LgiCocoa.xcodeproj/project.pbxproj b/src/mac/cocoa/LgiCocoa.xcodeproj/project.pbxproj --- a/src/mac/cocoa/LgiCocoa.xcodeproj/project.pbxproj +++ b/src/mac/cocoa/LgiCocoa.xcodeproj/project.pbxproj @@ -1,1210 +1,1214 @@ // !$*UTF8*$! { archiveVersion = 1; classes = { }; objectVersion = 54; objects = { /* Begin PBXBuildFile section */ 340833152698F8FF0028012F /* FontPriv.h in Headers */ = {isa = PBXBuildFile; fileRef = 340833122698F8FE0028012F /* FontPriv.h */; }; 340833162698F8FF0028012F /* FontType.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 340833132698F8FE0028012F /* FontType.cpp */; }; 340833172698F8FF0028012F /* TypeFace.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 340833142698F8FE0028012F /* TypeFace.cpp */; }; 3409C0CA27580ED60050302A /* ListItemRadioBtn.h in Headers */ = {isa = PBXBuildFile; fileRef = 3409C0C727580ED60050302A /* ListItemRadioBtn.h */; }; 3409C0CB27580ED60050302A /* List.h in Headers */ = {isa = PBXBuildFile; fileRef = 3409C0C827580ED60050302A /* List.h */; }; 3409C0CC27580ED60050302A /* ListItemCheckBox.h in Headers */ = {isa = PBXBuildFile; fileRef = 3409C0C927580ED60050302A /* ListItemCheckBox.h */; }; 3409C0D0275812CB0050302A /* Profile.h in Headers */ = {isa = PBXBuildFile; fileRef = 3409C0CF275812CB0050302A /* Profile.h */; }; 34109857217A9805007020CE /* LCocoaView.h in Sources */ = {isa = PBXBuildFile; fileRef = 34109856217A9805007020CE /* LCocoaView.h */; }; 34114C8B23091E6E00F342B1 /* LgiClasses.h in Headers */ = {isa = PBXBuildFile; fileRef = 34114C8A23091E6E00F342B1 /* LgiClasses.h */; }; 3413170E23068FFE008CE982 /* FileSelect.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 3413170D23068FFE008CE982 /* FileSelect.cpp */; }; 34131710230694D1008CE982 /* Gel.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 3413170F230694D1008CE982 /* Gel.cpp */; }; 3415168F26EC32E7007EE35F /* TextView4.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 3415168E26EC32E7007EE35F /* TextView4.cpp */; }; 3415169326EC32FF007EE35F /* TextView3.h in Headers */ = {isa = PBXBuildFile; fileRef = 3415169126EC32FF007EE35F /* TextView3.h */; }; 3415169426EC32FF007EE35F /* TextView4.h in Headers */ = {isa = PBXBuildFile; fileRef = 3415169226EC32FF007EE35F /* TextView4.h */; }; 3418EBCF25D9FEA600EA168A /* Progress.h in Headers */ = {isa = PBXBuildFile; fileRef = 3418EBCE25D9FEA600EA168A /* Progress.h */; }; 3418EBD125D9FEF500EA168A /* ProgressDlg.h in Headers */ = {isa = PBXBuildFile; fileRef = 3418EBD025D9FEF500EA168A /* ProgressDlg.h */; }; 3427064727A0E20C0043F733 /* CocoaView.mm in Sources */ = {isa = PBXBuildFile; fileRef = 3427064627A0E20C0043F733 /* CocoaView.mm */; }; 343874B5230F46B200CF96B4 /* Window.h in Headers */ = {isa = PBXBuildFile; fileRef = 343874B1230F46B200CF96B4 /* Window.h */; }; 343874B6230F46B200CF96B4 /* View.h in Headers */ = {isa = PBXBuildFile; fileRef = 343874B2230F46B200CF96B4 /* View.h */; }; 343874B7230F46B200CF96B4 /* App.h in Headers */ = {isa = PBXBuildFile; fileRef = 343874B3230F46B200CF96B4 /* App.h */; }; 343874B8230F46B200CF96B4 /* Layout.h in Headers */ = {isa = PBXBuildFile; fileRef = 343874B4230F46B200CF96B4 /* Layout.h */; }; 343BE8C72355D0CE00742E21 /* PopupList.h in Headers */ = {isa = PBXBuildFile; fileRef = 343BE8C62355D0CE00742E21 /* PopupList.h */; }; 3449B8CE26BBF6B10022A9B8 /* Notifications.h in Headers */ = {isa = PBXBuildFile; fileRef = 3449B8CD26BBF6B10022A9B8 /* Notifications.h */; }; 344CFBC8237365B800AE6B35 /* ClipBoard.h in Headers */ = {isa = PBXBuildFile; fileRef = 344CFBC7237365B800AE6B35 /* ClipBoard.h */; }; 345920FF1F25649000098DFD /* Font.h in Headers */ = {isa = PBXBuildFile; fileRef = 345920FC1F25649000098DFD /* Font.h */; }; 345921001F25649000098DFD /* FontCache.h in Headers */ = {isa = PBXBuildFile; fileRef = 345920FD1F25649000098DFD /* FontCache.h */; }; 345921011F25649000098DFD /* FontSelect.h in Headers */ = {isa = PBXBuildFile; fileRef = 345920FE1F25649000098DFD /* FontSelect.h */; }; 345EB84E235C6C01007D05DB /* Popup.h in Headers */ = {isa = PBXBuildFile; fileRef = 345EB84D235C6C01007D05DB /* Popup.h */; }; 346DDEC1240C882900751380 /* RadioGroup.h in Headers */ = {isa = PBXBuildFile; fileRef = 346DDEC0240C882900751380 /* RadioGroup.h */; }; 346FACE71D3C720B00FFEBCE /* Message.h in Headers */ = {isa = PBXBuildFile; fileRef = 346FACE61D3C720B00FFEBCE /* Message.h */; }; 346FACEB1D3C75AE00FFEBCE /* Uri.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 346FACE91D3C75AE00FFEBCE /* Uri.cpp */; }; 346FACEC1D3C75AE00FFEBCE /* MDStringToDigest.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 346FACEA1D3C75AE00FFEBCE /* MDStringToDigest.cpp */; }; 3471868823A9AF8900F8C952 /* SubProcess.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 3471868723A9AF8900F8C952 /* SubProcess.cpp */; }; 3477C2751CBF07DD0028B84B /* App.mm in Sources */ = {isa = PBXBuildFile; fileRef = 3477C2741CBF07DD0028B84B /* App.mm */; }; 3477C2781CBF08050028B84B /* ClipBoard.mm in Sources */ = {isa = PBXBuildFile; fileRef = 3477C2761CBF08050028B84B /* ClipBoard.mm */; }; 3477C2821CBF086A0028B84B /* General.mm in Sources */ = {isa = PBXBuildFile; fileRef = 3477C27A1CBF086A0028B84B /* General.mm */; }; 3477C2831CBF086A0028B84B /* Layout.mm in Sources */ = {isa = PBXBuildFile; fileRef = 3477C27B1CBF086A0028B84B /* Layout.mm */; }; 3477C2841CBF086A0028B84B /* Menu.mm in Sources */ = {isa = PBXBuildFile; fileRef = 3477C27C1CBF086A0028B84B /* Menu.mm */; }; 3477C2851CBF086A0028B84B /* Printer.mm in Sources */ = {isa = PBXBuildFile; fileRef = 3477C27D1CBF086A0028B84B /* Printer.mm */; }; 3477C2861CBF086A0028B84B /* Thread.mm in Sources */ = {isa = PBXBuildFile; fileRef = 3477C27E1CBF086A0028B84B /* Thread.mm */; }; 3477C2871CBF086A0028B84B /* View.mm in Sources */ = {isa = PBXBuildFile; fileRef = 3477C27F1CBF086A0028B84B /* View.mm */; }; 3477C2881CBF086A0028B84B /* Widgets.mm in Sources */ = {isa = PBXBuildFile; fileRef = 3477C2801CBF086A0028B84B /* Widgets.mm */; }; 3477C2891CBF086A0028B84B /* Window.mm in Sources */ = {isa = PBXBuildFile; fileRef = 3477C2811CBF086A0028B84B /* Window.mm */; }; 3477C28F1CBF08C10028B84B /* Gdc2.mm in Sources */ = {isa = PBXBuildFile; fileRef = 3477C28B1CBF08C10028B84B /* Gdc2.mm */; }; 3477C2901CBF08C10028B84B /* MemDC.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 3477C28C1CBF08C10028B84B /* MemDC.cpp */; }; 3477C2911CBF08C10028B84B /* PrintDC.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 3477C28D1CBF08C10028B84B /* PrintDC.cpp */; }; 3477C2921CBF08C10028B84B /* ScreenDC.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 3477C28E1CBF08C10028B84B /* ScreenDC.cpp */; }; 3477C2971CBF09320028B84B /* File.mm in Sources */ = {isa = PBXBuildFile; fileRef = 3477C2941CBF09320028B84B /* File.mm */; }; 3477C2981CBF09320028B84B /* Mem.mm in Sources */ = {isa = PBXBuildFile; fileRef = 3477C2951CBF09320028B84B /* Mem.mm */; }; 3477C2991CBF09320028B84B /* ShowFileProp_Mac.mm in Sources */ = {isa = PBXBuildFile; fileRef = 3477C2961CBF09320028B84B /* ShowFileProp_Mac.mm */; }; 3477C2A11CBF0A920028B84B /* Mem.h in Headers */ = {isa = PBXBuildFile; fileRef = 3477C29B1CBF0A920028B84B /* Mem.h */; }; 3477C2A21CBF0A920028B84B /* SymLookup.h in Headers */ = {isa = PBXBuildFile; fileRef = 3477C29C1CBF0A920028B84B /* SymLookup.h */; }; 3477C2A31CBF0A920028B84B /* LgiMac.h in Headers */ = {isa = PBXBuildFile; fileRef = 3477C29D1CBF0A920028B84B /* LgiMac.h */; }; 3477C2A41CBF0A920028B84B /* LgiOs.h in Headers */ = {isa = PBXBuildFile; fileRef = 3477C29E1CBF0A920028B84B /* LgiOs.h */; }; 3477C2A51CBF0A920028B84B /* LgiOsClasses.h in Headers */ = {isa = PBXBuildFile; fileRef = 3477C29F1CBF0A920028B84B /* LgiOsClasses.h */; }; 3477C2A61CBF0A920028B84B /* LgiOsDefs.h in Headers */ = {isa = PBXBuildFile; fileRef = 3477C2A01CBF0A920028B84B /* LgiOsDefs.h */; }; 3477C2A81CBF0AAF0028B84B /* Lgi.h in Headers */ = {isa = PBXBuildFile; fileRef = 3477C2A71CBF0AAF0028B84B /* Lgi.h */; }; 3477C2AA1CBF22A00028B84B /* File.h in Headers */ = {isa = PBXBuildFile; fileRef = 3477C2A91CBF22A00028B84B /* File.h */; }; 3477C2AC1CBF72170028B84B /* ViewPriv.h in Headers */ = {isa = PBXBuildFile; fileRef = 3477C2AB1CBF72170028B84B /* ViewPriv.h */; }; 3477C2AF1CBF96B90028B84B /* LgiRes.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 3477C2AE1CBF96B90028B84B /* LgiRes.cpp */; }; 3477C2B11CBF96C40028B84B /* Res.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 3477C2B01CBF96C40028B84B /* Res.cpp */; }; 3477C2B41CBF96F20028B84B /* LMsg.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 3477C2B31CBF96F20028B84B /* LMsg.cpp */; }; 3477C2B71CBF973F0028B84B /* GuiUtils.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 3477C2B61CBF973F0028B84B /* GuiUtils.cpp */; }; 3477C2B91CBF977F0028B84B /* LgiCommon.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 3477C2B81CBF977F0028B84B /* LgiCommon.cpp */; }; 3477C2BB1CBF97C80028B84B /* GdcCommon.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 3477C2BA1CBF97C80028B84B /* GdcCommon.cpp */; }; 3477C2C11CBF9A040028B84B /* String.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 3477C2C01CBF9A040028B84B /* String.cpp */; }; 3477C2C81CC046310028B84B /* TextView3.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 3477C2C41CC046310028B84B /* TextView3.cpp */; }; 3477C2C91CC046310028B84B /* Unicode.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 3477C2C51CC046310028B84B /* Unicode.cpp */; }; 3477C2CA1CC046310028B84B /* Utf8.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 3477C2C61CC046310028B84B /* Utf8.cpp */; }; 3477C2CB1CC046310028B84B /* XmlTree.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 3477C2C71CC046310028B84B /* XmlTree.cpp */; }; 3477C2CE1CC047BE0028B84B /* Charset.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 3477C2CD1CC047BE0028B84B /* Charset.cpp */; }; 3477C2D01CC047F50028B84B /* ToolBar.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 3477C2CF1CC047F50028B84B /* ToolBar.cpp */; }; 3477C2D31CC048100028B84B /* Containers.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 3477C2D21CC048100028B84B /* Containers.cpp */; }; 3477C2D51CC0481B0028B84B /* Array.h in Headers */ = {isa = PBXBuildFile; fileRef = 3477C2D41CC0481B0028B84B /* Array.h */; }; 3477C2D71CC048390028B84B /* Popup.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 3477C2D61CC048390028B84B /* Popup.cpp */; }; 3477C2DB1CC048F90028B84B /* DisplayString.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 3477C2D81CC048F90028B84B /* DisplayString.cpp */; }; 3477C2DC1CC048F90028B84B /* Font.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 3477C2D91CC048F90028B84B /* Font.cpp */; }; 3477C2DD1CC048F90028B84B /* FontSystem.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 3477C2DA1CC048F90028B84B /* FontSystem.cpp */; }; 3477C2DF1CC04A030028B84B /* ScrollBar.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 3477C2DE1CC04A030028B84B /* ScrollBar.cpp */; }; 3477C2E11CC04A3C0028B84B /* FontSelect.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 3477C2E01CC04A3C0028B84B /* FontSelect.cpp */; }; 3477C2E31CC04A5C0028B84B /* Stream.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 3477C2E21CC04A5C0028B84B /* Stream.cpp */; }; 3477C2E51CC04A7F0028B84B /* ViewCommon.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 3477C2E41CC04A7F0028B84B /* ViewCommon.cpp */; }; 3477C2E71CC04B1E0028B84B /* Surface.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 3477C2E61CC04B1E0028B84B /* Surface.cpp */; }; 3477C2E91CC04B5D0028B84B /* Rand.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 3477C2E81CC04B5D0028B84B /* Rand.cpp */; }; 3477C2EB1CC04B890028B84B /* Filter.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 3477C2EA1CC04B890028B84B /* Filter.cpp */; }; 3477C2EF1CC04BBB0028B84B /* ItemContainer.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 3477C2EC1CC04BBB0028B84B /* ItemContainer.cpp */; }; 3477C2F01CC04BBB0028B84B /* List.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 3477C2ED1CC04BBB0028B84B /* List.cpp */; }; 3477C2F11CC04BBB0028B84B /* Tree.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 3477C2EE1CC04BBB0028B84B /* Tree.cpp */; }; 3477C2FF1CC04BF00028B84B /* Bitmap.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 3477C2F21CC04BF00028B84B /* Bitmap.cpp */; }; 3477C3001CC04BF00028B84B /* Box.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 3477C2F31CC04BF00028B84B /* Box.cpp */; }; 3477C3011CC04BF00028B84B /* Button.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 3477C2F41CC04BF00028B84B /* Button.cpp */; }; 3477C3021CC04BF00028B84B /* CheckBox.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 3477C2F51CC04BF00028B84B /* CheckBox.cpp */; }; 3477C3031CC04BF00028B84B /* Combo.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 3477C2F61CC04BF00028B84B /* Combo.cpp */; }; 3477C3041CC04BF00028B84B /* Edit.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 3477C2F71CC04BF00028B84B /* Edit.cpp */; }; 3477C3051CC04BF00028B84B /* Panel.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 3477C2F81CC04BF00028B84B /* Panel.cpp */; }; 3477C3061CC04BF00028B84B /* Progress.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 3477C2F91CC04BF00028B84B /* Progress.cpp */; }; 3477C3071CC04BF00028B84B /* RadioGroup.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 3477C2FA1CC04BF00028B84B /* RadioGroup.cpp */; }; 3477C3081CC04BF00028B84B /* Splitter.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 3477C2FB1CC04BF00028B84B /* Splitter.cpp */; }; 3477C3091CC04BF00028B84B /* TableLayout.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 3477C2FC1CC04BF00028B84B /* TableLayout.cpp */; }; 3477C30A1CC04BF00028B84B /* TabView.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 3477C2FD1CC04BF00028B84B /* TabView.cpp */; }; 3477C30B1CC04BF00028B84B /* TextLabel.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 3477C2FE1CC04BF00028B84B /* TextLabel.cpp */; }; 3477C30D1CC04C560028B84B /* FindReplace.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 3477C30C1CC04C560028B84B /* FindReplace.cpp */; }; 3477C3101CC04C790028B84B /* Css.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 3477C30E1CC04C790028B84B /* Css.cpp */; }; 3477C3111CC04C790028B84B /* CssTools.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 3477C30F1CC04C790028B84B /* CssTools.cpp */; }; 3477C3131CC04CB10028B84B /* Rect.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 3477C3121CC04CB10028B84B /* Rect.cpp */; }; 3477C3161CC04CCB0028B84B /* Library.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 3477C3151CC04CCB0028B84B /* Library.cpp */; }; 3477C3191CC04CF10028B84B /* ThreadCommon.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 3477C3181CC04CF10028B84B /* ThreadCommon.cpp */; }; 3477C31D1CC04D3F0028B84B /* Net.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 3477C31B1CC04D3F0028B84B /* Net.cpp */; }; 3477C3201CC04D630028B84B /* ThreadEvent.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 3477C31F1CC04D630028B84B /* ThreadEvent.cpp */; }; 3477C3221CC04DA00028B84B /* Colour.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 3477C3211CC04DA00028B84B /* Colour.cpp */; }; 3477C3241CC04DD70028B84B /* Object.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 3477C3231CC04DD70028B84B /* Object.cpp */; }; 3477C3261CC04DE20028B84B /* Mutex.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 3477C3251CC04DE20028B84B /* Mutex.cpp */; }; 3477C3281CC04E020028B84B /* Variant.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 3477C3271CC04E020028B84B /* Variant.cpp */; }; 3477C3311CC04E120028B84B /* 8Bit.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 3477C3291CC04E120028B84B /* 8Bit.cpp */; }; 3477C3321CC04E120028B84B /* 64Bit.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 3477C32A1CC04E120028B84B /* 64Bit.cpp */; }; 3477C3331CC04E120028B84B /* 16Bit.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 3477C32B1CC04E120028B84B /* 16Bit.cpp */; }; 3477C3341CC04E120028B84B /* 24Bit.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 3477C32C1CC04E120028B84B /* 24Bit.cpp */; }; 3477C3351CC04E120028B84B /* 32Bit.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 3477C32D1CC04E120028B84B /* 32Bit.cpp */; }; 3477C3361CC04E120028B84B /* 48Bit.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 3477C32E1CC04E120028B84B /* 48Bit.cpp */; }; 3477C3381CC04E120028B84B /* Alpha.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 3477C3301CC04E120028B84B /* Alpha.cpp */; }; 3477C33A1CC04ED90028B84B /* DragAndDrop.mm in Sources */ = {isa = PBXBuildFile; fileRef = 3477C3391CC04ED90028B84B /* DragAndDrop.mm */; }; 3477C33D1CC088590028B84B /* FileCommon.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 3477C33C1CC088590028B84B /* FileCommon.cpp */; }; 3477C33F1CC0A6780028B84B /* Token.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 3477C33E1CC0A6780028B84B /* Token.cpp */; }; 3477C3411CC0A68E0028B84B /* DateTime.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 3477C3401CC0A68E0028B84B /* DateTime.cpp */; }; 3477C3431CC0A6B90028B84B /* DocView.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 3477C3421CC0A6B90028B84B /* DocView.cpp */; }; 3477C3451CC0A9DE0028B84B /* Input.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 3477C3441CC0A9DE0028B84B /* Input.cpp */; }; 3477C3471CC0AA220028B84B /* WindowCommon.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 3477C3461CC0AA220028B84B /* WindowCommon.cpp */; }; 3477C3491CC0AA7E0028B84B /* ProgressDlg.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 3477C3481CC0AA7E0028B84B /* ProgressDlg.cpp */; }; 3477C34B1CC0AB0B0028B84B /* ToolTip.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 3477C34A1CC0AB0B0028B84B /* ToolTip.cpp */; }; 3477C34D1CC0ACED0028B84B /* md5.c in Sources */ = {isa = PBXBuildFile; fileRef = 3477C34C1CC0ACED0028B84B /* md5.c */; }; 3477C3501CC0C3D60028B84B /* Cocoa.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 3477C34F1CC0C3D60028B84B /* Cocoa.framework */; }; 3477C35B1CC1AEEA0028B84B /* LgiInc.h in Headers */ = {isa = PBXBuildFile; fileRef = 3477C35A1CC1AEEA0028B84B /* LgiInc.h */; }; 3477C35D1CC2253E0028B84B /* LgiInterfaces.h in Headers */ = {isa = PBXBuildFile; fileRef = 3477C35C1CC2253E0028B84B /* LgiInterfaces.h */; }; 3477C43A1CC234750028B84B /* MemStream.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 3477C4391CC234750028B84B /* MemStream.cpp */; }; 3477C46D1CC26DEB0028B84B /* Alert.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 3477C46C1CC26DEB0028B84B /* Alert.cpp */; }; 3477C4ED1CC27F1C0028B84B /* TrayIcon.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 3477C4EC1CC27F1C0028B84B /* TrayIcon.cpp */; }; 3477C5171CC303B70028B84B /* LgiUiBase.h in Headers */ = {isa = PBXBuildFile; fileRef = 3477C5161CC303B70028B84B /* LgiUiBase.h */; }; 347AFB9827A0DC5E00BE4ABE /* 15Bit.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 347AFB9727A0DC5E00BE4ABE /* 15Bit.cpp */; }; 348362421F233A77003B2A6D /* Stream.h in Headers */ = {isa = PBXBuildFile; fileRef = 348362411F233A77003B2A6D /* Stream.h */; }; 34837C4925C677ED00D103B4 /* AppPriv.h in Headers */ = {isa = PBXBuildFile; fileRef = 34837C4825C677ED00D103B4 /* AppPriv.h */; }; 348CD46A25C63E56001AA32B /* AppCommon.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 348CD46925C63E56001AA32B /* AppCommon.cpp */; }; 348E99CE2876850F0067E92A /* ObjCWrapper.h in Headers */ = {isa = PBXBuildFile; fileRef = 348E99CD2876850F0067E92A /* ObjCWrapper.h */; }; 3491A28523678DB800604C29 /* DropFiles.h in Headers */ = {isa = PBXBuildFile; fileRef = 3491A28423678DB700604C29 /* DropFiles.h */; }; 349F939E2B92CBAD002410A2 /* TextConvert.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 349F939D2B92CBAD002410A2 /* TextConvert.cpp */; }; 34A3ACE820568D5800B1D62A /* StringLayout.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 34A3ACE720568D5800B1D62A /* StringLayout.cpp */; }; 34A3ACEA20568D9700B1D62A /* MenuCommon.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 34A3ACE920568D9700B1D62A /* MenuCommon.cpp */; }; 34B14E3426951C6E004C22CC /* Slider.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 34B14E3326951C6E004C22CC /* Slider.cpp */; }; 34B531D822F65734002B50F7 /* Menu.h in Headers */ = {isa = PBXBuildFile; fileRef = 34B531D722F65734002B50F7 /* Menu.h */; }; 34B6B19123CFD0F100C24906 /* DragAndDropCommon.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 34B6B19023CFD0F100C24906 /* DragAndDropCommon.cpp */; }; + 34B6F5502BA3A81A0095B1C5 /* UnrolledList.h in Headers */ = {isa = PBXBuildFile; fileRef = 34B6F54F2BA3A81A0095B1C5 /* UnrolledList.h */; }; 34BF15072871503B001B4CA5 /* DrawListSurface.h in Headers */ = {isa = PBXBuildFile; fileRef = 34BF15062871503B001B4CA5 /* DrawListSurface.h */; }; 34C072C12369878100E1E222 /* DropFiles.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 34C072C02369878100E1E222 /* DropFiles.cpp */; }; 34C81A5A25DA0AA10053F93A /* Base64.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 34C81A5925DA0AA10053F93A /* Base64.cpp */; }; 34CD9F7223D5768B0039F259 /* Unicode.h in Headers */ = {isa = PBXBuildFile; fileRef = 34CD9F7123D5768B0039F259 /* Unicode.h */; }; 34D1B3C121748A2800BC6B58 /* Path.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 34D1B3C021748A2800BC6B58 /* Path.cpp */; }; 34D21CEC217981AE003D1EA6 /* EventTargetThread.h in Headers */ = {isa = PBXBuildFile; fileRef = 34D21CEB217981AE003D1EA6 /* EventTargetThread.h */; }; 34D28926275B3D9F005961A8 /* DateTime.h in Headers */ = {isa = PBXBuildFile; fileRef = 34D28925275B3D9F005961A8 /* DateTime.h */; }; 34D28929275B3DB0005961A8 /* Variant.h in Headers */ = {isa = PBXBuildFile; fileRef = 34D28928275B3DB0005961A8 /* Variant.h */; }; 34D6AA1722D3749A005D739E /* Gdc2.h in Headers */ = {isa = PBXBuildFile; fileRef = 34D6AA1622D3749A005D739E /* Gdc2.h */; }; 34EE8BB12748A55600F12915 /* TextFile.h in Headers */ = {isa = PBXBuildFile; fileRef = 34EE8BB02748A55600F12915 /* TextFile.h */; }; 34F3EC4329BD374E00BB9B58 /* Rect.h in Headers */ = {isa = PBXBuildFile; fileRef = 34F3EC4229BD374E00BB9B58 /* Rect.h */; }; 34F6151F27E55C5D00FE5B0C /* Thread.h in Headers */ = {isa = PBXBuildFile; fileRef = 34F6151D27E55C5D00FE5B0C /* Thread.h */; }; 34F6152027E55C5D00FE5B0C /* ThreadEvent.h in Headers */ = {isa = PBXBuildFile; fileRef = 34F6151E27E55C5D00FE5B0C /* ThreadEvent.h */; }; 34F6153E27E5628600FE5B0C /* Token.h in Headers */ = {isa = PBXBuildFile; fileRef = 34F6153D27E5628600FE5B0C /* Token.h */; }; /* End PBXBuildFile section */ /* Begin PBXFileReference section */ 340833122698F8FE0028012F /* FontPriv.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = FontPriv.h; path = ../../../private/common/FontPriv.h; sourceTree = SOURCE_ROOT; }; 340833132698F8FE0028012F /* FontType.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = FontType.cpp; path = ../../common/Gdc2/Font/FontType.cpp; sourceTree = SOURCE_ROOT; }; 340833142698F8FE0028012F /* TypeFace.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = TypeFace.cpp; path = ../../common/Gdc2/Font/TypeFace.cpp; sourceTree = SOURCE_ROOT; }; 3409C0C727580ED60050302A /* ListItemRadioBtn.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = ListItemRadioBtn.h; path = ../../../include/lgi/common/ListItemRadioBtn.h; sourceTree = SOURCE_ROOT; }; 3409C0C827580ED60050302A /* List.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = List.h; path = ../../../include/lgi/common/List.h; sourceTree = SOURCE_ROOT; }; 3409C0C927580ED60050302A /* ListItemCheckBox.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = ListItemCheckBox.h; path = ../../../include/lgi/common/ListItemCheckBox.h; sourceTree = SOURCE_ROOT; }; 3409C0CF275812CB0050302A /* Profile.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = Profile.h; path = ../../../include/lgi/common/Profile.h; sourceTree = ""; }; 34109853217A975E007020CE /* View.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = View.h; path = ../../../include/lgi/common/View.h; sourceTree = SOURCE_ROOT; }; 34109856217A9805007020CE /* LCocoaView.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = LCocoaView.h; path = ../../../include/lgi/mac/cocoa/LCocoaView.h; sourceTree = SOURCE_ROOT; }; 34114C8A23091E6E00F342B1 /* LgiClasses.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = LgiClasses.h; path = ../../../include/lgi/common/LgiClasses.h; sourceTree = ""; }; 3413170D23068FFE008CE982 /* FileSelect.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = FileSelect.cpp; path = ../../common/Lgi/FileSelect.cpp; sourceTree = SOURCE_ROOT; }; 3413170F230694D1008CE982 /* Gel.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = Gel.cpp; path = ../../common/Skins/Gel/Gel.cpp; sourceTree = SOURCE_ROOT; }; 3415168E26EC32E7007EE35F /* TextView4.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = TextView4.cpp; path = ../../common/Text/TextView4.cpp; sourceTree = SOURCE_ROOT; }; 3415169126EC32FF007EE35F /* TextView3.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = TextView3.h; path = ../../../include/lgi/common/TextView3.h; sourceTree = SOURCE_ROOT; }; 3415169226EC32FF007EE35F /* TextView4.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = TextView4.h; path = ../../../include/lgi/common/TextView4.h; sourceTree = SOURCE_ROOT; }; 3418EBCE25D9FEA600EA168A /* Progress.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = Progress.h; path = ../../../include/lgi/common/Progress.h; sourceTree = ""; }; 3418EBD025D9FEF500EA168A /* ProgressDlg.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = ProgressDlg.h; path = ../../../include/lgi/common/ProgressDlg.h; sourceTree = ""; }; 3427064627A0E20C0043F733 /* CocoaView.mm */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.objcpp; path = CocoaView.mm; sourceTree = SOURCE_ROOT; }; 343874B1230F46B200CF96B4 /* Window.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = Window.h; path = ../../../include/lgi/common/Window.h; sourceTree = SOURCE_ROOT; }; 343874B2230F46B200CF96B4 /* View.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = View.h; path = ../../../include/lgi/common/View.h; sourceTree = ""; }; 343874B3230F46B200CF96B4 /* App.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = App.h; path = ../../../include/lgi/common/App.h; sourceTree = SOURCE_ROOT; }; 343874B4230F46B200CF96B4 /* Layout.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = Layout.h; path = ../../../include/lgi/common/Layout.h; sourceTree = ""; }; 343BE8C62355D0CE00742E21 /* PopupList.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = PopupList.h; path = ../../../include/lgi/common/PopupList.h; sourceTree = ""; }; 3449B8CD26BBF6B10022A9B8 /* Notifications.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = Notifications.h; path = ../../../include/lgi/common/Notifications.h; sourceTree = ""; }; 344CFBC7237365B800AE6B35 /* ClipBoard.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = ClipBoard.h; path = ../../../include/lgi/common/ClipBoard.h; sourceTree = ""; }; 345920FC1F25649000098DFD /* Font.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = Font.h; path = ../../../include/lgi/common/Font.h; sourceTree = SOURCE_ROOT; }; 345920FD1F25649000098DFD /* FontCache.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = FontCache.h; path = ../../../include/lgi/common/FontCache.h; sourceTree = SOURCE_ROOT; }; 345920FE1F25649000098DFD /* FontSelect.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = FontSelect.h; path = ../../../include/lgi/common/FontSelect.h; sourceTree = SOURCE_ROOT; }; 345EB84D235C6C01007D05DB /* Popup.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = Popup.h; path = ../../../include/lgi/common/Popup.h; sourceTree = SOURCE_ROOT; }; 346DDEC0240C882900751380 /* RadioGroup.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = RadioGroup.h; path = ../../../include/lgi/common/RadioGroup.h; sourceTree = SOURCE_ROOT; }; 346FACE61D3C720B00FFEBCE /* Message.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = Message.h; path = ../../../include/lgi/common/Message.h; sourceTree = ""; }; 346FACE91D3C75AE00FFEBCE /* Uri.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = Uri.cpp; path = ../../common/Net/Uri.cpp; sourceTree = SOURCE_ROOT; }; 346FACEA1D3C75AE00FFEBCE /* MDStringToDigest.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = MDStringToDigest.cpp; path = ../../common/Net/MDStringToDigest.cpp; sourceTree = SOURCE_ROOT; }; 3471868723A9AF8900F8C952 /* SubProcess.cpp */ = {isa = PBXFileReference; explicitFileType = sourcecode.cpp.objcpp; fileEncoding = 4; name = SubProcess.cpp; path = ../../posix/SubProcess.cpp; sourceTree = SOURCE_ROOT; }; 3477C2681CBF020F0028B84B /* LgiCocoa.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = LgiCocoa.framework; sourceTree = BUILT_PRODUCTS_DIR; }; 3477C26D1CBF020F0028B84B /* Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = SOURCE_ROOT; }; 3477C2741CBF07DD0028B84B /* App.mm */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.objcpp; path = App.mm; sourceTree = SOURCE_ROOT; }; 3477C2761CBF08050028B84B /* ClipBoard.mm */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.objcpp; path = ClipBoard.mm; sourceTree = SOURCE_ROOT; }; 3477C27A1CBF086A0028B84B /* General.mm */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.objcpp; path = General.mm; sourceTree = SOURCE_ROOT; }; 3477C27B1CBF086A0028B84B /* Layout.mm */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.objcpp; path = Layout.mm; sourceTree = SOURCE_ROOT; }; 3477C27C1CBF086A0028B84B /* Menu.mm */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.objcpp; path = Menu.mm; sourceTree = SOURCE_ROOT; }; 3477C27D1CBF086A0028B84B /* Printer.mm */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.objcpp; path = Printer.mm; sourceTree = SOURCE_ROOT; }; 3477C27E1CBF086A0028B84B /* Thread.mm */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.objcpp; path = Thread.mm; sourceTree = SOURCE_ROOT; }; 3477C27F1CBF086A0028B84B /* View.mm */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.objcpp; path = View.mm; sourceTree = SOURCE_ROOT; }; 3477C2801CBF086A0028B84B /* Widgets.mm */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.objcpp; path = Widgets.mm; sourceTree = SOURCE_ROOT; }; 3477C2811CBF086A0028B84B /* Window.mm */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.objcpp; path = Window.mm; sourceTree = SOURCE_ROOT; }; 3477C28B1CBF08C10028B84B /* Gdc2.mm */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.objcpp; path = Gdc2.mm; sourceTree = SOURCE_ROOT; }; 3477C28C1CBF08C10028B84B /* MemDC.cpp */ = {isa = PBXFileReference; explicitFileType = sourcecode.cpp.objcpp; fileEncoding = 4; name = MemDC.cpp; path = ../common/MemDC.cpp; sourceTree = SOURCE_ROOT; }; 3477C28D1CBF08C10028B84B /* PrintDC.cpp */ = {isa = PBXFileReference; explicitFileType = sourcecode.cpp.objcpp; fileEncoding = 4; name = PrintDC.cpp; path = ../common/PrintDC.cpp; sourceTree = SOURCE_ROOT; }; 3477C28E1CBF08C10028B84B /* ScreenDC.cpp */ = {isa = PBXFileReference; explicitFileType = sourcecode.cpp.objcpp; fileEncoding = 4; name = ScreenDC.cpp; path = ../common/ScreenDC.cpp; sourceTree = SOURCE_ROOT; }; 3477C2941CBF09320028B84B /* File.mm */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.objcpp; path = File.mm; sourceTree = SOURCE_ROOT; }; 3477C2951CBF09320028B84B /* Mem.mm */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.objcpp; path = Mem.mm; sourceTree = SOURCE_ROOT; }; 3477C2961CBF09320028B84B /* ShowFileProp_Mac.mm */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.objcpp; path = ShowFileProp_Mac.mm; sourceTree = SOURCE_ROOT; }; 3477C29B1CBF0A920028B84B /* Mem.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = Mem.h; path = ../../../include/lgi/common/Mem.h; sourceTree = ""; }; 3477C29C1CBF0A920028B84B /* SymLookup.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = SymLookup.h; path = ../../../include/lgi/mac/cocoa/SymLookup.h; sourceTree = ""; }; 3477C29D1CBF0A920028B84B /* LgiMac.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = LgiMac.h; path = ../../../include/lgi/mac/cocoa/LgiMac.h; sourceTree = ""; }; 3477C29E1CBF0A920028B84B /* LgiOs.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = LgiOs.h; path = ../../../include/lgi/mac/cocoa/LgiOs.h; sourceTree = ""; }; 3477C29F1CBF0A920028B84B /* LgiOsClasses.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = LgiOsClasses.h; path = ../../../include/lgi/mac/cocoa/LgiOsClasses.h; sourceTree = ""; }; 3477C2A01CBF0A920028B84B /* LgiOsDefs.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = LgiOsDefs.h; path = ../../../include/lgi/mac/cocoa/LgiOsDefs.h; sourceTree = ""; }; 3477C2A71CBF0AAF0028B84B /* Lgi.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = Lgi.h; path = ../../../include/lgi/common/Lgi.h; sourceTree = ""; }; 3477C2A91CBF22A00028B84B /* File.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = File.h; path = ../../../include/lgi/common/File.h; sourceTree = SOURCE_ROOT; }; 3477C2AB1CBF72170028B84B /* ViewPriv.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = ViewPriv.h; path = ../../../private/common/ViewPriv.h; sourceTree = SOURCE_ROOT; }; 3477C2AE1CBF96B90028B84B /* LgiRes.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = LgiRes.cpp; path = ../../common/Resource/LgiRes.cpp; sourceTree = SOURCE_ROOT; }; 3477C2B01CBF96C40028B84B /* Res.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = Res.cpp; path = ../../common/Resource/Res.cpp; sourceTree = SOURCE_ROOT; }; 3477C2B31CBF96F20028B84B /* LMsg.cpp */ = {isa = PBXFileReference; explicitFileType = sourcecode.cpp.objcpp; fileEncoding = 4; name = LMsg.cpp; path = ../../common/Lgi/LMsg.cpp; sourceTree = SOURCE_ROOT; }; 3477C2B61CBF973F0028B84B /* GuiUtils.cpp */ = {isa = PBXFileReference; explicitFileType = sourcecode.cpp.objcpp; fileEncoding = 4; name = GuiUtils.cpp; path = ../../common/Lgi/GuiUtils.cpp; sourceTree = SOURCE_ROOT; }; 3477C2B81CBF977F0028B84B /* LgiCommon.cpp */ = {isa = PBXFileReference; explicitFileType = sourcecode.cpp.objcpp; fileEncoding = 4; name = LgiCommon.cpp; path = ../../common/Lgi/LgiCommon.cpp; sourceTree = SOURCE_ROOT; }; 3477C2BA1CBF97C80028B84B /* GdcCommon.cpp */ = {isa = PBXFileReference; explicitFileType = sourcecode.cpp.objcpp; fileEncoding = 4; name = GdcCommon.cpp; path = ../../common/Gdc2/GdcCommon.cpp; sourceTree = SOURCE_ROOT; }; 3477C2C01CBF9A040028B84B /* String.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = String.cpp; path = ../../common/Text/String.cpp; sourceTree = SOURCE_ROOT; }; 3477C2C41CC046310028B84B /* TextView3.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = TextView3.cpp; path = ../../common/Text/TextView3.cpp; sourceTree = SOURCE_ROOT; }; 3477C2C51CC046310028B84B /* Unicode.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = Unicode.cpp; path = ../../common/Text/Unicode.cpp; sourceTree = SOURCE_ROOT; }; 3477C2C61CC046310028B84B /* Utf8.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = Utf8.cpp; path = ../../common/Text/Utf8.cpp; sourceTree = SOURCE_ROOT; }; 3477C2C71CC046310028B84B /* XmlTree.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = XmlTree.cpp; path = ../../common/Text/XmlTree.cpp; sourceTree = SOURCE_ROOT; }; 3477C2CD1CC047BE0028B84B /* Charset.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = Charset.cpp; path = ../../common/Gdc2/Font/Charset.cpp; sourceTree = SOURCE_ROOT; }; 3477C2CF1CC047F50028B84B /* ToolBar.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = ToolBar.cpp; path = ../../common/Widgets/ToolBar.cpp; sourceTree = SOURCE_ROOT; }; 3477C2D21CC048100028B84B /* Containers.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = Containers.cpp; path = ../../common/General/Containers.cpp; sourceTree = SOURCE_ROOT; }; 3477C2D41CC0481B0028B84B /* Array.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = Array.h; path = ../../../include/lgi/common/Array.h; sourceTree = SOURCE_ROOT; }; 3477C2D61CC048390028B84B /* Popup.cpp */ = {isa = PBXFileReference; explicitFileType = sourcecode.cpp.objcpp.preprocessed; fileEncoding = 4; name = Popup.cpp; path = ../../common/Widgets/Popup.cpp; sourceTree = SOURCE_ROOT; }; 3477C2D81CC048F90028B84B /* DisplayString.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = DisplayString.cpp; path = ../../common/Gdc2/Font/DisplayString.cpp; sourceTree = SOURCE_ROOT; }; 3477C2D91CC048F90028B84B /* Font.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = Font.cpp; path = ../../common/Gdc2/Font/Font.cpp; sourceTree = SOURCE_ROOT; }; 3477C2DA1CC048F90028B84B /* FontSystem.cpp */ = {isa = PBXFileReference; explicitFileType = sourcecode.cpp.objcpp; fileEncoding = 4; name = FontSystem.cpp; path = ../../common/Gdc2/Font/FontSystem.cpp; sourceTree = SOURCE_ROOT; }; 3477C2DE1CC04A030028B84B /* ScrollBar.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = ScrollBar.cpp; path = ../../common/Widgets/ScrollBar.cpp; sourceTree = SOURCE_ROOT; }; 3477C2E01CC04A3C0028B84B /* FontSelect.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = FontSelect.cpp; path = ../../common/Lgi/FontSelect.cpp; sourceTree = SOURCE_ROOT; }; 3477C2E21CC04A5C0028B84B /* Stream.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = Stream.cpp; path = ../../common/Lgi/Stream.cpp; sourceTree = SOURCE_ROOT; }; 3477C2E41CC04A7F0028B84B /* ViewCommon.cpp */ = {isa = PBXFileReference; explicitFileType = sourcecode.cpp.objcpp; fileEncoding = 4; name = ViewCommon.cpp; path = ../../common/Lgi/ViewCommon.cpp; sourceTree = SOURCE_ROOT; }; 3477C2E61CC04B1E0028B84B /* Surface.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = Surface.cpp; path = ../../common/Gdc2/Surface.cpp; sourceTree = SOURCE_ROOT; }; 3477C2E81CC04B5D0028B84B /* Rand.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = Rand.cpp; path = ../../common/Lgi/Rand.cpp; sourceTree = SOURCE_ROOT; }; 3477C2EA1CC04B890028B84B /* Filter.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = Filter.cpp; path = ../../common/Gdc2/Filters/Filter.cpp; sourceTree = SOURCE_ROOT; }; 3477C2EC1CC04BBB0028B84B /* ItemContainer.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = ItemContainer.cpp; path = ../../common/Widgets/ItemContainer.cpp; sourceTree = SOURCE_ROOT; }; 3477C2ED1CC04BBB0028B84B /* List.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = List.cpp; path = ../../common/Widgets/List.cpp; sourceTree = SOURCE_ROOT; }; 3477C2EE1CC04BBB0028B84B /* Tree.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = Tree.cpp; path = ../../common/Widgets/Tree.cpp; sourceTree = SOURCE_ROOT; }; 3477C2F21CC04BF00028B84B /* Bitmap.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = Bitmap.cpp; path = ../../common/Widgets/Bitmap.cpp; sourceTree = SOURCE_ROOT; }; 3477C2F31CC04BF00028B84B /* Box.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = Box.cpp; path = ../../common/Widgets/Box.cpp; sourceTree = SOURCE_ROOT; }; 3477C2F41CC04BF00028B84B /* Button.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = Button.cpp; path = ../../common/Widgets/Button.cpp; sourceTree = SOURCE_ROOT; }; 3477C2F51CC04BF00028B84B /* CheckBox.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = CheckBox.cpp; path = ../../common/Widgets/CheckBox.cpp; sourceTree = SOURCE_ROOT; }; 3477C2F61CC04BF00028B84B /* Combo.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = Combo.cpp; path = ../../common/Widgets/Combo.cpp; sourceTree = SOURCE_ROOT; }; 3477C2F71CC04BF00028B84B /* Edit.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = Edit.cpp; path = ../../common/Widgets/Edit.cpp; sourceTree = SOURCE_ROOT; }; 3477C2F81CC04BF00028B84B /* Panel.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = Panel.cpp; path = ../../common/Widgets/Panel.cpp; sourceTree = SOURCE_ROOT; }; 3477C2F91CC04BF00028B84B /* Progress.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = Progress.cpp; path = ../../common/Widgets/Progress.cpp; sourceTree = SOURCE_ROOT; }; 3477C2FA1CC04BF00028B84B /* RadioGroup.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = RadioGroup.cpp; path = ../../common/Widgets/RadioGroup.cpp; sourceTree = SOURCE_ROOT; }; 3477C2FB1CC04BF00028B84B /* Splitter.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = Splitter.cpp; path = ../../common/Widgets/Splitter.cpp; sourceTree = SOURCE_ROOT; }; 3477C2FC1CC04BF00028B84B /* TableLayout.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = TableLayout.cpp; path = ../../common/Widgets/TableLayout.cpp; sourceTree = SOURCE_ROOT; }; 3477C2FD1CC04BF00028B84B /* TabView.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = TabView.cpp; path = ../../common/Widgets/TabView.cpp; sourceTree = SOURCE_ROOT; }; 3477C2FE1CC04BF00028B84B /* TextLabel.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = TextLabel.cpp; path = ../../common/Widgets/TextLabel.cpp; sourceTree = SOURCE_ROOT; }; 3477C30C1CC04C560028B84B /* FindReplace.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = FindReplace.cpp; path = ../../common/Lgi/FindReplace.cpp; sourceTree = SOURCE_ROOT; }; 3477C30E1CC04C790028B84B /* Css.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = Css.cpp; path = ../../common/Lgi/Css.cpp; sourceTree = SOURCE_ROOT; }; 3477C30F1CC04C790028B84B /* CssTools.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = CssTools.cpp; path = ../../common/Lgi/CssTools.cpp; sourceTree = SOURCE_ROOT; }; 3477C3121CC04CB10028B84B /* Rect.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = Rect.cpp; path = ../../common/Gdc2/Rect.cpp; sourceTree = SOURCE_ROOT; }; 3477C3151CC04CCB0028B84B /* Library.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = Library.cpp; path = ../../common/Lgi/Library.cpp; sourceTree = SOURCE_ROOT; }; 3477C3181CC04CF10028B84B /* ThreadCommon.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = ThreadCommon.cpp; path = ../../common/Lgi/ThreadCommon.cpp; sourceTree = SOURCE_ROOT; }; 3477C31B1CC04D3F0028B84B /* Net.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = Net.cpp; path = ../../common/Net/Net.cpp; sourceTree = SOURCE_ROOT; }; 3477C31F1CC04D630028B84B /* ThreadEvent.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = ThreadEvent.cpp; path = ../../common/Lgi/ThreadEvent.cpp; sourceTree = SOURCE_ROOT; }; 3477C3211CC04DA00028B84B /* Colour.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = Colour.cpp; path = ../../common/Gdc2/Colour.cpp; sourceTree = SOURCE_ROOT; }; 3477C3231CC04DD70028B84B /* Object.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = Object.cpp; path = ../../common/Lgi/Object.cpp; sourceTree = SOURCE_ROOT; }; 3477C3251CC04DE20028B84B /* Mutex.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = Mutex.cpp; path = ../../common/Lgi/Mutex.cpp; sourceTree = SOURCE_ROOT; }; 3477C3271CC04E020028B84B /* Variant.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = Variant.cpp; path = ../../common/Lgi/Variant.cpp; sourceTree = SOURCE_ROOT; }; 3477C3291CC04E120028B84B /* 8Bit.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = 8Bit.cpp; path = ../../common/Gdc2/8Bit.cpp; sourceTree = SOURCE_ROOT; }; 3477C32A1CC04E120028B84B /* 64Bit.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = 64Bit.cpp; path = ../../common/Gdc2/64Bit.cpp; sourceTree = SOURCE_ROOT; }; 3477C32B1CC04E120028B84B /* 16Bit.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = 16Bit.cpp; path = ../../common/Gdc2/16Bit.cpp; sourceTree = SOURCE_ROOT; }; 3477C32C1CC04E120028B84B /* 24Bit.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = 24Bit.cpp; path = ../../common/Gdc2/24Bit.cpp; sourceTree = SOURCE_ROOT; }; 3477C32D1CC04E120028B84B /* 32Bit.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = 32Bit.cpp; path = ../../common/Gdc2/32Bit.cpp; sourceTree = SOURCE_ROOT; }; 3477C32E1CC04E120028B84B /* 48Bit.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = 48Bit.cpp; path = ../../common/Gdc2/48Bit.cpp; sourceTree = SOURCE_ROOT; }; 3477C3301CC04E120028B84B /* Alpha.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = Alpha.cpp; path = ../../common/Gdc2/Alpha.cpp; sourceTree = SOURCE_ROOT; }; 3477C3391CC04ED90028B84B /* DragAndDrop.mm */ = {isa = PBXFileReference; explicitFileType = sourcecode.cpp.objcpp; fileEncoding = 4; path = DragAndDrop.mm; sourceTree = SOURCE_ROOT; }; 3477C33C1CC088590028B84B /* FileCommon.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = FileCommon.cpp; path = ../../common/General/FileCommon.cpp; sourceTree = SOURCE_ROOT; }; 3477C33E1CC0A6780028B84B /* Token.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = Token.cpp; path = ../../common/Text/Token.cpp; sourceTree = SOURCE_ROOT; }; 3477C3401CC0A68E0028B84B /* DateTime.cpp */ = {isa = PBXFileReference; explicitFileType = sourcecode.cpp.objcpp; fileEncoding = 4; name = DateTime.cpp; path = ../../common/General/DateTime.cpp; sourceTree = SOURCE_ROOT; }; 3477C3421CC0A6B90028B84B /* DocView.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = DocView.cpp; path = ../../common/Text/DocView.cpp; sourceTree = SOURCE_ROOT; }; 3477C3441CC0A9DE0028B84B /* Input.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = Input.cpp; path = ../../common/Lgi/Input.cpp; sourceTree = SOURCE_ROOT; }; 3477C3461CC0AA220028B84B /* WindowCommon.cpp */ = {isa = PBXFileReference; explicitFileType = sourcecode.cpp.objcpp; fileEncoding = 4; name = WindowCommon.cpp; path = ../../common/Lgi/WindowCommon.cpp; sourceTree = SOURCE_ROOT; }; 3477C3481CC0AA7E0028B84B /* ProgressDlg.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = ProgressDlg.cpp; path = ../../common/Widgets/ProgressDlg.cpp; sourceTree = SOURCE_ROOT; }; 3477C34A1CC0AB0B0028B84B /* ToolTip.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = ToolTip.cpp; path = ../../common/Lgi/ToolTip.cpp; sourceTree = SOURCE_ROOT; }; 3477C34C1CC0ACED0028B84B /* md5.c */ = {isa = PBXFileReference; explicitFileType = sourcecode.cpp.cpp; fileEncoding = 4; name = md5.c; path = ../../common/Hash/md5/md5.c; sourceTree = SOURCE_ROOT; }; 3477C34F1CC0C3D60028B84B /* Cocoa.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = Cocoa.framework; path = ../../../../../../../../System/Library/Frameworks/Cocoa.framework; sourceTree = ""; }; 3477C35A1CC1AEEA0028B84B /* LgiInc.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = LgiInc.h; path = ../../../include/lgi/common/LgiInc.h; sourceTree = ""; }; 3477C35C1CC2253E0028B84B /* LgiInterfaces.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = LgiInterfaces.h; path = ../../../include/lgi/common/LgiInterfaces.h; sourceTree = ""; }; 3477C4391CC234750028B84B /* MemStream.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = MemStream.cpp; path = ../../common/Lgi/MemStream.cpp; sourceTree = SOURCE_ROOT; }; 3477C46C1CC26DEB0028B84B /* Alert.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = Alert.cpp; path = ../../common/Lgi/Alert.cpp; sourceTree = SOURCE_ROOT; }; 3477C4EC1CC27F1C0028B84B /* TrayIcon.cpp */ = {isa = PBXFileReference; explicitFileType = sourcecode.cpp.objcpp; fileEncoding = 4; name = TrayIcon.cpp; path = ../../common/Lgi/TrayIcon.cpp; sourceTree = SOURCE_ROOT; }; 3477C5161CC303B70028B84B /* LgiUiBase.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = LgiUiBase.h; path = ../../../include/lgi/common/LgiUiBase.h; sourceTree = ""; }; 347AFB9727A0DC5E00BE4ABE /* 15Bit.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = 15Bit.cpp; path = ../../common/Gdc2/15Bit.cpp; sourceTree = SOURCE_ROOT; }; 348362411F233A77003B2A6D /* Stream.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = Stream.h; path = ../../../include/lgi/common/Stream.h; sourceTree = SOURCE_ROOT; }; 34837C4825C677ED00D103B4 /* AppPriv.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = AppPriv.h; path = ../../../private/mac/AppPriv.h; sourceTree = SOURCE_ROOT; }; 348CD46925C63E56001AA32B /* AppCommon.cpp */ = {isa = PBXFileReference; explicitFileType = sourcecode.cpp.objcpp; fileEncoding = 4; name = AppCommon.cpp; path = ../../common/Lgi/AppCommon.cpp; sourceTree = SOURCE_ROOT; }; 348E99CD2876850F0067E92A /* ObjCWrapper.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = ObjCWrapper.h; path = ../../../include/lgi/mac/cocoa/ObjCWrapper.h; sourceTree = ""; }; 3491A28423678DB700604C29 /* DropFiles.h */ = {isa = PBXFileReference; explicitFileType = sourcecode.cpp.objcpp; fileEncoding = 4; name = DropFiles.h; path = ../../../include/lgi/common/DropFiles.h; sourceTree = SOURCE_ROOT; }; 349F939D2B92CBAD002410A2 /* TextConvert.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = TextConvert.cpp; path = ../../../common/Text/TextConvert.cpp; sourceTree = ""; }; 34A3ACE720568D5800B1D62A /* StringLayout.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = StringLayout.cpp; path = ../../common/Gdc2/Font/StringLayout.cpp; sourceTree = SOURCE_ROOT; }; 34A3ACE920568D9700B1D62A /* MenuCommon.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = MenuCommon.cpp; path = ../../common/Lgi/MenuCommon.cpp; sourceTree = SOURCE_ROOT; }; 34B14E3326951C6E004C22CC /* Slider.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = Slider.cpp; path = ../../common/Widgets/Slider.cpp; sourceTree = SOURCE_ROOT; }; 34B531D722F65734002B50F7 /* Menu.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = Menu.h; path = ../../../include/lgi/common/Menu.h; sourceTree = ""; }; 34B6B19023CFD0F100C24906 /* DragAndDropCommon.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = DragAndDropCommon.cpp; path = ../../common/Lgi/DragAndDropCommon.cpp; sourceTree = SOURCE_ROOT; }; + 34B6F54F2BA3A81A0095B1C5 /* UnrolledList.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = UnrolledList.h; path = ../../../include/lgi/common/UnrolledList.h; sourceTree = ""; }; 34BF15062871503B001B4CA5 /* DrawListSurface.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = DrawListSurface.h; path = ../../../../../lgi/trunk/include/lgi/common/DrawListSurface.h; sourceTree = ""; }; 34C072C02369878100E1E222 /* DropFiles.cpp */ = {isa = PBXFileReference; explicitFileType = sourcecode.cpp.objcpp; fileEncoding = 4; name = DropFiles.cpp; path = ../../common/Lgi/DropFiles.cpp; sourceTree = SOURCE_ROOT; }; 34C81A5925DA0AA10053F93A /* Base64.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = Base64.cpp; path = ../../common/Net/Base64.cpp; sourceTree = SOURCE_ROOT; }; 34CD9F7123D5768B0039F259 /* Unicode.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = Unicode.h; path = ../../../include/lgi/common/Unicode.h; sourceTree = SOURCE_ROOT; }; 34D1B3C021748A2800BC6B58 /* Path.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = Path.cpp; path = ../../common/Gdc2/Path/Path.cpp; sourceTree = SOURCE_ROOT; }; 34D21CEB217981AE003D1EA6 /* EventTargetThread.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = EventTargetThread.h; path = ../../../include/lgi/common/EventTargetThread.h; sourceTree = SOURCE_ROOT; }; 34D28925275B3D9F005961A8 /* DateTime.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = DateTime.h; path = ../../../include/lgi/common/DateTime.h; sourceTree = SOURCE_ROOT; }; 34D28928275B3DB0005961A8 /* Variant.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = Variant.h; path = ../../../include/lgi/common/Variant.h; sourceTree = SOURCE_ROOT; }; 34D6AA1622D3749A005D739E /* Gdc2.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = Gdc2.h; path = ../../../include/lgi/common/Gdc2.h; sourceTree = SOURCE_ROOT; }; 34EE8BB02748A55600F12915 /* TextFile.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = TextFile.h; path = ../../../include/lgi/common/TextFile.h; sourceTree = ""; }; 34F3EC4229BD374E00BB9B58 /* Rect.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = Rect.h; path = ../../../include/lgi/common/Rect.h; sourceTree = SOURCE_ROOT; }; 34F6151D27E55C5D00FE5B0C /* Thread.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = Thread.h; path = ../../../../../lgi/trunk/include/lgi/common/Thread.h; sourceTree = ""; }; 34F6151E27E55C5D00FE5B0C /* ThreadEvent.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = ThreadEvent.h; path = ../../../../../lgi/trunk/include/lgi/common/ThreadEvent.h; sourceTree = ""; }; 34F6153D27E5628600FE5B0C /* Token.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = Token.h; path = ../../../../../lgi/trunk/include/lgi/common/Token.h; sourceTree = ""; }; /* End PBXFileReference section */ /* Begin PBXFrameworksBuildPhase section */ 3477C2641CBF020F0028B84B /* Frameworks */ = { isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( 3477C3501CC0C3D60028B84B /* Cocoa.framework in Frameworks */, ); runOnlyForDeploymentPostprocessing = 0; }; /* End PBXFrameworksBuildPhase section */ /* Begin PBXGroup section */ 3415168D26EC32C8007EE35F /* TextCtrls */ = { isa = PBXGroup; children = ( 3415169126EC32FF007EE35F /* TextView3.h */, 3415169226EC32FF007EE35F /* TextView4.h */, 3415168E26EC32E7007EE35F /* TextView4.cpp */, 3477C2C41CC046310028B84B /* TextView3.cpp */, ); name = TextCtrls; sourceTree = ""; }; 345BABCE2B78952D005795A0 /* Frameworks */ = { isa = PBXGroup; children = ( ); name = Frameworks; sourceTree = ""; }; 346FACE81D3C723700FFEBCE /* Resources */ = { isa = PBXGroup; children = ( 3477C26D1CBF020F0028B84B /* Info.plist */, ); name = Resources; sourceTree = ""; }; 3477C25E1CBF020F0028B84B = { isa = PBXGroup; children = ( 346FACE81D3C723700FFEBCE /* Resources */, 3477C26A1CBF020F0028B84B /* Classes */, 3477C29A1CBF0A700028B84B /* Headers */, 3477C34E1CC0C3A30028B84B /* Link */, 3477C2691CBF020F0028B84B /* Products */, 345BABCE2B78952D005795A0 /* Frameworks */, ); sourceTree = ""; }; 3477C2691CBF020F0028B84B /* Products */ = { isa = PBXGroup; children = ( 3477C2681CBF020F0028B84B /* LgiCocoa.framework */, ); name = Products; sourceTree = ""; }; 3477C26A1CBF020F0028B84B /* Classes */ = { isa = PBXGroup; children = ( 3477C2B21CBF96E60028B84B /* Dialogs */, 3477C33B1CC0881E0028B84B /* Files */, 3477C2931CBF09240028B84B /* General */, 3477C28A1CBF08760028B84B /* Graphics */, 3477C2731CBF07410028B84B /* Interface_Cocoa */, 3477C2B51CBF972B0028B84B /* Interface_XP */, 3477C3141CC04CC00028B84B /* Libraries */, 3477C2D11CC048000028B84B /* Memory */, 3477C31A1CC04D290028B84B /* Network */, 3477C4051CC22F920028B84B /* Process */, 3477C2AD1CBF96AA0028B84B /* Resources */, 3477C2BF1CBF99F00028B84B /* Text */, 3477C3171CC04CDE0028B84B /* Threads */, 3477C2CC1CC046370028B84B /* Widgets */, ); name = Classes; path = Lgi; sourceTree = SOURCE_ROOT; usesTabs = 1; }; 3477C2731CBF07410028B84B /* Interface_Cocoa */ = { isa = PBXGroup; children = ( 343874B3230F46B200CF96B4 /* App.h */, 3477C2741CBF07DD0028B84B /* App.mm */, 344CFBC7237365B800AE6B35 /* ClipBoard.h */, 3477C2761CBF08050028B84B /* ClipBoard.mm */, 3427064627A0E20C0043F733 /* CocoaView.mm */, 3477C3391CC04ED90028B84B /* DragAndDrop.mm */, 3477C27A1CBF086A0028B84B /* General.mm */, 343874B4230F46B200CF96B4 /* Layout.h */, 3477C27B1CBF086A0028B84B /* Layout.mm */, 34109856217A9805007020CE /* LCocoaView.h */, 3477C27C1CBF086A0028B84B /* Menu.mm */, 3477C27D1CBF086A0028B84B /* Printer.mm */, 343874B2230F46B200CF96B4 /* View.h */, 3477C27F1CBF086A0028B84B /* View.mm */, 3477C2AB1CBF72170028B84B /* ViewPriv.h */, 3477C2801CBF086A0028B84B /* Widgets.mm */, 343874B1230F46B200CF96B4 /* Window.h */, 3477C2811CBF086A0028B84B /* Window.mm */, 34109853217A975E007020CE /* View.h */, ); name = Interface_Cocoa; sourceTree = ""; }; 3477C28A1CBF08760028B84B /* Graphics */ = { isa = PBXGroup; children = ( 34F3EC4229BD374E00BB9B58 /* Rect.h */, 3413170F230694D1008CE982 /* Gel.cpp */, 34D6AA1622D3749A005D739E /* Gdc2.h */, 34D1B3C021748A2800BC6B58 /* Path.cpp */, 3477C3211CC04DA00028B84B /* Colour.cpp */, 3477C2BA1CBF97C80028B84B /* GdcCommon.cpp */, 3477C2EA1CC04B890028B84B /* Filter.cpp */, 3477C3121CC04CB10028B84B /* Rect.cpp */, 3477C28B1CBF08C10028B84B /* Gdc2.mm */, 3477C2BE1CBF97E20028B84B /* Applicators */, 3477C2BD1CBF97DA0028B84B /* Fonts */, 3477C2BC1CBF97D10028B84B /* Surfaces */, ); name = Graphics; sourceTree = ""; }; 3477C2931CBF09240028B84B /* General */ = { isa = PBXGroup; children = ( 34C81A5925DA0AA10053F93A /* Base64.cpp */, 3477C3401CC0A68E0028B84B /* DateTime.cpp */, 34D28925275B3D9F005961A8 /* DateTime.h */, 3477C3421CC0A6B90028B84B /* DocView.cpp */, 3477C2951CBF09320028B84B /* Mem.mm */, 3477C34C1CC0ACED0028B84B /* md5.c */, 3477C3231CC04DD70028B84B /* Object.cpp */, 3477C2E81CC04B5D0028B84B /* Rand.cpp */, 3477C2961CBF09320028B84B /* ShowFileProp_Mac.mm */, 3477C3271CC04E020028B84B /* Variant.cpp */, 34D28928275B3DB0005961A8 /* Variant.h */, ); name = General; sourceTree = ""; }; 3477C29A1CBF0A700028B84B /* Headers */ = { isa = PBXGroup; children = ( + 34B6F54F2BA3A81A0095B1C5 /* UnrolledList.h */, 348E99CD2876850F0067E92A /* ObjCWrapper.h */, 34BF15062871503B001B4CA5 /* DrawListSurface.h */, 3477C2A71CBF0AAF0028B84B /* Lgi.h */, 34114C8A23091E6E00F342B1 /* LgiClasses.h */, 3477C35A1CC1AEEA0028B84B /* LgiInc.h */, 3477C35C1CC2253E0028B84B /* LgiInterfaces.h */, 3477C29D1CBF0A920028B84B /* LgiMac.h */, 3477C29E1CBF0A920028B84B /* LgiOs.h */, 3477C29F1CBF0A920028B84B /* LgiOsClasses.h */, 3477C2A01CBF0A920028B84B /* LgiOsDefs.h */, 3477C5161CC303B70028B84B /* LgiUiBase.h */, 3477C29B1CBF0A920028B84B /* Mem.h */, 3449B8CD26BBF6B10022A9B8 /* Notifications.h */, 3409C0CF275812CB0050302A /* Profile.h */, 3477C29C1CBF0A920028B84B /* SymLookup.h */, 34EE8BB02748A55600F12915 /* TextFile.h */, 34F6151D27E55C5D00FE5B0C /* Thread.h */, 34F6151E27E55C5D00FE5B0C /* ThreadEvent.h */, 34F6153D27E5628600FE5B0C /* Token.h */, ); name = Headers; sourceTree = ""; }; 3477C2AD1CBF96AA0028B84B /* Resources */ = { isa = PBXGroup; children = ( 3477C2B01CBF96C40028B84B /* Res.cpp */, 3477C2AE1CBF96B90028B84B /* LgiRes.cpp */, ); name = Resources; path = ../../common/Gdc2/Rect.cpp; sourceTree = SOURCE_ROOT; }; 3477C2B21CBF96E60028B84B /* Dialogs */ = { isa = PBXGroup; children = ( 3413170D23068FFE008CE982 /* FileSelect.cpp */, 3477C46C1CC26DEB0028B84B /* Alert.cpp */, 3477C3481CC0AA7E0028B84B /* ProgressDlg.cpp */, 3477C3441CC0A9DE0028B84B /* Input.cpp */, 3477C30C1CC04C560028B84B /* FindReplace.cpp */, 3477C2E01CC04A3C0028B84B /* FontSelect.cpp */, 3477C2B31CBF96F20028B84B /* LMsg.cpp */, ); name = Dialogs; sourceTree = ""; }; 3477C2B51CBF972B0028B84B /* Interface_XP */ = { isa = PBXGroup; children = ( 34837C4825C677ED00D103B4 /* AppPriv.h */, 348CD46925C63E56001AA32B /* AppCommon.cpp */, 34B6B19023CFD0F100C24906 /* DragAndDropCommon.cpp */, 3491A28423678DB700604C29 /* DropFiles.h */, 34C072C02369878100E1E222 /* DropFiles.cpp */, 34B531D722F65734002B50F7 /* Menu.h */, 34A3ACE920568D9700B1D62A /* MenuCommon.cpp */, 346FACE61D3C720B00FFEBCE /* Message.h */, 3477C4EC1CC27F1C0028B84B /* TrayIcon.cpp */, 3477C34A1CC0AB0B0028B84B /* ToolTip.cpp */, 3477C3461CC0AA220028B84B /* WindowCommon.cpp */, 3477C2E41CC04A7F0028B84B /* ViewCommon.cpp */, 3477C2B81CBF977F0028B84B /* LgiCommon.cpp */, 3477C2B61CBF973F0028B84B /* GuiUtils.cpp */, ); name = Interface_XP; sourceTree = ""; }; 3477C2BC1CBF97D10028B84B /* Surfaces */ = { isa = PBXGroup; children = ( 3477C2E61CC04B1E0028B84B /* Surface.cpp */, 3477C28E1CBF08C10028B84B /* ScreenDC.cpp */, 3477C28C1CBF08C10028B84B /* MemDC.cpp */, 3477C28D1CBF08C10028B84B /* PrintDC.cpp */, ); name = Surfaces; sourceTree = ""; }; 3477C2BD1CBF97DA0028B84B /* Fonts */ = { isa = PBXGroup; children = ( 3477C2CD1CC047BE0028B84B /* Charset.cpp */, 3477C2D81CC048F90028B84B /* DisplayString.cpp */, 3477C2D91CC048F90028B84B /* Font.cpp */, 345920FC1F25649000098DFD /* Font.h */, 345920FD1F25649000098DFD /* FontCache.h */, 340833122698F8FE0028012F /* FontPriv.h */, 345920FE1F25649000098DFD /* FontSelect.h */, 3477C2DA1CC048F90028B84B /* FontSystem.cpp */, 340833132698F8FE0028012F /* FontType.cpp */, 34A3ACE720568D5800B1D62A /* StringLayout.cpp */, 340833142698F8FE0028012F /* TypeFace.cpp */, ); name = Fonts; sourceTree = ""; }; 3477C2BE1CBF97E20028B84B /* Applicators */ = { isa = PBXGroup; children = ( 3477C3291CC04E120028B84B /* 8Bit.cpp */, 347AFB9727A0DC5E00BE4ABE /* 15Bit.cpp */, 3477C32B1CC04E120028B84B /* 16Bit.cpp */, 3477C32C1CC04E120028B84B /* 24Bit.cpp */, 3477C32D1CC04E120028B84B /* 32Bit.cpp */, 3477C32E1CC04E120028B84B /* 48Bit.cpp */, 3477C32A1CC04E120028B84B /* 64Bit.cpp */, 3477C3301CC04E120028B84B /* Alpha.cpp */, ); name = Applicators; sourceTree = ""; }; 3477C2BF1CBF99F00028B84B /* Text */ = { isa = PBXGroup; children = ( 349F939D2B92CBAD002410A2 /* TextConvert.cpp */, 3477C30E1CC04C790028B84B /* Css.cpp */, 3477C30F1CC04C790028B84B /* CssTools.cpp */, 3477C2C01CBF9A040028B84B /* String.cpp */, 3477C33E1CC0A6780028B84B /* Token.cpp */, 3477C2C51CC046310028B84B /* Unicode.cpp */, 34CD9F7123D5768B0039F259 /* Unicode.h */, 3477C2C61CC046310028B84B /* Utf8.cpp */, 3477C2C71CC046310028B84B /* XmlTree.cpp */, ); name = Text; sourceTree = ""; }; 3477C2CC1CC046370028B84B /* Widgets */ = { isa = PBXGroup; children = ( 3477C2F21CC04BF00028B84B /* Bitmap.cpp */, 3477C2F31CC04BF00028B84B /* Box.cpp */, 3477C2F41CC04BF00028B84B /* Button.cpp */, 3477C2F51CC04BF00028B84B /* CheckBox.cpp */, 3477C2F61CC04BF00028B84B /* Combo.cpp */, 3477C2F71CC04BF00028B84B /* Edit.cpp */, 3477C2EC1CC04BBB0028B84B /* ItemContainer.cpp */, 3477C2ED1CC04BBB0028B84B /* List.cpp */, 3409C0C827580ED60050302A /* List.h */, 3409C0C927580ED60050302A /* ListItemCheckBox.h */, 3409C0C727580ED60050302A /* ListItemRadioBtn.h */, 3477C2F81CC04BF00028B84B /* Panel.cpp */, 3477C2D61CC048390028B84B /* Popup.cpp */, 345EB84D235C6C01007D05DB /* Popup.h */, 343BE8C62355D0CE00742E21 /* PopupList.h */, 3477C2F91CC04BF00028B84B /* Progress.cpp */, 3418EBCE25D9FEA600EA168A /* Progress.h */, 3418EBD025D9FEF500EA168A /* ProgressDlg.h */, 3477C2FA1CC04BF00028B84B /* RadioGroup.cpp */, 346DDEC0240C882900751380 /* RadioGroup.h */, 3477C2DE1CC04A030028B84B /* ScrollBar.cpp */, 34B14E3326951C6E004C22CC /* Slider.cpp */, 3477C2FB1CC04BF00028B84B /* Splitter.cpp */, 3477C2FC1CC04BF00028B84B /* TableLayout.cpp */, 3477C2FD1CC04BF00028B84B /* TabView.cpp */, 3415168D26EC32C8007EE35F /* TextCtrls */, 3477C2FE1CC04BF00028B84B /* TextLabel.cpp */, 3477C2CF1CC047F50028B84B /* ToolBar.cpp */, 3477C2EE1CC04BBB0028B84B /* Tree.cpp */, ); name = Widgets; sourceTree = ""; }; 3477C2D11CC048000028B84B /* Memory */ = { isa = PBXGroup; children = ( 3477C2D41CC0481B0028B84B /* Array.h */, 3477C2D21CC048100028B84B /* Containers.cpp */, 3477C4391CC234750028B84B /* MemStream.cpp */, 3477C2E21CC04A5C0028B84B /* Stream.cpp */, 348362411F233A77003B2A6D /* Stream.h */, ); name = Memory; sourceTree = ""; }; 3477C3141CC04CC00028B84B /* Libraries */ = { isa = PBXGroup; children = ( 3477C3151CC04CCB0028B84B /* Library.cpp */, ); name = Libraries; sourceTree = ""; }; 3477C3171CC04CDE0028B84B /* Threads */ = { isa = PBXGroup; children = ( 34D21CEB217981AE003D1EA6 /* EventTargetThread.h */, 3477C27E1CBF086A0028B84B /* Thread.mm */, 3477C3251CC04DE20028B84B /* Mutex.cpp */, 3477C31F1CC04D630028B84B /* ThreadEvent.cpp */, 3477C3181CC04CF10028B84B /* ThreadCommon.cpp */, ); name = Threads; sourceTree = ""; }; 3477C31A1CC04D290028B84B /* Network */ = { isa = PBXGroup; children = ( 346FACE91D3C75AE00FFEBCE /* Uri.cpp */, 346FACEA1D3C75AE00FFEBCE /* MDStringToDigest.cpp */, 3477C31B1CC04D3F0028B84B /* Net.cpp */, ); name = Network; sourceTree = ""; }; 3477C33B1CC0881E0028B84B /* Files */ = { isa = PBXGroup; children = ( 3477C33C1CC088590028B84B /* FileCommon.cpp */, 3477C2A91CBF22A00028B84B /* File.h */, 3477C2941CBF09320028B84B /* File.mm */, ); name = Files; sourceTree = ""; }; 3477C34E1CC0C3A30028B84B /* Link */ = { isa = PBXGroup; children = ( 3477C34F1CC0C3D60028B84B /* Cocoa.framework */, ); name = Link; sourceTree = ""; }; 3477C4051CC22F920028B84B /* Process */ = { isa = PBXGroup; children = ( 3471868723A9AF8900F8C952 /* SubProcess.cpp */, ); name = Process; sourceTree = ""; }; /* End PBXGroup section */ /* Begin PBXHeadersBuildPhase section */ 3477C2651CBF020F0028B84B /* Headers */ = { isa = PBXHeadersBuildPhase; buildActionMask = 2147483647; files = ( 344CFBC8237365B800AE6B35 /* ClipBoard.h in Headers */, 3449B8CE26BBF6B10022A9B8 /* Notifications.h in Headers */, 343874B8230F46B200CF96B4 /* Layout.h in Headers */, 3477C2AC1CBF72170028B84B /* ViewPriv.h in Headers */, 3409C0CA27580ED60050302A /* ListItemRadioBtn.h in Headers */, 3477C35D1CC2253E0028B84B /* LgiInterfaces.h in Headers */, 34F6153E27E5628600FE5B0C /* Token.h in Headers */, 3477C2A51CBF0A920028B84B /* LgiOsClasses.h in Headers */, 3491A28523678DB800604C29 /* DropFiles.h in Headers */, 3415169326EC32FF007EE35F /* TextView3.h in Headers */, 34B531D822F65734002B50F7 /* Menu.h in Headers */, 34114C8B23091E6E00F342B1 /* LgiClasses.h in Headers */, 34D28926275B3D9F005961A8 /* DateTime.h in Headers */, 3477C35B1CC1AEEA0028B84B /* LgiInc.h in Headers */, 34F6152027E55C5D00FE5B0C /* ThreadEvent.h in Headers */, 348362421F233A77003B2A6D /* Stream.h in Headers */, 3477C2A61CBF0A920028B84B /* LgiOsDefs.h in Headers */, 3409C0CC27580ED60050302A /* ListItemCheckBox.h in Headers */, 345EB84E235C6C01007D05DB /* Popup.h in Headers */, 34BF15072871503B001B4CA5 /* DrawListSurface.h in Headers */, 34F6151F27E55C5D00FE5B0C /* Thread.h in Headers */, 34D21CEC217981AE003D1EA6 /* EventTargetThread.h in Headers */, 343BE8C72355D0CE00742E21 /* PopupList.h in Headers */, 34EE8BB12748A55600F12915 /* TextFile.h in Headers */, 34CD9F7223D5768B0039F259 /* Unicode.h in Headers */, 34837C4925C677ED00D103B4 /* AppPriv.h in Headers */, 34F3EC4329BD374E00BB9B58 /* Rect.h in Headers */, 3409C0D0275812CB0050302A /* Profile.h in Headers */, 3477C2A11CBF0A920028B84B /* Mem.h in Headers */, 3477C2D51CC0481B0028B84B /* Array.h in Headers */, 3477C5171CC303B70028B84B /* LgiUiBase.h in Headers */, 3477C2AA1CBF22A00028B84B /* File.h in Headers */, 343874B5230F46B200CF96B4 /* Window.h in Headers */, 34D28929275B3DB0005961A8 /* Variant.h in Headers */, 348E99CE2876850F0067E92A /* ObjCWrapper.h in Headers */, 3477C2A21CBF0A920028B84B /* SymLookup.h in Headers */, 34D6AA1722D3749A005D739E /* Gdc2.h in Headers */, 3477C2A41CBF0A920028B84B /* LgiOs.h in Headers */, 340833152698F8FF0028012F /* FontPriv.h in Headers */, 343874B7230F46B200CF96B4 /* App.h in Headers */, 3418EBCF25D9FEA600EA168A /* Progress.h in Headers */, 346DDEC1240C882900751380 /* RadioGroup.h in Headers */, 345921011F25649000098DFD /* FontSelect.h in Headers */, 346FACE71D3C720B00FFEBCE /* Message.h in Headers */, 3477C2A31CBF0A920028B84B /* LgiMac.h in Headers */, 3418EBD125D9FEF500EA168A /* ProgressDlg.h in Headers */, 343874B6230F46B200CF96B4 /* View.h in Headers */, + 34B6F5502BA3A81A0095B1C5 /* UnrolledList.h in Headers */, 345920FF1F25649000098DFD /* Font.h in Headers */, 3415169426EC32FF007EE35F /* TextView4.h in Headers */, 3477C2A81CBF0AAF0028B84B /* Lgi.h in Headers */, 345921001F25649000098DFD /* FontCache.h in Headers */, 3409C0CB27580ED60050302A /* List.h in Headers */, ); runOnlyForDeploymentPostprocessing = 0; }; /* End PBXHeadersBuildPhase section */ /* Begin PBXNativeTarget section */ 3477C2671CBF020F0028B84B /* LgiCocoa */ = { isa = PBXNativeTarget; buildConfigurationList = 3477C2701CBF020F0028B84B /* Build configuration list for PBXNativeTarget "LgiCocoa" */; buildPhases = ( 3477C2631CBF020F0028B84B /* Sources */, 3477C2641CBF020F0028B84B /* Frameworks */, 3477C2651CBF020F0028B84B /* Headers */, 3477C2661CBF020F0028B84B /* Resources */, ); buildRules = ( ); dependencies = ( ); name = LgiCocoa; productName = Lgi; productReference = 3477C2681CBF020F0028B84B /* LgiCocoa.framework */; productType = "com.apple.product-type.framework"; }; /* End PBXNativeTarget section */ /* Begin PBXProject section */ 3477C25F1CBF020F0028B84B /* Project object */ = { isa = PBXProject; attributes = { LastUpgradeCheck = 1420; ORGANIZATIONNAME = Memecode; TargetAttributes = { 3477C2671CBF020F0028B84B = { CreatedOnToolsVersion = 7.3; }; }; }; buildConfigurationList = 3477C2621CBF020F0028B84B /* Build configuration list for PBXProject "LgiCocoa" */; compatibilityVersion = "Xcode 12.0"; developmentRegion = en; hasScannedForEncodings = 0; knownRegions = ( en, Base, ); mainGroup = 3477C25E1CBF020F0028B84B; productRefGroup = 3477C2691CBF020F0028B84B /* Products */; projectDirPath = ""; projectRoot = ""; targets = ( 3477C2671CBF020F0028B84B /* LgiCocoa */, ); }; /* End PBXProject section */ /* Begin PBXResourcesBuildPhase section */ 3477C2661CBF020F0028B84B /* Resources */ = { isa = PBXResourcesBuildPhase; buildActionMask = 2147483647; files = ( ); runOnlyForDeploymentPostprocessing = 0; }; /* End PBXResourcesBuildPhase section */ /* Begin PBXSourcesBuildPhase section */ 3477C2631CBF020F0028B84B /* Sources */ = { isa = PBXSourcesBuildPhase; buildActionMask = 2147483647; files = ( 349F939E2B92CBAD002410A2 /* TextConvert.cpp in Sources */, 3477C2CE1CC047BE0028B84B /* Charset.cpp in Sources */, 3477C3111CC04C790028B84B /* CssTools.cpp in Sources */, 34A3ACE820568D5800B1D62A /* StringLayout.cpp in Sources */, 3477C2DB1CC048F90028B84B /* DisplayString.cpp in Sources */, 34B14E3426951C6E004C22CC /* Slider.cpp in Sources */, 3477C33A1CC04ED90028B84B /* DragAndDrop.mm in Sources */, 3477C2DC1CC048F90028B84B /* Font.cpp in Sources */, 3477C2831CBF086A0028B84B /* Layout.mm in Sources */, 3477C34D1CC0ACED0028B84B /* md5.c in Sources */, 3477C2C81CC046310028B84B /* TextView3.cpp in Sources */, 3477C2861CBF086A0028B84B /* Thread.mm in Sources */, 3477C2821CBF086A0028B84B /* General.mm in Sources */, 3477C3131CC04CB10028B84B /* Rect.cpp in Sources */, 3477C3451CC0A9DE0028B84B /* Input.cpp in Sources */, 34B6B19123CFD0F100C24906 /* DragAndDropCommon.cpp in Sources */, 3477C31D1CC04D3F0028B84B /* Net.cpp in Sources */, 3477C28F1CBF08C10028B84B /* Gdc2.mm in Sources */, 3477C30A1CC04BF00028B84B /* TabView.cpp in Sources */, 3427064727A0E20C0043F733 /* CocoaView.mm in Sources */, 3477C33F1CC0A6780028B84B /* Token.cpp in Sources */, 3477C2D01CC047F50028B84B /* ToolBar.cpp in Sources */, 3477C3011CC04BF00028B84B /* Button.cpp in Sources */, 3477C3061CC04BF00028B84B /* Progress.cpp in Sources */, 3477C3001CC04BF00028B84B /* Box.cpp in Sources */, 3477C2871CBF086A0028B84B /* View.mm in Sources */, 3477C3021CC04BF00028B84B /* CheckBox.cpp in Sources */, 3477C2BB1CBF97C80028B84B /* GdcCommon.cpp in Sources */, 3477C2E51CC04A7F0028B84B /* ViewCommon.cpp in Sources */, 347AFB9827A0DC5E00BE4ABE /* 15Bit.cpp in Sources */, 34131710230694D1008CE982 /* Gel.cpp in Sources */, 3477C2D71CC048390028B84B /* Popup.cpp in Sources */, 3477C3091CC04BF00028B84B /* TableLayout.cpp in Sources */, 3477C2E11CC04A3C0028B84B /* FontSelect.cpp in Sources */, 3477C2DF1CC04A030028B84B /* ScrollBar.cpp in Sources */, 3477C2F11CC04BBB0028B84B /* Tree.cpp in Sources */, 3413170E23068FFE008CE982 /* FileSelect.cpp in Sources */, 3477C3281CC04E020028B84B /* Variant.cpp in Sources */, 3477C2AF1CBF96B90028B84B /* LgiRes.cpp in Sources */, 3471868823A9AF8900F8C952 /* SubProcess.cpp in Sources */, 3477C3161CC04CCB0028B84B /* Library.cpp in Sources */, 3477C3051CC04BF00028B84B /* Panel.cpp in Sources */, 3477C2901CBF08C10028B84B /* MemDC.cpp in Sources */, 34C072C12369878100E1E222 /* DropFiles.cpp in Sources */, 3477C30D1CC04C560028B84B /* FindReplace.cpp in Sources */, 3477C34B1CC0AB0B0028B84B /* ToolTip.cpp in Sources */, 3415168F26EC32E7007EE35F /* TextView4.cpp in Sources */, 3477C3201CC04D630028B84B /* ThreadEvent.cpp in Sources */, 3477C3031CC04BF00028B84B /* Combo.cpp in Sources */, 3477C30B1CC04BF00028B84B /* TextLabel.cpp in Sources */, 3477C2B71CBF973F0028B84B /* GuiUtils.cpp in Sources */, 3477C2911CBF08C10028B84B /* PrintDC.cpp in Sources */, 3477C2B91CBF977F0028B84B /* LgiCommon.cpp in Sources */, 34D1B3C121748A2800BC6B58 /* Path.cpp in Sources */, 3477C2CA1CC046310028B84B /* Utf8.cpp in Sources */, 3477C2971CBF09320028B84B /* File.mm in Sources */, 3477C43A1CC234750028B84B /* MemStream.cpp in Sources */, 3477C3191CC04CF10028B84B /* ThreadCommon.cpp in Sources */, 3477C2781CBF08050028B84B /* ClipBoard.mm in Sources */, 346FACEC1D3C75AE00FFEBCE /* MDStringToDigest.cpp in Sources */, 3477C3491CC0AA7E0028B84B /* ProgressDlg.cpp in Sources */, 346FACEB1D3C75AE00FFEBCE /* Uri.cpp in Sources */, 3477C2B11CBF96C40028B84B /* Res.cpp in Sources */, 340833162698F8FF0028012F /* FontType.cpp in Sources */, 3477C4ED1CC27F1C0028B84B /* TrayIcon.cpp in Sources */, 3477C2991CBF09320028B84B /* ShowFileProp_Mac.mm in Sources */, 3477C2921CBF08C10028B84B /* ScreenDC.cpp in Sources */, 3477C2981CBF09320028B84B /* Mem.mm in Sources */, 3477C2CB1CC046310028B84B /* XmlTree.cpp in Sources */, 3477C2EF1CC04BBB0028B84B /* ItemContainer.cpp in Sources */, 3477C3081CC04BF00028B84B /* Splitter.cpp in Sources */, 34109857217A9805007020CE /* LCocoaView.h in Sources */, 3477C46D1CC26DEB0028B84B /* Alert.cpp in Sources */, 3477C3381CC04E120028B84B /* Alpha.cpp in Sources */, 3477C2EB1CC04B890028B84B /* Filter.cpp in Sources */, 3477C3321CC04E120028B84B /* 64Bit.cpp in Sources */, 3477C3041CC04BF00028B84B /* Edit.cpp in Sources */, 3477C3361CC04E120028B84B /* 48Bit.cpp in Sources */, 3477C3261CC04DE20028B84B /* Mutex.cpp in Sources */, 3477C2851CBF086A0028B84B /* Printer.mm in Sources */, 3477C33D1CC088590028B84B /* FileCommon.cpp in Sources */, 3477C3471CC0AA220028B84B /* WindowCommon.cpp in Sources */, 3477C3071CC04BF00028B84B /* RadioGroup.cpp in Sources */, 3477C2FF1CC04BF00028B84B /* Bitmap.cpp in Sources */, 3477C2E91CC04B5D0028B84B /* Rand.cpp in Sources */, 3477C2E71CC04B1E0028B84B /* Surface.cpp in Sources */, 3477C3241CC04DD70028B84B /* Object.cpp in Sources */, 3477C2E31CC04A5C0028B84B /* Stream.cpp in Sources */, 34A3ACEA20568D9700B1D62A /* MenuCommon.cpp in Sources */, 3477C3341CC04E120028B84B /* 24Bit.cpp in Sources */, 3477C3351CC04E120028B84B /* 32Bit.cpp in Sources */, 3477C2881CBF086A0028B84B /* Widgets.mm in Sources */, 340833172698F8FF0028012F /* TypeFace.cpp in Sources */, 3477C2891CBF086A0028B84B /* Window.mm in Sources */, 3477C3431CC0A6B90028B84B /* DocView.cpp in Sources */, 3477C2841CBF086A0028B84B /* Menu.mm in Sources */, 3477C2B41CBF96F20028B84B /* LMsg.cpp in Sources */, 3477C3311CC04E120028B84B /* 8Bit.cpp in Sources */, 3477C2DD1CC048F90028B84B /* FontSystem.cpp in Sources */, 3477C3101CC04C790028B84B /* Css.cpp in Sources */, 3477C2C91CC046310028B84B /* Unicode.cpp in Sources */, 3477C3221CC04DA00028B84B /* Colour.cpp in Sources */, 3477C2D31CC048100028B84B /* Containers.cpp in Sources */, 3477C2F01CC04BBB0028B84B /* List.cpp in Sources */, 3477C3331CC04E120028B84B /* 16Bit.cpp in Sources */, 3477C2751CBF07DD0028B84B /* App.mm in Sources */, 348CD46A25C63E56001AA32B /* AppCommon.cpp in Sources */, 3477C3411CC0A68E0028B84B /* DateTime.cpp in Sources */, 34C81A5A25DA0AA10053F93A /* Base64.cpp in Sources */, 3477C2C11CBF9A040028B84B /* String.cpp in Sources */, ); runOnlyForDeploymentPostprocessing = 0; }; /* End PBXSourcesBuildPhase section */ /* Begin XCBuildConfiguration section */ 3477C26E1CBF020F0028B84B /* Debug */ = { isa = XCBuildConfiguration; buildSettings = { ALWAYS_SEARCH_USER_PATHS = NO; CLANG_ANALYZER_NONNULL = YES; CLANG_CXX_LANGUAGE_STANDARD = "c++14"; CLANG_CXX_LIBRARY = "libc++"; CLANG_ENABLE_MODULES = YES; CLANG_ENABLE_OBJC_ARC = NO; CLANG_WARN_BLOCK_CAPTURE_AUTORELEASING = YES; CLANG_WARN_BOOL_CONVERSION = YES; CLANG_WARN_COMMA = YES; CLANG_WARN_CONSTANT_CONVERSION = YES; CLANG_WARN_DEPRECATED_OBJC_IMPLEMENTATIONS = YES; CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR; CLANG_WARN_EMPTY_BODY = YES; CLANG_WARN_ENUM_CONVERSION = YES; CLANG_WARN_INFINITE_RECURSION = YES; CLANG_WARN_INT_CONVERSION = YES; CLANG_WARN_NON_LITERAL_NULL_CONVERSION = YES; CLANG_WARN_OBJC_IMPLICIT_RETAIN_SELF = YES; CLANG_WARN_OBJC_LITERAL_CONVERSION = YES; CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR; CLANG_WARN_QUOTED_INCLUDE_IN_FRAMEWORK_HEADER = YES; CLANG_WARN_RANGE_LOOP_ANALYSIS = YES; CLANG_WARN_STRICT_PROTOTYPES = YES; CLANG_WARN_SUSPICIOUS_MOVE = YES; CLANG_WARN_UNREACHABLE_CODE = YES; CLANG_WARN__DUPLICATE_METHOD_MATCH = YES; CODE_SIGN_IDENTITY = "-"; CODE_SIGN_INJECT_BASE_ENTITLEMENTS = NO; CODE_SIGN_STYLE = Manual; COPY_PHASE_STRIP = NO; CURRENT_PROJECT_VERSION = 1; DEAD_CODE_STRIPPING = YES; DEBUG_INFORMATION_FORMAT = dwarf; ENABLE_STRICT_OBJC_MSGSEND = YES; ENABLE_TESTABILITY = YES; GCC_C_LANGUAGE_STANDARD = gnu99; GCC_DYNAMIC_NO_PIC = NO; GCC_NO_COMMON_BLOCKS = YES; GCC_OPTIMIZATION_LEVEL = 0; GCC_PREPROCESSOR_DEFINITIONS = ( "DEBUG=1", "$(inherited)", ); GCC_WARN_64_TO_32_BIT_CONVERSION = YES; GCC_WARN_ABOUT_RETURN_TYPE = YES_ERROR; GCC_WARN_UNDECLARED_SELECTOR = YES; GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE; GCC_WARN_UNUSED_FUNCTION = YES; GCC_WARN_UNUSED_VARIABLE = YES; MACOSX_DEPLOYMENT_TARGET = 10.15; MODULEMAP_FILE = module.modulemap; MTL_ENABLE_DEBUG_INFO = YES; ONLY_ACTIVE_ARCH = YES; SDKROOT = macosx; VERSIONING_SYSTEM = "apple-generic"; VERSION_INFO_PREFIX = ""; }; name = Debug; }; 3477C26F1CBF020F0028B84B /* Release */ = { isa = XCBuildConfiguration; buildSettings = { ALWAYS_SEARCH_USER_PATHS = NO; CLANG_ANALYZER_NONNULL = YES; CLANG_CXX_LANGUAGE_STANDARD = "c++14"; CLANG_CXX_LIBRARY = "libc++"; CLANG_ENABLE_MODULES = YES; CLANG_ENABLE_OBJC_ARC = NO; CLANG_WARN_BLOCK_CAPTURE_AUTORELEASING = YES; CLANG_WARN_BOOL_CONVERSION = YES; CLANG_WARN_COMMA = YES; CLANG_WARN_CONSTANT_CONVERSION = YES; CLANG_WARN_DEPRECATED_OBJC_IMPLEMENTATIONS = YES; CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR; CLANG_WARN_EMPTY_BODY = YES; CLANG_WARN_ENUM_CONVERSION = YES; CLANG_WARN_INFINITE_RECURSION = YES; CLANG_WARN_INT_CONVERSION = YES; CLANG_WARN_NON_LITERAL_NULL_CONVERSION = YES; CLANG_WARN_OBJC_IMPLICIT_RETAIN_SELF = YES; CLANG_WARN_OBJC_LITERAL_CONVERSION = YES; CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR; CLANG_WARN_QUOTED_INCLUDE_IN_FRAMEWORK_HEADER = YES; CLANG_WARN_RANGE_LOOP_ANALYSIS = YES; CLANG_WARN_STRICT_PROTOTYPES = YES; CLANG_WARN_SUSPICIOUS_MOVE = YES; CLANG_WARN_UNREACHABLE_CODE = YES; CLANG_WARN__DUPLICATE_METHOD_MATCH = YES; CODE_SIGN_IDENTITY = "-"; CODE_SIGN_INJECT_BASE_ENTITLEMENTS = NO; CODE_SIGN_STYLE = Manual; COPY_PHASE_STRIP = NO; CURRENT_PROJECT_VERSION = 1; DEAD_CODE_STRIPPING = YES; DEBUG_INFORMATION_FORMAT = "dwarf-with-dsym"; ENABLE_NS_ASSERTIONS = NO; ENABLE_STRICT_OBJC_MSGSEND = YES; GCC_C_LANGUAGE_STANDARD = gnu99; GCC_NO_COMMON_BLOCKS = YES; GCC_WARN_64_TO_32_BIT_CONVERSION = YES; GCC_WARN_ABOUT_RETURN_TYPE = YES_ERROR; GCC_WARN_UNDECLARED_SELECTOR = YES; GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE; GCC_WARN_UNUSED_FUNCTION = YES; GCC_WARN_UNUSED_VARIABLE = YES; MACOSX_DEPLOYMENT_TARGET = 10.15; MODULEMAP_FILE = module.modulemap; MTL_ENABLE_DEBUG_INFO = NO; SDKROOT = macosx; VERSIONING_SYSTEM = "apple-generic"; VERSION_INFO_PREFIX = ""; }; name = Release; }; 3477C2711CBF020F0028B84B /* Debug */ = { isa = XCBuildConfiguration; buildSettings = { CLANG_ANALYZER_NONNULL = YES_NONAGGRESSIVE; CLANG_ENABLE_OBJC_WEAK = YES; CODE_SIGN_IDENTITY = "-"; COMBINE_HIDPI_IMAGES = YES; DEAD_CODE_STRIPPING = YES; DEFINES_MODULE = YES; DEVELOPMENT_TEAM = 2AV9WN2LD8; DYLIB_COMPATIBILITY_VERSION = 1; DYLIB_CURRENT_VERSION = 1; DYLIB_INSTALL_NAME_BASE = "@rpath"; FRAMEWORK_VERSION = A; GCC_C_LANGUAGE_STANDARD = c11; HEADER_SEARCH_PATHS = ( ../../../include, ../../../include/lgi/mac/cocoa, ../../../private/mac, ../../../private/common, ); INFOPLIST_FILE = Info.plist; INSTALL_PATH = "$(LOCAL_LIBRARY_DIR)/Frameworks"; LD_RUNPATH_SEARCH_PATHS = ( "$(inherited)", "@executable_path/../Frameworks", "@loader_path/Frameworks", ); OTHER_CFLAGS = ( "-DMAC", "-DLGI_COCOA=1", "-DLGI_LIBRARY", "-D_DEBUG", "-DLGI_UNIT_TESTS", ); OTHER_CODE_SIGN_FLAGS = "--timestamp --deep"; OTHER_CPLUSPLUSFLAGS = ( "-DMAC", "-DLGI_COCOA=1", "-DLGI_LIBRARY", "-D_DEBUG", "-DLGI_UNIT_TESTS", ); PRODUCT_BUNDLE_IDENTIFIER = com.memecode.Lgi; PRODUCT_NAME = LgiCocoa; SDKROOT = macosx; SKIP_INSTALL = YES; STRIP_INSTALLED_PRODUCT = NO; WARNING_CFLAGS = "-Wno-nullability-completeness"; }; name = Debug; }; 3477C2721CBF020F0028B84B /* Release */ = { isa = XCBuildConfiguration; buildSettings = { CLANG_ANALYZER_NONNULL = YES_NONAGGRESSIVE; CLANG_ENABLE_OBJC_WEAK = YES; CODE_SIGN_IDENTITY = "-"; COMBINE_HIDPI_IMAGES = YES; DEAD_CODE_STRIPPING = YES; DEFINES_MODULE = YES; DEVELOPMENT_TEAM = 2AV9WN2LD8; DYLIB_COMPATIBILITY_VERSION = 1; DYLIB_CURRENT_VERSION = 1; DYLIB_INSTALL_NAME_BASE = "@rpath"; FRAMEWORK_VERSION = A; GCC_C_LANGUAGE_STANDARD = c11; HEADER_SEARCH_PATHS = ( ../../../include, ../../../include/lgi/mac/cocoa, ../../../private/mac, ../../../private/common, ); INFOPLIST_FILE = Info.plist; INSTALL_PATH = "$(LOCAL_LIBRARY_DIR)/Frameworks"; LD_RUNPATH_SEARCH_PATHS = ( "$(inherited)", "@executable_path/../Frameworks", "@loader_path/Frameworks", ); OTHER_CFLAGS = ( "-DMAC", "-DLGI_COCOA=1", "-DLGI_LIBRARY", ); OTHER_CODE_SIGN_FLAGS = "--timestamp --deep"; OTHER_CPLUSPLUSFLAGS = ( "-DMAC", "-DLGI_COCOA=1", "-DLGI_LIBRARY", ); PRODUCT_BUNDLE_IDENTIFIER = com.memecode.Lgi; PRODUCT_NAME = LgiCocoa; SDKROOT = macosx; SKIP_INSTALL = YES; STRIP_INSTALLED_PRODUCT = NO; WARNING_CFLAGS = "-Wno-nullability-completeness"; }; name = Release; }; /* End XCBuildConfiguration section */ /* Begin XCConfigurationList section */ 3477C2621CBF020F0028B84B /* Build configuration list for PBXProject "LgiCocoa" */ = { isa = XCConfigurationList; buildConfigurations = ( 3477C26E1CBF020F0028B84B /* Debug */, 3477C26F1CBF020F0028B84B /* Release */, ); defaultConfigurationIsVisible = 0; defaultConfigurationName = Release; }; 3477C2701CBF020F0028B84B /* Build configuration list for PBXNativeTarget "LgiCocoa" */ = { isa = XCConfigurationList; buildConfigurations = ( 3477C2711CBF020F0028B84B /* Debug */, 3477C2721CBF020F0028B84B /* Release */, ); defaultConfigurationIsVisible = 0; defaultConfigurationName = Release; }; /* End XCConfigurationList section */ }; rootObject = 3477C25F1CBF020F0028B84B /* Project object */; }