Повторное подключение страниц к ноутбуку в GTK # - PullRequest
10 голосов
/ 30 июня 2010

Я использую виджет «Блокнот», чтобы получить представление файла с вкладками, и я добавил код, позволяющий отсоединять страницы от существующего Блокнота, который порождает новое окно с отдельным Блокнотом, содержащим только эту страницу. Однако мне бы хотелось иметь возможность перемещать страницы между несколькими ноутбуками.

Делегат Notebook.WindowCreationHook дает мне записную книжку, из которой получена страница, виджет страницы и координаты x и y, на которые она была сброшена, но я не знаю, как определить, на какую записную книжку она была отброшена, если таковая имеется , Есть ли встроенный механизм для этого присоединения, или я должен идти по координатам? Если мне нужно использовать координаты, как лучше их взять и вернуть виджет «Блокнот»? При необходимости я могу сохранить список записных книжек, которые у меня есть, но даже тогда код, чтобы выяснить, какой из них будет немного сложным (принимая во внимание z-порядок и все эти забавные вещи).

1 Ответ

3 голосов
/ 07 июля 2010

Я решил пойти по собственному совету (за который вы проголосовали -1, и я удалил его, так как он на самом деле не отвечает на вопрос), поэтому здесь я снова рискую своей репутацией.С кодом:

http://uplink.kicks -ass.net / ~ radu / GTK_Sharp_Notebook /

По указанному выше адресу вы найдете два архива одной и той же вещи (так какЯ не знаю, какой из них вы предпочтете).В архивах есть код, который я написал сегодня, и который делает это:

Главное окно содержит Блокнот с тремя вкладками, каждая вкладка имеет случайный элемент пользовательского интерфейса (кнопка, календарь и флажок).Вы можете перетащить вкладки за пределы основного окна.Когда вы отбрасываете их за пределы главного окна, создается новое окно, в котором содержится записная книжка.Вкладка, которую вы только что уронили, появится в новом окне.Вы сами дошли до этого.

Теперь, если вы перетащите другую вкладку из главного окна в новое окно, вкладка будет добавлена ​​в блокнот нового окна вместо создания нового окна.

Кроме того, если вы перетащите все вкладки из нового окна обратно в главное окно, новое окно будет уничтожено (после того, как последняя вкладка будет удалена).

Ключ к этому?GroupId = 0 для всех ноутбуков.Они сами справляются с перетаскиванием.

Если вы хотите скрыть вкладки в новых окнах (перед их повторным подключением), вам, вероятно, следует рассмотреть встраиваемые виджеты, а не записные книжки.

Примечание: я использовал MonoDevelop под Linux для создания связанного приложения.

...