summaryrefslogtreecommitdiff
path: root/win
diff options
context:
space:
mode:
authorleo2005-12-20 20:22:46 +0000
committerleo2005-12-20 20:22:46 +0000
commit98f3bd8740246fe88c3db3278fe533dc2f368d12 (patch)
tree076cfa089cd19faabc144deca4d0fb303d97cb07 /win
parent85c3a7f5afcc88696d50866525588756e6bf80c3 (diff)
Updated the Pieces Library Manager to use the new categories.
git-svn-id: http://svn.leocad.org/trunk@443 c7d43263-9d01-0410-8a33-9dba5d9f93d6
Diffstat (limited to 'win')
-rw-r--r--win/LeoCAD.dsp9
-rw-r--r--win/LeoCAD.rc44
-rw-r--r--win/Libdlg.cpp605
-rw-r--r--win/Libdlg.h40
-rw-r--r--win/Piecebar.cpp2
-rw-r--r--win/System.cpp49
-rw-r--r--win/res/library.bmpbin1198 -> 838 bytes
-rw-r--r--win/resource.h6
8 files changed, 194 insertions, 561 deletions
diff --git a/win/LeoCAD.dsp b/win/LeoCAD.dsp
index 7f54c21..c760b42 100644
--- a/win/LeoCAD.dsp
+++ b/win/LeoCAD.dsp
@@ -1056,10 +1056,6 @@ SOURCE=..\common\keyboard.h
# End Source File
# Begin Source File
-SOURCE=..\common\libman.h
-# End Source File
-# Begin Source File
-
SOURCE=..\common\library.h
# End Source File
# Begin Source File
@@ -1230,11 +1226,6 @@ SOURCE=..\common\keyboard.cpp
# End Source File
# Begin Source File
-SOURCE=..\common\libman.cpp
-# SUBTRACT CPP /YX /Yc /Yu
-# End Source File
-# Begin Source File
-
SOURCE=..\common\library.cpp
# SUBTRACT CPP /YX /Yc /Yu
# End Source File
diff --git a/win/LeoCAD.rc b/win/LeoCAD.rc
index 7a1c0a2..eebc1b1 100644
--- a/win/LeoCAD.rc
+++ b/win/LeoCAD.rc
@@ -187,16 +187,13 @@ END
IDR_LIBRARY TOOLBAR DISCARDABLE 16, 15
BEGIN
- BUTTON ID_LIBDLG_FILE_RESET
BUTTON ID_LIBDLG_FILE_OPEN
BUTTON ID_LIBDLG_FILE_SAVE
BUTTON ID_LIBDLG_FILE_PRINTCATALOG
SEPARATOR
- BUTTON ID_LIBDLG_GROUP_INSERT
- BUTTON ID_LIBDLG_GROUP_DELETE
- BUTTON ID_LIBDLG_GROUP_MOVEUP
- BUTTON ID_LIBDLG_GROUP_MOVEDOWN
- BUTTON ID_LIBDLG_GROUP_RENAME
+ BUTTON ID_LIBDLG_CATEGORY_NEW
+ BUTTON ID_LIBDLG_CATEGORY_REMOVE
+ BUTTON ID_LIBDLG_CATEGORY_EDIT
END
IDR_TERRAIN TOOLBAR DISCARDABLE 16, 15
@@ -514,35 +511,30 @@ IDR_LIBRARY MENU DISCARDABLE
BEGIN
POPUP "&File"
BEGIN
- MENUITEM "&Reset", ID_LIBDLG_FILE_RESET
MENUITEM "&Open...", ID_LIBDLG_FILE_OPEN
MENUITEM "&Save", ID_LIBDLG_FILE_SAVE
MENUITEM "Save &As...", ID_LIBDLG_FILE_SAVEAS
MENUITEM SEPARATOR
- MENUITEM "Load &Bitmap", ID_LIBDLG_FILE_LOADBITMAP
- , GRAYED
MENUITEM "&Print Catalog...", ID_LIBDLG_FILE_PRINTCATALOG
MENUITEM "Load &Update...", ID_LIBDLG_FILE_MERGEUPDATE
MENUITEM "&Import Piece...", ID_FILE_IMPORTPIECE
MENUITEM "Te&xtures...", ID_LIBDLG_FILE_TEXTURES
MENUITEM SEPARATOR
- MENUITEM "Re&turn", IDOK
- MENUITEM "&Cancel", IDCANCEL
+ MENUITEM "Close", IDOK
END
- POPUP "&Group"
+ POPUP "&Category"
BEGIN
- MENUITEM "Insert...", ID_LIBDLG_GROUP_INSERT
- MENUITEM "Delete", ID_LIBDLG_GROUP_DELETE
- MENUITEM "Rename...", ID_LIBDLG_GROUP_RENAME
+ MENUITEM "Rese&t Categories...", ID_LIBDLG_CATEGORY_RESET
MENUITEM SEPARATOR
- MENUITEM "Move Up", ID_LIBDLG_GROUP_MOVEUP
- MENUITEM "Move Down", ID_LIBDLG_GROUP_MOVEDOWN
+ MENUITEM "&New...", ID_LIBDLG_CATEGORY_NEW
+ MENUITEM "&Remove...", ID_LIBDLG_CATEGORY_REMOVE
+ MENUITEM "&Edit...", ID_LIBDLG_CATEGORY_EDIT
END
POPUP "&Piece"
BEGIN
MENUITEM "&New", ID_LIBDLG_PIECE_NEW, GRAYED
MENUITEM "&Edit", ID_LIBDLG_PIECE_EDIT, GRAYED
- MENUITEM "&Delete", ID_LIBDLG_PIECE_DELETE
+ MENUITEM "&Delete...", ID_LIBDLG_PIECE_DELETE
END
END
@@ -2069,22 +2061,6 @@ END
STRINGTABLE DISCARDABLE
BEGIN
- ID_LIBDLG_GROUP_MOVEUP "Move Group Up"
- ID_LIBDLG_GROUP_MOVEDOWN "Move Group Down"
- ID_LIBDLG_FILE_RESET "Reset"
- ID_LIBDLG_FILE_OPEN "Open Configuration"
- ID_LIBDLG_FILE_SAVE "Save Configuration"
-END
-
-STRINGTABLE DISCARDABLE
-BEGIN
- ID_LIBDLG_GROUP_INSERT "New Group"
- ID_LIBDLG_GROUP_DELETE "Delete Group"
- ID_LIBDLG_GROUP_RENAME "Rename Group"
-END
-
-STRINGTABLE DISCARDABLE
-BEGIN
ID_PIECE_COPYKEYS "Copy position and rotation"
END
diff --git a/win/Libdlg.cpp b/win/Libdlg.cpp
index bca7222..fc45916 100644
--- a/win/Libdlg.cpp
+++ b/win/Libdlg.cpp
@@ -13,6 +13,7 @@
#include "pieceinf.h"
#include "globals.h"
#include "system.h"
+#include "library.h"
#ifdef _DEBUG
#define new DEBUG_NEW
@@ -20,9 +21,6 @@
static char THIS_FILE[] = __FILE__;
#endif
-static const char ver_str[32] = "LeoCAD Group Configuration File";
-static const float ver_flt = 0.3f;
-
/////////////////////////////////////////////////////////////////////////////
// CLibraryDlg dialog
@@ -30,9 +28,6 @@ static const float ver_flt = 0.3f;
CLibraryDlg::CLibraryDlg(CWnd* pParent /*=NULL*/)
: CDialog(CLibraryDlg::IDD, pParent)
{
- m_pDragImage = NULL;
- m_bDragging = FALSE;
-
//{{AFX_DATA_INIT(CLibraryDlg)
// NOTE: the ClassWizard will add member initialization here
//}}AFX_DATA_INIT
@@ -40,7 +35,6 @@ CLibraryDlg::CLibraryDlg(CWnd* pParent /*=NULL*/)
CLibraryDlg::~CLibraryDlg()
{
- delete m_pDragImage;
}
void CLibraryDlg::DoDataExchange(CDataExchange* pDX)
@@ -56,9 +50,6 @@ void CLibraryDlg::DoDataExchange(CDataExchange* pDX)
BEGIN_MESSAGE_MAP(CLibraryDlg, CDialog)
//{{AFX_MSG_MAP(CLibraryDlg)
ON_NOTIFY(TVN_SELCHANGED, IDC_LIBDLG_TREE, OnSelChangedTree)
- ON_NOTIFY(LVN_BEGINDRAG, IDC_LIBDLG_LIST, OnBeginDragList)
- ON_WM_MOUSEMOVE()
- ON_WM_LBUTTONUP()
//}}AFX_MSG_MAP
ON_NOTIFY_EX_RANGE(TTN_NEEDTEXTW, 0, 0xFFFF, OnToolTipText)
ON_NOTIFY_EX_RANGE(TTN_NEEDTEXTA, 0, 0xFFFF, OnToolTipText)
@@ -72,45 +63,44 @@ BOOL CLibraryDlg::OnInitDialog()
CDialog::OnInitDialog();
// Add the ToolBar.
- if (!m_wndToolBar.Create(this) ||
- !m_wndToolBar.LoadToolBar(IDR_LIBRARY))
+ if (!m_wndToolBar.Create(this) || !m_wndToolBar.LoadToolBar(IDR_LIBRARY))
{
TRACE0("Failed to create toolbar\n");
return -1; // fail to create
}
-
+
m_wndToolBar.SetBarStyle(m_wndToolBar.GetBarStyle() | CBRS_TOOLTIPS | CBRS_FLYBY);
-
+
// We need to resize the dialog to make room for control bars.
// First, figure out how big the control bars are.
CRect rcClientStart;
CRect rcClientNow;
GetClientRect(rcClientStart);
RepositionBars(AFX_IDW_CONTROLBAR_FIRST, AFX_IDW_CONTROLBAR_LAST, 0, reposQuery, rcClientNow);
-
+
// Now move all the controls so they are in the same relative
// position within the remaining client area as they would be
// with no control bars.
CPoint ptOffset(rcClientNow.left - rcClientStart.left, rcClientNow.top - rcClientStart.top);
-
- CRect rcChild;
+
+ CRect rcChild;
CWnd* pwndChild = GetWindow(GW_CHILD);
while (pwndChild)
- {
+ {
pwndChild->GetWindowRect(rcChild);
ScreenToClient(rcChild);
rcChild.OffsetRect(ptOffset);
pwndChild->MoveWindow(rcChild, FALSE);
pwndChild = pwndChild->GetNextWindow();
}
-
+
// Adjust the dialog window dimensions
CRect rcWindow;
GetWindowRect(rcWindow);
rcWindow.right += rcClientStart.Width() - rcClientNow.Width();
rcWindow.bottom += rcClientStart.Height() - rcClientNow.Height();
MoveWindow(rcWindow, FALSE);
-
+
// And position the control bars
RepositionBars(AFX_IDW_CONTROLBAR_FIRST, AFX_IDW_CONTROLBAR_LAST, 0);
@@ -127,118 +117,21 @@ BOOL CLibraryDlg::OnCommand(WPARAM wParam, LPARAM lParam)
{
switch (LOWORD(wParam))
{
- case ID_LIBDLG_FILE_RESET:
- {
- m_Manager.HandleCommand (LC_LIBDLG_FILE_RESET, 0);
-
- m_ImageList.DeleteImageList();
- m_ImageList.Create(IDB_PIECEBAR, 16, 0, 0x00ff00ff);
-
- for (int i = 0; i < 32; i++)
- m_nBitmaps[i] = min(i,9);
-
- UpdateList();
- UpdateTree();
-
- return TRUE;
- }
-
case ID_LIBDLG_FILE_OPEN:
{
-/*
- CFileDialog dlg(TRUE, ".lgf\0", NULL,OFN_HIDEREADONLY | OFN_OVERWRITEPROMPT,
- "LeoCAD Group Files (*.lgf)|*.lgf|All Files (*.*)|*.*||",this);
-
- if (dlg.DoModal() == IDOK)
- {
- m_ImageList.DeleteImageList();
- m_strFile = dlg.GetPathName();
- CWaitCursor wait;
- CFile f(m_strFile, CFile::modeRead|CFile::shareDenyWrite);
- if (f.GetLength() != 0)
- {
- CArchive ar(&f, CArchive::load | CArchive::bNoFlushOnDelete);
- for (int i = 0; i < m_Parts.GetSize(); i++)
- m_Parts[i].group = m_Parts[i].defgroup;
-
- char tmp[32];
- float ver;
- CString str;
- int n;
- ar.Read (tmp, sizeof(tmp));
- ar >> ver;
- if (ver == 0.1f)
- ar >> i;
- else
- {
- memset(m_strGroups, 0, sizeof(m_strGroups));
- ar >> m_nMaxGroups;
- for (i = 0; i < m_nMaxGroups; i++)
- {
- ar.Read (m_strGroups[i], sizeof(m_strGroups[i]));
-
- if (ver > 0.2f)
- ar >> m_nBitmaps[i];
- }
- }
-
- if (ver > 0.2f)
- m_ImageList.Read(&ar);
-
- ar >> n;
- for (i = 0; i < n; i++)
- {
- char name[9], description[65];
- unsigned long group;
-
- ar.Read (name, sizeof(name));
- if (ver == 0.1f)
- {
- BYTE b;
- ar.Read (description, sizeof(description));
- ar >> b;
- group = 1 << b;
- }
- else
- ar >> group;
-
- for (int j = 0; j < m_Parts.GetSize(); j++)
- if (strcmp (m_Parts[j].info->m_strName, name) == 0)
- {
- m_Parts[j].group = group;
- break;
- }
- }
- ar.Close();
- }
- f.Close();
-
- if (m_ImageList.GetImageCount() == 0)
- m_ImageList.Create(IDB_PIECEBAR, 16, 0, 0x00ff00ff);
-
- m_bModified = FALSE;
- UpdateList();
- UpdateTree();
- }
-*/
+ project->GetPiecesLibrary()->LoadCategories(NULL);
return TRUE;
}
case ID_LIBDLG_FILE_SAVE:
{
- m_Manager.DoSave(false);
+ project->GetPiecesLibrary()->DoSaveCategories(false);
return TRUE;
}
case ID_LIBDLG_FILE_SAVEAS:
{
- m_Manager.DoSave(true);
- return TRUE;
- }
-
- case ID_LIBDLG_FILE_LOADBITMAP:
- {
-
+ project->GetPiecesLibrary()->DoSaveCategories(true);
return TRUE;
}
@@ -254,190 +147,167 @@ BOOL CLibraryDlg::OnCommand(WPARAM wParam, LPARAM lParam)
case ID_LIBDLG_FILE_MERGEUPDATE:
{
- m_Manager.HandleCommand (LC_LIBDLG_FILE_MERGEUPDATE, 0);
- UpdateList();
+ LC_FILEOPENDLG_OPTS opts;
- return TRUE;
- }
+ strcpy(opts.path, "");
+ opts.type = LC_FILEOPENDLG_LUP;
- case ID_FILE_IMPORTPIECE:
- {
- m_Manager.HandleCommand (LC_LIBDLG_FILE_IMPORTPIECE, 0);
- UpdateList();
+ if (SystemDoDialog(LC_DLG_FILE_OPEN, &opts))
+ {
+ project->GetPiecesLibrary()->LoadUpdate((char*)opts.filenames);
+
+ free(opts.filenames);
+
+ UpdateList();
+ }
return TRUE;
}
- case ID_LIBDLG_FILE_TEXTURES:
+ case ID_FILE_IMPORTPIECE:
{
- CTexturesDlg dlg;
- dlg.DoModal();
- } break;
+ LC_FILEOPENDLG_OPTS opts;
- case ID_LIBDLG_GROUP_INSERT:
- {
- HTREEITEM hti = m_Tree.GetSelectedItem();
+ strcpy(opts.path, Sys_ProfileLoadString ("Default", "LDraw Pieces Path", ""));
+ opts.type = LC_FILEOPENDLG_DAT;
- if (hti)
+ if (SystemDoDialog (LC_DLG_FILE_OPEN, &opts))
{
- DWORD dw = m_Tree.GetItemData(hti);
- if (dw == 0)
- dw = 1;
- dw--;
-
- m_Manager.HandleCommand (LC_LIBDLG_GROUP_INSERT, dw);
+ for (int i = 0; i < opts.numfiles; i++)
+ {
+ project->GetPiecesLibrary ()->ImportLDrawPiece (opts.filenames[i]);
+ free (opts.filenames[i]);
+ }
- for (int i = m_Manager.GetGroupCount(); i > (int)dw; i--)
- m_nBitmaps[i] = m_nBitmaps[i-1];
- m_nBitmaps[i] = 9;
+ free (opts.filenames);
+ Sys_ProfileSaveString ("Default", "LDraw Pieces Path", opts.path);
- UpdateTree();
+ UpdateList();
}
return TRUE;
}
-
- case ID_LIBDLG_GROUP_DELETE:
+
+ case ID_LIBDLG_FILE_TEXTURES:
{
- HTREEITEM hti = m_Tree.GetSelectedItem();
+ CTexturesDlg dlg;
+ dlg.DoModal();
+ } break;
- if (hti)
+ case ID_LIBDLG_CATEGORY_RESET:
+ {
+ if (SystemDoMessageBox("Are you sure you want to reset the categories?", LC_MB_YESNO | LC_MB_ICONQUESTION) == LC_YES)
{
- DWORD dw = m_Tree.GetItemData(hti);
- if (dw == 0)
- return TRUE;
- dw--;
-
- CWaitCursor wc;
-
- for (int i = dw; i < m_Manager.GetGroupCount(); i++)
- m_nBitmaps[i] = m_nBitmaps[i+1];
-
- m_Manager.HandleCommand (LC_LIBDLG_GROUP_DELETE, dw);
+ project->GetPiecesLibrary()->ResetCategories();
- UpdateTree();
UpdateList();
+ UpdateTree();
}
return TRUE;
}
- case ID_LIBDLG_GROUP_RENAME:
+ case ID_LIBDLG_CATEGORY_NEW:
{
- HTREEITEM hti = m_Tree.GetSelectedItem();
+ LC_CATEGORYDLG_OPTS Opts;
+ Opts.Name = "New Category";
+ Opts.Keywords = "";
- if (hti)
+ if (SystemDoDialog(LC_DLG_EDITCATEGORY, &Opts))
{
- DWORD dw = m_Tree.GetItemData(hti);
- if (dw == 0)
- return TRUE;
- dw--;
-
- m_Manager.HandleCommand (LC_LIBDLG_GROUP_EDIT, dw);
- UpdateTree();
+ PiecesLibrary* Lib = project->GetPiecesLibrary();
+ Lib->AddCategory(Opts.Name, Opts.Keywords);
}
+ UpdateTree();
+
return TRUE;
}
- case ID_LIBDLG_GROUP_MOVEUP:
+ case ID_LIBDLG_CATEGORY_REMOVE:
{
- HTREEITEM hti = m_Tree.GetSelectedItem();
+ HTREEITEM Item = m_Tree.GetSelectedItem();
- if (hti)
- {
- DWORD dw = m_Tree.GetItemData(hti);
- int j;
-
- if (dw == 0)
- return TRUE;
- dw--;
+ if (Item == NULL)
+ break;
- CWaitCursor wc;
+ PiecesLibrary* Lib = project->GetPiecesLibrary();
+ CString CategoryName = m_Tree.GetItemText(Item);
+ int Index = Lib->FindCategoryIndex((const char*)CategoryName);
- m_Manager.HandleCommand (LC_LIBDLG_GROUP_MOVEUP, dw);
+ if (Index == -1)
+ break;
- j = m_nBitmaps[dw];
- m_nBitmaps[dw] = m_nBitmaps[dw-1];
- m_nBitmaps[dw-1] = j;
+ char Msg[1024];
+ String Name = Lib->GetCategoryName(Index);
+ sprintf(Msg, "Are you sure you want to remove the %s category?", Name);
- UpdateTree();
- UpdateList();
+ if (SystemDoMessageBox(Msg, LC_MB_YESNO | LC_MB_ICONQUESTION) == LC_YES)
+ {
+ Lib->RemoveCategory(Index);
}
+
+ UpdateTree();
+
return TRUE;
}
- case ID_LIBDLG_GROUP_MOVEDOWN:
+ case ID_LIBDLG_CATEGORY_EDIT:
{
- HTREEITEM hti = m_Tree.GetSelectedItem();
-
- if (hti)
- {
- DWORD dw = m_Tree.GetItemData(hti);
- int j;
+ HTREEITEM Item = m_Tree.GetSelectedItem();
- if (dw == 0)
- return TRUE;
- dw--;
+ if (Item == NULL)
+ break;
- CWaitCursor wc;
+ PiecesLibrary* Lib = project->GetPiecesLibrary();
+ CString CategoryName = m_Tree.GetItemText(Item);
+ int Index = Lib->FindCategoryIndex((const char*)CategoryName);
- m_Manager.HandleCommand (LC_LIBDLG_GROUP_MOVEDOWN, dw);
+ if (Index == -1)
+ break;
- j = m_nBitmaps[dw];
- m_nBitmaps[dw] = m_nBitmaps[dw+1];
- m_nBitmaps[dw+1] = j;
+ LC_CATEGORYDLG_OPTS Opts;
+ Opts.Name = Lib->GetCategoryName(Index);
+ Opts.Keywords = Lib->GetCategoryKeywords(Index);
- UpdateTree();
- UpdateList();
+ if (SystemDoDialog(LC_DLG_EDITCATEGORY, &Opts))
+ {
+ String OldName = Lib->GetCategoryName(Index);
+ Lib->SetCategory(Index, Opts.Name, Opts.Keywords);
}
+
+ UpdateTree();
+
return TRUE;
}
case ID_LIBDLG_PIECE_NEW:
{
-// CPieceEditorDlg dlg;
-// dlg.DoModal();
-
return TRUE;
}
case ID_LIBDLG_PIECE_EDIT:
{
-
return TRUE;
}
case ID_LIBDLG_PIECE_DELETE:
{
- int i, sel = 0;
+ PtrArray<PieceInfo> Pieces;
- for (i = 0; i < m_List.GetItemCount(); i++)
+ for (int i = 0; i < m_List.GetItemCount(); i++)
+ {
if (m_List.GetItemState(i, LVIS_SELECTED))
- sel++;
+ Pieces.Add((PieceInfo*)m_List.GetItemData(i));
+ }
- // Nothing to be done
- if (sel == 0)
+ if (Pieces.GetSize() == 0)
return TRUE;
- char** names = (char**)malloc(sel*sizeof(char**));
-
- for (sel = 0, i = 0; i < m_List.GetItemCount(); i++)
- {
- PieceInfo* info;
- lcuint32 group;
-
- if (m_List.GetItemState(i, LVIS_SELECTED))
- {
- m_Manager.GetPieceInfo (m_List.GetItemData(i), &info, &group);
-
- names[sel] = info->m_strName;
- sel++;
- }
- }
+ if (SystemDoMessageBox ("Are you sure you want to permanently delete the selected pieces?", LC_MB_YESNO|LC_MB_ICONQUESTION) != LC_YES)
+ return TRUE;
- m_Manager.DeletePieces (names, sel);
- free(names);
+ project->GetPiecesLibrary()->DeletePieces(Pieces);
UpdateList();
@@ -450,109 +320,51 @@ BOOL CLibraryDlg::OnCommand(WPARAM wParam, LPARAM lParam)
void CLibraryDlg::UpdateList()
{
- HTREEITEM hti = m_Tree.GetSelectedItem();
m_List.DeleteAllItems();
-
m_List.SetRedraw(FALSE);
- if (hti)
- {
- DWORD dw = m_Tree.GetItemData (hti);
- for (int i = 0; i < m_Manager.GetPieceCount(); i++)
- {
- PieceInfo* info;
- lcuint32 group;
+ PiecesLibrary *Lib = project->GetPiecesLibrary();
+
+ HTREEITEM CategoryItem = m_Tree.GetSelectedItem();
+ CString CategoryName = m_Tree.GetItemText(CategoryItem);
+ int CategoryIndex = Lib->FindCategoryIndex((const char*)CategoryName);
+
+ if (CategoryIndex != -1)
+ {
+ PtrArray<PieceInfo> SinglePieces, GroupedPieces;
- m_Manager.GetPieceInfo (i, &info, &group);
+ Lib->GetCategoryEntries(CategoryIndex, false, SinglePieces, GroupedPieces);
- if ((dw != 0) && (((1 << (dw-1)) & group) == 0))
- continue;
+ for (int i = 0; i < SinglePieces.GetSize(); i++)
+ {
+ PieceInfo* Info = SinglePieces[i];
LVITEM lvi;
lvi.mask = LVIF_TEXT | LVIF_PARAM;
lvi.iItem = 0;
lvi.iSubItem = 0;
- lvi.lParam = i;
- lvi.pszText = info->m_strDescription;
+ lvi.lParam = (LPARAM)Info;
+ lvi.pszText = Info->m_strDescription;
m_List.InsertItem(&lvi);
}
}
+
m_List.SetRedraw(TRUE);
}
void CLibraryDlg::UpdateTree()
{
+ m_Tree.SetRedraw(FALSE);
m_Tree.DeleteAllItems();
- TV_INSERTSTRUCT tvs;
- tvs.hParent = NULL;
- tvs.hInsertAfter = TVI_LAST;
- tvs.item.iImage = 1;
- tvs.item.iSelectedImage = 1;
- tvs.item.lParam = 0;
- tvs.item.pszText = _T("Groups");
- tvs.item.mask = TVIF_IMAGE | TVIF_SELECTEDIMAGE | TVIF_TEXT | TVIF_PARAM;
- HTREEITEM hRootItem = m_Tree.InsertItem(&tvs);
-
- for (int i = 0; i < m_Manager.GetGroupCount(); i++)
- {
- TV_INSERTSTRUCT tvstruct;
- tvstruct.hParent = hRootItem;
- tvstruct.hInsertAfter = TVI_LAST;
- tvstruct.item.iImage = 0;
- tvstruct.item.iSelectedImage = 1;
- tvstruct.item.lParam = i+1;
- tvstruct.item.pszText = m_Manager.GetGroupName(i);
- tvstruct.item.mask = TVIF_IMAGE | TVIF_SELECTEDIMAGE | TVIF_TEXT | TVIF_PARAM;
- m_Tree.InsertItem(&tvstruct);
- }
- m_Tree.Expand (hRootItem, TVE_EXPAND);
- m_Tree.SelectItem(hRootItem);
-}
-/*
-BOOL CLibraryDlg::DoSave(BOOL bAskName)
-{
- if (bAskName || m_strFile.IsEmpty())
- {
- CString Name;
- CFileDialog dlg(FALSE, ".lgf\0", NULL,OFN_HIDEREADONLY | OFN_OVERWRITEPROMPT,
- "LeoCAD Group Files (*.lgf)|*.lgf|All Files (*.*)|*.*||",this);
- dlg.m_ofn.lpstrFile = Name.GetBuffer(_MAX_PATH);
- if (dlg.DoModal() != IDOK)
- return FALSE;
- Name.ReleaseBuffer();
- m_strFile = Name;
- }
-
- CWaitCursor wait;
- CFile f(m_strFile, CFile::modeCreate | CFile::modeReadWrite | CFile::shareExclusive);
- CArchive ar(&f,CArchive::store | CArchive::bNoFlushOnDelete);
+ PiecesLibrary *Lib = project->GetPiecesLibrary();
+ for (int i = 0; i < Lib->GetNumCategories(); i++)
+ m_Tree.InsertItem(TVIF_IMAGE|TVIF_CHILDREN|TVIF_PARAM|TVIF_TEXT, Lib->GetCategoryName(i), 0, 1, 0, 0, 0, TVI_ROOT, TVI_SORT);
- CString str;
- ar.Write (ver_str, sizeof(ver_str));
- ar << ver_flt;
- ar << m_nMaxGroups;
- for (int i = 0; i < m_nMaxGroups; i++)
- {
- ar.Write (m_strGroups[i], sizeof(m_strGroups[i]));
- ar << m_nBitmaps[i];
- }
-
- m_ImageList.Write(&ar);
-
- ar << (int) m_Parts.GetSize();
- for (i = 0; i < m_Parts.GetSize(); i++)
- {
- ar.Write (m_Parts[i].info->m_strName, sizeof(m_Parts[i].info->m_strName));
- ar << m_Parts[i].group;
- }
- ar.Close();
- f.Close();
- m_bModified = FALSE;
-// m_bLoaded = TRUE;
- return TRUE;
+ m_Tree.SetRedraw(TRUE);
+ m_Tree.Invalidate();
}
-*/
+
void CLibraryDlg::OnSelChangedTree(NMHDR* pNMHDR, LRESULT* pResult)
{
NM_TREEVIEW* pNMTreeView = (NM_TREEVIEW*)pNMHDR;
@@ -560,105 +372,42 @@ void CLibraryDlg::OnSelChangedTree(NMHDR* pNMHDR, LRESULT* pResult)
*pResult = 0;
}
-void CLibraryDlg::OnBeginDragList(NMHDR* pNMHDR, LRESULT* pResult)
+void CLibraryDlg::OnCancel()
{
- NM_LISTVIEW* pNMListView = (NM_LISTVIEW*)pNMHDR;
-
- // save the index of the item being dragged in m_nDragIndex
- m_nDragIndex = pNMListView->iItem;
- POINT pt;
- pt.x = 8;
- pt.y = 8;
+ // Check if it's ok to close the dialog
+ if (!project->GetPiecesLibrary()->SaveCategories())
+ return;
- // create a drag image
- if(m_pDragImage)
- delete m_pDragImage;
-
- m_pDragImage = m_List.CreateDragImage (m_nDragIndex, &pt);
- ASSERT (m_pDragImage);
- // changes the cursor to the drag image (DragMove() is still required in
- // OnMouseMove())
- VERIFY (m_pDragImage->BeginDrag (0, CPoint (8, 8)));
- VERIFY (m_pDragImage->DragEnter (GetDesktopWindow (), pNMListView->ptAction));
- // set dragging flag
- m_bDragging = TRUE;
- m_hDropItem = NULL;
-
- // capture all mouse messages
- SetCapture ();
-
- *pResult = 0;
+ CDialog::OnCancel();
}
-void CLibraryDlg::OnMouseMove(UINT nFlags, CPoint point)
+void CLibraryDlg::OnOK()
{
- if (m_bDragging)
- {
- CPoint pt (point);
- ClientToScreen (&pt);
- // move the drag image and unlock window updates
- VERIFY (m_pDragImage->DragMove (pt));
- VERIFY (m_pDragImage->DragShowNolock (FALSE));
-
- m_Tree.ScreenToClient (&pt);
-
- UINT uFlags;
- // get the item that is below cursor and highlight it
- m_hDropItem = m_Tree.HitTest(pt, &uFlags);
- m_Tree.SelectDropTarget(m_hDropItem);
+ // Check if it's ok to close the dialog
+ if (!project->GetPiecesLibrary()->SaveCategories())
+ return;
- // lock window updates
- VERIFY (m_pDragImage->DragShowNolock (TRUE));
- }
-
- CDialog::OnMouseMove(nFlags, point);
+ CDialog::OnOK();
}
-void CLibraryDlg::OnLButtonUp(UINT nFlags, CPoint point)
+BOOL CLibraryDlg::ContinueModal()
{
- if (m_bDragging)
- {
- // release mouse capture
- VERIFY (::ReleaseCapture ());
- m_bDragging = FALSE;
- // end dragging
- VERIFY (m_pDragImage->DragLeave (GetDesktopWindow ()));
- m_pDragImage->EndDrag ();
-
- if (m_hDropItem)
- {
- DWORD dw = m_Tree.GetItemData(m_hDropItem);
- bool bControl = (GetKeyState (VK_CONTROL) < 0);
-
- for (int i = 0; i < m_List.GetItemCount(); i++)
- if (m_List.GetItemState(i,LVIS_SELECTED))
- m_Manager.SetPieceGroup(m_List.GetItemData(i), dw, bControl);
-
- m_Tree.SelectDropTarget (NULL);
- m_hDropItem = NULL;
- UpdateList();
- }
- }
-
- CDialog::OnLButtonUp(nFlags, point);
-}
+ HTREEITEM h = m_Tree.GetSelectedItem();
+ BOOL bValid = (h != m_Tree.GetRootItem()) && (h != NULL);
-void CLibraryDlg::OnCancel()
-{
- // Check if it's ok to close the dialog
- if (!m_Manager.SaveModified ())
- return;
+ EnableControl(ID_LIBDLG_GROUP_RENAME, bValid);
+ EnableControl(ID_LIBDLG_GROUP_DELETE, bValid);
- CDialog::OnCancel();
+ return CDialog::ContinueModal();
}
-void CLibraryDlg::OnOK()
+void CLibraryDlg::EnableControl(UINT nID, BOOL bEnable)
{
- // Check if it's ok to close the dialog
- if (!m_Manager.SaveModified ())
- return;
-
- CDialog::OnOK();
+ GetMenu()->GetSubMenu(1)->EnableMenuItem(nID, MF_BYCOMMAND | (bEnable ? MF_ENABLED : (MF_DISABLED | MF_GRAYED)));
+ int state = m_wndToolBar.GetToolBarCtrl().GetState(nID) & ~TBSTATE_ENABLED;
+ if (bEnable)
+ state |= TBSTATE_ENABLED;
+ m_wndToolBar.GetToolBarCtrl().SetState(nID, state);
}
BOOL CLibraryDlg::OnToolTipText(UINT, NMHDR* pNMHDR, LRESULT* pResult)
@@ -701,63 +450,3 @@ BOOL CLibraryDlg::OnToolTipText(UINT, NMHDR* pNMHDR, LRESULT* pResult)
return TRUE; // message was handled
}
-
-BOOL CLibraryDlg::ContinueModal()
-{
- HTREEITEM h = m_Tree.GetSelectedItem();
- DWORD dw = m_Tree.GetItemData (h);
- BOOL bValid = (h != m_Tree.GetRootItem()) && (h != NULL);
-
- EnableControl(ID_LIBDLG_GROUP_INSERT, m_Manager.GetGroupCount() < 32);
- EnableControl(ID_LIBDLG_GROUP_RENAME, bValid);
- EnableControl(ID_LIBDLG_GROUP_DELETE, bValid && m_Manager.GetGroupCount() != 1);
- EnableControl(ID_LIBDLG_GROUP_MOVEUP, dw > 1);
- EnableControl(ID_LIBDLG_GROUP_MOVEDOWN, (dw != 0) && ((int)dw != m_Manager.GetGroupCount()));
-
- return CDialog::ContinueModal();
-}
-
-void CLibraryDlg::EnableControl(UINT nID, BOOL bEnable)
-{
- GetMenu()->GetSubMenu(1)->EnableMenuItem(nID, MF_BYCOMMAND | (bEnable ? MF_ENABLED : (MF_DISABLED | MF_GRAYED)));
- int state = m_wndToolBar.GetToolBarCtrl().GetState(nID) & ~TBSTATE_ENABLED;
- if (bEnable)
- state |= TBSTATE_ENABLED;
- m_wndToolBar.GetToolBarCtrl().SetState(nID, state);
-}
-
-/*
-CImageList* CTreeCtrlEx::CreateDragImageEx(HTREEITEM hItem)
-{
- CRect rect;
- GetItemRect(hItem, rect, LVIR_LABEL);
- rect.top = rect.left = 0;
-
- // Create bitmap
- CClientDC dc(this);
- CDC memDC;
-
- if(!memDC.CreateCompatibleDC(&dc))
- return NULL;
-
- CBitmap bitmap;
- if(!bitmap.CreateCompatibleBitmap(&dc, rect.Width(), rect.Height()))
- return NULL;
-
- CBitmap* pOldMemDCBitmap = memDC.SelectObject(&bitmap);
- CFont* pOldFont = memDC.SelectObject(GetFont());
- memDC.FillSolidRect(&rect, RGB(0, 255, 0)); // Here green is used as mask color
- memDC.SetTextColor(GetSysColor(COLOR_GRAYTEXT));
- memDC.TextOut(rect.left, rect.top, GetItemText(hItem));
- memDC.SelectObject(pOldFont);
- memDC.SelectObject(pOldMemDCBitmap);
-
- // Create imagelist
- CImageList* pImageList = new CImageList;
- pImageList->Create(rect.Width(), rect.Height(),
- ILC_COLOR | ILC_MASK, 0, 1);
- pImageList->Add(&bitmap, RGB(0, 255, 0)); // Here green is used as mask color
-
- return pImageList;
-}
-*/
diff --git a/win/Libdlg.h b/win/Libdlg.h
index 798e6b6..2aefa5d 100644
--- a/win/Libdlg.h
+++ b/win/Libdlg.h
@@ -1,27 +1,8 @@
-#if !defined(AFX_LIBDLG_H__BABBE241_AF9C_11D2_8203_DC3ED7F79C17__INCLUDED_)
-#define AFX_LIBDLG_H__BABBE241_AF9C_11D2_8203_DC3ED7F79C17__INCLUDED_
-
-#if _MSC_VER >= 1000
-#pragma once
-#endif // _MSC_VER >= 1000
-// LibDlg.h : header file
-//
-
-#include "libman.h"
+#ifndef _LIBDLG_H_
+#define _LIBDLG_H_
class PieceInfo;
-typedef struct {
- PieceInfo* info;
- unsigned long group;
- unsigned long defgroup;
-} PARTGROUPINFO;
-
-#include <afxtempl.h> // CArray;
-
-/////////////////////////////////////////////////////////////////////////////
-// CLibraryDlg dialog
-
class CLibraryDlg : public CDialog
{
// Construction
@@ -52,29 +33,14 @@ public:
void UpdateTree();
void UpdateList();
-// BYTE m_nMaxGroups;
- int m_nBitmaps[32];
- CImageList m_ImageList;
-
CToolBar m_wndToolBar;
CImageList m_TreeImages;
- CImageList* m_pDragImage;
- BOOL m_bDragging;
- int m_nDragIndex;
- HTREEITEM m_hDropItem;
-
-protected:
- LibraryManager m_Manager;
-
protected:
// Generated message map functions
//{{AFX_MSG(CLibraryDlg)
virtual BOOL OnInitDialog();
afx_msg void OnSelChangedTree(NMHDR* pNMHDR, LRESULT* pResult);
- afx_msg void OnBeginDragList(NMHDR* pNMHDR, LRESULT* pResult);
- afx_msg void OnMouseMove(UINT nFlags, CPoint point);
- afx_msg void OnLButtonUp(UINT nFlags, CPoint point);
virtual void OnCancel();
virtual void OnOK();
//}}AFX_MSG
@@ -87,4 +53,4 @@ protected:
//{{AFX_INSERT_LOCATION}}
// Microsoft Developer Studio will insert additional declarations immediately before the previous line.
-#endif // !defined(AFX_LIBDLG_H__BABBE241_AF9C_11D2_8203_DC3ED7F79C17__INCLUDED_)
+#endif // _LIBDLG_H_
diff --git a/win/Piecebar.cpp b/win/Piecebar.cpp
index 0a793e4..7395301 100644
--- a/win/Piecebar.cpp
+++ b/win/Piecebar.cpp
@@ -1106,7 +1106,7 @@ BOOL CPiecesBar::OnNotify(WPARAM wParam, LPARAM lParam, LRESULT* pResult)
PtrArray<PieceInfo> SinglePieces, GroupedPieces;
int i;
- Lib->GetCategoryEntries(CategoryIndex, SinglePieces, GroupedPieces);
+ Lib->GetCategoryEntries(CategoryIndex, true, SinglePieces, GroupedPieces);
for (i = 0; i < SinglePieces.GetSize(); i++)
{
diff --git a/win/System.cpp b/win/System.cpp
index 5fde157..e80c811 100644
--- a/win/System.cpp
+++ b/win/System.cpp
@@ -1208,10 +1208,10 @@ bool SystemDoDialog(int nMode, void* param)
{
const char *ext, *filter;
- if (opts->type == LC_FILEOPENDLG_LGF)
+ if (opts->type == LC_FILEOPENDLG_LCF)
{
- ext = ".lgf\0";
- filter = "LeoCAD Group Files (*.lgf)|*.lgf|All Files (*.*)|*.*||";
+ ext = ".lcf\0";
+ filter = "LeoCAD Category Files (*.lcf)|*.lcf|All Files (*.*)|*.*||";
}
else
{
@@ -1224,12 +1224,11 @@ bool SystemDoDialog(int nMode, void* param)
if (dlg.DoModal() == IDOK)
{
opts->numfiles = 1;
- opts->filenames = (char**)malloc(sizeof(char*));
- opts->filenames[0] = (char*)malloc(LC_MAXPATH);
- strcpy (opts->filenames[0], dlg.GetPathName ());
+ opts->filenames = (char**)malloc(LC_MAXPATH);
+ strcpy((char*)opts->filenames, dlg.GetPathName ());
// Get the file path.
- strcpy (opts->path, opts->filenames[0]);
+ strcpy(opts->path, (char*)opts->filenames);
if (strlen (opts->path) > 0)
{
char* ptr = strrchr(opts->path, '/');
@@ -1250,6 +1249,25 @@ bool SystemDoDialog(int nMode, void* param)
} break;
+ case LC_DLG_FILE_SAVE:
+ {
+ LC_FILESAVEDLG_OPTS* opts = (LC_FILESAVEDLG_OPTS*)param;
+
+ if (opts->type == LC_FILESAVEDLG_LCF)
+ {
+ CFileDialog dlg(FALSE, ".lcf", NULL, OFN_PATHMUSTEXIST | OFN_HIDEREADONLY | OFN_OVERWRITEPROMPT,
+ "LeoCAD Category Files (*.lcf)|*.lcf|All Files (*.*)|*.*||", NULL);
+
+ if (dlg.DoModal() == IDOK)
+ {
+ strcpy(opts->path, dlg.GetPathName ());
+ return true;
+ }
+ }
+
+ return false;
+ } break;
+
case LC_DLG_PICTURE_SAVE:
{
CFileDialog dlg(FALSE, NULL, NULL, OFN_HIDEREADONLY|OFN_OVERWRITEPROMPT|OFN_ENABLEHOOK|OFN_ENABLETEMPLATE|OFN_EXPLORER,
@@ -1454,21 +1472,10 @@ bool SystemDoDialog(int nMode, void* param)
case LC_DLG_LIBRARY:
{
CLibraryDlg dlg;
- CFrameWnd* pFrame = (CFrameWnd*)AfxGetMainWnd();
- CPiecesBar* pBar = (CPiecesBar*)pFrame->GetControlBar(ID_VIEW_PIECES_BAR);
-
- for (int i = 0; i < pBar->m_wndGroupsBar.m_ToolbarData.iButtons; i++)
- dlg.m_nBitmaps[i] = pBar->m_wndGroupsBar.m_ToolbarData.ButtonData[i].iBitmap;
- dlg.m_ImageList.Create(IDB_PIECEBAR, 16, 0, 0x00ff00ff);
+ dlg.DoModal();
- if (dlg.DoModal() == IDOK)
- {
- pBar->CreateGroupsBar();
- pBar->m_wndPiecesList.UpdateList();
- RECT rc;
- pBar->GetClientRect(&rc);
- pBar->PostMessage(WM_SIZE, SIZE_RESTORED, MAKELPARAM(rc.right, rc.bottom));
- }
+ CPiecesBar* pBar = (CPiecesBar*)((CFrameWnd*)AfxGetMainWnd())->GetControlBar(ID_VIEW_PIECES_BAR);
+ pBar->UpdatePiecesTree(false);
return true;
} break;
diff --git a/win/res/library.bmp b/win/res/library.bmp
index 45b9e31..49192c4 100644
--- a/win/res/library.bmp
+++ b/win/res/library.bmp
Binary files differ
diff --git a/win/resource.h b/win/resource.h
index 48f5f9f..bad6599 100644
--- a/win/resource.h
+++ b/win/resource.h
@@ -674,6 +674,10 @@
#define ID_PIECEBAR_EDITCATEGORY 33160
#define ID_PIECEBAR_REMOVECATEGORY 33161
#define ID_PIECE_TRANSFORM 33162
+#define ID_LIBDLG_CATEGORY_NEW 33163
+#define ID_LIBDLG_CATEGORY_REMOVE 33164
+#define ID_LIBDLG_CATEGORY_EDIT 33165
+#define ID_LIBDLG_CATEGORY_RESET 33166
#define ID_VIEW_PIECES_BAR 59425
#define ID_VIEW_TOOLS_BAR 59426
#define ID_VIEW_ANIMATION_BAR 59427
@@ -685,7 +689,7 @@
#ifndef APSTUDIO_READONLY_SYMBOLS
#define _APS_3D_CONTROLS 1
#define _APS_NEXT_RESOURCE_VALUE 240
-#define _APS_NEXT_COMMAND_VALUE 33163
+#define _APS_NEXT_COMMAND_VALUE 33167
#define _APS_NEXT_CONTROL_VALUE 1247
#define _APS_NEXT_SYMED_VALUE 121
#endif