Project

General

Profile

機能 #1195

form DSLのfileselectでadd_shortcut_folderできる機能がほしい

Added by cob odo over 2 years ago. Updated over 2 years ago.

Status:
終了
Priority:
通常
Assignee:
Target version:
Start date:
2018-03-30
Due date:
% Done:

0%

プラグイン名:

Description

https://github.com/moguno/mikutter-uwm-hommage/blob/master/penguin.rb#L33 にあるようなことがDSLでできたら便利かなと思いました。

fileselect "ファイル", :filepath, shortcuts: [path1, path2]

のような感じで、オプション引数でディレクトリの一覧を取るようなイメージです。


Files

1195.patch (3.09 KB) 1195.patch cob odo, 2018-03-30 15:40
1195_2.patch (3.98 KB) 1195_2.patch cob odo, 2018-03-30 23:26
#1

Updated by toshi_a 初音 over 2 years ago

  • Target version changed from 3.6 to 3.7

ショートカットのディレクトリってこんな感じで生やせるんですね。確かにバンドルプラグインでも、skinディレクトリをコレクションに入れておいたり出来ると便利そうです

#2

Updated by cob odo over 2 years ago

↓のようなモンキーパッチで動きました(引数を追加してまわっただけ)

module Gtk::FormDSL
  def fileselect(label, config, _current=Dir.pwd, dir: _current, title: label.to_s, shortcuts: nil)
    fsselect(label, config, dir: dir, action: Gtk::FileChooser::ACTION_OPEN, title: title, shortcuts: shortcuts)
  end

  def dirselect(label, config, _current=Dir.pwd, dir: _current, title: label.to_s, shortcuts: nil)
    fsselect(label, config, dir: dir, action: Gtk::FileChooser::ACTION_SELECT_FOLDER, title: title, shortcuts: shortcuts)
  end

  def fsselect(label, config, dir: Dir.pwd, action: Gtk::FileChooser::ACTION_OPEN, title: label, shortcuts: nil)
    container = input(label, config)
    input = container.children.last.children.first
    button = Gtk::Button.new(Plugin[:settings]._('参照'))
    container.pack_start(button, false)
    button.signal_connect(:clicked, &gen_fileselect_dialog_generator(title, action, dir, config: config, shortcuts: shortcuts, &input.method(:text=)))
    container
  end

  def gen_fileselect_dialog_generator(title, action, dir, config:, shortcuts: nil, &result_callback)
    ->(widget) do
      dialog = Gtk::FileChooserDialog.new(title,
                                          widget.get_ancestor(Gtk::Window),
                                          action,
                                          nil,
                                          [Gtk::Stock::CANCEL, Gtk::Dialog::RESPONSE_CANCEL],
                                          [Gtk::Stock::OPEN, Gtk::Dialog::RESPONSE_ACCEPT])
      dialog.current_folder = File.expand_path(dir)
      shortcuts.to_a.select { |dir|
        !dialog.shortcut_folders.include?(dir)
      }.each { |dir|
        begin
          dialog.add_shortcut_folder(dir)
        rescue => e
          puts e
          puts e.backtrace
        end
      }
      dialog.ssc_atonce(:response, &gen_fs_dialog_response_callback(config, &result_callback))
      dialog.show_all
      false
    end
  end
end

書いてから思いましたが、uwm-hommageの https://github.com/moguno/mikutter-uwm-hommage/blob/master/penguin.rb#L33 周辺にあるfilterやpreview_widgetも欲しくなってきますね……

#3

Updated by toshi_a 初音 over 2 years ago

パッチにしてほしいンゴですね

#4

Updated by cob odo over 2 years ago

こういった感じです

#5

Updated by cob odo over 2 years ago

全部入りパッチも作ってみました。

mikutter上のコンソールで試すコードは↓こんな感じです。

shortcuts = ['/home/cobodo/repos/mikutter/core/skin/data']
filters = {
  'png' => ['png', 'PNG'],
  'jpg' => ['jpg', 'JPG', 'jpeg', 'JPEG'],
  'gif' => ['gif', 'GIF'],
}
Plugin[:gui].dialog "fileselect test" do
  fileselect "画像", :image_path, shortcuts: shortcuts, filters: filters, use_preview: true
end
  • shortcuts: ショートカットディレクトリのstringのリスト。
  • filters: keyが表示名、valueが拡張子のリストになっているHash。
  • use_preview: trueでプレビュー表示。デフォルトはfalse。

filtersはちょっと複雑すぎる気もします。

プレビューのサイズは256x256固定にしてありますが、設定で制御できるといいのかもしれません。

#6

Updated by toshi_a 初音 over 2 years ago

  • Status changed from 新規 to レビュー待ち
  • Assignee set to cob odo

topic/1195-fileselect-add-shortcuts-folder にpushしました。問題なければ develop にmergeしてください。

もらったパッチに次のような変更を加えています。

  • rdocを書いた
  • photoselectにも同様のオプションを提供
    • use_previewフラグがデフォルトでtrue
    • その環境でGdkPixbufが解釈できる全ての画像フォーマットをfiltersのデフォルト値に設定
#7

Updated by cob odo over 2 years ago

  • Status changed from レビュー待ち to 終了

ありがとうございました。問題なさそうでしたのでdevelopにmergeしました。
チケットは終了にしておきます。

Also available in: Atom PDF