Esempio n. 1
0
void GuiFindToolBar::on_findClose()
{
    GuiTerminalWindow *t;

    findTextFlag = false;
    mainWnd->menuGetActionById(MENU_FIND_NEXT)->setEnabled(false);
    mainWnd->menuGetActionById(MENU_FIND_PREVIOUS)->setEnabled(false);
    mainWnd->findToolBar = NULL;
    this->deleteLater();

    if (t=mainWnd->getCurrentTerminal()) {
        t->viewport()->repaint();
        t->setFocus();
    }
}
Esempio n. 2
0
void GuiMainWindow::contextMenuFind()
{
    if (!this->getCurrentTerminal())
        return;

    if (!findToolBar) {
        findToolBar = new GuiFindToolBar(this);
        findToolBar->show();

        GuiTerminalWindow *t = getCurrentTerminal();
        findToolBar->move(t->viewport()->width() - findToolBar->width(),
                          t->mapTo(this, QPoint(0,0)).y());

        menuGetActionById(MENU_FIND_NEXT)->setEnabled(true);
        menuGetActionById(MENU_FIND_PREVIOUS)->setEnabled(true);
    } else {
        findToolBar->on_findClose();
    }
}
Esempio n. 3
0
void GuiFindToolBar::on_findDown()
{
    termline *line;
    tree234 *whichtree;
    unsigned long tchar;
    GuiTerminalWindow *gterm = mainWnd->getCurrentTerminal();
    Terminal *term;
    QScrollBar *scrollbar;
    QString str = "";
    int tempStartPosition = 0;
    int tempCol, tempRow;

    if (!gterm)
        return;

    term = gterm->term;
    scrollbar = gterm->verticalScrollBar();

    findTextFlag = true;
    if(getSearchedText() == "")
    {
        findTextFlag = false;
        gterm->viewport()->repaint();
        return;
    }
    tempCol = currentCol;
    tempRow = currentRow;
    currentCol = currentCol + currentSearchedText.length();

    if(getSearchedText().compare(currentSearchedText, Qt::CaseInsensitive))
    {
        pageStartPosition = scrollbar->value();
        currentSearchedText = getSearchedText();
        if(currentCol < 0)
            currentCol = 0;
        whichtree = NULL;
    }

    if(currentRow < 0)
        currentRow = scrollbar->value();

    while(1)
    {
        str = "";

        if(currentRow >= scrollbar->maximum()+term->rows)
        {
            currentRow = 0;
        }
        if(count234(term->scrollback) > currentRow)
        {
            whichtree = term->scrollback;
            unsigned char *cline = (unsigned char*)index234(whichtree, currentRow);
            line = (termline*) decompressline(cline, NULL);
        }
        else
        {
            whichtree = term->screen;
            line = (termline*)index234(whichtree, abs(currentRow - count234(term->scrollback)));
        }
        for(int i = 0; line && i < line->size; i++)
        {
            //qDebug() << line->chars[i].chr;
            tchar = line->chars[i].chr;
            switch (tchar & CSET_MASK)
            {
              case CSET_ASCII:
            tchar = term->ucsdata->unitab_line[tchar & 0xFF];
            break;
              case CSET_LINEDRW:
            tchar = term->ucsdata->unitab_xterm[tchar & 0xFF];
            break;
              case CSET_SCOACS:
            tchar = term->ucsdata->unitab_scoacs[tchar&0xFF];
            break;
            }
            str.append((char)tchar);
        }
        if(currentCol < term->cols && (currentCol = str.indexOf(currentSearchedText, currentCol, Qt::CaseInsensitive)) >= 0)
        {
            if(pageStartPosition != scrollbar->value())
                gterm->setScrollBar(scrollbar->maximum()+term->rows, pageStartPosition, term->rows);
            else
            {
                if(currentRow < scrollbar->value() || currentRow >= (scrollbar->value() + term->rows))
                {
                    gterm->setScrollBar(scrollbar->maximum()+term->rows, currentRow, term->rows);
                    pageStartPosition = scrollbar->value();
                }
            }
            currentSearchedText = str.mid(currentCol, currentSearchedText.length());
            tempStartPosition = pageStartPosition;
            break;
        }
        tempStartPosition++;
        if(tempStartPosition > (scrollbar->maximum()+term->rows))
        {
            findTextFlag = false;
            currentCol = tempCol;
            currentRow = tempRow;
            gterm->viewport()->repaint();
            return;
        }
        currentRow++;
        currentCol = 0;
    }
    gterm->viewport()->repaint();
}