コード例 #1
0
ファイル: mainwindow.py プロジェクト: wozozo/KittyWalk2
class MainWindow(QMainWindow):
    def __init__(self):
        QMainWindow.__init__(self)
        self._main_splitter = QSplitter(self)
        self._bbs_widget = KittyWidgetStack(self._main_splitter)
        self._right_splitter = QSplitter(self._main_splitter)
        self._topic_list_widget = TopicListWidget(self._right_splitter)
        self._message_widget = MessageWidget(self._right_splitter)
        self._board_tree_widget = BoardTreeWidget(self._main_splitter)
        self._bookmark_list_widget = BookmarkListWidget(self._main_splitter)
        self._actions = self._build_actions()
        self._init_tool_bar()
        self._init_menu_bar()
        self._init_status_bar()
        self._connect()
        self._initial_config()

    def display_board_tree(self, bbs):
        self._board_tree_widget.display(bbs)

    def _build_actions(self):
        actions = {}
        actions["toggle-bbs-widget"] =\
          \
          QAction(u("掲示板一覧"),
                  QIconSet(QPixmap(os.path.join(config.ICONPATH, "leftpane.png"))),
                  u("掲示板一覧"),
                  0, self, "", True)
        actions["toggle-topic-list-widget"] =\
          QAction(u("スレッド一覧"),
                  QIconSet(QPixmap(os.path.join(config.ICONPATH, "toprightpane.png"))),
                  u("スレッド一覧"),
                  0, self, "", True)
        actions["toggle-message-widget"] =\
          QAction(u("書込内容"),
                  QIconSet(QPixmap(os.path.join(config.ICONPATH,
                                                "bottomrightpane.png"))),
                  u("書込内容"),
                  0, self, "", True)
        return actions

    def _init_tool_bar(self):
        toobar = QToolBar(self)
        self._actions["toggle-bbs-widget"].addTo(toobar)
        self._actions["toggle-topic-list-widget"].addTo(toobar)
        self._actions["toggle-message-widget"].addTo(toobar)

    def _init_menu_bar(self):
        menubar = self.menuBar()
        # File
        file_menu = QPopupMenu(menubar)
        file_menu.insertItem(u("掲示板一覧更新(&U)"), self._reload_board_tree)
        file_menu.insertSeparator()
        file_menu.insertItem(u("終了(&X)"), self.close)
        menubar.insertItem(u("ファイル(&F)"), file_menu)
        # View
        view_menu = QPopupMenu(menubar)
        self._actions["toggle-bbs-widget"].addTo(view_menu)
        self._actions["toggle-topic-list-widget"].addTo(view_menu)
        self._actions["toggle-message-widget"].addTo(view_menu)
        view_menu.insertItem(u("フォント変更(&F)"), self._change_font)
        menubar.insertItem(u("表示(&V)"), view_menu)
        # Help
        help_menu = QPopupMenu(menubar)
        help_menu.insertItem(u("KittyWalk について(&A)"), show_about_dialog)
        menubar.insertItem(u("ヘルプ(&H)"), help_menu)

    def _init_status_bar(self):
        self.statusBar().message("")

    def _connect(self):
        self.connect(self._board_tree_widget,
                    PYSIGNAL("requestOpen"),
                    PYSIGNAL("requestOpenTopicList"))
        self.connect(self._actions["toggle-bbs-widget"],
                     SIGNAL("toggled(bool)"),
                     self._toggle_bbs_widget)
        self.connect(self._actions["toggle-topic-list-widget"],
                     SIGNAL("toggled(bool)"),
                     self._toggle_topic_list_widget)
        self.connect(self._actions["toggle-message-widget"],
                     SIGNAL("toggled(bool)"),
                     self._toggle_message_widget)
        self.connect(self._topic_list_widget,
                     PYSIGNAL("requestReloadTopicList"),
                     PYSIGNAL("requestReloadTopicList"))
        self.connect(self._topic_list_widget,
                     PYSIGNAL("requestOpenMessages"),
                     PYSIGNAL("requestOpenMessages"))
        self.connect(self._message_widget,
                     PYSIGNAL("requestReloadMessages"),
                     PYSIGNAL("requestReloadMessages"))
        self.connect(self._message_widget,
                     PYSIGNAL("requestBookmark"),
                     PYSIGNAL("requestAppendBookmark"))
        self.connect(self._bookmark_list_widget,
                     PYSIGNAL("requestOpenMessages"),
                     PYSIGNAL("requestOpenMessages"))
        self.connect(self._bookmark_list_widget,
                     PYSIGNAL("requestRemoveBookmark"),
                     PYSIGNAL("requestRemoveBookmark"))
        self.connect(self._topic_list_widget,
                     PYSIGNAL("requestAppendBookmark"),
                     PYSIGNAL("requestAppendBookmark"))

    def _initial_config(self):
        self.setCaption("KittyWalk Qt")
        self.setCentralWidget(self._main_splitter)
        self._right_splitter.setOrientation(Qt.Vertical)
        self.setIcon(QPixmap(os.path.join(config.ICONPATH, "kittywalk.png")))
        self._bbs_widget.add(self._board_tree_widget, u("2ちゃんねる"))
        self._bbs_widget.add(self._bookmark_list_widget, u("ブックマーク"))
        self._bbs_widget.raiseWidget(0)
        self._topic_list_widget.hide()
        self._message_widget.hide()
        self._actions["toggle-bbs-widget"].setOn(True)
        self._actions["toggle-topic-list-widget"].setOn(True)
        self._actions["toggle-message-widget"].setOn(True)
        self.resize(config.get("gui-mainwindow-width", 640),
                    config.get("gui-mainwindow-height", 480))
        self._main_splitter.setSizes(config.get("gui-mainwidget-sizes",[1,4]))
        self._right_splitter.setSizes(
          config.get("gui-rightpane-sizes",[1,4]))

    def echo(self, text):
        self.statusBar().message(text)

    def display_bookmark_list(self, bookmark):
        self._bookmark_list_widget.display(bookmark)

    def display_topic_list(self, board, topics, newtab):
        self._topic_list_widget.display(board, topics, newtab)
        self._actions["toggle-topic-list-widget"].setOn(True)

    def display_messages(self, topic, messages, newtab):
        self._message_widget.display(topic, messages, newtab)
        self._actions["toggle-message-widget"].setOn(True)

    def set_message_font(self, font):
        self._message_widget.set_font(font)

    def _toggle_bbs_widget(self, on):
        self._toggle_widget(self._bbs_widget, on)

    def _toggle_topic_list_widget(self, on):
        self._toggle_widget(self._topic_list_widget, on)

    def _toggle_message_widget(self, on):
        self._toggle_widget(self._message_widget, on)

    def _toggle_widget(self, widget, on):
        if on:
            widget.show()
        else:
            widget.hide()

    def _reload_board_tree(self):
        self.emit(PYSIGNAL("requestReloadBoardTree"), ())

    def close(self, alsoDelete):
        config.set("gui-mainwindow-width", self.width())
        config.set("gui-mainwindow-height", self.height())
        config.set("gui-mainwidget-sizes", self._main_splitter.sizes())
        config.set("gui-rightpane-sizes", self._right_splitter.sizes())
        return QWidget.close(self, alsoDelete)

    def _change_font(self):
        self.emit(PYSIGNAL("requestChangeFont"),
                  (self._message_widget.font(),))