◀ANSI版開発トップへ
  • 3847 画面分割
    • 3848 Re: 画面分割
      • 3851 Re2: 画面分割
        • 3852 Re3: 画面分割
          • 3853 Re4: 画面分割
          • 3854 Re4: 画面分割
            • 3855 Re5: 画面分割
              • 3858 Re6: 画面分割
                • 3859 Re7: 画面分割
                  • 3860 Re8: 画面分割
                    • 3861 Re9: 画面分割
                    • 3862 Re9: 画面分割
                      • 3863 Re10: 画面分割
                        • 3864 Re11: 画面分割
                    • 3873 Re9: 画面分割
                      • 3880 Re10: 画面分割
            • 3856 Re5: 画面分割
  • [3847] 画面分割 kiki 2005年02月20日 19:47

    お初にお目にかかります。kikiと申します。

    表題の件、「上下画面分割がもっとほしいなぁ・・・。」
    とエディタを探している最中、sakura殿に気づきました。

    どなたか、画面分割をもっと多くしていただくことって
    可能でしょうか?
    って、皆さんお忙しいでしょうから、無理ですよね。^^;

    で、ソースまで公開していただいているので、当方で改造
    へチャレンジしてみようかと思いました。

    基本的にCSplitterWndをいじればいいのですよね?
    でも、2×2以外だと、全面的に書き換えのような・・・。

    インターネットでソース共有するような開発を当方は経験
    が無いので、アドバイス等がありましたらお願いいたします。
    基本的には、個人的に修正して使用するつもりなのですが、
    アドバイスをいただけましたら、ソースもリターンさせてい
    ただきたいなと。
    > 今後のバージョンアップも楽しみになりますので。^^;

    いきなりの長文、失礼しました。
    • [3848] Re: 画面分割 げんた 2005年02月20日 20:54

      >表題の件、「上下画面分割がもっとほしいなぁ・・・。」
      >とエディタを探している最中、sakura殿に気づきました。
      >
      >どなたか、画面分割をもっと多くしていただくことって
      >可能でしょうか?
      なんと(個人的に)タイムリーな...

      現在はCSplitterWndで2x2の分割に1つのファイルを分割表示するようになっていますが,現在の構造では要望に応じきれないことが多々あるため,もっと柔軟に画面分割を制御できるように階層構造で管理するよう作り直し始めたところです.

      しかし,2週間経過してもあんまり進んでないです.今日も昼に起きたら頭痛がするので風邪薬飲んで寝てまた起きたところ...
      一応クラスの設計を大体終えてcoding始めて,不都合に気付いてまたクラスを考え直したりしています.

      ---
      CSplitterWndは現在4つのViewが既に準備済みとの前提で動いているので,これを単純に6つにするとViewも6つ用意しないといけません.そうするとあんまり分割していないときにもリソースを使ってもったいない.またViewの生成は起動時間に影響することがわかっています.

      初めはここを必要に応じて生成する形に出来ないかと思って始めたのですが,考え始めたらだんだん話が大きくなってしまいました.
      • [3851] Re2: 画面分割 げんた 2005年02月21日 01:22

        せっかくなので,クラス図とシーケンスをドキュメントにしてホームページに載せたいのですが,クラス図はまだしもシーケンス図をまともに書けるソフトって少ないんですよね.
        • [3852] Re3: 画面分割 kiki 2005年02月21日 23:50

          げんたさんへ
          なんとタイムリーな・・・(やっぱり個人的に)。^^;
          こりゃ、黙って待ってればよかったかな。^^;;;

          技術的な分割制御とViewの配置(ソースみてびっくり。すごいや!^^;)まで理解できたので、後は分割の仕様をどうしようかと・・・。
          でも折角MAX定義しているのに、結局0,1,2,3って書かれると、ちょっと手が出しづらかったです。まずはループって初期化してみました。^^;;;
          その後、DoSplitとOnSizeで最初の挫折・・・。_|~|○

          当方、縦分割の必要性を全く感じなのですが、そこはそれ、そういうご要望の方もいらっしゃるかと。
          2×2で、上下分割中に一気に両方のビューを左右分割というのは、固定長ファイルなどを編集しているときにアリですよね。
          でもそうすると、そのViewの管理どうしようとか・・・。
          (こっちだと、確かにViewをn個と固定で持ちたくなるの、よくわかります。)

          一方、指定したビュー内だけの分割(Muleや萌エディタはこっちか。)は、階層状態でViewを管理できればいいか。
          CObArrayとか使えると楽なのですが・・・。SDKにもある?
          実はMFCの人間なので、今一自信がなかったのです。^^;;;

          こうなると、画面分割というよりアルゴリズムの世界ですよねえ。
          CodeGuruとかでサンプル探してみたのですが今一。
          もっちょっと検討しよっと。

          ちなみに、クラス図とシーケンス図、Visioで書いて、PDFにして共用URLへのアップとかよくやってますけど?
          PDFは2・3千円のプリンタ経由ってソフト使ってます。
          Visio、MSになってからかなり怪しいソフトになりました。
          書くのはいろんなソフトがあるのですが、印刷に困るのが多くて。
          もっか、やっぱVisioくらいかなぁ・・・。(高いってのもありますね。いえ会社のマシンなのでとりあえず平気なのですが。^^;;;)
          あとは、以外とExcelの四角とコネクタのほうがいいか。
          ドキュメントも楽しみにしています。^^;

          げんたさん、改造を楽しみに待ってますね。^^;;;
          (なーんて。こちらでも検討してみます。いえ、検討だけが好きだったりとか。^^/)

          ※いかん。また長文になっていまいました。失礼をば。
          • [3853] Re4: 画面分割 kiki 2005年02月22日 00:07

            追伸
            そっか。まずは分割の仕様でした。
            1.ペインを跨いでエディタ全体を分割する。
            現在の2×2をそのまま拡張する。
            2.ペイン内で分割する。
            Arrayと階層でなら、管理はこっちの方が楽かな?
            3.いっそ、左右分割なしに!
            いや、ダメだな。

            やはり、2で考えられていますでしょうか?
            左右分割のメリットって、1の方がいいような・・・?

            ※1の場合、どうやりゃ、Viewの管理できるだろう?
            Viewをn×m配列を管理するArrayにしておく&分割ウィンドウを別途管理か!
            アリですね。^^b

            お体、ご慈愛くださいね。^^/
          • [3854] Re4: 画面分割 げんた 2005年02月22日 01:46

            昨日は勢いに任せて余計なことを書いてしまったと思っていたのですが,冷たい視線を浴びなくて済んで良かった

            現在考えたところまでwebに載せました.
            http://members.at.infoseek.co.jp/sakura_editor/devdoc/newlayout.html
            見て頂ければわかりますが分割について全く考えていません.というか,ドキュメントを書いてみると全然考えがまとまっていないことがわかっちゃいますね.(._.)φメモメモ
            分割は今あるものを直せば何とかなると思っていましたが容易ではなさそうな気がしてきました.

            以前マクロの拡張のときに半分ずつ作ってくっつけたことがあるので今回もその手と見せかけて全部任せる技...は無理か.

            ---
            Visioで図を書いている人が多いというのは@ITのアンケートでもありましたね.
            私はVisioが手元にないことと,フリーソフトはドキュメントもフリーな方がいいかと思いまして使い勝手と図のきれいさからumbrelloを使ってみました.Visioのようにパーツが多いわけではないのですが,シーケンスを思った通りに描ける感じが気に入りました.
            しかしフリーとは言ってもcygwinでX.orgとKDE立ち上げた時点でメモリ大量消費するので先日512MBメモリ増設していなければまともに使えなかったところです.PNGにExportするたびにクラッシュしますがExport完了後なので気にしないことにしています.(^^ゞ

            diaというフリーのドローツールも使ってみたことがあるのですが,最新Win32版だとクラス図を置いたとたんにハングアップするので今回はあきらめました(;_;)
            • [3855] Re5: 画面分割 kiki 2005年02月22日 10:50

              こんにちは。^^/
              >昨日は勢いに任せて余計なことを書いてしまったと思っていたのですが,冷たい視線を浴びなくて済んで良かった
              え、それは私の方かも・・・。^^;
              よろしくお願いいたします。m(_ _)m

              >分割は今あるものを直せば何とかなると思っていましたが容易ではなさそうな気がしてきました.

              基本はCSplitterWndを書き換えればいいかなとか思いました。直すというより、このクラスだけ丸ごと変えたほうが楽そうです。
              まあ、CSplitterWndへアクセスしている部分は考慮する必要がありそうですが。
              まだキッチリ見直してないのですが、CSplitterBoxがなぜにViewの中にあるのでしょう???
              これだけがよく理解できない・・・。もちょっと見てみよ。

              >私はVisioが手元にないことと,フリーソフトはドキュメントもフリーな方がいいかと思いまして使い勝手と図のきれいさからumbrelloを使ってみました.
              当方は仕事で使っているので、あまりこだわりがありませんでした。^^;
              最後はホワイトボード&マーカ&ファイルへ出力・・・。物理技になっていったりして。^^;
              • [3858] Re6: 画面分割 げんた 2005年02月22日 22:02

                >まだキッチリ見直してないのですが、CSplitterBoxがなぜにViewの中にあるのでしょう???
                CEditDocの中です.これは明らかに変なのでCEditWndに移動するつもり.(自分の手元では変更済み)

                >Array管理するには自分でクラスを作らないとダメでしょうか?
                >C++の基本で持っているもの+SDK(だとクラスじゃない?)以外は自分で作らないとダメかなぁ・・・?
                STLもC++の標準ライブラリです.
                std::vectorを使えばOK.
                しかしSTLを使うとバイナリサイズが膨らむ傾向にありますが,そこはあとから考えるか.

                --
                1つ困った機能が「同期スクロール」というものです.これは自分と対になるペインをスクロールさせるものなのですが「対になる」というのをどうやって表現するかでちょっと困っております.
                (こういったものをVisitorにして分離しようと画策中)
                • [3859] Re7: 画面分割 kiki 2005年02月22日 23:20

                  げんたさんへ
                  わーい。お返事いただけたぁ。^^
                  お待ちしておりました。

                  > STLもC++の標準ライブラリです.
                  > std::vectorを使えばOK.
                  > しかしSTLを使うとバイナリサイズが膨らむ傾向にあ
                  > りますが,そこはあとから考えるか.
                  >
                  (改行入れました。)

                  なるなる。φ(.. )

                  どひぃ~。template・・・。ざ、挫折。_|~|○

                  > --
                  > 1つ困った機能が「同期スクロール」というものです.
                  > これは自分と対になるペインをスクロールさせるものな
                  > のですが「対になる」というのをどうやって表現するか
                  > でちょっと困っております.
                  > (こういったものをVisitorにして分離しようと画策中)
                  (改行入れました。)

                  Visitor・・・。外部の人による改造?
                  仕様によっては。^^;

                  分割の仕方で、
                  先「re:4画面分割」追伸の仕様1.なら同じインデックス
                  のスクロールを制御すればいいかなと・・・。
                  仕様2.だと、逆に同期はとらなくてもいいかと・・・。

                  1.の場合
                  2×2の拡張で、n×mのViewを管理するvectorでいいの
                  かな?を用意しおいて、nVct, mVctとします。

                  nVct->行分のmVctを管理
                  mVct->1行内の列分のViewを管理
                  として、

                  nVctへmVct(1行分)で初期化。

                  「上下分割されました。」-> nVctを1行として追加。
                  (どこかの行のmVctをコピっとく。)
                  最後なら追加して、途中なら挿入。
                  「左右分割されました。」-> nVctの各mVctへ1列として
                  追加。最後なら追加して、途中なら挿入。
                  を繰り返し、どこかのスクロールが動かされたら、
                  nVct, mVctの同じインデックスのものを上下・左右に動かす。
                  というのはいかがなものかと。

                  ここまでは検討・・・。^^;

                  ---
                  ※仕様1・2がわかりづらい・・・。

                  仕様の1(ペインを跨いで、升目きっちり)
                  +---------------------------------+
                  | | | | |
                  |---+--------+-----------+--------|
                  | | | | |
                  | | | | |
                  |---+--------+-----------+--------|
                  | | | | |
                  | | | | |
                  +---------------------------------+
                  立て分割のメリットは、こちらの方があるかなと。
                  この場合は同期スクロールがほしくなります。

                  仕様の2(ペイン内で分割)
                  +---------------------------------+
                  | | | |
                  | +------+----+--------|
                  | | | |
                  | | | |
                  | | +--------|
                  | | | |
                  | | | |
                  +---------------------------------+
                  多分、げんたさんはこちらで検討されているのですよね?
                  こちらって、スクロールの同期のメリットがあまり無いか
                  と思います。
                  (私だけかなぁ・・・。^^;)

                  いつもながらに長文、許されて・・・。m(_ _)m
                  • [3860] Re8: 画面分割 げんた 2005年02月23日 06:07

                    >どひぃ~。template・・・。
                    使うだけなら
                    typedef std::vector ViewVector;
                    とかすれば,後は配列みたいに使えますよ.

                    >Visitor・・・。外部の人による改造?
                    >仕様によっては。^^;
                    VisitorというのはVisitorパターンのつもりで書きました.
                    googleで調べればわかりやすい解説が出てきますのでここではとりあえず割愛.

                    >どこかのスクロールが動かされたら、
                    >nVct, mVctの同じインデックスのものを上下・左右に動かす。
                    >というのはいかがなものかと。
                    なるほど.

                    >仕様の2(ペイン内で分割)
                    >多分、げんたさんはこちらで検討されているのですよね?
                    1つのファイルを分割するだけでなく,アウトライン解析のツリーを左に持ってきたりgrep結果を下に出したりといった用途にも使おうと思うとこっちかなぁと思ったので.仕様1の縦横分割も分割方法の1つとして組み込めば整合性は取れると思いますが,かなり欲張りすぎな予感.

                    未完成&当然全然テストしてないコード
                    http://members.at.infoseek.co.jp/sakura_editor/snapshot/2005-02-23_layout.tar.bz2
                    なんか参考になれば...
                    • [3861] Re9: 画面分割 kiki 2005年02月23日 08:17

                      > 使うだけなら
                      > typedef std::vector<CEditView*> ViewVector;
                      > とかすれば,後は配列みたいに使えますよ.

                      ありがとうございます。m(_ _)m
                      理屈は勉強したのですが、実地が無いので自信が・・・。^^;

                      >
                      > >Visitor・・・。外部の人による改造?
                      > >仕様によっては。^^;
                      > VisitorというのはVisitorパターンのつもりで書きました.
                      > googleで調べればわかりやすい解説が出てきますのでここではとりあえず割愛.
                      >

                      了解しました。^^ゝ

                      > >仕様の2(ペイン内で分割)
                      > >多分、げんたさんはこちらで検討されているのですよね?
                      > 1つのファイルを分割するだけでなく,アウトライン解析のツリーを左に持ってきたりgrep結果を下に出したりといった用途にも使おうと思うとこっちかなぁと思ったので.仕様1の縦横分割も分割方法の1つとして組み込めば整合性は取れると思いますが,かなり欲張りすぎな予感.
                      >

                      なるほど・・・。そちらまでお考えでしたか。ただ、EditView以外をペインに入れるには、エディット画面を小さくして入れることになり、それなりのメリットがほしくなりますね。「現在行とアウトラインの選択アイテムを常に同期する。」とか。^^;
                      この辺、使い勝手から考えると、決して盛り込み過ぎがいいとも言えません。
                      シンプルで使いやすく。なんて、偉そうなこと言えるものでもないので、ご検討いただければと思います。

                      > 未完成&当然全然テストしてないコード
                      > http://members.at.infoseek.co.jp/sakura_editor/snapshot/2005-02-23_layout.tar.bz2
                      > なんか参考になれば...

                      ありがとうございます。
                      時間を見て触らせていただきます。^^
                      楽しみです。

                      ではでは。
                    • [3862] Re9: 画面分割 kiki 2005年02月23日 19:49

                      > VisitorというのはVisitorパターンのつもりで書きました.
                      > googleで調べればわかりやすい解説が出てきますのでここではとりあえず割愛.
                      >

                      なるほどぉ・・・。勉強になりました。

                      > 未完成&当然全然テストしてないコード
                      > http://members.at.infoseek.co.jp/sakura_editor/snapshot/2005-02-23_layout.tar.bz2
                      > なんか参考になれば...

                      ssrc_2005-02-04のsakura_coreへ、いただいたコードを上書きでいいのでしょうか。
                      なにやらコンパイルエラーが出てしまって・・・。m(_ _)m

                      あと、一つ質問を。
                      CEditDocとCEditViewって、お互いに持ち合いしていませんか?
                      Javaだとコンパイル時にループってエラーになるのですが、C++は平気でしょうか?

                      すみません。うるさくて。m(_ _)m
                      • [3863] Re10: 画面分割 げんた 2005年02月24日 00:16

                        >なにやらコンパイルエラーが出てしまって・・・。m(_ _)m
                        だから未完成だと...コンパイラには読ませないでください(^^ゞ

                        >CEditDocとCEditViewって、お互いに持ち合いしていませんか?
                        >Javaだとコンパイル時にループってエラーになるのですが、C++は平気でしょうか?
                        CEditDocはCEditViewの実体を持っています.(現在)
                        CEditViewはCEditViewへのポインタを持っています.
                        (CEditDocもCEditViewのポインタを持つようにしようと思っています)

                        ポインタを使うだけならクラスの名前だけわかれば十分なので,
                        CEditViewの前に
                        class CEditDoc;
                        とあると思います.

                        引き合いに出されたJavaの「持ち合い」が何を表しているのかよくわからなかったのですが.Javaのオブジェクトは全て「参照」ですからいずれも持ち合ってはいない,ということではなくて?
                        • [3864] Re11: 画面分割 kiki 2005年02月24日 10:23

                          げんたさんへ
                          > >なにやらコンパイルエラーが出てしまって・・・。m(_ _)m
                          > だから未完成だと...コンパイラには読ませないでください(^^ゞ
                          >

                          しっけしっけ。^^;
                          (失礼しました。)

                          > CEditDocはCEditViewの実体を持っています.(現在)
                          > CEditViewはCEditViewへのポインタを持っています.
                          > (CEditDocもCEditViewのポインタを持つようにしようと思っています)
                          >
                          > ポインタを使うだけならクラスの名前だけわかれば十分なので,
                          > CEditViewの前に
                          > class CEditDoc;
                          > とあると思います.
                          >

                          なるほどぉ・・・。
                          ソースも大きいので深追いは禁物ということで。
                          (ちょっと「いいのかなぁ。」くらいでしたから。)

                          > 引き合いに出されたJavaの「持ち合い」が何を表しているのかよくわからなかったのですが.Javaのオブジェクトは全て「参照」ですからいずれも持ち合ってはいない,ということではなくて?

                          Javaの場合、参照とはいえポインタではないのでコンパイラが実体をチェックします。よって、他方のクラスを認識するには一度コンパイルを通っている必要があります。
                          その際、メンバまたはメソッド内のローカルにお互いのクラスを記載してしまうと、どちらもコンパイルが通らないという、「卵か鶏か」になってしまうのです。
                          これ、結構怖くて、Aclass <-> Bclassの場合だけでなく、Aclass -> Bclass -> Cclass -> Aclassとなっても、いつか通らなくなります。^^;
                          クラス図書くときに、ループにならないように気をつければ問題無いのですが。

                          閑話休題

                          vectorを教えていただいたことですし、当方で先「仕様の1」の検討してますね。
                          (後で、ソースを合わせるのは難しいと思いますけど・・・。)
                    • [3873] Re9: 画面分割 げんた 2005年03月12日 20:30

                      未完成&ファイル単位のコンパイルだけ試したコード(画面分割を除く)
                      http://members.at.infoseek.co.jp/sakura_editor/snapshot/2005-03-12_layout.tar.bz2

                      CEditWndにCWinLayoutRootを置いて,CEditViewをその管理要素にする
                      CEditViewHolderをCEditDocに置いてそこでドキュメント配下のViewを保持する.

                      CWinLayoutElement
                      ┣┳ CWinElmComposite
                      ┃┣━ CWinElmRoot
                      ┃┗━ (分割ウィンドウ予定地)
                      ┗┳CWinElmLeaf
                       ┣━CEditView
                       ┗━ (新たなView予定地)

                      全体のActiveViewはCEditWndで覚えておく.Document内の(Last)ActiveViewは従来通りCEditDocで覚えておく.
                      ActiveViewの変更はCEditDocがCEditWndに依頼.
                      • [3880] Re10: 画面分割 kiki 2005年03月19日 12:11

                        げんたさんへ
                        久しぶりに訪れてみると、おおっ、進まれていますね!
                        ^^

                        なるほどぉ!!!
                        ドキュメント読んだときは気づかなかったのですが、MFCの
                        Splitterと同じ(いや、こっちの方が上位だな。)感じの
                        クラスを想定されていたのですね。
                        もう、激しく納得。
                        CWinLayoutElementで画面分割とViewとを全部管理されるのか・・・。
                        やるなら、ここからでしたね。さすが。

                        画面分割が出来るその日を楽しみにしています。

                        ※当方、デバックできる環境はありますので、よろしければ
                        テストとかも協力させてください。

                        よろしくお願いいたします。
            • [3856] Re5: 画面分割 kiki 2005年02月22日 11:22

              またまた追伸
              Array管理するには自分でクラスを作らないとダメでしょうか?どうもMFCを使わない開発という場合、ライブラリの全体像が分からなくて・・・。
              C++の基本で持っているもの+SDK(だとクラスじゃない?)以外は自分で作らないとダメかなぁ・・・?