Exemplo n.º 1
0
// --------------------------------------------------
void title_select(do_action_t da)
{
	if (gdmgr._da == da) {
		return;
	}

	if (gdmgr._da == da_sync) {
		sync_hide_ui();
	} else if (gdmgr._da == da_wgen) {
#ifndef _ROSE_EDITOR
		wgen_hide_ui();
#endif
	} else if (gdmgr._da == da_core) {
		if (!core_hide_ui()) {
			return;
		}
	} else if (gdmgr._da == da_visual) {
		visual_hide_ui();
	} else if (gdmgr._da == da_campaign) {
#ifndef _ROSE_EDITOR
		if (!campaign_hide_ui()) {
			return;
		}
#endif
	} else if (gdmgr._da == da_integrate) {
		if (!integrate_hide_ui()) {
			return;
		}
	}
	
	ToolBar_CheckButton(gdmgr._htb_sys, IDM_SYS_SYNC, 0);
	ToolBar_CheckButton(gdmgr._htb_sys, IDM_SYS_WGEN, 0);
	ToolBar_CheckButton(gdmgr._htb_sys, IDM_SYS_CORE, 0);
	ToolBar_CheckButton(gdmgr._htb_sys, IDM_SYS_PLAY, 0);
	ToolBar_CheckButton(gdmgr._htb_sys, IDM_SYS_TBOX, 0);
	ToolBar_CheckButton(gdmgr._htb_sys, IDM_SYS_BUILDER, 0);

	ShowWindow(gdmgr._hdlg_sync, SW_HIDE);
	ShowWindow(gdmgr._hdlg_wgen, SW_HIDE);
	ShowWindow(gdmgr._hdlg_core, SW_HIDE);
	ShowWindow(gdmgr._hdlg_visual, SW_HIDE);
	ShowWindow(gdmgr._hdlg_campaign, SW_HIDE);
	ShowWindow(gdmgr._hdlg_integrate, SW_HIDE);

	// 记住当前正在执行的会话
	gdmgr._da = da;

	if (da == da_sync) {
		ShowWindow(gdmgr._hdlg_sync, SW_RESTORE);
		ToolBar_CheckButton(gdmgr._htb_sys, IDM_SYS_SYNC, 1);
		sync_enter_ui();
	
	} else if (da == da_wgen) {
		ShowWindow(gdmgr._hdlg_wgen, SW_RESTORE);
		ToolBar_CheckButton(gdmgr._htb_sys, IDM_SYS_WGEN, 1);
#ifndef _ROSE_EDITOR
		wgen_enter_ui();
#endif

	} else if (da == da_core) {
		ShowWindow(gdmgr._hdlg_core, SW_RESTORE);
		ToolBar_CheckButton(gdmgr._htb_sys, IDM_SYS_CORE, 1);
		core_enter_ui();

	} else if (da == da_visual) {
		ShowWindow(gdmgr._hdlg_visual, SW_RESTORE);
		ToolBar_CheckButton(gdmgr._htb_sys, IDM_SYS_PLAY, 1);
		visual_enter_ui();

	} else if (da == da_campaign) {
		ShowWindow(gdmgr._hdlg_campaign, SW_RESTORE);
		ToolBar_CheckButton(gdmgr._htb_sys, IDM_SYS_TBOX, 1);
#ifndef _ROSE_EDITOR
		campaign_enter_ui();
#endif

	} else if (da == da_integrate) {
		ShowWindow(gdmgr._hdlg_integrate, SW_RESTORE);
		integrate_enter_ui();
	}
	return;
}
Exemplo n.º 2
0
void On_DlgDDescCommand(HWND hdlgP, int id, HWND hwndCtrl, UINT codeNotify)
{
	char *ptr = NULL;
	int retval;
	char text[_MAX_PATH];
	BOOL fok;
	std::string str;
	std::stringstream strstr;
	
	switch (id) {
	case IDC_BT_DDESC_BROWSE:
		ptr = GetBrowseFilePath(hdlgP);
		if (!ptr) {
			break;
		}
		strcpy(text, appendbackslash(ptr));
		if (text[strlen(text) - 1] == '\\') {
			text[strlen(text) - 1] = 0;
		}
		if (!check_wok_root_folder(text)) {
			posix_print_mb("%s,不是有效的kingdom-src-x.x.x源数据目录,请重新选择", appendbackslash(text));
			break;
		}
		if (strcasecmp(ptr, game_config::path.c_str())) {
			game_config::path = ptr;
			gdmgr.heros_.set_path(game_config::path.c_str());
			Edit_SetText(GetDlgItem(hdlgP, IDC_ET_DDESC_WWWROOT), appendbackslash(ptr));
			OnLSBt(TRUE);
			if (gdmgr._da != da_sync) {
				title_select(da_sync);
			} else {
				sync_enter_ui();
			}
			update_locale_dir();
		}
		break;

	case IDM_NEW_EXTRAINSDIST:
		sprintf(text, "Do you want to extract install-material to C:\\kingdom-ins?"); 
		retval = MessageBox(hdlgP, text, "Confirm Generate", MB_YESNO | MB_DEFBUTTON2);
		if (retval == IDYES) {
			fok = extra_kingdom_ins_disk(gdmgr._menu_text, "c:\\kingdom-ins", "c:\\kingdom-ins-android\\com.freeors.kingdom");
			posix_print_mb("Extract install-material from %s to C:\\kingdom-ins, %s!!", gdmgr._menu_text, fok? "Success": "Fail");
		}
		break;

	case IDM_NEW_CAMPAIGN:
		if (campaign_new()) {
			// title_select(da_sync);
		}
		break;

	case IDM_EXPLORER_WML:
		if (!_stricmp(gdmgr._menu_text, "hero.dat")) {
			if (gdmgr._da != da_wgen) {
				title_select(da_wgen);
			} else {
				wgen_enter_ui();
			}
		} else if (!_stricmp(gdmgr._menu_text, "tb.dat")) {
			editor_config::type = BIN_BUILDINGRULE;
			if (gdmgr._da != da_visual) {
				title_select(da_visual);
			} else {
				visual_enter_ui();
			}
		} else if (!_stricmp(extname(gdmgr._menu_text), "bin")) {
			if (wml_checksum_from_file(std::string(gdmgr._menu_text))) {
				editor_config::type = BIN_WML;
				if (gdmgr._da != da_visual) {
					title_select(da_visual);
				} else {
					visual_enter_ui();
				}
			}
		}
		break;

	case IDM_DELETE_ITEM0:
		// 册除指定的文件/目录
		strstr.str("");
		str = gdmgr._menu_text;
		strstr << str.substr(0, str.rfind("\\xwml"));
		strstr << "\\data\\campaigns\\" << offextname(basename(gdmgr._menu_text));
		strcpy(text, strstr.str().c_str());

		strstr.str("");
		strstr << "您想删除文件:" << gdmgr._menu_text << ",以及目录:";
		strstr << text << "?";

		// Confirm Multiple File Delete 
		retval = MessageBox(hdlgP, strstr.str().c_str(), "确认删除", MB_YESNO | MB_DEFBUTTON2);
		if (retval == IDYES) {
			if (delfile1(gdmgr._menu_text)) {
                TreeView_DeleteItem(GetDlgItem(hdlgP, IDC_TV_DDESC_EXPLORER), (HTREEITEM)(UINT_PTR)gdmgr._menu_lparam);
				TreeView_SetChilerenByPath(GetDlgItem(hdlgP, IDC_TV_DDESC_EXPLORER), (HTREEITEM)(UINT_PTR)gdmgr._menu_lparam, dirname(gdmgr._menu_text)); 
			} else {
				posix_print_mb("Failed delete %s !", gdmgr._menu_text); 
			}
			if (!delfile1(text)) {
                posix_print_mb("Failed delete %s !", text); 
			}
			sync_refresh_sync();
		}

		break;

	case IDM_DELETE_ITEM1:
		strstr.str("");
		strstr << "将产生不同步,您想删除文件:" << gdmgr._menu_text << "?";
		// Confirm Multiple File Delete 
		retval = MessageBox(hdlgP, strstr.str().c_str(), "确认删除", MB_YESNO | MB_DEFBUTTON2);
		if (retval == IDYES) {
			if (delfile1(gdmgr._menu_text)) {
                TreeView_DeleteItem(GetDlgItem(hdlgP, IDC_TV_DDESC_EXPLORER), (HTREEITEM)(UINT_PTR)gdmgr._menu_lparam);
				TreeView_SetChilerenByPath(GetDlgItem(hdlgP, IDC_TV_DDESC_EXPLORER), (HTREEITEM)(UINT_PTR)gdmgr._menu_lparam, dirname(gdmgr._menu_text)); 
			} else {
				posix_print_mb("Failed delete %s !", gdmgr._menu_text); 
			}
			// inform user, there is non sync.
			if (gdmgr._da != da_sync) {
				title_select(da_sync);
			} else {
				// forbid refresh
				sync_enter_ui();
			}
		}
		break;

	default:
		break;
	}
	return;
}
Exemplo n.º 3
0
//
// On_DlgDDescNotify()
//
BOOL On_DlgDDescNotify(HWND hdlgP, int DlgItem, LPNMHDR lpNMHdr)
{
	LPNMTREEVIEW			lpnmitem;
	HTREEITEM				htvi;
	TVITEMEX				tvi;
	char					text[_MAX_PATH];
	POINT					point;
	
	if (gdmgr._syncing || (lpNMHdr->idFrom != IDC_TV_DDESC_EXPLORER)) {
		return FALSE;
	}

	lpnmitem = (LPNMTREEVIEW)lpNMHdr;

	// NM_RCLICK/NM_CLICK/NM_DBLCLK这些通知被发来后,其附代参数没法指定是哪个叶子句柄,
	// 需通过判断鼠标坐标来判断是哪个叶子被按下?
	// 1. GetCursorPos, 得到屏幕坐标系下的鼠标坐标
	// 2. TreeView_HitTest1(自写宏),由屏幕坐标系下的鼠标坐标返回指向的叶子句柄
	GetCursorPos(&point);	// 得到的是屏幕坐标
	TreeView_HitTest1(lpNMHdr->hwndFrom, point, htvi);
	
	// NM_表示对通用控件都通用,范围丛(0, 99)
	// TVN_表示只能TreeView通用,范围丛(400, 499)
	if (lpNMHdr->code == NM_RCLICK) {
		//
		// 右键单击: 弹出菜单
		//
		// 准备两个菜单上下文变量
		TreeView_GetItem1(lpNMHdr->hwndFrom, htvi, &tvi, TVIF_IMAGE | TVIF_PARAM | TVIF_TEXT, text);
		strcpy(gdmgr._menu_text, TreeView_FormPath(lpNMHdr->hwndFrom, htvi, dirname(game_config::path.c_str())));
		gdmgr._menu_lparam = (uint32_t)tvi.lParam;

		// new
		if (!can_execute_tack(TASK_NEW) || strcasecmp(gdmgr._menu_text, game_config::path.c_str())) {
			EnableMenuItem(gdmgr._hpopup_new, IDM_NEW_EXTRAINSDIST, MF_BYCOMMAND | MF_GRAYED);
		}
		if (!can_execute_tack(TASK_NEW)) {
			EnableMenuItem(gdmgr._hpopup_new, IDM_NEW_CAMPAIGN, MF_BYCOMMAND | MF_GRAYED);
		}
		// explorer
		if (!can_execute_tack(TASK_EXPLORER) || (_stricmp(extname(gdmgr._menu_text), "bin") && _stricmp(extname(gdmgr._menu_text), "dat"))) {
			EnableMenuItem(gdmgr._hpopup_explorer, IDM_EXPLORER_WML, MF_BYCOMMAND | MF_GRAYED);
		}
		// delete
		if (!can_execute_tack(TASK_DELETE) || _stricmp(extname(gdmgr._menu_text), "bin") || !strstr(gdmgr._menu_text, "\\campaigns\\")) {
			EnableMenuItem(gdmgr._hpopup_delete, IDM_DELETE_ITEM0, MF_BYCOMMAND | MF_GRAYED);
			EnableMenuItem(gdmgr._hpopup_delete, IDM_DELETE_ITEM1, MF_BYCOMMAND | MF_GRAYED);
		}

		TrackPopupMenuEx(gdmgr._hpopup_ddesc, 0,
			point.x, 
			point.y, 
			hdlgP, 
			NULL);

		EnableMenuItem(gdmgr._hpopup_new, IDM_NEW_EXTRAINSDIST, MF_BYCOMMAND | MF_ENABLED);
		EnableMenuItem(gdmgr._hpopup_explorer, IDM_EXPLORER_WML, MF_BYCOMMAND | MF_ENABLED);
		EnableMenuItem(gdmgr._hpopup_delete, IDM_DELETE_ITEM0, MF_BYCOMMAND | MF_ENABLED);
		EnableMenuItem(gdmgr._hpopup_delete, IDM_DELETE_ITEM1, MF_BYCOMMAND | MF_ENABLED);
	
	} else if (lpNMHdr->code == NM_CLICK) {
		//
		// 左键单击: 如果底下被击的是目录,且没有生成过叶子,成生叶子
		//
		strcpy(text, TreeView_FormPath(lpNMHdr->hwndFrom, htvi, dirname(game_config::path.c_str())));
		TreeView_GetItem1(lpNMHdr->hwndFrom, htvi, &tvi, TVIF_CHILDREN, NULL);
		if (tvi.cChildren && !TreeView_GetChild(lpNMHdr->hwndFrom, htvi)) {
			dir_2_tv(lpNMHdr->hwndFrom, htvi, text, 0);
		}
		// 址址栏中显示选中目录
		strcpy(text, TreeView_FormPath(lpNMHdr->hwndFrom, htvi, dirname(game_config::path.c_str())));
		if (!is_directory(text)) {
			strcpy(text, dirname(text));
		}
		// Edit_SetText(GetDlgItem(hdlgP, IDC_ET_DDESC_WWWROOT), text + strlen(dirname(game_config::path.c_str())) + 1);

	} else if (lpNMHdr->code == NM_DBLCLK) {
		//
		// 目录: 展开/折叠叶子(系统自动)
		// 文件: 用特定应程序打开
		//
		// 切换到编辑窗口
		TreeView_GetItem1(lpNMHdr->hwndFrom, htvi, &tvi, TVIF_IMAGE | TVIF_PARAM | TVIF_TEXT, text);

		if (!_stricmp(text, "hero.dat")) {
			strcpy(gdmgr._menu_text, TreeView_FormPath(lpNMHdr->hwndFrom, htvi, dirname(game_config::path.c_str())));
			gdmgr._menu_lparam = (uint32_t)tvi.lParam;
			if (gdmgr._da != da_wgen) {
				title_select(da_wgen);
			} else {
				wgen_enter_ui();
			}
		} else if (!_stricmp(text, "tb.dat") || !_stricmp(text, "tb-1.dat")) {
			strcpy(gdmgr._menu_text, TreeView_FormPath(lpNMHdr->hwndFrom, htvi, dirname(game_config::path.c_str())));
			gdmgr._menu_lparam = (uint32_t)tvi.lParam;
			editor_config::type = BIN_BUILDINGRULE;
			if (gdmgr._da != da_visual) {
				title_select(da_visual);
			} else {
				visual_enter_ui();
			}
		} else if (!_stricmp(extname(text), "bin")) {
			strcpy(gdmgr._menu_text, TreeView_FormPath(lpNMHdr->hwndFrom, htvi, dirname(game_config::path.c_str())));
			if (wml_checksum_from_file(std::string(gdmgr._menu_text))) {
				gdmgr._menu_lparam = (uint32_t)tvi.lParam;
				if (strstr(gdmgr._menu_text, "\\campaigns\\") && 
					!strstr(gdmgr._menu_text, "duel") &&
					!strstr(gdmgr._menu_text, "legend_of_bei_liu") &&
					!strstr(gdmgr._menu_text, "tower_defense") &&
					!strstr(gdmgr._menu_text, "tutorial")) {
					if (gdmgr._da != da_campaign) {
						title_select(da_campaign);
					} else {
						campaign_enter_ui();
					}
				} else if (strstr(gdmgr._menu_text, "data.bin")) {
					if (gdmgr._da != da_core) {
						title_select(da_core);
					} else {
						// core_enter_ui();
					}
				} else {
					editor_config::type = BIN_WML;
					if (gdmgr._da != da_visual) {
						title_select(da_visual);
					} else {
						visual_enter_ui();
					}
				}
			}
		}
		
	} else if (lpNMHdr->code == TVN_ITEMEXPANDED) {
		//
		// 子叶子已被展开或折叠, 是折叠时删除所子有叶子, 以便下次展开时通反映最近文件系统
		//

		if (lpnmitem->action & TVE_COLLAPSE) {
			TreeView_Walk(lpNMHdr->hwndFrom, lpnmitem->itemNew.hItem, FALSE, NULL, NULL, TRUE);
			TreeView_SetChilerenByPath(lpNMHdr->hwndFrom, htvi, TreeView_FormPath(lpNMHdr->hwndFrom, htvi, dirname(game_config::path.c_str())));
		}
	}

    return FALSE;
}
Exemplo n.º 4
0
// --------------------------------------------------
void title_select(do_action_t da)
{
	if (gdmgr._da == da) {
		// 当前已正在运行选择的操作,不执行任何动作
		return;
	}

	if (gdmgr._da == da_sync) {
		sync_hide_ui();
	} else if (gdmgr._da == da_wgen) {
		wgen_hide_ui();
	} else if (gdmgr._da == da_core) {
		if (!core_hide_ui()) {
			return;
		}
	} else if (gdmgr._da == da_visual) {
		visual_hide_ui();
	} else if (gdmgr._da == da_campaign) {
		if (!campaign_hide_ui()) {
			return;
		}
	}
	
	ToolBar_CheckButton(gdmgr._htb_sys, IDM_SYS_SYNC, 0);
	ToolBar_CheckButton(gdmgr._htb_sys, IDM_SYS_WGEN, 0);
	ToolBar_CheckButton(gdmgr._htb_sys, IDM_SYS_XCHG, 0);
	ToolBar_CheckButton(gdmgr._htb_sys, IDM_SYS_PLAY, 0);
	ToolBar_CheckButton(gdmgr._htb_sys, IDM_SYS_TBOX, 0);
	ToolBar_CheckButton(gdmgr._htb_sys, IDM_SYS_ABOUT, 0);

	ShowWindow(gdmgr._hdlg_sync, SW_HIDE);
	ShowWindow(gdmgr._hdlg_wgen, SW_HIDE);
	ShowWindow(gdmgr._hdlg_core, SW_HIDE);
	ShowWindow(gdmgr._hdlg_visual, SW_HIDE);
	ShowWindow(gdmgr._hdlg_campaign, SW_HIDE);
	ShowWindow(gdmgr._hdlg_about, SW_HIDE);

	// 记住当前正在执行的会话
	gdmgr._da = da;

	if (da == da_sync) {
		ShowWindow(gdmgr._hdlg_sync, SW_RESTORE);
		ToolBar_CheckButton(gdmgr._htb_sys, IDM_SYS_SYNC, 1);
		sync_enter_ui();
	
	} else if (da == da_wgen) {
		ShowWindow(gdmgr._hdlg_wgen, SW_RESTORE);
		ToolBar_CheckButton(gdmgr._htb_sys, IDM_SYS_WGEN, 1);
		wgen_enter_ui();

	} else if (da == da_core) {
		ShowWindow(gdmgr._hdlg_core, SW_RESTORE);
		ToolBar_CheckButton(gdmgr._htb_sys, IDM_SYS_XCHG, 1);
		core_enter_ui();

	} else if (da == da_visual) {
		ShowWindow(gdmgr._hdlg_visual, SW_RESTORE);
		ToolBar_CheckButton(gdmgr._htb_sys, IDM_SYS_PLAY, 1);
		visual_enter_ui();

	} else if (da == da_campaign) {
		ShowWindow(gdmgr._hdlg_campaign, SW_RESTORE);
		ToolBar_CheckButton(gdmgr._htb_sys, IDM_SYS_TBOX, 1);
		campaign_enter_ui();

	} else if (da == da_about) {
		ShowWindow(gdmgr._hdlg_about, SW_RESTORE);
		ToolBar_CheckButton(gdmgr._htb_sys, IDM_SYS_ABOUT, 1);

	}
	return;
}