提案:解説表示画面にURLリンク機能
お疲れ様です。
解説表示画面にURLリンク機能を検討します(六号室の幽霊船よりお借りしました)。
現在の仕様?上の大きな問題点
- 解説表示画面で表示テキストが遷移する時、キャレットがURL上にあると、
Clear
メソッドを作動させても、リンク情報が次のテキスト全文に引き継がれてしまいます。 これを避けるためキャレットを冒頭に移動する処理 (もし冒頭がURLの場合は無理矢理頭に空白を挿入しています。末尾がURLのReadmeはあっても冒頭がURLのReadmeはまずない、と思うのですが。どうでしょう)を入れていますが、 もっと賢いやり方はないものかと思っています。 - 右クリックメニューが日本語ではなく英語になってしまいます。
以上より、今マージするにはちょっと厳しいのではないかと思います。
小さな問題点
- 右端で折り返した場合の行間と、改行した時の行間が異なります。
- リンクの色は暫定的に橙色にしていますが、何色が見やすいでしょうか。
他、不具合報告
テストしてて気付きましたが、
proxi様「城塞都市リムリック」の著作権情報のテキストが途中で切れます(これは現行PyCardWirthPy 1.1 Build: 2016-09-29 20:59:21
もです)。
調べてみると、他のテキストはShift-JISなのに対し、このファイルだけUTF-16(BOMあり)になってます。
UTF-8にすると現行Pyも、この検討内容も正常に動作します。
調べてみたところ、どうも、例えばscenarioselect.py
の2468行目などの
with open(fpath, "r") as f:
data = f.read()
f.close()
が、UTF-16のファイルには正常に動作しないようです。どうしたものでしょうか。
やったこと
例によって、私家改造版に搭載をしております。
- コミット:https://bitbucket.org/tachi_gigas/cardwirthpy-reboot-lessor/commits/31fecd76e4e1f06b5fc8bed7c21c8c6048f8ea9d
- 実行ファイル:https://sites.google.com/site/tachigigas1/cwpy
年齢認証が入る件と、設定ファイルを共有しない件についてはご注意下さい。
採用・不採用どちらでも構いませんで、もちろんk4nagatsuki様によるフォント変更に見られるような原形を留めないミラクルな実装も想定済みです。
皆様の忌憚なきご意見・バグ報告をお待ちしております。
Comments (30)
-
reporter -
repo owner これは、前からほしかったけど手を付けられなかったやつ。すばらしいです。
前者の問題はwxPythonのバグっぽいですねぇ。
- 右クリックメニューが日本語ではなく英語になってしまいます。
これは実はシナリオ終了時に出てくるデバッグ情報にも同じ問題があります。仕方ないと割り切ってしまってもいいんじゃないかなぁと個人的には思います。もしどうしても気になるのなら、たぶん独自の右クリックメニューを設定してしまえばデフォルトのものを上書きできるかと思います(試していない)。
UTF-16で切れるのはなんなんでしょう。Python処理系の問題の気もしますが……。
-
reporter 前者について。正直wxPythonのバグかと思います。文字色は初期化されるのに下線とリンクは初期化されません。一体何が初期化されるのか、これもうわかんねぇな、です。
後者について。まぁ英語と言ってもCopyとSelect Allしか有効にならないし、見れば分かる(はず、ですよね?)英語ですので、いいっちゃあいいのですが。確かにデバッグログも右クリックが英語ですね。つーかこれRichTextCtrlですね。今まで何で気付かなかったんだ。ばかか。気付いてたら1.0に間に合ったんだぞ。
…。右クリック情報をオーバーライドできたら、というかコピーと全て選択だけ表示できたら、UI的に幸せになれます。できるかどうかは別にして。
UTF-16の件は、どうもPythonのバグのような気がします。
お体、ご自愛なさってください。
-
reporter 右クリックの日本語化と項目を絞りました。
- やったこと:https://bitbucket.org/tachi_gigas/cardwirthpy-reboot-lessor/commits/ac004b952b0452b5cbd436e9da6f3e6e6cc6dac4
- 実行ファイル:https://sites.google.com/site/tachigigas1/cwpy
実現できたはいいものの、今度はキー入力によるコピーやすべて選択が反応しなくなり、結果ちょっとしつこいコードになってしまいました。引き続き様子を見ます。
-
reporter 選択してない状態でコピーを無効化させるのを忘れてました…。実行ファイルは上記通りです。
-
お疲れ様です。
CardWirthTG 1.1Build: 2016-10-02 00:09:28
を少し触らせて頂きました。 地味ながら良い機能ですね。コードについてはまだ人様にどうこう言えるレベルに達しておらず、気付いた点のみで恐縮ですが
- URLをコピーしたい時、ドラッグしてURLの上でボタンを離すとクリック扱いでブラウザが起動してしまう
- 「だいしょうのいし」(ベクターで入手)で著作権表記の空白が一部文字化けしている?(Py最新版では起こらないのを確認)
前者については自分が_神経質すぎるだけでどうでもいいかもしれません。そのときはスルーで。
-
reporter テストありがとうござます。やはり第三者の目は大事ですね。実行ファイルは上記通りです。
- URLの上でドラッグするとブラウザが起動してしまう
仕様かと思ってましたが、文字列選択中はブラウザ起動しない事で解決できる事に気付きました。
- UTF-8の文字化け
特定のケースで発生しているので正規表現が甘いかと思いましたが、URLとそれ以外に分割した文字列ごとにエンコード判定した事が誤りのようです。従来通り全体で判定するようにしましたが、無学なため、またしつこいコードになってしまいました。
-
修正を確認しました。こちらこそ対処ありがとうございます。
自分の環境ですとTGの場合、Py1.1と比較してドラッグやホイールでのスクロール速度がかなりもっさりしてしまうようです。(
TG Build: 2016-09-29 22:26:46
とTG最新版で確認) しかしこれはある程度は機能とトレードオフなのかもしれませんね。 -
reporter 動作を比べましたが、実際にホイール等のスクロール量が異なります。現行Pyは行単位(ホイールならコントロールパネルのマウスの項目で設定できる行数。多分デフォルトでは一回3行)でスクロールしますが、今回はピクセル単位でスクロールするため、そうはいきません。しかし僕が無学なためか、スクロール量を指定したり、実際にスクロールさせるメソッドが見当たらないため、例えスクロールイベントをオーバーライドしても、現行Py並の速度にするのは難しそうです。(少なくとも今の僕には)
何か設定はありそうな気がするのですが…。
-
reporter 恐れ入りますが、少々気の迷いが発生しまして、右クリックにGoogle検索を追加しました。 もしかしたら、素材サイトが消えた時に便利かも知れません。実行ファイルや注意点は同じです。
検索エンジンを選択できた方がいいかも?それは追い追いで、と思ってます。
-
reporter UTF-16の問題について、思う所があったので試したのですが、
scenarioselect.py
にてReadmeテキストを読み込む際、open(fpath, "r")
ではなくopen(fpath, "rb")
で読み込むと正常に動作しました。果たしてこれでPull Requestしていいのか少し悩む、後味の悪い内容です。 -
repo owner b
の有無はテキストモードとバイナリモードの切り替えで、具体的には改行コードの変換の有無ですね。この場合、読み込んだあとに文字コードチェック・変換をかけているので、バイナリで読み込むのが正解だと思います。スクロールバーは、
SetScroll*
辺りのメソッドが設定に使えると思います。 -
reporter では、pull request #1593 をしました。お帰りの所ご多忙かと存じますが、よろしくお願いします。
-
reporter コミット内容を間違えたため、コミットログが現行Py全体との差分になってしまいました。実行ファイルの場所や注意点は同じです。
スクロール量を
dialog\settings.py
に合わせてみました。これで様子を見て問題や要望がなければdefaultブランチに持ってってPull Requestしようかと思います。 -
reporter ちょ、ちょっと取り下げを…。
これ
SetScrollRate
で値を設定しても変わってないですね…。 -
reporter https://forums.wxwidgets.org/viewtopic.php?t=39331
どうもスクロール幅は現在固定のようです。この件に関しましては現時点では暗黒騎士様にごめんなさいするしかありません。
-
あ、いえ自分は報告しただけですし、むしろ力になれず申し訳ないです。ハードコードされるということはWX側を書き換えなければならないんですね(?)。
-
reporter 恐れ入ります。実行ファイルの場所や注意点は同じです。
調べました所、マウスホイール時はイベントを自作すればよかったのです(とりあえず移動量を4に設定しています)が、ドラッグ時はどんなイベントでキャッチすれば良いのかで詰まっています。
-
おぉ、速くなってます。もうこれで良いんじゃないでしょうか(
見当外れかもですが、LEFT_DOWNでマウス座標取得してウインドウの外なら相対的にスクロール速度を上げていくみたいな方向でしょうか… http://blawat2015.no-ip.com/~mieki256/diary/201506251.html
-
repo owner 手許で試しましたが、ドラッグでもスクロール関係の設定は効かないようですね。
となるとやはり自前で処理するしかないようです。マウス移動のイベントは
wx.EVT_MOTION
ですが、これは左ボタンを押した状態であればマウスがウィンドウ外へ出ても発生し続けます。このイベントをキャッチして、左ボタンが押されているかチェックし、その後ポインタが上か下へ外れていれば距離に応じてスクロールすればいいのではないかと思います。 -
reporter お二方のご助言、誠に痛み入ります。
いずれの方法でも
wx.EVT_MOTION
を捕まえる話になりますが、 URLリンクにマウスを持ってきてもカーソルが変わらないというUI的な問題が発生しまして、 僕の判断では申し訳ないですがちょっと現実的ではないと思います。 -
repo owner イベントオブジェクトは
Skip()
を実行しないと後続のイベントハンドラの処理が実行されません。カーソルの問題はそのせいではないでしょうか。 -
reporter ありがとうございます。
Skip()
の件は初耳でした。これで速度は改善できたかと思います。 -
repo owner 反応が遅くなってすみません。
ホイールもドラッグも快適に動いていると思います。位置による速度差のせいか、マウスポインタを動かすとドラッグで一瞬引っかかりが生じたような感じを受けるのですが、快適さを損なうほどではありません。
しかしスクロール後に表示が結構乱れますね。強制スクロールをかけた後は
Refresh
なりするべきなのでしょうか。あとついでですが、コピー・貼り付けとGoogle検索の間にはセパレータを入れた方がいいかと思います。
-
reporter 恐れ入ります。貼り付けではなく、コピー・すべて選択とGoogle検索の間ですかね。正直ぐぐってセパレータ入れる事も出来ると知りました。
ご指摘の内容を修正しました。確かにスクロール時の乱れがなくなりました。ありがとうございます。
-
repo owner ありがとうございます。これでほとんど問題なくなった感じでしょうか。
Pull Requestをいただければすぐにでもマージさせていただきますが、いかがでしょう。
-
reporter pull request #1606
では、お手数ですが、よろしくお願いします。
-
repo owner マージしました。
いつも素敵な新機能を実装していただいてありがとうございます。今後もぜひよろしくお願いします。
-
reporter お粗末様でした。
こちらこそよろしくお願いします。
-
reporter - changed status to resolved
- Log in to comment
経緯と付録
解説画面からホームページに飛べるようになれば、シナリオ製作において素材探しが格段に楽になるのでは?という思いが、実はかなり昔からありましたが、 その実現手段が全く思いつかず、wxPythonのリファレンスを眺めては閉じ、眺めては閉じ、を繰り返す日々が続いておりました。 しかし、最近になってようやく
TextCtrl
のサブクラスであるRichTextCtrl
があると知り、 リッチテキストには文中にリンクを設定できますので、試験的に実装をしたものです。メールアドレスやTwitterアカウントへの対応も考えられますが、僕の考えとしてはメールアドレス対応はちょっと乗り気ではありません。 そうなるとTwitterアカウントの判定も多くのケースで誤爆が考えられるため、やめたいところです。
今日はここまでにします。急ぐ話ではないので、まったり考えます。