void CIndexedPriorityQueue::updateNode(const size_t index, const C_FLOAT64 new_key) { size_t pos = mIndexPointer[index]; // cout << "Setting heap at " << pos << " to be " << new_key << endl; mHeap[pos].mKey = new_key; updateAux(pos); }
void CIndexedPriorityQueue::updateAux(const size_t pos) { size_t parent_pos = parent(pos); C_FLOAT64 keyval = mHeap[pos].mKey; if (parent_pos != C_INVALID_INDEX && keyval < mHeap[parent_pos].mKey) { swapNodes(pos, parent_pos); updateAux(parent_pos); } else { size_t left = leftChild(pos); size_t right = rightChild(pos); C_FLOAT64 min = 0.0; size_t min_pos = 0; if (left < mHeap.size()) { min = mHeap[left].mKey; min_pos = left; } C_FLOAT64 val; // = mHeap[right].mKey; //!!! if ((right < mHeap.size()) && ((val = mHeap[right].mKey) < min)) { min = val; min_pos = right; } if ((min_pos > 0) && (keyval > min)) { // swapNodes(mHeap[pos].mIndex, min_pos); swapNodes(pos, min_pos); updateAux(min_pos); } } }
void MainController::init() { loadCfg(); qDebug()<<"MainController::init()"; qmlRegisterType<CandidateWord>(); mTopLevel = new TopLevel; mView = new QDeclarativeView; mModel = MainModel::self(); mModel->setIsHorizontal(mIsHorizontal); mSkinBase = new SkinBase; mTopLevel->setCenterWidget(mView); mView->setContentsMargins(0, 0, 0, 0); mView->setResizeMode(QDeclarativeView::SizeViewToRootObject); mView->setResizeAnchor(QGraphicsView::AnchorViewCenter); mView->viewport()->setAutoFillBackground(false); mView->rootContext()->setContextProperty("mainCtrl", this); mView->rootContext()->setContextProperty("mainModel", mModel); mView->rootContext()->setContextProperty("mainSkin", mSkinBase); mView->rootContext()->setContextProperty("mainWidget", mTopLevel); mView->setSource(QUrl("qrc:/qml/main.qml")); mAgent = new PanelAgent(this); mSystemTray = new QSystemTrayIcon(QIcon::fromTheme("fcitx"), this); mTrayMenu = new SystemTrayMenu(mAgent); mAgent->created(); mTrayMenu->init(); mSystemTray->setContextMenu(mTrayMenu); mSystemTray->setToolTip("fcitx-qimpanel"); mSystemTray->show(); QObject::connect(mAgent, SIGNAL(updateProperty(KimpanelProperty)), this, SLOT(updateProperty(KimpanelProperty))); QObject::connect(mAgent, SIGNAL(updatePreeditText(QString, QList<TextAttribute>)), this, SLOT(updatePreeditText(QString, QList<TextAttribute>))); QObject::connect(mAgent, SIGNAL(updateLookupTable(KimpanelLookupTable)), this, SLOT(updateLookupTable(KimpanelLookupTable))); QObject::connect(mAgent, SIGNAL(updateLookupTableFull(KimpanelLookupTable, int, int)), this, SLOT(updateLookupTableFull(KimpanelLookupTable, int, int))); QObject::connect(mAgent, SIGNAL(updateSpotLocation(int, int)), this, SLOT(updateSpotLocation(int, int))); QObject::connect(mAgent, SIGNAL(updateSpotRect(int, int, int, int)), this, SLOT(updateSpotRect(int, int, int, int))); QObject::connect(mAgent, SIGNAL(showPreedit(bool)), this, SLOT(showPreedit(bool))); QObject::connect(mAgent, SIGNAL(showAux(bool)), this, SLOT(showAux(bool))); QObject::connect(mAgent, SIGNAL(updateAux(QString, QList<TextAttribute>)), this, SLOT(updateAux(QString, QList<TextAttribute>))); QObject::connect(mAgent, SIGNAL(showLookupTable(bool)), this, SLOT(showLookupTable(bool))); QObject::connect(mAgent, SIGNAL(updateLookupTableCursor(int)), this, SLOT(updateLookupTableCursor(int))); QObject::connect(mAgent, SIGNAL(updatePreeditCaret(int)), this, SLOT(updatePreeditCaret(int))); // socketpair(AF_UNIX, SOCK_STREAM, 0, mSigFd); // mSocketNotifier = new QSocketNotifier(mSigFd[1], QSocketNotifier::Read, this); // connect(mSocketNotifier, SIGNAL(activated(int)), this, SLOT(handleSig())); creatDBusService();//创建DBus服务 }