Browse Source

added menu option to move clip to the end of the list

sabrogden 8 years ago
parent
commit
5883d3c6d4
9 changed files with 157 additions and 6 deletions
  1. 4 0
      ActionEnums.cpp
  2. 2 0
      ActionEnums.h
  3. 1 0
      CP_Main.rc
  4. 48 0
      Clip.cpp
  5. 3 0
      Clip.h
  6. 3 2
      Misc.cpp
  7. 90 1
      QPasteWnd.cpp
  8. 3 0
      QPasteWnd.h
  9. 3 3
      Resource.h

+ 4 - 0
ActionEnums.cpp

@@ -298,6 +298,10 @@ CString ActionEnums::EnumDescription(ActionEnumValues value)
 		break;
 	case TOGGLE_SEARCH_METHOD:
 		val = "Toggle Search Method";
+		break;
+	case MOVE_CLIP_LAST:
+		val = "Move Clip Last";
+		break;
 	}
 
 	CString translatedValue = theApp.m_Language.GetQuickPasteKeyboardString(value, val);

+ 2 - 0
ActionEnums.h

@@ -101,6 +101,8 @@ public:
 		TOGGLE_DESCRIPTION_WORD_WRAP,
 		APPLY_LAST_SEARCH,
 		TOGGLE_SEARCH_METHOD,
+		MOVE_CLIP_LAST,
+
 
 		LAST_ACTION
 	};

+ 1 - 0
CP_Main.rc

@@ -289,6 +289,7 @@ BEGIN
             MENUITEM "Move To Top",                 ID_CLIPORDER_MOVETOTOP
             MENUITEM "Move Up",                     ID_CLIPORDER_MOVEUP
             MENUITEM "Move Down",                   ID_CLIPORDER_MOVEDOWN
+            MENUITEM "Move To Last",                ID_CLIPORDER_MOVETOLAST
             MENUITEM SEPARATOR
             MENUITEM "Make Top Sticky Clip",        ID_STICKYCLIPS_MAKETOPSTICKYCLIP
             MENUITEM "Make Last Sticky Clip",       ID_STICKYCLIPS_MAKELASTSTICKYCLIP

+ 48 - 0
Clip.cpp

@@ -1290,6 +1290,19 @@ void CClip::MakeLatestGroupOrder()
 	}
 }
 
+void CClip::MakeLastOrder()
+{
+	m_clipOrder = GetNewLastOrder(-1, m_id);
+}
+
+void CClip::MakeLastGroupOrder()
+{
+	if (m_parentId > -1)
+	{
+		m_clipGroupOrder = GetNewLastOrder(m_parentId, m_id);
+	}
+}
+
 double CClip::GetNewOrder(int parentId, int clipId)
 {
 	double newOrder = 0;
@@ -1325,6 +1338,41 @@ double CClip::GetNewOrder(int parentId, int clipId)
 	return newOrder;
 }
 
+double CClip::GetNewLastOrder(int parentId, int clipId)
+{
+	double newOrder = 0;
+	double existingMinOrder = 0;
+	CString existingDesc = _T("");
+
+	try
+	{
+		if (parentId < 0)
+		{
+			CppSQLite3Query q = theApp.m_db.execQuery(_T("SELECT clipOrder, mText FROM Main where clipOrder notnull ORDER BY clipOrder ASC LIMIT 1"));
+			if (q.eof() == false)
+			{
+				existingMinOrder = q.getFloatField(_T("clipOrder"));
+				existingDesc = q.getStringField(_T("mText"));
+				newOrder = existingMinOrder - 1;
+			}
+		}
+		else
+		{
+			CppSQLite3Query q = theApp.m_db.execQueryEx(_T("SELECT clipGroupOrder, mText FROM Main WHERE lParentID = %d AND clipGroupOrder notnull ORDER BY clipGroupOrder ASC LIMIT 1"), parentId);
+			if (q.eof() == false)
+			{
+				existingMinOrder = q.getFloatField(_T("clipGroupOrder"));
+				newOrder = existingMinOrder - 1;
+			}
+		}
+
+		Log(StrF(_T("GetLastOrder, Id: %d, parentId: %d, CurrentMin: %f, CurrentDesc: %s, NewMax: %f"), clipId, parentId, existingMinOrder, existingDesc, newOrder));
+	}
+	CATCH_SQLITE_EXCEPTION
+
+		return newOrder;
+}
+
 BOOL CClip::LoadMainTable(int id)
 {
 	bool bRet = false;

+ 3 - 0
Clip.h

@@ -135,6 +135,8 @@ public:
 	bool SaveFromEditWnd(BOOL bUpdateDesc);
 	void MakeLatestOrder();
 	void MakeLatestGroupOrder();
+	void MakeLastOrder();
+	void MakeLastGroupOrder();
 	void MakeStickyTop(int parentId);
 	void MakeStickyLast(int parentId);
 	bool RemoveStickySetting(int parentId);
@@ -156,6 +158,7 @@ public:
 	static void LoadTypes(int id, CClipTypes& types);
 
 	static double GetNewOrder(int parentId, int clipId);
+	double GetNewLastOrder(int parentId, int clipId);
 	static double GetNewTopSticky(int parentId, int clipId);
 	static double GetNewLastSticky(int parentId, int clipId);
 

+ 3 - 2
Misc.cpp

@@ -1065,11 +1065,12 @@ int FindNoCaseAndInsert(CString& mainStr, CString& findStr, CString preInsert, C
 
 		//use icu::UnicodeString because it handles upper/lowercase characters for all languages, CSTring only hanldes ascii characters
 		icu::UnicodeString mainLow(mainStr);
-		mainLow.toLower();
+		mainLow.foldCase(U_FOLD_CASE_DEFAULT);
 
 		icu::UnicodeString findLow(findStr);
-		findLow.toLower();
+		findLow.foldCase(U_FOLD_CASE_DEFAULT);
 
+		
 		int preLength = preInsert.GetLength();
 		int postLength = postInsert.GetLength();
 

+ 90 - 1
QPasteWnd.cpp

@@ -299,6 +299,8 @@ ON_UPDATE_COMMAND_UI(32775, &CQPasteWnd::OnUpdate32775)
 ON_COMMAND_RANGE(CustomFriendStartId, (CustomFriendStartId+ MaxCustomFriends+1), OnCustomSendToFriend)
 ON_COMMAND_RANGE(ChaiScriptMenuStartId, (ChaiScriptMenuStartId + MaxChaiScripts + 1), OnChaiScriptPaste)
 ON_MESSAGE(WM_DPICHANGED, OnDpiChanged)
+ON_COMMAND(ID_CLIPORDER_MOVETOLAST, &CQPasteWnd::OnCliporderMovetolast)
+ON_UPDATE_COMMAND_UI(ID_CLIPORDER_MOVETOLAST, &CQPasteWnd::OnUpdateCliporderMovetolast)
 END_MESSAGE_MAP()
 
 
@@ -2973,6 +2975,9 @@ bool CQPasteWnd::DoAction(DWORD actionId)
 	case ActionEnums::MOVE_CLIP_TOP:
 		ret = DoMoveClipTOP();
 		break;
+	case ActionEnums::MOVE_CLIP_LAST:
+		ret = DoMoveClipLast();
+		break;
 	case ActionEnums::FILTER_ON_SELECTED_CLIP:
 		ret = DoFilterOnSelectedClip();
 		break;
@@ -4137,6 +4142,74 @@ bool CQPasteWnd::DoMoveClipUp()
 	return true;
 }
 
+bool CQPasteWnd::DoMoveClipLast()
+{
+	ARRAY IDs;
+	m_lstHeader.GetSelectionItemData(IDs);
+
+	if (IDs.GetCount() > 0)
+	{
+		bool sort = false;
+		for (int i = 0; i < IDs.GetCount(); i++)
+		{
+			int id = IDs[i];
+			CClip clip;
+			if (clip.LoadMainTable(id))
+			{
+				if (theApp.m_GroupID > 0)
+				{
+					clip.MakeLastGroupOrder();
+				}
+				else
+				{
+					clip.MakeLastOrder();
+				}
+				clip.ModifyMainTable();
+
+				//have we loaded all clips, if so then sort and select
+				if (m_listItems.size() == m_lstHeader.GetItemCount())
+				{
+					sort = SyncClipDataToArrayData(clip);
+				}
+				else
+				{
+					//haven't loaded all clips so this will be out of what we have loaded
+					//remove this from the list, will be shown as they scroll down the list
+					std::vector<CMainTable>::iterator iter = m_listItems.begin();
+					while (iter != m_listItems.end())
+					{
+						if (iter->m_lID == clip.ID())
+						{
+							m_listItems.erase(iter);
+							break;
+						}
+						iter++;
+					}
+				}
+			}
+		}
+
+		if (sort)
+		{
+			if (theApp.m_GroupID > 0)
+			{
+				std::sort(m_listItems.begin(), m_listItems.end(), CMainTable::GroupSortDesc);
+			}
+			else
+			{
+				std::sort(m_listItems.begin(), m_listItems.end(), CMainTable::SortDesc);
+			}
+
+			SelectIds(IDs);			
+		}
+
+		m_lstHeader.RefreshVisibleRows();
+		m_lstHeader.RedrawWindow();
+	}
+
+	return true;
+}
+
 bool CQPasteWnd::DoMoveClipTOP()
 {
 	ARRAY IDs;
@@ -6557,4 +6630,20 @@ void CQPasteWnd::OnChaiScriptPaste(UINT idIn)
 	CSpecialPasteOptions pasteOptions;
 	pasteOptions.m_pasteScriptIndex = ChaiScriptMenuStartId - idIn;
 	OpenSelection(pasteOptions);
-}
+}
+
+void CQPasteWnd::OnCliporderMovetolast()
+{
+	DoAction(ActionEnums::MOVE_CLIP_LAST);
+}
+
+
+void CQPasteWnd::OnUpdateCliporderMovetolast(CCmdUI *pCmdUI)
+{
+	if (!pCmdUI->m_pMenu)
+	{
+		return;
+	}
+
+	UpdateMenuShortCut(pCmdUI, ActionEnums::MOVE_CLIP_LAST);
+}

+ 3 - 0
QPasteWnd.h

@@ -265,6 +265,7 @@ public:
 	bool DoMoveClipDown();
 	bool DoMoveClipUp();
 	bool DoMoveClipTOP();
+	bool DoMoveClipLast();
 	bool DoFilterOnSelectedClip();
 	bool DoPasteUpperCase();
 	bool DoPasteLowerCase();
@@ -522,4 +523,6 @@ public:
 	afx_msg void OnUpdateImportImportcopiedfile(CCmdUI *pCmdUI);
 	afx_msg void OnUpdate32775(CCmdUI *pCmdUI);
 	afx_msg LRESULT OnDpiChanged(WPARAM wParam, LPARAM lParam);
+	afx_msg void OnCliporderMovetolast();
+	afx_msg void OnUpdateCliporderMovetolast(CCmdUI *pCmdUI);
 };

+ 3 - 3
Resource.h

@@ -551,7 +551,6 @@
 #define IDC_MFCLINK2_EXAMPLES           2166
 #define IDC_STATIC_MD5                  2167
 #define IDC_EDIT_MD5                    2168
-#define IDC_STATIC_ENV_VAR              2170
 #define ID_FIRST_OPTION                 32771
 #define ID_FIRST_EXIT                   32772
 #define ID_FIRST_SHOWQUICKPASTE         32773
@@ -715,14 +714,15 @@
 #define ID_MENU_SAVE                    32940
 #define ID_IMPORT_IMPORTCOPIEDFILE      32941
 #define ID_FIRST_ALWAYSONTOP            32942
+#define ID_CLIPORDER_MOVETOLAST         32943
 
 // Next default values for new objects
 // 
 #ifdef APSTUDIO_INVOKED
 #ifndef APSTUDIO_READONLY_SYMBOLS
 #define _APS_3D_CONTROLS                     1
-#define _APS_NEXT_RESOURCE_VALUE        338
-#define _APS_NEXT_COMMAND_VALUE         32943
+#define _APS_NEXT_RESOURCE_VALUE        340
+#define _APS_NEXT_COMMAND_VALUE         32944
 #define _APS_NEXT_CONTROL_VALUE         2172
 #define _APS_NEXT_SYMED_VALUE           104
 #endif