QTfrontend/ui/widget/SmartLineEdit.cpp
changeset 6187 59ff93c0ae2d
parent 6170 2b1748161278
child 6197 4ce7c29799b9
equal deleted inserted replaced
6186:255aff92216d 6187:59ff93c0ae2d
    29 {
    29 {
    30     m_whitespace = QRegExp("\\s");
    30     m_whitespace = QRegExp("\\s");
    31 
    31 
    32     m_cmds  = new QStringList();
    32     m_cmds  = new QStringList();
    33     m_nicks = new QStringList();
    33     m_nicks = new QStringList();
       
    34     m_sorted_nicks = new QMap<QString, QString>();
    34 
    35 
    35     resetAutoCompletionStatus();
    36     resetAutoCompletionStatus();
    36 
    37 
    37     // reset autocompletion status when cursor is moved or content is changed
    38     // reset autocompletion status when cursor is moved or content is changed
    38     connect(this, SIGNAL(cursorPositionChanged(int, int)),
    39     connect(this, SIGNAL(cursorPositionChanged(int, int)),
    40     connect(this, SIGNAL(textChanged(const QString&)),
    41     connect(this, SIGNAL(textChanged(const QString&)),
    41             this, SLOT(resetAutoCompletionStatus()));
    42             this, SLOT(resetAutoCompletionStatus()));
    42 }
    43 }
    43 
    44 
    44 
    45 
       
    46 SmartLineEdit::~SmartLineEdit()
       
    47 {
       
    48     delete m_cmds;
       
    49     delete m_nicks;
       
    50     delete m_sorted_nicks;
       
    51 }
       
    52 
       
    53 
    45 void SmartLineEdit::addCommands(const QStringList & commands)
    54 void SmartLineEdit::addCommands(const QStringList & commands)
    46 {
    55 {
    47     m_keywordMutex.lock();
    56     m_keywordMutex.lock();
    48 
    57 
    49     m_cmds->append(commands);
    58     m_cmds->append(commands);
    67 
    76 
    68 void SmartLineEdit::addNickname(const QString & name)
    77 void SmartLineEdit::addNickname(const QString & name)
    69 {
    78 {
    70     m_keywordMutex.lock();
    79     m_keywordMutex.lock();
    71 
    80 
       
    81     m_sorted_nicks->insert(name.toLower(), name);
    72     m_nicks->append(name);
    82     m_nicks->append(name);
    73 
    83 
    74     m_keywordMutex.unlock();
    84     m_keywordMutex.unlock();
    75 }
    85 }
    76 
    86 
    77 
    87 
    78 void SmartLineEdit::removeNickname(const QString & name)
    88 void SmartLineEdit::removeNickname(const QString & name)
    79 {
    89 {
    80     m_keywordMutex.lock();
    90     m_keywordMutex.lock();
    81 
    91 
       
    92     m_sorted_nicks->remove(name.toLower());
    82     m_nicks->removeAll(name);
    93     m_nicks->removeAll(name);
    83 
    94 
    84     m_keywordMutex.unlock();
    95     m_keywordMutex.unlock();
    85 }
    96 }
    86 
    97 
    89 {
   100 {
    90     // forget keywords
   101     // forget keywords
    91     m_keywordMutex.lock();
   102     m_keywordMutex.lock();
    92 
   103 
    93     m_cmds->clear();
   104     m_cmds->clear();
       
   105     m_sorted_nicks->clear();
    94     m_nicks->clear();
   106     m_nicks->clear();
    95     resetAutoCompletionStatus();
   107     resetAutoCompletionStatus();
    96 
   108 
    97     m_keywordMutex.unlock();
   109     m_keywordMutex.unlock();
    98 
   110 
   161     }
   173     }
   162     else
   174     else
   163     {
   175     {
   164         m_keywordMutex.lock();
   176         m_keywordMutex.lock();
   165         m_cmds->sort();
   177         m_cmds->sort();
   166         m_nicks->sort();
   178         m_nicks = new QStringList(m_sorted_nicks->values());
   167         m_keywordMutex.unlock();
   179         m_keywordMutex.unlock();
   168 
   180 
   169         int cp = cursorPosition();
   181         int cp = cursorPosition();
   170 
   182 
   171         // cursor is not in or at end/beginning of word
   183         // cursor is not in or at end/beginning of word