summaryrefslogtreecommitdiff
path: root/win/Libdlg.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'win/Libdlg.cpp')
-rw-r--r--win/Libdlg.cpp605
1 files changed, 147 insertions, 458 deletions
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;
-}
-*/