[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

(DTPtechNote:1453) [AS_Indesign CS2]override_selection 0.2



こちらもCS2用にちょっと手直し。
どなたかテストしてくだされば、オモテにアップします。

(*
override_selection
(c)2005-2006 www.seuzo.jp
マスターページ上の選択アイテムをすべての適用ページ内でオーバーライドさせます。
2005.05.01	ver.0.1	とりあえず版。
2006.09.02	ver.0.2	Indesign CS2用

*)



--------------------------------------------------------●コントロールルーチン
my ver()
my doc_exists()
set my_selection to my selection_test()
set cnt to my my_override(my_selection)
beep
if cnt = 0 then
	display dialog "オーバーライドすべき箇所はありませんでした" as Unicode text
else
	display dialog (cnt & "箇所をオーバーライドしました。") as Unicode text
end if


--------------------------------------------------------●InDesignバージョン確認ルーチン
to ver()
	tell application "Adobe InDesign CS2_J"
		set my_version to (version of script preferences) as real
		if my_version < 4 or my_version > 4.9 then
			activate
			my my_error("このプログラムはInDesign CS2以外では動作しません", true)
		end if
		my_version
	end tell
end ver

--------------------------------------------------------●ドキュメントが開かれているかどうか
to doc_exists()
	tell application "Adobe InDesign CS2_J"
		if not (exists document 1) then
			my my_error("ドキュメントが開かれていません", true)
		end if
	end tell
end doc_exists

--------------------------------------------------------●選択されているオブジェクトが妥当かどうかのテスト
(*
ページアイテムが選択されており
選択されているオブジェクトのクラスが{text frame, group, rectangle, oval, polygon, graphic line, guide}のいずれかであり、
それらがマスターページであれば
選択オブジェクトのリストを返す
*)
to selection_test()
	tell application "Adobe InDesign CS2_J"
		tell document 1
			set my_selection to selection
			if my_selection is {} then my my_error("なにも選択されていません", true)
			set my_class to class of item 1 of my_selection
			if my_class is not in {text frame, group, rectangle, oval, polygon, graphic line, guide} then my my_error("選択ツールでアイテムを選択してください", true)
			if class of parent of parent of item 1 of my_selection is not master spread then my my_error("マスターページのアイテムが選択されていません", true)
			return my_selection
		end tell
	end tell
end selection_test

--------------------------------------------------------●すべてのページをあたり、オーバーライドする
to my_override(my_selection)
	set cnt to 0
	tell application "Adobe InDesign CS2_J"
		tell document 1
			set mypages to every page
			repeat with i in mypages
				if applied master of i = parent of parent of item 1 of my_selection then --同じマスターを使っていれば
					set mymasterpageitems to master page items of i
					repeat with ii in mymasterpageitems
						--set ii to object reference of ii
						if my_selection contains ii then
							try
								override ii destination page i
								set cnt to cnt + 1
							on error errMsg number errNum
								my my_error("オーバーライド処理中にエラーです" & return & errMsg & return & errNum, false)
							end try
						end if
					end repeat
				end if
			end repeat
		end tell
	end tell
	return cnt
end my_override



------------------------------------------★以下こまごまとした下請け


------------------------------------------★エラー処理
on my_error(err_str, my_stop)
	set err_str to err_str as Unicode text
	if my_stop then
		set my_stop to {"中止"}
	else
		set my_stop to {"中止", "続行"}
	end if
	tell application "Adobe InDesign CS2_J"
		set user interaction level to interact with all --ユーザー操作の禁止を解除します
		activate
		beep
		set ANS to button returned of (display dialog err_str buttons my_stop default button 1 with icon 0) --警告ダイアログ出してストップ
		if ANS is "中止" then
			error number -128
		end if
	end tell
end my_error