scieditor2 2 version 5

2019/08/20 11:48 by yamasyuh68
  :追加された部分   :削除された部分
(差分が大きい場合、文字単位では表示しません)
scieditor2  2
190801
- 行の文字数をまず取得して多かったらアウトライン行の可能性はないから読み込まずにパスする仕様にした
- お気に入りフォルダはタブにして検索窓を用意した
→ スプリッタの位置簿保存の仕方がわかんない┐('д')┌

---
190818
# 設定の保存
- ソフト全体の位置とスプリッタの位置を保存できるようにした
- スプリッタの保存関数はバイト列を返すのでバイナリになる。レジストリは嫌なのでiniにしたい、そうなると文字列への変換が必要だ。調べたら、QSettingsを使える、これはwinだとレジストリだと思ってたがiniにもできる。paythonのconfigparserでも良いんだろうけど、Qtの方が簡単そうだ。
- で、文字列変換で悩んだ。Qtを使ってるとバイトもQtの型だから単純にpythonの組み込み関数を使えなかったりする。QStringを使おうと思ったらQtの現在バージョンにはもう存在しないオブジェクトで、じゃあどうやれば良いのかと悩んだが、今回に関しては全く悩む必要は無く、文字列に変換せず、iniにバイト列を直接書き込めた
- こんな感じで書き込まれる
splittergeo=@ByteArray(\0\0\0\xff\0\0\0\x1\0\0\0\x2\0\0\x1\x64\0\0\x1\x41\x1\xff\xff\xff\xff\x1\0\0\0\x2\0)
- QSettingsは文字列とバイト列を気にしなくて良いみたい、便利だ!

```
#save
        fname=r'<fullpath>'
        setting=QSettings(fname,QSettings.IniFormat)
        byte=self.saveGeometry()
        setting.setValue('geometry',byte)
        setting.setValue('splittergeo',self.ui.splitter_2.saveState())

#load
        fname=r'<fullpath>'
        setting=QSettings(fname,QSettings.IniFormat)
        try:
            self.restoreGeometry(setting.value('geometry'))
        except:
            pass
        try:
            self.ui.splitter_2.restoreState(setting.value('splittergeo'))
        except:
            pass

```
- こんな感じで簡単、自動的に[gneral]で保存された
- 設定ファイルって初動時、ファイルやエントリが無い場合の書き方が難しい。エントリについては読み込むときに無い場合のデフォルト値を指定できるんだけど、今回はバイナリだからどう指定して良いのかわかんない┐('д')┌
- 仕方なくtryでpassすることにした

# 新規作成
- designerでメニューに項目を追加した
メニューのスロット設定がよくわからなかったけど何とか出来た
既存の関数 makenewtab をスロットにしたら、この関数はタブ名も引数にしてあったのでエラーではじかれた

----
190820
# 新規作成~保存

- デザイナで設定したスロットだと引数を渡せないので、元々の関数の引数を可変長引数とかキーワード引数にしようと考えてたんだけど、第2引数でFalseが来てた (・_・?)
なのでそれに応じて元の関数を少し書き換えただけで新規タブは作れた
- 保存も実装
新規文書は特定のフォルダに連番で保存するようにコーディング
日付+二桁連番の予定だったが日付が良くわからんのでとりあえず二桁連番にしておいた
既存ファイルの存在確認をwhileで回して連番部分をインクリメントしていく
- 新規文書は全てu-8で保存する仕様にした。これが一番安全。
基本的な保存ルーチンは実装済みだったので少し変えるだけで良かった
- メインからシンチラを呼ぶのは容易だが、シンチラでイロイロいじり出すと派生クラス化は必須で、既に派生クラスを作ってそれなりに機能は追加済みだった
保存も派生クラス内で実装していたものをほぼそのまま使ったが、これは本体の方が良いかもしれない
読み込みと保存はシンチラの機能は使わないしかなり管理的な部分だから
このルーチンはそっくり本体に移すか??
- ちなみに保存の際にシンチラの文書をもらうバッファ確保にctypesを使ってたが、python的にはこれが正解なのか疑問
もっとスマートなやり方があるように思うんだけど

## 読み込み~ブラウズ
- 連番で保存した文書の再利用のためには読み込みが必要、しかし連番だと内容がわからないのでプレビュー付きのブラウザを実装したい
スマホのメモ帳のリストビューのイメージで、最初の数行だけ見える感じにしたい
- デザイナでダイアログのクラス作成かな
ダブルクリックで本体のタブで開く
デルで削除、コピー切り取りはキーのショートカット
- スクロールエリアにフレームを配置してそこに動的にラベルを追加、そのラベルにテキストの冒頭n文字分をドローする
ラベルのダブルクリックで本体で開く
- ツリービューをタブにしてこのクラスを設定するか???
リストビューのアイコン表示もありかな、これだとソートできる、多分



----
---> [scieditor2 #](https://mimemo.io/m/zeXgworpjz4K0Ek)
      

190801

  • 行の文字数をまず取得して多かったらアウトライン行の可能性はないから読み込まずにパスする仕様にした
  • お気に入りフォルダはタブにして検索窓を用意した
    → スプリッタの位置簿保存の仕方がわかんない┐('д')┌

190818

設定の保存

  • ソフト全体の位置とスプリッタの位置を保存できるようにした
  • スプリッタの保存関数はバイト列を返すのでバイナリになる。レジストリは嫌なのでiniにしたい、そうなると文字列への変換が必要だ。調べたら、QSettingsを使える、これはwinだとレジストリだと思ってたがiniにもできる。paythonのconfigparserでも良いんだろうけど、Qtの方が簡単そうだ。
  • で、文字列変換で悩んだ。Qtを使ってるとバイトもQtの型だから単純にpythonの組み込み関数を使えなかったりする。QStringを使おうと思ったらQtの現在バージョンにはもう存在しないオブジェクトで、じゃあどうやれば良いのかと悩んだが、今回に関しては全く悩む必要は無く、文字列に変換せず、iniにバイト列を直接書き込めた
  • こんな感じで書き込まれる
    splittergeo=@ByteArray(\0\0\0\xff\0\0\0\x1\0\0\0\x2\0\0\x1\x64\0\0\x1\x41\x1\xff\xff\xff\xff\x1\0\0\0\x2\0)
  • QSettingsは文字列とバイト列を気にしなくて良いみたい、便利だ!
#save
        fname=r'<fullpath>'
        setting=QSettings(fname,QSettings.IniFormat)
        byte=self.saveGeometry()
        setting.setValue('geometry',byte)
        setting.setValue('splittergeo',self.ui.splitter_2.saveState())

#load
        fname=r'<fullpath>'
        setting=QSettings(fname,QSettings.IniFormat)
        try:
            self.restoreGeometry(setting.value('geometry'))
        except:
            pass
        try:
            self.ui.splitter_2.restoreState(setting.value('splittergeo'))
        except:
            pass

  • こんな感じで簡単、自動的に[gneral]で保存された
  • 設定ファイルって初動時、ファイルやエントリが無い場合の書き方が難しい。エントリについては読み込むときに無い場合のデフォルト値を指定できるんだけど、今回はバイナリだからどう指定して良いのかわかんない┐('д')┌
  • 仕方なくtryでpassすることにした

新規作成

  • designerでメニューに項目を追加した
    メニューのスロット設定がよくわからなかったけど何とか出来た
    既存の関数 makenewtab をスロットにしたら、この関数はタブ名も引数にしてあったのでエラーではじかれた

190820

新規作成~保存

  • デザイナで設定したスロットだと引数を渡せないので、元々の関数の引数を可変長引数とかキーワード引数にしようと考えてたんだけど、第2引数でFalseが来てた (・_・?)
    なのでそれに応じて元の関数を少し書き換えただけで新規タブは作れた
  • 保存も実装
    新規文書は特定のフォルダに連番で保存するようにコーディング
    日付+二桁連番の予定だったが日付が良くわからんのでとりあえず二桁連番にしておいた
    既存ファイルの存在確認をwhileで回して連番部分をインクリメントしていく
  • 新規文書は全てu-8で保存する仕様にした。これが一番安全。
    基本的な保存ルーチンは実装済みだったので少し変えるだけで良かった
  • メインからシンチラを呼ぶのは容易だが、シンチラでイロイロいじり出すと派生クラス化は必須で、既に派生クラスを作ってそれなりに機能は追加済みだった
    保存も派生クラス内で実装していたものをほぼそのまま使ったが、これは本体の方が良いかもしれない
    読み込みと保存はシンチラの機能は使わないしかなり管理的な部分だから
    このルーチンはそっくり本体に移すか??
  • ちなみに保存の際にシンチラの文書をもらうバッファ確保にctypesを使ってたが、python的にはこれが正解なのか疑問
    もっとスマートなやり方があるように思うんだけど

読み込み~ブラウズ

  • 連番で保存した文書の再利用のためには読み込みが必要、しかし連番だと内容がわからないのでプレビュー付きのブラウザを実装したい
    スマホのメモ帳のリストビューのイメージで、最初の数行だけ見える感じにしたい
  • デザイナでダイアログのクラス作成かな
    ダブルクリックで本体のタブで開く
    デルで削除、コピー切り取りはキーのショートカット
  • スクロールエリアにフレームを配置してそこに動的にラベルを追加、そのラベルにテキストの冒頭n文字分をドローする
    ラベルのダブルクリックで本体で開く
  • ツリービューをタブにしてこのクラスを設定するか???
    リストビューのアイコン表示もありかな、これだとソートできる、多分

---> scieditor2 #