TMenu *TMenuView::readMenu( ipstream& is ) { TMenu *menu = new TMenu; TMenuItem **last = &(menu->items); TMenuItem *item = 0; uchar tok; is >> tok; while( tok != 0 ) { assert( tok == 0xFF ); item = new TMenuItem( 0, 0, (void *)0 ); *last = item; last = &(item->next); item->name = is.readString(); int temp; is >> item->command >> temp >> item->keyCode >> item->helpCtx; item->disabled = Boolean( temp ); if( item->name != 0 ) { if( item->command == 0 ) item->subMenu = readMenu( is ); else item->param = is.readString(); } is >> tok; } *last = 0; menu->deflt = menu->items; return menu; }
void *TMenuView::read( ipstream& is ) { TView::read( is ); menu = readMenu( is ); parentMenu = 0; current = 0; return this; }
bool kd::readMenu(QTreeWidgetItem &parent_item, QString §ion, QString &type) { QTreeWidgetItem *tmpitem; QString tmpstr; menu_file->beginGroup(section); QStringList keys = menu_file->allKeys(); menu_file->endGroup(); // debug /*QString tmpstr1; for(int i = 0; i < keys.size(); ++i) { QTextStream(&tmpstr1) << keys.at(i) << " "; } qDebug() << tmpstr1;*/ for(int i = 0; i < keys.size(); ++i) { tmpstr = QString::fromUtf8( menu_file->value( section + "/" + keys.at(i), "" ).toString().toAscii() ); qDebug() << "Value:" << keys.at(i) << " = " << tmpstr; if (tmpstr.length() > 1) { if(keys.at(i).compare("name") == 0) parent_item.setText(0, tmpstr.prepend(" ").prepend(parent_item.data(2,0).toString())); else { tmpitem = new QTreeWidgetItem; if(tmpstr.indexOf(':') != -1) { tmpitem->setText( 0, tmpstr.left(tmpstr.indexOf(':')).prepend(" ").prepend(keys.at(i)) ); tmpitem->setText( 1, tmpstr.mid(tmpstr.indexOf(':') + 1) ); tmpitem->setText( 2, keys.at(i) ); tmpitem->setText( 3, type ); } else { qDebug() << "Going into subsection"; tmpitem->setText( 2, keys.at(i) ); tmpitem->setText( 3, type ); readMenu(*tmpitem, tmpstr, type); } parent_item.addChild(tmpitem); } } } return true; }
bool World::loadWorld(Common::MacResManager *resMan) { Common::MacResIDArray resArray; Common::SeekableReadStream *res; Common::MacResIDArray::const_iterator iter; // Dumping interpreter code #if 1 res = resMan->getResource(MKTAG('C','O','D','E'), 1); warning("code size: %d", res->size()); byte *buf = (byte *)malloc(res->size()); res->read(buf, res->size()); Common::DumpFile out; out.open("code.bin"); out.write(buf, res->size()); out.close(); free(buf); delete res; #endif if ((resArray = resMan->getResIDArray(MKTAG('G','C','O','D'))).size() == 0) return false; // Load global script res = resMan->getResource(MKTAG('G','C','O','D'), resArray[0]); _globalScript = new Script(res); // TODO: read creator // Load main configuration if ((resArray = resMan->getResIDArray(MKTAG('V','E','R','S'))).size() == 0) return false; _name = resMan->getBaseFileName(); if (resArray.size() > 1) warning("Too many VERS resources"); if (!resArray.empty()) { debug(3, "Loading version info"); res = resMan->getResource(MKTAG('V','E','R','S'), resArray[0]); res->skip(10); byte b = res->readByte(); _weaponMenuDisabled = (b != 0); if (b != 0 && b != 1) error("Unexpected value for weapons menu"); res->skip(3); _aboutMessage = readPascalString(res); if (!scumm_stricmp(resMan->getBaseFileName().c_str(), "Scepters")) res->skip(1); // ???? _soundLibrary1 = readPascalString(res); _soundLibrary2 = readPascalString(res); delete res; } Common::String *message; if ((message = loadStringFromDITL(resMan, 2910, 1)) != NULL) { message->trim(); debug(2, "_gameOverMessage: %s", message->c_str()); _gameOverMessage = message; } if ((message = loadStringFromDITL(resMan, 2480, 3)) != NULL) { message->trim(); debug(2, "_saveBeforeQuitMessage: %s", message->c_str()); _saveBeforeQuitMessage = message; } if ((message = loadStringFromDITL(resMan, 2490, 3)) != NULL) { message->trim(); debug(2, "_saveBeforeCloseMessage: %s", message->c_str()); _saveBeforeCloseMessage = message; } if ((message = loadStringFromDITL(resMan, 2940, 2)) != NULL) { message->trim(); debug(2, "_revertMessage: %s", message->c_str()); _revertMessage = message; } // Load scenes resArray = resMan->getResIDArray(MKTAG('A','S','C','N')); debug(3, "Loading %d scenes", resArray.size()); for (iter = resArray.begin(); iter != resArray.end(); ++iter) { res = resMan->getResource(MKTAG('A','S','C','N'), *iter); Scene *scene = new Scene(resMan->getResName(MKTAG('A','S','C','N'), *iter), res); res = resMan->getResource(MKTAG('A','C','O','D'), *iter); if (res != NULL) scene->_script = new Script(res); res = resMan->getResource(MKTAG('A','T','X','T'), *iter); if (res != NULL) { scene->_textBounds = readRect(res); scene->_fontType = res->readUint16BE(); scene->_fontSize = res->readUint16BE(); Common::String text; while (res->pos() < res->size()) { char c = res->readByte(); if (c == 0x0d) c = '\n'; text += c; } scene->_text = text; delete res; } addScene(scene); } // Load Objects resArray = resMan->getResIDArray(MKTAG('A','O','B','J')); debug(3, "Loading %d objects", resArray.size()); for (iter = resArray.begin(); iter != resArray.end(); ++iter) { res = resMan->getResource(MKTAG('A','O','B','J'), *iter); addObj(new Obj(resMan->getResName(MKTAG('A','O','B','J'), *iter), res)); } // Load Characters resArray = resMan->getResIDArray(MKTAG('A','C','H','R')); debug(3, "Loading %d characters", resArray.size()); for (iter = resArray.begin(); iter != resArray.end(); ++iter) { res = resMan->getResource(MKTAG('A','C','H','R'), *iter); Chr *chr = new Chr(resMan->getResName(MKTAG('A','C','H','R'), *iter), res); addChr(chr); // TODO: What if there's more than one player character? if (chr->_playerCharacter) _player = chr; } // Load Sounds resArray = resMan->getResIDArray(MKTAG('A','S','N','D')); debug(3, "Loading %d sounds", resArray.size()); for (iter = resArray.begin(); iter != resArray.end(); ++iter) { res = resMan->getResource(MKTAG('A','S','N','D'), *iter); addSound(new Sound(resMan->getResName(MKTAG('A','S','N','D'), *iter), res)); } if (!_soundLibrary1.empty()) { loadExternalSounds(_soundLibrary1); } if (!_soundLibrary2.empty()) { loadExternalSounds(_soundLibrary2); } // Load Patterns res = resMan->getResource(MKTAG('P','A','T','#'), 900); if (res != NULL) { int count = res->readUint16BE(); debug(3, "Loading %d patterns", count); for (int i = 0; i < count; i++) { byte *pattern = (byte *)malloc(8); res->read(pattern, 8); _patterns->push_back(pattern); } delete res; } else { /* Enchanted Scepters did not use the PAT# resource for the textures. */ res = resMan->getResource(MKTAG('C','O','D','E'), 1); if (res != NULL) { res->skip(0x55ac); for (int i = 0; i < 29; i++) { byte *pattern = (byte *)malloc(8); res->read(pattern, 8); _patterns->push_back(pattern); } } delete res; } res = resMan->getResource(MKTAG('M','E','N','U'), 2001); if (res != NULL) { Common::StringArray *menu = readMenu(res); _aboutMenuItemName.clear(); Common::String string = menu->operator[](1); for (uint i = 0; i < string.size() && string[i] != ';'; i++) // Read token _aboutMenuItemName += string[i]; delete menu; delete res; } res = resMan->getResource(MKTAG('M','E','N','U'), 2004); if (res != NULL) { Common::StringArray *menu = readMenu(res); _commandsMenuName = menu->operator[](0); _commandsMenu = menu->operator[](1); delete menu; delete res; } res = resMan->getResource(MKTAG('M','E','N','U'), 2005); if (res != NULL) { Common::StringArray *menu = readMenu(res); _weaponsMenuName = menu->operator[](0); delete menu; delete res; } // TODO: Read Apple menu and get the name of that menu item.. // store global info in state object for use with save/load actions //world.setCurrentState(initialState); // pass off the state object to the world return true; }
kd::kd() { ready_to_die = false; /* Creating top-right area (Line input and button) */ item_input = new QLineEdit; item_button = new QPushButton(tr("Add")); item_button->setDefault(true); bottom_h_layout = new QHBoxLayout; bottom_h_layout->addWidget(item_input); bottom_h_layout->addWidget(item_button); items_tree = new QTreeWidget; items_tree->setColumnCount(2); items_tree->setHeaderLabels(QStringList() << tr("Goods") << tr("Price") ); added_items = new QTextBrowser; central_widget = new QSplitter; central_widget->addWidget(items_tree); central_widget->addWidget(added_items); central_widget->setSizePolicy(QSizePolicy::Expanding,QSizePolicy::Expanding); /* Create right side (top area, suggest label and list of added items) */ item_suggest = new QLabel; right_v_layout = new QVBoxLayout; right_v_layout->addWidget(item_suggest); right_v_layout->addWidget(central_widget); right_v_layout->addLayout(bottom_h_layout); right_widget = new QWidget; right_widget->setLayout(right_v_layout); setCentralWidget( right_widget ); item_input->setFocus(); /* Restore window settings */ app_settings = new QSettings(QSettings::IniFormat, QSettings::UserScope, "Stinky", "Celtic House Menu"); app_settings->beginGroup("MainWindow"); resize(app_settings->value("Size", QSize(400, 400)).toSize()); move(app_settings->value("Position", QPoint(200, 200)).toPoint()); central_widget->restoreState( app_settings->value("Splitter").toByteArray() ); app_settings->endGroup(); menu_file = new QSettings(QSettings::IniFormat, QSettings::SystemScope, "Stinky", "Celtic House Menu"); qDebug() << "Menu in " << menu_file->fileName(); cards = new QSettings(QSettings::IniFormat, QSettings::SystemScope, "Stinky", "cards"); qDebug() << "Menu in " << cards->fileName(); // Cards debug QStringList ckeys = cards->allKeys(); for(int i = 0; i < ckeys.size(); ++i) { qDebug() << "Value:" << ckeys.at(i) << " = " << QString::fromUtf8( cards->value( ckeys.at(i), "Ы" ).toString().toAscii() ); } QString logs_dir = menu_file->value("Settings/LogsDir", "").toString(); if(logs_dir.length() > 1) logger = new Logger(logs_dir); else logger = new Logger; QString errmsg; if(logger->getError(errmsg) != QFile::NoError) { QMessageBox msgBox; msgBox.setIcon(QMessageBox::Critical); msgBox.setText(tr("Can not open log file.")); msgBox.setInformativeText(errmsg); msgBox.exec(); ready_to_die = true; return; } // readMenu QString tmpstr = QString("root"); readMenu(*items_tree->invisibleRootItem(), tmpstr, tmpstr); tmpstr = QString("launcher"); QTreeWidgetItem *tmpitem = new QTreeWidgetItem; QBrush *red = new QBrush(Qt::red); tmpitem->setForeground(0, *red); readMenu(*tmpitem, tmpstr, tmpstr); tmpitem->setText( 2, "/" ); items_tree->addTopLevelItem(tmpitem); /*End read menu*/ items_tree->expandAll(); items_tree->resizeColumnToContents(1); items_tree->resizeColumnToContents(0); items_tree->collapseAll(); totalprice = 0; QAction* a_quit = new QAction(this); QAction* a_rotate = new QAction(this); a_quit->setText( "Quit" ); a_rotate->setText( "Rotate" ); QMenu *filemenu = menuBar()->addMenu( "File" ); filemenu->addAction( a_quit ); filemenu->addAction( a_rotate ); //status_bar = new QStatusBar(central_widget); //statusBar(); updateCurrentTotal(); connect(a_quit, SIGNAL(triggered()), SLOT(close()) ); connect(a_rotate, SIGNAL(triggered()), SLOT(onRotate()) ); connect(item_button, SIGNAL(clicked()), SLOT(onAddButtonPress()) ); connect(item_input, SIGNAL(returnPressed()), SLOT(onAddButtonPress()) ); connect(item_input, SIGNAL(textChanged(QString)), SLOT(onTextChange(QString)) ); connect(items_tree, SIGNAL(itemClicked(QTreeWidgetItem*,int)), SLOT(onItemClick(QTreeWidgetItem*,int)) ); connect(items_tree, SIGNAL(itemDoubleClicked(QTreeWidgetItem*,int)), SLOT(onDoubleClick(QTreeWidgetItem*,int)) ); }
/*ARGSUSED*/ int main(int argc, char *argv[]) { XEvent ev; XGCValues gv; XSetWindowAttributes attr; (void) argc; argv0 = argv[0]; /* Open a connection to the X server. */ dpy = XOpenDisplay(""); if (dpy == 0) Panic("can't open display."); get_resources(); /* Find the screen's dimensions. */ display_width = DisplayWidth(dpy, DefaultScreen(dpy)); display_height = DisplayHeight(dpy, DefaultScreen(dpy)); /* Set up an error handler. */ XSetErrorHandler(ErrorHandler); /* Get the pixel values of the only two colours we use. */ black = BlackPixel(dpy, DefaultScreen(dpy)); white = WhitePixel(dpy, DefaultScreen(dpy)); /* Get font. */ font = XLoadQueryFont(dpy, font_name); if (font == 0) font = XLoadQueryFont(dpy, "fixed"); if (font == 0) Panic("can't find a font."); /* Get a cursor. */ initCursor(); /* Create the window. */ root = DefaultRootWindow(dpy); attr.override_redirect = True; attr.background_pixel = white; attr.border_pixel = black; attr.cursor = mouse_cursor; attr.event_mask = ExposureMask | VisibilityChangeMask | ButtonMotionMask | PointerMotionHintMask | ButtonPressMask | ButtonReleaseMask | StructureNotifyMask | EnterWindowMask | LeaveWindowMask; window = XCreateWindow(dpy, root, 0, 0, display_width, 1.2 * (font->ascent + font->descent), 0, CopyFromParent, InputOutput, CopyFromParent, CWOverrideRedirect | CWBackPixel | CWBorderPixel | CWCursor | CWEventMask, &attr); /* Create GC. */ gv.foreground = black; gv.background = white; gv.font = font->fid; gc = XCreateGC(dpy, window, GCForeground | GCBackground | GCFont, &gv); /* Create the menu items. */ readMenu(); /* Bring up the window. */ XMapRaised(dpy, window); /* Make sure all our communication to the server got through. */ XSync(dpy, False); /* The main event loop. */ for (;;) { getEvent(&ev); dispatch(&ev); } }