Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

検索ダイアログと置換ダイアログを横方向にリサイズ出来るように変更 #1706

Draft
wants to merge 2 commits into
base: master
Choose a base branch
from

Conversation

beru
Copy link
Contributor

@beru beru commented Jul 13, 2021

PR の目的

検索ダイアログと置換ダイアログを横方向にリサイズ出来るように変更するのが目的です。

カテゴリ

  • 仕様変更

PR の背景

テキストボックスに入力する文字列が長くなった場合に見切れて表示されるので確認がしにくいかもしれないと思って対策を入れました。

PR のメリット

テキストボックスに入力する文字列が長い場合にダイアログの横幅を広げる事で確認がしやすくなる。

PR のデメリット (トレードオフとかあれば)

ダイアログをリサイズ後にダイアログを閉じて開きなおすとサイズが元に戻ってしまう

仕様・動作説明

変更前は検索ダイアログと置換ダイアログのリサイズが行えませんでした。

変更後は横方向にリサイズ出来るようになります。

PR の影響範囲

CDialog::DispatchEvent から呼び出す仮想関数を追加しました。派生クラスでそれらの仮想関数を override する事で該当機能を実現しています。

テスト内容

テスト1

手順

関連 issue, PR

参考資料

https://devblogs.microsoft.com/oldnewthing/20031107-00/?p=41923

@beru beru added the specification change ■仕様変更 label Jul 13, 2021
@AppVeyorBot
Copy link

Build sakura 1.0.3866 completed (commit 8e0144094f by @beru)

@sanomari
Copy link
Contributor

先に #687 を完了させるべきと思います。

@berryzplus
Copy link
Contributor

個人的には、要らないと思います。

サクラエディタには「標準にない検索機能」が実装されているので検索ダイアログがカスタム実装されていますが、検索ダイアログはもともとWindows標準に存在しています。個人的には現状のフルカスタマイズを、標準との機能差分のみを実装するシンプルな形に整理していく方向にしたいです。

このPRは「フルカスタマイズの機能を増やそうぜ!」なので逆方向ですね。


横方向にリサイズ可能とする
リサイズなので、日本語でいう「伸縮」を考えておかないといかんです。

  • 「伸ばす」に関してはこの対応で良いと思います。
  • 「縮める」に関しては考慮が入ってないと思います。
    最小幅を決め打ってやればよいと思いますが、現状は「考慮なし」に見えます。

見切れ対策の方法論
方法論は大きく分けて2つあります。

  • 表示幅を拡げる 「幅が足りない」に対して「拡げる」のは妥当な作戦です。
  • 折り返し表示する 必要かどうかは別にして、Webではよく採られる作戦です。

windows標準の検索ダイアログはどちらにも対応していません。
vscodeの検索ペインは両対応です。

「対応しない」と「両対応する」の二択で考えるのがいいんじゃないかと思います。
※当面「必要なし」がぼくの見解ですが。

@beru
Copy link
Contributor Author

beru commented Jul 15, 2021

個人的には、要らないと思います。

実は自分も検索ダイアログと置換ダイアログに関して言えば不要な気はします。普通はそんな長い文字列で検索とか置換しないですし…。じゃあなんで実装したのかというとGrepとGrep置換のダイアログに関して同様の対処を行いたいので下準備的に行いました。GrepとGrep置換のダイアログの検索場所(フォルダのパス)は場合によっては結構長くなりがちなので、見切れないようにもう少し横に長く表示させたい場合があるかもしれません。

とはいえダイアログの横幅を可変にしないでも、テキストボックスの表示が見切れている場合にマウスカーソルを置いたらツールチップで表示するという対策とかで十分なのかもしれません。

サクラエディタには「標準にない検索機能」が実装されているので検索ダイアログがカスタム実装されていますが、検索ダイアログはもともとWindows標準に存在しています。

検索ダイアログはもともとWindows標準に存在しているというのは認識していませんでしたが FindTextReplaceText WindowsAPI の事ですかね?

https://docs.microsoft.com/en-us/windows/win32/api/commdlg/nf-commdlg-findtextw
https://docs.microsoft.com/en-us/windows/win32/api/commdlg/nf-commdlg-replacetextw

なお Comdlg32.​dll はもう拡張されないでしょうね。Vistaで後継のCommon Item Dialogが登場しましたが、検索や置換への対処ではないですね。カラーピッカーやフォント選択も古いままです。個人的にはここらへんのUIはソフトによって色々な味付けがあると思うので標準品でなくてもよいと思います。もちろん標準品で良いものがあればそれを使いたいですが。

Microsoftは今はWinUI 3を開発してますが一体どうなることやら…。

個人的には現状のフルカスタマイズを、標準との機能差分のみを実装するシンプルな形に整理していく方向にしたいです。

あまり使われていない機能ならば削減する方向性でも良いと思います。もしくはデフォルトではそのオプションを非表示とかですね。

このPRは「フルカスタマイズの機能を増やそうぜ!」なので逆方向ですね。

横方向にリサイズ可能とする
リサイズなので、日本語でいう「伸縮」を考えておかないといかんです。

* 「伸ばす」に関してはこの対応で良いと思います。

* 「縮める」に関しては考慮が入ってないと思います。
  最小幅を決め打ってやればよいと思いますが、現状は「考慮なし」に見えます。

処理内容を読み取りにくいと思いますが、自分なりに考慮はしているつもりです。WM_SIZING のハンドラの OnSizing メソッドでデフォルトサイズ(WM_INITDIALOG メッセージのハンドラの OnInitDialog で取得しているウィンドウのサイズ)より小さくならないように対処を加えています。

見切れ対策の方法論
方法論は大きく分けて2つあります。

* 表示幅を拡げる 「幅が足りない」に対して「拡げる」のは妥当な作戦です。

* 折り返し表示する 必要かどうかは別にして、Webではよく採られる作戦です。

windows標準の検索ダイアログはどちらにも対応していません。
vscodeの検索ペインは両対応です。

「対応しない」と「両対応する」の二択で考えるのがいいんじゃないかと思います。
※当面「必要なし」がぼくの見解ですが。

折り返し表示は今のダイアログ方式ではちょっと実現が難しいですね。というかその発想がありませんでした。

なお検索と置換に関してはVisual StudioもVSCodeもダイアログを表示するのではなくてエディタ領域の右上に小さいUI領域が出ます。VSCodeではこれの事を Find Widget というようです。

https://code.visualstudio.com/docs/editor/codebasics#_find-and-replace

慣れのせいかこの方式の方が総合的に優れているかなと今は感じています。サクラエディタは多数のオプションをラベル付きのコントロールで表示しているので、面積を取りますね。GrepとGrep置換は特にそうです。

VSCodeはデフォルトで表示するオプションを絞ってアイコン表示で済ませているので面積を取りません。>... アイコンを押した時にUIが広がって追加のオプション指定を行うような作りになっていて、デフォルトではあまり面積を取らない表示になっているのでシンプル感があります。

じゃあサクラエディタの検索や置換やGrep, Grep置換ダイアログのレイアウトを大きく変えたいのかというと、色々大変そうだし自分はやりたくはないなぁというのが正直なところです。

@berryzplus
Copy link
Contributor

処理内容を読み取りにくいと思いますが、自分なりに考慮はしているつもりです。WM_SIZING のハンドラの OnSizing メソッドでデフォルトサイズ(WM_INITDIALOG メッセージのハンドラの OnInitDialog で取得しているウィンドウのサイズ)より小さくならないように対処を加えています。

これは見落としでした。スミマセン。

検索ダイアログはもともとWindows標準に存在しているというのは認識していませんでしたが FindTextReplaceText WindowsAPI の事ですかね?

そうです。CのAPI関数は既にdeprecatedですが、比較的最近(vistaが出たときくらい)に新しいCOMインターフェースが提供されて置き換わったと思っています。

なお検索と置換に関してはVisual StudioもVSCodeもダイアログを表示するのではなくてエディタ領域の右上に小さいUI領域が出ます。VSCodeではこれの事を Find Widget というようです。

あれ?visual studio はダイアログが出るような・・・(Ctrl + Shift + F
VSCodeはHTML+javascriptで作ってるらしいので、改行表示とか余裕ですよね。

リサイズ可能にすると、狭い領域に表示させるオプション項目のUIデザイン変更とかの話をしないといけない気がしていて、そのへんをやりだすと収集がつかないのかなぁと思っていました。

最近の流行(?)からするとチェックボックスとかラジオボタンとかは使わない方向な気がします。
なんかスイッチみたいなUIを使ったりしますよね。

Grep/Grep置換のUIは、ここ一年のうちに何度か変えたような気がするので、
「もうちょっといい感じに」という調整を続けて入れてみてもよいと思います。

@beru
Copy link
Contributor Author

beru commented Jul 15, 2021

検索ダイアログはもともとWindows標準に存在しているというのは認識していませんでしたが FindTextReplaceText WindowsAPI の事ですかね?

そうです。CのAPI関数は既にdeprecatedですが、比較的最近(vistaが出たときくらい)に新しいCOMインターフェースが提供されて置き換わったと思っています。

それらの WindowsAPI は deprecated 扱いではないですよ。
時代遅れで obsolete ですが、将来的にも互換性の為に無くならないと思います。

あとWindows Vistaから登場したCommon Item Dialogはファイルダイアログぐらいでそれ以外のコモンダイアログは置き換わってないです。

あれ?visual studio はダイアログが出るような・・・(Ctrl + Shift + F

Ctrl + Shift + F キー押しで表示されるそれは Find and Replace というタイトルで表示されるダイアログで Find in FilesReplace in Files のタブがありますが、サクラエディタでいうとGrep的な処理を行います。

Ctrl + F キーや Ctrl + Hキーを押すとエディタの右上に表示されるのが、サクラエディタでいう検索や置換相当かなと。

リサイズ可能にすると、狭い領域に表示させるオプション項目のUIデザイン変更とかの話をしないといけない気がしていて、そのへんをやりだすと収集がつかないのかなぁと思っていました。

そうなのでこのPRの実装では最小サイズは元のサイズにしています。もっと縮めて小さくしたいという思いには応えません。

最近の流行(?)からするとチェックボックスとかラジオボタンとかは使わない方向な気がします。
なんかスイッチみたいなUIを使ったりしますよね。

Windows 2000 : クラシックスタイル
Windows XP : Visual Style
Windows Vista, Windows 7 : Windows Aero
Windows 8 : フラットデザイン
Android : 2014年にGoogleがMaterial Designを提唱
Windows 10 : 2017年にMicrosoftがFluent Design Systemを発表(Windows 10のFall Creators Update(1709)で導入された

流れを追ってみました。Windowsの標準コントロールだとFluent Design Systemには対応出来ないですね。
Win UIなら大丈夫そうですが使った事無いのでよくわかりません。

Grep/Grep置換のUIは、ここ一年のうちに何度か変えたような気がするので、
「もうちょっといい感じに」という調整を続けて入れてみてもよいと思います。

そうですね。Grepダイアログなんかは表示サイズが大きいのでウィンドウの縦横サイズを縮められるようにしたいですね。あれ?でもそれは実装が大変そう…。

@sonarcloud
Copy link

sonarcloud bot commented Jul 18, 2021

@AppVeyorBot
Copy link

Build sakura 1.0.3869 completed (commit eb45c07634 by @beru)

@berryzplus
Copy link
Contributor

小話

Windows 2000 : クラシックスタイル
Windows XP : Visual Style
Windows Vista, Windows 7 : Windows Aero
Windows 8 : フラットデザイン
Android : 2014年にGoogleがMaterial Designを提唱
Windows 10 : 2017年にMicrosoftがFluent Design Systemを発表(Windows 10のFall Creators Update(1709)で導入された

Windows 2000 UXテーマ非対応(xp以降で「クラシックスタイル」と呼称される形式)
Windows XP 「Luna UI」(青いやつ、どっかの草原の絵が有名)
Windows Vista, Windows 7 「Aero Glass」(半透明のやつ)
Windows 8 「Modern UI」(ストアアプリ風)
Windows 10 「Aero Glass」(現行、黒モードに対応)

Windows 10のUIには別な呼称があるのかも知れないです。

@@ -22,6 +22,8 @@
#include "StdAfx.h"
#include <algorithm>
#include <memory>
#include <WinUser.h>
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

記憶が大分怪しいのですが、WinUser.hはwindows.hの一部なので、直接インクルードしないもののような気がするのですが、どうでしょうか。
インクルード順とかの関係によっては、問題になるかもしれないので。

@usagisita
Copy link
Contributor

少なくとも、英語版リソースのほうで、WS_THICKFRAMEの対応が漏れてる気がします。

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
specification change ■仕様変更
Projects
None yet
Development

Successfully merging this pull request may close these issues.

5 participants