Ticket #8327: scumm-restore-selection-1.diff

File scumm-restore-selection-1.diff, 5.7 KB (added by SF/gjasny, 17 years ago)

Patch No. 1

  • common/config-manager.cpp

    RCS file: /cvsroot/scummvm/scummvm/common/config-manager.cpp,v
    retrieving revision 1.17
    diff -u -3 -p -r1.17 config-manager.cpp
    void ConfigManager::loadFile(const Strin  
    123123                        if (t[0] && t[0] != '#') {
    124124                                if (t[0] == '[') {
    125125                                        // It's a new domain which begins here.
    126                                         char *p = strchr(t, ']');
    127                                         if (!p) {
     126                                        char *p = t + 1;
     127                                        while (*p && (isalnum(*p) || *p=='-' || *p=='_'))
     128                                        p++;
     129
     130                                        switch (*p) {
     131                                        case '\0':
    128132                                                error("Config file buggy: no ] at the end of the domain name.\n");
    129                                         } else {
     133                                        case ']':
    130134                                                *p = 0;
    131                                                 // TODO: Some kind of domain name verification might be nice.
    132                                                 // E.g. restrict to only a-zA-Z0-9 and maybe -_  or so...
    133135                                                domain = t + 1;
     136                                                break;
     137                                        default:
     138                                                error("Config file buggy: %c is not a valid character of a domain name.\n", *p);
    134139                                        }
    135140                                } else {
    136141                                        // Skip leading whitespaces
    const String & ConfigManager::get(const  
    293298
    294299int ConfigManager::getInt(const String &key, const String &dom) const {
    295300        String value(get(key, dom));
    296         // Convert the string to an integer.
    297         // TODO: We should perform some error checking.
    298         return (int)strtol(value.c_str(), 0, 10);
     301        char *errpos;
     302        int ivalue = (int)strtol(value.c_str(), &errpos, 10);
     303        if (value.c_str()==errpos)
     304                error("Config file buggy: %s is not a valid integer.\n", errpos);
     305
     306        return ivalue;
    299307}
    300308
    301309bool ConfigManager::getBool(const String &key, const String &dom) const {
  • gui/ListWidget.cpp

    RCS file: /cvsroot/scummvm/scummvm/gui/ListWidget.cpp,v
    retrieving revision 1.35
    diff -u -3 -p -r1.35 ListWidget.cpp
    ListWidget::ListWidget(GuiObject *boss,  
    5151ListWidget::~ListWidget() {
    5252}
    5353
     54void ListWidget::setSelected(int item) {
     55        assert( item>=-1 && item<(int)_list.size() );
     56
     57        if(isEnabled()) {
     58                int oldSelectedItem = _selectedItem;
     59                _selectedItem = item;
     60
     61                if (oldSelectedItem != _selectedItem) {
     62                        if (_editMode) {
     63                                // undo any changes made
     64                                _list[oldSelectedItem] = _backupString;
     65                                _editMode = false;
     66                                drawCaret(true);
     67                        }
     68                        sendCommand(kListSelectionChangedCmd, _selectedItem);
     69                }
     70                scrollToCurrent();
     71                draw();
     72        }
     73}
     74
    5475void ListWidget::setList(const StringList &list) {
    5576        if (_editMode && _caretVisible)
    5677                drawCaret(true);
  • gui/ListWidget.h

    RCS file: /cvsroot/scummvm/scummvm/gui/ListWidget.h,v
    retrieving revision 1.21
    diff -u -3 -p -r1.21 ListWidget.h
    public:  
    6565        void setList(const StringList& list);
    6666        const StringList& getList()     const                   { return _list; }
    6767        int getSelected() const                                         { return _selectedItem; }
     68        void setSelected(int item);
    6869        const String& getSelectedString() const         { return _list[_selectedItem]; }
    6970        void setNumberingMode(NumberingMode numberingMode)      { _numberingMode = numberingMode; }
    7071        bool isEditable() const                                         { return _editable; }
  • gui/launcher.cpp

    RCS file: /cvsroot/scummvm/scummvm/gui/launcher.cpp,v
    retrieving revision 1.88
    diff -u -3 -p -r1.88 launcher.cpp
    LauncherDialog::LauncherDialog(GameDetec  
    339341        // Populate the list
    340342        updateListing();
    341343
    342         // TODO - make a default selection (maybe the game user played last?)
    343         //_list->setSelected(0);
    344 
     344        // Restore last selection
     345        String last = ConfMan.get(String("lastselectedgame"), ConfigManager::kApplicationDomain);
     346        if (!last.isEmpty()) {
     347                int itemToSelect = 0;
     348                StringList::const_iterator iter;
     349                for (iter = _domains.begin(); iter != _domains.end(); ++iter, ++itemToSelect) {
     350                        if (last == *iter) {
     351                                _list->setSelected(itemToSelect);
     352                                break;
     353                        }
     354                }
     355        }
     356       
    345357        // En-/Disable the buttons depending on the list selection
    346358        updateButtons();
    347359
    LauncherDialog::~LauncherDialog() {  
    353365        delete _browser;
    354366}
    355367
     368void LauncherDialog::close() {
     369        // Save last selection
     370        if (_list->getSelected() >=0)
     371                ConfMan.set(String("lastselectedgame"), _domains[_list->getSelected()], ConfigManager::kApplicationDomain);     
     372        else
     373                ConfMan.removeKey(String("lastselectedgame"), ConfigManager::kApplicationDomain);
     374 
     375        ConfMan.flushToDisk(); 
     376        Dialog::close();
     377}
     378
    356379void LauncherDialog::updateListing() {
    357380        Common::StringList l;
    358381
    void LauncherDialog::handleCommand(Comma  
    569592                updateButtons();
    570593                break;
    571594        case kQuitCmd:
    572 #ifdef __PALM_OS__
    573595                close();
    574 #endif
    575596                g_system->quit();
    576597                break;
    577598        default:
  • gui/launcher.h

    RCS file: /cvsroot/scummvm/scummvm/gui/launcher.h,v
    retrieving revision 1.18
    diff -u -3 -p -r1.18 launcher.h
    protected:  
    4545        Widget                  *_startButton;
    4646        Widget                  *_editButton;
    4747        Widget                  *_removeButton;
     48        Widget                  *_moveUpButton;
     49        Widget                  *_moveDownButton;
    4850        StringList              _domains;
    4951        GameDetector    &_detector;
    5052        BrowserDialog   *_browser;
    protected:  
    5254        void updateListing();
    5355        void updateButtons();
    5456       
     57        void close();
    5558        virtual void addGame();
    5659        void removeGame(int item);
    5760        void editGame(int item);