トップ 差分 一覧 ソース 検索 ヘルプ RSS ログイン

GApplicationによるコマンドライン解析機能サポート #hsp3 #gtk3

[PR] 創価の正体を知るための情報ページ

このページの目次

ダウンロード


メインのスクリプトとその説明

/*
	GApplicationによるコマンドライン解析機能サポート

		起動例: 
			gtk3_gapplication_commandline_support.exe --help
			gtk3_gapplication_commandline_support.exe -h
			gtk3_gapplication_commandline_support.exe --version
			gtk3_gapplication_commandline_support.exe -v
			gtk3_gapplication_commandline_support.exe --width=300 --height=100
			gtk3_gapplication_commandline_support.exe -w 300 -t 100
			gtk3_gapplication_commandline_support.exe てすと.txt main.hsp
			(G_APPLICATION_HANDLES_OPENまたはG_APPLICATION_HANDLES_COMMAND_LINEフラグ必須)
			gtk3_gapplication_commandline_support.exe --width=300 -t 100 main.hsp
			(G_APPLICATION_HANDLES_OPENまたはG_APPLICATION_HANDLES_COMMAND_LINEフラグ必須)
 */

*_build
#runtime "hsp3cl"
#define NAME_APP "gtk3_gapplication_commandline_support"
#packopt name NAME_APP

*_include
#include "modclbk.as"
#include "gtk+3.as"

*_const
#define VARTYPE_STR 2
#define NULL 0

#define APPID "jp.lldev.hspgtk." + NAME_APP

#define OPTION_VERSION "version"
#define OPTION_VERSION_SHORT 'v'
#define OPTION_VERSION_HELP "プログラムのバージョンを表示して終了する"
#define VERSION_APP "0.0.1"

#define OPTION_WIDTH "width"
#define OPTION_WIDTH_SHORT 'w'
#define OPTION_WIDTH_HELP "ウィンドウの横幅"
#define OPTION_WIDTH_ARGDISC "WIDTH"

#define OPTION_HEIGHT "height"
#define OPTION_HEIGHT_SHORT 't'
#define OPTION_HEIGHT_HELP "ウィンドウの縦幅"
#define OPTION_HEIGHT_ARGDISC "HEIGHT"

#const DEF_WIN_WIDTH 200
#const DEF_WIN_HEIGHT 200

*_subroutines
/* g_convert関数による文字コード変換 */
#module 
#defcfunc gconv var from_, str set_to_, str set_from_
	g_convert@  varptr( from_ ), -1, set_to_, set_from_, NULL@, NULL@, NULL@
	p  = stat
	dupptr  buf, p, 1, VARTYPE_STR@
	to  = buf
	g_free@  p
	return to
#global
/* SJIS文字列をUTF-8に変換 */
#module 
#defcfunc u str str_
	from  = str_
	return gconv@( from, "UTF-8", "CP932" )
#global
/* UTF-8文字列をSJISに変換 */
#module 
#defcfunc s str str_
	from  = str_
	return gconv@( from, "CP932", "UTF-8" )
#global

/* argc、argv、その他を取得 */
#module 
#uselib "msvcrt"
#func __getmainargs "__getmainargs" int, int, int, int, int
#deffunc getmainargs var argc_, var argv_, var env_, var sinfo_
	argc_  = 0
	argv_  = 0
	env_  = 0
	sinfo_  = 0
	__getmainargs varptr( argc_ ), varptr( argv_ ), varptr( env_ ), 0, varptr( sinfo_ )
	return
#global

/* コマンドラインオプション登録 */
#module 
#deffunc register_options var app_
	// --version
	long  = OPTION_VERSION@
	short  = OPTION_VERSION_SHORT@
	flag  = G_OPTION_FLAG_NONE@
	arg  = G_OPTION_ARG_NONE@
	help  = u( OPTION_VERSION_HELP@ )
	g_application_add_main_option@  app_, long, short, flag, arg, help, 0

	// --width
	long  = OPTION_WIDTH@
	short  = OPTION_WIDTH_SHORT@
	flag  = G_OPTION_FLAG_IN_MAIN@
	arg  = G_OPTION_ARG_INT@
	help  = u( OPTION_WIDTH_HELP@ )
	argdisc  = OPTION_WIDTH_ARGDISC@
	g_application_add_main_option@  app_, long, short, flag, arg, help, argdisc

	// --height
	long  = OPTION_HEIGHT@
	short  = OPTION_HEIGHT_SHORT@
	flag  = G_OPTION_FLAG_IN_MAIN@
	arg  = G_OPTION_ARG_INT@
	help  = u( OPTION_HEIGHT_HELP@ )
	argdisc  = OPTION_HEIGHT_ARGDISC@
	g_application_add_main_option@  app_, long, short, flag, arg, help, argdisc
	return
#global

/* 新しいウィンドウを開く */
#module 
#const GETPATH_REMDIR 8
#deffunc open_new_window var app_, str path_, int width_, int height_
	if path_ = "" {
		ttl  = "untitled"
	}
	else {
		ttl  = getpath( path_, GETPATH_REMDIR )
	}

	gtk_application_window_new@  app_
	win  = stat
	gtk_window_set_title@  win, ttl
	gtk_widget_set_size_request@  win, width_, height_
	gtk_widget_show_all@  win
	return win
#global

*_main
	// argc, argvを取得
	mes "args"
	getmainargs argc_, argv_, env_, sinfo_

	// init app
	mes "init"
;G_APPLICATION_HANDLES_COMMAND_LINE
;
;G_APPLICATION_FLAGS_NONE
	gtk_application_new  APPID, G_APPLICATION_HANDLES_OPEN
	app_  = stat
	register_options  app_
	width_  = DEF_WIN_WIDTH ; オプション引数用
	height_  = DEF_WIN_HEIGHT ; オプション引数用

	newclbk3  cb_app_handlelocaloptions, 3, *on_app_handlelocaloptions, CLBKMODE_CDECL
	newclbk3  cb_app_startup, 2, *on_app_startup, CLBKMODE_CDECL
	newclbk3  cb_app_commandline, 3, *on_app_commandline, CLBKMODE_CDECL
	newclbk3  cb_app_open, 5, *on_app_open, CLBKMODE_CDECL
	newclbk3  cb_app_activate, 2, *on_app_activate, CLBKMODE_CDECL
	newclbk3  cb_app_shutdown, 2, *on_app_shutdown, CLBKMODE_CDECL

	g_signal_connect_data  app_, "handle-local-options", cb_app_handlelocaloptions, NULL, NULL, NULL
	g_signal_connect_data  app_, "startup", cb_app_startup, NULL, NULL, NULL
	g_signal_connect_data  app_, "command-line", cb_app_commandline, NULL, NULL, NULL
	g_signal_connect_data  app_, "open", cb_app_open, NULL, NULL, NULL
	g_signal_connect_data  app_, "activate", cb_app_activate, NULL, NULL, NULL
	g_signal_connect_data  app_, "shutdown", cb_app_shutdown, NULL, NULL, NULL

	// start app
	mes "start"
	g_application_run  app_, argc_, argv_
	status  = stat

	// end app
	g_object_unref  app_
#ifdef _debug
	mes "exit " + status : stop
#endif
	end status

*_signal_handlers

*on_app_handlelocaloptions
	mes "signal: handle-local-options"
	clbkargprotect  args
	options  = args( 1 )

	// --version
	g_variant_dict_contains  options, OPTION_VERSION
	if stat {
		mes NAME_APP + " version " + VERSION_APP
		return 0 ; exit
	}

	// --width
	g_variant_dict_lookup  options, OPTION_WIDTH, "i", varptr( optarg )
	if stat {
		width_  = optarg
		mes OPTION_WIDTH + ": " + width_
	}

	// --height
	g_variant_dict_lookup  options, OPTION_HEIGHT, "i", varptr( optarg )
	if stat {
		height_  = optarg
		mes OPTION_HEIGHT + ": " + height_
	}
	return -1 ; don't exit

*on_app_startup
	mes "signal: startup"
	clbkargprotect  args
	return

*on_app_open
	mes "signal: open"
	clbkargprotect  args
	app  = args( 0 )
	cnt_files  = args( 2 )
	dupptr  gfiles, args( 1 ), cnt_files * 4

	repeat cnt_files
		g_file_get_path  gfiles( cnt )
		ptr_path  = stat
		dupptr  path, ptr_path, 1, VARTYPE_STR
		open_new_window  app, path, width_, height_
		g_free  ptr_path
	loop
	return

*on_app_commandline
	mes "signal: command-line"
	clbkargprotect  args
	cmdline  = args( 1 )

	g_application_command_line_get_arguments  cmdline, varptr( argc_ )
	p  = stat
	dupptr  argv, p, argc_ * 4
	repeat argc_
		dupptr  arg, argv( cnt ), 1, VARTYPE_STR
		mes s( arg )
	loop
	return 0

*on_app_activate
	mes "signal: activate"
	clbkargprotect  args

	open_new_window  args( 0 ), "", width_, height_
	return

*on_app_shutdown
	mes "signal: shutdown"
	clbkargprotect  args
	retur

最終更新時間:2016年09月29日 06時21分55秒