Проблемы с обувью: буфер обмена и полоса прокрутки - PullRequest
2 голосов
/ 28 апреля 2009

В приведенном ниже коде есть (как минимум) две проблемы: кнопка Copy не обновляет буфер обмена, а edit_box не показывает вертикальную полосу прокрутки, когда это необходимо.

Shoes.app (:title => "Test", :width => 1000, :height => 600) do
  background "#DFA"
  stack :margin => 30 do
    flow do
      button "Paste" do
        @sql.text = clipboard
      end
      button "Copy", :margin_left => 15 do
        clipboard = @sql.text
        alert(@sql.text.length.to_s + " characters copied to clipboard.")
      end
    end
    stack :margin_top => 10, :width => "100%", :height => 500, :scroll => true do
      @sql = edit_box :width => "100%", :height => "100%"
    end
  end
end

Кнопка Paste правильно вставляет содержимое буфера обмена в edit_box. Если вы вносите изменения, а затем нажимаете Copy, в сообщении alert отображается правильное количество символов. Если вы снова нажмете Paste, исходное содержимое буфера обмена будет вставлено. Кнопка Copy никогда не обновляет буфер обмена правильно.

Кроме того, если вы сгенерируете больше строк, чем умещаете edit_box, путем редактирования или вставки, полоса прокрутки никогда не появится.

Любая помощь по этим двум вопросам будет высоко ценится. Моя среда - Windows XP, если это помогает.

ОБНОВЛЕНИЕ С ОТВЕТАМИ: Спасибо @Pesto за ответ на вопрос о буфере обмена. Оказывается, квалификация clipboard с app. или self. работает, как и ожидалось, для кнопок Paste и Copy.

После более глубокого изучения проблемы с полосой прокрутки, я понимаю, что edit_box не показывает полосу прокрутки. Полоса прокрутки в обуви применяется только к слотам (stack и flow), а не к отдельным элементам, таким как edit_box. Высота edit_box указана таким образом, чтобы она всегда помещалась в пределах stack, поэтому stack никогда не требуется полоса прокрутки. Это привело меня к обходному пути, который не идеален, но приемлем для моего приложения. Просто измените высоту edit_box на большее, чем необходимо, например "10000px", и появится полоса прокрутки. К сожалению, он есть, нужен он или нет, но это лучше, чем отсутствие полосы прокрутки. Я уверен, что некоторые дополнительные операции могут динамически изменить высоту edit_box, чтобы точно соответствовать содержимому, так что полоса прокрутки появится только при необходимости.

1 Ответ

1 голос
/ 28 апреля 2009

Прежде всего, простой: измените строку в кнопке «Копировать» на app.clipboard = @sql.text.

Во-вторых, что касается полосы прокрутки, это известная проблема в Windows XP. Я не вижу его в отчетах об ошибках на github, но последняя версия (r1229) все еще не имеет полосы прокрутки.

...